Skayfer Temat założony przez niniejszego użytkownika |
Instrukcja Case, a wybieranie poszczególnego obiektu » 2013-05-21 21:55:50 Witam Na początek mały wstęp: Piszę program który ma być w zamierzeniu prostą grą, walką bokserów.1 gracz wybiera pierwszego boksera, 2 gracz wybiera drugiego boksera (każdy charakteryzuje się innymi parametrami). Komputer losuje kto zaczyna, np. bokser 2. Jego parametr atak mnożony jest przez wylosowaną liczbę (1-5) i porównywany do parametru unik drugiego zawodnika także pomnożonego przez wylosowaną liczbę (1-5). Jeśli atak 1 był większy niż unik 2, to od startowej wytrzymałości 2 boksera odejmowana jest różnica atak1 - unik2. Następnie atakuje bokser 2. I tak wygląda runda 1. Łącznie rund jest 12 i możliwe jest zakończenie przed czasem w przypadku gdy wytrzymałość któregoś z zawodnika spadnie do 0. Teraz pytania: 1. W jaki sposób za pomocą instrukcji wyboru Case program dowie się od użytkownik, że ten wybrał na 1 boksera obiekt np. Mike Tyson ? Czy mogę operować obiektem za pomocą jednej zmiennej ? 2. System losowania kuleje. Z tego co patrzyłem to losuje jako zaczynającego ciągle zawodnika 1, a przecież jasno zdeklarowałem zakres, od 1 do 2. Od razu dziękuje za wszelką pomoc i odpowiedzi. #include <cstdlib> #include <iostream> #include<time.h> using namespace std;
int zawodnik1, zawodnik2, i, poczatek, W1, W2, A1, A2, U1, U2;
class bokser { public: string imie, nazwisko; int sila, unik, wytrzymalosc; };
int main()
{ bokser bokser1; bokser1.imie = "Tomasz"; bokser1.nazwisko = "Adamek"; bokser1.sila = 8; bokser1.unik = 9; bokser1.wytrzymalosc = 150; bokser bokser2; bokser2.imie = "Wladimir"; bokser2.nazwisko = "Klitschko"; bokser2.sila = 1; bokser2.unik = 1; bokser2.wytrzymalosc = 100; bokser bokser3; bokser3.imie = "Mike"; bokser3.nazwisko = "Tyson"; bokser3.sila = 8; bokser3.unik = 9; bokser3.wytrzymalosc = 10; cout << " Witaj w grze WALKA BOKSERÓW \n \n"; cout << " Wybierz pierwszego zawodnika z ponizszych wybierajac reprezentujacy go numer i wciskajac ENTER \n"; cout << " 1 - Tomasz Adamek (8, 12, 100)"; cout << " 2 - Wladimir Klitschko (12, 9, 115)"; cout << " 3 - Mike Tyson (13, 10, 110)"; switch( zawodnik1 ) { case 1: zawodnik1 = 1; break; case 2: zawodnik1 = 2; break; case 3: zawodnik1 = 3; break; } etykieta1: switch( zawodnik2 ) { case 1: if( zawodnik1 = 1 ) { cout << "Wybrano juz tego zawodnika. Wybierz ponownie !"; goto etykieta1; } else { zawodnik2 = 1; break; } case 2: if( zawodnik1 = 2 ) { cout << "Wybrano juz tego zawodnika. Wybierz ponownie !"; goto etykieta1; } else { zawodnik2 = 2; break; } case 3: if( zawodnik1 = 3 ) { cout << "Wybrano juz tego zawodnika. Wybierz ponownie !"; goto etykieta1; } else { zawodnik2 = 3; break; } } i = 0; do { poczatek = rand() % 2 + 1; W1 = bokser1.wytrzymalosc; W2 = bokser2.wytrzymalosc; if( poczatek = 1 ) { cout << "Rozpoczyna zawodnik1 !"; A1 = bokser1.sila * rand() % 4 + 1; U2 = bokser2.unik * rand() % 4 + 1; if( A1 > U2 ) W2 = W2 - A1; A2 = bokser2.sila * rand() % 4 + 1; U1 = bokser1.unik * rand() % 4 + 1; if( A2 > U1 ) W1 = W1 - A2; } else if( poczatek = 2 ) { cout << "Rozpoczyna zawodnik2 !"; A2 = bokser2.sila * rand() % 4 + 1; U1 = bokser1.unik * rand() % 4 + 1; if( A1 > U2 ) W2 = W2 - A1; A1 = bokser1.sila * rand() % 4 + 1; U2 = bokser2.unik * rand() % 4 + 1; if( A2 > U1 ) W1 = W1 - A2; } } while( W1 || W2 == 0 ); if( W1 <= 0 ) cout << "Zawodnik 2 znokautowal zawodnika 1 !"; else if( W2 <= 0 ) cout << "Zawodnik 1 znokautowal zawodnika 2 !"; else cout << "REMIS !"; system( "PAUSE" ); return EXIT_SUCCESS; }
|
|
cyklopek11 |
» 2013-05-21 22:11:42 1.) Nie masz ustawiania ziarna dla rand() Kurs C++2.) Zamień goto na while bo Cię tutaj zlinczują :-) 3.) W ifach ma być porównanie == a nie przypisanie = Popraw i zobaczymy co będzie dalej |
|
Skayfer Temat założony przez niniejszego użytkownika |
» 2013-05-23 21:53:00 Jeśli chodzi o postępy nad programem: 1. Dodałem ustawienie ziarna i losuje dobrze. 2. Zmieniłem goto na while. 3. Zmieniłem gdzie uważałem za słuszne = na ==. 4. Od teraz obiekty są tworzone przy wyborach użytkownika , a nie jak w poprzedniej wersji przy starcie programu (z 3 obiektów zrobiły się 2:) ). Tak więc pomalutku do przodu :) Obecnie mam rozkmine dlaczego mój algorytm nie odejmuje wartości W1 i W2 (wytrzymałość zawodników). Błąd nie jest związany z pętlą, ponieważ nawet po pierwszym uruchomieniu owej pętli wartości nie zmieniają się. #include <cstdlib> #include <iostream> #include<time.h> using namespace std;
int zawodnik1, zawodnik2, i, pierwszy, W1, W2, A1, A2, U1, U2;
class bokser { public: string imie, nazwisko; int sila, unik, wytrzymalosc; };
int main()
{ srand( time( 0 ) ); bokser player1; bokser player2; cout << " Witaj w grze WALKA BOKSEROW \n \n"; cout << " Wybierz pierwszego zawodnika z ponizszych wybierajac reprezentujacy go numer i wciskajac ENTER \n"; cout << " Wybiera gracz 1 \n"; cout << " 1 - Tomasz Adamek (8, 12, 100) \n"; cout << " 2 - Wladimir Klitschko (12, 9, 115) \n"; cout << " 3 - Mike Tyson (13, 10, 110) \n"; cin >> zawodnik1; switch( zawodnik1 ) { case 1: { zawodnik1 = 1; player1.imie = "Tomasz"; player1.nazwisko = "Adamek"; player1.sila = 8; player1.unik = 12; player1.wytrzymalosc = 100; break; } case 2: { zawodnik1 = 2; player1.imie = "Wladimir"; player1.nazwisko = "Klitschko"; player1.sila = 12; player1.unik = 9; player1.wytrzymalosc = 115; break; } case 3: { zawodnik1 = 3; player1.imie = "Mike"; player1.nazwisko = "Tyson"; player1.sila = 14; player1.unik = 10; player1.wytrzymalosc = 105; break; } } do { system( "cls" ); cout << " Wybiera gracz 2 \n"; cout << " 1 - Tomasz Adamek (8, 12, 100) \n"; cout << " 2 - Wladimir Klitschko (12, 9, 115) \n"; cout << " 3 - Mike Tyson (13, 10, 110) \n"; cin >> zawodnik2; switch( zawodnik2 ) { case 1: { zawodnik2 = 1; player2.imie = "Tomasz"; player2.nazwisko = "Adamek"; player2.sila = 8; player2.unik = 1; player2.wytrzymalosc = 100; break; } case 2: { zawodnik2 = 2; player2.imie = "Wladimir"; player2.nazwisko = "Klitschko"; player2.sila = 12; player2.unik = 1; player2.wytrzymalosc = 115; break; } case 3: { zawodnik2 = 3; player2.imie = "Mike"; player2.nazwisko = "Tyson"; player2.sila = 14; player2.unik = 1; player2.wytrzymalosc = 105; break; } } } while( zawodnik1 == zawodnik2 ); i = 0; W1 = player1.wytrzymalosc; W2 = player2.wytrzymalosc; do { pierwszy = rand() % 2 + 1; if( pierwszy == 1 ) { cout << "Rozpoczyna zawodnik1 !"; A1 = player1.sila * rand() % 4 + 1; U2 = player2.unik * rand() % 4 + 1; if( A1 > U2 ) W2 = W2 - A1; A2 = player2.sila * rand() % 4 + 1; U1 = player1.unik * rand() % 4 + 1; if( A2 > U1 ) W1 = W1 - A2; } else if( pierwszy == 2 ) { cout << "Rozpoczyna zawodnik2 !"; A2 = player2.sila * rand() % 4 + 1; U1 = player1.unik * rand() % 4 + 1; if( A1 > U2 ) W2 = W2 - A1; A1 = player1.sila * rand() % 4 + 1; U2 = player2.unik * rand() % 4 + 1; if( A2 > U1 ) W1 = W1 - A2; } cout << W1 << W2; cout << player1.sila; } while( W1 || W2 < 0 ); if( W1 <= 0 ) cout << "Zawodnik 2 znokautowal zawodnika 1 !"; else if( W2 <= 0 ) cout << "Zawodnik 1 znokautowal zawodnika 2 !"; else cout << "REMIS !"; system( "PAUSE" ); return EXIT_SUCCESS; }
|
|
« 1 » |