Witam wszystkich, jest to mój pierwszy post na forum! Od pewnego czasu uczę się programowania w C++ i miałem właśnie do napisania program do gry w Dart - 301. Opis gry jest następujący:
"Jest to najbardziej znana gra w darta. Grana w większości Dart-ligach i wielu turniejach. Zawodnik zaczyna grę od stanu punktowego 301. Na koniec każdej kolejki (po rzuceniu 3 rzutek) odejmuje się sumę zdobytych punktów od poprzedniego stanu punktowego. Zawodnik, musi zredukować ilość punktów dokładnie do zera. Gdy zawodnik w jednej kolejce zdobędzie więcej punktów niż potrzebne jest do osiągnięcia zera - oznacza to "BUST" i nie będą one zapisane. Całkowita punktacja powraca do stanu z poprzedniej kolejki."
Warunki prawidłowego działania programu sa następujące:
- Zlicza punkty w grę 301 dla jednego gracza
- Może mieć dowolną liczbę rund
- W każdej rundzie zawodnik ma do wykorzystania 3 lotki
- Każda lotka może punktować w zakresie 0..60, jeśli podana wartość nie mieści się w zakresie wyświetlany zostaje komunikat: "Niepoprawna ilość punktów"
- Gra kończy się, gdy zawodnik osiągnie 0 punktów obojętnie, w której rundzie
- Jeśli gracz w rundzie rzuci więcej punktów niż mu pozostało, zobaczy komunikat: "Runda X, BUST! Liczba twoich punktów: x"
- Komunikat BUST! pojawi się bezpośrednio po rzucie, w którym gracz przekroczył punktację. Oznacza to, że BUST! może być po 1, 2 lub 3 rzucie. Niezależnie od numeru rzutu, BUST! zawsze kończy bieżącą rundę.
- Na zakończenie gry (w momencie, gdy użytkownik uzyska 0 pkt) program wypisze komunikat: "Gra zakonczona w rundzie X"
- Dodatkowym wymaganiem jest, aby program zakończył się natychmiast po wprowadzeniu przez użytkownika liczby -1. Liczba ta zostanie wykorzystana przez testy automatyczne do zakończenia działania programu po wykonaniu testu.
- W każdej rundzie program wyświetla nastepujące komunikaty:
*Runda 1, rzut 1: Podaj ilość punktów
*Runda 1, rzut 2: Podaj ilość punktów
*Runda 1, rzut 3: Podaj ilość punktów
*Runda 1, liczba twoich punktów: x" (gdzie x jest liczbą punktów posiadanych przez gracza)
Udało mi się napisać program spełniający wszystkie wymogi oraz rozumiem jak działa. Natomiast mam wrażenie, że jest napisany strasznie chaotycznie, nawet jak na kogoś kto dopiero raczkuje w temacie (dodam, że podczas pisania dozwolone było korzystanie jedynie z if'a, for, czy też while. Żadnych funkcji.).
#include <iostream>
using namespace std;
int main ()
{
int stanPunktowy = 301;
int runda = 1;
int punkty;
while (punkty != -1){ //
for (int rzut = 1; rzut <=3; rzut++){ //petla proszaca trzy razy o podanie wyniku, zmienia numer rzutu
cout << "Runda " << runda << ", rzut " << rzut << ": Podaj ilość punktów ";
cin >> punkty;
if (punkty >=0 && punkty <= 60){ //jesli punkty mieszcza sie w przedziale 0..60 - jest dobrze
stanPunktowy = stanPunktowy - punkty;
if (stanPunktowy == 0){ //jesli uda sie zejsc z 301 punktow na 0
cout << "Gra zakończona w rundzie " << runda << endl; //wyswietlany jest komunikat o zwyciestwie
punkty = -1; //a do zmiennej odpowiedzialnej za punkty przypisuje sie warunek odpowiedzialny za koniec dzialania while
break; // przerwanie petli for
}
else if (stanPunktowy < 0){ //komunikat o przekroczeniu prawidlowego wyniku
stanPunktowy = stanPunktowy + punkty; // dodanie punktow, by wynik nie byl na minusie
cout << "Runda " << runda << ", BUST!\nLiczba twoich punktów: " << stanPunktowy << endl;
break; //koniec petli for, poczatek nowej rundy
}
}
else if (punkty > 60){ //komunikat o niepoprawnej licznie punktow za rzut
cout << "Niepoprawdna ilosc punktow" << endl;
rzut = rzut -1; //cofniecie rzutu, nowa szansa na wpisanie poprawnego wyniku
continue; //przerwanie jednego obiegu petli
}
else if (punkty == -1){ //po podaniu -1 nastepuje koniec programu
break;
}
if (rzut == 3) { //komunikat pojawiajacy sie na koniec rundy
cout << "Runda " << runda << ", liczba twoich punktów: " << stanPunktowy << endl;
}
}
runda ++; //zwiekszanie wartosci rundy
}
return 0;
}
Czy jest aż tak, źle jak myślę ?
Liczę na wszelkie cenne uwagi i porady :)
Proszę o wybaczenie tak długiego posta :D
Pozdrawiam wszystkich serdecznie :)