pierwsza gra CMD (kościana)

0

Dzień dobry, mianowicie mam problem, ponieważ dostałem zadanie o takiej treści " utwórz grę kościaną, gra musi spełnić poniższe wymagania:

  1. Na początku ma się pojawić z ilu graczy będzie składała się rozgrywka max 4
  2. Użytkownik może wybrać sobie nick.
  3. Każdy gracz ma mieć symulowany rzut dwiema kośćmi do gry oraz sumowany wynik
  4. Gracz z najwyższą sumą punktów ma wygrywać rundę
  5. Jeżeli dochodzi do remisu pomiędzy dowolną ilością graczy, ma być powtarzany rzut kośćmi tylko pomiędzy graczami którzy mieli ten sam wynik
  6. Po sześciu rundach rozgrywka się kończy i jest przedstawiona tablica wyników "

mam problem z 4,5,6 podpunktem w sensie 4 jako tako działa ale średnio najgorzej z podpunktem piątym.
Wiem jak zrobić to teoretycznie lecz w praktyce coś nie wychodzi. W 6 podpunkcie muszę wszystko dać w pętle i wyniki graczy po każdej rundzie zapisać do tabeli, która na końcu się wyświetli, 5 podpunktu nie umiem zrobić, proszę o jakąś małą podpowiedź lub nakierowanie poniżej jest mój kod.


#include <iostream>
#include <windows.h>
#include <ctime>
#include <cstdlib>

using namespace std;

void menu();
void gra();

/*  */

int main() {

    menu();

}

int liczba_graczy, rzut1, rzut2, wyniki_1[4], wyniki_2[4], suma[4], command, rmax;

string nick[4];

void menu() {
        cout << "****** witaj w grze ******" << endl;
    cout << "* 1. Start gry      \t*" << endl;
    cout << "* 2. Wyjscie z gry  \t*" << endl;
    cout << "* 3. Informacje  \t*" << endl;
    cout << "**************************" << endl;
    cin >> command;

    switch(command)
    {
        case 1: 
            {
                gra();
            } break;
        case 2:
            {
                cout << "gra zostanie wylaczona!"; Sleep(2000);
                exit(0);
            } break;
        case 3:
            {
                cout << "autorzy: ******* " << endl;
                cout << "jezyk programowania: c++" << endl;
            } break;
        default: 
            {
                cout << "przykro mi ale nie ma takiej opcji!" << endl; Sleep(2000);
                menu();
            } break;
    }
}

void gra() 
{   
    srand((unsigned)time(0));
    cout << "ilu jest graczy (max 4)" << endl;    //zad1
    cin >> liczba_graczy;

    if(liczba_graczy < 1 || liczba_graczy > 4) 
    {
        cout << "nieprawidlowa ilosc graczy sprobuj ponownie" << endl; Sleep(2000);
        gra();
    }
        for (int i = 0; i < liczba_graczy; i++) 
        {
            cout << "podaj swoj nick" << endl;
            cin >> nick[i];                               // zad2
            cout << endl;
        }
        for (int i = 0; i < liczba_graczy; i++) 
        {
            rzut1 = rand() % 6 + 1;
            rzut2 = rand() % 6 + 1;
            wyniki_1[i] = rzut1;               // zad3
            wyniki_2[i] = rzut2;
            suma[i] = rzut1 + rzut2;
        }

        rmax = suma[0];                        // zad4 nie do konca dziala
        for (int i = 1; i < liczba_graczy; i ++) 
        {
            if (rmax < suma[i]) 
                rmax = suma[i];
                cout << nick[i] << " wygral bo ma najwiecej punktow " << rmax << endl; 
        }

    for (int i = 0; i < liczba_graczy; i++) 
    {
        cout << nick[i] << " uzyskal z jednej kostki " << wyniki_1[i] << endl;
        cout << nick[i] << " uzyskal z drugiej kostki " << wyniki_2[i] << endl;
        cout << nick[i] << " uzyskal lacznie " << suma[i] << endl;  
    }

}
4

Twoje tablice wyniki_1, wyniki_2 i suma powinny być wielowymiarowe tak by uwzględniać nr rundy (6) w ten sposób gdy dasz w pętle ad.6 masz rozwiązany.
Po każdym rzucie musisz sprawdzić czy nie ma powtórzeń wyników, jeżeli są to wybrać id do jakiejś pomocniczej tablicy i jeszcze ras symulować rzut.

5
  1. Nie używaj zmiennych globalnych. Tylko na pozór jest to ułatwienie
  2. Spróbuj używać kontenerów biblioteki standardowej jako dynamicznych tablic ( std::vector ) do przechowywania danych.
  3. Podziel kod na mniejsze części/funkcje, najlepiej bezpośrednio odnoszących się do punktów zadania. Na przykład wczytywanie nazw zawodników może być realizowane w osobnej funkcji init_players
void init_players( vector<string>& players )
{
    int number_of_players {};
    cout << "Enter number of players (max 4)" << endl;
    cin >> number_of_players;

    while( number_of_players < 1 || number_of_players > 4 )
    {
         cout << "Invalid number of players - Try again" << endl;
         cin >> number_of_players;
    }

    players.resize(number_of_players);

    for( auto& name : players )
    {
         cout << "Enter player name" << endl;
         cin >> name;
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0