用C语言创作睿智小游戏——猜拳篇,猜拳游戏


用C语言创作睿智小游戏——猜拳篇

突发奇想,打算用C语言编写一个猜拳游戏,深知网上有很多教程,未看教程,自己开始盲编,

首先需要定义猜拳游戏的精髓“石头,剪刀,布”,这里我们用数字定义:

//赋予1=石头,2=剪刀,3=布

我们平时在玩猜拳游戏的时候是玩家VS玩家,有很多心理战术(察言观色),但是我们电脑是个面无表情的玩家!我们跟电脑对战只有三分之一的几率获胜

好了,知道这个游戏是玩家VS电脑,接下来就是电脑的出拳机制,它的随机性,这时候我们使用“随机数生成”

//产生随机数 
int a = rand() % 3 + 1;

但是这种随机数产生是一次性的,我们需要加入随机数种子

srand((unsigned int)time);

而且还需要引入头文件

#include<time.h>

我们来用printf()来检验每次产生的随机数是否正确(在正式运行时我们需要隐藏打印出来的随机数,以确保游戏的公平性。看着电脑出拳并没有游戏体验呐!!)

//printf("%d\n", a);
//查验随机数

在随机数中我们已经赋予电脑值为:

int a          

我们要给玩家赋予:

unsigned int num = 0;  
printf("请输入你要出的数字:");
scanf("%d", &num);                      

接下来就是判断我们游戏的胜负关系,大家都知道“石头,剪刀,布”是相互克制关系,我们赋予的值,“1,2,3”也是克制关系可以理解为“1赢2,2赢3,3赢1”,

这时候我们就开始确定玩家胜利的条件:

当电脑输入1(石头)时,玩家输入3(布)为胜利。

当电脑输入2(剪刀)时,玩家输入1(石头)为胜利。

当电脑输入3(布)时,玩家输入3(剪刀)为胜利。

a == 1 && num == 3 || a == 2 && num == 1 || a == 3 && num == 2

程序用与(&&)或(||)相连。

同理玩家失败的条件:

当电脑输入1(石头)时,玩家输入2(剪刀)为失败。

当电脑输入2(剪刀)时,玩家输入3(布)为失败。

当电脑输入3(布)时,玩家输入1(石头)为失败。

a == 1 && num == 2 || a == 2 && num == 3 || a == 3 && num == 1

其他情况则为平局:

玩家与电脑显示数值相同

a == num

用 if…else if…else…函数来判断结果:

if()
{
    
}
else if()
{
    
}
else{}

注:(当分析这一段时,我犯了一个错误,导致整个分析方法过于复杂

当时忘记输入“= =”两个等于,只输入一个导致报错,当时分析出了这种方法:

a>num&&a!= 2&&num!=2

假设电脑出手,数值a=3,电脑获胜条件只能是玩家num=1,所以必须要电脑数值大于玩家,且电脑与玩家都不能等于2)

到这里,我们猜拳程序就差不多完成了80%,接下来要开始完善代码与程序。

加入睿智的开场白:

printf("******************************************\n");
printf("*  欢迎来到睿智游戏之家                  *\n");
printf("*  本次您要玩的游戏是“剪刀,石头,布”  *\n");
printf("*  请按照规定输入:                      *\n");
printf("*  输入数字“1”进入游戏                 *\n");
printf("*  输入其他,进行退出                    *\n");
printf("******************************************\n");

与睿智的游戏介绍:

printf("************************************\n");
printf("*  游戏介绍:                      *\n");
printf("*  您需要跟电脑进行博弈。          *\n");
printf("*  输入数字“1”====“石头”       *\n");
printf("*  输入数字“2”====“剪刀”       *\n");
printf("*  输入数字“3”====“布”         *\n");
printf("*  输入其他,进行退出              *\n");
printf("************************************\n");

睿智的提示:

printf("************************************\n");
printf("*         恭喜你,你赢啦!         *\n");
printf("************************************\n");

睿智的结束语:

system("cls");
printf("************************************\n");
printf("*           感谢您的体验。         *\n");
printf("************************************\n");
		printf("正在退出,倒计时...\n");
		int f = 4;
		for (int i = 0; i < 4; i++)
		{
			f--;
			Sleep(1000);
			printf("%d\n", f);
		}
		exit(0);

这里结束,我先做了一个清屏,并且用for()循环做了一个简易的倒计时,这里引入了计数时间函数sleep(),sleep的单位是毫秒,为了变成1秒,我在这里面单位加了(1000),!!调用sleep函数,还需要引入头文件

#include<Windows.h>   

最后为了保证游戏的多次参与度,这里用while(1)

while (1);

加入了一个无限循环。

最后将随机数(即电脑出拳)显示结果显示在玩家出拳后。

printf("电脑已出拳,该您了。\n");
printf("请输入你要出的数字:");
scanf("%d", &num);
printf("\n");
printf("电脑出拳结果是:%d\n",a);

下面是完整程序:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<limits.h>
#include<Windows.h>

void test()
{
	printf("************************************\n");
	printf("*  游戏介绍:                      *\n");
	printf("*  您需要跟电脑进行博弈。          *\n");
	printf("*  输入数字“1”====“石头”       *\n");
	printf("*  输入数字“2”====“剪刀”       *\n");
	printf("*  输入数字“3”====“布”         *\n");
	printf("*  输入其他,进行退出              *\n");
	printf("************************************\n");
	srand((unsigned int)time);
	while (1)
	{
		//产生随机数
		
		int a = rand() % 3 + 1;

		//赋予1=石头,2=剪刀,3=布
		//a>num&&a!=2
		//printf("%d\n", a);
		//查验随机数
		unsigned int num = 0;
		printf("\n");
		printf("电脑已出拳,该您了。\n");
		printf("请输入你要出的数字:");
		scanf("%d", &num);
		printf("\n");
		printf("电脑出拳结果是:%d\n",a);
		printf("\n");

		if (a == 1 && num == 2 || a == 2 && num == 3 || a == 3 && num == 1)
		{
			printf("\n");
			printf("************************************\n");
			printf("* 耶,你输啦!(来自电脑的嘲讽。) *\n");
			printf("************************************\n");
			printf("\n");

		}
		else if (a == 1 && num == 3 || a == 2 && num == 1 || a == 3 && num == 2)
		{
			printf("\n");
			printf("************************************\n");
			printf("*         恭喜你,你赢啦!         *\n");
			printf("************************************\n");
			printf("\n");
		}

		else if (a == num)
		{
			printf("\n");
			printf("************************************\n");
			printf("*         哎呀,打平了-_-!        *\n");
			printf("************************************\n");
			printf("\n");
		}
		else
		{
			system("cls");
			printf("************************************\n");
			printf("*           感谢您的体验。         *\n");
			printf("************************************\n");
			printf("正在退出,倒计时...\n");
			int f = 4;
			for (int i = 0; i < 4; i++)
			{
				f--;
				Sleep(1000);
				printf("%d\n", f);
			}
			exit(0);

		}
	}

	

}

void test01()
{
	
	printf("******************************************\n");
	printf("*  欢迎来到睿智游戏之家                  *\n");
	printf("*  本次您要玩的游戏是“剪刀,石头,布”  *\n");
	printf("*  请按照规定输入:                      *\n");
	printf("*  输入数字“1”进入游戏                 *\n");
	printf("*  输入其他,进行退出                    *\n");
	printf("******************************************\n");
	printf("\n");
	


	printf("\n");

}

void test02()
{
	system("cls");
	printf("************************************\n");
	printf("*           感谢您的体验。         *\n");
	printf("************************************\n");
	printf("正在退出,倒计时...\n");
	int f = 4;
	for (int i = 0; i < 4; i++)
	{
		f--;
		Sleep(1000);
		printf("%d\n", f);
	}
	exit(0);


	printf("\n");

}

int main(void)
{
	int num;
	test01();
	printf("请输入值:");
	scanf("%d", &num);
	if (num == 1)
	{
		system("cls");
		test();
	}
	else
	{
		test02();
	}
	printf("\n");
	system("pause");
	return 0;
}
文章最后发布于: 2019-10-24 21:55:21

相关内容

    暂无相关文章