iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言如何实现井字棋游戏
  • 733
分享到

C语言如何实现井字棋游戏

2023-06-14 21:06:24 733人浏览 八月长安
摘要

这篇文章主要介绍了C语言如何实现井字棋游戏,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。C语言是什么C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发,使用

这篇文章主要介绍了C语言如何实现井字棋游戏,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

C语言是什么

C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发,使用C语言可以以简易的方式编译、处理低级存储器。

首先,我们需要一个大体的思路,先进行宏观规划,再对细节进行实现。

比如:

首先需要一个菜单面板作以修饰,在这个面板上,玩家可以选择进入游戏或者退出游戏。
2、需要一个游戏程序,这个是核心。

差不多就是这两个了,我们可以先把这个写下来,这样也可以方便后面使用,像这样:

void Game();int Menu();//这里Menu之所以用int,是为了用返回值来确定是否退出游戏,并非唯一,也非最佳,读者自己尝试

为了丰富游戏内容,我们可以加入一个选项在函数Game()里,比如PVE模式、PVP模式。

void PVP();void PVE();

接下来,我们就可以用主函数把这些东西连起来啦!如下:

int main() { int i=Menu(); if (i == 1) {  Game(); }  printf("再见"); return 0;}

这样就大功告成啦~~(最后哪个再见可以不要,这个代码中,笔者为了优化玩家游戏体验,加入了很多不必要的东西,读者均可以不写,主要视读者兴趣而定)

接下来我们来实现细节,先来写菜单:(如下)

int Menu() {//以下是修饰用的菜单面板 printf("##########################\n"); printf("######               #####\n"); printf("###### 1:开始游戏   #####\n"); printf("###### 2:退出游戏   #####\n"); printf("######               #####\n"); printf("##########################\n"); printf("请选择:");//下面这个循环的目的是为了确认玩家是否输入的是“1”或者“2”,为了使系统可以稳定运行,这个很重要 int i = 0; while (1) {  scanf("%d", &i);  if (i == 1 || i == 2) {   break;  }  printf("\n输入无效,请重新输入:"); } if (i == 1) return 1; return 2;}

这里我们可以看到,返回了 i ,因为我在主函数里需要借助这个返回值确定是否进入游戏~~

完成面板后,我们就要进行我们的核心部分。

函数Game()的实现

同样的,先宏观操作,根据需求来写代码。

void Game() {//首先需要一个看起来像棋盘的东西,数组是个不错的选择,//因为一般我们用‘x'和‘o'来表示两个玩家的棋子,我们这里把数组定义成char类型 char arr[3][3] = {{ ' ',' ',' ' } ,{' ', ' ', ' '}, {' ', ' ', ' '}};//以下是花里胡哨的面板~~ printf("##########################\n"); printf("######               #####\n"); printf("###### 1:人机对战   #####\n"); printf("###### 2:双人对战   #####\n"); printf("###### 3:退出游戏   #####\n"); printf("######               #####\n"); printf("##########################\n"); printf("请选择:");//提示玩家输入的窗口  int choose = 0;//这个循环同样是为了优化系统的稳定,不至于被有些调皮的玩家搞崩~~ while (1) {    scanf("%d", &choose); if (choose == 1 || choose == 2||choose==3)  break; printf("\n输入无效,请重新输入:"); }//根据玩家的选择进入相应的模式,这里if(choose==3)的时候显然Game会运行结束,到达主函数的结束阶段,所以笔者偷了个懒,并没写这个情况~~,不过这并不影响什么。 if (choose == 1)  PVE(); if (choose == 2)  PVP();}

以上都是游戏的基本流程,玩过游戏的老铁应该是烂熟与心的,没玩过也没关系~~,去玩一下就知道了,总之要搞出来一个游戏,我们总得知道玩的过程吧?

接下来实现两个模式:

先写人机吧?(这个限于笔者能力有限,写的比较啰嗦,如果读者有更好的创意,可以去自己实现~~)

void PVE() { int arr[3][3] = { { ' ',' ',' ' } ,{' ', ' ', ' '}, {' ', ' ', ' '} }; //胜负判别 char win = ' '; //落子的坐标定义 int i = 0; int j = 0; //打印棋盘 printf("\n+---+---+---+\n| %c | %c | %c |", arr[0][0], arr[0][1], arr[0][2]); printf("\n+---+---+---+\n| %c | %c | %c |", arr[1][0], arr[1][1], arr[1][2]); printf("\n+---+---+---+\n| %c | %c | %c |", arr[2][0], arr[2][1], arr[2][2]); printf("\n+---+---+---+\n"); while (1) {  //玩家落子  printf("请落子:");  while (1) {   scanf("%d%d", &i, &j);   if (i < 3 && j < 3 && arr[i][j] == ' ') {    arr[i][j] = 'x';    break;   }   printf("\n请重新输入:");  }  printf("\n+---+---+---+\n| %c | %c | %c |", arr[0][0], arr[0][1], arr[0][2]);  printf("\n+---+---+---+\n| %c | %c | %c |", arr[1][0], arr[1][1], arr[1][2]);  printf("\n+---+---+---+\n| %c | %c | %c |", arr[2][0], arr[2][1], arr[2][2]);  printf("\n+---+---+---+\n");  //判定胜负  if (arr[0][0] == arr[0][1] && arr[0][0] == arr[0][2] && arr[0][0] == 'x') {   win = 'x';   break;  }  else if (arr[1][0] == arr[1][1] && arr[1][0] == arr[1][2] && arr[1][0] == 'x') {   win = 'x';   break;  }  else if (arr[2][0] == arr[2][1] && arr[2][0] == arr[2][2] && arr[2][0] == 'x') {   win = 'x';   break;  }  else if (arr[0][0] == arr[1][0] && arr[0][0] == arr[2][0] && arr[0][0] == 'x') {   win = 'x';   break;  }  else if (arr[0][1] == arr[1][1] && arr[0][1] == arr[2][1] && arr[0][1] == 'x') {   win = 'x';   break;  }  else if (arr[0][2] == arr[1][2] && arr[0][2] == arr[2][2] && arr[0][2] == 'x') {   win = 'x';   break;  }  else if (arr[0][0] == arr[1][1] && arr[0][0] == arr[2][2] && arr[0][0] == 'x') {   win = 'x';   break;  }  else if (arr[0][2] == arr[1][1] && arr[0][2] == arr[2][0] && arr[0][2] == 'x') {   win = 'x';   break;  }  else if (arr[0][0] != ' ' && arr[0][1] != ' ' && arr[0][2] != ' ' && arr[1][0] != ' ' && arr[1][1] != ' ' && arr[1][2] != ' ' && arr[2][1] != ' ' && arr[2][0] != ' ' && arr[2][2] != ' ') {            win = '0';   break;  }  //电脑落子   while (1) {   i = (time(0) % 3);   j = ((time(0)*time(0)) % 3);   if (arr[i][j] == ' ') {    arr[i][j] = 'o';    break;   }  }  printf("\n+---+---+---+\n| %c | %c | %c |", arr[0][0], arr[0][1], arr[0][2]);  printf("\n+---+---+---+\n| %c | %c | %c |", arr[1][0], arr[1][1], arr[1][2]);  printf("\n+---+---+---+\n| %c | %c | %c |", arr[2][0], arr[2][1], arr[2][2]);  printf("\n+---+---+---+\n");  //判定胜负  if (arr[0][0] == arr[0][1] && arr[0][0] == arr[0][2] && arr[0][0] == 'o') {   win = 'o';   break;  }  else if (arr[1][0] == arr[1][1] && arr[1][0] == arr[1][2] && arr[1][0] == 'o') {   win = 'o';   break;  }  else if (arr[2][0] == arr[2][1] && arr[2][0] == arr[2][2] && arr[2][0] == 'o') {   win = 'o';   break;  }  else if (arr[0][0] == arr[1][0] && arr[0][0] == arr[2][0] && arr[0][0] == 'o') {   win = 'o';   break;  }  else if (arr[0][1] == arr[1][1] && arr[0][1] == arr[2][1] && arr[0][1] == 'o') {   win = 'o';   break;  }  else if (arr[0][2] == arr[1][2] && arr[0][2] == arr[2][2] && arr[0][2] == 'o') {   win = 'o';   break;  }  else if (arr[0][0] == arr[1][1] && arr[0][0] == arr[2][2] && arr[0][0] == 'o') {   win = 'o';   break;  }  else if (arr[0][2] == arr[1][1] && arr[0][2] == arr[2][0] && arr[0][2] == 'o') {   win = 'o';   break;  }  else if (arr[0][0] != ' ' && arr[0][1] != ' ' && arr[0][2] != ' ' && arr[1][0] != ' ' && arr[1][1] != ' ' && arr[1][2] != ' ' && arr[2][1] != ' ' && arr[2][0] != ' ' && arr[2][2] != ' ') {   win = '0';   break;  } } if (win == 'o') {  printf("\n不会吧?不会吧!不会真的有人输给人工智障吧?\n");//笔者还是个孩子,也比较调皮哈~~,不建议这么写,大家成熟些啊~ } else if (win == 'x') {  printf("\n恭喜获胜!!!\n"); } else {  printf("\n恭喜您与人工智障打成平手!!!\n");//捂脸~由于电脑走的棋是笔者用时间戳来随机确定的,可能真的有些人工智障.  //这里如果笔者有兴趣,可以设计一个难度选择界面,通过感应周围的棋子的位置来确定,或者直接输入经验也可以,凭读者喜好决定~~ }  //这里笔者考虑到再来一局的设计,觉得可以提供一些便利,于是就有了下面的递归 int re = 0; printf("##########################\n"); printf("######               #####\n"); printf("###### 1;返回菜单    #####\n"); printf("###### 2:再来一次    #####\n"); printf("######               #####\n"); printf("##########################\n"); printf("请选择:"); while (1) {     scanf("%d", &re);  if (re == 1 || re == 2)   break;  printf("\n输入违法,请重新输入:"); } if (re == 1) {  re=Menu();  if (re == 1) {   Game();  } } else if (re == 2) {  PVE(); }}

好嘞!以同样的方式写下PVP模式,思路差不多,就不详细解释了,具体如下

void PVP() { int arr[3][3] = { { ' ',' ',' ' } ,{' ', ' ', ' '}, {' ', ' ', ' '} }; //胜负判别 char win = ' '; //落子的坐标定义 int i = 0; int j = 0; //打印棋盘 printf("\n+---+---+---+\n| %c | %c | %c |", arr[0][0], arr[0][1], arr[0][2]); printf("\n+---+---+---+\n| %c | %c | %c |", arr[1][0], arr[1][1], arr[1][2]); printf("\n+---+---+---+\n| %c | %c | %c |", arr[2][0], arr[2][1], arr[2][2]); printf("\n+---+---+---+\n"); while (1) {  //玩家p1落子  printf("P1玩家请落子:");  while (1) {   scanf("%d%d", &i, &j);   if (i < 3 && j < 3 && arr[i][j] == ' ') {    arr[i][j] = 'x';    break;   }   printf("\nP1玩家请重新输入:");  }  printf("\n+---+---+---+\n| %c | %c | %c |", arr[0][0], arr[0][1], arr[0][2]);  printf("\n+---+---+---+\n| %c | %c | %c |", arr[1][0], arr[1][1], arr[1][2]);  printf("\n+---+---+---+\n| %c | %c | %c |", arr[2][0], arr[2][1], arr[2][2]);  printf("\n+---+---+---+\n");  //判定胜负  if (arr[0][0] == arr[0][1] && arr[0][0] == arr[0][2] && arr[0][0] == 'x') {   win = 'x';   break;  }  else if (arr[1][0] == arr[1][1] && arr[1][0] == arr[1][2] && arr[1][0] == 'x') {   win = 'x';   break;  }  else if (arr[2][0] == arr[2][1] && arr[2][0] == arr[2][2] && arr[2][0] == 'x') {   win = 'x';   break;  }  else if (arr[0][0] == arr[1][0] && arr[0][0] == arr[2][0] && arr[0][0] == 'x') {   win = 'x';   break;  }  else if (arr[0][1] == arr[1][1] && arr[0][1] == arr[2][1] && arr[0][1] == 'x') {   win = 'x';   break;  }  else if (arr[0][2] == arr[1][2] && arr[0][2] == arr[2][2] && arr[0][2] == 'x') {   win = 'x';   break;  }  else if (arr[0][0] == arr[1][1] && arr[0][0] == arr[2][2] && arr[0][0] == 'x') {   win = 'x';   break;  }  else if (arr[0][2] == arr[1][1] && arr[0][2] == arr[2][0] && arr[0][2] == 'x') {   win = 'x';   break;  }  else if (arr[0][0] != ' ' && arr[0][1] != ' ' && arr[0][2] != ' ' && arr[1][0] != ' ' && arr[1][1] != ' ' && arr[1][2] != ' ' && arr[2][1] != ' ' && arr[2][0] != ' ' && arr[2][2] != ' ') {   win = '0';   break;  }  //玩家p2落子   printf("P2玩家请落子:");  while (1) {   scanf("%d%d", &i, &j);   if (i < 3 && j < 3 && arr[i][j] == ' ') {    arr[i][j] = 'o';    break;   }   printf("\nP2玩家请重新输入:");  }  printf("\n+---+---+---+\n| %c | %c | %c |", arr[0][0], arr[0][1], arr[0][2]);  printf("\n+---+---+---+\n| %c | %c | %c |", arr[1][0], arr[1][1], arr[1][2]);  printf("\n+---+---+---+\n| %c | %c | %c |", arr[2][0], arr[2][1], arr[2][2]);  printf("\n+---+---+---+\n");  //判定胜负  if (arr[0][0] == arr[0][1] && arr[0][0] == arr[0][2] && arr[0][0] == 'o') {   win = 'o';   break;  }  else if (arr[1][0] == arr[1][1] && arr[1][0] == arr[1][2] && arr[1][0] == 'o') {   win = 'o';   break;  }  else if (arr[2][0] == arr[2][1] && arr[2][0] == arr[2][2] && arr[2][0] == 'o') {   win = 'o';   break;  }  else if (arr[0][0] == arr[1][0] && arr[0][0] == arr[2][0] && arr[0][0] == 'o') {   win = 'o';   break;  }  else if (arr[0][1] == arr[1][1] && arr[0][1] == arr[2][1] && arr[0][1] == '0') {   win = 'o';   break;  }  else if (arr[0][2] == arr[1][2] && arr[0][2] == arr[2][2] && arr[0][2] == 'o') {   win = 'o';   break;  }  else if (arr[0][0] == arr[1][1] && arr[0][0] == arr[2][2] && arr[0][0] == 'o') {   win = 'o';   break;  }  else if (arr[0][2] == arr[1][1] && arr[0][2] == arr[2][0] && arr[0][2] == 'o') {   win = 'o';   break;  }  else if (arr[0][0] != ' ' && arr[0][1] != ' ' && arr[0][2] != ' ' && arr[1][0] != ' ' && arr[1][1] != ' ' && arr[1][2] != ' ' && arr[2][1] != ' ' && arr[2][0] != ' ' && arr[2][2] != ' ') {   win = '0';   break;  } } if (win == 'o') {  printf("\nP2获得胜利!!!\n"); } else if (win == 'x') {  printf("\nP1获得胜利!!!\n"); } else {  printf("\n平手!!!\n"); } int re = 0; printf("##########################\n"); printf("######               #####\n"); printf("###### 1;返回菜单   #####\n"); printf("###### 2:再来一次   #####\n"); printf("######               #####\n"); printf("##########################\n"); printf("请选择:"); while (1) {  scanf("%d", &re);  if (re == 1 || re == 2)   break;  printf("\n输入违法,请重新输入:"); } if (re == 1) {  re = Menu();  if (re == 1) {   Game();  } } else if (re == 2) {  PVP(); }}

这样,所有我们设计好的细节就都被实现啦,一个完整的简单游戏就大功告成了。

感谢你能够认真阅读完这篇文章,希望小编分享的“C语言如何实现井字棋游戏”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网其他教程频道,更多相关知识等着你来学习!

--结束END--

本文标题: C语言如何实现井字棋游戏

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

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

  • 微信公众号

  • 商务合作