三子棋都玩过吧,那C语言现造一个呢???

这篇具有很好参考价值的文章主要介绍了三子棋都玩过吧,那C语言现造一个呢???。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

三子棋简介

棋盘介绍

规则介绍

程序设计

基本流程

游戏逻辑

菜单界面打印

创建棋盘并初始化

打印棋盘

玩家落子

电脑落子

判断胜负

1.判定是否和棋

2.判定胜负

 代码总汇

✅Game.h 头文件

✅Game.c

✅Test.c


前言

        🥰想必各位大佬们上学的时候都玩过这种游戏吧,摊牌了我也玩过,巧了我还是在高中上课的时候偷偷玩的,当然不出意外就要出一点小小意外了,当时被老师逮了个正着,现在还能想起来那年夏天语文课上的画面。当然现在我们也要去玩三子棋,咱们今天自己现造一个程序来玩这个游戏。当然这个程序要有一定的C语言基础,其实里面也都是一些基本的一句没有指针、结构体等等这些高难度的知识点,好,各位小客官们坐稳扶好了要发车了。😍😍 

三子棋简介

        🍔《三子棋》是一款古老的民间传统游戏,又被称为黑白棋、圈圈叉叉棋、井字棋、一条龙、九宫棋等。游戏分为双方对战(这里我们设计的是人机对战),双方依次在9宫格棋盘上摆放棋子,率先将自己的三个棋子连成一条线的一方则视为胜利者,下面我们来详细介绍一下《三子棋》相关的玩法规则🥝

三子棋都玩过吧,那C语言现造一个呢???

棋盘介绍

        🍪棋盘呈横三行列,纵三列分布,为九宫格样式。因为棋盘结构简单,所以在没有制式棋盘时,我们甚至可以随手拿笔画一个简易棋盘来进行游戏,而这最大的好处就是随便找个地方就可以玩这个简单而有趣的游戏了。

规则介绍

        🍁双方手持若干数量(一般是4-5)的棋子,因为如果棋子摆满棋盘,先手方摆放的棋子数量为5,后手方摆放棋子数量为4。

⭕双方轮流在格子里摆放棋子,先连成三棋一线者视为胜利;

⭕棋盘被摆满棋子仍未分出胜利,视为平局。

程序设计

基本流程

在写三子棋的代码之前,我们来看看实现这个游戏的逻辑:

1.菜单界面选择开始或者退出游戏。
2.创建棋盘并初始化。
3.打印棋盘。
4.玩家落子(玩家输入行列坐标的方式来落子),'*’表示玩家落子。
5.判定胜负关系(输,赢,和棋),'Q’表示和棋。
6.电脑落子(随机位置落子) ,'#’表示电脑落子。
7.判定胜负关系。
8.回到 步骤2 继续执行。

菜单界面打印

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

🔴1表示开始玩游戏 

🔴0表示退出游戏

创建棋盘并初始化

棋盘:使用3行3列的二维数组来表示,元素类型是char。

使用宏定义的原因
⭕推高代码可读性,后续代码中遇到3,方便理解含义。
⭕提高扩展性,如果将来要修改棋盘尺寸,代码修改会很方便。

#define ROW 3
#define LEN 3
void DesplayBoard(char board[ROW][LEN], int row, int len)
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < len; j++)
		{
			board[i][j] = ' ';//表示棋盘上的空白区域
		}
	}
}

打印棋盘

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

		if (i < row - 1)
		{
			for (int j = 0; j < len; j++)
			{
				printf("---");
				if (j < len - 1)
					printf("|");
			}
		}
		printf("\n");
	}
}

玩家落子

玩家输入行列坐标表示落子,使用’ * ’表示玩家落子。
1.玩家落子需要在棋盘范围内。
2.玩家要在棋盘上空的地方落子。
3.如果输入的坐标不满足要重新输入。

//玩家下棋
void PlayerMove(char board[ROW][LEN], int row, int len)
{
	while (true)
	{
		int x, y = 0;
		printf("请输入你想要落子的位置->");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= row && y >= 1 && y <= len)
		{
			if (board[x - 1][y - 1] == ' ')
			{
				board[x - 1][y - 1] = '*';
				break;
			}
			else
				printf("已经被占用,请重新输入:\n");
		}
		else
		{
			printf("输入错误,请重新输入\n");
		}
	}
	printf("----玩家 *----\n");
}

电脑落子

电脑随机产生行列坐标,'o’表示电脑落子。

注意:
1.要在主函数中使用srand((unsigned int)time(0))详细可见:这是随机数生成详细的介绍
将时间作为随机数种子,确保得到的行列坐标是真随机。
2.要在棋盘上空的地方下棋。

void ComputerBoard(char board[ROW][LEN], int row, int len)
{
	while (true)
	{
		int x = rand() % row;
		int y = rand() % len;
		if (board[x][y] == ' ')
		{
			board[x][y] = '#';
			break;
		}
	}
	printf("----电脑 #----\n");
}

判断胜负

🍁此处约定返回结果的含义:
💧‘*’ 表示玩家获胜
💧‘#’ 表示电脑获胜
💧’ C’ 表示胜负未分
💧 ‘Q’ 表示和棋

1.判定是否和棋

(1)调用isFull函数。
(2)如果数组中有元素为’ ‘,那么没满,返回0。如果全不为’ ',满了,返回1。
(3)如果棋盘满了未分出胜负,和棋。

2.判定胜负

(1)判定所有的行
(2)判定所有的列
(3)判定两条对角线文章来源地址https://www.toymoban.com/news/detail-493395.html

//判断输赢 玩家赢--> *   电脑赢--> #   平局--> Q   继续--> C
bool IsFull(char board[ROW][LEN], int row, int len)
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < len; j++)
		{
			if (board[i][j] == ' ')
				return false;
		}
	}
	return true;
}
char IsWin(char board[ROW][LEN], int row, int len)
{
	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 < len; 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] != ' ')
		|| (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' '))
	{
		return board[1][1];
	}
	//判断是否平局
	if (IsFull(board, row, len))
	{
		return 'Q';
	}
	//继续游戏
	return 'C';
}

 代码总汇

✅Game.h 头文件

#pragma once
#include<stdio.h>
#include<stdbool.h>
#include <time.h>
#include <stdlib.h>
#define ROW 3
#define LEN 3

void DesplayBoard(char board[ROW][LEN], int row, int len);
void PrintBoard(char board[ROW][LEN], int row, int len);
//玩家下棋
void PlayerMove(char board[ROW][LEN], int row, int len);

//电脑下棋
void ComputerBoard(char board[ROW][LEN], int row, int len);

//判断输赢 玩家赢--> *   电脑赢--> #   平局--> Q   继续--> C
char IsWin(char board[ROW][LEN], int row, int len);

✅Game.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"Game.h"
void DesplayBoard(char board[ROW][LEN], int row, int len)
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < len; j++)
		{
			board[i][j] = ' ';
		}
	}
}
void PrintBoard(char board[ROW][LEN], int row, int len)
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < len; j++) 
		{
			printf(" %c ", board[i][j]);
			if (j < len - 1)
				printf("|");
		}
		printf("\n");

		if (i < row - 1)
		{
			for (int j = 0; j < len; j++)
			{
				printf("---");
				if (j < len - 1)
					printf("|");
			}
		}
		printf("\n");
	}
}
//玩家下棋
void PlayerMove(char board[ROW][LEN], int row, int len)
{
	while (true)
	{
		int x, y = 0;
		printf("请输入你想要落子的位置->");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= row && y >= 1 && y <= len)
		{
			if (board[x - 1][y - 1] == ' ')
			{
				board[x - 1][y - 1] = '*';
				break;
			}
			else
				printf("已经被占用,请重新输入:\n");
		}
		else
		{
			printf("输入错误,请重新输入\n");
		}
	}
	printf("----玩家 *----\n");
}

//电脑下棋
void ComputerBoard(char board[ROW][LEN], int row, int len)
{
	while (true)
	{
		int x = rand() % row;
		int y = rand() % len;
		if (board[x][y] == ' ')
		{
			board[x][y] = '#';
			break;
		}
	}
	printf("----电脑 #----\n");
}

//判断输赢 玩家赢--> *   电脑赢--> #   平局--> Q   继续--> C
bool IsFull(char board[ROW][LEN], int row, int len)
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < len; j++)
		{
			if (board[i][j] == ' ')
				return false;
		}
	}
	return true;
}
char IsWin(char board[ROW][LEN], int row, int len)
{
	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 < len; 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] != ' ')
		|| (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' '))
	{
		return board[1][1];
	}
	//判断是否平局
	if (IsFull(board, row, len))
	{
		return 'Q';
	}
	//继续游戏
	return 'C';
}

✅Test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"Game.h"
void menu()
{
	printf("*********************************\n");
	printf("******1.play    0.exit    *******\n");
	printf("*********************************\n");
}
void game()
{
	char board[ROW][LEN] = { 0 };
	DesplayBoard(board, ROW, LEN);
	char ret = 0;
	while (true)
	{
		PlayerMove(board, ROW, LEN);
		PrintBoard(board, ROW, LEN);
		ret = IsWin(board, ROW, LEN);
		if (ret != 'C')
		{
			break;
		}
		ComputerBoard(board, ROW, LEN);
		PrintBoard(board, ROW, LEN);
		ret = IsWin(board, ROW, LEN);
		if (ret != 'C')
		{
			break;
		}
	}
	if ('*' == ret)
	{
		printf("玩家赢\n");
	}
	else if ('#' == ret)
	{
		printf("电脑赢\n");
	}
	else if ('Q' == ret)
	{
		printf("平局\n");
	}
}
int main()
{
	srand(time(0));

	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);
	return 0;
}

到了这里,关于三子棋都玩过吧,那C语言现造一个呢???的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C语言项目】三子棋

    分文件进行创建 进入游戏前的目录 画出棋盘 玩家落子 电脑落子 输赢判断 接下来,我们分步骤进行详细的解释说明。 在具体的项目实施中,我们需要分成不同的文件进行创建和书写,以此来保证项目的模块化。 那么在三子棋的实际书写中, 源文件: 测试游戏用的代码文件

    2024年02月16日
    浏览(28)
  • 【C语言】三子棋----详解

     💓博客主页:江池俊的博客 ⏩收录专栏:C语言初阶之路 💻代码仓库:江池俊的代码仓库 🎪 社区:GeekHub社区 (欢迎大家加入与我一起探讨学习经验) 🍁 如果觉得博主的文章还不错的话,请点赞👍收藏🌟 三连支持一下博主💞 🔥编译环境:Visual Studio 2022 目录 前言 一、

    2024年02月13日
    浏览(28)
  • C语言——三子棋游戏

    更多C语言实战项目,欢迎浏览C语言——扫雷游戏 控制台实现 游戏提供一个菜单界面,可以根据用户输入来决定“开始游戏”或者“退出游戏” 通过字符‘|’和‘-’来组成一个可视化棋盘 选择开始游戏后,玩家优先落子,落子位置用字符‘X’表示,之后是电脑随机落子,

    2024年02月07日
    浏览(42)
  • 三子棋/井字棋(C语言)

    目录 game.h如下: game.c如下: text.c如下: 这个游戏需要用到三个文件 game.h头文件用来申明函数和导包 #pragma once #define ROW 3 #define COL 3 #include stdlib.h #include time.h #include stdio.h //初始化棋盘的函数 void InitBoard(char board[ROW][COL], int row, int col); //打印棋盘的函数 void DisplayBoard(char board[ROW

    2024年01月20日
    浏览(48)
  • C语言之三子棋游戏

    #define _CRT_SECURE_NO_WARNINGS 1 //测试三子棋 #include\\\"game.h\\\" void menu() {          printf(\\\"**********************************n\\\");     printf(\\\"*****  1.play    0.exit       ****n\\\");     printf(\\\"**********************************n\\\"); } void game()//游戏算法实现 {     char ret = 0;     //数组-存放走出的棋盘信息

    2024年01月21日
    浏览(39)
  • 【Python童年游戏】满满的回忆杀—那些年玩过的童年游戏你还记得吗?那个才是你的菜?看到第一个我就泪奔了(致我们逝去的青春)

    滴一一学生卡🙌 结伴上车的学生仔子们 用笑声打破车厢的沉默 大人眼里的晚高峰 是给放学后快乐😀时光的加时 下车的学生匆匆起身带起 一阵熟悉的栀子香于💓 是关于校园的记忆 开始零零散散地闪现 放学后集合的秘密基地/跟着城市变了模样 超级马里奥里的隐藏地图😁

    2023年04月09日
    浏览(43)
  • C语言三子棋小游戏

    哈喽,大家好,今天我们要利用之前所学习的C语言知识来写一个三子棋小游戏。 目录 1.游戏 2.函数部分 2.1.菜单 2.2.初始化棋盘 2.3.打印棋盘 2.4.玩家下棋 2.5.电脑下棋 2.6.判断输赢 2.7.判断棋盘是否已满 3.完整代码展示 今天我们写的代码分为三个文件来写,分别是: game.h 用来

    2024年02月04日
    浏览(41)
  • C语言:三子棋小游戏

    目标很简单:实现一个 三子棋小游戏。三子棋大家都玩过,规则就不提及了。本博文中实现的三子棋在对局中,电脑落子是随机的,不具有智能性,玩家的落子位置使用键盘输入坐标。下面开始详细介绍如何实现一个简单的三子棋游戏。 想要实现一个小游戏,第一件事就是

    2024年02月09日
    浏览(56)
  • C语言小项目之三子棋

    💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C语言学习分享⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习更多C语言知识   🔝🔝 我们学习完数组之后,可以自己做一些小游戏来巩固我们的知识, 这里的三子棋就是其中一个偏简单的小游戏.详细的实现请看下面

    2024年02月04日
    浏览(31)
  • 三子棋小游戏---(C语言)

    目录 前言: 1.菜单的打印 2.三子棋构思 3.实现三子棋 3.1使用宏的方式定义数组 3.2打印棋盘 3.3玩家下棋 3.4电脑随机下棋 3.5判断结局 4.源码 4.1test.c 4.2game.c  4.3game.h  ❤博主CSDN:啊苏要学习   ▶专栏分类:C语言◀   C语言的学习,是为我们今后学习其它语言打好基础,C生万物

    2024年02月03日
    浏览(80)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包