栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言小游戏——三子棋

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言小游戏——三子棋

目录

游戏展示:

代码

文件 

game.h

game.c

初始化

打印

玩家输入

电脑输入

判断胜负

text.c

总结


游戏展示:

代码

文件 
  • game.h头文件
  • game.c函数实现文件
  • text.c主函数调用文件

game.h
#pragma once

#include
#include
#include

#define Row 3  //行
#define Line 3   //列

void SzqInit(char ch[Row][Line]);//初始化
void Szqprint(char ch[Row][Line]);//打印
void Playergame(char ch[Row][Line]);//玩家输入 - *
void Computergame(char ch[Row][Line]);//电脑输入 - #
int Judgegame(char ch[Row][Line]);//判断游戏胜负

game.c

初始化
//初始化
void SzqInit(char ch[Row][Line])
{
	for (int i = 0; i < Row; i++)
	{
		for (int j = 0; j < Line; j++)
		{
			ch[i][j] = ' ';
		}
	}
}

 使用两个for循环,将二维数组初始化,方便之后的输入数据和查看结果做区别

打印
//打印
void Szqprint(char ch[Row][Line])
{
	for (int i = 0; i < Row; i++)
	{
		for (int j = 0; j < Line; j++)
		{
			printf(" %c ", ch[i][j]);
			if (j != Line-1)
				printf("|");
		}
		printf("n");
		if (i != Row - 1)
		{
			for (int j = 0; j < Line; j++)
			{
				printf("---");
				if (j != Line - 1)
					printf("|");
			}
		}
		printf("n");
	}
}

打印三子棋的棋盘和其上棋子

玩家输入
//玩家输入 - *
void Playergame(char ch[Row][Line])
{
	while (1)
	{
		int x = 0;
		int y = 0;

		printf("请玩家输入所选位置:");
		scanf("%d %d", &x, &y);

		//判断输入范围是否正确
		if (x>3 || y>3 || x<1 || y<1)
		{
			printf("输入错误,请重新输入!n");
			continue;
		}

		//判断输入位置是否为空,0—空,1—非空
		if (ch[x-1][y-1] == ' ')
		{
			ch[x - 1][y - 1] = '*';
			break;
		}
	}
}

首先判断所输入数字是否符合要求

其次判断所输入位置是否为空,若为空则输入玩家表示元素—“*”

电脑输入
//电脑输入 - #
void Computergame(char ch[Row][Line])
{
	printf("电脑下棋:");
	while (1)
	{
		int x = rand() % Row;
		int y = rand() % Line;

		if (ch[x][y] == ' ')
		{
			ch[x][y] = '#';
			printf("%d %dn", x + 1, y + 1);
			break;
		}
	}
}

使用rand函数获取随机数,判断随机生成位置是否为空,若为空输入电脑表示符,并在输出显示上输出位置坐标,方便观察

判断胜负
//判断游戏胜负
int Judgegame(char ch[Row][Line])
{
	for (int i = 0; i < 3; i++)
	{
		if (ch[i][1] == ch[i][2] && ch[i][2] == ch[i][0])
		{
			if (ch[i][1] == '*')
			{
				printf("玩家胜利!n");
				return 1;
			}
			if(ch[i][1] == '#')
			{
				printf("电脑胜利!n");
				return 1;
			}
		}
		if (ch[0][i] == ch[1][i] && ch[1][i] == ch[2][i])
		{
			if (ch[1][i] == '*')
			{
				printf("玩家胜利!n");
				return 1;
			}
			if (ch[1][i] == '#')
			{
				printf("电脑胜利!n");
				return 1;
			}
		}
	}

	if (ch[0][0] == ch[1][1] && ch[1][1] == ch[2][2])
	{
		if (ch[1][1] == '*')
		{
			printf("玩家胜利!n");
			return 1;
		}
		if (ch[1][1] == '#')
		{
			printf("电脑胜利!n");
			return 1;
		}
	}
	if (ch[0][2] == ch[1][1] && ch[1][1] == ch[2][0])
	{
		if (ch[1][1] == '*')
		{
			printf("玩家胜利!n");
			return 1;
		}
		if (ch[1][1] == '#')
		{
			printf("电脑胜利!n");
			return 1;
		}
	}

	int count = 0;
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			if (ch[i][j] == ' ')
			{
				count++;
			}
		}
	}
	if (count == 0)
	{
		printf("游戏平局n");
		return 1;
	}
	else
	{
		return 0;
	}
}

若由三个非空的相同字符可以连在一起,输出对应的胜利对象。并返回1,使text.c中的循环退出,进入下一场游戏

text.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"

void menu()
{
	printf("******************************n");
	printf("******    1.开始游戏   *******n");
	printf("******    0.退出游戏   *******n");
	printf("******************************n");
}

void game()
{
	char ch[Row][Line] = { 0 };

	SzqInit(ch);//初始化
	Szqprint(ch);//打印
	
	while (1)
	{
		Playergame(ch);//玩家输入 - *
		//判断游戏胜负
		if (Judgegame(ch))
		{
			Szqprint(ch);//打印
			break;
		}

		Computergame(ch);//电脑输入 - #
		Szqprint(ch);//打印
		if (Judgegame(ch))
			break;
	}
	
}

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;
		}
		system("pause");
		system("cls");
	} while (input);

	return 0;
}

在此文件中调用相对应的函数完成三子棋游戏

总结
  • 使用循环完成的c语言小游戏
  • 可以尝试扩大棋盘
  • 该代码无法做到智能输出,只能随机的生成数字

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1029118.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号