石头剪刀布---人机小游戏

简简单单的石头剪刀布竟然承载了我们太多的回忆,小时候无论玩什么游戏,决定优先顺序它都是不二的选择,当时的小孩子玩着玩着就长大了,让人不禁感慨时间流逝之快。太多美好的回忆在这里面了。岁月之蹉跎,彼时的少年会成为他想要成为的样子吗? 

1.思路

既然是人机,那么咱们得让电脑在石头剪刀布里面出一个吧,然后咱们再出。

//为了方便输入,咱们就用数字代表相应的东西。石头--0,剪刀--1,布--2
#include<stdio.h>
int main(){
    //咱们假设电脑出的是“0”,即与之对应的“石头”
    //轮到咱们输入啦
    int u_select=0;
    int p_select=0;
    //u代表用户,p代表电脑;
    printf("请输入你的招数:");
    scanf("%d",&u_select);
    //进行输入值的有效判断
    while(u_select<0||u_select>2){
        printf("-----输入无效-----\n");
        printf("请重新输入:");
        scanf("%d",&u_select);
    }

    //进行用户与电脑之间的判断
    switch(u_select){
        case 0 :
                printf("平局\n");
                break;
        case 1 :
                printf("电脑赢\n");
                break;
        case 2 :
                printf("用户赢\n");
                break;
    }
    return 0;
}

 看到这里的小伙伴可能会有一些疑问,咱们平时进行石头剪刀布,都是同时出而且具有随机性。

这样操作的话,那不就纯纯作弊了吗?机智如你,接下来咱们就解决电脑随机的问题。

2.随机数函数rand()

就是产生随机数的一个函数。

首先要引入头文件

#include <stdlib.h>

为了方便大家理解,直接举个例子吧!

#include <stdio.h>
#include <stdlib.h>
int main (){
    int i=0;
    for(i=0;i<10;i++){
        srand(i);
        printf("%d ",rand()%25);
    }
    return 0;
}
运行结果:1 8 15 21 1 0 16 2 21 15 

如上,就是一串10个随机数。

 srand 函数用于设置随机数生成器的种子。通过设置不同的种子,可以得到不同的随机数序列。它通常在程序开始时调用一次,以初始化随机数生成的起点。
 
 rand 函数则是根据当前设置的种子生成一个随机整数。每次调用 rand 都会产生一个在一定范围内的随机数。
 
如果不先调用 srand 设置种子,那么每次程序运行时, rand 产生的随机数序列通常是相同的。

这就好比种树,先利用srand这个工具将所需的种子种下去,再由rand()函数在这个种子的基础上进行施肥浇水,他才能长出新芽。如果你一直种的都是黄瓜种子,那由rand一通操作之后,长出来的还是黄瓜。如果你想吃别的蔬菜水果,那你种的自然就是其他的种子了。

而现在你所拥有的种子有限,你想做个农场主,自然需要好多好多种子。怎末办呢?这时的你抱怨了一句:“我的种子要是像时间一样多那就好了!”一语惊醒梦中人,为什莫我的时间不可以和种子联系起来。随着时间的变化,srand()函数 括号里面的种子也会与之相应的产生变化。这时,你不禁感慨:“此之类比,前不见古人,后不见来者!我真是个大聪明!从此不再是傻地主家的儿子了!”说干就干,举例!

首先,引入头文件

#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
    srand(time(NULL));
    int i;
    for (i = 0; i < 10; i++)
    printf("%d, ", rand()%11); 
} 

  

如上,产生了10个随机数;

现在给大家讲讲为什么rand()要取模?

在C语言中,rand函数用于生成伪随机数。然而,rand函数生成的随机数范围是固定的,通常是0RAND_MAX之间的整数。如果需要生成指定范围内的随机数,就需要对rand函数的结果进行取模操作。

通过取模,可以将rand函数生成的随机数映射到指定的范围内。例如,如果要生成1100之间的随机数,可以使用rand() % 100 + 1的方式,其中%是取模运算符,100是指定的范围,+1是为了确保结果在1100之间。

取模操作的原理是将rand函数生成的随机数除以指定的范围,得到的余数就是在该范围内的随机数。这样可以确保生成的随机数在指定的范围内具有一定的随机性和均匀性。

看到这里,聪明的你因该已经想到了,我要生成0到2之间的随机数,应该是rand()%3;

至此,石头剪刀布的主要问题随机性已经解决,接下来进入正题。

3.大作展示

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
 
	int p=0;
	int u=0;
	int i=0;
	//石头0,剪刀1,布2
	int u_select = 0;
	int p_select = 0;
	
	//通过键盘用户输入
	
	//电脑可以随机输出
	
	//使用随机函数rand();
	
	//使用srand()随机播种
	  while(i>=0&&i<3){

		srand(time(NULL));
		p_select = rand()%3;
	
		printf("石头--0,剪刀--1,布--2\n");
		printf("请输入你的招数:");
		scanf("%d",&u_select);
		
	//评判
	
		if(u_select<0||u_select>=3){
			printf("********Useless!!!********\n");
			printf("****                  ****\n");
			printf("*****                *****\n");
			printf("**************************\n");
		}
		if(u_select>=0&&u_select<3){
		
		if(p_select==0){
	
	
			switch(u_select){
		
				case 0:
					printf("平局\n");
					p+=0;
					u+=0;
					break;
				case 1:
					printf("用户输,电脑赢\n");
					p+=1;
					break;
				case 2:
					printf("用户赢,电脑输\n");	
					u+=1;
					break;

		
			}

		
				
		}
	
		if(p_select==1){


        	        switch(u_select){

                	        case 0:
                        	        printf("用户赢,电脑输\n");
                            
                             	  	 u+=1;
                               		 break;
                     	        case 1:
                       	                printf("平局\n");
                      		        p+=0;
					u+=0;
                	                break;
              	                case 2:
          	                        printf("用户输,电脑赢\n");
                	                p+=1;
                        	        break;


			}	



		}
	
		 if(p_select==2){


        	        switch(u_select){

                	        case 0:
                        	        printf("用户输,电脑赢\n");
	
                	                p+=1;
        	                        break;
               		        case 1:
                    	                printf("用户赢,电脑输\n");
                        	        
                        	        u+=1;
                   		        break;
             		        case 2:
                        	        printf("平局\n");
                             	        p+=0;
					u+=0;
                          	        break;


         		}


		}
	         

		 printf("------------------\n");
		 i++;
	}
}

	if(p>u){
		printf("电脑赢--得分--%d   用户输--得分--%d\n",p,u);
	}else if(p<u){
		printf("用户赢--得分--%d   电脑输--得分--%d\n",u,p);
	}else{
		printf("用户和电脑平局--得分--%d\n",u);
	}
	  
	 
	return 0;
  }

至此,神功已成!

我们在以后的道路上不确定的事情太多太多,就好比这随机数,谁知道生活下一秒会出什么?是磨难,将人痛击的一蹶不振,郁郁寡欢,又或是猪都能飞上天的风口,壮志凌云!但行好事,莫问前程!陌生人,我知道也许此刻的你,经历了一些事,处于低谷。但请相信,一切都会好起来的!因为活着本身就是你东山再起,绝处逢生的最大底牌!

  • 48
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值