初阶C语言——三子棋

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

我们今天讲一个小游戏,三子棋大家应该都玩过吧,就是行和列,或者对角线上有一样大的字符时,就为获胜,今天我们就来写这样的一个代码实现这样的功能

首先我们要创建两个源文件和一个头文件

头文件game.h用来包含我们的头文件和函数的声明以及一些定义
game.c来实现游戏
test.c用来测试我们游戏的逻辑

test.c

#include<stdio.h>
void menu()
{
	printf("***************\n");
	printf("****0.exit*****\n");
	printf("****1.play*****\n");
	printf("***************\n");
}
void test()
{
	int input = 0;
	do
	{
		menu();//打印菜单
		printf("请选择>");
		scanf("%d", &input);
		switch(input)
		{
			case 0:
				printf("退出游戏\n");
				break;
			case 1:
				printf("进入游戏\n");
				break;
			default:
				printf("请重新选择\n");
				break;
		}
	} while (input);
}
int main()
{
	test();
	return 0;
}

我们先实现一个打印菜单的逻辑
初阶C语言——三子棋,c语言,开发语言
选择1进入游戏,选择0退出游戏,选择其他重新选择
用do while函数的话一上来就打印菜单,满足我们的需求
现在我们要实现游戏选择1完成

下一步我们要创建game()函数来实现三子棋的逻辑
首先我们要初始化棋盘

test.c

void game()
{
	//存放下棋的数据
	char board[Row][Col ] = { 0 };
	//初始化棋盘为空格
	Initboard(board, Row, Col);
}

game.h

//初始化棋盘
void Initboard(char board[Row][Col], int row, int col);

game.c

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

		 
}

初始化棋盘之后我们要打印棋盘,打印棋盘是个井字

game.h

//打印棋盘
void Displayboard(char board[Row][Col], int row, int col);

game.c

void Displayboard(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");
		}
	}
}

test.c

//打印棋盘
	Displayboard(board, Row, Col);

接下来我们要做的就是我们下棋

game.h

//玩家下棋
void play_move(char board[Row][Col], int row, int col);

game.c

void play_move(char board[Row][Col], int row, int col)
{
	int x = 0;
	int y = 0;
	printf("玩家下棋\n");
	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");
		}
	}

}

test.c

play_move(board, Row, Col);
	//打印棋盘
	Displayboard(board, Row, Col);

玩家下棋完,我们开始电脑下棋,但是我们在这里电脑下棋完成的只是随机下棋

game.h

void computer_move(char board[Row][Col], int row, int  col);

game.c

void computer_move(char board[Row][Col], int row, int  col)
{
	int x = 0;
	int y = 0;
	printf("电脑下棋\n");
	while (1)
	{
		x = rand() % row;
		y = rand() % col;
		if (board[x][y] == ' ')
		{
			board[x][y] = '#';
			break;
		}
	}
	
}

电脑下棋和玩家下棋是一个循环,且随机,这个时候要用到我们的rand函数,同时要用到srand,还有时间戳的这样一个概念,这些都在猜数字里讲过
那我们接下来就是要思考怎么产生x = rand() % row; y = rand() % col;这样产生坐标,思考这个我们需要思考怎么才能判断输赢,判断三子棋的输赢就是对角线或者行和列要满足,那么我们就做这样的一个函数来实现

test.c

while (1)
	{
		
		//玩家下棋
		play_move(board, Row, Col);
		Displayboard(board, Row, Col);
		 ret=is_win(board,Row,Col);
		 if (ret != 'C')
		 {
			 break;
		 }
		//电脑下棋
		computer_move(board, Row, Col);
		Displayboard(board, Row, Col);
		ret = is_win(board, Row, Col);
		if (ret != 'C')
		{
			break;
		}
	}
	if (ret == '*')
	{
		printf("玩家赢了\n");
	}
	else if (ret == '#')
	{
		printf("电脑赢了\n");
	}
	else
	{
		printf("平局\n");
	}
	Displayboard(board, Row, Col);//再次打印棋盘
}
*玩家赢
#电脑赢
C平局

完整代码
game.h

#pragma once


#include<stdio.h>

#define Row 3
#define Col 3
//初始化棋盘
void Initboard(char board[Row][Col], int row,int  col);
//打印棋盘
void Displayboard(char board[Row][Col], int row,int  col);
//玩家下棋
void play_move(char board[Row][Col], int row, int  col);

//电脑下棋
void computer_move(char board[Row][Col], int row, int  col);
//判断输赢
char is_win(char board[Row][Col], int row, int  col);

game.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"

void Initboard(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++)
		{
			board[i][j] = ' ';
		}
	}
}
void Displayboard(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 play_move(char board[Row][Col], int row, int col)
{
	int x = 0;
	int y = 0;
	printf("玩家下棋\n");
	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_move(char board[Row][Col], int row, int  col)
{
	int x = 0;
	int y = 0;
	printf("电脑下棋\n");
	while (1)
	{
		x = rand() % row;
		y = rand() % col;
		if (board[x][y] == ' ')
		{
			board[x][y] = '#';
			break;
		}
	}
	
}

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];
		}
	}


}

test.c

#define _CRT_SECURE_NO_WARNINGS 1
//测试三子棋逻辑

#include"game.h"
void game()
{
	char ret = 0;
	//存放下棋的数据
	char board[Row][Col] = { 0 };
	//初始化棋盘为空格
	Initboard(board, Row, Col);
	//打印棋盘
	Displayboard(board, Row, Col);
	while (1)
	{
		
		//玩家下棋
		play_move(board, Row, Col);
		Displayboard(board, Row, Col);
		 ret=is_win(board,Row,Col);
		 if (ret != 'C')
		 {
			 break;
		 }
		//电脑下棋
		computer_move(board, Row, Col);
		Displayboard(board, Row, Col);
		ret = is_win(board, Row, Col);
		if (ret != 'C')
		{
			break;
		}
	}
	if (ret == '*')
	{
		printf("玩家赢了\n");
	}
	else if (ret == '#')
	{
		printf("电脑赢了\n");
	}
	else
	{
		printf("平局\n");
	}
	Displayboard(board, Row, Col);
}
void menu()
{
	printf("**************\n");
	printf("****1.play****\n");
	printf("****0.exit****\n");
	printf("**************\n");

}
void test()
{
	int input = 0;
	do
	{
		menu();
		printf("请选择>");
		scanf("%d", &input);
		switch (input)
		{
		case 0:
			printf("退出游戏\n");
			break;
		case 1:
			game();
			break;
		default :
			printf("请重新输入\n");
			break;
		}
	} while (input);
}
int main()
{
	srand((unsigned int)time(NULL));//时间戳
	test();
	
	return 0;
}

今天的小游戏就到这,我们下次再见文章来源地址https://www.toymoban.com/news/detail-538528.html

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

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

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

相关文章

  • 【C语言】三子棋----详解

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

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

    三个文件: 其中.cpp文件用于游戏具体函数设计,.h文件为游戏的函数声明,test.cpp文件用于测试游戏运行。  需要用到的头文件: 运行结果: 棋盘是一个3*3的平面,可以用二维数组接收,编译器不支持变长数组,我们可以用define定义数组的下标(行和列),之后有大用。 打印:

    2024年02月13日
    浏览(30)
  • 【C语言项目】三子棋

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

    2024年02月16日
    浏览(29)
  • 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日
    浏览(49)
  • 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)
  • 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语言)

    目录 前言: 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)
  • C语言小项目之三子棋

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

    2024年02月04日
    浏览(32)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包