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

目录
  • 一、三子棋
    • 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语言三子棋游戏内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(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语言如何实现三子棋

    目录 三子棋 测试逻辑 游戏逻辑 初始化棋盘 下棋 判断胜利 总结 相信在座的各位都玩过三子棋和扫雷,但是有哪一位想过自己能够在电脑上实现三子棋呢?今天我们就一起来实现一下吧. 三子棋 首先我们看三子棋,三子棋的实现分两步走,首先是测试逻辑,再是游戏逻辑. 测试逻辑 #define _CRT_SECURE_NO_WARNINGS 1 #include "game.h" void menu() { printf("******************\n"); pri

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

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

  • 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语言实现简易的三子棋小游戏

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

  • 使用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语言实现三子棋小游戏(vs2013多文件)

    本文通过实例为大家分享了C语言实现三子棋小游戏的具体代码,供大家参考,具体内容如下 基本思路: 1.创建一个游戏选择面板. 2.创建并初始化棋盘. 3.玩家落子并判定,电脑落子并判定. 4.判定结果 ,游戏结束! 代码如下: 头文件: #pragma once #include<stdio.h> #include<windows.h> #include<stdlib.h> #include <time.h> #pragma warning(disable:4

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

    本文实例为大家分享了C语言实现三子棋小游戏的具体代码,供大家参考,具体内容如下 1. 规则介绍 三子棋是一种民间传统游戏,又叫九宫棋.圈圈叉叉.一条龙.井字棋等.将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了.但是,有很多时候会出现和棋的情况. 2. 编写思路 2.1 选择界面的编写 提供选择界面(设计者可根据自己的喜好设定棋盘的大小:输入何种数字或者符号开始或者退出游戏也可由设计者自己确定数字) static void Menu() { pri

  • C语言版三子棋小游戏

    本文实例为大家分享了C语言版三子棋小游戏的具体代码,供大家参考,具体内容如下 ①游戏效果 有一个3*3的棋盘 每次下棋后(电脑和玩家),棋盘会更新数据 会有菜单提示相关命令进行相关操作 下棋方法是输入坐标 每一局游戏结束后,会询问是否继续. ②主函数逻辑搭建 任何一个项目的实现,最重要的就是逻辑结构搭建,而各个功能的实现就是采取函数(模块化)进行细分. 所以我们需要搭建逻辑,那么逻辑结构是啥呢? 首先会跳出提示菜单,内容为 0退出游戏,1开始/继续游戏,其他键提示错误,并重新输入 按0后提示 "

  • C语言实现三子棋小游戏(vs2013多文件)

    本文通过实例为大家分享了C语言实现三子棋小游戏的具体代码,供大家参考,具体内容如下 基本思路: 1.创建一个游戏选择面板. 2.创建并初始化棋盘. 3.玩家落子并判定,电脑落子并判定. 4.判定结果 ,游戏结束! 代码如下: 头文件: #pragma once #include<stdio.h> #include<windows.h> #include<stdlib.h> #include <time.h> #pragma warning(disable:4

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

    在用c语言实现三子棋小游戏之前,我们应当了解三子棋的游戏规则:在九宫格棋盘上,哪一方三个棋子连成一线(一行或一列或对角线)即判定哪一方胜利. 以下为源代码: 1.首先打印出菜单. void menu() { printf("**********************************\n"); printf("**********************************\n"); printf("***** 0.play *********

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

    本文实例为大家分享了C语言三子棋小游戏的具体代码,供大家参考,具体内容如下 一.介绍: 运用C语言的数组等相关知识:实现一个简易的三子棋小游戏: 三子棋小游戏的大概内容为 此游戏在设计时:总共设计了三个文件: game.h: 类型的声明和函数的声明 game.c:函数功能的具体实现 test.c: 测试文件 二.具体实现: (1).game.h模块: 代码实现如下: #define _CRT_SECURE_NO_WARNINGS 1 //头文件包含 #include <stdio.h> #in

  • 适合初学者练习的C语言实现三子棋小游戏

    目录 一.写代码前明确下棋时的步骤与顺序 二 根据初步的主函数完成想要的代码 1.写一个函数来初始化棋盘 2.打印棋盘 3.玩家落子 4.电脑落子 5.判断胜负 三.三子棋实现代码 用简单的C语言来实现小时候玩的三子棋游戏,下面是人机对战,当然这个代码的电脑对手是人工智障而不是人工智能 一.写代码前明确下棋时的步骤与顺序 1.创建一个3*3的棋盘. 2.将上面创建的棋盘中每个格初始化成' '状态. 3.打印出初始化完成的棋盘 4.玩家落子 5.电脑落子 6.判断胜负 写代码之前梳理好大概的思路,

  • C语言实现三子棋小游戏全程详解

    目录 前言 思想提升及重要代码片段 三子棋代码 前言 授人以鱼不如授人以渔,这篇文章重点从思想上的角度来写,助你举一反三,在写代码时不再害怕,真的很想对你有帮助呀,代码放在文章最后啦 思想提升及重要代码片段 为什么要拆成三个文件写:1.便于复用代码.重复的功能只要写一遍就可以了,下次要用在其它程序上时只要更改很小的部分或者可以不用更改.2.便于多人协作.在设计软件之初就可以很清楚地分配各个开发部门的任务.模块的编写者本身只要关注他所写的东西,清楚这一部分的功能,留出接口就可以了.另外,对于整个工

  • C语言实现猜数字小游戏的示例代码

    目录 一.猜数字小游戏的要求 二.猜数字小游戏实现的过程 2.1项目创建 2.2头文件内容 2.3源文件内容 三.猜数字小游戏调试结果如下 四.基于猜数字小游戏的总结 五.完整代码 一.猜数字小游戏的要求 猜数字小游戏是我们小时候喜欢我们一个经典小游戏,在本文中,猜数字小游戏主要的功能如下所示 1.登入猜数字小游戏系统,显示小时欢迎界面. 2.用户猜的数字有系统随机在1-20之间生成. 3.用户可以有5次机会猜这个随机生成的数字. 4.若用户猜大了,则系统会显示猜大了,并提示还有多少猜数字的机会

随机推荐