C语言实现简单的井字棋游戏

本文实例为大家分享了C语言实现简单井字棋游戏的具体代码,供大家参考,具体内容如下

1.什么是井字棋

井字棋相信大部分人都玩过

规则:双方轮流放子,当某一方的三个子连成一线(行,列,对角)时,该方获胜。

2.游戏前的准备

1. 菜单

游戏正式开始前我们可以为用户提供一个选择菜单,笔者做了一个最简单的游戏开始菜单:

代码:

/*菜单*/
int menu()
{
 printf("###########################\n");
 printf("##   1.Play 2.Exit   ##\n");
 printf("###########################\n");
 return 0;
}

2. 打印棋盘

要玩游戏我们首先要有一个3*3的棋盘,棋子信息则用一个二维数组来表示,并进行初始化:

char chess[ROW][COL] = { '\0' }; //ROW=3,COL=3

显示棋盘我们可以写一个函数:

/*显示棋盘*/
int ShowBroad(char chess[][COL])
{
 system("cls");  //刷新界面
 printf(" %c | %c |%c          Player:   X\n",chess[0][0],chess[0][1],chess[0][2]);
 printf(" ----------        Computer: O\n");
 printf(" %c | %c |%c \n", chess[1][0], chess[1][1], chess[1][2]);
 printf(" ----------\n");
 printf(" %c | %c |%c \n", chess[2][0], chess[2][1], chess[2][2]);

}

将棋盘打印出来的同时在旁边显示出玩家和电脑所用的棋子。棋盘效果:

由于电脑是随机落子的,这样我们就会用到随机数,于是可以在后面加上随机数的种子,为之后的随机数做准备。
至此,准备工作就完成了,这部分的代码如下:

int a ,count =0;
char chess[ROW][COL] = { '\0' };
menu();        //显示菜单
printf("Please Enter Your Chose:>\n ");
scanf("%d", &a);
if (a != 1){ return 0; }
ShowBroad(chess);
srand((unsigned)time(NULL));

其中count是用来统计已占用的格子。

3.游戏开始

做完准备工作后我们开始正式的游戏逻辑编写。游戏逻辑可以这样考虑:

先由用户输入一个坐标,进行胜负和平局判断,若未产生任何结果则由电脑落子,之后同样进行胜负判断,如此循环直到产生胜负或平局。

基于此,我们将所有游戏过程写在一个死循环中,直到产生游戏结果则跳出。

1. 玩家落子

代码:

 if ((user_x >= 1 && user_x <= 3) && (user_y >= 1 && user_y <= 3)&&\
   chess[user_x-1][user_y-1]=='\0'){  //输入是否合法
   chess[user_x - 1][user_y - 1] = 'X';
   count++;
   if (Judge(chess) == 'X'){    //判断玩家赢
    ShowBroad(chess);
    printf("You Win! :)\n");
    break;
   }
  else if (count == 9){     //判断平局
    ShowBroad(chess);
    printf("Draw!\n");
    break;
   }

解释:当用户输入坐标在棋盘内并且该位置尚未被落子时,(user_x >= 1 && user_x <= 3) && (user_y >= 1 && user_y <= 3)&&\ chess[user_x-1][user_y-1]=='\0')将棋盘对应坐标元素改写成“X”(chess[user_x - 1][user_y - 1] = 'X';),之后将格子占用数count+1.

2. 判断胜平

为了判断是否胜利,我们可以写一个函数,将棋盘现在的数据传入,在里面逐行逐列判断。

代码:

/*判断*/
char Judge(char chess[][COL])
{
 for (int i = 0; i < COL; i++){  //判断行
  if (chess[i][0] == chess[i][1] && chess[i][1] == chess[i][2] && chess[i][2] != '\0')
  {
   return chess[i][0];
  }
 }
 for (int i = 0; i < COL; i++){  //判断列
  if (chess[0][i] == chess[1][i] && chess[1][i] == chess[2][i] && chess[2][i] != '\0')
  {
   return chess[0][i];
  }
 }
 if (chess[0][0] == chess[1][1] && chess[1][1] == chess[2][2] && chess[2][2] != '\0')
  {        //判断对角线
   return chess[0][0];
  }
 if (chess[0][2] == chess[1][1] && chess[1][1] == chess[2][0] && chess[2][0] != '\0')
  {
   return chess[0][2];
  }
  return ' ';
}

此时是玩家落子之后,不会产生负,所以不需要判断是否输了。检查Judge()的返回值。当玩家胜利时输出胜利,游戏结束,当平局时输出平局,游戏结束

if (Judge(chess) == 'X'){  //判断玩家赢
    ShowBroad(chess);
    printf("You Win! :)\n");
    break;
   }
   else if (count == 9){   //判断平局
    ShowBroad(chess);
    printf("Draw!\n");
    break;
   }

3. 电脑落子

电脑是随机落子的,于是需要给chess()传入随机的x和y,于是这里用到rand()

void computer(char chess[][COL])
{
 int x, y;
 while (1){
  x = rand() % (COL) + 0;
  y = rand() % (COL) + 0;
  if (chess[x][y] == '\0'){
   chess[x][y] = 'O';
   break;
  }
 }
 ShowBroad(chess);
}

这里要注意当随机的坐标未被落子时才能使用,所以用死循环来查找一个合法的坐标,当找到时电脑才能落子,之后跳出循环,并刷新棋盘。

4. 判断负

与上面一样,我们调用Judge()函数来判断,当返回的是“O”时候,输出信息,游戏结束。

if (Judge(chess) == 'O'){   //判断电脑赢
    printf("You Lost!\n");
    break;
   }

最终游戏界面:

结束

至此,一个简单的井字棋游戏就完成了,内容简陋,可以优化的地方还有很多,各位可自行扩展。由这个简单的三子棋我们还能进一步发展成五子棋,做出更多的内容,先挖个五子棋的坑,以后来填。

main函数代码:

int main()
{
 int a ,count =0;
 char chess[ROW][COL] = { '\0' };
 menu();           //显示菜单
 printf("Please Enter Your Chose:>\n ");
 scanf("%d", &a);
 if (a != 1){ return 0; }
 ShowBroad(chess);
 srand((unsigned)time(NULL));
 while (1)
 {
  int user_x, user_y;
  printf("Please Enter:<x,y>\n");
  scanf("%d%d", &user_x, &user_y);   //玩家落子
  if ((user_x >= 1 && user_x <= 3) && (user_y >= 1 && user_y <= 3)&&\
   chess[user_x-1][user_y-1]=='\0'){  //输入是否合法
   chess[user_x - 1][user_y - 1] = 'X';
   count++;
   if (Judge(chess) == 'X'){    //判断玩家赢
    ShowBroad(chess);
    printf("You Win! :)\n");
    break;
   }
   else if (count == 9){     //判断平局
    ShowBroad(chess);
    printf("Draw!\n");
    break;
   }
   computer(chess);      //电脑落子
   count++;
   if (Judge(chess) == 'O'){    //判断电脑赢
    printf("You Lost!\n");
    break;
   }
  }
  else continue;
 }
 system("pause");
 return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言实现井字棋小游戏

    C语言实现简单的"井字棋游戏",供大家参考,具体内容如下 总体构造: 1.游戏菜单的逻辑实现 2.游戏本体的代码实现 part 1:游戏菜单的整体逻辑 ①简单的通过一个输入0和1的switch函数实现判断是玩游戏还是退出游戏的逻辑 输入1则进入游戏,而且打完game()即游戏本体之后因为do-while函数输入1会继续循环询问是否玩游戏 输入0则break退出游戏,且退出do-while循环,程序结束. int main() { int input = 0; srand((unsign

  • C语言实现简单井字棋游戏

    本文实例为大家分享了C语言实现简单井字棋游戏的具体代码,供大家参考,具体内容如下 游戏截图 源代码 person.h //玩家对战 void person() { int i,j; initMap(map); //打印棋局 displayMap(map); //未分出胜负且棋局未落满子前无限循环 while(1) { //获取玩家下子位置 getXY(&i,&j); //玩家落子 setPiece(map,i,j); //清屏 system("cls"); //打印棋局

  • C语言实现井字棋游戏

    本文实例为大家分享了C语言实现井字棋游戏的具体代码,供大家参考,具体内容如下 首先,我们需要一个大体的思路,先进行宏观规划,再对细节进行实现. 比如: 1.首先需要一个菜单面板作以修饰,在这个面板上,玩家可以选择进入游戏或者退出游戏. 2.需要一个游戏程序,这个是核心. 差不多就是这两个了,我们可以先把这个写下来,这样也可以方便后面使用,像这样: void Game(); int Menu();//这里Menu之所以用int,是为了用返回值来确定是否退出游戏,并非唯一,也非最佳,读者自己尝试 为

  • C语言实现井字棋(三子棋)

    本文实例为大家分享了C语言实现井字棋的具体代码,供大家参考,具体内容如下 一.实现思路 1.初始化数组 三子棋是九宫格的格式,所以用二维数组接收数据.用'O'代表电脑下的子,'X'代表玩家下的子.未下子的时候初始化 ' '(space).则二维数组为"char"类型,大小为char board[3][3]. 2.打印棋盘 打印出井字的棋盘,同时为了将数据显示在每格的中间,用空格隔开(" %c |")的格式设置棋盘"|"用来形成竖,接着打印&quo

  • C语言实现简易井字棋游戏

    井子棋承载了每个人孩童时的美好时光,小到书本.纸张,大到课桌.墙壁,总能找到井字棋盘的痕迹.今天我们就来实际操作一番,用C语言完成一个简单的井字棋游戏,让我们一起重温美好. 棋盘如下: **功能描述:**棋盘共分为九个格子,一方执"O"为棋,一方执"X"为棋,双方依次选择格子.己方棋子率先连成三子的获胜,若棋盘占满仍未分胜负,则打成平局. 具体功能实现: 1.在页面选择玩家vs玩家,或玩家vs电脑 2.玩家下棋时,输入对应格子的坐标 3.电脑下棋时,使用随机值选择坐

  • C语言实现简单的井字棋游戏

    本文实例为大家分享了C语言实现简单井字棋游戏的具体代码,供大家参考,具体内容如下 1.什么是井字棋 井字棋相信大部分人都玩过 规则:双方轮流放子,当某一方的三个子连成一线(行,列,对角)时,该方获胜. 2.游戏前的准备 1. 菜单 游戏正式开始前我们可以为用户提供一个选择菜单,笔者做了一个最简单的游戏开始菜单: 代码: /*菜单*/ int menu() { printf("###########################\n"); printf("## 1.Play

  • python实现简单的井字棋游戏(gui界面)

    项目输出 项目先决条件 要使用python构建井字游戏,我们需要tkinter模块和python的基本概念 Tkinter模块是用于渲染图形的标准图形用户界面. Tkinter.messagebox用于显示消息框 要安装tkinter模块,我们在命令提示符下使用了pip install命令: pip install tkinter 项目文件结构 这些是使用python构建井字游戏的步骤: 导入模块 初始化窗口 检查结果的功能 检查获胜者的功能 定义标签和按钮 1.导入模块 from tkinte

  • 用C语言实现井字棋游戏代码

    目录 前言 首先得确定程序实现的功能 直接上代码: 1. 菜单界面 2. 棋盘打印 3. 玩家下棋 4. 电脑下棋(智障下棋版,毫无智能) 5. 判断输赢 搞定 总结 前言 我们都玩过或见过这样一种简单地下棋游戏,两位玩家在一个井字形状的棋盘上,用‘*’和‘#’来下棋,获胜条件是横竖斜任意一列三子成列.那如何在C语言怎么写一个简单地黑框框里运行的井字棋呢,我们在接下来开始从0实施这一工程. 首先得确定程序实现的功能 在写代码时列出需求方便我们后面实现它们. 菜单界面棋盘打印棋子存储采用二维数组.

  • C语言二维数组应用之井字棋游戏

    本文实例为大家分享了C语言实现井字棋游戏的具体代码,供大家参考,具体内容如下 数组是C语言中一种重要的数据类型,接下来我和大家分享用二维数组完成一个井字棋游戏. 井字棋,是一种在3*3格子上进行的连珠游戏,和五子棋类似.游戏需要的工具仅为纸和笔,然后由分别代表O和X的两个游戏者轮流在格子里留下标记(一般来说先手者为X),任意三个标记形成一条直线,则为获胜. 井字棋的规则想必大家都已非常清楚,下面来简单梳理一下完成这个游戏的主要思路 一.变量的定义 1.首先要定义棋盘变量为一个3*3的二维数组 

  • python实现简单的井字棋

    本文实例为大家分享了python实现简单的井字棋的具体代码,供大家参考,具体内容如下 使用python实现井字棋游戏,没有具体算法,只是用随机下棋简单实现: import random board = [['+','+','+'],['+','+','+'],['+','+','+']] def ma(board): if isempty(board): a = random.randint(0, 2) b = random.randint(0, 2) if board[a][b] != 'X'

  • 基于C语言实现井字棋游戏

    井字棋游戏要求在3乘3棋盘上,每行都相同或者每列都相同再或者对角线相同,则胜出.因此我们可以使用一个二维数组来表示棋盘,判断胜负只需要判断数组元素是否相同即可.具体我们可以分为以下几步来做: 1.创建维数组并进行初始化,如果仅仅是一个二维数组来表示棋盘,看起来不是很清楚,因此我们可以对棋盘边框用符号打印出来进行优化一下: //初始化棋盘 void init(char board[max_row][max_col]) { for (int row = 0; row < max_row; row++

  • C语言实现井字棋游戏(人机对弈)

    井字棋游戏:即三子棋,英文名叫Tic-Tac-Tic,是一种在3*3格子上进行的连珠游戏,和五子棋比较类似,由于棋盘一般不画边线框,格线排成井字故得名. 题目分析 : 要完成该游戏的编写,我们需要先分析出完成整个游戏过程都需要干什么? 1.首先,需要定义出一个3*3的棋盘,根据相关知识,我们可以以二维数组的方式将棋盘表示出来: 2.棋盘定义出来后,需要将棋盘初始化,将3*3二维数组的每一个位置初始化为‘ ’(空格): 3.有了棋盘,我们就可以开始进行下棋了,首先要确定是玩家先下还是电脑先下.在这

随机推荐