产生随机数与相应的猜拳小游戏

2018-09-01 05:38:05来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

一、简介

c++中,产生随机数的通用方法就是调用 srand()和 rand()  函数。值得注意的是,所有程序中“产生”的随机数其实是伪随机数,本质是调用存储在计算机里的一组无序数值序列。

因此在初始化随机数种子时,如果初始化相同的种子数值,得到的“随机数”会是一样的数值。

 1 #include <iostream>
 2 #include <cstdlib>
 3 using namespace std;
 4 int main()
 5 {
 6     int i;
 7     srand(1);
 8     for (i = 0; i < 10; i++)
 9     {
10         cout << rand() << " ";
11     }
12 }

第一次运行的结果。

第二次运行的结果,可以看出并不是真正意义上的随机数。

但是在运行同一次程序时,可以把这些数字看成是随机数。

二、产生随机数

关键是调用 time 函数初始化随机数种子,达到种子随变。此时需要调用 <ctime>头文件。

 1 #include <iostream>
 2 #include <ctime>
 3 #include <cstdlib>
 4 using namespace std;
 5 int main()
 6 {
 7     int i;
 8     srand((unsigned)time(NULL));
 9     for (i = 0; i < 10; i++)
10     {
11         cout << rand() << " ";
12     }
13     return 0;
14 }

第一次运行结果。

第二次运行结果,可以看成真正意义上的随机数。

当需要(0-x)的随机数时,只需要在 rand() % x 即可。

当需要(0-1)的小数随机数时,只需要 ( rand() % x ) /x 即可,其中 x 与精度有关,可取 x=100 小数后两位。

三、猜拳小游戏

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<time.h>
 4 int main()
 5 {
 6     char x;
 7     int a;
 8     int b;
 9     while (1) {
10         printf("请选择你要出的:\n");
11         printf("A:剪刀\n");
12         printf("B:石头\n");
13         printf("C:布\n");
14         printf("D:不玩了\n");
15 
16         scanf_s("%c%*c", &x);
17 
18         switch (x) {
19         case 65 | 97:
20             x = 4; break;
21         case 66 | 98:
22             x = 7; break;
23         case 67 | 99:
24             x = 10; break;
25         case 68 | 100:
26             return 0;
27         default:
28             printf("Error!");
29             getchar();
30             system("cls");
31             return 0;
32             break;
33         }
34         srand((unsigned)time(NULL));
35         a = rand() % 3;
36         b = (int)x + a;
37 
38         printf("电脑出了");
39         switch (a) {
40         case 0:
41             printf("剪刀\n\n"); break;
42         case 1:
43             printf("石头\n\n"); break;
44         case 2:
45             printf("布\n\n"); break;
46         }
47 
48         printf("你出了");
49         switch (x) {
50         case 4:
51             printf("剪刀\n\n"); break;
52         case 7:
53             printf("石头\n\n"); break;
54         case 10:
55             printf("布\n\n"); break;
56         }
57 
58         printf("结果是:\n\n");
59         if (b == 6 || b == 7 || b == 11)printf("你赢了!\n\n");
60         if (b == 5 || b == 9 || b == 10)printf("电脑赢了!\n\n");
61         if (b == 4 || b == 8 || b == 12)printf("平局!\n\n");
62 
63         system("pause>nul&&cls");
64     }
65     return 0;
66 }

第一次。

第二次。

代码里x的值是考虑了不重复问题。

电脑a | 玩家x 4剪刀 7石头 10布
0剪刀 4 7 10
1石头 5 8 11
2布 6 9 12

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Dungeon Master POJ - 2251 (搜索)

下一篇:C++实现单链表和子类栈(Stack)及单向队列(Queue)