【C语言 】C语言 桌游开发数字竞拍(源码)【独一无二】

发布于:2025-02-15 ⋅ 阅读:(15) ⋅ 点赞:(0)

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。


【C语言 】C语言 桌游开发数字竞拍(源码)【独一无二】



一、设计要求

桌游开发:数字竞拍
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;
}

代码采用模块化设计,将初始化、回合处理、结果判定与游戏结束分成多个部分,每个模块均完成相应的功能:

  • 初始化模块:设置玩家初始状态及随机种子。
  • 回合处理模块:生成随机竞拍数字,保证玩家出价合法。
  • 回合结果判定模块:比较出价、更新玩家状态。
  • 游戏终止判断与结束输出:判断是否达到终止条件,并输出最终结果。
    在这里插入图片描述

三、可视化分析

在这里插入图片描述

在这里插入图片描述