• 大小: 480KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-07-14
  • 语言: 其他
  • 标签:

资源简介

这是一个用C编写的一字棋游戏程序,用到了α-β剪枝算法,其用法相当独特,跟极大极小结合在一起,另外程序还可输出走棋步数和分析的棋局数。程序附有详细的注释,ppt和实验报告,有利于参考学习!

资源截图

代码片段和文件信息

#include 
#include 
#include 

#define MAX_CHILD_NODES 9
//代表棋盘上位置情况,空、X、O三种情况
#define EMPTY 0
#define X_Player 1
#define O_Player 2
//最终的结果
#define MAX_INFINITY 1   //玩家胜利
#define DRAW 0       //平局
#define MIN_INFINITY -1  //玩家输了

int boards_checked;      //用于记录电脑分析棋局数目
int model;     //模式选择

/*键盘上获取输入要输入的位置用一个32位的值表示整个棋局,因为棋局有三种状态,所以用两位来表示,00表示空,01表示“X”,10表示“O”。这样左边的14位
不用,只用右边的18位,这样使得算法的效率会比较高*/
int getCell( int cell unsigned int board )
{
  return ((board >> (cell*2)) & 0x3);//*2是因为用两位表示一种状态,与16进制的3进行“与运算”是为了保留下来最末尾的两位
}
//按键盘输入要求,取得输出位置
void putCell( int player int cell unsigned int *board )

  cell=*board |= (player << (cell*2)); //复位操作,即找到刚才的输入位置,因为在getcell函数中已经更改了位置
}
//设置输出标志,玩家输出为“X”,电脑输出为“O”,否则为空
char convert( int contents )     
{
  if      (contents == X_Player) return ‘X‘;
  else if (contents == O_Player) return ‘O‘;
  return ‘ ‘;  
}

//设置棋盘
void emitBoard( unsigned int board )
{
   printf(“\n棋盘对应的标号为:\n“);    
   printf( “  0 | 1 | 2\n“);
   printf( “  ---------\n“);
   printf( “  3 | 4 | 5\n“);
   printf( “  ---------\n“);
   printf( “  6 | 7 | 8\n“);
  printf(“\n“);
  printf(“\n“);
  printf(“\n“);
  printf(“ %c | %c | %c \n“
          convert(getCell(0board))
          convert(getCell(1board))
          convert(getCell(2board)) );           //记录棋盘中对应的标号位置
  printf(“-----------\n“);
  printf(“ %c | %c | %c \n“
          convert(getCell(3board))
          convert(getCell(4board))
          convert(getCell(5board)) );
  printf(“-----------\n“);
  printf(“ %c | %c | %c \n\n“
          convert(getCell(6board))
          convert(getCell(7board))
          convert(getCell(8board)) );
}
//玩家走棋
void getHumanMove( unsigned int *board )
{
char  a[5];   //存放玩家输入的字符
int selection;
  while (1) 
  { 
loop:printf(“您要走哪一步,请输入数字(0-8): “);
    scanf(“%s“ a);
if(a[0]>=‘0‘&&a[0]<‘9‘&&a[1]==0)             //输入判断,只有当输入正确时,才会赋值给selection
{
selection=(int)a[0]-48;                //字符转成数字
}
else
{
printf(“\n输入错误,请输入0-8之间的数字!\n\n“);  //输入错误,重新输入
goto  loop;
}
    printf(“\n“);
    if (getCell(selection *board) == EMPTY) break;  //位置为空,跳出循环
    printf(“此位置已有棋子,请重新输入!\n\n“);      //位置不空时,说明此位置已有棋子,重新输入信息
  }
  putCell( X_Player selection board );     //在相应位置输出玩家所走棋子“X”
}
//定义一个结构体,用于记录棋盘棋子位置情况,不用结构体,直接用二维数组进行判断也可以实现相同的效果
#define MAX_TESTS 8
typedef struct {
  unsigned char test[3];
} test_t;
const test_t tests[MAX_TESTS]={
          {{ 8 7 6 }} {{ 5 4 3 }}
          {{ 2 1 0 }} {{ 8 5 2 }}
          {{ 7 4 1 }} {{ 6 3 0 }}
          {{ 6 4 2 }} {{ 8 4 0 }} };

//判断输赢的函数
int checkPlayerWin( int player unsigned int cur_board )  
{
  int i;
  for (i = 0 ; i < MAX_TESTS ; i++) {
    if ((getCell(tests[i].test[0] cur_board) == player) && 
        (getCell(tests[i].test[1] cur_board) == player) &&
        (getCell(tests[i].test[2] cur_board) == player)) 
re

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     211385  2011-12-09 16:08  α-β剪枝实现的一字棋程序2.pptx

     文件      41984  2011-12-08 20:55  Debug\vc60.idb

     文件      53248  2011-12-03 19:51  Debug\vc60.pdb

     文件     184392  2011-12-03 19:51  Debug\yiziqichengxu.exe

     文件     511296  2011-12-03 19:51  Debug\yiziqichengxu.ilk

     文件      17668  2011-12-03 19:51  Debug\yiziqichengxu.obj

     文件     226184  2011-11-24 21:11  Debug\yiziqichengxu.pch

     文件     467968  2011-12-03 19:51  Debug\yiziqichengxu.pdb

     文件       7799  2011-11-24 21:12  yiziqichengxu.cpp

     文件       3485  2011-11-19 19:48  yiziqichengxu.dsp

     文件        534  2011-11-19 21:44  yiziqichengxu.dsw

     文件      41984  2011-12-08 20:57  yiziqichengxu.ncb

     文件      48640  2011-12-08 20:57  yiziqichengxu.opt

     文件        260  2011-12-08 20:54  yiziqichengxu.plg

     文件      93204  2011-12-09 16:07  一字棋实验报告.docx

     目录          0  2011-12-03 19:51  Debug

----------- ---------  ---------- -----  ----

              1910031                    16


评论

共有 条评论

相关资源