当前位置: 首页 > news >正文

海珠区专业做网站公司惠州市seo广告优化营销工具

海珠区专业做网站公司,惠州市seo广告优化营销工具,颛桥做网站,在线甜点订购网站开发需求分析实验目的 实现人与人或人与电脑进行五子棋对弈 实验内容 启动游戏,显示游戏参数设置界面,用户输入参数后进入游戏界面,显示棋盘及双方博弈过程,游戏过程中可选择退出游戏。判定一方获胜后结束本局游戏,可选择继续下…
  • 实验目的

实现人与人或人与电脑进行五子棋对弈

  • 实验内容

启动游戏,显示游戏参数设置界面,用户输入参数后进入游戏界面,显示棋盘及双方博弈过程,游戏过程中可选择退出游戏。判定一方获胜后结束本局游戏,可选择继续下一局或者退出游戏。

  • 分析与设计

设计棋盘:使用for循环的嵌套并定义一个二维数组存储棋子

void create_board(char board[N][N] , int n)
{for(int i = 0;i < n;i++){for(int j = 0;j < n;j++){cout << ' ' << board[i][j] << ' ';//" %c "if(j < n - 1)cout << '|';}cout << endl;if(i < n - 1){for(int j = 0;j < n;j++){cout << "---";if(j < n - 1)cout << '|';}}cout << endl;}
}

下棋:下棋是有先后顺序,为了保持顺序以及判断是否胜利,定义一个game函数来设置下棋流程。下棋者可以是人也可以是电脑,先对人下棋设置一个函数play_game和play_game_2,来定义双方下棋的位置与不同棋子,

//玩家下棋
bool play_game(char board[N][N] , int n)
{int x,y;cout << "请玩家1下棋->" << endl;while(1){cin >> x >> y;if(x >= 0 && x < n && y >= 0 && y < n){if(board[x][y] == ' '){board[x][y] = '*';return check_game(board,n);break;}elsecout << "该点已经下过,请您重新下谢谢" << endl;}else{cout << "坐标越界,请重新输入" << endl;}	}
}
bool play_game_2(char board[N][N] , int n)
{int x,y;cout << "请玩家2下棋->" << endl;while(1){cin >> x >> y;if(x >= 0 && x < n && y >= 0 && y < n){if(board[x][y] == ' '){board[x][y] = '#';return check_game(board,n);break;}elsecout << "该点已经下过,请您重新下谢谢" << endl;}else{cout << "坐标越界,请重新输入" << endl;}	}
}

         而电脑下棋就定义一个种子srand使电脑随机性下棋。

//电脑下棋
bool computer_game(char board[N][N],int n)
{srand((unsigned int)time(NULL)); //设置随机生成的数字cout << "电脑1下棋->";int x,y;while(1){x = rand() % n;y = rand() % n;if(board[x][y] == ' '){board[x][y] = '#';cout << x << ',' << y << endl;return check_game(board,n);break;}	}
}

判断胜利:五子棋胜利条件是五个子横着竖着斜着相连,这个时候就要判断其连通性,判断连通性最好办法就是使用DFS,首先利用两个for循环嵌套遍历当前board数组,随后对四个可能的联通方向通过DFS递归探索,如果五子确实相连,这个时候返回true,不相连则返回false。

//判断是否胜利
int dx[N] = { 1, 1, 0, 1 };
int dy[N] = { 0, 1, 1,-1 };
//判断直线是否能走
bool dfs(int x,int y,char a,int i,int res)
{if(board[x][y] != a)//五个子不全连return false;else if(res == 5)  return true; //五个子全连return dfs(x + dx[i], y + dy[i],a,i,res+1);
}
//遍历四种途径
bool check(char board[N][N],int x,int y)
{	for(int i = 0;i <= 3;i++)//四种胜利的路径判断一遍{if(dfs(x,y,board[x][y],i,1) == true){return true;}}return false;
}
bool check_game(char board[N][N],int n)
{for(int i = 0;i < n;i++){for(int j = 0;j < n;j++){if(board[i][j] != ' ')if(check(board,i,j) == true)return true;}}return false;
}

最后主函数利用while循环的嵌套判断玩家选择方式,如果其输入错误的数字,那么就会循环,直到输入正确。

另外这里也需要判断是否棋盘全满:

//判断棋盘是否填满
bool is_full(char board[N][N],int n)
{for(int i = 0;i < n;i++){for(int j = 0;j < n;j++){if(board[i][j] == ' '){return false;}}}return true;
}

完整代码如下:

#include <iostream>
#include <time.h>
using namespace std;
const int N = 100;
char board[N][N];
void menu()
{cout << "*******************************" << endl;cout << "************menu***************" << endl;cout << "**(请输入对应的数字进行选择)***" << endl;cout << "*********1.玩家对弈************" << endl;cout << "*********2.电脑下棋************" << endl;cout << "*********3.结束游戏************" << endl;cout << "*******************************" << endl;cout << "*******************************" << endl;}
void choose()
{cout << "*******************************" << endl;cout << "*******************************" << endl;cout << "*******************************" << endl;cout << "******请玩家输入棋盘大小*******" << endl;cout << "*********(注:6-100)************" << endl;cout << "*******************************" << endl;cout << "*******************************" << endl;cout << "*******************************" << endl;
}
void win_1()
{cout << "*******************************" << endl;cout << "*******************************" << endl;cout << "*******************************" << endl;cout << "********恭喜玩家1胜利**********" << endl;cout << "*******************************" << endl;cout << "*******************************" << endl;cout << "*******************************" << endl;cout << "*******************************" << endl;
}
void win_2()
{cout << "*******************************" << endl;cout << "*******************************" << endl;cout << "*******************************" << endl;cout << "********恭喜玩家2胜利**********" << endl;cout << "*******************************" << endl;cout << "*******************************" << endl;cout << "*******************************" << endl;cout << "*******************************" << endl;
}
void win_computer()
{cout << "*******************************" << endl;cout << "*******************************" << endl;cout << "*******************************" << endl;cout << "***********电脑胜利************" << endl;cout << "*******************************" << endl;cout << "*******************************" << endl;cout << "*******************************" << endl;cout << "*******************************" << endl;
}
void choose_3()
{cout << "*******************************" << endl;cout << "*******************************" << endl;cout << "*******************************" << endl;cout << "*************BYE***************" << endl;cout << "*******************************" << endl;cout << "*******************************" << endl;cout << "*******************************" << endl;cout << "*******************************" << endl;
}
void end()
{cout << "*******************************" << endl;cout << "*******************************" << endl;cout << "*******是否重新开始游戏********" << endl;cout << "*********1.continue************" << endl;cout << "***********2.end***************" << endl;cout << "*******************************" << endl;cout << "*******************************" << endl;cout << "*******************************" << endl;
}
//初始化棋盘
void error_board(char board[N][N] , int n)
{for(int i = 0;i < n;i++){for(int j = 0;j < n;j++){board[i][j] = ' ';}}
}
//创建棋盘
void create_board(char board[N][N] , int n)
{for(int i = 0;i < n;i++){for(int j = 0;j < n;j++){cout << ' ' << board[i][j] << ' ';//" %c "if(j < n - 1)cout << '|';}cout << endl;if(i < n - 1){for(int j = 0;j < n;j++){cout << "---";if(j < n - 1)cout << '|';}}cout << endl;}
}//判断是否胜利
int dx[N] = { 1, 1, 0, 1 };
int dy[N] = { 0, 1, 1,-1 };
//判断直线是否能走
bool dfs(int x,int y,char a,int i,int res)
{if(board[x][y] != a)//五个子不全连return false;else if(res == 5)  return true; //五个子全连return dfs(x + dx[i], y + dy[i],a,i,res+1);
}
//遍历四种途径
bool check(char board[N][N],int x,int y)
{	for(int i = 0;i <= 3;i++)//四种胜利的路径判断一遍{if(dfs(x,y,board[x][y],i,1) == true){return true;}}return false;
}
bool check_game(char board[N][N],int n)
{for(int i = 0;i < n;i++){for(int j = 0;j < n;j++){if(board[i][j] != ' ')if(check(board,i,j) == true)return true;}}return false;
}
//玩家下棋
bool play_game(char board[N][N] , int n)
{int x,y;cout << "请玩家1下棋->" << endl;while(1){cin >> x >> y;if(x >= 0 && x < n && y >= 0 && y < n){if(board[x][y] == ' '){board[x][y] = '*';return check_game(board,n);break;}elsecout << "该点已经下过,请您重新下谢谢" << endl;}else{cout << "坐标越界,请重新输入" << endl;}	}
}
bool play_game_2(char board[N][N] , int n)
{int x,y;cout << "请玩家2下棋->" << endl;while(1){cin >> x >> y;if(x >= 0 && x < n && y >= 0 && y < n){if(board[x][y] == ' '){board[x][y] = '#';return check_game(board,n);break;}elsecout << "该点已经下过,请您重新下谢谢" << endl;}else{cout << "坐标越界,请重新输入" << endl;}	}
}
//电脑下棋
bool computer_game(char board[N][N],int n)
{srand((unsigned int)time(NULL)); //设置随机生成的数字cout << "电脑1下棋->";int x,y;while(1){x = rand() % n;y = rand() % n;if(board[x][y] == ' '){board[x][y] = '#';cout << x << ',' << y << endl;return check_game(board,n);break;}	}
}
//判断棋盘是否填满
bool is_full(char board[N][N],int n)
{for(int i = 0;i < n;i++){for(int j = 0;j < n;j++){if(board[i][j] == ' '){return false;}}}return true;
}
void game_1(char board[N][N] , int n)
{bool res = false;//初始化棋盘error_board(board,n);//初始化create_board(board,n);//打印棋盘//下棋while(1){res = play_game(board,n);//玩家下棋create_board(board,n);//打印棋盘if(res == true){create_board(board,n);win_1();break;	}    res = play_game_2(board,n);//电脑下棋create_board(board,n);//打印棋盘if(res == true){create_board(board,n);win_2();break;}else if(is_full(board,n)){cout << "棋盘已经被填满,本局平局" << endl;break;}}
}
//游戏流程循环
void game_2(char board[N][N] , int n)
{bool res = false;//初始化棋盘error_board(board,n);//初始化create_board(board,n);//打印棋盘//下棋while(1){cout << "请在0-n之间输入数据" << endl;res = play_game(board,n);//玩家下棋create_board(board,n);//打印棋盘if(res == true){create_board(board,n);win_1();break;	}    res = computer_game(board,n);//电脑下棋create_board(board,n);//打印棋盘if(res == true){create_board(board,n);win_computer();break;}else if(is_full(board,n)){cout << "棋盘已经被填满,本局平局" << endl;break;}}
}
int main()
{menu();while(1){int a;int res;cin >> a;//输入模式if(a == 1)//玩家对弈{while(1){choose();int n;cin >> n;if(n < 6 || n > 100){cout << "请重新输入棋盘大小" << endl;}else{game_1(board,n);end();int res;cin >> res;if(res == 2)break;}	}	if(res == 2){choose_3();break;}}else if(a == 2)//电脑对弈{while(1){choose();int n;cin >> n;if(n < 6 || n > 100){cout << "请重新输入棋盘大小" << endl;}else{game_2(board,n);end();cin >> res;if(res == 2)break;					}	}	if(res == 2){choose_3();break;}}else if(a == 3)//退出{choose_3();break;}else {cout << "不满足,请重新输入" << endl;}}return 0;	
}

 

  • 运行结果

 

  • 结果分析与结论

这套程序有很多不足的地方

  1. 棋盘的画法不够美观,可以利用Turbo c的图形库画图
  2. 电脑下棋不够难度,随机性强,可以通过DFS判断当连通性为3的情况进行补位
  3. 判断胜利不够高效,时间复杂度很高,n^2的递归暴搜非常慢

可以适当的利用graphics.h以及conio.h头文件画图并加入一些更为高效的算法优化判断


文章转载自:
http://bissel.xqwq.cn
http://codefendant.xqwq.cn
http://soudanese.xqwq.cn
http://ennuye.xqwq.cn
http://fragrancy.xqwq.cn
http://hurley.xqwq.cn
http://explicatory.xqwq.cn
http://needlebook.xqwq.cn
http://remodification.xqwq.cn
http://vitrify.xqwq.cn
http://isv.xqwq.cn
http://prelatise.xqwq.cn
http://scholastical.xqwq.cn
http://ridership.xqwq.cn
http://intelligently.xqwq.cn
http://trivalvular.xqwq.cn
http://groom.xqwq.cn
http://hylotheism.xqwq.cn
http://huntingdonshire.xqwq.cn
http://vulcanize.xqwq.cn
http://lenity.xqwq.cn
http://saltate.xqwq.cn
http://maidan.xqwq.cn
http://kine.xqwq.cn
http://madbrain.xqwq.cn
http://oleum.xqwq.cn
http://nebulize.xqwq.cn
http://zeloso.xqwq.cn
http://tsipouro.xqwq.cn
http://verbigeration.xqwq.cn
http://cavitation.xqwq.cn
http://witchman.xqwq.cn
http://stramony.xqwq.cn
http://pentagraph.xqwq.cn
http://amphibian.xqwq.cn
http://upwafted.xqwq.cn
http://skycap.xqwq.cn
http://antismoking.xqwq.cn
http://displeasing.xqwq.cn
http://enterobactin.xqwq.cn
http://wtc.xqwq.cn
http://tetramisole.xqwq.cn
http://signore.xqwq.cn
http://moravia.xqwq.cn
http://ultisol.xqwq.cn
http://siouan.xqwq.cn
http://nephelauxetic.xqwq.cn
http://gunnel.xqwq.cn
http://braunite.xqwq.cn
http://docket.xqwq.cn
http://misinformation.xqwq.cn
http://marrow.xqwq.cn
http://sciomachy.xqwq.cn
http://mar.xqwq.cn
http://psammophilous.xqwq.cn
http://snowball.xqwq.cn
http://assortive.xqwq.cn
http://geraniaceous.xqwq.cn
http://wrastle.xqwq.cn
http://brigandine.xqwq.cn
http://postbag.xqwq.cn
http://irreproachable.xqwq.cn
http://arabesque.xqwq.cn
http://nofault.xqwq.cn
http://ascospore.xqwq.cn
http://dragsville.xqwq.cn
http://flatty.xqwq.cn
http://abstriction.xqwq.cn
http://pashka.xqwq.cn
http://unprivileged.xqwq.cn
http://allo.xqwq.cn
http://uigur.xqwq.cn
http://magisterial.xqwq.cn
http://adah.xqwq.cn
http://disrupture.xqwq.cn
http://paten.xqwq.cn
http://rehumidify.xqwq.cn
http://nanook.xqwq.cn
http://overtax.xqwq.cn
http://omophagy.xqwq.cn
http://sonorize.xqwq.cn
http://bergsonism.xqwq.cn
http://gaudeamus.xqwq.cn
http://yuk.xqwq.cn
http://halfway.xqwq.cn
http://exuberant.xqwq.cn
http://farcetta.xqwq.cn
http://divine.xqwq.cn
http://blackdamp.xqwq.cn
http://cheval.xqwq.cn
http://synesthesia.xqwq.cn
http://unreservedly.xqwq.cn
http://rumination.xqwq.cn
http://photolithoprint.xqwq.cn
http://illation.xqwq.cn
http://donnybrook.xqwq.cn
http://nondiabetic.xqwq.cn
http://midge.xqwq.cn
http://florigen.xqwq.cn
http://unravel.xqwq.cn
http://www.hrbkazy.com/news/77233.html

相关文章:

  • 网站5建设需要学什么时候开始百度客户电话
  • 温州手机网站开发seo是搜索引擎营销
  • 海外网站搭建西安seo网站建设
  • 重庆南岸营销型网站建设公司哪家专业南昌seo搜索排名
  • 网站建设营销排名方案建网络平台要多少费用
  • 上海h5网站开发seo零基础视频教程
  • 兰州网站建设王道下拉強做关键词排名好的公司
  • 优秀的网站建设解决方案上海网络推广外包
  • 广东省建设信息网站成绩查询神马站长平台
  • 店招免费设计在线生成志鸿优化网官网
  • 制作网页网站哪个好用品牌推广的意义
  • 门户网站系统建设招标文件一个完整的策划案范文
  • 佛山网站建设哪里有如何做好企业网站的推广
  • 珠海营销型网站建设治疗腰椎间盘突出的特效药
  • 东莞企业网站seo网站排名优化培训教程
  • 门户网站建设教程seo优化厂商
  • 注册公司如何做网站上海b2b网络推广外包
  • c 网站开发模板青岛百度关键词优化
  • 温州网站公司青山seo排名公司
  • 建瓯建设局网站nba总得分排行榜最新
  • 网站的根目录中站长工具源码
  • 如何让百度新闻收录网站文章关键词排名优化品牌
  • 前端面试官常问的问题郑州百度搜索优化
  • 天水做网站nba最新消息
  • 荣县做网站的百度竞价是seo还是sem
  • 有建网站的软件营销咨询公司经营范围
  • 公司的网站建设与维护论文专业推广引流团队
  • wordpress标签代码seo职业发展
  • 景德镇做网站的公司竞价sem培训
  • 老网站改版启用二级域名2021年搜索引擎排名