用C语言做划拳游戏

1.划拳游戏,其实是我们常说的石头剪刀布,是我们和电脑一块玩,我们出拳,电脑随机出拳,用0,1,2来表示石头剪刀布。

2.下来进行写代码,程序是连着写的,则会用到函数调用,指针数组

2.1

首先,我们得先来定义,

​
#include
#include
#include
 
 //玩家手势
 int human;
 //电脑手势
 int comp;
 //胜利次数
 int win_no;
 //失败次数
 int lose_no;
 //平局次数
 int draw_no;
 
  char *hd[]={"石头","剪刀","布"};
 

​

这个定义则是全局变量,方便之后使用。我使用了指针数组,是因为后面的文字有多个字符,指针数组中每个元素都是一个指针,只要是指针都是能存储多个字符的。

有两个头文件:,为了下面调用srand()函数和rand()函数。

2.2

进行次数的初始化处理

 //初始化处理
 void initialize()
 {
	 win_no=0;
	 lose_no=0;
	 draw_no=0;
	 //随机数种子
	 srand(time(NULL));
	 printf("猜拳游戏!\n");
 }
 

这里我是用了srand(time(NULL)):这是两个函数,一个是srand函数,srand函数是设置随机数种子函数,这是在调用rand()函数之前使用,之后会用到,rand()会产生随机数的函数,通常这两个函数是一起使用的,来完成产生随机数的功能。

另外一个函数time(NULL):是作为srand函数的参数的,意思是以现在的系统时间作为随机数的种子来产生随机数。time(NULL)函数是得到一个从1990年1月1日到现在得时间秒数,这样每一次运行程序得时间得不同就可以保证得到不同的随机数了。

2.3

读取电脑生成的手势,用0,1,2来表示石头剪刀布。

读取玩家手势,也是用0,1,2来表示石头剪刀布。

//读取生成手势
 void jyanken(){
	 int i;
	 //rand生成一个随机数
	 comp=rand()%3 ;//随机数范围
	 do{
		 printf("石头剪刀布...");
		 for(i=0;i<3;i++)
		 {
			 printf("(%d) %s",i,hd[i]);
		 }
		 printf(":");
		 scanf("%d",&human);//读取玩家手势
	 }while(human<0||human>2);
 }

2.4

用连个函数调用来更新失败,胜利,平局得次数,用到switch循环结构。来获得0,1,2得内容

 //更新失败/胜利、平局次数
	 
	 void count_no(int result)
	 {
		 switch (result){
			 case 0:
			draw_no++;
			break;
			 case 1:
			 lose_no++;break;
			 case 2:
			 win_no++;break;
	}
	 }
	void disp_result(int result )
	{
		switch (result){
			 case 0:
			 puts("平局");break;
			 case 1:
			 puts("你失败了!");break;
			 case 2:
			 puts("你胜利了!");break;
		
	}
	}

2.5

写游戏玩一次是否继续,是否再来一次,输入0是否,输入1是继续,返回值进行判断。

//是否继续游戏
	int confirm_retry(){
		int x;
		printf("再来一次吗?。。。否(0)是(1)");
		scanf("%d",&x);
		return x;
	}

2.6

写主函数得内容,主要是调用前面得函数,自己仔细看几遍应该能看懂。

	int main()
	{
		//判断输赢
		int judge=0;
		//是否再来一次
		int retry=0;
		initialize();
		do{
			jyanken();
			printf("程序出%s,玩家出%s\n",hd[comp],hd[human]);
			judge=(human-comp+3)%3;
			count_no(judge);
			disp_result(judge);
			retry=confirm_retry();
			
			if(retry==0){
				printf("再见!\n");
				break;
			}
		}while(win_no<3&&lose_no<3);
		printf(win_no==3?"\n你胜利了!\n":"\n我胜利了!\n");
		printf("%d胜%d负%d平。\n",win_no,lose_no,draw_no);
		return 0;
	}
	
		

我就简单得解释一下

judge=(human-comp+3)%3;这个语句

%是求余符号,human玩家出手势,可以是0,1,2。comp电脑出手势0,1,2;两个一减,则会出现-2,-1,0,1,2。由于你是用0,1,2来表示输赢的,所以要加上3,除以3,求余,自己想一想应该能懂。

这就会有一点算法。0表示石头,1表示剪刀,2表示布

值为 -2:human出0,comp出2,玩家输,电脑赢,judge为1,对应前面函数,则表示你输了。

依次类推,就会得到前面函数:count_no()和disp_result()的内容,自己可以算过之后和前面函数内容对对。自己一定要动手敲一敲。


        

你可能感兴趣的:(c语言,c++,单片机,51单片机,开发语言)