【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.18751

オセロの駒の表示
投稿者---yukiko(2004/12/15 22:33:30)


オセロゲームを作り始めたところなのですがわからないことがあります。
実行すると8*8のオセロ盤が表示され、その座標値を入力して駒を置きます。
Y軸(縦)が0〜7までの数字で、X軸(横)がa〜hまでのアルファベットです。
左隅に置く場合は、x:0 y:aと入力します。これできちんと左隅に配置された
のですが、x:2 y:dと入力したとき、x:3 y:cの位置に配置されてしまいました。
縦と横の値が表示された盤とは逆になっているようです。
プログラム中のwhile(1)のあたりをどのように改造すれば駒がきちんと座標値
通りに配置されるのでしょうか。どなたかご教授ください。お願い致します。
OSはWindowsXPで環境はMicrosoftのVisual Stdioです。


#include<stdio.h>

#define  BAN_SIZE    8
#define  BLACK       1
#define  WHITE       2

void ShowBoard(int board[][8]); /* オセロの盤を表示する関数 */

int main(void)
{
int board[8][8];
int i,j;
char buff[100];

for(i=0;i<BAN_SIZE;i++)
for(j=0;j<BAN_SIZE;j++)
board[i][j]=0;

/* 駒の初期配置 */
board[3][3]=WHITE;
board[4][4]=WHITE;
board[3][4]=BLACK;
board[4][3]=BLACK;

ShowBoard(board);

while(1){
/* 先手 */
while(1){
printf("黒の駒の値を入力してください。\n");
printf("x:");
fgets(buff,100,stdin);
sscanf(buff,"%d",&i);
printf("y:");
fgets(buff,100,stdin);

if(0<=i && i<=7)
if(0<=(buff[0]-'a') && (buff[0]-'a')<=7){
board[i][buff[0]-'a']=BLACK;
break;
}
}
ShowBoard(board);

/* 後手 */
while(1){
printf("白の駒の値を入力してください。\n");
printf("x:");
fgets(buff,100,stdin);
sscanf(buff,"%d",&i);
printf("y:");
fgets(buff,100,stdin);

if(0<=i && i<=7)
if(0<=(buff[0]-'a') && (buff[0]-'a')<=7){
board[i][buff[0]-'a']=WHITE;
break;
}
}
ShowBoard(board);
}
}
}

void ShowBoard(int board[][8])
{
int i,j;

printf("   a  b  c  d  e  f  g  h\n");

for(i=0;i<BAN_SIZE;i++){
printf("  ");
for(j=0;j<BAN_SIZE;j++){
printf("+--");
}
printf("+\n");

printf(" %d",i);
for(j=0;j<BAN_SIZE;j++){
printf("|");
switch(board[j][i]){
case BLACK:
printf("●");
break;
case WHITE:
printf("○");
break;
default:
printf("  ");
break;
}
}
printf("|\n");
}
printf("  ");

for(j=0;j<BAN_SIZE;j++){
printf("+---");
}
printf("+\n");
}



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:オセロの駒の表示 18753 もぐりん 2004/12/15 23:02:22
<子記事> Re:オセロの駒の表示 18754 ぽこ 2004/12/15 23:08:34


No.18753

Re:オセロの駒の表示
投稿者---もぐりん(2004/12/15 23:02:22)


まずは【掲示板ご利用上の注意】を読んで、再度質問してみては?
ソースを提示する場合は、HTML形式ツールを使用してインデントを付けて
ください。
今のままだと、だれも読む気を起こしません。
それとコンパイルはしていますか?




この投稿にコメントする

削除パスワード

No.18754

Re:オセロの駒の表示
投稿者---ぽこ(2004/12/15 23:08:34)


>縦と横の値が表示された盤とは逆になっているようです。

原因はずばりこれでは?
board[][]は、board[X][Y]のつもりがどこかでboard[Y][X]と扱っている
(もしくはその逆)のでは?



この投稿にコメントする

削除パスワード

No.18768

解決しました
投稿者---yukiko(2004/12/16 20:49:31)


HTML形式ツール使いましたが字下げされていませんでした。
なぜでしょう…。次から自分で字下げします。
あと、やっぱり私のうっかりミスで上手く表示されなかったみたいです。
アドバイスくださった方ありがとうございました。


この投稿にコメントする

削除パスワード

No.18769

Re:解決しました
投稿者---Hermit(2004/12/16 21:56:08)


>HTML形式ツール使いましたが字下げされていませんでした。
>なぜでしょう…。次から自分で字下げします。

もしかして、元のソースは、インデント無しですか?
HTML形式ツールは、スペースやタブ(その他の文字)が普通に書いては
表示されないため、変換するだけです。
もともと字下げされていないソースは、字下げ表示されません


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧