色々試した結果、このエラーが残っています。
どなたかわかりやすく教えてください。
コンパイルエラーrandは再定義されています。異なるリンケージです。
と出ます。
#define BOARDSIZE 8
//状態を定義
#define NONE 0
#define BLACK 1
#define WHITE 2
//盤面
char board[BOARDSIZE][BOARDSIZE];
//初期化関数
void setBOARD(void)
{
int i;/*今BOARDSIZEは 8なのでループはiが~63まで繰り返す*/
for (i = 0; i < BOARDSIZE*BOARDSIZE; i++)
{
board[i / BOARDSIZE][i%BOARDSIZE] = NONE;
}
board[BOARDSIZE / 2 - 1][BOARDSIZE / 2] = BLACK;//[3][4]
board[BOARDSIZE / 2][BOARDSIZE / 2 - 1] = BLACK;//[4][3]
board[BOARDSIZE / 2][BOARDSIZE / 2] = WHITE;//[4][4]
board[BOARDSIZE / 2 - 1][BOARDSIZE / 2 - 1] = WHITE;//[3][3]
}
#include<stdio.h> //盤面表示関数
void disp(void)
{
int i, j;
printf(" ");
for (i = 0; i < BOARDSIZE; i++)
{
printf("%d", i + 1);
printf("\n");
for (i = 0; i < BOARDSIZE; i++)
{
printf("%d", (i + 1) * 10);
}
for (j = 0; j < BOARDSIZE; j++)
switch (board[i][j])
{
case NONE:
printf("□");
break;
case BLACK:
printf("○");
break;
case WHITE:
printf("●");
break;
default:
printf("er");
break;
}
}
printf("\n");
}
int check(int y, int x, int turn) //その場に置けるかどうかの関数
{
int vec; //どこか一方でもひっくり返せるかの確認
for (vec = 0; vec < 8; vec++)
{
if (checkFrip(y, x, turn, vec) == 1)
return 1;
}
return 0;
}
vec_y[] = { -1, -1, 0, 1, 1, 1, 0, -1 };
vec_x[] = { 0, 1, 1, 1, 0, -1, -1, -1 };
//vecで指定された向きについて返せる駒があるか確認する
int checkFrip(int y, int x, int turn, int vec)
{
int flag = 0;
while (1) {
y += vec_y[vec];
x += vec_x[vec]; //盤面の外に出ていたら終了
if (x <0 || y < 0 || x > BOARDSIZE - 1 || y >BOARDSIZE - 1)
return 0;
//空きマスだったら終了
if (board[x][y] == NONE)
return 0;
//相手の駒があったらフラグを立てる
if (board[y][x] == (turn ? BLACK : WHITE))
{
flag = 1;
continue;
}
//もしフラグが立っていればループ脱出いなければ終了
if (flag == 1)
break;
return 0;
}
}
//入力関数 scanf関数
void input(int turn)
{
int place = 0, y, x;
while (1)
{
//適当に決める
place = rand() % 89;
//数値が範囲内か確認
if (place < 11 || place > 88)
{
place = 0;
continue;
printf("input[%d]:error\n,place");
continue;
}
y = place / 10;
x = place / 10;//もう少し詳しく確認
if (x < 1 || y < 1 || x > 8 || y > 8)
{
printf(">%d\n", place);
break;
}
place = 0;
}
}
//実際に裏返す関数
void flip(int y, int x, int turn, int vec)
{
while (1)
{
y += vec_y[vec];
x += vec_x[vec];
//自分の駒があったら終了
if (board[y][x] == (turn ? BLACK : WHITE))
break;
//それ以外なら自分の駒で塗りつぶす
board[y][x] = (turn ? BLACK : WHITE);
}
}
//入力を受けて裏返すか確かめる関数
int put(int y, int x, int turn)
{
int vec, flag = 0;
//空白でなければ終了
if (board[y][x] != NONE)
return 0;
//全方向について確認
for (vec = 0; vec < 8; vec++)
{
if (checkFrip(y, x, turn, vec) == 1)
{
flip(y, x, turn, vec);
flag = 1;
}
}
if(flag == 1)
{
board[y][x] = ((turn ? BLACK : WHITE));
return 1;
}
return 0;
}
#include<time.h>
#include<stdlib.h>
int main()
{
int turn = 0;
//盤面初期化
setBOARD();
//乱数初期化
srand(time(NULL));
//ゲームのメインループ
while (turn < 2) //どちらの手番か表示
{
if (turn == 0)
printf("turn:○\n");
else
printf("turn:●\n");
//盤面表示
disp();
//入力
switch (turn)
{
case 0:
input (turn);
break;
case 1:
ai_rand(turn);
break;
default:
printf("errer\n");
return-1;
}
input (turn);
//手番交代
turn = (turn + 1) % 2;
//終了判定
switch (checkEnd(turn))
{
case 1:
printf("pass\n");
turn = (turn + 1)%2;
case 2:
printf("game end\n");
turn = 2;
default:
break;
}
}checkWinner();
return 0;
}
int checkEnd(int turn)
{
int i,j;
//置ける場所があるか確認
for (i = 0; i < BOARDSIZE; i++)
{
for (j = 0; j < BOARDSIZE; j++) //あればパスして続行
if (board[i][j] == NONE && check(i, j, turn) == 1)
{
return 0;
}
}
turn = (turn + 1) % 2; //場所がないので交替して探す
{
if (board[i][j] == NONE && check(i, j, turn) == 1)
return 1;
//なかったら終了
return 2;
}
}
//勝者判定
/*void checkWinner()
{
int i, j, b = 0, w = 0;
//駒を数える
for (i = 0; i < BOARDSIZE; i++)
{
for (j = 0; j < BOARDSIZE; j++)
{
switch (board[i][j])
{
case BLACK:
++b;
break;
case WHITE:
++w;
break;
default:
break;
}
}
}
//最後に盤面表示
disp();
//勝者表示
if (b > w)printf("○:winner BLACK!");
else if (b < w)printf("●:winner WHITE!");
else printf("Drawn game");
}
void ai_rand(int turn)
{
int place = 0, y, x;
while (1)
{
//適当に決める
place = rand() % 89;
//数値が範囲内か確認
if (place < 11 || place > 88)
{
place = 0;
continue;
printf("input[%d]:error\n,place");
continue;
}
y = place / 10;
x = place / 10;//もう少し詳しく確認
if (x < 1 || y < 1 || x > 8 || y > 8)
{
printf("input[%d]:error\n,place");
place = 0;
continue;
}
if (put(y - 1, x - 1, turn) == 1)
{
printf(">%d\n", place);
break;
}
place = 0;
}//成功以外のprintfを削除
}
*/