Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Instrukcja Case, a wybieranie poszczególnego obiektu

Ostatnio zmodyfikowano 2013-05-23 21:53
Autor Wiadomość
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.

C/C++
#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
    {
        /*
        i = i++;
        cout << "RUNDA "<< i <<" !";
        */
        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;
}
P-83560
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
P-83563
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ę.

C/C++
#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;
   
    /*
            i = i++;
            cout << "RUNDA "<< i <<" !";
            */
   
    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;
}
P-83747
« 1 »
  Strona 1 z 1