基于c语言的趣味游戏之五子棋游戏_五子棋的其他创意玩法[通俗易懂]

基于c语言的趣味游戏之五子棋游戏_五子棋的其他创意玩法[通俗易懂]在用rand之前要先使用srand随机数种子,为了确保随机数种子的唯一性,我们将随机数种子放在test.c文件的main()函数里,确保随机数种子只被调用一次

目录

 

趣味五子棋游戏

 第一步

text.c文件 

 第二步

game.h文件

第三步

初始化

 打印棋盘

玩家输入 

电脑输入

判断输赢 

game.c


趣味五子棋游戏

基于c语言的趣味游戏之五子棋游戏_五子棋的其他创意玩法[通俗易懂]

 第一步

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

基于c语言的趣味游戏之五子棋游戏_五子棋的其他创意玩法[通俗易懂]基于c语言的趣味游戏之五子棋游戏_五子棋的其他创意玩法[通俗易懂]

  1. 当我们键盘输入1时开启游戏,调用game()函数。由于我们是一个五子棋游戏,那么可能需要一个5×5大小的棋盘,所以我们要定义一个字符型的棋盘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<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<time.h>
#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文件里去实现函数的相关功能。

初始化

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

 打印棋盘

//初始化棋盘
void InitBoard(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++)
		{
			board[i][j] = ' ';
		}
	}
}

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

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

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

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

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

基于c语言的趣味游戏之五子棋游戏_五子棋的其他创意玩法[通俗易懂]基于c语言的趣味游戏之五子棋游戏_五子棋的其他创意玩法[通俗易懂]

//打印棋盘
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<row-1)
		{
			for (j = 0; j < col; j++)
			{
				printf("...");
				if (j < col - 1)
					printf("|");
			}
			
		}
		printf("\n");
			
	}
}

玩家输入 

 由于数组的下标是从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<row;i++)
	{
		if (board[i][0] == board[i][1] && board[i][1] == board[i][2]&& board[i][2] == board[i][3]&&board[i][3] == board[i][4]&& board[i][0] !=' ')
		{
			return board[i][0];
		}
	}
	for (i = 0; i < col; i++)
	{
		if (board[0][i] == board[1][i] && board[1][i] == board[2][1] && board[2][i] == board[3][i] && board[3][i] == board[4][i] && board[0][i] != ' ')
		{
			return board[0][i];
		}
	}
	if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[2][2] == board[3][3] &&board[3][3] == board[4][4] && board[1][1] != ' ')
	{
		return board[0][0];
	}

	if (board[0][4] == board[1][3] && board[1][3] == board[2][2] && board[2][2] == board[3][1]&&board[3][1] == board[4][0] && board[0][4] != ' ')
	{
		return board[0][4];
	}
	//判断平局
	if (IsFull(board, row, col))
	{
		return 'Q';
	}

	return 'C';
}

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<row;i++)
	{
		for(j=0;j<col;j++)
		{
			board[i][j] = ' ';
		}
	}
}
//打印棋盘
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<row-1)
		{
			for (j = 0; j < col; j++)
			{
				printf("...");
				if (j < col - 1)
					printf("|");
			}
			
		}
		printf("\n");
			
	}
}
//玩家下棋
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");
		}
	}
}
//电脑随机下棋
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<row;i++)
	{
		if (board[i][0] == board[i][1] && board[i][1] == board[i][2]&& board[i][2] == board[i][3]&&board[i][3] == board[i][4]&& board[i][0] !=' ')
		{
			return board[i][0];
		}
	}
	for (i = 0; i < col; i++)
	{
		if (board[0][i] == board[1][i] && board[1][i] == board[2][1] && board[2][i] == board[3][i] && board[3][i] == board[4][i] && board[0][i] != ' ')
		{
			return board[0][i];
		}
	}
	if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[2][2] == board[3][3] &&board[3][3] == board[4][4] && board[1][1] != ' ')
	{
		return board[0][0];
	}

	if (board[0][4] == board[1][3] && board[1][3] == board[2][2] && board[2][2] == board[3][1]&&board[3][1] == board[4][0] && board[0][4] != ' ')
	{
		return board[0][4];
	}
	//判断平局
	if (IsFull(board, row, col))
	{
		return 'Q';
	}

	return 'C';
}


基于c语言的趣味游戏之五子棋游戏_五子棋的其他创意玩法[通俗易懂]

代码压缩包

https://download.csdn.net/download/qq_62830324/88779627https://download.csdn.net/download/qq_62830324/88779627 

今天的文章基于c语言的趣味游戏之五子棋游戏_五子棋的其他创意玩法[通俗易懂]分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/87926.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注