|
オセロゲームを作り始めたところなのですがわからないことがあります。
実行すると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");
}
|