Skocz do zawartości

Zablokowane Losowe ale ustalone pozycje obiektów


MarYO

Rekomendowane odpowiedzi

Witam!

 

Mam do Was poważne pytanie. Otóż pragnę wykorzystać GM do stworzenia małego programiku (tak tak!) dobierającego losowo graczy w grupy wyświetlając ich imiona. W praktyce wyglądałoby to tak, że wybieramy ilość graczy spośród dostępnych możliwości (np. 32 - 8 grup po 4 osoby). Wtedy przechodzimy do odpowiedniego roomu, w którym backgroundem jest przygotowany obrazek z namalowaną tabelką dla 32 osób - w ośmiu kolumnach po 4 wiersze. Teraz wpisujemy imiona lub nicki graczy - komendą (dla gracza 1):

 

global.imie1 = get_string('Podaj imię/nick gracza 1 - object1:','');

{ while ( global.imie1 = '' )

   global.imie1 = get_string('Podaj imię gracza 1:','');

 

Dla gracza 2 - object2, imie2, dla 3 - object3, imie3 itp. itd.

 

I tutaj pojawia się problem, bo w zdarzeniu Draw trzeba podać współrzędne wyświetlanego tekstu:

 

draw_text(x,y,''+global.imie1);

,

 

a chciałbym, żeby to były współrzędne pasujące do miejsc w tabelce (tabelka będzie pasować do siatki w roomie, chociaż to chyba nie jest konieczny warunek) i, co najważniejsze, żeby losowało się miejsce, w którym pojawi się każde imię.

 

Nie wiem, czy jest to możliwe do wykonania w Game Makerze. Próbowałem znaleźć jakieś skrypty, lecz nic nie wyczarowałem. A może jest jakiś inny, łatwiejszy sposób na rozwiązanie problemu? Proszę o pomoc i z góry dzięki za odpowiedź.

 

Pozdrawiam.

Odnośnik do komentarza
Udostępnij na innych stronach

Dzięki, Tymon. Czegoś takiego oczekiwałem. Jednak mam kilka pytań, ponieważ wciąż nie mogę tego złożyć do kupy.

 

Mianowicie:

 

 

1. W przykładzie mówimy o 32 graczach i tak jest też ustawione w projekcie powyżej. Jednak pojawiają się 33 okna na imiona 33 graczy.

 

W tym wierszu jest "n" i z tym "n" skrypt w ogóle nie działa:

            _imie = get_string('Podaj imię gracza '+ string( n ) +':','')

 

Gdy poprawiam na i, prawidłowo pojawiają się okna i numery graczy od 0 do 32 (czyli razem 33) w oknie Podaj imię gracza "X".

Gdy zaś dopiszę i + 1, mamy graczy od 1 do 33.

 

Podejrzewam, że przyczyna takiego stanu rzeczy tkwi gdzieś w indexie 0, lecz niestety nie wiem, co tu zmienić, aby było dobrze.

 

 

 

2. Jeśli chodzi o listę wynikową, to tutaj jest w ogóle misz masz. Jest jedna lista złożona z 17 imion, w tym pojawiają się magiczne wartości 0 (zero - jak się tego pozbyć?).

 

Gdzie się ustawia ilość wyświetlanych imion? Ja bym chciał widzieć wszystkie i bez tych magicznych zer, a nie tylko 17. Poza tym, co należy zrobić, aby wynik poukładał się w cztery kolumny po 8 imion? Czy trzeba stworzyć 4 listy wynikowe, coś zmienić w tej jednej, która jest, czy może coś zmieniamy w evencie Draw?

 

To na razie tyle.

 

PS. Pablo, jestem dobry z ciągów, ale nie bardzo umiem je zastosować w skrypcie. Uwierz, że dla kogoś, kto jest już w obeznany w GM, wszystko jest łatwiejsze do zrobienia, niż dla nowicjusza.

Odnośnik do komentarza
Udostępnij na innych stronach

Gdzie się ustawia ilość wyświetlanych imion? Ja bym chciał widzieć wszystkie i bez tych magicznych zer, a nie tylko 17.
Zobacz wartość zmiennej listaWielkosc w Create :)

 

Poza tym, co należy zrobić, aby wynik poukładał się w cztery kolumny po 8 imion? Czy trzeba stworzyć 4 listy wynikowe, coś zmienić w tej jednej, która jest, czy może coś zmieniamy w evencie Draw?
To kompletnie niepotrzebne :) Używa się do tego celu funkcji mod i div (aby zmienić tylko pozycje rysowania).

 

1. W przykładzie mówimy o 32 graczach i tak jest też ustawione w projekcie powyżej. Jednak pojawiają się 33 okna na imiona 33 graczy.
Błąd w pętli, powinno być < a dałem <=. Dlatego było zawsze o jeden za dużo.

 

W tym wierszu jest "n" i z tym "n" skrypt w ogóle nie działa:
_imie = get_string('Podaj imię gracza '+ string( n ) +':','')

Z przyzwyczajenia postawiłem n :) Jednak wystarczy zmienić na i.

 

Co do reszty, za dużo tłumaczenia :P Powiem tylko że popełniłem błąd w pętli która losowo miała wybierać imiona. Poprawiłem:

https://gmclan.org/up152_11_imiona2.html

 

I nie ma problemu, za 'proszę' i 'dziękuję' zawsze pomogę :)

Odnośnik do komentarza
Udostępnij na innych stronach

Wielkie dzięki, Mistrzu! To jest to!

 

Mam jeszcze tylko pytanie:

 

W tym przykładzie listy pojawiają się wzdłuż osi x (i OK). A jak zmienić draw, by połowa list była w górnym rzędzie, a druga połowa pod nimi (między nimi ma być trochę przerwy)? Czuję, że to kwestia pogrzebania z div i mod, ale coś tu chyba trzeba dopisać, bo zmiana wartości nic nie daje.

 

To by było na tyle.

 

Pozdrawiam.

Odnośnik do komentarza
Udostępnij na innych stronach

Chodzi o to żeby elementy listy pojawiały się tak

1 2 3 4
5 6 7 8

A nie tak jak teraz:

1 3 5 7
2 4 6 8

?

 

Te liczby to kolejne elementy listy od 1-8, tak dla przykładu :D

 

EDIT

Nie wiem czy dobrze rozumie ale podmień tą jedną linijkę w Draw na

draw_text( x + ( i mod 4 ) * 120, y + 16 * ( i div 4 ) + 10 * ( i div 16 ), ds_list_find_value( listaWynikowa, i ) );

Odnośnik do komentarza
Udostępnij na innych stronach

Neee, teraz jest

 

1 2 3 4 5 6 7 8

 

a chcę

1 2 3 4
5 6 7 8

 

Sprawdziłem Twoją linijkę. To jest dokładnie to, o co mi chodziło.

 

Dzięki za pomoc.

 

Pozdrawiam.

 

 

* * * * * * * *

EDIT 16:21

 

Nasunęło mi się jeszcze jedno pytanie: czy można posortować wyniki według kolejności wpisów (czyli wg indexów)?

 

Przykład:

 

Imiona graczy w liście wynikowej pojawiają się w zupełnie przypadkowej kolejności... (T - nr kolumny tabeli)

Jest tak, jak po lewej, a chciałbym, żeby było tak, jak po prawej...

 

  T1  T2  T3  T4                              T1  T2  T3  T4
  --  --  --  --                              --  --  --  --
  32  12  10   2                               1   9   4   2
   1   9  13  25                              19  12  10   7
  22  31  15   7                              22  16  13  23
  19  16   4  23                              32  31  15  25

  T5  T6  T7  T8                              T5  T6  T7  T8
  --  --  --  --                              --  --  --  --
   8  27  24  30                               8   3   5   6
  28  20  26  29                              11  14  17  21
  18  14   5   6                              18  20  24  29
  11   3  17  21                              28  27  26  30

 

Czy da się tak posortować?

 

Czekam na odpowiedź.

Pozdrawiam.

Odnośnik do komentarza
Udostępnij na innych stronach

Dzięki wielkie! Tylko szkoda, że tak późno odpisałeś... :P Mam już wszystko porobione i nie chce mi się teraz zmieniać wszędzie kodu... Tak więc ostatni plik powędruje do mojego archiwum, może kiedyś najdzie mnie ochota, aby to pozmieniać... :D

 

 

To było na tyle.

 

Jeszcze raz serdeczne dzięki za pomoc.

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

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