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ść
pekfos
» 2011-06-30 19:53:29
i to się nie sypie?
PS: w sumie nie musi. grzebanie poza statycznie alokowaną tablicą nie zawsze się tak kończy..
P-35052
Elaine
» 2011-06-30 20:07:33
Gdzie ty widzisz statycznie alokowaną tablicę?
P-35054
jaupl
Temat założony przez niniejszego użytkownika
» 2011-06-30 20:23:52
No cóż, ja tylko bazuje na tym co mnie nauczono a wszystko to pochodzi z kursu. jak na to nie patrzeć to jestem samoukiem. A jeśli dostrzegasz jakieś błędy to wskaż proszę jakie i ewentualnie je wyjaśni :) Wielkie dzięki . ;) (nawet jeśli to było coś z kursu to mogłem przeoczyć)
P-35057
pekfos
» 2011-07-01 10:50:02
Gdzie ty widzisz statycznie alokowaną tablicę?
to już nie wiem jak nazwać tablicę której pamięć przydziela kompilator.
C/C++
int znak_karty[ 5 ];
int kolor_karty[ 5 ];

C/C++
bool sprawdzanie( int * tablica, int losowana, int * tablica2, int losowana2 )
{
    int i = 0;
    while( i < 5 ) //i dochodzi do 4 (4<5)
    {
        if( tablica[ i ] == losowana && tablica2[ i ] == losowana2 )
        {
            return false;
        }
        i++; // i = 5 i koniec petli
    }
    if( tablica[ i ] != losowana || tablica2[ i ] != losowana2 )
    //tablica[i] tutaj zawsze oznacza tablica[5]
    //a to przecież tablica 5-elementowa.
    {
        return true;
    }
}
czyli jak żaden warunek w pętli się nie spełni to grzebiesz poza tablicą.
P-35073
jaupl
Temat założony przez niniejszego użytkownika
» 2011-07-01 11:06:31
czyli, jeśli dobrze rozumiem wystarczy tam zmienić warunek z :
C/C++
if( tablica[ i ] == losowana && tablica2[ i ] == losowana2 )
na przykład na taki :
C/C++
if( i = 5 )
tak ??
Wróć ... ten warunek jest tam do niczego nie potrzebny ^^ ;p więc zostawiam samo
return true;
 po skończeniu pętli :)
// Btw. program przez tą pętlę strasznie wydłużył czas działania. to znaczy chyba przez nią ... jest jakiś sposób żeby uzyskać ten sam efekt przy krótszym czasie ?? bo w końcu kilka sekund to już spora różnica ...
P-35074
pekfos
» 2011-07-01 11:11:05
if( i = 5 )
operator porównania to == a nie =

i powiedz co ma robić ten zapis:
int pik_pl, trefl_pl, kier_pl, karo_pl = 0;

bo wygląda jakbyś próbował przypisać wszystkim tym zmiennym wartość 0

co do pętli to rozumiem że sprawdzanie() zabezpiecza przed powtórzeniami.
w takim razie po co sprawdzasz całą tablicę po wpisaniu np jednej wartości.
ogranicz to w ten sposób że
wpisujesz 1. wartość - nie sprawdzasz
wpisujesz 2. wartość - sprawdzasz 1.
wpisujesz n. wartość - sprawdzasz do n-1
P-35076
jaupl
Temat założony przez niniejszego użytkownika
» 2011-07-01 15:31:56
Tak, ponieważ chcę im wszystkim przypisać wartość zero. Potem , gdy karty już będą wylosowane te zmienne będą miały swoje wartości w zależności od tego ile gracz/komputer będą mieli kart o tym kolorze. chcę to wykorzystać jako warunek w puźniejszym kodzie (który już napisałem) Który będzie określał czy wygrał komputer czy wygrał gracz . zostało mi jeszcze trochę roboty z wymianą kart i obstawianiem pieniędzy i wszystko będzie działać ... no i jeszcze pewnie poprawki. A ...i nie mam pomysłu na to jak stworzyć warunek do fula lub do dwóch par ... Czy da się jakoś określić ile warunków pisanych tak :
if( warunek || warunek )
 zostało spełnionych ??
P-35097
pekfos
» 2011-07-01 15:43:36
tak pisanych - nie. ale sprawdź to:
C/C++
#include <vector>
#include <algorithm>

vector < bool > con;
bool check( bool a ) {
    return a;
}
//..
con.push_back( a != 5 ); //warunki
con.push_back( c < 6 );
//itp..;
int spelnione =( int ) count_if( con.begin(), con.end(), check );
i zamiast
if( a != 5 || c < 6 )

pisz
if( spelnione > 0 )

chcę im wszystkim przypisać wartość zero
int a, b, c = 0;

to to samo co
C/C++
int a;
int b;
int c = 0;
czyli przypisujesz wartość tylko jednej zmiennej.
P-35099
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona