[問題] 請問骰子的問題

看板C_and_CPP (C/C++)作者 (vinci)時間15年前 (2011/04/03 11:03), 編輯推噓2(2010)
留言12則, 6人參與, 最新討論串1/3 (看更多)
Linux 的 C 想要幫擲骰子加入一點互動的功能 當沒有輸贏的時候程式要要求使用者按d執行第二次直骰子 在第二次擲骰子的過程中程式沒有要求使用者執行直骰子的動作而 直接判斷遊戲的輸贏 #include <stdio.h> #include <stdlib.h> #include <time.h> enum Status {CONTINUE, WON, LOST}; int rollDice (void); int main () { int sum; int mypoint; enum Status gameStatus; srand(time(NULL)); sum = rollDice(); switch (sum) { case 7: case 11: gameStatus = WON; break; case 2: case 3: case 12: gameStatus = LOST; break; default: gameStatus = CONTINUE; mypoint = sum; printf ("Your point is %d\n", mypoint); break; } while (gameStatus == CONTINUE) { sum = rollDice(); if (sum == mypoint) { gameStatus = WON; } else { if (sum == 7) { gameStatus = LOST; } } } if (gameStatus == WON) { printf("YOU WIN!!\n"); } else { printf("YOU LOST!!!\n"); } return 0; } int rollDice (void) { char dice; int dice1; int dice2; int dice_sum; printf("Enter 'd' or to dice:"); scanf("%c", &dice); if(dice == 'd'){ dice1 = 1 + (rand() % 6); dice2 = 1 + (rand() % 6); dice_sum = dice1 + dice2; printf ("Your sum are %d + %d = %d\n", dice1, dice2, dice_sum); } return dice_sum; } 這個程式是 C How to program 4e 的fig5.10的程式 它的規則是一次丟兩個骰子,然後加總。 如果總和為7就贏了,如果是2,3,12則判定輸。 如果點數和為4,5,6,8,9,10則遊戲繼續。 當繼續遊戲時,如果丟到的點數和為7就輸了。 然而若第二次的點數和與第一次一樣就贏了。 如果點數沒有與之前一樣的話,就一直丟骰子,直到判定勝負。 由於範例是執行的時候就直接自動丟骰子,所以我想要修改為,在丟骰的 時候要求玩家按個按鍵(我是使用判定有無輸入'd'),但是程式在執行時, 當繼續遊戲,就是還沒有分出勝負時,電腦就直接判定勝負了。 好像有個地方出錯。 請問我要如何修改才能加入小小的互動功能呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.76.74.83

04/03 11:52, , 1F
我覺得你先解釋一下勝負規則和你要什麼樣的"互動"比較好
04/03 11:52, 1F
※ 編輯: uranus0206 來自: 211.76.74.83 (04/03 12:01)

04/03 12:11, , 2F
如果沒有輸入'd',你會希望程式做什麼嗎?
04/03 12:11, 2F

04/03 12:12, , 3F
還有,當我一直輸入'd'時,程式感覺很正常阿@@"
04/03 12:12, 3F

04/03 14:33, , 4F
你希望的互動功能是,程式會停下來給你看目前玩到哪了嗎
04/03 14:33, 4F

04/03 14:54, , 5F
建議使用getchar(),scanf()處理字元輸入有點小瑕疵
04/03 14:54, 5F

04/03 14:56, , 6F
我對規則的理解是,第一次之後的執骰只要按一次d就好了
04/03 14:56, 6F

04/03 14:58, , 7F
所以scanf()的部份應該從rolldice()抽離出來
04/03 14:58, 7F

04/03 15:45, , 8F
我是希望可以做出玩家丟骰子的這個動作,而不是讓程式
04/03 15:45, 8F

04/03 15:45, , 9F
自動跑出結果
04/03 15:45, 9F

04/03 15:49, , 10F
你可以說明你預期的「執行結果」是怎麼樣的嗎?
04/03 15:49, 10F

04/03 16:06, , 11F
我希望,可以每次在擲骰子前都要求輸入某觸發字元
04/03 16:06, 11F

04/03 16:09, , 12F
你沒有處理if(dice == 'd')以外的情況
04/03 16:09, 12F
文章代碼(AID): #1Db-ESsk (C_and_CPP)
文章代碼(AID): #1Db-ESsk (C_and_CPP)