40 lines
960 B
C++
40 lines
960 B
C++
#pragma once
|
|
|
|
#include <memory>
|
|
#include <mutex>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "Robot.h"
|
|
#include "Timer.h"
|
|
#include "World.h"
|
|
|
|
/* Coordinates game setup, turn order, world updates, and final scoring output. */
|
|
class Game {
|
|
public:
|
|
Game ();
|
|
void run ();
|
|
|
|
private:
|
|
World world_;
|
|
std::vector<std::unique_ptr<Robot>> robots_;
|
|
std::vector<int> deadRobotScores_;
|
|
std::mutex turnMutex_;
|
|
int lastThreshold_ = 0;
|
|
int round = 0;
|
|
std::vector<Timer::Duration> threadTimes_;
|
|
|
|
void setup ();
|
|
void robotLoop ( int idx );
|
|
void fightNearby ( Robot &robot );
|
|
int computeWorldSum () const;
|
|
bool isGameOver () const;
|
|
void log ( const std::string &message ) const;
|
|
void checkRearrange ( Robot &robot );
|
|
void applyEffect ( Robot &robot, int effect );
|
|
void printScores () const;
|
|
void printResults () const;
|
|
|
|
std::unique_ptr<Robot> createRobot ( int choice, int x, int y ) const;
|
|
};
|