C語言:猜數(shù)字游戲

目的:

學(xué)習(xí)用c語言寫一個(gè)猜數(shù)字游戲的demo,練習(xí)使用c語言里的for,while循環(huán),數(shù)組,排序方法等,加強(qiáng)對(duì)c語言的邏輯結(jié)構(gòu)的理解。

游戲過程:

首先系統(tǒng)自動(dòng)產(chǎn)生4個(gè)0-9的不重復(fù)隨機(jī)數(shù)從小到大排好序,但是不顯示給用戶知道;
接著用戶從終端輸入猜測(cè)的4個(gè)數(shù)字,將產(chǎn)生的那組數(shù)字中每個(gè)數(shù)字都與用戶猜測(cè)的一組數(shù)字中的每個(gè)進(jìn)行比較;
若兩個(gè)數(shù)字相同且在數(shù)組中位置也相同,則輸出提示用戶一個(gè)A,若位置不同,則提示B,直到用戶猜測(cè)正確,輸出4A(兩組數(shù)字分別對(duì)應(yīng)相同),游戲結(jié)束。

程序運(yùn)行結(jié)果:
猜數(shù)字游戲.gif

程序分析:

1.首先需要產(chǎn)生四個(gè)不重復(fù)的隨機(jī)數(shù).

需要定義一個(gè)數(shù)組保存產(chǎn)生的4個(gè)隨機(jī)數(shù):

int orgArray[4] = {};

產(chǎn)生隨機(jī)數(shù)之前需要導(dǎo)入相應(yīng)的頭文件:

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

然后需要種一個(gè)產(chǎn)生隨機(jī)數(shù)的種子:

srand((unsigned int)time(NULL));

使用for循環(huán)產(chǎn)生4個(gè)隨機(jī)數(shù),定義一個(gè)bool類型的變量isExist判斷是否重復(fù),代碼實(shí)現(xiàn)如下:

for (int i = 0; i < 4; i ++) {
        //生成一個(gè)隨機(jī)數(shù)
        int temp = rand() % 10;
        //判斷是否重復(fù)
        bool isExist = false;
        for (int j = 0; j < i; j++) {
            if (orgArray[j] == temp) {
                //重復(fù)了
                isExist = true;
                break;
            }
        }
        
        //判斷是否重復(fù)
        if (isExist == false) {
            //不重復(fù) 保存這個(gè)數(shù)
            orgArray[i] = temp;
        }else{
            //重復(fù)了
            i--;
        }
    }
2.運(yùn)用冒泡排序法對(duì)產(chǎn)生的隨機(jī)數(shù)從小到大排序:
 //用冒泡排序法進(jìn)行排序
    for (int i = 0; i < 4; i ++) {
        for (int j = 0; j < 3-i; j++) {
            if (orgArray[j] > orgArray[j+1]) {
                int temp = orgArray[j];
                orgArray[j] = orgArray[j+1];
                orgArray[j+1] = temp;
            }
        }
    }
    
3.接下來開始游戲

定義一個(gè)數(shù)組保存猜測(cè)的數(shù)字,定義兩個(gè)變量countA和countB分別保存A和B的個(gè)數(shù):

int guessArray[4] = {};
int countA = 0;
int countB = 0;

因?yàn)椴聰?shù)字過程要進(jìn)行多次,使用一個(gè)while循環(huán)。使用兩個(gè)for循環(huán)將原數(shù)字與猜測(cè)的數(shù)字進(jìn)行比較,每次猜測(cè)后,countA和countB要還原,下一次循環(huán)重新計(jì)數(shù)。代碼實(shí)現(xiàn)如下:

  //開始游戲
    int guessTime = 0;
    while (1) {
        printf("請(qǐng)輸入猜測(cè)數(shù)字:");
        for (int i = 0; i < 4; i++) {
            scanf("%d", &guessArray[i]);
        }
        
        //將原數(shù)字與猜測(cè)數(shù)字進(jìn)行比較
        for (int i = 0; i < 4; i++) {//控制原數(shù)字
            for (int j = 0; j < 4; j++) {//控制猜測(cè)的數(shù)字
                //判斷兩數(shù)字是否相同
                if (orgArray[i] == guessArray[j]) {
                    //判斷兩數(shù)字位置是否相同
                    if (i == j) {
                        //數(shù)字相同 位置相同
                        countA++;
                    } else{
                        //數(shù)字相同 位置不同
                        countB++;
                    }
                }
            }
        }
      
        guessTime ++;
        //判斷是不是猜對(duì)了
        if (countA == 4) {
            printf("Congratulation!! 猜測(cè)的次數(shù)為:%d次!", guessTime);
            break;
        } else{
            printf("%dA%dB\n", countA, countB);
            //還原數(shù)據(jù)
            countA = 0;
            countB = 0;
        }
    }
總結(jié)

要完成這個(gè)Demo,需要對(duì)c語言的各種循環(huán)結(jié)構(gòu),數(shù)組等熟練使用,對(duì)循環(huán)中變量的控制熟練掌握。剛開始寫可能沒有那么順暢,但只要通過多次練習(xí),就會(huì)理解的更深刻,對(duì)這些運(yùn)用的更熟練。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容