#include <iostream>
using namespace std;
int suma = 301;
int runda = 1;
int rzut = 1;
int punkty;
int main()
{
while(punkty>=0)
{
rzut;
runda;
cout<<"Runda: "<<runda<<", Rzut: "<<rzut<<", Podaj ilosc punktow: ";
cin>>punkty;
if(punkty>=0 && punkty<=60)
{
suma = suma - punkty;
rzut++;
}
if(punkty>60)
{
cout<<"Niepoprawna wartosc"<<endl;
}
if(rzut>3)
{
cout<<"Runda: "<<runda<<", liczba twoich punktow: "<<suma<<endl<<endl;
rzut = 1;
runda++;
}
if(suma == 0)
{
cout<<"Gra zakonczona w rundzie: "<<runda<<endl;
break;
}
if(suma<0)
{
cout<<"Bust!"<<endl;
runda++;
rzut = 1;
}
if(punkty == -1)
{
break;
}
}
return 0;
}
Witam.
Dopiero zaczynam przygode z programowaniem. Mam problem z zadaniem które znalazłem na kuzniaprogramistow.pl
Oto treść zadania:
Dart - 301
Jeżeli uczyliście się jeździć na rowerze metodą prowadzenia na kiju przez osobę starszą, to pewnie pamiętacie dzień, w którym odwróciliście się za siebie i okazało się, że jedziecie samodzielnie. Wasz tata (albo starszy brat, albo inny mentor) stwierdził, że radzicie sobie na tyle dobrze, że może Was już puścić. Często kończyło się to upadkiem, ale upadki to część nauki.
My doszliśmy w uczeniu Was do podobnego momentu - uważamy, że nie musimy już trzymać kija i możemy pozwolić Wam pobawić się samodzielnie. Teraz również przygotowaliśmy zadanie życiowe: chcielibyśmy żebyście napisali program, który zlicza punkty w darta.
Zasady gry 301 dla 1 gracza:
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.
Treść zadania
Napisz program, który zlicza punkty w grę 301 dla jednego gracza, według zasad podanych powyżej. Program 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 punktów. Jeśli punktacja podana przez gracza będzie mieściła się w tym zakresie, nie będziemy sprawdzali poprawności punktów (w prawdziwej grze zawodnik nie ma szans zdobyć np. 59 punktów w jednym rzucie, a w naszej grze może). Jeśli jednak wartość jednego rzutu nie mieści się w zakresie 0 - 60, program wyświetli komunikat: "Niepoprawna ilosc punktow".
Gra kończy się, gdy zawodnik osiągnie 0 punktów - nawet, jeśli będzie to po pierwszej lub drugiej lotce, a więc w środku rundy!
W każdej rundzie program wyświetli następują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, a nie ilością punktów zdobytych w rundzie. Przykładowo jeżeli w pierwszej rundzie rzuciłem 20 pkt, to x = 301 – 20 = 281.
Jeżeli gracz w rundzie rzuci więcej punktów niż mu pozostało, zobaczymy 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.
Prosiłbym o pomoc ponieważ siedze już nad tym drugi dzień a nie mogę nic wymyslec. Mam problem z sumą. Gdy wpiszę liczbe wieksza niż 60 to i tak odejmuje mi pkt od sumy nie wiem jak to obejść. Kolejnym problemem jest to, gdy suma jest mniejsza od zera nie wiem jak wrocic do sumy z przed ostatniego rzutu.
Z gory dziekuje za pomoc