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

HackNation - ogólnopolski hackathon
0 głosów
472 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 485 wizyt
pytanie zadane 10 listopada 2022 w Inne języki przez reaktywny Nałogowiec (46,230 p.)
0 głosów
0 odpowiedzi 548 wizyt
0 głosów
0 odpowiedzi 250 wizyt
pytanie zadane 15 grudnia 2021 w Inne języki przez MatiZeb Obywatel (1,160 p.)

93,626 zapytań

142,551 odpowiedzi

323,036 komentarzy

63,130 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 1452p. - dia-Chann
  2. 1437p. - DziarnowskiJ
  3. 1411p. - Łukasz Piwowar
  4. 1409p. - CC PL
  5. 1388p. - Maurycy W
  6. 1371p. - raydeal
  7. 1369p. - Adrian Wieprzkowicz
  8. 1360p. - Tomasz Bielak
  9. 1335p. - robwarsz
  10. 1141p. - ssynowiec
  11. 1116p. - rucin93
  12. 1102p. - Dominik Łempicki (kapitan)
  13. 1100p. - Mariusz Fornal
  14. 858p. - Michal Drewniak
  15. 847p. - Grzegorz Aleksander Klementowski
Szczegóły i pełne wyniki

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

Kursy INF.02 i INF.03
...