我們先暫停討論有關演算法跟資料結構的問題唄!來想想擲骰子遊戲應該要怎麼與使用者互動,先印出使用者目前有多少籌碼,然後要求使用者輸入要壓的籌碼數,接著印出雙方點數,最後顯示使用者贏或輸,剩下多少籌碼。
根據這樣的互動概念,我們提供完成版的擲骰子遊戲如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | #include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> #define SIZE 1000 int main( void ) { int points1[SIZE]; // 第一組骰子表格 int points2[SIZE]; // 第二組骰子表格 int temp; // 暫存變數 int i; // 迴圈用變數 int jeton = 100; // 玩家的籌碼 char input[10]; // 接受玩家所要壓的籌碼值 int n; // 儲存籌碼值 int counter; // 累計遊戲次數,用為用為存取骰子表格 srand ( time (NULL)); // 建立兩組骰子的亂數表 for (i = 0; i < SIZE; i++) { temp = rand () % 6; if (temp == 0) { temp = 6; } points1[i] = temp; temp = rand () % 6; if (temp == 0) { temp = 6; } points2[i] = temp; } // 遊戲執行的迴圈 counter = 0; printf ( "\n這是擲骰子遊戲,您目前有 %d 個籌碼\n" , jeton); while (1) { printf ( "請輸入要壓多少籌碼 1-10: " ); scanf ( "%s" , input); if (! strcmp (input, "exit" )) { printf ( "\n您即將離開遊戲....\n" ); break ; } n = atoi (input); if (n > 10 || n < 1) { printf ( "\n輸入籌碼值不正確,請重新輸入....\n" ); continue ; } printf ( "\n您的點數: %d\n" , points1[counter]); printf ( "電腦的點數: %d\n" , points2[counter]); if (points1[counter] == points2[counter]) { counter++; printf ( "雙方平手,直接擲下一輪....\n" ); continue ; } if (points1[counter] > points2[counter]) { counter++; jeton += n; printf ( "您的點數大於電腦的點數,現在有 %d 籌碼\n" , jeton); continue ; } if (points1[counter] < points2[counter]) { counter++; jeton -= n; printf ( "您的點數小於電腦的點數,現在有 %d 籌碼\n" , jeton); continue ; } } printf ( "\n\n\n遊戲即將結束....\n\n" ); return 0; } /* 《程式語言教學誌》的範例程式 檔名:dice8.c 功能:簡單的擲骰子遊戲 作者:張凱慶 時間:西元2010年7月 */ |
遊戲在 while (1) 迴圈中執行,所以我們提供的結束機制就是使用者輸入 exit ,這樣就會跳出迴圈結束遊戲。
因為使用者輸入可能會有文字,如 exit ,第 41 行
41 | scanf ( "%s" , input); |
接收使用者輸入的是字串,因為不是數字,所以第 48 行
48 | n = atoi (input); |
我們利用標準函數庫中 stdlib.h 的函數 atoi() ,進行字串與整數之間的轉換。 atoi() 需要一個字串當作參數,然後讀取字串開頭前屬於數字的字元,組合成數字回傳整數值。
來編譯執行,玩看看吧!

問題與討論
- 為什麼接受使用者所猜的數字要用字串?
- 將接受使用者輸入的轉換字符改為 %d ,也就是接受輸入整數,然後另設機制如輸入 99 作為結束 while (1) 迴圈之用。
- 承上例,這樣的程式執行時,有可能發生什麼問題嗎?
沒有留言:
張貼留言