#include <iostream>
#include <cstdlib>
#include <ctime>
#include <thread> // Para delay
#include <chrono> // Para delay
class Carro {
private:
std::string nome;
int posicao;
public:
Carro(std::string nome) : nome(nome), posicao(0) {}
void mover(int movimento) {
posicao += movimento;
}
int getPosicao() const {
return posicao;
}
std::string getNome() const {
return nome;
}
};
void printBandeira() {
std::cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
std::cout << " ._________ \n";
std::cout << " | | \n";
std::cout << " | | \n";
std::cout << " | | \n";
std::cout << " | | \n";
std::cout << " | | \n";
std::cout << " | | \n";
std::cout << " | | \n";
std::cout << " |________| \n";
}
void printPosicao(const Carro& carro) {
std::cout << carro.getNome() << " está na posição " << carro.getPosicao() << std::endl;
}
int main() {
srand(time(0));
Carro carroAmarelo("Carro Amarelo"), carroVermelho("Carro Vermelho"), carroAzul("Carro Azul"), carroVerde("Carro Verde");
// Simulação dos movimentos
for (int i = 0; i < 10; ++i) { // Aumentei o número de iterações para melhor visualização
int movimento_carroAmarelo = rand() % 2 == 0 ? 1 : -1; // Movimento aleatório entre frente e trás
int movimento_carroVermelho = rand() % 2 == 0 ? 1 : -1;
int movimento_carroAzul = rand() % 2 == 0 ? 1 : -1;
int movimento_carroVerde = rand() % 2 == 0 ? 1 : -1;
carroAmarelo.mover(movimento_carroAmarelo);
carroVermelho.mover(movimento_carroVermelho);
carroAzul.mover(movimento_carroAzul);
carroVerde.mover(movimento_carroVerde);
// Imprime as posições dos carros após cada movimento
printPosicao(carroAmarelo);
printPosicao(carroVermelho);
printPosicao(carroAzul);
printPosicao(carroVerde);
// Delay para visualização
std::this_thread::sleep_for(std::chrono::milliseconds(500));
}
// Verifica o vencedor
int maxPos = std::max(carroAmarelo.getPosicao(), std::max(carroVermelho.getPosicao(), std::max(carroAzul.getPosicao(), carroVerde.getPosicao())));
if (carroAmarelo.getPosicao() == maxPos) {
std::cout << "\n" << carroAmarelo.getNome() << " venceu!" << std::endl;
}
if (carroVermelho.getPosicao() == maxPos) {
std::cout << "\n" << carroVermelho.getNome() << " venceu!" << std::endl;
}
if (carroAzul.getPosicao() == maxPos) {
std::cout << "\n" << carroAzul.getNome() << " venceu!" << std::endl;
}
if (carroVerde.getPosicao() == maxPos) {
std::cout << "\n" << carroVerde.getNome() << " venceu!" << std::endl;
}
// Indica o(s) carro(s) que ficou/ficaram em último lugar
int minPos = std::min(carroAmarelo.getPosicao(), std::min(carroVermelho.getPosicao(), std::min(carroAzul.getPosicao(), carroVerde.getPosicao())));
if (carroAmarelo.getPosicao() == minPos) {
std::cout << carroAmarelo.getNome() << " ficou em último lugar." << std::endl;
}
if (carroVermelho.getPosicao() == minPos) {
std::cout << carroVermelho.getNome() << " ficou em último lugar." << std::endl;
}
if (carroAzul.getPosicao() == minPos) {
std::cout << carroAzul.getNome() << " ficou em último lugar." << std::endl;
}
if (carroVerde.getPosicao() == minPos) {
std::cout << carroVerde.getNome() << " ficou em último lugar." << std::endl;
}
// Imprime a bandeira animada indicando o fim da corrida
for (int i = 0; i < 3; ++i) {
printBandeira();
std::this_thread::sleep_for(std::chrono::milliseconds(500));
system("pause"); // Pausa a execução até que o usuário pressione uma tecla
system("cls"); // Limpa a tela (Windows)
std::this_thread::sleep_for(std::chrono::milliseconds(500));
}
return 0;
}