zoukankan      html  css  js  c++  java
  • 产生随机数与相应的猜拳小游戏

    一、简介

    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("请选择你要出的:
    ");
    11         printf("A:剪刀
    ");
    12         printf("B:石头
    ");
    13         printf("C:布
    ");
    14         printf("D:不玩了
    ");
    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("剪刀
    
    "); break;
    42         case 1:
    43             printf("石头
    
    "); break;
    44         case 2:
    45             printf(""); break;
    46         }
    47 
    48         printf("你出了");
    49         switch (x) {
    50         case 4:
    51             printf("剪刀
    
    "); break;
    52         case 7:
    53             printf("石头
    
    "); break;
    54         case 10:
    55             printf(""); break;
    56         }
    57 
    58         printf("结果是:
    
    ");
    59         if (b == 6 || b == 7 || b == 11)printf("你赢了!
    
    ");
    60         if (b == 5 || b == 9 || b == 10)printf("电脑赢了!
    
    ");
    61         if (b == 4 || b == 8 || b == 12)printf("平局!
    
    ");
    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
  • 相关阅读:
    20150515
    20150509
    20150507
    好用的log打印类
    20150429
    Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
    word无法切换中文输入法的解决方法
    20140917设置动态壁纸
    WCF入门教程(三)定义服务协定--属性标签
    WCF入门教程(二)从零做起-创建WCF服务
  • 原文地址:https://www.cnblogs.com/ljy1227476113/p/9542955.html
Copyright © 2011-2022 走看看