详解用C语言实现三子棋游戏流程

目录
  • 三子棋游戏简介
  • 一、分析及实现
    • 1.棋盘
    • 2.落子
    • 3.判断输赢
  • 二、程序演示
  • 三、完整代码
    • 1.main.c
    • 2.game.c
    • 3.game.h
  • 总结

三子棋游戏简介

这是一个简单的三子棋小游戏,估计大家小时候都玩儿过,只要能连成三个,无论是行,列还是对角线,就可以胜利了。是不是很简单呢,那我们来尝试一下用C语言来写一个简单的三子棋游戏。

一、分析及实现

1.棋盘

想要玩游戏,那首先应该有一个棋盘吧。因为我们玩儿的是三子棋,所以来说一个3X3的棋盘应该可以满足要求。这里使用了一个三行三列的二维数组来模拟三子棋的棋盘。
有了棋盘之后在开始游戏之前先把棋盘初始化一下,这样看起来更方便。

//初始化棋盘
void InitBoard(char board[][COL], int row, int col)
{
	int i = 0;
	for (i = 0; i < ROW; i++)
	{
		int j = 0;
		for (j = 0; j < COL; j++)
		{
			board[i][j] = ' ';
		}
	}
}

之后呢,再来打印看看,要优化一下再打印出来

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

这是我设计的一个简单的小棋盘

棋盘的风格和样式可以根据自己的喜好更改。
好了,现在我们有了棋盘,有了打印出来的样子,那接下来就应该向棋盘上落子了!

2.落子

下棋呢可以是两个人下,当然也可以自己和电脑下棋,这里我选择和电脑对弈,这样就需要两个功能了,一个是玩家下棋,一个就是电脑下棋了。

//玩家下棋
void Player_move(char board[ROW][COL], int row, int col)
{
	int x = 0;
	int y = 0;
	while (1)
	{
		printf("玩家下棋:->");
		scanf("%d %d", &x, &y);

		if (x > 0 && x <= row && y > 0 && y <= col)
		{
			if (board[x - 1][y - 1] == ' ')
			{
				board[x - 1][y - 1] = 'O';
				break;
			}
			else
			{
				printf("坐标已被占用!\n");
			}
		}
		else
		{
			printf("坐标非法,请重新输入!\n");
		}
	}
}

为了将玩家和电脑区分开,需要使用两个不一样的符号来代表玩家的落子和电脑的落子 玩家----O,电脑----X

//电脑下棋
void Computer_move(char board[ROW][COL], int row, int col)
{
	printf("电脑下棋:\n");
	while (1)
	{
		int x = rand() % ROW;
		int y = rand() % COL;
		if (board[x][y] == ' ')
		{
			board[x][y] = 'X';
			break;
		}
	}
}

玩家的落子可以通过输入坐标,而电脑呢,我们让他随机选择合理的坐标范围进行落子。
那随着玩家和电脑相继落子,我们就需要判断谁获胜了,或者平局的情况。

3.判断输赢

//判断输赢
char Is_win(char board[ROW][COL], int row, int col)
{
	//判断行列
	int i = 0;
	for (i = 0; i < ROW; i++)
	{
		if (board[i][0] == board[i][1] && board[i][1] == board[i][2])
		{
			return board[i][0];
		}

		if (board[0][i] == board[1][i] && board[1][i] == board[2][i])
		{
			return board[0][i];
		}

	}
	//判断对角线
	if ((board[0][0] == board[1][1] && board[1][1] == board[2][2])
		|| (board[0][2] == board[1][1] && board[1][1] == board[2][0]))
	{
		return board[1][1];
	}

	if (Is_full(board, row, col))
	{
		return 'D';  //平局
	}
	return 'C'; //Continue表示继续
}

如果棋盘满了,还没有分出胜负的话就是平局的情况。
为了判断棋盘是否满了,我们也需要相应的功能来简化我们的代码。

//判断棋盘是否满了
int Is_full(char board[ROW][COL], int row, int col)
{
	int i = 0;
	for (i = 0; i < ROW; i++)
	{
		int j = 0;
		for (j = 0; j < COL; j++)
		{
			if (board[i][j] == ' ')
				return 0;
		}
	}
	return 1;
}

二、程序演示

三、完整代码

以下是完整代码,有需要的可以查看,我用了三个文件来存储,两个.c文件用来书写主要代码,一个.h文件用来存储预处理指令和宏定义

1.main.c

#define _CRT_SECURE_NO_WARNINGS 1

#include"game.h"

int main()
{
	test();
	return 0;
}

2.game.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 board[ROW][COL] = {0};
	InitBoard(board, ROW, COL);
	DisplayBoard(board, ROW, COL);

	char ret = 0;
	while (1)
	{
		Player_move(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		ret = Is_win(board, ROW, COL);
		if (ret == 'O')
		{
			printf("玩家赢!\n");
			break;
		}
		if (ret == 'D')
		{
			printf("平局\n");
			break;
		}
		Computer_move(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		ret = Is_win(board, ROW, COL);
		if (ret == 'X')
		{
			printf("电脑赢!\n");
			break;
		}
	}

}
void test()
{
	srand((unsigned int)time(NULL));
	int input = 0;

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

//初始化棋盘
void InitBoard(char board[][COL], int row, int col)
{
	int i = 0;
	for (i = 0; i < ROW; i++)
	{
		int j = 0;
		for (j = 0; j < COL; j++)
		{
			board[i][j] = ' ';
		}
	}
}
//打印棋盘
void DisplayBoard(char board[ROW][COL], int row, int col)
{
	int i = 0;
	for (i = 0; i < row; i++)
	{
		printf("+---+---+---+\n");
		int j = 0;
		for (j = 0; j < col; j++)
		{
			printf("| %c ", board[i][j]);
		}
		printf("|\n");
	}
	printf("+---+---+---+\n");
}
//玩家下棋
void Player_move(char board[ROW][COL], int row, int col)
{
	int x = 0;
	int y = 0;
	while (1)
	{
		printf("玩家下棋:->");
		scanf("%d %d", &x, &y);

		if (x > 0 && x <= row && y > 0 && y <= col)
		{
			if (board[x - 1][y - 1] == ' ')
			{
				board[x - 1][y - 1] = 'O';
				break;
			}
			else
			{
				printf("坐标已被占用!\n");
			}
		}
		else
		{
			printf("坐标非法,请重新输入!\n");
		}
	}
}
//电脑下棋
void Computer_move(char board[ROW][COL], int row, int col)
{
	printf("电脑下棋:\n");
	while (1)
	{
		int x = rand() % ROW;
		int y = rand() % COL;
		if (board[x][y] == ' ')
		{
			board[x][y] = 'X';
			break;
		}
	}
}
//判断棋盘是否满了
int Is_full(char board[ROW][COL], int row, int col)
{
	int i = 0;
	for (i = 0; i < ROW; i++)
	{
		int j = 0;
		for (j = 0; j < COL; j++)
		{
			if (board[i][j] == ' ')
				return 0;
		}
	}
	return 1;
}
//判断输赢
char Is_win(char board[ROW][COL], int row, int col)
{
	//判断行列
	int i = 0;
	for (i = 0; i < ROW; i++)
	{
		if (board[i][0] == board[i][1] && board[i][1] == board[i][2])
		{
			return board[i][0];
		}

		if (board[0][i] == board[1][i] && board[1][i] == board[2][i])
		{
			return board[0][i];
		}

	}
	//判断对角线
	if ((board[0][0] == board[1][1] && board[1][1] == board[2][2])
		|| (board[0][2] == board[1][1] && board[1][1] == board[2][0]))
	{
		return board[1][1];
	}

	if (Is_full(board, row, col))
	{
		return 'D';  //平局
	}
	return 'C'; //Continue表示继续
}

3.game.h

#define _CRT_SECURE_NO_WARNINGS 1

#define ROW 3
#define COL 3

#include<stdio.h>
#include<math.h>
#include<time.h>

void test();
void menu();

void InitBoard(char board[ROW][COL], int, int);
void DisplayBoard(char board[ROW][COL], int, int);
void Player_move(char board[ROW][COL], int, int);
void Computer_move(char board[ROW][COL], int, int);
char Is_win(char board[ROW][COL], int, int);

总结

以上就是一个完整的三子棋小游戏的C语言实现版本,谢谢观看!

以上就是详解用C语言实现三子棋游戏流程的详细内容,更多关于C语言 三子棋的资料请关注我们其它相关文章!

(0)

相关推荐

  • C语言 风靡一时的黄金矿工游戏实现流程详解

    游戏的玩法主要是通过不断采集地下的黄金和钻石,来得到更高的积分.只有完成任务目标,才可以通过相应的关卡.游戏画面中沙滩上的人物便是玩家的角色,下方深褐色的部分是地下,而黄金和钻石就是玩家需要采集的物品.人物右边的四个方框里的物品是游戏中可以使用的道具. 画面中的虚线就是游戏中的探测器,探测器会不断的左右摆动,当摆动到地下的黄金和钻石的位置时,只需要点击矿坑任意处,便可以发射勘探头采集到这些物品,当然一定要瞄准好再出手呦. 当然想要顺利采集到丰富的资源也不是那么简单的,地下矿坑中,会有各式各样的困

  • C语言实现经典扫雷游戏流程

    目录 扫雷小游戏简介 一.分析与实现 1.设计棋盘 2.放置雷以及排雷 二.扫雷小游戏演示 三.源码 总结 扫雷小游戏简介 想必很多人小时候电脑没网的时候都玩儿过这个经典的小游戏,也都被它折磨过.其实这个游戏很简单,通过点击相应位置显示的数字来确定周围雷的数量,在避免踩到雷的同时找出所有的雷就能获得胜利. 这次我们用C语言来实现一个简单的扫雷小游戏. 一.分析与实现 1.设计棋盘 要玩儿扫雷游戏,我们首先应该有一个棋盘.这个棋盘中的雷应该是在开始玩儿游戏的时候就已经布置好了,不能随意变化.但是呢

  • C语言 完整游戏项目坦克大战详细代码

    话不多说 我们今天就来创造出属于我们自己的<坦克大战>,GOGOGO!!! 直接开始吧 这次的源码比较详细,我分了好几个cpp文件,思路更加的清晰,请耐心用心的观看 首先就是我们载入图片的函数tupian.cpp # include "tanke.h" 障碍物 void LaoWang(int * tilex, int * tiley) { IMAGE img; loadimage(&img, _T("res\\tile.bmp")); puti

  • C语言 小游戏打砖块实现流程详解

    始祖是美国英宝格公司(en:Atari Games,ja:アタリ (ゲーム))于1976年推出的街机游戏"Breakout"(en:Breakout),由该公司在1972年发行的"PONG"(en:PONG,ja:ポン (ゲーム),世界上第一款电子游戏,类似台球)改良而来.相较于其前作,一个人就可以玩与变化丰富这两项特点让Breakout相当卖座,使各家公司竞相模仿. 因为规则简单与游戏性,现在许多移动电话都有内建打砖块游戏,也有许多因特网小游戏版本,目前在网上可以

  • 基于C语言实现三子棋小游戏

    在写三子棋之前,我们要先了解三子棋的一个大概的图形,以便于我们整理思路. 首先我们要分模块写代码,不要全部写在主函数里面,模块化的代码便于理解,而且给人一种赏心悦目的感觉,如: game.h game.c test.c game.h---头文件的包含,定义宏变量以及函数声明 #pragma once //头文件的包含 #include<stdio.h> #include<stdlib.h> #include<time.h> //函数的声明 #define ROW 3 #

  • 基于C语言实现简单扫雷游戏

    在每一个电脑里总有一个固定的小游戏-扫雷,那今天就让我们一起来实现下扫雷. 1.主函数的构建 int main() { int input = 0; do { menu(); printf("请选择是否开始游戏(1/0):>"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("游戏退出!"); break; default:

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

    在生活中五子棋是一个十分普遍的一款游戏,今天让我们一起来实现这款游戏. 1.初始化棋盘 char ret; //数据存储在一个二维数组中,玩家下去*,电脑下去#. char board[row][col] = { 0 };//最开始为全是空格 InitBoard(board,row,col);//初始化棋盘 我们利用InitBoard函数来初始化棋盘,用 * 来表示玩家下棋,用 # 来表示电脑下棋. 代码如图: void InitBoard(char board[row][col], int R

  • C语言 完整游戏项目推箱子详细代码

    话不多说 我们今天就来创造出属于我们自己的<推箱子>,GOGOGO!!! 直接开始吧 首先是我们用二维数组特定的数字描绘出这个地图 int cas = 0; int map[3][8][8] = { 1,1,1,1,1,1,1,1, 1,3,4,0,0,4,3,1, 1,0,1,3,0,1,0,1, 1,0,1,4,0,1,0,1, 1,0,0,5,0,0,0,1, 1,0,1,0,0,1,0,1, 1,3,4,0,0,4,3,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1

  • C语言实现简易的扫雷游戏

    本文实例为大家分享了C语言实现简易的扫雷游戏的具体代码,供大家参考,具体内容如下 在正式讲内容之前先说一说扫雷游戏的规则 游戏规则很简单,点击方格,如果是地雷,游戏失败,找到所有地雷游戏胜利 .刚开始需要碰运气,只要点开一个区域,就可以正式开始了. 3.根据现有情况,判断出一定有雷的位置. 4.进一步计算,因为"2"右边的"1"已经有从属的雷了,所以右边的"2"的正下方没有雷,因此可以判断出左边有两颗雷,满足两个"2". 5.

  • 详解用C语言实现三子棋游戏流程

    目录 三子棋游戏简介 一.分析及实现 1.棋盘 2.落子 3.判断输赢 二.程序演示 三.完整代码 1.main.c 2.game.c 3.game.h 总结 三子棋游戏简介 这是一个简单的三子棋小游戏,估计大家小时候都玩儿过,只要能连成三个,无论是行,列还是对角线,就可以胜利了.是不是很简单呢,那我们来尝试一下用C语言来写一个简单的三子棋游戏. 一.分析及实现 1.棋盘 想要玩游戏,那首先应该有一个棋盘吧.因为我们玩儿的是三子棋,所以来说一个3X3的棋盘应该可以满足要求.这里使用了一个三行三列

  • C语言实现三子棋游戏

    本文实例为大家分享了C语言实现三子棋游戏的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> #include<time.h> void chess_board(char arr[3][3]) //打印棋盘 { int i = 0; int j = 0; for (i = 0; i < 3; i++) { printf( " %c | %c | %c \n", arr [i][0], a

  • C语言实现三子棋游戏(初级版)

    本文实例为大家分享了C语言实现三子棋游戏的具体代码,供大家参考,具体内容如下 game.h #include<stdio.h> #include<stdlib.h> #include<time.h> #define ROW 3 #define COL 3 //声明函数 void InitBoard(char board[ROW][COL], int row, int col); //打印棋盘 void PrintBoard(char board[ROW][COL], i

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

    本文实例为大家分享了C语言实现三子棋游戏的具体代码,供大家参考,具体内容如下 说明:该游戏的实现需要用到三个文件 1.test.c:放置主函数(main())和菜单函数(menu())和游戏函数(game()). 2.game.c:放置game()里面的相应操作的函数,例如玩家移动(PlayerMove(board)),电脑移动(ComputerMove(board)),以及每一次移动之后打印当前棋盘内容的函数(DisplayBoard(board))等等.由于这些函数内容较多,所以单独放在一个

  • C语言实现三子棋游戏附注释

    本文实例为大家分享了C语言实现三子棋游戏的具体代码,供大家参考,具体内容如下 概述 三子棋棋盘为九宫格形式,玩家和电脑分别轮流落子,若有一方有三个棋连在一起的情况则胜. 实现过程 1.玩家交互菜单创建 2.棋盘创建与初始化 3.玩家与电脑落子 4.判定胜负关系 多文件实现 头文件 game.h #ifndef __GAME_H__ #define __GAME_H__ #include <stdio.h> #include <time.h> #include <stdlib.

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

    本文实例为大家分享了C语言实现三子棋游戏的具体代码,供大家参考,具体内容如下 先简单介绍一下我的三子棋小游戏是怎么玩的,就是自己跟电脑pk,只不过电脑没这么智能.自己输入想要下的坐标,电脑随机生成一个坐标,直到赢家产生.在这个过程中我觉得比较难的就是赢家的判定部分.在c语言中随机数的产生也就是调用srand()函数利用时间戳来获取随机值.算了游戏太简单,我想你们也都是冲着代码来的,直接上代码. 代码和实现 为了代码逻辑性更高,没那么繁杂,主要将代码分为三个部分,头文件game.h,和两个c文件,

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

    本文实例为大家分享了C语言实现三子棋游戏的具体代码,供大家参考,具体内容如下 初始工作,通过#define 定义一个标识符来表示一个常量(棋盘的横纵坐标) (因为在代码的编写中,会有多处需要用到坐标.那么,在阅读代码时就可能会导致读者疲于理解当前的值到底是代表什么,即会对代码的解读造成困扰.所以,在该代码中通过使用宏定义解决了这个问题,同时也方便后续更改棋盘的大小.) #define MAX_ROW 3 #define MAX_COL 3 游戏创建流程 1. 创建棋盘 创建棋盘(二维数组),并将

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

    本文实例为大家分享了C语言版三子棋游戏的具体代码,供大家参考,具体内容如下 实现一个三子棋小游戏 下面是实现步骤: 总共有需要三个文件 第一,test.c 我们要在这个文件里面实现游戏的主体流程 第二,game.c 在这个文件里我们可以实现各个游戏函数的分装 第三,game.h 在这个文件里我们实现的是各个函数的声明 test.c 1.首先要有一个菜单 让玩家可以做出选择 2.接着对玩家做出的不同选择进行实现 选1就是开始游戏,所以我们进入到game函数里就好了 选0就是退出游戏, 其他选择的话

  • C语言实现三子棋游戏(棋盘可变)

    本文实例为大家分享了C语言实现三子棋游戏的具体代码,供大家参考,具体内容如下 思路: main函数结构部署 game函数功能的实现 ①创建存储空间 ②初始化存储空间为空格 ③打印棋盘 ④实现玩家下棋 ⑤实现电脑下棋 ⑥实现玩家和电脑下棋后的输赢判断 所使用的文件: test.c-----用于测试游戏 game.c----用于实现游戏中的一些函数 game.h-----头文件 test.c #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #

  • 基于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("*********************

随机推荐