广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言实现三子棋小游戏的示例代码
  • 398
分享到

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

C语言三子棋游戏C语言三子棋C语言 游戏 2022-11-13 18:11:55 398人浏览 泡泡鱼
摘要

目录一、三子棋1.演示效果2.完整代码二、代码解析1.初始化棋盘2.打印棋盘3.玩家下棋4.电脑下棋5.判断输赢6.游戏主体函数7.菜单函数8.头文件及主函数一、三子棋 三子棋小游戏

一、三子棋

三子棋小游戏的实现主要依赖于循环语句、函数和数组

主要思路:设计棋盘、初始化棋盘、玩家下棋、电脑下棋及判断输赢。

判断输赢条件:当任一方连续三个棋子成一条直线,即为获胜。

1.演示效果

2.完整代码

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 3//行
#define COL 3//列
void Init_board(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++)
		{
			board[i][j] = ' ';
		}
	}
}
void Print_board(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++)
		{
			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");
		}
	}
}
void Player_board(char board[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 (board[x - 1][y - 1] == ' ')
			{
				board[x - 1][y - 1] = '*';
				break;
			}
			else
			{
				printf("坐标已被占用,请重新输入!\n");
			}
		}
		else
		{
			printf("坐标非法,请重新输入!\n");
		}
	}
}
void Computer_board(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] = '#';
			break;
		}
	}
}
int Is_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;
		}
	}
	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] && board[i][0] != ' ')//判断一行中是否相等
		{
			return board[i][0];
		}
	}
	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[0][0] != ' ')//判断对角线是否相等
	{
		return board[0][0];
	}
	if (board[2][0] == board[1][1] && board[1][1] == board[0][2] && board[0][2] != ' ')//判断对角线是否相等
	{
		return board[1][1];
	}
	if (1 == Is_full(board, row, col))//Is_full的返回值等于1,说明棋盘已经满了,没有空格了
		return 'P';
	return 'C';
}
void menu()
{
	printf("*******************\n");
	printf("***  1.开始游戏  **\n");
	printf("***  0.结束游戏  **\n");
	printf("*******************\n");
}
void game()
{
	printf("****  游戏开始  ***\n");
	char ret = 0;
	char board[ROW][COL] = { 0 };
	Init_board(board, ROW, COL);
	Print_board(board, ROW, COL);
	while(1)
	{
		Player_board(board, ROW, COL);
		Print_board(board, ROW, COL);
		ret = Is_win(board, ROW, COL);
		if (ret != 'C')
			break;

		Computer_board(board, ROW, COL);
		Print_board(board, ROW, COL);
		ret = Is_win(board, ROW, COL);
		if (ret != 'C')
			break;
	}
	if (ret == '*')
		printf("玩家赢!\n");
	if (ret == '#')
		printf("电脑赢!\n");
	if (ret == 'P')
		printf("平局!\n");
}
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	do {
		menu();
		printf("请选择>:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("游戏结束!\n");
			break;
		default:
			printf("选择项不存在,请重新选择!\n");
			break;
		}
	} while (input);
}

二、代码解析

1.初始化棋盘

void Init_board(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++)
        {
            board[i][j] = ' ';
        }
    }
}

刚开始定义的数组中初始值为0,但是打印的时候会发生错误,所以要先将数组中的值改为空格,以确保在打印棋盘的时候能够得到想要的结果。

2.打印棋盘

void Print_board(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++)
        {
            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");
        }
    }
}

打印出来为:

3.玩家下棋

void Player_board(char board[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 (board[x - 1][y - 1] == ' ')
            {
                board[x - 1][y - 1] = '*';
                break;
            }
            else
            {
                printf("坐标已被占用,请重新输入!\n");
            }
        }
        else
        {
            printf("坐标非法,请重新输入!\n");
        }
    }
}

玩家下棋要判断输入的下标是否符合要求,是否为空格,当输入的坐标不在范围内时,输入坐标非法,重新输入。当输入的坐标不是空格,已被占用时也需要重新输入,这里注意玩家输入的坐标是从1开始的,并非从0。

4.电脑下棋

void Computer_board(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] = '#';
            break;
        }
    }
}

电脑下棋时,需要用rand函数让其产生在0 ~ row-1和0 ~ col-1之间,并且每次程序开始时产生的数都不相同,所以rand函数要和srand函数配合使用。具体使用方法可参考猜数字小游戏中游戏主题函数的介绍。

5.判断输赢

int Is_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;
        }
    }
    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] && board[i][0] != ' ')
        {
            return board[i][0];
        }
    }
    for (i = 0; i < row; 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[0][0] != ' ')
    {
        return board[0][0];
    }
    if (board[2][0] == board[1][1] && board[1][1] == board[0][2] && board[0][2] != ' ')
    {
        return board[1][1];
    }
    if (1 == Is_full(board, row, col))//Is_full的返回值等于1,说明棋盘已经满了,没有空格了
        return 'P';
    return 'C';
}

假设用P表示平局,用C表示游戏继续,用*表示玩家获胜,用#表示电脑获胜,我们需要判断行、列和对角线上是否有三个连续符号组成的直线,并且可以根据符号判断出是谁赢谁输。当没有三个连续的符号组成的直线,且没有空格时为平局。其中Is_full函数是用来判断数组中是否还有空格。

6.游戏主体函数

通过调用具体的实现函数,完成界面的布局。

void game()
{
	printf("****  游戏开始  ***\n");
	char ret = 0;
	char board[ROW][COL] = { 0 };
	Init_board(board, ROW, COL);
	Print_board(board, ROW, COL);
	while(1)
	{
		Player_board(board, ROW, COL);
		Print_board(board, ROW, COL);
		ret = Is_win(board, ROW, COL);
		if (ret != 'C')
			break;

		Computer_board(board, ROW, COL);
		Print_board(board, ROW, COL);
		ret = Is_win(board, ROW, COL);
		if (ret != 'C')
			break;
	}
	if (ret == '*')
		printf("玩家赢!\n");
	if (ret == '#')
		printf("电脑赢!\n");
	if (ret == 'P')
		printf("平局!\n");
}

7.菜单函数

void menu()
{
    printf("*******************\n");
    printf("***  1.开始游戏  **\n");
    printf("***  0.结束游戏  **\n");
    printf("*******************\n");
}

8.头文件及主函数

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 3//行
#define COL 3//列
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	do {
		menu();
		printf("请选择>:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("游戏结束!\n");
			break;
		default:
			printf("选择项不存在,请重新选择!\n");
			break;
		}
	} while (input);
}

到此这篇关于C语言实现三子棋小游戏的示例代码的文章就介绍到这了,更多相关C语言三子棋游戏内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言实现三子棋小游戏的示例代码

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

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

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

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

下载Word文档
猜你喜欢
  • C语言实现三子棋小游戏的示例代码
    目录一、三子棋1.演示效果2.完整代码二、代码解析1.初始化棋盘2.打印棋盘3.玩家下棋4.电脑下棋5.判断输赢6.游戏主体函数7.菜单函数8.头文件及主函数一、三子棋 三子棋小游戏...
    99+
    2022-11-13
    C语言三子棋游戏 C语言三子棋 C语言 游戏
  • C语言实现三子棋游戏的示例代码
    目录1. 前言2. 准备工作3. 使用二维数组存储下棋的数据4. 初始化棋盘为全空格5. 打印棋盘6. 玩家下棋7. 电脑下棋8. 判断输赢9. 效果展示10. 完整代码game.h...
    99+
    2022-11-13
    C语言三子棋游戏 C语言三子棋 C语言 游戏
  • 基于C语言实现三子棋游戏的示例代码
    1.创建文件  test.c (游戏的测试逻辑)game.c(游戏的实现逻辑)gane.h(游戏实现函数的声明) game.c 和game.h属于游戏实现 test.c属于...
    99+
    2022-11-13
  • C语言版三子棋游戏实现代码
    本文实例为大家分享了C语言版三子棋游戏的具体代码,供大家参考,具体内容如下 实现一个三子棋小游戏 下面是实现步骤: 总共有需要三个文件 第一,test.c 我们要在这个文件里面实现游...
    99+
    2022-11-12
  • C语言实现三子棋小游戏的代码怎么写
    本篇内容介绍了“C语言实现三子棋小游戏的代码怎么写”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!基本思路:1.创建一个游戏选择面板.2.创建...
    99+
    2023-06-08
  • C语言五子棋小游戏实现代码
    本文实例为大家分享了C语言实现五子棋小游戏的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<windows.h> #...
    99+
    2022-11-13
    C语言 五子棋
  • 用C语言实现三子棋小游戏
    本文实例为大家分享了C语言实现三子棋小游戏的具体代码,供大家参考,具体内容如下 1. 规则介绍 三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉、一条龙、井字棋等。将正方形对角线连起...
    99+
    2022-11-12
  • C语言代码实现简易三子棋游戏
    本文实例为大家分享了C语言代码实现简易三子棋游戏的具体代码,供大家参考,具体内容如下 1. 三子棋游戏规则 是黑白棋的一种。三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉、一条龙、井...
    99+
    2022-11-12
  • C语言代码实现简单三子棋游戏
    三子棋是我们小时候经常玩的游戏,今天就分享一下如何用c语言简单实现三子棋吧 编译软件VS2019 c语言实现三子棋运用到了二维数组的知识,在编写三子棋程序时用到了多文件编译(不是必须...
    99+
    2022-11-12
  • C语言三子棋游戏实现代码解析
    本文实例为大家分享了C语言三子棋游戏的具体代码,供大家参考,具体内容如下 编程环境:Visual Studio 2019 (一)创建文件  为了逻辑清晰的编程,我们先创建一...
    99+
    2022-11-12
  • C语言版三子棋小游戏
    本文实例为大家分享了C语言版三子棋小游戏的具体代码,供大家参考,具体内容如下 ①游戏效果 有一个3*3的棋盘 每次下棋后(电脑和玩家),棋盘会更新数据 会有...
    99+
    2022-11-12
  • C语言实现三子棋游戏
    本文实例为大家分享了C语言实现三子棋游戏的具体代码,供大家参考,具体内容如下 game.h 设置头文件 #define ROW 3 #define COL 3 #include&...
    99+
    2022-11-12
  • 使用C语言实现三子棋小游戏
    目录1、实现原理2、实现模块3、实现逻辑4、实现结果本文实例为大家分享了C语言实现三子棋小游戏的具体代码,供大家参考,具体内容如下 1、实现原理 采用二位数组保存棋盘信息,棋盘上面的...
    99+
    2022-11-13
    C语言 三子棋
  • C语言实现简单三子棋小游戏
    三子棋介绍 三子棋,民间传统游戏,又叫九宫棋、圈圈叉叉、一条龙等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了。如果两个人都掌握了...
    99+
    2022-11-12
  • C语言实现三子棋简单小游戏
    三子棋 ,也叫井字棋,是一款大家都玩过的经典小游戏,也是一个适合初学c语言的小伙伴练练手的小项目。 1.整个棋盘采用二维数组存储,下棋时只要获取到x,y两个方向的坐标访问二维数组中的...
    99+
    2022-11-12
  • C语言三子棋小游戏实现全程
    目录前言game.htest.cgame.c游戏代码实现的过程1 初始化棋盘2 打印棋盘3 玩家下4 电脑下5 判断棋盘是否已满6 判断输赢前言 很高兴为大家带来三字棋的扩展版本 g...
    99+
    2022-11-13
  • 基于C语言实现三子棋小游戏
    在写三子棋之前,我们要先了解三子棋的一个大概的图形,以便于我们整理思路。          ...
    99+
    2022-11-12
  • C语言怎么实现三子棋小游戏
    这篇文章主要介绍“C语言怎么实现三子棋小游戏”,在日常操作中,相信很多人在C语言怎么实现三子棋小游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言怎么实现三子棋小游戏”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-17
  • C语言实现三子棋游戏含完整代码
    目录一、text.c源文件部分1、main函数部分2、game函数部分二、game.h头文件部分三、game.c源文件部分运行 三子棋是大家小时候和同桌在纸上都玩过的简单小游戏,这个...
    99+
    2022-11-12
  • C语言实现简易的三子棋小游戏
    本文实例为大家分享了C语言实现三子棋小游戏的具体代码,供大家参考,具体内容如下 1.基本流程 1.菜单界面选择开始或者退出游戏。2.创建棋盘并初始化。3.打印棋盘。4.玩家落子并打印...
    99+
    2022-11-13
    C语言 三子棋
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作