私は現在、アルファベットプルーニングとヒューリスティックを使用してゲームをプレイするチェッカープログラムを作成しています。ボードの評価時にボードを印刷しようとしていますが、問題が発生して動作しています。私の先生は、プログラムを実行するために必要なすべてのコードから、評価関数とアルファベータプルーニング関数を除いたものを教えてくれました。ボードを印刷する方法は、チェッカーゲームにとって最良の動きを見つける方法とは異なるクラスにあります。チェッカーチェッカーボードの印刷
以下は、我々はボードにこの下に
double evalBoard1(State *state) {
int x, y;
double rval = 0.0;
double rval2 = 0.0;
evals++;
for (x = 0; x < 8; x++)
for (y = 0; y < 8; y++) {
if (x % 2 != y % 2 && !empty(state->board[y][x])) {
if (king(state->board[y][x])) { /* King */
if (((state->board[y][x] & White) && !player1)
|| (!(state->board[y][x] & White) && player1))
rval += 2.0;
else
rval2 += 2.0;
} else if (piece(state->board[y][x])) { /* Piece */
if (((state->board[y][x] & White) && !player1)
|| (!(state->board[y][x] & White) && player1))
rval += 1.0;
else
rval2 += 1.0;
}
}
}
state->PrintBoard(); //should print the board
fprintf(stderr,"Value = %g\n",rval); //prints the evaluation of that board
if(rval <= 0.0) return -10000.0;
if(rval2 <= 0.0) return 10000.0;
return rval - rval2;
}
#ifndef COMPUTER_H
#define COMPUTER_H
#define Empty 0x00
#define Piece 0x20
#define King 0x60
#define Red 0x00
#define White 0x80
#define number(x) ((x)&0x1f)
#define empty(x) ((((x)>>5)&0x03)==0?1:0)
#define piece(x) ((((x)>>5)&0x03)==1?1:0)
#define king(x) ((((x)>>5)&0x03)==3?1:0)
#define color(x) ((((x)>>7)&1)+1)
#define Clear 0x1f
typedef struct{
int player;
char board[8][8];
char movelist[48][12];
int numLegalMoves;
}State;
//all method calls occur after here
#endif
を印刷したいところである検索機能クラスヘッダー(それはメソッド呼び出しのすべてが含まれていません)とevalBoard方法の額面あるあります.hファイルはとcheckers.cファイル私はちょうど状態を呼び出そう
struct Square square[16][16];
void PrintBoard() {
int board[8][8];
int x,y;
char ch = 127;
for(y=0; y<8; y++)
{
for(x=0; x<8; x++)
{
if(x%2 != y%2) {
if(square[y][x].state) {
if(square[y][x].col)
{
if(square[y][x].state == King) board[y][x] = 'B';
else board[y][x] = 'b';
}
else
{
if(square[y][x].state == King) board[y][x] = 'A';
else board[y][x] = 'a';
}
} else board[y][x] = ' ';
} else board[y][x] = ch;
printf("%c",board[y][x]);
}
printf("\n");
}
}
#ifndef CHECKERS_H
#define CHECKERS_H
#define Empty 0
#define Piece 1
#define King 2
#define HUMAN 1
#define COMPUTER 2
struct Square {
Widget widget;
int val;
int state;
int col;
int hilite;
};
void PrintBoard();
#endif
(のみprintBoard方法及び構造体の正方形のコールが含まれます)(それはPrintBoard()の横にある他のすべてのメソッド呼び出しを含まないいません) - > PrintBoard()、プログラムが呼び出しを認識できませんでした。私はまた、コンピュータのヘッダーファイルのState構造体にSquare構造体を追加しようとしましたが、これもエラーを作成しました。私もcomputer.cファイルに新しいPrintBoardメソッドを作成しましたが、どの色の状態が各四角形に入っているのか分かりません。何か助けていただければ幸いです。必要に応じて私が持っているコードを投稿することができます。
なぜPrintBoardが状態に接続されていると思いますか?これはCかC++ですか?私はあなたが混乱していると思う。 Cでクラスやメソッドなどのことはありません。 – Falmarri
あなたは混乱しています... – mtahmed
先生は、実際の検索機能を除いてこのプログラムを実行するためのコードをすべて教えてくれましたが、PrintBoardを使用して各評価状態でボードを印刷するようにお願いしました()メソッドを別のクラスから削除します。私はちょうどスクエアの構造体へのアクセスが必要な別のクラスのためにそのメソッドを使用する方法を理解しようとしていた – Kat