基于C语言的趣味游戏之五子棋

目录

 

趣味五子棋游戏

 第一步

text.c文件 

 第二步

game.h文件

第三步

初始化

 打印棋盘

玩家输入 

电脑输入

判断输赢 

game.c


趣味五子棋游戏

基于C语言的趣味游戏之五子棋_第1张图片

 第一步

先写菜单,然后在主函数里调用,由于这是一个可以重复的游戏所以将do while循环里调用menu函数。

基于C语言的趣味游戏之五子棋_第2张图片基于C语言的趣味游戏之五子棋_第3张图片

  1. 当我们键盘输入1时开启游戏,调用game()函数。由于我们是一个五子棋游戏,那么可能需要一个5x5大小的棋盘,所以我们要定义一个字符型的棋盘char board[ROW][COL];
  2. 定义好棋盘之后就初始化棋盘,在game.c文件里初始化。
  3. 初始化完之后就要打印棋盘。
  4. 然后就是让玩家落子,在判输赢,接着电脑落子,接着判输赢,这是一个循环的操作,所以需要一个while循环让这个操作循环起来。

text.c文件 

//text.c文件
#define _CRT_SECURE_NO_WARNINGS
#include"game.h"

//五子棋

//菜单
void menu()
{
	printf("***********************\n");
	printf("******   1 paly  ******\n");
	printf("******   0 exit  ******\n");
	printf("***********************\n");
}
void game()
{
	char board[ROW][COL];
	//初始化棋盘
	InitBoard(board, ROW, COL);
	//打印棋盘
	displayBoard(board, ROW, COL);
	char ret = 0;
	while(1)
	{
		//玩家下棋
		playermove(board, ROW, COL);
		//打印棋盘
		displayBoard(board, ROW, COL);
		//判断输赢
		ret = inwin(board, ROW, COL);
		if (ret != 'C')
		{
			break;
		}
		//电脑下棋
		computermove(board, ROW, COL);
		//打印棋盘
		displayBoard(board, ROW, COL);
		//判断输赢
		ret = inwin(board, ROW, COL);
		if (ret != 'C')
		{
			break;
		}
	}

	if(ret=='*')
	{
		printf("玩家赢了\n");
	}else if(ret=='#')
	{
		printf("电脑赢了\n");
	}
	else {
		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");
		default:
			printf("请输入正确的数字\n");
			break;
		}
		


	} while (input);
	return 0;
}

 第二步

是去头文件里去声明函数以及将一些公共的头文件包含起来。在一些大型的开发都是声明和函数实现分离的。

game.h文件

#pragma once
#include
#include
#include
#include
#include"game.h"


#define ROW 5
#define COL 5
//初始化棋盘
void InitBoard(char borad[ROW][COL],int row,int col);
//打印棋盘
void displayBoard(char board[ROW][COL], int row, int col);
//玩家下棋
void playermove(char board[ROW][COL], int row, int col);
//电脑下棋
void computermove(char board[ROW][COL], int row, int col);
//判断输赢
char inwin(char board[ROW][COL], int row, int col);

第三步

 去game.c文件里去实现函数的相关功能。

初始化

初始化棋盘,就是将5x5的数组具象化,将他形成5x5的空格。当用户在相应的坐标里输入时,就将对应的空格替换成特定的符号。

 打印棋盘

//初始化棋盘
void InitBoard(char board[ROW][COL], int row, int col)
{
	int i = 0;
	int j = 0;
	for(i=0;i

对于打印棋盘,我们可以观察一下棋盘,可以将棋盘划分成两个部分一个是要输入数值部分,一个是分割部分

这里绿色部分为数值部分是用户和电脑输入坐标的部分,数值部分由  空格 | 空格 | 空格组成

红色部分是分割部分,由 ..... | ..... | ..... 组成 。

在代码实现的时候可以分两部分,数值部分,循环打印数值board[i][j];在少打一列的 | 。

分割部分可以先循环打印虚线 .......,在少打一列 | 。

基于C语言的趣味游戏之五子棋_第4张图片基于C语言的趣味游戏之五子棋_第5张图片

//打印棋盘
void displayBoard(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++)
		{
			printf(" %c ", board[i][j]);
			if (j < col - 1)
				printf("|");
		}
		printf("\n");
		if(i

玩家输入 

 由于数组的下标是从0开始到n-1的,但是玩家是不会考虑这些的,所以玩家的输入的下标,应该在要减一才是棋盘的下标

首先要判空,看玩家输入的下标是否不合法,收否不为空格,不为空格就是这个下标已经被占用了。

 最后在合法的下标下,将玩家输入的下标位置用 ‘ * ’替换空格。

//玩家下棋
void playermove(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");
		}
	}
}

电脑输入

 我们设计电脑输入为随机的输入,用到了随机函数rand,用rand去%模row,col是为了随机值是在小于row和col的情况下。但是别忘了,在用rand之前要先使用srand随机数种子,为了确保随机数种子的唯一性,我们将随机数种子放在test.c文件的main()函数里,确保随机数种子只被调用一次

将电脑输入的合法下标下,用#号去替换原有的空格。

//电脑随机下棋
void computermove(char board[ROW][COL], int row, int col)
{
	printf("电脑下棋\n");
	int x = 0;
	int y = 0;
	while(1)
	{
		x = rand() % row;
		y = rand() % col;
		if(board[x][y]==' ')
		{
			board[x ][y ] = '#';
			break;
		}
	}

}

判断输赢 

 玩过五子棋的都知道,五子棋只有在五个棋子连在一起的情况才会赢。所以我们分三种情况。

第一种,用一个循环,判断所以行是否出现一样的情况。

第二种,所有列是否出现一样的情况。

第三种,正负对角线有没有出现一样的情况。

最后用他们一样的情况的一个点作为返回条件去判断谁赢了。

如果返回 * 则玩家赢;如果返回 # 则电脑赢了。如果返回Q则平局。

//判平局
static int IsFull(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 inwin(char board[ROW][COL], int row, int col)
{
	int i = 0;
	for(i=0;i

game.c

//game.c
#define _CRT_SECURE_NO_WARNINGS
#include"game.h"
//初始化棋盘
void InitBoard(char board[ROW][COL], int row, int col)
{
	int i = 0;
	int j = 0;
	for(i=0;i= 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 computermove(char board[ROW][COL], int row, int col)
{
	printf("电脑下棋\n");
	int x = 0;
	int y = 0;
	while(1)
	{
		x = rand() % row;
		y = rand() % col;
		if(board[x][y]==' ')
		{
			board[x ][y ] = '#';
			break;
		}
	}

}
//判平局
static int IsFull(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 inwin(char board[ROW][COL], int row, int col)
{
	int i = 0;
	for(i=0;i

基于C语言的趣味游戏之五子棋_第6张图片

代码压缩包

https://download.csdn.net/download/qq_62830324/88779627icon-default.png?t=N7T8https://download.csdn.net/download/qq_62830324/88779627 

你可能感兴趣的:(考研c语言刷题,C语言就业课,游戏,c语言,考研,开发语言)