Welcome, Guest. Please login or register.


Author Topic: Dots and Gems (Read 34435 times)

Offline szipucsu

  • Global Moderator
  • EP addict
  • *
  • Posts: 9898
  • Country: hu
    • Támogató Támogató
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Dots and Gems
« Reply #90 on: 2020.June.21. 08:39:17 »
Az első eset szerintem FILEIO-s konfig lesz.
Igen, az fileIO-s konfig, ilyet szoktam használni.
Azt le lehet kérdezni valahogy, hogy fileIO-s konfig-e? Arra viszont igazi EP-n adna valami fura értéket. :D
100 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 1
110 SOUND PITCH 25,SYNC 1
120 ! Videos

Offline szipucsu

  • Global Moderator
  • EP addict
  • *
  • Posts: 9898
  • Country: hu
    • Támogató Támogató
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Dots and Gems
« Reply #91 on: 2020.June.21. 20:14:21 »
Mielőtt elfelejtem, 3 bug van a játékban, talán beleférnek:

1. Ha pont akkor záródik be az ajtó, amikor egy szörny odalép, akkor a szörny onnan ellépve szóközt vagy bogyót hagy maga után, és az ajtó mégis nyitva lesz.

2. Az 5. szinten, ha túl sokszor megyünk ki az egyik oldalon úgy, hogy a másik oldalon megjelenjünk, akkor elállítódik valami. Talán nem a valódi függőleges pozíciónk szerint fogja görgetni a képernyőt, hanem valami más alapján, így ha nagyon felmegyünk, a játéktér 0-nál kisebb koordinátáit is meg kellene jeleníteni, ilyenkor általában hibaüzenet van. Nem értem az okát ennek, mert a krapek így nem lesz középen függőlegesen, de nem is az elmászott pozíciójából számolja, mennyit görgesse a képernyőt.

3. Sikerült egyszer a krapekkal egy szörnyet beszorítani egy zsákutcába, és a szörny ott beragadt, nem is akart onnan kimozdulni. Ezt az első szinten sikerült kivitelezni, bal oldalon lentebb van egy picike zsákutcában egy kincs, ahova felfele kell menni, oda sikerült beszorítani a szörnyet. Nem teljesen értem még, miért marad ott a szörny beragadva.

A 3. bugot jó lenne javítani, mert van még ötletem más hasonló játékra, és ott már ez komolyabb probléma lenne.
100 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 1
110 SOUND PITCH 25,SYNC 1
120 ! Videos

Offline szipucsu

  • Global Moderator
  • EP addict
  • *
  • Posts: 9898
  • Country: hu
    • Támogató Támogató
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Dots and Gems
« Reply #92 on: 2020.June.22. 14:50:47 »
3. Sikerült egyszer a krapekkal egy szörnyet beszorítani egy zsákutcába, és a szörny ott beragadt
Megpróbáltam sérthetetlenséggel reprodukálni a dolgot, de nem jön elő. Eleve nem is kezelik a szörnyek falként a krapekot, szóval nem értem, hogy lehetett ilyen.
[ Guests cannot view attachments ]
100 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 1
110 SOUND PITCH 25,SYNC 1
120 ! Videos

Offline szipucsu

  • Global Moderator
  • EP addict
  • *
  • Posts: 9898
  • Country: hu
    • Támogató Támogató
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Dots and Gems
« Reply #93 on: 2020.June.22. 19:29:59 »
Éppen a szörnyek véletlenszerű mozgásáért felelős részen szörnyülködöm, amit még a múlt században dobtam össze.
2310   IF UT=5 OR UT=10 THEN GOTO 2480 -Ha "csőben" van a szörny, csak menjen tovább egyenesen
2320   IF FEL+LE+JO+BA=0 THEN LET I(A)=0:GOTO 2490 -Ha semelyik irányba nincs út, az irány legyen 0.
2330   IF FEL+LE+JO+BA=1 THEN LET I(A)=I(A)*(-1):GOTO 2480 -Ha csak egy irányba van út (zsákutca), akkor váltson irányt. Ez feltételezi, hogy előtte az ellenkező irányba ment. Emiatt tényleg be is ragad, ha körül volt véve minden oldalról, majd hirtelen eltűnik az egyik fal. Eddig nem volt olyan pálya, ahol négy oldalról körül van véve a szörny drágakővel (amin nem tud átmenni, falnak kezeli), de ha ilyen lenne, és az egyik drágakövet felvesszük mellőle, akkor sem mozdul el. Lehet, ezt a részt át kéne írni.
A CASE ágakon belül a sok GOTO-hoz meg no komment...
Még gondolkozom, hogyan lehetne szebben megcsinálni ezt, de ha valakinek van ötlete, jöhet.

Code: [Select]
2210 DEF RAND_SZOR
 2220   LET UT,FEL,LE,JO,BA=0
 2230   IF SPEEK(255,SZOR(A)-34)<46 THEN LET UT=UT+1:LET FEL=1
 2240   IF SPEEK(255,SZOR(A)-34)=112 THEN LET UT=UT+1:LET FEL=1
 2250   IF SPEEK(255,SZOR(A)+34)<46 THEN LET UT=UT+4:LET LE=1
 2260   IF SPEEK(255,SZOR(A)+34)=112 THEN LET UT=UT+4:LET LE=1
 2270   IF SPEEK(255,SZOR(A)-1)<46 THEN LET UT=UT+8:LET BA=1
 2280   IF SPEEK(255,SZOR(A)-1)=112 THEN LET UT=UT+8:LET BA=1
 2290   IF SPEEK(255,SZOR(A)+1)<46 THEN LET UT=UT+2:LET JO=1
 2300   IF SPEEK(255,SZOR(A)+1)=112 THEN LET UT=UT+2:LET JO=1
 2310   IF UT=5 OR UT=10 THEN GOTO 2480
 2320   IF FEL+LE+JO+BA=0 THEN LET I(A)=0:GOTO 2490
 2330   IF FEL+LE+JO+BA=1 THEN LET I(A)=I(A)*(-1):GOTO 2480
 2340   SELECT CASE RND(4)
 2350   CASE 0
 2360     IF FEL=1 THEN LET I(A)=-34:GOTO 2490
 2370     GOTO 2340
 2380   CASE 1
 2390     IF LE=1 THEN LET I(A)=34:GOTO 2490
 2400     GOTO 2340
 2410   CASE 2
 2420     IF JO=1 THEN LET I(A)=1:GOTO 2490
 2430     GOTO 2340
 2440   CASE 3
 2450     IF BA=1 THEN LET I(A)=-1:GOTO 2490
 2460     GOTO 2340
 2470   END SELECT
 2480   IF SPEEK(255,SZOR(A)+I(A))>46 AND SPEEK(255,SZOR(A)+I(A))<>112 THEN GOTO 2340
 2490 END DEF
100 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 1
110 SOUND PITCH 25,SYNC 1
120 ! Videos

Offline Tomato77

  • EP user
  • *
  • Posts: 397
  • Country: hu
    • Támogató Támogató
Re: Dots and Gems
« Reply #94 on: 2020.June.22. 20:04:11 »
Az "UT" változóban mi van? Mintha a JOY irányainak megfelelő értékeket adnád össze, de nem látszik, mire használod, mert utána mégis a FEL/LE/JO/BA szerint változtatod az I(A)-t. Az 5 és 10 érték pl. átlósan jobbra-fel és balra-le? A FEL, LE, JO és BAL gondolom az, hogy mehet-e arra, vagy sem.
Ha az összegük nulla, akkor nem mehet sehová, és ilyenkor elugrik a szubrutin végére?

A SELECT CASE RND(4) nem tetszik olyan szempontból, hogy előbb kiválaszt egy irányt, aztán ha arra mégsem mehet, akkor újra ciklik (GOTO-val). Inkább amikor akadályhoz ér, összegyűjteném és megszámolnám, hány (n darab) irányba mehet, és akkor RND(n)-nel választanék véletlenszerű irányt a lehetségesekből, akkor nem futna olyan helyzetbe, hogy olyan irányt választ, amerre nem mehet. Így a 2320, 2330 sorok szükségtelenek lennének és kevesebb GOTO lenne.
A CASE ágakból is kivenném a GOTO-kat, csúnya is így egy CASE szerkezetből vissza-goto-zni az elejére.
Az elején a páros IF-eket össze lehetne vonni, és akkor kevesebb utasítás lenne, pl. ebből lehetne:

Code: [Select]
2230   IF SPEEK(255,SZOR(A)-34)<46 THEN LET UT=UT+1:LET FEL=1
 2240   IF SPEEK(255,SZOR(A)-34)=112 THEN LET UT=UT+1:LET FEL=1

ez:

Code: [Select]
2230   IF SPEEK(255,SZOR(A)-34)<46 OR SPEEK(255,SZOR(A)-34)=112 THEN LET UT=UT+1:LET FEL=1

De "IF"-"END IF" között még szebb lenne, bár úgy több sor, de olvashatóbb lesz:

Code: [Select]
2230   IF SPEEK(255,SZOR(A)-34)<46 OR SPEEK(255,SZOR(A)-34)=112 THEN
 2231     LET UT=UT+1
 2232     LET FEL=1
 2233   END IF
Kotasoft

Offline szipucsu

  • Global Moderator
  • EP addict
  • *
  • Posts: 9898
  • Country: hu
    • Támogató Támogató
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Dots and Gems
« Reply #95 on: 2020.June.22. 21:11:29 »
Az "UT" változóban mi van?
Lehet, nincs is szükség UT változóra. Azt jelöli, hogy merre van irány (merre nincsen fal). Hasonló az elve, mint a botkormány figyelésének. (De persze véletlen sem egyeznek meg a számok az ottani irányokkal.) Ha fel van út, akkor 1-gyel növeli az értékét. Ha le van út, akkor 4-gyel növeli az értékét. Ha "fel is út, le is út", akkor összeadódik, 5 lesz az értéke. Tehát lényegében kiszámítható az UT értékéből, hogy milyen irányokba vannak utak.
A FEL, LE, JO, BA értéke akkor lesz 1, ha az adott irányba van út. Tehát teljesen felesleges a FEL, LE, JO, BA és az UT változó is, csak a múlt évezred végén még így csináltam meg, ami nem volt túl szakszerű.

Quote
Az 5 és 10 érték pl. átlósan jobbra-fel és balra-le?
Nem, az 5 az a "fel is út, le is út" (4+1), a 10 pedig balra és jobbra is van út. Tehát egyirányú folyosón tud menni a szörny, két oldalról fal van, azaz "csőben" van a szörny. Ilyenkor nem vált irányt, csak megy, ameddig újabb elágazáshoz nem ér.

Quote
A FEL, LE, JO és BAL gondolom az, hogy mehet-e arra, vagy sem.
Igen.

Quote
Ha az összegük nulla, akkor nem mehet sehová, és ilyenkor elugrik a szubrutin végére?
Igen, ilyenkor mind a négy oldalról fal veszi körül a szörnyet, nem mehet semerre.

Jobban belegondolva, elég lenne az UT változó, és a FEL, LE, JO, BA változók nem kellenek. 1995-ben nagyon megörülhettem, hogy sok kísérletezés után végre működik, és nem egyszerűsítettem tovább.

A többi, amit írtál, világos. Csak az IF-END IF szerkezetet nem vezetném be, ha nem muszáj, hogy spóroljak a sorszámokkal a Zzzip számára.

Szerintem a legegyszerűbb az ASK 3 A módszer, az FILE-re is jó lesz.
Közben nagy nehezen megértetem, hogy pont az a jó, ha 1 az értéke a file: és a disk: rendszer esetén is, mert mindkettőnél mentheti a pontszámtáblát. Úgyhogy jó lesz ez, nem kell a file:-nek külön semmi.
« Last Edit: 2020.June.22. 21:16:39 by szipucsu »
100 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 1
110 SOUND PITCH 25,SYNC 1
120 ! Videos

Offline szipucsu

  • Global Moderator
  • EP addict
  • *
  • Posts: 9898
  • Country: hu
    • Támogató Támogató
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Dots and Gems
« Reply #96 on: 2020.June.22. 23:17:47 »
Még gondolkozom, hogyan lehetne szebben megcsinálni ezt, de ha valakinek van ötlete, jöhet.
Azon gondolkodom, egy tömböt kéne létrehozni. Benne lenne az összes lehetséges variáció, és az ahhoz kapcsolódó összes lehetséges irányok. Ezek előre definiálva lennének, így a gépnek nem is kéne számolgatnia, amikor dönt, merre menjenek a szörnyek, csak kiválasztani véletlenszerűen a már előre definiált lehetőségek egyikét. Csak UT változó lenne.
Ha semerre nem lehet menni: UT=0
Ha csak jobbra lehet menni: UT=1
Ha csak balra lehet menni: UT=2
csak le: UT=4
csak fel: UT=8
Jobbra+balra=1+2=3
Jobbra+le=1+4=5
Balra+fel+le=2+8+4=14
bármerre=1+2+4+8=15
Tehát lennének 0-tól 15-ig jelölve az Elágazások Típusai (ET).
Adott lenne egy kétdimenziós tömb:
NUMERIC ET(0 TO 15,1 TO 4)
A tömb második dimenziójához az adott elágazástípushoz tartozó lehetséges mozgásirányok (fel, le, jobbra, balra) tartoznának. Ez 0-nál és 15-nél a legevidensebb:
Nincs út semerre:
ET(0,1)=0
ET(0,2)=0
ET(0,3)=0
ET(0,4)=0
Mindenfele van út:
ET(15,1)=-34 (felfele lép egyet)
ET(15,2)=34 (lefele lép egyet)
ET(15,3)=-1 (balra lép egyet)
ET(15,4)=1 (jobbra lép egyet)
Csak fel és jobbra van út:
ET(9,1)=-34
ET(9,2)=1
ET(9,3)=-34
ET(9,4)=1
Amikor megvizsgálja, merre van út, a fentieket használná fel randommal fűszerezve:
IRANY(SZORNY)=ET(UT,RND(4)+1)
Ha háromfele van irány, kicsit furább, mert a páratlan számú lehetőségeket nem lehet négy tömbdimenzióban arányosan tárolni, tehát az egyik iránynak kétszer kéne lennie. Vagyis pl. nagyobb eséllyel menne lefele, mint balra vagy jobbra, ha lefele, balra és jobbra lehet menni. Ez vagy pont jó is lenne így, vagy mondjuk a drágakő felvételekor úgyis leáll egy pillanatra, olyankor átvariálná a háromirányú utak lehetőségeit véletlenszerűen.
Persze azt is meg kéne csinálni, hogy ha csőben megy egyenesen, akkor ne forduljon meg, ezt külön figyelni kéne, tehát a kétirányú lehetőségeknél lenne egy külön feltétel, hogy ha nem 0 az irány, akkor váltson ellenkezőjére.
Még talán olyat lehetne, hogy ha mind a 4 irányba lehet menni, még egy feltétellel véletlenszerűen döntse el, hogy tartja-e az eredeti irányt, vagy irányt vált. Így ha hosszabb távon falmentes pálya lenne, akkor nem ugrabugrálna összevissza, hanem valamilyen irányt próbálna tartani.
Ma már késő van, de majd kipróbálom ezt.

Code: [Select]
2210 DEF RAND_SZOR
 2220   LET UT,FEL,LE,JO,BA=0
 2230   IF SPEEK(255,SZOR(A)-34)<46 THEN LET UT=UT+1:LET FEL=1
 2240   IF SPEEK(255,SZOR(A)-34)=112 THEN LET UT=UT+1:LET FEL=1
 2250   IF SPEEK(255,SZOR(A)+34)<46 THEN LET UT=UT+4:LET LE=1
 2260   IF SPEEK(255,SZOR(A)+34)=112 THEN LET UT=UT+4:LET LE=1
 2270   IF SPEEK(255,SZOR(A)-1)<46 THEN LET UT=UT+8:LET BA=1
 2280   IF SPEEK(255,SZOR(A)-1)=112 THEN LET UT=UT+8:LET BA=1
 2290   IF SPEEK(255,SZOR(A)+1)<46 THEN LET UT=UT+2:LET JO=1
 2300   IF SPEEK(255,SZOR(A)+1)=112 THEN LET UT=UT+2:LET JO=1
 2310   IF UT=5 OR UT=10 THEN GOTO 2480
 2320   IF FEL+LE+JO+BA=0 THEN LET I(A)=0:GOTO 2490
 2330   IF FEL+LE+JO+BA=1 THEN LET I(A)=I(A)*(-1):GOTO 2480
 2340   SELECT CASE RND(4)
 2350   CASE 0
 2360     IF FEL=1 THEN LET I(A)=-34:GOTO 2490
 2370     GOTO 2340
 2380   CASE 1
 2390     IF LE=1 THEN LET I(A)=34:GOTO 2490
 2400     GOTO 2340
 2410   CASE 2
 2420     IF JO=1 THEN LET I(A)=1:GOTO 2490
 2430     GOTO 2340
 2440   CASE 3
 2450     IF BA=1 THEN LET I(A)=-1:GOTO 2490
 2460     GOTO 2340
 2470   END SELECT
 2480   IF SPEEK(255,SZOR(A)+I(A))>46 AND SPEEK(255,SZOR(A)+I(A))<>112 THEN GOTO 2340
 2490 END DEF
« Last Edit: 2020.June.22. 23:21:10 by szipucsu »
100 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 1
110 SOUND PITCH 25,SYNC 1
120 ! Videos

Offline Tomato77

  • EP user
  • *
  • Posts: 397
  • Country: hu
    • Támogató Támogató
Re: Dots and Gems
« Reply #97 on: 2020.June.23. 00:23:15 »
Szerintem felesleges 15x eltárolni a -1, 1, -34, 34 kombinációit. Ha már megvan, merre fog menni a szörny, akkor a lehetséges négy irányból kiválasztod a megfelelőt. Hogy merre mehet, ahhoz pedig körbenézed mind a négy irányt (-1, 1, -34, 34), és amerre mehet, abból kiválasztasz egyet (nagyjából a mostani módon). Ezzel a két dimenziós tömbbel feleslegesen túlbonyolítod. Valahogy így csinálnám:

Code: [Select]
NUMERIC MERRE(0 TO 3),LEHET(0 TO 3)
MERRE(0)=-1:MERRE(1)=1:MERRE(2)=-34:MERRE(3)=34
...
DEF RAND_SZORNY
  LEHETDB=0 ! Ez mutatja, hány irány lehet
  ! Körbenézi négy irányból, ami jó, beteszi a LEHET tömbbe
  FOR J=0 TO 3
    IF SPEEK(255,SZOR(A)+MERRE(J))<46 OR
       SPEEK(255,SZOR(A)+MERRE(J))=112 THEN
      LEHET(LEHETDB)=J ! Ide teszi, hogy melyik irányok jók
      LEHETDB=LEHETDB+1
    END IF
  NEXT J
  ! Itt már megvan, melyik irányokba mehet, válasszon ki egyet
  I(A)=MERRE(LEHET(RND(LEHETDB)))
END DEF

Lehet, hogy szintaktikailag nem mindenhol jó, rég használtam a Basic-et. :) De a logika kb. érthető belőle. És nincs benne GOTO. :)
« Last Edit: 2020.June.23. 02:47:55 by Tomato77 »
Kotasoft

Offline szipucsu

  • Global Moderator
  • EP addict
  • *
  • Posts: 9898
  • Country: hu
    • Támogató Támogató
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Dots and Gems
« Reply #98 on: 2020.June.23. 14:02:59 »
Azon gondolkodom, egy tömböt kéne létrehozni.
Kipróbáltam a tömbös módszert. Így sokkal szebben néz ki a RAND_SZOR eljárás. Jó, az a két GOTO nem annyira szép, de elmegy:

Code: [Select]
2210 DEF RAND_SZOR
 2220   LET UT=0
 2230   IF SPEEK(255,SZOR(A)-34)<46 OR SPEEK(255,SZOR(A)-34)=112 THEN LET UT=UT+8
 2250   IF SPEEK(255,SZOR(A)+34)<46 OR SPEEK(255,SZOR(A)+34)=112 THEN LET UT=UT+4
 2270   IF SPEEK(255,SZOR(A)-1)<46 OR SPEEK(255,SZOR(A)-1)=112 THEN LET UT=UT+2
 2290   IF SPEEK(255,SZOR(A)+1)<46 OR SPEEK(255,SZOR(A)+1)=112 THEN LET UT=UT+1
 2295   IF (UT=3 OR UT=12) AND I(A)<>0 THEN GOTO 2490 ! Ha egyenesen tud csak menni, csak menjen tovább, ha adott az irány, ne váltson irányt
 2300   IF UT=15 AND I(A)<>0 AND RND(2)=0 THEN GOTO 2490 ! Ha bármerre lehet menni, próbáljon tartani egy irányt, ha az irány adott.
 2310   LET I(A)=ET(UT,RND(4)) ! Válasszon egy utat a létezők közül.
 2490 END DEF

Viszont, ahol értéket kell adni ezeknek az irányos változóknak, az szép hosszú rész lett:

Code: [Select]
4690 DEF INI_VAR
 4700   LET MAN=VM+350
 4710   LET K=32:LET POSI=24:LET HITS,GATE=0:LET CIKL=1
 4711   LET I(1)=0:LET I(2)=0:LET I(3)=0:LET I(4)=0
! Innen jön a lényeg:
 4712   LET ET(0,0),ET(0,1),ET(0,2),ET(0,3)=0
 4713   LET ET(1,0),ET(1,1),ET(1,2),ET(1,3)=1
 4714   LET ET(2,0),ET(2,1),ET(2,2),ET(2,3)=-1
 4715   LET ET(3,0),ET(3,1)=-1:LET ET(3,2),ET(3,3)=1
 4716   LET ET(4,0),ET(4,1),ET(4,2),ET(4,3)=34
 4717   LET ET(5,0),ET(5,1)=34:LET ET(5,2),ET(5,3)=1
 4718   LET ET(6,0),ET(6,1)=34:LET ET(6,2),ET(6,3)=-1
 4719   LET ET(7,0),ET(7,1)=1:LET ET(7,2)=34:LET ET(7,3)=-1 !
 4720   LET ET(8,0),ET(8,1),ET(8,2),ET(8,3)=-34
 4721   LET ET(9,0),ET(9,1)=-34:LET ET(9,2),ET(9,3)=1
 4722   LET ET(10,0),ET(10,1)=-34:LET ET(10,2),ET(10,3)=-1
 4723   LET ET(11,0),ET(11,1)=-34:LET ET(11,2)=1:LET ET(11,3)=-1 !
 4724   LET ET(12,0),ET(12,1)=-34:LET ET(12,2),ET(12,3)=34
 4725   LET ET(13,0),ET(13,1)=-34:LET ET(13,2)=1:LET ET(13,3)=34 !
 4726   LET ET(14,0),ET(14,1)=-1:LET ET(14,2)=-34:LET ET(14,3)=34 !
 4727   LET ET(15,0)=34:LET ET(15,1)=-34:LET ET(15,2)=1:LET ET(15,3)=-1
 4730 END DEF

A ! jellel jelölt sorok a kritikusak. Amikor 3 irány közül kell választani, akkor is 4 közül választ, az egyik irány kétszer van benne, amit így nagyobb valószínűséggel választhat ki, mint a másik kettőt. Ennek meg is lett az eredménye, pl. az első pályán a szörnyek mind úgy felcsődültek a pálya tetejére, mintha valami zsibvásár lenne ott. Lángeszemmel erre a 4723-as sorban a -34-et átírtam 34-re, erre meg áttörték a falat is lefele, kis agresszívak lettek. Ha meg a 4726-os sorban cseréltem meg a -1-et és a 34-et, akkor meg oldalra alig akartak menni, vagy már nem tudom. Pedig egyes pályákhoz külön-külön is be lehetne állítani, hogy az egyik irányt jobban kedveljék, mint másik kettőt, ha olyan a pálya.
Talán még kísérletezek ezzel a módszerrel, ki lehet-e hozni belőle valamit.

Valahogy így csinálnám:
Megnézem majd ezt a módszert is!
100 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 1
110 SOUND PITCH 25,SYNC 1
120 ! Videos

Offline szipucsu

  • Global Moderator
  • EP addict
  • *
  • Posts: 9898
  • Country: hu
    • Támogató Támogató
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Dots and Gems
« Reply #99 on: 2020.June.23. 14:34:42 »
Valahogy így csinálnám:
Kipróbáltam, alapvetően működik! :smt041
Két kis hiányosság van benne:
1. Ha folyosón (csőben) megy a szörny, akkor ne váltson irányt.
2. Ha körül van véve fallal, arra nincs meghatározva semmi, és hibát okoz.
Még megpróbálom ezeket is beletenni, de kicsit kacifántosnak tűnik.
100 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 1
110 SOUND PITCH 25,SYNC 1
120 ! Videos

Offline szipucsu

  • Global Moderator
  • EP addict
  • *
  • Posts: 9898
  • Country: hu
    • Támogató Támogató
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Dots and Gems
« Reply #100 on: 2020.June.23. 16:46:15 »
Még megpróbálom ezeket is beletenni, de kicsit kacifántosnak tűnik.
Beletettem ezeket is, most a teljesen körülzárt szörnyek is rendben vannak, és csőben nem vált irányt a szörny. Egyelőre csúnya GOTO-s megoldással lőttem be, este majd megpróbálom szebben megcsinálni, de ha van javaslat, jöhet, mert GOTO nélkül egyelőre nehezen tudnám ezt elképzelni.

Code: [Select]
2210 DEF RAND_SZOR
 2220   LET LEHETDB=0
 2230   FOR UT=0 TO 3
 2250     IF SPEEK(255,SZOR(A)+MERRE(UT))<46 OR SPEEK(255,SZOR(A)+MERRE(UT))=112 THEN
 2270       LET LEHET(LEHETDB)=UT
 2290       LET LEHETDB=LEHETDB+1
 2292     END IF
 2293   NEXT UT
 2301   IF LEHETDB=0 THEN LET I(A)=0:GOTO 2490 !Ha semerre nincs út, irány=0
 2302   IF LEHETDB<3 THEN
 2305     LET UT2=0
 2306     FOR UT=0 TO LEHETDB-1
 2307       LET UT2=UT2+MERRE(LEHET(UT))
 2308     NEXT
 2309     IF UT2=0 AND I(A)<>0 THEN GOTO 2490 !Ha van irány, és egyenesen megy egy csőben, akkor ne váltson irányt
 2310   END IF
 2315   LET I(A)=MERRE(LEHET(RND(LEHETDB)))
 2490 END DEF

Úgy vizsgálja, hogy csőben van-e, hogy a lehetséges irányok összege 0. Tehát ha tudna lépni +1 és -1 koordinátát, vagy +34 és -34-et, a kettő összegéből következtet arra, hogy csőben van. Persze ha 4 irányba tud menni, akkor is 0 jönne ki, ezért kell 2302-es sor, hogy még mielőtt az összes irányt számbaveszi, akkor adjon össze.
Nem tudom, hogy ez az egész befolyásolja-e az egyéb mozgásokat, látszólag működik. Bár néha gyanúsan sokat vacakolnak a szörnyek körbe-körbe egy objektum körül, ez lehet véletlen is. Ha háromfele mehet és adott az irány, akkor elvileg nem teljesül a feltétel, ha jól sejtem.
100 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 1
110 SOUND PITCH 25,SYNC 1
120 ! Videos

Offline geco

  • EP addict
  • *
  • Posts: 7082
  • Country: hu
    • Támogató Támogató
Re: Dots and Gems
« Reply #101 on: 2020.June.23. 17:12:29 »
meg lehet oldani goto nélkül, telóról nehézkesebb:
gotot vedd ki az if lehetdb = 0 sor végéről
if lehetdb < 3 and lehetdb > 0 then
a let ut2 = 0 -t tedd az if lehetdb < 3 ... sor elé
az utso endif előtti sort torold
az end def előtti sor elejére meg tedd be a következőt:
 if ut2 > 0 and i(a)=0 then

Offline Tomato77

  • EP user
  • *
  • Posts: 397
  • Country: hu
    • Támogató Támogató
Re: Dots and Gems
« Reply #102 on: 2020.June.23. 18:28:21 »
1. Ha folyosón (csőben) megy a szörny, akkor ne váltson irányt.

Ja, azt hittem, a RAND_SZORNY csak akkor hívódik meg, ha akadálynak ütközik. Meg kell vizsgálni, hogy nekimenne-e valaminek, és csak akkor hívja meg a szubrutint, vagy tedd a belsejét egy IF-END IF-be. Pl.: SZOR(A)+MERRE(I(A))=fal, akkor váltson irányt. Hozzá lehet tenni OR-ral egy RND(valamit) is, és akkor véletlenszerűen is kanyarodik.

2. Ha körül van véve fallal, arra nincs meghatározva semmi, és hibát okoz.

Nem játszottam végig, de lehetséges olyan helyzet, hogy a szörny be van zárva valahová, ahonnan sehová se tud menni? Akkor ki lehetne bővíteni a MERRE  tömböt, és a nullás eleme nulla értékű lenne. Meg fel kell cserélni a LEHET és a LEHETDB módosító sorokat, meg az RND-nél LEHETDB+1 kell, és a J ciklus 1-től 4-ig menjen, akkor szerintem jó lesz.
« Last Edit: 2020.June.23. 19:11:50 by Tomato77 »
Kotasoft

Offline szipucsu

  • Global Moderator
  • EP addict
  • *
  • Posts: 9898
  • Country: hu
    • Támogató Támogató
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Dots and Gems
« Reply #103 on: 2020.June.23. 21:29:48 »
Nem játszottam végig, de lehetséges olyan helyzet, hogy a szörny be van zárva valahová, ahonnan sehová se tud menni?
A jelenlegi pályákon nincs ilyen. Attól függ, mennyire elvetemült, aki a pályát tervezi. Kipróbáltam, el lehet kapni a bezárt szörnyike mellől a drágakövet, és akkor a szörnyike kiszabadul, és ha gyorsak vagyunk, nem jön nekünk. Nem annyira tervezek ilyet esetleges későbbi verziókban sem, de van egy másik játékhoz ötletem, amihez viszont ez kelleni fog, de nem lövöm le a poént.
A többit, amit írtál és Geco írt, majd lehet, frissebb fejjel próbálom ki.
100 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 1
110 SOUND PITCH 25,SYNC 1
120 ! Videos

Offline szipucsu

  • Global Moderator
  • EP addict
  • *
  • Posts: 9898
  • Country: hu
    • Támogató Támogató
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Dots and Gems
« Reply #104 on: 2020.June.25. 09:40:12 »
Viszont, ahol értéket kell adni ezeknek az irányos változóknak, az szép hosszú rész lett:

Code: [Select]
4690 DEF INI_VAR
 4700   LET MAN=VM+350
 4710   LET K=32:LET POSI=24:LET HITS,GATE=0:LET CIKL=1
 4711   LET I(1)=0:LET I(2)=0:LET I(3)=0:LET I(4)=0
! Innen jön a lényeg:
 4712   LET ET(0,0),ET(0,1),ET(0,2),ET(0,3)=0
 4713   LET ET(1,0),ET(1,1),ET(1,2),ET(1,3)=1
 4714   LET ET(2,0),ET(2,1),ET(2,2),ET(2,3)=-1
 4715   LET ET(3,0),ET(3,1)=-1:LET ET(3,2),ET(3,3)=1
 4716   LET ET(4,0),ET(4,1),ET(4,2),ET(4,3)=34
 4717   LET ET(5,0),ET(5,1)=34:LET ET(5,2),ET(5,3)=1
 4718   LET ET(6,0),ET(6,1)=34:LET ET(6,2),ET(6,3)=-1
 4719   LET ET(7,0),ET(7,1)=1:LET ET(7,2)=34:LET ET(7,3)=-1 !
 4720   LET ET(8,0),ET(8,1),ET(8,2),ET(8,3)=-34
 4721   LET ET(9,0),ET(9,1)=-34:LET ET(9,2),ET(9,3)=1
 4722   LET ET(10,0),ET(10,1)=-34:LET ET(10,2),ET(10,3)=-1
 4723   LET ET(11,0),ET(11,1)=-34:LET ET(11,2)=1:LET ET(11,3)=-1 !
 4724   LET ET(12,0),ET(12,1)=-34:LET ET(12,2),ET(12,3)=34
 4725   LET ET(13,0),ET(13,1)=-34:LET ET(13,2)=1:LET ET(13,3)=34 !
 4726   LET ET(14,0),ET(14,1)=-1:LET ET(14,2)=-34:LET ET(14,3)=34 !
 4727   LET ET(15,0)=34:LET ET(15,1)=-34:LET ET(15,2)=1:LET ET(15,3)=-1
 4730 END DEF
Arra is gondoltam, hogy a fenti értékadások ne foglalják a helyet a programban, ezt is lehetne külön fájlból betölteni. Most nincs ilyenre szükség, de ha túl nagy lenne a program, akár meg is lehetne csinálni.
De még lehet, hogy nem ez, hanem Tomato eljárása marad a programban, csak azt kicsit nehezebb átírni, kiegészíteni, ha még valamivel ki akarom egészíteni a szörnyek mozgását. (Pl. ahol nincs semmi fal vagy akadály hosszú távon, hogy hogyan mozogjon.)
100 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 1
110 SOUND PITCH 25,SYNC 1
120 ! Videos