C语言如何实现三子棋

目录
  • 三子棋
    • 测试逻辑
    • 游戏逻辑
      • 初始化棋盘
      • 下棋
      • 判断胜利
  • 总结

相信在座的各位都玩过三子棋和扫雷,但是有哪一位想过自己能够在电脑上实现三子棋呢?今天我们就一起来实现一下吧。

三子棋

首先我们看三子棋,三子棋的实现分两步走,首先是测试逻辑,再是游戏逻辑。

测试逻辑

#define _CRT_SECURE_NO_WARNINGS 1

#include "game.h"

void menu()
{
	printf("******************\n");
	printf("******1.play******\n");
	printf("******0.exit******\n");
	printf("******************\n");
}

void game()
{
	char arr[ROW][COL] = { 0 };
	init_arr(arr, ROW, COL);
	show_arr(arr, ROW, COL);
}

int main()
{
	int input = 0;
	do
	{
		menu();
		printf("请选择->: ");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("开始游戏\n");
			game();
			break;
		case 0:
			printf("退出游戏");
			break;
		default:
			printf("输入错误请重新输入\n");
			break;
		}
	} while (input);
	return 0;
}

测试逻辑是指在test.c中的基本逻辑 比如在这里,若玩家选择1则进行游戏,选择0则退出游戏,选择其他的便提醒输入错误,要求重新输入。

那么接下来我们来看游戏逻辑。

游戏逻辑

游戏逻辑分为三步,你下棋首先得有个盘给你装着嘛,然后你得把棋下到棋盘上去嘛,最后你得知道你到底是赢了还是输了嘛。所以我们的游戏逻辑也就分这三步:初始化棋盘,玩家和电脑下棋,判断输赢。

初始化棋盘

首先给出一个三行三列的二维数组,将其每一个元素都初始化为空格

我们希望能够在屏幕上打印出如示内容,那么我们应该写两个函数,一个初始化数组,一个把数组打印成如示格式

这是头文件代码

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#define ROW 3
#define COL 3 //这里的设置是为了方便以后改动

void init_arr(char arr[ROW][COL], int row, int col);//小写是为了不与常量名冲突

void show_arr(char arr[ROW][COL], int row, int col);//打印数组
void init_arr(char arr[ROW][COL], int row, int col)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			arr[i][j] = ' ';
		}
	}
}

这是初始化函数代码

void show_arr(char arr[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 ", arr[i][j]);
			if (j < col - 1)
			{
				printf("|");
			}
		}
		printf("\n");
		for (j = 0; j < col; j++)
		{
			printf("---");
			if (j < col - 1)
			{
				printf("|");
			}
		}
		printf("\n");
	}
}

这是打印代码

这样的话我们的棋盘就打印完毕了,下面我们来看下棋。

下棋

下棋分为电脑下棋和玩家下棋。

玩家下棋的话需要手动输入坐标,且需要判断输入坐标是否超过数组范围,或者是否被占用。

电脑下棋则可以通过设置随机数的方式来落子,并且能够限制其坐标范围,所以电脑下棋只需要判断是否被占用。

将玩家下棋设置为 *,电脑下棋设置为#。先来看玩家下棋,玩家下棋需要手动输入坐标,所以先创建两个变量x和y,再判断是否越界或用。

上代码!

void player(char arr[ROW][COL], int row, int col)
{
	int x = 0;
	int y = 0;
	while (1)
	{
		printf("请输入坐标->: ");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= row && y >= 1 && y <= col)
		{
			if (' ' == arr[x - 1][y - 1])
			{
				arr[x - 1][y - 1] = '*';
				break;
			}
			else
			{
				printf("该坐标已被占用,请重新输入");
			}
		}
		else
		{
			printf("坐标非法,请重新输入");
		}
	}
}

然后是电脑下棋,这里需要用到rand函数设置随机数,并且不用判断是否越界,其他部分与玩家下棋相同。

void computer(char arr[ROW][COL], int row, int col)
{
	while (1)
	{
		int x = rand() % row;
		int y = rand() % col;
		if (' ' == arr[x][y])
		{
			arr[x][y] = '#';
			break;
		}
	}
}

判断胜利

有四种情况,分别是玩家赢,电脑赢,平局或者还没下完继续。

那么我们写一个函数,令玩家赢返回*,电脑赢返回#,平局返回Q,继续返回c

胜利的方式有行满三个,列满三个,对角线满三个。分别判断。

判断平局则需要知晓棋盘是否已满,所以我们可以再写一个函数判断棋盘是否已满,满则返回1,

否则返回零。上代码!

判断行胜利

	int i = 0;
	int j = 0;
	//行胜利
	for (i = 0; i < row; i++)
	{
		int count = 0;
		for (j = 0; j < col-1; j++)
		{
			if (arr[i][j] == arr[i][j + 1] && arr[i][j] != ' ')
			{
				count++;
				if (count == 2)
				{
					return arr[i][j];
				}
			}
			else
			{
				break;
			}
		}
	}
for (j = 0; j < col; j++)
	{

		int count = 0;
		for (i = 0; i < row - 1; i++)
		{
			if (arr[i][j] == arr[i+1][j] && arr[i][j] != ' ')
			{
				count++;
				if (count == row - 1)
				{
					return arr[i][j];
				}
			}
			else
			{
				break;
			}
		}
	}
	//对角
	//主对角
	int count = 0;
	for (i = 0; i < row-1; i++)
	{

			if (arr[i][i] == arr[i + 1][i + 1] && arr[i][i] != ' ')
			{
				count++;
				if (count == row - 1)
				{
					return arr[i][i];
				}
			}
			else
				break;

	}
//反对角
	for (i = 0; i < row; i++)
	{
		for (j = 1; j < col; j++)
		{
			int count = 0;
			if (arr[i][col - j] == arr[i + 1][col - j - 1]&& arr[i][col-j] != ' ')
			{
				count++;
				if (count == row - 1)
				{
					return arr[i][i];
				}
			}
			else
				break;
		}
	}
int is_full(char arr[ROW][COL], int row, int col)
{
	int i = 0;
	int j = 0;
	int count = 0;
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			if (' ' == arr[i][j])
				return 0;
			else
				count++;
			if (count == row * col)
				return 1;
		}
	}
}

if (1 == is_full(arr, row, col))
	{
		return 'Q';
	}
 

当我们把定义的常量变成5时,我们也可以玩五子棋呀。

总结

就是电脑有点笨,不过等以后我牛了就回来写个牛的五子棋!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • C语言实现三子棋游戏的示例代码

    目录 1. 前言 2. 准备工作 3. 使用二维数组存储下棋的数据 4. 初始化棋盘为全空格 5. 打印棋盘 6. 玩家下棋 7. 电脑下棋 8. 判断输赢 9. 效果展示 10. 完整代码 game.h game.c test.c 1. 前言 大家好,我是努力学习游泳的鱼,今天我们会用C语言实现三子棋.所谓三子棋,就是三行三列的棋盘,玩家可以和电脑下棋,率先连成三个的获胜.话不多说,我们开始吧. 2. 准备工作 我们可以在一个项目中创建三个文件,分别是: test.c,测试游戏的逻辑. gam

  • C语言三子棋的实现思路到过程详解

    目录 一.三子棋小游戏的简单介绍 二.三子棋的思路及代码实现 1.打印游戏菜单 2.选择是否开始游戏 3.创建并且初始化棋盘 3.1.创建棋盘 3.2.初始化棋盘 4.打印格式化棋盘 5.玩家下棋 6.电脑下棋 7.判断是否玩家或者电脑赢 三.整合三子棋游戏代码 game.h game.c test.c 一.三子棋小游戏的简单介绍 要说大家都很熟悉的一个小游戏,三子棋算是其中一个了.相信大家都玩过三子棋小游戏,在这里我还是给大家介绍简单的游戏规则: 一次只能下一个棋子: 玩家下完棋子后,电脑下棋

  • C语言实现简易的三子棋小游戏

    本文实例为大家分享了C语言实现三子棋小游戏的具体代码,供大家参考,具体内容如下 1.基本流程 1.菜单界面选择开始或者退出游戏.2.创建棋盘并初始化.3.打印棋盘.4.玩家落子并打印棋盘5.电脑落子并打印棋盘6.判定胜负关系(输,赢,平局) 2. 配置运行环境 本次游戏用到三个文件,两个源文件test.c,game.c,一个头game.h.其中,game.c,game.h可以称作一个游戏模块,为什么要这样做呢?因为多个文件可以分别处理各自模块的功能,能更好处理各个模块之间的逻辑并且便于后期调试,

  • C语言实现三子棋的示例代码

    目录 一.问题描述 二.基本流程 三.步骤 1. 菜单界面 2. 创建棋盘 3. 棋盘初始化 4.打印棋盘 5.玩家落子 6.电脑落子 7.判断胜负 四.结果演示 五.代码实现 一.问题描述 用 c 语言实现三子棋. 二.基本流程 在写三子棋的代码之前,我们来看看实现这个游戏的逻辑: 1.菜单界面选择开始或者退出游戏. 2.创建棋盘并初始化. 3.打印棋盘. 4.玩家落子(玩家输入行列坐标的方式来落子),'x’表示玩家落子. 5.判定胜负关系(输,赢,和棋),'q’表示和棋. 6.电脑落子(随机

  • 用C语言实现简单的三子棋

    三子棋代码的实现需要一个简单的思路做指引,所以我们先来做一下思路的整理,代码的实现主要分为以下几个步骤: 1.初始化数组2.显示数组3.电脑走4.玩家走5.判断输赢 所以,先写出源文件game.h,如下. #ifndef __GAME_H__   #define __GAME_H__   #define ROWS 3   //定义行   #define COLS 3   //定义列   //初始化数组 void init_board(char board[ROWS][COLS], int row

  • C语言实现三子棋小游戏的示例代码

    目录 一.三子棋 1.演示效果 2.完整代码 二.代码解析 1.初始化棋盘 2.打印棋盘 3.玩家下棋 4.电脑下棋 5.判断输赢 6.游戏主体函数 7.菜单函数 8.头文件及主函数 一.三子棋 三子棋小游戏的实现主要依赖于循环语句.函数和数组. 主要思路:设计棋盘.初始化棋盘.玩家下棋.电脑下棋及判断输赢. 判断输赢条件:当任一方连续三个棋子成一条直线,即为获胜. 1.演示效果 2.完整代码 #include <stdio.h> #include <stdlib.h> #incl

  • 使用C语言实现三子棋小游戏

    目录 1.实现原理 2.实现模块 3.实现逻辑 4.实现结果 本文实例为大家分享了C语言实现三子棋小游戏的具体代码,供大家参考,具体内容如下 1.实现原理 采用二位数组保存棋盘信息,棋盘上面的任何一个位置,里头可以放三个信息: 1.空2.用户落子3.电脑落子 下三子棋就是在二维数组种找对应的空位置,进行落子,落完之后立即就要判断落子位置是否有三字连珠,从而判断谁数输谁赢.每走一次棋会有四种情况: *用户1赢*用户2赢*平局(棋盘被沾满)**没有出结果 继续下棋 2.实现模块 文件名      

  • 基于C语言实现三子棋游戏的示例代码

    1.创建文件  test.c (游戏的测试逻辑)game.c(游戏的实现逻辑)gane.h(游戏实现函数的声明) game.c 和game.h属于游戏实现 test.c属于游戏测试 test.c 源文件(源文件添加)——game.c 源文件(源文件添加)——game.h(头文件添加) 三个文件 2.首先在test.c文件写一个主函数,主函数里面有一个测试函数,测试函数里面写菜单.进入游戏.退出游戏 代码展示: void menu() { printf("*********************

  • C语言实现简单三子棋游戏

    本文实例为大家分享了C语言实现简单三子棋游戏的具体代码,供大家参考,具体内容如下 游戏介绍:使用C语言中二维数组和函数的基本知识实现一个三子棋游戏,这个游戏要实现的基本功能有初始化棋盘.棋盘的打印.玩家下棋.电脑下棋.判断输赢. 代码框架: 1.头文件(game.h) #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<st

  • 利用C语言实现简单三子棋游戏

    本文实例为大家分享了C语言实现简单三子棋游戏的具体代码,供大家参考,具体内容如下 创建文件 只要弄清了二维数组的相关知识,我们就可以去实现简单的三子棋.对于初学者可谓是成就感满满~~ 首先我们会创建三个文件夹分别是game.h .geme.c .test.c .其中game.h中我们会引用所有需要的头文件(test.c和game.c中#include "game.h"即可):对常用量进行宏定义:还有对封装的函数进行申明和注释,使代码可读性更高.更好进行管理. 准备环节 1.菜单打印 既

  • C语言分装实现三子棋游戏详解

    本文实例为大家分享了C语言分装实现三子棋游戏的具体代码,供大家参考,具体内容如下 test.c --------------测试游戏的逻辑 game.h------------关于游戏相关函数的声明 game.c------------游戏相关函数的实现 game.h #include<stdio.h> #include<stdlib.h> #include<time.h> //符号的定义 #define ROW 3 #define COL 3 //函数声明 void

  • C语言版实现三子棋游戏

    如何用C语言来实现三子棋(井字棋),供大家参考,具体内容如下 大致思路如下 1.先打印出菜单供用户进行游戏还是退出游戏 2.编写打印棋盘的函数 3.编写用户和电脑下棋的函数 4.最后对玩家或用户下棋后进行判断输赢 贴张胜利的图片 实现打印菜单的函数 void menu() { printf("******************************************\n"); printf("************* 1. play *************\n

  • C语言简单实现三子棋游戏

    本文实例为大家分享了C语言简单实现三子棋游戏的具体代码,供大家参考,具体内容如下 设计思路 1. 二维数组实现棋盘 2. 设计并打印出棋盘 3. 玩家先手 4. 每一次下棋后判断输赢 首先我们写出游戏的主函数,让玩家能自由选择开始游戏或者退出游戏. int main() { int input = 0; srand((unsigned int)time(NULL));//生成随机数用于电脑下棋 do { menu();//打印菜单 printf("请选择 >"); scanf(&

  • C语言数组实现三子棋应用实例

    本文实例为大家分享了C语言数组实现三子棋应用的具体代码,供大家参考,具体内容如下 三子棋:(拆分部分如下) test.c 测试游戏逻辑 game.h关于游戏相关的函数声明,符号声明 头文件的包含 game.c游戏相关函数的实现 游戏进行的过程:(4种) 1.玩家获胜--*(游戏结束) 2.电脑获胜--#(游戏结束) 3.平局--Q(游戏结束) 4.游戏继续--C IsWin函数 用来判断游戏的状态 game.c #include"game.h" #include<stdio.h&

  • C语言实现简单三子棋程序

    使用C语言实现简单的三子棋程序,主要是对二维数组的运用,我们需要一个头文件,两个源文件来实现. game.h //包含函数的声明,宏定义 test.c //包含主函数,函数调用 game.c //包含函数的定义 整体思路 1.要完成一个简单的三子棋程序,首先需要创建一个二维数组,并完成数组初始化. //使用宏定义定义常量,方便之后对数组的使用 #define ROW 3 //行 #define COL 3 //列 char arr[ROW][COL] = { 0 }; Arr_init(arr,

  • C语言代码实现三子棋小游戏

    本文实例为大家分享了C语言实现三子棋小游戏的具体代码,供大家参考,具体内容如下 设计思路 三子棋的C语言设计的思路: 1.设计一个界面:让玩家运行后即可以看到一个界面,而此时界面需要一个让玩家选择的语句,即可以选择玩游戏或者退出操作.界面设计需要swich语句的实现,退出游戏设计选项为0,即可以当选择退出游戏时直接退出while(循环),即结束游戏. 2.游戏实现:当玩家选择玩游戏时,调用启动游戏的函数,而在游戏中,应当有的内容有: (1)游戏内的棋盘设计:三子棋应当是三行三列的一个棋盘,通过函

  • C语言实现简单三子棋小游戏

    三子棋介绍 三子棋,民间传统游戏,又叫九宫棋.圈圈叉叉.一条龙等.将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了.如果两个人都掌握了技巧,那么一般来说就是平棋.一般来说,下在中间最有利,下在角上次之,下在边上再次之.最大的好处就是随便找个地方就可以玩这个简单而有趣的游戏了. 描述 使用C语言来编写一个简单的三子棋游戏 基本流程 1.显示菜单 void Menu() { printf("*******************************

  • C语言实现简易三子棋

    前言 检验学习成果最好的方式是实践,在学习完C语言的函数和数组以后,就可以简易的实现一些小游戏,本文将介绍如何实现三字棋小游戏.欢迎探讨 思路分析 三子棋的规则是在3X3的棋盘里,率先将自己的三个棋子连成一条直线为赢家,程序实现的核心是玩家的落子以及输赢的判断. 核心流图:当前棋盘->玩家1移动->当前棋盘->输赢判断->玩家2移动->当前棋盘->判断输赢->玩家1移动······ 函数实现 玩家落子 玩家输入坐标将棋子落入棋盘中,即为向一个二维数组赋值.需要注意

随机推荐