• 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.

VPS Starter Arubacloud
0 głosów
324 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 309 wizyt
pytanie zadane 10 listopada 2022 w Inne języki przez reaktywny Nałogowiec (42,140 p.)
0 głosów
0 odpowiedzi 350 wizyt
0 głosów
0 odpowiedzi 182 wizyt
pytanie zadane 15 grudnia 2021 w Inne języki przez MatiZeb Obywatel (1,160 p.)

92,975 zapytań

141,938 odpowiedzi

321,181 komentarzy

62,302 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...