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

Gra w karty - błędy związane z losowaniem

Ostatnio zmodyfikowano 2011-07-01 20:32
Autor Wiadomość
jaupl
Temat założony przez niniejszego użytkownika
Gra w karty - błędy związane z losowaniem
» 2011-06-30 11:24:04
Witam. napisałem ostatnio program który rozdaje karty. (na potrzeby gry ) program losuje liczby (które potem będą zamienione na karty ) problem polega na tym że te liczby się nie zgadzają z zakresem podanym do wylosowania. samo losowanie chyba nie stanowi problemu ... bynajmniej nie powinno, no chyba że pominąłem coś w sprawdzaniu, błąd jest raczej zrobiony w funkcji sprawdzanie ;p Z góry dzięki za odpowiedź ;)
a oto kod :
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <conio.h>
using namespace std;
bool sprawdzenie( int * tablica, int losowana, int * tablica2, int losowana2, int z )
{
    if( tablica[ z ] == losowana && tablica2[ z ] == losowana2 )
    {
        return false;
    }
    else
    {
        return true;
    }
}
int main()
{
    int losowa, losowa2;
    int znak_karty[ 5 ];
    int kolor_karty[ 5 ];
    for( int z = 0; z < 5; z++ )
    {
        do
        {
            srand( time( NULL ) );
            losowa =( rand() % 13 ) + 2;
            losowa2 =( rand() % 4 ) + 1;
        }
        while( sprawdzenie( znak_karty, losowa, kolor_karty, losowa2, z ) == false );
       
        znak_karty[ z ] = losowa;
        kolor_karty[ z ] = losowa2;
    }
    for( int z = 0; z < 5; z++ )
    {
        cout << znak_karty[ z ] << endl << kolor_karty[ z ] << endl;
    }
    getch();
    return 0;
}
  * poprawione ;) ale co dalej bo nie wytłumaczyłeś błędu ?? ;P
P-34999
pekfos
» 2011-06-30 11:39:57
indeksy tablic liczy się od zera. popraw to a ja tymczasem udam sie zjeść śniadanie..

// ty w ogóle modyfikujesz te dwie tablice? i co w ogóle robi funkcja sprawdzenie?
odpowiedz sobie na te pytania bo twój kod jest bez sensu.
P-35002
murek
» 2011-06-30 11:52:36
tak z grubsza to nie widze zadnego zapisu do tablic ;]

przypisujesz dwom int wartosci losowe, ale nie zapisuejsz tych wartosci do tablic
P-35003
jaupl
Temat założony przez niniejszego użytkownika
» 2011-06-30 15:02:21
no tak, sam to już zauważyłem i już zmieniłem, tyle, że chyba coś jeszcze schrzaniłem, bo teraz każda wyświetlona karta jest taka sama .
P-35037
murek
» 2011-06-30 15:09:49
jak wypelniasz tablice?

nie zauwazylem, ze edytowales.

sprawdz czy w dobrym miejscu ja wypelaniasz
P-35038
jaupl
Temat założony przez niniejszego użytkownika
» 2011-06-30 15:24:42
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <conio.h>
using namespace std;
bool sprawdzanie( int * tablica, int losowana, int * tablica2, int losowana2 )
{
    int i = 0;
    while( i < 5 )
    {
        if( tablica[ i ] == losowana && tablica2[ i ] == losowana2 )
        {
            return false;
        }
        i++;
    }
    if( tablica[ i ] != losowana || tablica2[ i ] != losowana2 )
    {
        return true;
    }
}
int main()
{
    int losowa, losowa2;
    int znak_karty[ 5 ];
    int kolor_karty[ 5 ];
    for( int z = 0; z < 5; z++ )
    {
        do {
           
            srand( time( NULL ) );
            losowa =( rand() % 13 ) + 2;
            losowa2 =( rand() % 4 ) + 1;
           
        }
        while( sprawdzanie( znak_karty, losowa, kolor_karty, losowa2 ) == false );
       
        znak_karty[ z ] = losowa;
        kolor_karty[ z ] = losowa2;
    }
    for( int z = 0; z < 5; z++ )
    {
        cout << znak_karty[ z ] << endl << kolor_karty[ z ] << endl;
    }
    getch();
    return 0;
}
// koniec zabawy :) dzięki chłopaki ;p ewentualnie dziewczyny ;) program działa jak trzeba. gdybym miał jeszcze problem w tej grze to dalej będę tu pisał .
P-35040
pekfos
» 2011-06-30 16:36:10
ten kod jest rozwiązaniem?
P-35043
jaupl
Temat założony przez niniejszego użytkownika
» 2011-06-30 18:49:08
Hmm ... problemu który na początku przedstawiłem ? no, tak. chyba tak. Chociaż to że pytasz zasiewa we mnie nutkę ... niepewności . Ale oczywiście jeśli chodzi o grę to nie jest to całość. Mam już zresztą dalszą część ;p Nadal nie całą . i kolejny problem . gdy mam na przykład parę asów to nie wyświetla mi wyniku . tylko "No poker" . a parę dziesiątek wyświetliło ^^ następnym z moich problemów jest to że nie wiem jak sprawić by program wyświetlał czego to jest para nie robiąc osobnych warunków dla każdej pary.
a oto zmodyfikowany kod :
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <conio.h>
using namespace std;
bool sprawdzanie( int * tablica, int losowana, int * tablica2, int losowana2 )
{
    int i = 0;
    while( i < 5 )
    {
        if( tablica[ i ] == losowana && tablica2[ i ] == losowana2 )
        {
            return false;
        }
        i++;
    }
    if( tablica[ i ] != losowana || tablica2[ i ] != losowana2 )
    {
        return true;
    }
}
int main()
{
    int warunek;
    int pik_pl, trefl_pl, kier_pl, karo_pl = 0; // tutaj definiuję zmienne które mają oznaczać ilość kart danego koloru(losowanych przez gracza).
    int A_pl, T_pl, N_pl, J_pl, Q_pl, K_pl = 0; // tutaj definiuję zmienne które mają oznaczać ilość odpowiednich kart (losowanych przez gracza).
    int losowa, losowa2;
    int znak_karty[ 5 ];
    int kolor_karty[ 5 ];
    for( int z = 0; z < 5; z++ )
    {
        do {
           
            srand( time( NULL ) );
            losowa =( rand() % 6 ) + 9;
            losowa2 =( rand() % 4 ) + 1;
           
        }
        while( sprawdzanie( znak_karty, losowa, kolor_karty, losowa2 ) == false );
       
        znak_karty[ z ] = losowa;
        kolor_karty[ z ] = losowa2;
    }
    for( int z = 0; z < 5; z++ )
    {
        switch( znak_karty[ z ] )
        {
        case 9:
            cout << "Dziewiatka ";
            N_pl += 1;
            break;
        case 10:
            cout << "Dziesiatka ";
            T_pl += 1;
            break;
        case 11:
            cout << "Jopek ";
            J_pl += 1;
            break;
        case 12:
            cout << "Dama ";
            Q_pl += 1;
            break;
        case 13:
            cout << "Krol ";
            K_pl += 1;
            break;
        case 14:
            cout << "As ";
            A_pl += 1;
            break;
        default:
            break;
        }
        switch( kolor_karty[ z ] )
        {
        case 1:
            cout << "pik." << endl;
            pik_pl += 1;
            break;
        case 2:
            cout << "trefl." << endl;
            trefl_pl += 1;
            break;
        case 3:
            cout << "kier." << endl;
            kier_pl += 1;
            break;
        case 4:
            cout << "karo." << endl;
            karo_pl += 1;
            break;
        default:
            break;
        }
    }
    cout << "sekwens ktory masz to :" << endl;
    if(( A_pl == 1 && K_pl == 1 && Q_pl == 1 && J_pl == 1 && T_pl == 1 &&( karo_pl == 5 || kier_pl == 5 || pik_pl == 5 || trefl_pl == 5 ) ) ||( K_pl == 1 && Q_pl == 1 && J_pl == 1 && T_pl == 1 && N_pl == 1 &&( karo_pl == 5 || kier_pl == 5 || pik_pl == 5 || trefl_pl == 5 ) ) )
    {
        if( N_pl == 1 )
        {
            cout << "Mały ";
        }
        cout << "POKER!!" << endl;
        warunek = 1;
    }
    if(( karo_pl == 5 || kier_pl == 5 || pik_pl == 5 || trefl_pl == 5 ) && warunek != 1 )
    {
        cout << "Kolor !!" << endl;
        warunek = 1;
    }
    if(( A_pl == 4 || K_pl == 4 || Q_pl == 4 || J_pl == 4 || T_pl == 4 || N_pl == 4 ) && warunek != 1 )
    {
        cout << "Kareta !!" << endl;
        warunek = 1;
    }
    if(( A_pl == 3 || K_pl == 3 || Q_pl == 3 || J_pl == 3 || T_pl == 3 || N_pl == 3 ) && warunek != 1 )
    {
        cout << "trojka." << endl;
    }
    if(( A_pl == 2 || K_pl == 2 || Q_pl == 2 || J_pl == 2 || T_pl == 2 || N_pl == 2 ) && warunek != 1 )
    {
        cout << "para." << endl;
        warunek = 1;
    }
    if((( A_pl == 1 && K_pl == 1 && Q_pl == 1 && J_pl == 1 && T_pl == 1 ) ||( K_pl == 1 && Q_pl == 1 && J_pl == 1 && T_pl == 1 && N_pl == 1 ) ) && warunek != 1 )
    {
        if( N_pl = 1 )
        {
            cout << "Mały";
        }
       
        cout << " street." << endl;
        warunek = 1;
    }
    if( warunek != 1 )
    {
        cout << "No Poker." << endl;
    }
    cout << "wcisni dowolny klawisz by zakonczyc prace programu " << endl;
    getch();
    return 0;
}
A właśnie ;P wiem że moje kody są koślawe ale dopiero zaczynam i w dodatku dopiero kończę gimnazjum więc mam jeszcze trochę czasu na naukę :D stricte : proszę o wyrozumiałość :)
P-35049
« 1 » 2 3
  Strona 1 z 3 Następna strona