本文将介绍如何使用 C++ 实现一个游戏机排队系统,用于管理玩家在游戏机前的排队情况。

问题描述

一个游戏厅只有一台游戏机,每次最多只能容纳两个人同时玩游戏。然而,来玩游戏的人数往往不止两个,因此需要一个排队系统来管理玩家的顺序。

在整个过程中,可能发生的事件有以下几种:

  1. start: 一局游戏开始。若不是第一局游戏,则上一局的参与者按照原本的顺序回到队尾。此时,程序应输出这一局上场的人的名字,以空格分隔。若这一局无人上场,则输出 Error 并忽略此事件。
  2. arrive x: 玩家 x 抵达游戏厅并加入队尾。此时,x 不应该在排队,否则输出 Error 并忽略此事件。若该事件成功执行,则输出 OK
  3. leave x: 玩家 x 离开游戏厅并离开队列。此时,x 应该在排队,但不能正在玩游戏,否则输出 Error 并忽略此事件。若该事件成功执行,则输出 OK

C++ 代码实现

#include <iostream>
#include <queue>
#include <unordered_set>

using namespace std;

int main() {
    queue<string> players; // 维护排队玩家队列
    unordered_set<string> playing; // 维护正在游玩玩家集合
    
    string event;
    while (cin >> event) {
        if (event == "start") {
            if (playing.empty()) {
                cout << "Error" << endl;
                continue;
            }
            while (playing.size() < 2 && !players.empty()) {
                string player = players.front();
                players.pop();
                playing.insert(player);
            }
            for (const string& player : playing) {
                cout << player << " ";
            }
            cout << endl;
        } else if (event == "arrive") {
            string player;
            cin >> player;
            if (playing.count(player) || players.size() >= 2) {
                cout << "Error" << endl;
                continue;
            }
            players.push(player);
            cout << "OK" << endl;
        } else if (event == "leave") {
            string player;
            cin >> player;
            if (!players.empty() && players.front() == player) {
                players.pop();
            } else if (playing.count(player)) {
                playing.erase(player);
            } else {
                cout << "Error" << endl;
                continue;
            }
            cout << "OK" << endl;
        }
    }
    
    return 0;
}

代码解释

  • 程序使用 queue 数据结构来维护游戏机前的排队玩家,使用 unordered_set 数据结构来维护正在游玩玩家的集合。
  • 对于每个事件,程序会根据要求进行相应的操作,并根据结果输出相应的信息。
  • start 事件:
    • 若当前没有玩家正在玩游戏,则输出 Error 并忽略此事件。
    • 否则,将排队玩家队列中前两个玩家(或仅有的一个玩家)加入到 playing 集合中,并输出他们的名字。
  • arrive x 事件:
    • 若玩家 x 正在玩游戏或排队玩家队列中已经有两个人,则输出 Error 并忽略此事件。
    • 否则,将玩家 x 加入到排队玩家队列尾部,并输出 OK
  • leave x 事件:
    • 若玩家 x 是排队玩家队列中的第一个,则将其从队列中移除。
    • 若玩家 x 正在玩游戏,则将其从 playing 集合中移除。
    • 若玩家 x 既不在排队队列中也不在 playing 集合中,则输出 Error 并忽略此事件。
    • 否则,输出 OK

总结

本文介绍了如何使用 C++ 实现一个游戏机排队系统,有效管理玩家排队和游戏状态。通过使用队列和集合数据结构,程序能够高效地处理不同事件类型,并根据要求输出相应的信息。

C++ 游戏机排队系统实现:高效管理游戏玩家队列

原文地址: https://www.cveoy.top/t/topic/qinG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录