当前位置:文档之家› 嵌入式系统黑白棋课程设计报告

嵌入式系统黑白棋课程设计报告

嵌入式系统课程设计报告——黑白棋程序设计学院计算机专业计算机教师学生学号2013年x月xx 日1 设计目的利用VS2005编程实现基于WINCE的8*8大小的黑白棋程序设计。

在WINCE端运行2、开发环境软件:Visual Studio 2005Vc++6.03、设计任务及要求黑白棋棋盘大小为8*8,实现人人对战即可。

设计要求:利用二维数组标记棋盘,下子后判断横向、纵向或对角有无相同颜色棋子,若有则该线段中所有棋子置为该颜色。

棋盘所有棋子填满后游戏结束。

棋子数多者胜4、实现过程1、设计初始化棋盘函数2、复制棋盘函数3、显示棋盘函数4、选择下棋类型4、计算可落子的位置个数,及该位置落子后翻过的棋子的个数5、设置棋子的稳定性(计算得分的依据),空白处除外6、评价棋手得分4.1 硬件WINDOWS操作平台利用VC++实现黑白棋游戏设计Microsoft Visual Studio 20054.2驱动程序设计WinCE界面4.3用户应用程序设计#include <iostream>using namespace std;int const MAX=10000;enum Color{WHITE=-1,BLANK,BLACK //是否能落子 //黑子};主函数int main(void) /////////////主函数{Chessboard board;Chessboard *pBoard=&board;enum Color player=BLANK,nowPlayer=BLACK;//声明两个enum枚举变量player,nowplayerChoice choice;Choice *pChoice=&choice;int dif=-1,step=4,success=0;char restart=' ';start: ///////////////////////////////////////////// player=BLANK; ///////////////////////////////////////////// nowPlayer=BLACK;dif=-1;step=4;restart=' ';int b;cout<<"输入1为人人对战,否则为人机对战:";cin>>b;if(b==1){ /////////人人对战////////////while(player!=WHITE && player!=BLACK){cout<<"\n请选择执黑棋(○)(1),或执白棋(●)(-1)\t执黑棋先下:\n";scanf("%d",&player);/////////////////////////////////////////////////////// //////if(player!=WHITE && player!=BLACK){cout<<"黑白设置错误.\n";}}board.initChessboard(pBoard); /////////初始化棋盘///////////while(step<64) /* 棋盘上未下满64子 */{char *nowPlayerName="";if(nowPlayer==BLACK){nowPlayerName="黑棋(○)";}else if(nowPlayer==WHITE){nowPlayerName="白棋(●)";}if(board.judge(pBoard,nowPlayer)==0){if(board.judge(pBoard,(enum Color)-nowPlayer)==0){break; /* 双方都不能落子,游戏结束 */}cout<<nowPlayerName<<"\n无子可下.\n";}else{int i,j;board.view(pBoard);if(nowPlayer==player) /* 轮到人下 */{while(1){cout<<nowPlayerName<<"请输入棋子坐标(i,j):\n";cout<<"i=";cin>>i;i--;cout<<"j=";cin>>j;j--;pChoice->posX=i;pChoice->posY=j;if(i<0 || i>7 || j<0 || j>7 || pBoard->cell[i][j].color!=BLANK || pBoard->cell[i][j].stable==0){cout<<nowPlayerName<<"不能在"<<i+1<<","<<j+1<<"落子.";board.view(pBoard);}else{break;}}}else //另外一个人下{while(1){cout<<nowPlayerName<<"请输入棋子坐标(i,j):\n";cout<<"i=";cin>>i;i--;cout<<"j=";cin>>j;j--;pChoice->posX=i;pChoice->posY=j;if(i<0 || i>7 || j<0 || j>7 || pBoard->cell[i][j].color!=BLANK || pBoard->cell[i][j].stable==0){cout<<nowPlayerName<<"不能在"<<i+1<<","<<j+1<<"落子.";board.view(pBoard);}else{break;}}}board.putChess(pBoard,pChoice,nowPlayer);step++;cout<<nowPlayerName<<"落子于坐标"<<i+1<<","<<j+1;}nowPlayer=(enum Color)-nowPlayer; /* 换对方下 */}board.view(pBoard);success=pBoard->whiteNum - pBoard->blackNum;if(success>0){cout<<"\n白棋(●)获胜.\n";}else if(success<0){cout<<"\n黑棋(○)获胜.\n";}else{cout<<"\n平局.\n";}cout<<"\n游戏结束!\n";while(restart!='y' && restart!='n'){cout<<"再下一盘?(y,n)\n";cin>>restart;///////////////////////////////////////////////if(restart=='y'){goto start;}}}else{ ////////////人机对战/////////////while(dif<1 || dif>60) //设置难度{cout<<"请选择难度(1~60):\n";cin>>dif;if(dif<1 || dif>60){cout<<"难度设置错误.\n";}}while(player!=WHITE && player!=BLACK){cout<<"请选择执黑棋(○)(1),或执白棋(●)(-1)"<<endl;cout<<"执黑先行:";scanf("%d",&player);if(player!=WHITE && player!=BLACK){cout<<"黑白设置错误.\n";}}board.initChessboard(pBoard); /////////////////初始化棋盘while(step<64) // 棋盘上未下满64子{char *nowPlayerName="";if(nowPlayer==BLACK){nowPlayerName="黑棋(○)";}else if(nowPlayer==WHITE){nowPlayerName="白棋(●)";}if(board.judge(pBoard,nowPlayer)==0){if(board.judge(pBoard,(enum Color)-nowPlayer)==0){break; //双方都不能落子,游戏结束}cout<<nowPlayerName<<"无子可下.\n";}else{int i,j;board.view(pBoard);if(nowPlayer==player) // 轮到人下{while(1){cout<<nowPlayerName<<",请输入棋子坐标i,j:\n";cout<<"i=";cin>>i;i--;cout<<"j=";cin>>j;j--;pChoice->posX=i;pChoice->posY=j;if(i<0 || i>7 || j<0 || j>7 ||pBoard->cell[i][j].color!=BLANK || pBoard->cell[i][j].stable==0){cout<<nowPlayerName<<"不能在"<<i+1<<","<<j+1<<"落子.\n";board.view(pBoard);}else{break;}}}else //* 轮到电脑下 */{cout<<nowPlayerName<<"思考中......";pChoice=maximin(pBoard,nowPlayer,dif,-MAX,MAX,pChoice);i=pChoice->posX;j=pChoice->posY;cout<<"score="<<pChoice->score<<endl;}board.putChess(pBoard,pChoice,nowPlayer);step++;cout<<nowPlayerName<<"落子于坐标"<<i+1<<","<<j+1;}nowPlayer=(enum Color)-nowPlayer; /* 换对方下 */}board.view(pBoard);success=pBoard->whiteNum - pBoard->blackNum;if(success>0){cout<<"\n白棋(●)获胜.\n";}else if(success<0){cout<<"\n黑棋(○)获胜.\n";}else{cout<<"\n平局.\n";}cout<<"\n游戏结束!\n";while(restart!='y' && restart!='n'){cout<<"再下一盘?(y,n)\n";cin>>restart;if(restart=='y'){goto start;}}}return 0;}4.4 编译与运行结果1、选择“人人对战”或者“人机对战”2、棋局开始3、黑白棋一次落子4、局中5、白棋落子,但黑子无子可下,白棋再落子6、双方均无处落子,棋局结束7、输出对局结果5、总结这个程序主要用来实现黑白棋的人人对战,程序中的人机对战的算法主要参考别的程序,而人人对战则相对简单所以以自己的能力就只实现了其中的人人对战部分,由于没有自学认识问题的和思考解决办法有了本质上的进步,特别是对一个游戏开发的模式有了更深的认识,对专业技能的运用更熟练。

相关主题