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

沈阳手机网站建设网站第一步建立

沈阳手机网站建设,网站第一步建立,在线二维码制作生成器,wordpress 一键登录五子棋是一款经典小游戏#xff0c;今天我们就用c实现简单的五子棋小游戏 目录 用到的算法#xff1a; 思路分析 定义变量 开始写代码 完整代码 结果图#xff1a; 用到的算法#xff1a; 合法移动的判断#xff1a;isValidMove 函数通过检查指定位置是否在棋盘范…五子棋是一款经典小游戏今天我们就用c实现简单的五子棋小游戏 目录 用到的算法 思路分析 定义变量  开始写代码 完整代码  结果图 用到的算法 合法移动的判断isValidMove 函数通过检查指定位置是否在棋盘范围内并且该位置是否为空位来确定是否为合法的移动。 获胜条件的检查checkWin 函数通过遍历四个方向水平、垂直、两个对角线来检查是否存在连续的五个相同类型的棋子。它使用两个 while 循环一个向一个方向移动另一个向相反方向移动以统计横向、纵向和对角线上相同类型棋子的数量。 棋盘状态的打印printBoard 函数使用嵌套的 for 循环来遍历棋盘的每个位置并输出相应的符号来表示该位置的状态。 棋盘是否已满的检查isBoardFull 函数使用嵌套的 for 循环来遍历棋盘的每个位置检查是否存在空位。如果不存在空位则棋盘已满 思路分析 初始化创建一个空的棋盘大小为15x15用二维向量表示。初始时所有位置都是空位。 循环游戏进入一个无限循环在每一轮中依次执行以下步骤 打印当前棋盘状态根据当前轮到的玩家提示玩家输入下子位置检查输入的下子位置是否合法即在棋盘范围内且为空位如果不合法则提示重新输入在棋盘上下子并判断是否获胜或棋盘已满如果获胜或棋盘已满根据情况打印相应的信息并结束游戏。 判断获胜和棋盘是否已满 每次下子后调用 checkWin 函数来检查当前位置是否连成五子如果是则返回获胜如果没有获胜则调用 isBoardFull 函数来判断棋盘是否已满如果棋盘已满则返回平局。 输出棋盘状态 printBoard 函数使用嵌套的 for 循环遍历棋盘的每个位置根据该位置的状态输出相应的符号用于展示当前棋盘状态 定义变量  BOARD_SIZE 定义了棋盘的大小这里设置为15x15。EMPTY、BLACK 和 WHITE 定义了棋盘上的三种状态空位、黑棋和白棋。board 是一个二维向量表示棋盘初始时所有位置都是空位。isValidMove 函数用于判断某个位置是否可以下子。合法的位置必须在棋盘范围内并且为空位。checkWin 函数用于判断某个位置下子后是否获胜。它检查当前位置在四个方向上水平、垂直、两个对角线是否有连续的连续的五个相同类型棋子。如果有则返回 true否则返回 false。printBoard 函数用于打印当前棋盘的状态。isBoardFull 函数用于判断棋盘是否已经满了即没有空位如果棋盘已满则返回 true否则返回 false。main 函数是程序的入口。它使用一个无限循环每次循环轮流让玩家下子然后判断是否游戏结束。如果有一方获胜或者棋盘已满则打印相应的信息并结束游戏。 开始写代码 void printBoard() {for (int i 0; i BOARD_SIZE; i) {for (int j 0; j BOARD_SIZE; j) {cout board[i][j] ;}cout endl;}cout endl; } 这段代码为打印棋盘状态的函数printBoard()使用了嵌套的循环来遍历棋盘并输出每个位置的状态。 具体的实现逻辑如下 外层循环for (int i 0; i BOARD_SIZE; i)遍历棋盘的行数从第一行开始到最后一行。内层循环for (int j 0; j BOARD_SIZE; j)遍历棋盘的列数从第一列开始到最后一列。在内层循环中通过board[i][j]获取当前位置的状态值并使用cout输出该状态值。输出一个空格以分隔不同位置的状态值。内层循环结束后通过cout endl;输出换行符以换行显示下一行的棋盘状态。外层循环结束后通过cout endl;再次输出一个换行符以在棋盘状态的输出之间添加空行。 这样调用printBoard()函数可以按照指定格式输出当前棋盘的状态。每个位置上的状态值可以是空格、X或O等字符表示空位、玩家1和玩家2的棋子。通过这个函数可以直观地展示游戏棋盘的状态给玩家。 bool isValidMove(int row, int col) {return (row 0 row BOARD_SIZE col 0 col BOARD_SIZE board[row][col] EMPTY); } 这段代码是用于判断玩家落子是否合法的函数isValidMove(row, col)其中row和col分别表示玩家输入的坐标值。 具体的实现逻辑如下 首先通过row 0 row BOARD_SIZE col 0 col BOARD_SIZE判断玩家输入的坐标值是否在棋盘范围内。如果超出了棋盘范围则此次落子不合法。否则通过board[row][col] EMPTY判断该位置是否已有棋子即状态值是否为EMPTY。如果该位置上没有棋子则此次落子合法返回true。如果该位置上已经有棋子则此次落子不合法返回false。 通过这个函数可以快速判断玩家输入的坐标是否合法。如果不合法则需要提示玩家重新输入坐标如果合法则可以继续进行游戏。 bool checkWin(int row, int col, char player) {int directions[4][2] {{1, 0}, {0, 1}, {1, 1}, {-1, 1}};for (int i 0; i 4; i) {int count 1;int dx directions[i][0], dy directions[i][1];int r row dx, c col dy;while (r 0 r BOARD_SIZE c 0 c BOARD_SIZE board[r][c] player) {count;r dx;c dy;}dx -dx, dy -dy;r row dx, c col dy;while (r 0 r BOARD_SIZE c 0 c BOARD_SIZE board[r][c] player) {count;r dx;c dy;}if (count 5)return true;}return false; } 这段代码是用于检查玩家是否取得胜利的函数checkWin(row, col, player)其中row和col表示最后一次落子的坐标player表示当前玩家的符号。 具体的实现逻辑如下 首先定义一个二维数组directions[4][2]来表示四个方向分别为向下、向右、右下、左下。每个方向由两个元素组成分别表示在行方向和列方向上的增量。使用一个循环遍历四个方向。在循环内部初始化一个计数器count为1表示已经有一颗当前玩家的棋子。根据当前方向的增量(dx, dy)计算下一个检查的位置(r, c)并检查该位置是否在棋盘范围内且值等于当前玩家的符号。如果满足条件将计数器count加1并更新下一个位置(r, c)为当前位置加上增量(dx, dy)。重复步骤4和步骤5直到碰到越界或者不是当前玩家的棋子。然后将增量(dx, dy)取相反数即改变方向。再次计算下一个检查的位置(r, c)并检查该位置是否在棋盘范围内且值等于当前玩家的符号。如果满足条件将计数器count加1并更新下一个位置(r, c)为当前位置加上增量(dx, dy)。重复步骤8和步骤9直到碰到越界或者不是当前玩家的棋子。检查计数器count是否大于等于5如果是则表示当前玩家在其中一个方向上取得了胜利返回true。如果四个方向都遍历完毕仍未满足取胜条件则返回false。 通过这个函数可以判断当前玩家是否在最后一次落子后取得了胜利。根据游戏规则只有当任意一方在横、竖、斜对角线方向上连续五个棋子时才算获胜。 完整代码  #include iostream #include vectorusing namespace std;const int BOARD_SIZE 15; const char EMPTY -; const char BLACK X; const char WHITE O;vectorvectorchar board(BOARD_SIZE, vectorchar(BOARD_SIZE, EMPTY));bool isValidMove(int row, int col) {return (row 0 row BOARD_SIZE col 0 col BOARD_SIZE board[row][col] EMPTY); }bool checkWin(int row, int col, char player) {int directions[4][2] {{1, 0}, {0, 1}, {1, 1}, {-1, 1}};for (int i 0; i 4; i) {int count 1;int dx directions[i][0], dy directions[i][1];int r row dx, c col dy;while (r 0 r BOARD_SIZE c 0 c BOARD_SIZE board[r][c] player) {count;r dx;c dy;}dx -dx, dy -dy;r row dx, c col dy;while (r 0 r BOARD_SIZE c 0 c BOARD_SIZE board[r][c] player) {count;r dx;c dy;}if (count 5)return true;}return false; }void printBoard() {for (int i 0; i BOARD_SIZE; i) {for (int j 0; j BOARD_SIZE; j) {cout board[i][j] ;}cout endl;}cout endl; }bool isBoardFull() {for (int i 0; i BOARD_SIZE; i) {for (int j 0; j BOARD_SIZE; j) {if (board[i][j] EMPTY)return false;}}return true; }int main() {int row, col;char currentPlayer BLACK;while (true) {printBoard();cout Player currentPlayer , enter your move (row col): ;cin row col;if (!isValidMove(row, col)) {cout Invalid move! Try again. endl;continue;}board[row][col] currentPlayer;if (checkWin(row, col, currentPlayer)) {cout Player currentPlayer wins! endl;break;} else if (isBoardFull()) {cout Its a draw! endl;break;}currentPlayer (currentPlayer BLACK) ? WHITE : BLACK;}printBoard();return 0; }在这个五子棋游戏代码中可以通过以下方式进行输入和输出 输入 玩家输入下子位置可以通过命令行提示玩家输入坐标例如要求玩家输入行和列的数字表示下子位置的坐标。其他玩家操作例如要求玩家输入指令来选择重新开始游戏或退出游戏。 输出 打印当前棋盘状态使用嵌套的循环遍历棋盘根据棋盘上每个位置的状态输出相应的符号可以使用空格、X和O等字符来表示空位、玩家1和玩家2的棋子。提示玩家操作例如提示玩家输入坐标来下子或者提示玩家输入指令以进行其他操作。游戏结果输出当游戏结束时根据游戏结果输出胜利者或者平局信息。错误提示如果玩家输入了无效的指令或下子位置可以输出错误提示信息要求玩家重新输入。 在代码中可以使用适当的输入函数如input()来接收玩家输入并使用适当的输出函数如print()来输出信息到控制台。通过合理地组织输入和输出可以实现与玩家的有效交互并提供友好的游戏体验。 结果图 如果想要更加华丽美观的代码关注博主赞赏2元回复“五子棋华丽代码”即可。
http://www.huolong8.cn/news/307008/

相关文章:

  • 北京网站建设91086武进做网站的公司
  • 湖南网站开发公司电话上海公司注册流程及费用标准
  • 英文网站建设服务合同企业做网站都需要准备哪些材料
  • 室内设计网站配色app深圳品牌公寓
  • 网站单页seo网站须知
  • 做地方门户网站的排名wordpress hook 数据库
  • 网站后台在哪里大都会app支持城市
  • 免费做网站的网址有哪些免费开网站
  • 做网站还是小程序承德名城建设集团网站
  • 保险购买网站宁波建网站模板
  • 电子商务网站建设体会在本地服务器上建设网站的步骤
  • 摄影网站的设计wordpress加漂浮广告
  • 西安微官网自助建站公司网站建设 淘宝客末班
  • 做照片相册最好的网站网站运营需要 做哪些工作
  • 网站建设什么代码最简单wordpress 社交登陆
  • 自己做网站咋做网站地图 seo
  • 免费网站现在是怎么了做网站的皮包公司
  • 网站备案要幕布自媒体平台账号注册
  • 企业网站建设背景安徽省建筑人员信息网
  • pc网站自动生成app制作电子印章
  • 哪个浏览器任何网站都可以访问wordpress显示网站在线人数
  • 做产品推广什么网站会比较好pc手机模板网站建设
  • 常见的有利于seo的网站系统wordpress网站数据迁移
  • 马鞍山网站建设制作公司如今做那些网站能致富
  • 长春网站开发做视频网站审核编辑有假么
  • seo在线网站推广五里桥街道网站建设
  • 阿里企业邮箱登录seo查询网址
  • 网站建设搭建是什么意思北京做微信网站
  • 营销型网站建设用途简述网站制作的一般流程
  • 天津市哪里有做网站的如何不备案做购物网站