👉博__主👈:米碼收割機
👉技__能👈:C++/Python語言
👉專__注👈:專注主流機器人、人工智能等相關領域的開發、測試技術。
【C語言 】C語言 桌游開發數字競拍(源碼)【獨一無二】
目錄
- 【C語言 】C語言 桌游開發數字競拍(源碼)【獨一無二】
- 一、設計要求
- 二、設計思路
- 1. 初始化模塊
- 2. 回合處理模塊
- 3. 回合結果判定模塊
- 4. 游戲終止條件判斷模塊
- 5. 游戲結束模塊
- 6. 主函數匯總
- 三、可視化分析
一、設計要求
桌游開發:數字競拍
1、問題描述
請按照如下背景及游戲規則開發桌面游戲《數字競拍》。
玩家人數:2 人。
規則:(1)雙方初始總共有 100 元。(2)每個回合的開始,將出現 1~3 中任意一個隨機數字。
各玩家分別給出本回合的出價,該選擇對其他玩家不可見。(3)雙方玩家完成出價后,出價
高的人獲得該數字,從雙方的經費中扣除本次出價價格,出價低的人錢也不退回。(4)雙方
的出價情況不會展示。(5)滿足以下任意一條,游戲結束:任意一方獲得數字之和達 10 以上;
7 個回合結束;雙方剩余錢數為 0。
2、要求
(1)理解上述游戲規則、設計具體流程及子程序。
(2)能夠展示游戲過程。
二、設計思路
下面給出本程序的設計思路說明,采用模塊化方式實現兩個玩家利用競拍機制進行游戲的邏輯。程序整體分為初始化、回合處理、回合結果判定、游戲終止條件判斷以及游戲結束結果輸出等幾個模塊。下面結合代碼詳細說明各個模塊的設計思路及關鍵代碼。
1. 初始化模塊
設計思路:
程序開始時需要初始化兩個玩家的金錢(均為 100)、兩位玩家的累加和(初始為 0)以及回合計數器,之后利用 srand()
函數結合當前時間來為后續隨機數生成器設定種子,從而保證每次運行隨機數不同。
關鍵代碼:
int player1_money = 100;
int player2_money = 100;
int player1_sum = 0, player2_sum = 0;
int rounds = 0;srand(time(NULL)); // 用于生成隨機數
2. 回合處理模塊
設計思路:
在主循環中(限制最多 7 回合),每個回合需要先生成一個1到3之間的隨機數作為本回合競拍的“拍賣數”。然后要求兩個玩家分別輸入出價,程序通過 do…while 循環確保玩家輸入的出價不得超過其剩余金額。如果出價超過,則進行提示并重新輸入。
關鍵代碼:
while (rounds < 7) {int number = rand() % 3 + 1; // 生成1到3之間的隨機數int bid1, bid2;// 輸出回合及競拍數字信息printf("回合 %d: 競拍數字是 %d\n", rounds + 1, number);// 此處省略 20行+代碼// 玩家2出價do {printf("玩家 2 的出價(剩余 %d 元):", player2_money);scanf("%d", &bid2);if (bid2 > player2_money) {printf("出價超過剩余金額,請重試。\n");}} while (bid2 > player2_money);
3. 回合結果判定模塊
設計思路:
比較兩個玩家的出價:
- 如果玩家1出價更高,則玩家1獲得本回合的隨機競拍數字,并從他的賬戶中扣除相應出價金額;
- 如果玩家2出價更高,則玩家2獲得本回合競拍數字,扣除出價;
- 如果出價相同,則視為平局,本回合無人得分,也不扣錢。
關鍵代碼:
// 判定獲勝者if (bid1 > bid2) {printf("玩家 1 贏得此回合!\n");player1_sum += number;player1_money -= bid1;} else if (bid2 > bid1) {printf("玩家 2 贏得此回合!\n");player2_sum += number;player2_money -= bid2;} else {printf("平局,無人贏得此回合。\n");}rounds++;
4. 游戲終止條件判斷模塊
設計思路:
在每輪結束后,判斷是否滿足以下任一游戲終止條件:
- 任何一位玩家的累加和達到或超過 10;
- 任何一位玩家的剩余金錢為 0。
當滿足條件時,提前結束游戲。
關鍵代碼:
// 檢查游戲結束條件if (player1_sum >= 10 || player2_sum >= 10 || player1_money == 0 || player2_money == 0) {break;}printf("\n"); // 換行分隔每回合
}
5. 游戲結束模塊
設計思路:
當游戲退出后,程序輸出每位玩家的累計數字和,然后依照以下規則判斷勝負:
- 如果有玩家的累計和 ≥ 10,則以此為勝利條件;
- 否則按照累計和大小比較,如果相同則平局,累計和更高的玩家獲得最終勝利。
關鍵代碼:
printf("\n游戲結束!\n");
printf("玩家 1 的數字和:%d\n", player1_sum);
printf("玩家 2 的數字和:%d\n", player2_sum);if (player1_sum >= 10 || player2_sum >= 10) {if (player1_sum >= 10) printf("玩家 1 獲得勝利!\n");
// 此處省略 20行+代碼
} else {printf("玩家 2 獲得勝利!\n");
}
6. 主函數匯總
設計思路:
主函數中先完成各項初始化工作,然后進入回合游戲的循環,最后輸出游戲結果。整段代碼結構清晰,采用模塊化設計便于理解和后期擴展。
完整代碼:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>int main() {int player1_money = 100;int player2_money = 100;int player1_sum = 0, player2_sum = 0;int rounds = 0;srand(time(NULL)); // 用于生成隨機數while (rounds < 7) {int number = rand() % 3 + 1; // 生成1到3之間的隨機數int bid1, bid2;printf("回合 %d: 競拍數字是 %d\n", rounds + 1, number);// 玩家1出價// 此處省略 20行+代碼} else if (player1_sum > player2_sum) {printf("玩家 1 獲得勝利!\n");} else {printf("玩家 2 獲得勝利!\n");}return 0;
}
代碼采用模塊化設計,將初始化、回合處理、結果判定與游戲結束分成多個部分,每個模塊均完成相應的功能:
- 初始化模塊:設置玩家初始狀態及隨機種子。
- 回合處理模塊:生成隨機競拍數字,保證玩家出價合法。
- 回合結果判定模塊:比較出價、更新玩家狀態。
- 游戲終止判斷與結束輸出:判斷是否達到終止條件,并輸出最終結果。