C 打印棋盘格

C 打印棋盘格,c,struct,C,Struct,我目前正在编写一个检查器程序,它使用alpha-beta修剪和启发式来玩这个游戏。我试图打印出董事会在评估董事会,我遇到了问题,让它工作。我的老师给了我们运行程序所需的所有代码,减去求值函数和alpha-beta剪枝函数。打印棋盘的方法与为棋盘游戏寻找最佳移动的方法属于不同的类 下面是搜索函数类头(不包括所有方法调用)的PAR和我们想要打印板的EvalBoad方法 double evalBoard1(State *state) { int x, y; double rv

我目前正在编写一个检查器程序,它使用alpha-beta修剪和启发式来玩这个游戏。我试图打印出董事会在评估董事会,我遇到了问题,让它工作。我的老师给了我们运行程序所需的所有代码,减去求值函数和alpha-beta剪枝函数。打印棋盘的方法与为棋盘游戏寻找最佳移动的方法属于不同的类

下面是搜索函数类头(不包括所有方法调用)的PAR和我们想要打印板

的EvalBoad方法
 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
double evalBoard1(状态*State){
int x,y;
双rval=0.0;
双rval2=0.0;
evals++;
对于(x=0;x<8;x++)
对于(y=0;y<8;y++){
如果(x%2!=y%2&&!为空(状态->板[y][x])){
如果(国王(州->董事会[y][x]){/*国王*/
如果((状态->板[y][x]&白色)&&&!player1)
||(!(州->董事会[y][x]&白色)和&player1))
rval+=2.0;
其他的
rval2+=2.0;
}如果(工件(状态->板[y][x]){/*工件*/
如果((状态->板[y][x]&白色)&&&!player1)
||(!(州->董事会[y][x]&白色)和&player1))
rval+=1.0;
其他的
rval2+=1.0;
}
}
}
状态->打印板();//应打印该板
fprintf(stderr,“Value=%g\n”,rval);//打印该电路板的评估值
如果(rval 5)&0x03)==0?1:0)
#定义工件(x)(((x)>>5)和0x03)==1?1:0)
#定义国王(x)(((x)>>5)和0x03)==3?1:0)
#定义颜色(x)((x)>>7)和1)+1)
#定义清除0x1f
类型定义结构{
国际球员;
炭板[8][8];
字符移动列表[48][12];
int numLegalMoves;
}国家;
//所有方法调用都发生在此处之后
#恩迪夫
下面是checkers.h文件(它不包括PrintBoard()之外的所有其他方法调用)和checkers.c文件(仅包括PrintBoard方法和Struct square调用)

struct Square[16][16];
作废印制板(){
国际板[8][8];
int x,y;
char ch=127;

对于(y=0;y以您的代码当前写入的方式,<代码> PrimtBoo/SoC>是一个独立的函数,因为它应该在C程序中……这不是一个与C++一样的<>代码>状态>代码>类的方法。因此,如果您想调用<代码>状态> PrtBoBART(),你必须使函数成为<代码>状态> />代码>类,并使用C++编译器编译程序…否则,如果你想保持它作为一个独立的函数,使用C编译器,你就必须添加<代码>状态*>代码>参数到<代码> PruttBooe/Cuff>,然后称之为“代码> PrimtBo”。Ad[状态] < /CO> >

< P>大多数(如果不是全部)游戏程序员使用一个一维的棋盘。对于棋子,你可以省去一半的方块,因为它们没有被使用。

< P>将方法>代码> PrimtBoad()/<代码>在代码>状态> /Cult>结构中,并使用C++代替。然后你可以调用<代码>状态> PrttBoAd[()] < /C> >
typedef结构{

空的PrtBoBART()//为什么你认为PrintBoard是连接到状态的?这是C还是C++?我想你很困惑。在C.没有这样的类或方法。我们的老师给了我们所有的代码来运行这个程序,除了实际的搜索功能,但是要求我们用PrimtBoad()在每个评估状态下打印出这些板。方法。我只是在试图找出如何将该方法用于另一个需要访问Square结构的类时遇到了问题。一个糟糕的方法是定义PrintBoard()函数在任何类之外,并在您需要的每个类中创建它。是的,我知道这是相关的,但仍然不是一个答案…您应该在注释中这样说…我没有编写任何代码。这是我们的老师给我们的,我们只需要实现实际的搜索功能。但是,他希望我们使用他预先编写的代码,只是修改它,这样你可以在每个评估状态下打印出板,以确保启发式函数是正确的。然后,把这个函数放在状态类中。你使用的是什么语言?C还是C++?我们用C来做这个程序,为什么你使用面向对象的东西?你不能做“代码>状态-PrttBoAd[())。
在C中,即使
状态
结构有一个名为
PrintBoard()
的方法。这就是我的老师在他上班时间问他的时候说的,我应该可以对他的代码做一些小的调整。
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
 typedef struct{
   void PrintBoard() { // <---this is what you need to do
     ...
   }
   int player;
   char board[8][8];
   char movelist[48][12];  
   int numLegalMoves;
 }State;