返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言怎么实现井字棋游戏
  • 135
分享到

C语言怎么实现井字棋游戏

2023-06-25 12:06:27 135人浏览 薄情痞子
摘要

今天就跟大家聊聊有关C语言怎么实现井字棋游戏,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。井字棋游戏要求在3乘3棋盘上,每行都相同或者每列都相同再或者对角线相同,则胜出.因此我们可以

今天就跟大家聊聊有关C语言怎么实现井字棋游戏,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

井字棋游戏要求在3乘3棋盘上,每行都相同或者每列都相同再或者对角线相同,则胜出.因此我们可以使用一个二维数组来表示棋盘,判断胜负只需要判断数组元素是否相同即可.具体我们可以分为以下几步来做:

创建维数组并进行初始化,如果仅仅是一个二维数组来表示棋盘,看起来不是很清楚,因此我们可以对棋盘边框用符号打印出来进行优化一下:

//初始化棋盘void init(char board[max_row][max_col]) { for (int row = 0; row < max_row; row++) {  for (int col = 0; col < max_col; col++) {   board[row][col] =' ';  } } srand((unsigned int)time(0));}//打印棋盘void print(char board[max_row][max_col]) { system("cls");//每次打印之前清除掉上一次的结果. for (int a = 0; a < max_col; a++) {  printf("+---+---+---+\n");  for (int b = 0; b < max_row; b++) {   printf("| %c ", board[a][b]);  }  printf("| \n"); } printf("+---+---+---+\n");}

进行玩家落子,同样是使用数组操作,让玩家输入相对应的坐标,在二维数组的该位置打印'x'来表示玩家下的棋子

void play(char board[max_row][max_col]) { printf("玩家落子阶段!\n"); int a; int b; while (1) {  printf("请输入想要落子的坐标: ");  scanf("%d %d", &a, &b);  //判定玩家落子坐标是否在有效范围内  if (a < 0 || b < 0 || a >= max_row || b >= max_col) {      printf("输入坐标有误请重新输入!\n");                    continue;  }  //判定落子处是否已经存在了棋子  if (board[b][a] != ' ') {                                   printf("此处已被落子无法再落子,请重新输入!\n");   continue;  }  board[b][a] = 'x';       //用'x'表示玩家落子  break; }}

玩家落子结束后让电脑在二维数组中随机落子,使用rand函数产生0到2的随机数进行赋值操作,进而实现电脑随机落子

void computer(char board[max_row][max_col]) { printf("电脑落子阶段!\n"); while (1) {  int a = rand() % max_row; //产生0到2的随机数  int b = rand() % max_col;  if (board[a][b] != ' ') { //判断所下位置是否已经有子   continue;  }  board[a][b] = 'o';  break; }

判断胜负,当玩家落子结束,或者电脑落子结束后,判断是否存在某行或某列或者对角线有相同的元素,如果有则直接判定结果,如果没有则轮到下家落子

char check(char board[max_row][max_col]) { //检测所有行是否相等 for (int cow = 0; cow < max_row; cow++) {  if (board[cow][0] != ' ' && board[cow][0] == board[cow][1] && board[cow][0]==board[cow][2] ) {   return board[cow][0];  } } //检测所有列是否相等 for (int col = 0; col < max_col; col++) {  if (board[0][col] != ' ' && board[0][col] == board[1][col] && board[0][col]==board[2][col] ) {   return board[0][col];  } } //检测对角线是否相等 if (board[0][0] != ' ' && board[0][0] == board[1][1] && board[0][0] == board[2][2]) {  return board[0][0]; } if (board[0][2] != ' ' && board[0][2] == board[1][1] && board[0][2] == board[2][0]) {  return board[0][2]; } if (pingju(board)) {  return 'q';   //棋子已满和棋 } return 'a';       //棋盘未满}//判断棋盘是否棋子已满,如果满了返回1,未满返回0.int pingju(char board[max_row][max_col]) { for (int row = 0; row < max_row; row++) {  for (int col = 0; col < max_col; col++) {   if (board[row][col] == ' ') {    return 0;   }  } } return 1;}

在主函数中调用以上函数,进行操作:

int main() { char board[max_row][max_col] = {0};//数组初始化为0 char winner = 'n'; init(board); //将棋盘中元素初始化为空格 while (1) {  print(board);  //打印棋盘  play(board);   //玩家落子  winner = check(board);  //判断胜负  if (winner != 'a') {      break;  }  computer(board);      //电脑落子  winner = check(board);  //判断胜负  if (winner != 'a') {   break;  } }   if (winner == 'x') {   print(board);   printf("你赢了!");  }  else if (winner == 'o') {   print(board);   printf("你输了!");  }  else if (winner == 'q') {   print(board);   printf("和棋!");  } return 0;

在主函数中利用while循环来实现玩家与电脑的轮流落子,如果当一方落子之后胜负已出,则跳出循环直接打印最终结果.

完整代码如下:

#include <stdio.h>#include <stdlib.h>#include <time.h>#include <windows.h>#define max_row 3#define max_col 3//初始化棋盘void init(char board[max_row][max_col]) { for (int row = 0; row < max_row; row++) {  for (int col = 0; col < max_col; col++) {   board[row][col] =' ';  } } srand((unsigned int)time(0));}//打印棋盘void print(char board[max_row][max_col]) { system("cls");//每次打印之前清除掉上一次的结果. for (int a = 0; a < max_col; a++) {  printf("+---+---+---+\n");  for (int b = 0; b < max_row; b++) {   printf("| %c ", board[a][b]);  }  printf("| \n"); } printf("+---+---+---+\n");} //玩家落子void play(char board[max_row][max_col]) { printf("玩家落子阶段!\n"); int a; int b; while (1) {  printf("请输入想要落子的坐标: ");  scanf("%d %d", &a, &b);  //判定玩家落子坐标是否在有效范围内  if (a < 0 || b < 0 || a >= max_row || b >= max_col) {      printf("输入坐标有误请重新输入!\n");                    continue;  }  //判定落子处是否已经存在了棋子  if (board[a][b] != ' ') {                                   printf("此处已被落子无法再落子,请重新输入!\n");   continue;  }  board[a][b] = 'x';       //用'x'表示玩家落子  break; }}//void computer(char board[max_row][max_col]) { printf("电脑落子阶段!\n"); while (1) {  int a = rand() % max_row; //产生0到2的随机数  int b = rand() % max_col;  if (board[a][b] != ' ') { //判断所下位置是否已经有子   continue;  }  board[a][b] = 'o';  break; }// }//char check(char board[max_row][max_col]) { //检测所有行是否相等 for (int cow = 0; cow < max_row; cow++) {  if (board[cow][0] != ' ' && board[cow][0] == board[cow][1] && board[cow][0]==board[cow][2] ) {   return board[cow][0];  } } //检测所有列是否相等 for (int col = 0; col < max_col; col++) {  if (board[0][col] != ' ' && board[0][col] == board[1][col] && board[0][col]==board[2][col] ) {   return board[0][col];  } } //检测对角线是否相等 if (board[0][0] != ' ' && board[0][0] == board[1][1] && board[0][0] == board[2][2]) {  return board[0][0]; } if (board[0][2] != ' ' && board[0][2] == board[1][1] && board[0][2] == board[2][0]) {  return board[0][2]; } if (pingju(board)) {  return 'q'; } return 'a';}//判断棋盘是否棋子已满,如果满了返回1,未满返回0.int pingju(char board[max_row][max_col]) { for (int row = 0; row < max_row; row++) {  for (int col = 0; col < max_col; col++) {   if (board[row][col] == ' ') {    return 0;   }  } } return 1;} int main() { char board[max_row][max_col] = {0};//数组初始化为0 char winner = 'n'; init(board); //将棋盘中元素初始化为空格 while (1) {  print(board);  //打印棋盘  play(board);   //玩家落子  winner = check(board);  //判断胜负  if (winner != 'a') {      break;  }  computer(board);      //电脑落子  winner = check(board);  //判断胜负  if (winner != 'a') {   break;  } }   if (winner == 'x') {   print(board);   printf("你赢了!");  }  else if (winner == 'o') {   print(board);   printf("你输了!");  }  else if (winner == 'q') {   print(board);   printf("和棋!");  } return 0;}

看完上述内容,你们对C语言怎么实现井字棋游戏有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网其他教程频道,感谢大家的支持。

--结束END--

本文标题: C语言怎么实现井字棋游戏

本文链接: https://lsjlt.com/news/304369.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C语言实现井字棋游戏
    本文实例为大家分享了C语言实现井字棋游戏的具体代码,供大家参考,具体内容如下 首先,我们需要一个大体的思路,先进行宏观规划,再对细节进行实现。 比如: 1、首先需要一个菜单面板作以修...
    99+
    2024-04-02
  • C语言怎么实现井字棋游戏
    今天就跟大家聊聊有关C语言怎么实现井字棋游戏,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。井字棋游戏要求在3乘3棋盘上,每行都相同或者每列都相同再或者对角线相同,则胜出.因此我们可以...
    99+
    2023-06-25
  • C语言实现井字棋小游戏
    C语言实现简单的“井字棋游戏”,供大家参考,具体内容如下 总体构造: 1.游戏菜单的逻辑实现 2.游戏本体的代码实现 part 1:游戏菜单的整体逻辑 ①简单的通过一个输入0和1的s...
    99+
    2024-04-02
  • C语言实现简易井字棋游戏
    井子棋承载了每个人孩童时的美好时光,小到书本、纸张,大到课桌、墙壁,总能找到井字棋盘的痕迹。今天我们就来实际操作一番,用C语言完成一个简单的井字棋游戏,让我们一起重温美好。 棋盘如下...
    99+
    2024-04-02
  • C语言实现简单井字棋游戏
    本文实例为大家分享了C语言实现简单井字棋游戏的具体代码,供大家参考,具体内容如下 游戏截图 源代码 person.h //玩家对战 void person() { int...
    99+
    2024-04-02
  • C语言代码实现井字棋游戏
    井字棋是一个很常见的小游戏。要求对战双方在一个“井”形的棋盘里分别下“*”棋子或者“#”棋子,谁先连成3个,谁就赢。 本次使用C语言来实现这个小游戏。 由于使用函数较多,所以采用多文...
    99+
    2024-04-02
  • C语言如何实现井字棋游戏
    这篇文章主要介绍了C语言如何实现井字棋游戏,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。C语言是什么C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发,使用...
    99+
    2023-06-14
  • 基于C语言实现井字棋游戏
    井字棋游戏要求在3乘3棋盘上,每行都相同或者每列都相同再或者对角线相同,则胜出.因此我们可以使用一个二维数组来表示棋盘,判断胜负只需要判断数组元素是否相同即可.具体我们可以分为以下几...
    99+
    2024-04-02
  • 怎么利用C语言实现井字棋小游戏
    本篇内容主要讲解“怎么利用C语言实现井字棋小游戏”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么利用C语言实现井字棋小游戏”吧!推荐阅读顺序(不建议跳过)先看实现之后的界面 —— 然后看分析程...
    99+
    2023-06-20
  • C语言实现简单的井字棋游戏
    本文实例为大家分享了C语言实现简单井字棋游戏的具体代码,供大家参考,具体内容如下 1.什么是井字棋 井字棋相信大部分人都玩过 规则:双方轮流放子,当某一方的三个子连成一线(行,列,对...
    99+
    2024-04-02
  • 用C语言实现井字棋游戏代码
    目录前言首先得确定程序实现的功能直接上代码:1. 菜单界面2. 棋盘打印3. 玩家下棋4. 电脑下棋(智障下棋版,毫无智能)5. 判断输赢搞定总结前言 我们都玩过或见过这样一种简单地...
    99+
    2024-04-02
  • 利用C语言实现三子棋(井字棋)小游戏
    本文实例为大家分享了C语言实现三子棋(井字棋)小游戏的具体代码,供大家参考,具体内容如下 推荐阅读顺序(不建议跳过) 先看实现之后的界面 —— 然后看分析程序要实现的步骤 —— 之后...
    99+
    2024-04-02
  • 如何通过C语言实现井字棋游戏
    今天就跟大家聊聊有关如何通过C语言实现井字棋游戏,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。井字棋游戏:即三子棋,英文名叫Tic-Tac-Tic,是一种在3*3格子上进行的连珠游戏...
    99+
    2023-06-22
  • C语言实现井字棋游戏(人机对弈)
    井字棋游戏:即三子棋,英文名叫Tic-Tac-Tic,是一种在3*3格子上进行的连珠游戏,和五子棋比较类似,由于棋盘一般不画边线框,格线排成井字故得名。 题目分析 : 要完成该游戏的...
    99+
    2024-04-02
  • python实现井字棋游戏
    本文实例介绍了python实现井字棋游戏的方法,分享给大家,具体内容如下 windows7下python3.4.0编译运行通过。由于采用了cmd调用,所以与Linux不兼容,无法在Linux下运行。 游戏就...
    99+
    2022-06-04
    游戏 python 井字棋
  • C语言实现井字棋(三子棋)
    本文实例为大家分享了C语言实现井字棋的具体代码,供大家参考,具体内容如下 一、实现思路 1、初始化数组 三子棋是九宫格的格式,所以用二维数组接收数据。用‘O'代表电脑下的子,‘X'代...
    99+
    2024-04-02
  • JavaScript Canvas实现井字棋游戏
    本文实例为大家分享了JavaScript Canvas实现井字棋游戏的具体代码,供大家参考,具体内容如下 index.html <!DOCTYPE html> &l...
    99+
    2024-04-02
  • C语言实现经典小游戏井字棋的示例代码
    目录前言一、井字棋游戏的主流程二、游戏部分1.游戏函数2.初始化棋盘3.打印棋盘4.玩家下棋5.电脑下棋(两个难度等级)6.判断游戏是否结束三、 运行展示四、源码展示前言 这是我在学...
    99+
    2022-11-13
    C语言井字棋游戏 C语言 井字棋 C语言 游戏
  • C语言实现井字棋详解
    目录1.主函数2.menu菜单3.test函数4.game函数(1)4.1数据存储的二维数组:InitBoard4.2棋盘的打印:DisplayBoard4.3玩家下棋:Player...
    99+
    2024-04-02
  • C语言二维数组应用之井字棋游戏
    本文实例为大家分享了C语言实现井字棋游戏的具体代码,供大家参考,具体内容如下 数组是C语言中一种重要的数据类型,接下来我和大家分享用二维数组完成一个井字棋游戏。 井字棋,是一种在3*...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作