C语言实现简单的小游戏之‘三子棋’-1.0

这是本人用C语言实现的三子棋:

 

                                           

利用C语言实现三子棋,首先你的C语言技术要达到会使用二维数组。

我在实现三子棋的代码中创建了三个文件:game.h(头文件)  game.c(游戏函数)  main.c(主函数)。

我们写代码都是从主函数开始的,game.h(头文件)是我们用来函数声明和宏定义的地方,这样game.c和main.c都可以用到宏定义的东西和声明的函数。

下面是game.h中的内容:

//这里我们创建了一个头文件-game.h  头文件里面放我们将要用函数声明。
#include <stdio.h>//scanf和printf这两个库函数的头文件包含。
#include <time.h>//time()库函数但头文件包含。
#include <stdlib.h>//rand()和srand()库函数但头文件包含。

#define HANG 3//宏定义的二维数组‘行’为 3.
#define LIE 3//宏定义的二维数组‘列’为 3.

void caidan();//自定义的菜单函数的声明。

void xuanzhe();//自定义游戏选择函数声明。

void game();//自定义游戏函数的声明。

void chushihua(char arr[HANG][LIE]);//自定义初始化二维数组函数声明。

void print(char arr[HANG][LIE]);//自定义打印棋盘函数的声明。

void wanjia(char arr[HANG][LIE]);//自定义玩家下棋函数的声明。

void dianniao(char arr[HANG][LIE]);//自定义电脑下棋函数的声明。

char panduan(char arr[HANG][LIE]);//判断谁赢函数的声明。

int pingju(char arr[HANG][LIE]);//判断平局函数的声明。

这main.c中的内容,下面看不懂的函数在上面已经注释过了。

#include "game.h"//用头文件(game.h)时需要进行声明。
//本人个人认为将主函数main()放在开头便于阅读,这样需要在主函数前面进行函数声明。
//但是我在头文件(game.h)中已进行函数声明,我这用了#include "game.h",不需要再声明了
int main()
{
	caidan();

	return 0;
}

void caidan()
{
	printf("*************************n");
	printf("*************************n");
	printf("*******1. 玩游戏  *******n");
	printf("*******2.不玩游戏 *******n");
	printf("*************************n");
	printf("*************************n");
	xuanzhe();
}

void xuanzhe()
{
	printf("请输入:");
	int a = 0;
	scanf("%d", &a);
	switch (a)
	{
	case 1:
		game();
		break;
	case 2:
		printf("游戏结束n");
		break;
	default:
		printf("输入错误,请重新输入!n");
		xuanzhe();//选择函数的调用。
		break;
	}
}

void game()
{
	char arr[HANG][LIE] = { 0 };// rand()是生成随机数的函数
	srand((unsigned int)time(NULL));//rand()函数在用之前需要调用srand()函数
	chushihua(arr);//srand()的括号中必须是无符号整形而且是可变的
	print(arr);//time(NULL)可以产生可变的无符号整形,这样rand()产生的随机数才是可变的
	while (1)
	{
		wanjia(arr);
		print(arr);
		if (panduan(arr) != 'c')//panduan()会返回'c' 'p' '#' '*'
			break;//'c'表示继续 'p'表示平局
	    dianniao(arr);
		print(arr);
		if (panduan(arr) != 'c')
			break;
	}
	if (panduan(arr) == '#')
		printf("玩家胜利!n");
	else if (panduan(arr) == '*')
		printf("电脑胜利!n");
	else
		printf("平局!n");
	caidan();
}

下面是game.c中的内容:

#include "game.h"

void chushihua(char arr[HANG][LIE])//将二维数组全部初始化为空格
{
	int i = 0;
	int j = 0;
	for (i = 0; i < HANG; i++)
	{
		for (j = 0; j < LIE; j++)
		{
			arr[i][j] = ' ';
		}
	}
}

void print(char arr[HANG][LIE])//打印棋盘
{
	int i = 0;
	int j = 0;
	for (i = 0; i < HANG; i++)
	{
		for (j = 0; j < LIE; j++)
		{
			printf(" %c ", arr[i][j]);
			if (j < LIE - 1)
				printf("|");
		}
		printf("n");
		if (i < HANG - 1)
		{
			for (j = 0; j < LIE; j++)
			{
				printf("---");
				if (j < LIE - 1)
				printf("|");
			}
		}
		printf("n");
	}
}
void wanjia(char arr[HANG][LIE])
{
	int x = 0;
	int y = 0;
	printf("玩家下棋:");
	while (1)
	{
	scanf("%d %d", &x, &y);
		if (x > 0 && x <= HANG && y > 0 && y <= LIE)
		{
			if (arr[x - 1][y - 1] == ' ')
			{
				arr[x - 1][y - 1] = '#';
				break;
			}
			else
			{
				printf("n该棋格以被占用,请重新输入:");
			}
		}
		else
		{
			printf("n输入错误,请重新输入: ");
		}
	}
}
void dianniao(char arr[HANG][LIE])
{
	printf("电脑下棋:n");
	while (1)
	{
		int x = rand() % HANG;//rand()是生成随机数的函数
		int y = rand() % LIE;//给rand()%3生成只有0 1 2的随机数
		if (arr[x][y] == ' ')
		{
			arr[x][y] = '*';
			break;
		}
	}
}

char panduan(char arr[HANG][LIE])
{
	int x = 0;
	int y = 0;
	for (x = 0; x < HANG; x++)
	{
		if (arr[x][0] == arr[x][1] && arr[x][1] == arr[x][2] && arr[x][2] != ' ')
		{
			return arr[x][0];
			break;
		}
	}
	for (y = 0; y < LIE; y++)
	{
		if (arr[0][y] == arr[1][y] && arr[1][y] == arr[2][y] && arr[2][y] != ' ')
		{
			return arr[0][y];
			break;
		}
	}
	if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[2][2] != ' ')
		return arr[0][0];
	if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[2][0] != ' ')
		return arr[0][2];
	if (1 == pingju(arr))
		return 'p';
	return 'c';
}

int pingju(char arr[HANG][LIE])
{
	int x = 0;
	int y = 0;
	for (x = 0; x < HANG; x++)
	{
		for (y = 0; y < LIE; y++)
		{
			if (arr[x][y] == ' ')
				return 0;
		}
	}
	return 1;
}

在看的过程中一定要结合代码中的注释一起看,不懂得地方可以私信本人!

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>