19、五子棋程序纯C语言版.doc_第1页
19、五子棋程序纯C语言版.doc_第2页
19、五子棋程序纯C语言版.doc_第3页
19、五子棋程序纯C语言版.doc_第4页
19、五子棋程序纯C语言版.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

五子棋程序纯C语言版/以前发的代码里因为有C+的一点点代码,现在我把那C+的代码改掉。重发出来。/但是这些代码由于编译器的原因,在TC下仍无法运行。请使用VC。#include #include #include #include int ChessData1515 =0;int GuangbiaoData2=8,8;int ChessStepData2552=0;void gotoxy(int x, int y) /gotoxy在TC中是在一个系统自带的函数,但是在VC中没有这个函数,所以在网上找到了这个函数以实现同样的功能。/只有这一个函数是网上找的,别的全部我自己写的。COORD c;c.X=x-1;c.Y=y-1;SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);void GotoChess(int x,int y)x=3*x-2;y=2*y-1;gotoxy(x,y);void Move(int MoveData) /输入参数为用户输入的方向(1表示上,2表示下,3表示左,4表示右)switch (MoveData)case 1:GuangbiaoData1-=1;break;case 2:GuangbiaoData1+=1;break;case 3:GuangbiaoData0-=1;break;case 4:GuangbiaoData0+=1;break;default:printf(Move函数出错);GotoChess(GuangbiaoData0,GuangbiaoData1);int Get(int *data) /该函数的功能是用户的按键,并转化为01234567(0表示输入错误,1表示上,2表示下,3表示左,4表示右,5表示落子,6表示悔棋,7表示退出。) /并返回输入的用户号码(共同键返回3),错误则返回0int temp;B: temp=getch();if (temp=224) temp=getch(); switch (temp) case 72:*data=1;break; case 80:*data=2;break; case 75:*data=3;break; case 77:*data=4;break; default:goto B; return 2;else switch (temp) case w: case W:*data=1;return 1;break; case s: case S:*data=2;return 1;break; case a: case A:*data=3;return 1;break; case d: case D:*data=4;return 1;break; case 13 :*data=5;return 2;break; case 32 :*data=5;return 1;break; case 8 :*data=6;break; case 27 :*data=7;break; default:*data=0 ;return 0;break; return 3;void MoveToEnd()gotoxy(1,30);int LogicBeOut(int a,int b)if (a=-1|a=15|b=-1|b=15) return 1;else return 0;int win(int v)int i=1,j=1,a=0,b=0;while (ChessDataa=GuangbiaoData0-i-1b=GuangbiaoData1-i-1=v*2&!LogicBeOut(a,b) i+;while (ChessDataa=GuangbiaoData0+j-1b=GuangbiaoData1+j-1=v*2&!LogicBeOut(a,b) j+;if (i+j-1=5) return 1;i=1,j=1,a=0,b=0;while (ChessDataa=GuangbiaoData0+i-1b=GuangbiaoData1-i-1=v*2&!LogicBeOut(a,b) i+;while (ChessDataa=GuangbiaoData0-j-1b=GuangbiaoData1+j-1=v*2&!LogicBeOut(a,b) j+;if (i+j-1=5) return 1;i=1,j=1,a=0,b=0;while (ChessDataa=GuangbiaoData0-i-1b=GuangbiaoData1-1=v*2&!LogicBeOut(a,b) i+;while (ChessDataa=GuangbiaoData0+j-1b=GuangbiaoData1-1=v*2&!LogicBeOut(a,b) j+;if (i+j-1=5) return 1;i=1,j=1,a=0,b=0;while (ChessDataa=GuangbiaoData0-1b=GuangbiaoData1-i-1=v*2&!LogicBeOut(a,b) i+;while (ChessDataa=GuangbiaoData0-1b=GuangbiaoData1+j-1=v*2&!LogicBeOut(a,b) j+;if (i+j-1=5) return 1;return 0;void NewShow() /新棋局的开始int i,j;for (i=0;i15;i+) for (j=0;j15;j+) ChessDataij=0;system(cls);for (i=1;i=29;i+) for (j=1;j15|New015|New11) return 1;else return 0;void UserChoose(int * choice)system(cls);printf(_);printf(_);printf( $1.单人游戏 );printf( 2.双人游戏 );printf( 3.退出游戏 );printf( 4.游戏帮助 );printf(_);printf(_);printf( );printf( 开心五子棋 );printf( );printf( 出品人:张云聪 );printf( 学号:067108034 );printf( 指导老师:邵艳玲 );printf( );printf( );printf( 温馨提示,游戏时请把窗口最大化,以达到最佳效果 );printf(_);int temp=0,i=0;do if (temp=getch()=224) temp=getch(); if (temp=72&i!=0) gotoxy(34,3+i); printf( ); i-; gotoxy(34,3+i); printf($); gotoxy(0,0); else if(temp=80&i!=3) gotoxy(34,3+i); printf( ); i+; gotoxy(34,3+i); printf($); gotoxy(0,0); else if (temp=13) *choice=i+1;return; else if (temp=27) *choice=3;return; else if (temp=1|temp=2|temp=3|temp=4) *choice=temp-48;return;while(1);int CannotDo(int v1,int v2,int MoveData,int choice) /第一个输入值为按键的用户号,第二个是本应该按键的用户号,第三个为按下键的对应值,第四个键代表游戏模式。if (v1=3) return 0; /如果用户输入的为共用按键,则CannotDo为假else if (v1=0) return 1;/如果用户输入错误,则CannotDo为真else if (v1!=v2&choice=2) return 1; /如果不该此用户输入,而用户进行了输入,则CannotDo为真if (BeOut(MoveData) return 1; /如果移动出边界则CannotDo为真return 0;int CannotLuozi() /判断是否可以落子。if (ChessDataGuangbiaoData0-1GuangbiaoData1-1) return 1;else return 0;int luozi(int v) /玩家v落子。ChessDataGuangbiaoData0-1GuangbiaoData1-1+=v*2;if (v=1) printf(O);else if (v=2) printf(X);else printf(luozi函数出错);if (win(v) MoveToEnd();printf(玩家%d获得了胜利! n,v);for (int i=1;i=240;i+) printf( );GotoChess(GuangbiaoData0,GuangbiaoData1);getch();return 1;MoveToEnd();printf(现在请用户%d下棋 ,v%2+1);GotoChess(GuangbiaoData0,GuangbiaoData1);return 0;void HuiQi(int step) /输入的是当前的要悔的棋是第几步GuangbiaoData0=ChessStepDatastep-10;GuangbiaoData1=ChessStepDatastep-11;ChessDataGuangbiaoData0-1GuangbiaoData1-1=0;GotoChess(GuangbiaoData0,GuangbiaoData1);printf(-);MoveToEnd();printf(现在请用户%d下棋 ,(step+1)%2+1);GotoChess(GuangbiaoData0,GuangbiaoData1);int DataGetAndChoose(int choice)int MoveData=0,i=0,temp; /MoveData 0表示不可移动,1表示上,2表示下,3表示左,4表示右,5表示落子,6表示悔棋,7表示退出。while(1)loop: while (temp=Get(&MoveData),CannotDo(temp,i%2+1,MoveData,choice); switch (MoveData) case 1: case 2: case 3: case 4:Move(MoveData);break; case 7:return 0; case 6: if (i=0) MoveToEnd();printf(现在无法悔棋 );GotoChess(GuangbiaoData0,GuangbiaoData1); else HuiQi(i-); break; case 5: if (CannotLuozi() goto loop; if(luozi(i%2+1) return 0; ChessStepDatai0=GuangbiaoData0; ChessStepDatai1=GuangbiaoData1; i+; break; default:printf(DataGetAndChoose函数出错);break; return 1; void ShowHelp()system(cls);printf(*);printf(*);printf(* 单人游戏供用户一个人自己与自己下棋研究棋局之用 *);printf(* 双人游戏中,用户1使用wsad控制方向,按空格落子 *);printf(* 用户2按方向键控制方向,回车键落子 *);printf(* 游戏过程中按esc返回主菜单 *);printf(* 游戏过程中退格键悔棋 *);printf(* 双人模式中某人下棋时,另一个用户无法控制光标与落子 *);printf(* *);printf(* 帮助 *);printf(* 按任意键返回 *);printf(*);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论