Crafting system

Crafting system

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4458

Napisao sam u GML neki jednostavan crafting system za dobijanje alatki i imam jedan problemčić, ali pre toga da vam objasnim kako to funkcioniše.

[Polje1] [Polje2] [Polje3] = [Rezultat] A, B

Korisnik ispred sebe ima predmete A i B. Ako u tri polja rasporedi jednom predmet A i dva puta predmet B dobija predmet C (nebitno je kojim redom). U svim drugim slučajevima se neće dobiti predmet C. Desnim klikom je moguće predmet izbaciti iz sobe (sve predmete te vrste). Dodavanjem novog predmeta promenljiva prostor se smanjuje za jedan, a povećava se promenljiva količine tog predmeta u ostavi. Problem je sledeći:

[A] [B] [A] = [Rezultat] A, B

Ja sad naprimer hoću da sklonim ovo B i da mi tu ostane prazan prostor, ali ne znam kako da postavim da se pri sledećem dodavanju predmet doda baš tu tokom cele igre, a ne na treće polje pošto dodavanje ide redom (nije u pitanju drag & drop sistem). Možda vam bude malo jasnije ako pogledate kod koji sam napisao da se generiše ta greška:

if (place_free(32,0) & !place_free(0,0) & !place_free(64,0)) {    with simbolA instance_destroy();    with simbolB instance_destroy();    show_message("Greska [1]. Za vise informacija pogledajte prilozenu dokumentaciju."); } else if (!place_free(32,0) & place_free(0,0) & !place_free(64,0)) {    - || - }

U gornjem kodu sam postavio uslov da, ako je slobodno drugo mesto (x: 32, y: 0) , a ostala dva mesta nisu slobodno, simboli predmeta u ostavi bivaju uništeni i da se pojavi greška. Isto to, samo ovoga puta sa prvim mestom (x: 0 , y: 0) u sledećem uslovu , samo što je tada u pitanju prvo mesto. Za treće mesto nije potreban kod logično jer će ionako sledeći predmet biti dodat tu ako ima dva popunjena mesta (odnosno prostor = 1).

Znači ja ako sklonim B u tom slučaju dobijem ovaj rezultat:

[A] [Polje 2] [A] = [Rezultat] A, B

I sada kada budem dodao predmet on će preći u polje 3, bez obzira što se tamo već nalazi neki predmet, jer je prostor = 1, a kao što sam već rekao, dodavanje ide redom. Pošto verovatno ne znate GML, a i nije mi cilj da dobijem gotov kod, napišite mi samo kako bi vi rešili ovaj problem, bez obzira na to koji jezik koristite. Hvala unapred Ziveli



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Čitam sve to što si napisao i sve mi deluje tako komplikovano i nerazumljivo, pa ću ti samo napisati kako bih ja to rešio:
Ako je polje1 prazno upiši u polje1 else ako je polje2 prazno upišu u polje2 else ako je polje3 prazno upiši u polje3 else nema više mesta
Naravno, sve bi to mogao mnogo elegantnije da rešiš nekom for petljom i da ne budeš ograničen brojem polja.



offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4458

Sad sam se setio jednog dobrog rešenja:

else if (prostor = 1 & !place_free(0,0) & !place_free(64,0) {    prostor -= 1;    instance_create(32, 0, simbol); } else if (prostor = 1 & !place_free(32, 0) & !place_free(64,0) {    prostor -= 1;    instance_create(0, 0, simbol); }

To ću samo da dodam među petlje i da probam. Zaboravio sam da napomenem i to da imam niz polje[2] preko kog definišem da li je polje zauzeto ili nije.

//polja //pošto su sva polja na početku slobodna stavljam false polje[0] = false; polje[1] = false; polje[2] = false;

U globalnom kontroleru za igru definišem sledeće:

if place_free(0,0) {    polje[0] = false; } else {    polje[0] = true; }

I tako za sva polja.

offline
  • PHP Developer
  • Pridružio: 02 Okt 2005
  • Poruke: 546

Citat:
Zaboravio sam da napomenem i to da imam niz polje[2] preko kog definišem da li je polje zauzeto ili nije.

a da ti lepo krenes po tom nizu dok nenadjes na prvo prazno polje i onda u njega stavis item?

Druga opcija je da posto redosled nije bitan ti kad izbaci iteme preslozs (popunis kucive od pocetka)

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4458

|_MeD_| ::
Druga opcija je da posto redosled nije bitan ti kad izbaci iteme preslozs (popunis kucive od pocetka)


Hmm, ovo mi zvuči zanimljivo Very Happy

if (prostor = 1 & !place_free(0,0) & place_free(32,0) & !place_free(64,0)) {    with simbol instance_destroy();    instance_create(0, 0, simbol);    instance_create(32, 0, simbol);    instance_create(64, 0, simbol);    prostor-=1; } 

Još dodam tu neku animaciju premeštanja i to je to. Ima dosta načina, videću još. Hvala na pomoći Ziveli

Ko je trenutno na forumu
 

Ukupno su 724 korisnika na forumu :: 41 registrovanih, 1 sakriven i 682 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 2967 - dana 31 Okt 2019 06:37

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 5.56, A.R.Chafee.Jr., aca022, Arhiv, bato3, baza, borko_marjanovic, darkangel2, Djokislav, Gama, Groucho, havoc995, ivica976, JOntra, Kubovac, Marko Marković, mgaji21, milos_ts, Natalija9, nebojsag, nemkea71, Nemrtvi, Nennad, ofbeyond, panticstefan53, pedja63, prekodrinski, Raptor1, Recce, renoje2, repac, ruger357, ruma, Snorks, Srna, ssekir75, Stepp, stug, Toni, Vlad000, yufighter