PRT Opublikowano 11 Sierpnia 2010 Udostępnij Opublikowano 11 Sierpnia 2010 Po dłuższej rozłące z pisaniem, zostałem zmuszony przez siostrzeńca do napisania "prostego" programu. Jednak jak się okazuje i z prostymi rzeczami sobie nie radze ;) GML for(i=1;i<global.tal*50;i+=1) // losowanie { ob=irandom_range(2,14); //temp if (global.war[1,ob]>1) { global.kup=ob global.war[1,ob]-=1; } Już tłumaczę, otóż global.kup jest to 50 elementowa tablica-lista. Global.war to obrazowo pojemniki, w których są po 4 rzeczy.. Do OB zapisuje losowa liczbę z przedziału 2-14, po to by później sprawdzić czy w pojemniku global.war[1,ob] są jeszcze rzeczy. Jeśli są to do global.kup zapisuje mi tą liczbę (OB). i odejmuję jedną rzecz z tego pojemnika. Porblem polega na tym, że jeśli pojemnik okaże się pusty to pomijana jest jedna wartość global.kup - nie zapisuje w niej żadnej OB. Ja chcę osiągnać coś takiego, że jeśli pojemnik okaże się pusty to losowanie ob się powtarza dla danego i. Próbowałem z innymi pętlami ale jakoś słabo mi to idzie i wieszam grę ;) Jeśli ktoś zrozumie ten zawiły język to proszę o pomoc. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Danielus Opublikowano 11 Sierpnia 2010 Udostępnij Opublikowano 11 Sierpnia 2010 dodaj pętle while( dopoki pusty ) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PRT Opublikowano 11 Sierpnia 2010 Autor Udostępnij Opublikowano 11 Sierpnia 2010 Połączenie pętli for i while powoduje zawieszenia aplikacji. Może wytłumaczę w inny sposób :) Mam zmienne GML for(i=0;i<12;i+=1) { global.talia_karta[1,i]=4; //co oznacza [talia,karta]. czyli mam kazdej z 13 kart po 4. } Teraz chcę, żeby potasowało karty i ułożyło w kupkę. GML for(i=1;i<global.talia*52;i+=1) // losowanie z 52 kart bo 13*4 { ob=irandom_range(0,13); //temp zapisuje wylosowana liczbę z przedzialu (0,13) - sa to wartości kart 0-dwojki 13-asy. if (global.talia_karta[1,ob]>0) // jeżeli w wylosowanej karty zostało więcej niż 0. { global.kupka=ob // to dodaje tą wylosowana na kolejne miejsce w kupce. global.talia_karta[1,ob]-=1; // no i odejmuje 1, bo już zostało o jeden mniej tego znaku kart. } Teraz bardziej obrazowo jest. Chodzi o to ze widzę ze błąd jest ale nie daje rady poprawić ;) Ma przypisywać losowe karty do kupki z tym ze pamiętać ze ma każdej tylko po 4. (cztery dwójki, cztery damki itd) Jeżeli wylosowana karta to np.as a już ich nie ma, to ma powtórzyć losowanie ---- Rozwiązałem problem, nie wiem czy jest to optymalne ale działa. Jak znacie łatwiejsze i lepsze piszcie: GML od=1; while(global.kupka[global.talia*54]<0) // dopóki 54 karta w kupce nie jest pelna { for(i=od;i<=global.talia*54;i+=1) // losowanie z 54 kart { ob=irandom_range(2,15) //temp zapisuje wylosowana liczbę z przedzialu (2,15) if (global.talia_karta[1,ob]>0) // jeżeli w wylosowanej karty zostało więcej niż 0. { global.kupka=ob // to dodaje tą wylosowana na kolejne miejsce w kupce. global.talia_karta[1,ob]-=1; // no i odejmuje 1, bo już zostało o jeden mniej tego znaku kart. } else{od=i; break;} // jezeli nie to przerywa petle i zaczyna od nowa w pustym polu w kupce } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się