C++Win32(DOS)五子棋代码(三字连珠)
- 格式:doc
- 大小:50.00 KB
- 文档页数:12
三字连珠实验要求:模仿五子棋的形式,编写有一方三子或五子连成一线即获胜的程序,具体要求:1、玩家可以设置棋盘的大小,即在游戏开始时输入一变量n(n=3~9),使棋盘的大小为n×n。
2、本程序用if-else选择语句来判断获胜者,如果棋盘变大这将非常频繁,现要求将这一功能用循环语句实现,且适用于任意大小的棋盘。
3、加入可以悔棋的功能,要求任意方可以在对方下棋后悔改一步,即将对方当前步和本方上一步删除,本方重新下棋。
程序代码(本页不足请附页)类的定义:class Game{public:Game(int M);void print(); //输出棋盘(1)void print2(); //输出棋盘(2)void two_people(); //双人对战int judge1(int a,int b); //判断玩家1胜利int judge2(int a,int b); //判断玩家2胜利void regret(int a,int b); //悔棋private:int N;char game[10][10];};类的实现:#include<iostream.h>#include"1.h"void Game::print() //输出棋盘(1) {int i,j;cout<<" ";for(i=1;i<N+1;i++)cout<<" "<<i;cout<<endl;for(i=0;i<N;i++){for(j=0;j<=N;j++){if(j==0)cout<<i+1<<" ";elsecout<<". ";}cout<<endl;}}void Game::print2() //输出棋盘(2) {int i,j;cout<<" ";for(i=1;i<N+1;i++)cout<<" "<<i;cout<<endl;for(i=1;i<N+1;i++){for(j=0;j<=N;j++){if(j==0)cout<<i<<" ";else if(game[i][j]=='O')cout<<"O ";else if(game[i][j]=='X')cout<<"X ";elsecout<<". ";}cout<<endl;}}void Game::regret(int a,int b) //悔棋{game[a][b]='0';}void Game::two_people(){int flag=0; //判断玩家int p1,p2; //下棋位置print();for(;;){if(flag==0){cout<<"请玩家一输入下棋位置(玩家二要悔棋请输入两个0)"<<endl;cin>>p1>>p2;if(p1==0&&p2==0){cout<<"请输入要悔棋的坐标"<<endl;cin>>p1>>p2;if(game[p1][p2]!='X'){cout<<"输入有误"<<endl;continue;}regret(p1,p2);}else if(game[p1][p2]!='0'){cout<<"输入有误"<<endl;continue;}else if(p1>=1&&p1<=9&&p2>=1&&p2<=9)game[p1][p2]='O';else{cout<<"输入位置有误,请重输"<<endl;continue;}if(judge1(p1,p2)==1){print2();cout<<"玩家一胜利!"<<endl<<endl;break;}flag=1;print2();}else if(flag==1){cout<<"请玩家二输入下棋位置(玩家一要悔棋请输入两个0)"<<endl;cin>>p1>>p2;if(p1==0&&p2==0){cout<<"请输入要悔棋的坐标"<<endl;cin>>p1>>p2;if(game[p1][p2]!='O'){cout<<"输入有误"<<endl;continue;}regret(p1,p2);}else if(game[p1][p2]!='0'){cout<<"输入有误"<<endl;continue;}else if(p1>=1&&p1<=9&&p2>=1&&p2<=9) game[p1][p2]='X';else{cout<<"输入位置有误,请重输"<<endl;continue;}if(judge2(p1,p2)==1){print2();cout<<"玩家二胜利!"<<endl<<endl;break;}flag=0;print2();}elsecout<<"输入有误,请重输"<<endl;}}int Game::judge1(int a,int b) //判断玩家1胜利{if((game[a][b-1]=='O'&&game[a][b+1]=='O')||(game[a][b-1]=='O'&&game[a][b-2]=='O')||(g ame[a][b+1]=='O'&&game[a][b+2]=='O'))return 1;elseif((game[a+1][b]=='O'&&game[a-1][b]=='O')||(game[a+1][b]=='O'&&game[a+2][b]=='O')||(gamereturn 1;elseif((game[a+1][b+1]=='O'&&game[a-1][b-1]=='O')||(game[a+1][b+1]=='O'&&game[a+2][b+2]==' O')||(game[a-2][b-2]=='O'&&game[a-1][b-1]=='O'))return 1;elseif((game[a+1][b-1]=='O'&&game[a-1][b+1]=='O')||(game[a+1][b-1]=='O'&&game[a+2][b-2]=='O ')||(game[a-2][b+2]=='O'&&game[a-1][b+1]=='O'))return 1;elsereturn 0;}int Game::judge2(int a,int b) //判断玩家2胜利{if((game[a][b-1]=='X'&&game[a][b+1]=='X')||(game[a][b-1]=='X'&&game[a][b-2]=='X')||(game[ a][b+1]=='X'&&game[a][b+2]=='X'))return 1;elseif((game[a+1][b]=='X'&&game[a-1][b]=='X')||(game[a+1][b]=='X'&&game[a+2][b]=='X')||(gamereturn 1;elseif((game[a+1][b+1]=='X'&&game[a-1][b-1]=='X')||(game[a+1][b+1]=='X'&&game[a+2][b+2]==' X')||(game[a-2][b-2]=='X'&&game[a-1][b-1]=='X'))return 1;elseif((game[a+1][b-1]=='X'&&game[a-1][b+1]=='X')||(game[a+1][b-1]=='X'&&game[a+2][b-2]=='X ')||(game[a-2][b+2]=='X'&&game[a-1][b+1]=='X'))return 1;elsereturn 0;}Game::Game(int M) //构造函数{N=M;int i,j;for(i=0;i<=N;i++)for(j=0;j<=N;j++)game[i][j]='0';}类的使用:#include<iostream.h>#include"1.h"void main() //主函数{int i=0,N=0;for(;;){cout<<"《游戏三字连珠》\n============================="<<endl;cout<<"请输入选项:"<<endl;cout<<"1.双人对战\n2.游戏说明\n3.退出游戏"<<endl;cin>>i;if(i==1){cout<<"请输入棋盘大小:(3~9)"<<endl;cin>>N;if(N>9&&N<3){cout<<"输入棋盘大小超过限制,请重新输入"<<endl;continue;}Game g(N);g.two_people();}else if(i==2)cout<<"开始游戏后,玩家轮流输入下棋位置,三颗棋子在任意方向连成一条线后即可胜利"<<endl;else if(i==3){cout<<"再见!O(∩_∩)O~"<<endl;break;}elsecout<<"输入有误,请重输"<<endl;}}。