簡體   English   中英

骰子游戲號碼不是隨機的

[英]Dice Game Numbers not Random

基本上我應該模擬一個擲三個骰子的程序,加起來。 然后,我將讓用戶猜測下一卷是更高,更低,相同還是只是想退出。 我有兩個問題。

  1. 這些數字不是隨機的,顯然這對我來說是個很大的錯誤,但我似乎無法弄清楚。 我想我不需要第二個包含3個骰子對嗎? 他們仍然沒有幫助。

  2. 無論如何,我的程序一次完成所有if / else if語句。 顯然我不希望這種情況發生。


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

int main ()
{
    int diceOne, diceTwo, diceThree, diceSum=0, timesCorrect=0, choice; 
    int newDiceOne, newDiceTwo, newDiceThree, newDiceSum;

    srand( time(NULL) );

    diceOne      = rand() % 6 + 1;
    diceTwo      = rand() % 6 + 1;
    diceThree    = rand() % 6 + 1;
    newDiceOne   = rand() % 6 + 1;
    newDiceTwo   = rand() % 6 + 1;
    newDiceThree = rand() % 6 + 1;

    printf("The three dice rolls: %d, %d, %d", diceOne, diceTwo, diceThree);
    diceSum = diceOne + diceTwo + diceThree;
    printf("\nTotal sum of dice is %d\n", diceSum);

    do {
        printf("Guess higher(1), lower(2), same(3) or quit?(4)\n");
        printf(" You have been correct %d times\n", timesCorrect);
        scanf("%d", &choice);

        printf("The three dice rolls: %d, %d, %d", newDiceOne, newDiceTwo, newDiceThree);
        newDiceSum= newDiceOne + newDiceTwo + newDiceThree;
        printf("\nTotal sum of dice is %d\n", newDiceSum);

        if (choice == 1)
        {
            if (newDiceSum > diceSum);
                timesCorrect++;
            printf("You are correct!\n");
        }
        else if (newDiceSum < diceSum); 
        {
            printf("You are incorrect, sorry!\n");
        }

        if (choice == 2)
        {
            if (newDiceSum < diceSum);
                timesCorrect++;
            printf("You are correct!\n");
        }
        else if (newDiceSum > diceSum); 
        {
            printf("You are incorrect, sorry!\n");
        }

        if (choice == 3)
        {
            if (newDiceSum == diceSum);
                timesCorrect ++;
            printf("You are correct!\n");
        }
        else if (newDiceSum != diceSum); 
        {
            printf("You are incorrect, sorry!\n");
        }

        if (choice == 4)
        {
            printf("Thanks for playing!!!!!!\n");
            system("pause");

            return 0;
        }
    } while (choice!= 4 );
}

else if有條件,您會在else if后面加上一個多余的分號,例如這里

else if (newDiceSum < diceSum); 
                /*            ^ this should not be here */

如果您使用具有良好診斷能力的編譯器並啟用警告,則應該警告您“ 錯字 ”,如果您想將該塊留空,請使用大括號,例如

else if (newDiceSum < diceSum) {}

另外,您可以使用rand()設置第一個骰子,它們是隨機值,但是在循環中始終使用相同的值。

如下代碼:

  1. 處理錯誤條件

  2. 消除不必要的變量

  3. 干凈地編譯

  4. 執行成功


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

int main ( void )
{
    int diceOne;
    int diceTwo;
    int diceThree;
    int diceSum=0;
    int timesCorrect=0;
    int choice;

    int newDiceSum;

    srand( time(NULL) );

    diceOne      = rand() % 6 + 1;
    diceTwo      = rand() % 6 + 1;
    diceThree    = rand() % 6 + 1;


    printf("The three dice rolls: %d, %d, %d", diceOne, diceTwo, diceThree);
    diceSum = diceOne + diceTwo + diceThree;
    printf("\nTotal sum of dice is %d\n", diceSum);

    do {
        printf("Guess higher(1), lower(2), same(3) or quit?(4)\n");
        printf(" You have been correct %d times\n", timesCorrect);
        if( 1 != scanf("%d", &choice) )
        { // then scanf failed
            perror( "scanf for choice failed" );
            exit( EXIT_FAILURE );
        }

        // implied else, scanf successful

        diceOne      = rand() % 6 + 1;
        diceTwo      = rand() % 6 + 1;
        diceThree    = rand() % 6 + 1;

        printf("The three dice rolls: %d, %d, %d", diceOne, diceTwo, diceThree);
        newDiceSum = diceOne + diceTwo + diceThree;
        printf("\nTotal sum of dice is %d\n", newDiceSum);

        switch( choice )
        {
        case 1:
            if (newDiceSum > diceSum)
            {
                timesCorrect++;
                printf("You are correct!\n");
            }
            else
            {
                printf("You are incorrect, sorry!\n");
            }
            break;

        case 2:
            if (newDiceSum < diceSum)
            {
                timesCorrect++;
                printf("You are correct!\n");
            }
            else
            {
                printf("You are incorrect, sorry!\n");
            }
            break;

        case 3:
            if (newDiceSum == diceSum)
            {
                timesCorrect ++;
                printf("You are correct!\n");
            }
            else
            {
                printf("You are incorrect, sorry!\n");
            }
            break;

        case 4:
            printf("Thanks for playing!!!!!!\n");
            system("pause");
            break;

        default:
            printf( " invalid choice, valid choices are 1...4\n");
            break;
        } // end switch
    } while (choice!= 4 );
    return(0);
} // end function: main

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM