您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > C/C++资料 > c++五子棋课程设计,亲
算法与数据结构课程设计报告书题目五子棋姓名__******__班级_计算机1301_学号_3131150108_指导教师__张连浩__沈阳化工大学科亚学院信息与控制工程系1问题描述:而本次课程设计我选择做的这个五子棋,就是要用c语言来实现这个功能可以利用vc++6.0来进行这个游戏。具体来讲就是要实现以下的目的:(1)建立棋盘:20*20(2)玩家姓名的输入以及检查(3)将棋子准确的输入并在棋盘上表示出来(4)不能重复落子(5)胜负的判定(6)结束后的继续或退出这些问题都会在下面的功能模块里来一一介绍。设计的软、硬件环境:vc++6.0(第二个命名结尾要设成.cpp)数据结构与算法设计与功能模块:本程序是一款棋类益智游戏程序,是用vc++6.0编写在windows7系统下运行的娱乐游戏。从程序表面看,这是一个二维平面图,所以数据用二维数组来表示,数组两个下标可以表示棋盘上的位置,数组元素的值代表棋格上的状态,共有三种情况,分别是0代表空格,1代表白棋,2代表黑棋。本程序可以实现人人对战,操作采用键盘输入坐标来下棋子的的功能,由回车控制下棋,双方都可通过ESC键终止游戏。游戏开始后,黑、白双方轮流下棋,程序会根据双方下棋的先后顺序自动显示不同笑脸形状的棋子,提示当前下棋的棋手,落子成功后,马上判断以该位置为中心的八个方向:上、下、左、右、左上、左下、右上、右下是否有相同颜色的棋子连成五子,如果连成五子,则游戏结束,输出相应的信息。并提示是否继续进行游戏。#includeiostream#includeconio.husingnamespacestd;#defineWIDE_AND_LONG20棋盘的长和宽#defineNAME_LEN20输入姓名的长度typedefclassGobang2public:intInitPlayerName(char*,char*);intCheckInput(char,int);intCheckIndexInput(char,char,char);intGetPlayerName();intInitBoard();intWriteBoard(char,char,bool);intBeginOrNot();intCheckRow();intCheckColumn();intCheckTopLeft();intCheckTopRight();intCheckDownLeft();intCheckDownRight();intCheckDraw();intCheckFinish();intChess();intShowBoard();private:characBoard[WIDE_AND_LONG][WIDE_AND_LONG];characPlayerOneName[NAME_LEN];characPlayerTwoName[NAME_LEN];}GOBANG;初始化姓名的缺省值intGOBANG::InitPlayerName(char*pPlayerOne,char*pPlayerTwo){strcpy(acPlayerOneName,pPlayerOne);strcpy(acPlayerTwoName,pPlayerTwo);return0;}检查输入姓名时是否含非法字符空格和Tab键3intGOBANG::CheckInput(charch,intiNameLen){if(''==ch||'\t'==ch){cout含有非法字符!endl;return-1;}if(iNameLenNAME_LEN-1){cout输入超出限定长度!endl;return-1;}return0;}将棋子放到棋盘中intGOBANG::WriteBoard(charcRow,charcColumn,boolbJudge){intiRow=0;intiColumn=0;if(cRow='0'&&cRow='9'){iRow=static_castint(cRow-'0');}elseif(cRow='A'&&cRow=static_castchar('A'+WIDE_AND_LONG-10-1)){iRow=static_castint((cRow-'A')+10);}else{iRow=static_castint((cRow-'a')+10);}if(cColumn='0'&&cColumn='9')4{iColumn=static_castint(cColumn-'0');}elseif(cColumn='A'&&cColumn=static_castchar('A'+WIDE_AND_LONG-10-1)){iColumn=static_castint((cColumn-'A')+10);}else{iColumn=static_castint((cColumn-'a')+10);}if('+'!=acBoard[iRow][iColumn]){cout此处已有棋子!endl;return-1;}if(!bJudge){acBoard[iRow][iColumn]=static_castchar(1);}else{acBoard[iRow][iColumn]=static_castchar(2);}return0;}检查坐标输入是否合法intGOBANG::CheckIndexInput(charcRow,charcSeparator,charcColumn){if(!cRow||!cSeparator||!cColumn){return-1;5}if(!((cRow='0'&&cRow='9')||\(cRow='A'&&cRow=static_castchar('A'+WIDE_AND_LONG-10-1))||\(cRow='a'&&cRow=static_castchar('a'+WIDE_AND_LONG-10-1)))){return-1;}if(''!=cSeparator&&'\t'!=cSeparator&&','!=cSeparator){return-1;}if(!((cColumn='0'&&cColumn='9')||\(cColumn='A'&&cColumn=static_castchar('A'+WIDE_AND_LONG-10-1))||\(cColumn='a'&&cColumn=static_castchar('a'+WIDE_AND_LONG-10-1)))){return-1;}return0;}获取玩家的昵称intGOBANG::GetPlayerName(){fflush(stdin);charcTemp=0;intiNameLen=0;cout是否自己定义昵称?是(Y),否(任意键):;cTemp=getch();coutendl;if(('y'!=cTemp)&&('Y'!=cTemp)){6return0;}fflush(stdin);memset(acPlayerOneName,0,sizeof(acPlayerOneName));memset(acPlayerTwoName,0,sizeof(acPlayerTwoName));cout请玩家一输入昵称:;while('\n'!=(cTemp=getchar())){if(-1==CheckInput(cTemp,iNameLen)){fflush(stdin);cout请玩家一输入昵称:;continue;}acPlayerOneName[iNameLen]=cTemp;iNameLen++;}if(0==iNameLen){strcpy(acPlayerOneName,玩家一);}iNameLen=0;fflush(stdin);cout请玩家二输入昵称:;while('\n'!=(cTemp=getchar())){if(-1==CheckInput(cTemp,iNameLen)){fflush(stdin);cout请玩家二输入昵称:;continue;}7acPlayerTwoName[iNameLen]=cTemp;iNameLen++;}if(0==iNameLen){strcpy(acPlayerTwoName,玩家一);}return0;}初始化棋盘intGOBANG::InitBoard(){intiRow=0;intiColumn=0;for(iRow=0;iRowWIDE_AND_LONG;iRow++){for(iColumn=0;iColumnWIDE_AND_LONG;iColumn++){acBoard[iRow][iColumn]='+';}}return0;}检查棋盘横向是否存在五子连珠intGOBANG::CheckRow(){intiRow=0;intiColumn=0;intiPlayerOneLen=0;intiPlayerTwoLen=0;for(iRow=0;iRowWIDE_AND_LONG;iRow++){8while(iColumnWIDE_AND_LONG){if(static_castchar(1)==acBoard[iRow][iColumn]){iPlayerOneLen++;iPlayerTwoLen=0;}elseif(static_castchar(2)==acBoard[iRow][iColumn]){iPlayerTwoLen++;iPlayerOneLen=0;}else{iPlayerTwoLen=0;iPlayerOneLen=0;}iColumn++;}if(iPlayerOneLen=5){return1;}if(iPlayerTwoLen=5){return2;}iPlayerOneLen=0;iPlayerTwoLen=0;iColumn=0;}return0;9}检查棋盘竖向是否存在五子连珠intGOBANG::CheckColumn(){intiRow=0;intiColumn=0;intiPlayerOneLen=0;intiPlayerTwoLen=0;for(iColumn=0;iColumnWIDE_AND_LONG;iColumn++){while(iRowWIDE_AND_LONG){if(static_castchar(1)==acBoard[iRow][iColumn]){iPlayerOneLen++;iPlayerTwoLen=0;}elseif(static_castchar(2)==acBoard[iRow][iColumn]){iPlayerTwoLen++;iPlayerOneLen=0;}else{iPlayerTwoLen=0;iPlayerOneLen=0;}iRow++;}if(iPlayerOneLen=5){return1;10}if(iPlayerTwoLen=5){return2;}iPlayerOneLen=0;iPlayerTwoLen=0;iRow=0;}return0;}检查棋盘左上方(包括对角线)是否存在五子连珠intGOBANG::CheckTopLeft(){intiRow=0;intiTempRow=0;intiColumn=0;intiPlayerOneLen=0;intiPlayerTwoLen=0;for(iRow=4;iRowWIDE_AND_LONG;iRow++){iTempRow=iRow;while(iTempRow=0){if(static_castchar(1)==acBoard[iTempRow][iColumn]){iPlayerOneLen++;iPlayerTwoLen=0;if(iPlayerOneLen=5)
本文标题:c++五子棋课程设计,亲
链接地址:https://www.777doc.com/doc-4598329 .html