C语言从零开始(我) #1---超超基础剪刀石头布程序复现

(文中提及函数如有需要请到MSDN查询用法)

(点击进入)


一、新学内容

  1. rand函数基础
  2. time函数应用

二、代码主体

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
	char player=0;          
	int computer=0;
	int result=0;
	srand(time(NULL));
	
    printf("A:剪刀\nB:石头\nC:布\nD:退出\n");
	scanf("%c", &player);

	while (1)
	{
		switch (player)
		{
		case 65:
		case 97:
			player = 6;
			printf("你出了剪刀\n");
			break;

		case 66:
		case 98:
			player = 9;
			printf("你出了石头\n");
			break;

		case 67:
		case 99:
			player = 12;
			printf("你出了布\n");
			break;
			
		case 68:
		case 100:
			printf("游戏退出\n");
			break;
		}
		
		computer = (rand()%4);
		switch (computer)
		{
		case 1:
			printf("电脑出了剪刀\n");
			break;
		case 2:
				printf("电脑出了石头\n");
				break;
		case 3:
			printf("电脑出了布\n");
			break;
		}
		result = (int)player + computer;
		if (result==9||result==10||result==14)
		{
			printf("你赢了");
			return 0;
		}
		else if (result==8||result==12||result==13)
		{
			printf("你输了");
			return 0;
		}
		else
		{
			printf("平局");
			return 0;
		}
	}
}

三、浅谈思路

想要写出剪刀石头布程序,首先需要解决的第一件事就

如何让系统来是判定胜负

这里使用的是对玩家与电脑出招赋值

根据双方所出招式(突然词穷了)赋值之和来判定胜负

所以 就需要随机取值

四、代码解读

这段代码有一个对于初学者来说的难点(因为我学那本书里没有0.0):

随机取值

C语言里随机取值使用

rand()

但是rand()函数为假随机, 理解为同一个rand只有第一次生成的数字为随机。

后面在此运行都为第一次生成的数字(个人理解 错误请纠正)。

所以这里要引入一个新的函数  

srand()

可以看到MSDN里中定义为给rand()函数一个初始种子值。

如果初始种子是一样的话,

那么rand函数随机生成数字也是一样的(不重启情况下)。

srand一次运行只用执行一次 所以将其放在while循环之外。

但又遇到一个问题,如何让种子每次都不一样呢?

于是 我们再次引入函数

time()

 我们看到time()函数返回值为从19701.1午夜到现在的秒数 

即每时每刻返回值都不同

由于不需要存储这个值 所以直接设定为NULL 

即 time(NULL)

确定界限

再使用取余来确定上限(原理为余数不会大于除数)

将取余后的值加上一个数字来确定下限、

例:

a=(rand()%10+50)

a范围即为50-59

如此 随机取值结束

五、闲谈

新手们都要加油啊!!

应该会日更吧?

有不足或者缺陷欢迎指出!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个C语言实现的石头剪刀布小游戏,可以控制胜率的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int play, computer, winCount = 0, loseCount = 0, drawCount = 0; char choice; srand(time(NULL)); do { printf("请选择:\n"); printf("1. 石头\n"); printf("2. 剪刀\n"); printf("3. 布\n"); printf("0. 退出\n"); scanf("%d", &play); if (play == 0) { break; } computer = rand() % 3 + 1; printf("你选择了:"); switch (play) { case 1: printf("石头\n"); break; case 2: printf("剪刀\n"); break; case 3: printf("布\n"); break; default: printf("无效选择\n"); continue; } printf("电脑选择了:"); switch (computer) { case 1: printf("石头\n"); break; case 2: printf("剪刀\n"); break; case 3: printf("布\n"); break; } if (play == computer) { printf("平局!\n"); drawCount++; } else if ((play == 1 && computer == 2) || (play == 2 && computer == 3) || (play == 3 && computer == 1)) { printf("你赢了!\n"); winCount++; } else { printf("你输了!\n"); loseCount++; } printf("胜利次数:%d,失败次数:%d,平局次数:%d\n", winCount, loseCount, drawCount); printf("是否继续游戏?(y/n) "); scanf(" %c", &choice); } while (choice == 'y' || choice == 'Y'); return 0; } ``` 这个程序使用了随机数生成电脑的选择,然后根据玩家和电脑的选择进行比较,判断胜负或平局,并统计胜利、失败和平局的次数。你可以通过多次运行程序来控制胜率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值