• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Suma punktów w Darcie - 301 - Zadanie.

Object Storage Arubacloud
0 głosów
267 wizyt
pytanie zadane 27 lutego 2016 w C i C++ przez Wiktor Kurek Nowicjusz (230 p.)
edycja 27 lutego 2016 przez Wiktor Kurek

Witam.
Co prawda jest już na tym forum to zadanie rozwiązane, ale jest ono zrobione błędnie, więc tworzę swój artykuł.
Mam do napisania owy program:

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.

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 

Nie działa mi komunikat "BUST!". Tzn. działa, aczkolwiek jeżeli zostanie np. 30 punktów, a wpisane zostanie 60, wyświetla się BUST, ale i tak te punkty się odejmują i kończy się program.
Próbowałem to zrobić dwa razy, ale w obydwu przypadkach jest źle. Dodam jeszcze, że rozpisałem, czyli punkty1, punkty2, punkty3 i nie jestem pewien czy nie wystarczyłoby samo np. punkty i wstawianie wszędzie, zamiast rozpisywania 3 przypadków.

Pierwszy kod:

#include <iostream>
using namespace std;

int main()
{
	int punkty1=0;
	int punkty2=0;
	int punkty3=0;
	int poczatkowepunkty=301;
	int sumapunktow=0;
	int runda=0;
	int pozostalepunkty;
	
	while (sumapunktow<301 && sumapunktow>=0)
	{
		runda=runda+1;
		
		{
		cout << "Runda " << runda << " , rzut 1: " << endl;
		cin >> punkty1;
		
		if (punkty1>=0 && punkty1<=60)
		{
			sumapunktow=sumapunktow+punkty1;
			pozostalepunkty=poczatkowepunkty-sumapunktow;
			
			if (pozostalepunkty==0)
			break;
			
			if (punkty1>pozostalepunkty)
			{
				cout << "BUST" << endl;
				continue;
			}
		}
		else
		cout << "Niepoprawna ilosc punktow." << endl;
		
		cout << "Runda " << runda << " , rzut 2: " <<endl;
		cin >> punkty2;
		
		if (punkty2>=0 && punkty2<=60)
		{
		sumapunktow=sumapunktow+punkty2;
		pozostalepunkty=poczatkowepunkty-sumapunktow;
		
	if (pozostalepunkty==0)
	break;
	
	if (punkty2>pozostalepunkty)
	{
		cout << "BUST!" << endl;
		continue;
	}
}
	else
	cout << "Niepoprawna ilosc punktow." << endl;
	
	cout << "Runda " << runda << " , rzut 3: " << endl;
		cin >> punkty3;
	
	if (punkty3>=0 && punkty3<=60)
		{
		sumapunktow=sumapunktow+punkty3;
		pozostalepunkty=poczatkowepunkty-sumapunktow;
		
		if (pozostalepunkty==0)
		break;
		
		if (punkty3>pozostalepunkty)
		{
			cout << "BUST!" << endl;
			continue;
		}
	}
		else
		cout << "Niepoprawna ilosc punktow." << endl;
}
cout << "Runda " << runda << " , liczba twoich punktow: " << poczatkowepunkty-sumapunktow<<endl;
}
cout << "Gra zakonczona w rundzie: " << runda;
return 0;
}

Pozdrawiam!

1 odpowiedź

0 głosów
odpowiedź 27 lutego 2016 przez niezalogowany
komentarz 27 lutego 2016 przez Wiktor Kurek Nowicjusz (230 p.)
Wydaje mi się, że kod nie jest jakiś długi.
A praca domowa to nie jest. Nie mam informatyki w szkole.
Po prostu nie potrafię sobie poradzić z tym konkretnym problemem, który wyjaśniłem na czym polega.

+ było już pytanie o to konkretne zadanie, gdzie ludzie pomogli, tyle że tam jest dalej źle.

Podobne pytania

+1 głos
0 odpowiedzi 224 wizyt
pytanie zadane 10 listopada 2022 w Inne języki przez reaktywny Nałogowiec (41,050 p.)
0 głosów
0 odpowiedzi 327 wizyt
0 głosów
0 odpowiedzi 171 wizyt
pytanie zadane 15 grudnia 2021 w Inne języki przez MatiZeb Obywatel (1,160 p.)

92,583 zapytań

141,434 odpowiedzi

319,669 komentarzy

61,966 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...