Skocz do zawartości

Pętle


PRT

Rekomendowane odpowiedzi

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

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

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...