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

C语言实现井字棋详解

2024-04-02 19:04:59 349人浏览 八月长安
摘要

目录1.主函数2.menu菜单3.test函数4.game函数(1)4.1数据存储的二维数组:InitBoard4.2棋盘的打印:DisplayBoard4.3玩家下棋:Player

1.主函数

这个代码很长,我们可以把它全部写在主函数里面。但是十分不推荐这么做。以后工作以后,很多时候我们负责的只是一个板块,汇总时只需要主函数调用每个人写的函数就能完成复杂项目。在这里我们先写主函数。


#include<stdio.h>
#include<time.h>
#define ROW 3
#define COL 3
//这是对于行和列的初始化
int main()
{
test();
return 0;
}

2.menu菜单

菜单十分容易完成


void menu()
{
printf("输入1开始游戏");
printf("输入0开始游戏");
}

3.test函数

主函数中引用了test函数,我们现在写一个test函数,返回类型void,选择用do while循环来完成大部分函数


void text()
{
int input = 0;
srand((unsigned int)time(NULL));
do
 {
  switch(input)
  {
   case 1:
     game();
     break;
   case 2:
     printf("退出游戏\n");
     break;
   default:
     printf("选择错误,请重新输入\n");
     break;
  }
 }while(input);
}

4.game函数(1)

game函数内部仍然需要引用许多函数,对于一个三乘三的棋盘来说,有以下的步骤:

数据存储到一个字符的二维数组中,玩家下棋是'*',电脑下棋是'#'数组的内容应该是全部空格

初始化棋牌

打印棋盘

下棋

4.1数据存储的二维数组:InitBoard

这个函数的作用是把该二维数组全部初始化成为空格


void InitBoard(char arr[ROW][COL],int row,int col)
//这里的大写的BOW COL是传入的数组的值,小写的bow col是新的行和列
{
 int i = 0;
 int j = 0;
 for(i = 0;i<row;i++)
 {
  for(j = 0;j<col;j++)
  {
   board[i][j] = ' ';
  }
 }
}

4.2棋盘的打印:DisplayBoard

这个函数是把棋盘的形状打印出来


void DisplayBoard(char board[ROW][COL], int row, int col)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			printf(" %c ", board[i][j]);
			if (j < col - 1)
			{
				printf("|");
			}
		}
		printf("\n");
		if (i < row - 1)
		{
			for (j = 0; j < col; j++)
			{
				printf("---");
					if (j < col - 1)
					{
						printf("|");
					}
			}
		}
		printf("\n");
	}
}

4.3玩家下棋:PlayerMove

先写玩家下棋:思路是如果玩家输入的地址原来为空格,那么就把这个位置重新定义为 *


void PlayerMove(char board[ROW][COL],int row,int col)
{
 printf("玩家下棋");
 int x = 0;
 int y = 0;
 while(1)
 {
   scanf("%d %d",&x,&y);
   if(x>=1&&x<=row&&y>=1&&y<=col)//防止输入非法棋子位置
   {
     if(board[x-1][y-1] == ' ')//注意这里的x-1和y-1,玩家在输入的时候输入的假如是1 2,那么给电脑的值就是0 1,这么做是为了与二维数组的下标对应
     {
       board[x-1][y-1] = '*';//注意这里只有一个等号!!!与上面不同,这里是重新定义而上面是相等的时候
       break;
     }
     else
     {
       printf("该坐标被占用,请重新输入\n");
     }
   }
   else
   {
    printf("输入非法,请重新输入");
   }
  }
}

4.4电脑下棋 :ComputerMove

再写电脑下棋:思路是如果电脑输入的地址原来为空格,那么就把这个位置重新定义为 #,只不过不同的是电脑输入的x和y是用rand()%3设置出来的随机值,所以我们还要在前面的test函数中放下srand的设置。


void ComputerMove(char board[ROW][COL],int row,int col)
{
 int x = 0;
 int y = 0;
 printf("电脑下棋\n");
 while(1)
 {
  x = rand()%ROW//此时ROW为3,即x等于0到2的随机值
  y = rand()%COL//此时COL为3,即Y等于0到2的随机值
  if(board[x][y] == '')
  {
    board[x][y] = '#';
    break;
  }
 }
}

4.5输赢的判断 ;Win

我们要有判断输赢的代码,并且初始化一个值让其接受返回值

玩家赢 - '*'
电脑赢 - '#'
平均 --- 'Q'
继续 ----'C'


char Win(char board[ROW][COL], int row, int col)
{
 int i = 0;
 for (i = 0; i < row; i++)//看一下横着的/竖着的3个符号是否相等,返回一个值让game()中的ret接收
	{
		if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1]!='')
		{
			return board[i][1];
		}
	}
 for (i = 0; i < col; i++)
	{
		if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i]!=' ')
		{
			return board[0][i];
		}
	}
		if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1]!=' ')
		{
			return board[1][1];
		}
 if(1 == FULL(board,row,col))
 {
  return 'Q';//如果经过FULL函数判定棋盘满了那么返回一个Q让ret接收,否则返回C
 }
  return 'C';
}

4.6平局的判定 :FULL

因为要返回值,所以这个函数用int类型存放数据


int Full(char board[ROW][COL], int row, int col)
{
 int i = 0;
 int j = 0;
 for(i = 0;i<row;i++)
  {
   for(j = 0;j<col;j++)
    {
      if(board[i][j] == ' ')
      {
         return 0;//返回值为0
      }
    }  
  }
  return 1;//如果棋盘满了则返回1
}

5.game函数

现在可以把所有的函数引用了


void game()
{
	char board[ROW][COL] = {0};
	InitBoard(board, ROW, COL);
	DisplayBoard(board, ROW, COL);
	char ret = 0;//初始化ret,ret为前面说的那个返回值
    //判断输赢的代码
    //玩家赢 - '*'
    //电脑赢 - '#'
    //平均 --- 'Q'
    //继续 ----'C'
	while (1)
	{
		PlayerMove(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		ret = Win(board, ROW, COL);
		if (ret != 'C')
		{
			break;
		}
		ComputerMove(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		ret = Win(board, ROW, COL);
		if (ret != 'C')
		{
			break;
		}
	}
 if (ret == '*')//到这里才分别判定返回ret的所有值
	{
		printf("恭喜你你赢了!\n");
	}
	else if(ret == '#')
	{
		printf("很遗憾你输了!\n");
	}
	else
	{
		printf("平局\n");
	}
	printf("\n");
}

总结

可以吧game.c和test.c分别当做两个源文件,test.c中引用game.c,这样代码也会更加清晰。不管有多少函数需要引用,只需要写出函数的本体再引用,这样一个庞大的代码就被我们拆分成了一段一段小代码,难度也就没那么大了。

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: C语言实现井字棋详解

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

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

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

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

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

  • 微信公众号

  • 商务合作