天天看點

C語言猜數字遊戲

 目錄

​​思路:​​

​​1.電腦産生一個随機數​​

​​2.猜數字:a.猜大了     b.猜小了    c.猜中了​​

​​分析:​​

​​菜單函數:​​

​​遊戲函數: ​​

​​1.産生随機數:​​

​​2.而srand函數:​​

​​game函數源碼: ​​

​​源碼: ​​

​​運作結果截圖:​​

思路:

1.電腦産生一個随機數

2.猜數字:a.猜大了     b.猜小了    c.猜中了

分析:

菜單函數:

void menu()
{
  printf("########################\n");
  printf("########1.play#########\n");
  printf("########0.Exit#########\n");
}      
C語言猜數字遊戲

遊戲函數: 

1.産生随機數:

a.需要調用rand函數,rand()%100+1表示的是産生一個在1至100的随機數。

原因:任意一個數對100取餘數結果必小于100,在加上1則是産生100以内的随機數。

如果對rand函數的概念不了解,可以查一下:

C語言猜數字遊戲
C語言猜數字遊戲

編輯

b.由上面這個圖知道rand随機的範圍是0到RAND_MAX,RAND_MAX是7fff(十六進制),轉化為十進制是32767,但是如果你隻是這樣設計的話,你将會發現: 運作這個程式産生随機值後,關閉再運作,會發現兩次運作的結果對應的位置随機相同!!!

如下圖:

C語言猜數字遊戲
C語言猜數字遊戲

編輯

c.如果每一輪對應位置的随機值都相同的話,可能與我們的預期不相同,是以我們需要再修改一下!!!那修改什麼呢?答案在上上個圖:

C語言猜數字遊戲
C語言猜數字遊戲

編輯

就是最後一句話:

Use the ​​srand​​​ function to seed the pseudorandom-number generator before calling rand. 

意思:調用rand函數前要調用srand函數進行産生随機數生成器。

2.而srand函數:

Sets a random starting point.設定一個随機的起點。

調用它是:srand(unsigned int seed)這裡要放一個時刻變化量,否則産生的随機值是不變的。

C語言猜數字遊戲
C語言猜數字遊戲

編輯

 而什麼是時刻可以變化的呢?答案不言而喻,時間呗。

那怎麼輸入一個時間呢?那麼我們需要了解一個給概念:時間戳

C語言猜數字遊戲
C語言猜數字遊戲

編輯

在C語言中有一個函數可以輸出時間戳:time函數

C語言猜數字遊戲
C語言猜數字遊戲

編輯

 由此調用scrand函數是這樣的:    srand((unsigned int)time(NULL));

而且這個調用要寫在主函數,而不是game函數,因為如果輸入過快,則導緻兩次随機值相同:

C語言猜數字遊戲
C語言猜數字遊戲

編輯

game函數源碼: 

void game()
{
  int guess = 0;
  int ret = rand() % 100 + 1;
  printf("%d\n", ret);
  while (1)
  {
    printf("guess the number:");
    scanf("%d", &guess);
      if (guess > ret)
      {
        printf("guess a bigger!\n");
      }
      else if (guess < ret)
      {
        printf("guess a litter!\n");
      }
      else
      {
        printf("Find!\n");
        break;
      }
  }
}      
C語言猜數字遊戲

源碼: 

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void menu()
{
  printf("########################\n");
  printf("########1.play#########\n");
  printf("########0.Exit#########\n");
}
void game()
{
  int guess = 0;
  int ret = rand() % 100 + 1;
  printf("%d\n", ret);
  while (1)
  {
    printf("guess the number:");
    scanf("%d", &guess);
      if (guess > ret)
      {
        printf("guess a bigger!\n");
      }
      else if (guess < ret)
      {
        printf("guess a litter!\n");
      }
      else
      {
        printf("Find!\n");
        break;
      }
  }
}
int main(void)
{
  int input = 0;
  srand((unsigned int)time(NULL));
  do
  {
    menu();
    printf("please choose :->");
    scanf("%d", &input);
    switch (input)
    {
    case 1:game();
      break;
    case 2:printf("EXIT\n");
      break;
    defalut: printf("Choose wrong! again choose!\n");
      break;
    }   
  } while (input);
  return 0;
}      
C語言猜數字遊戲

運作結果截圖:

C語言猜數字遊戲