Welcome, Guest. Please login or register.


Author Topic: Bomber Plus (Read 6219 times)

Offline ergoGnomik

  • EP lover
  • *
  • Posts: 798
  • Country: hu
  • Stray cat from Commodore alley
  • OS:
  • Windows NT 6.2 Windows NT 6.2
  • Browser:
  • Firefox 46.0 Firefox 46.0
    • View Profile
Re: Bomber Plus
« Reply #120 on: 2016.June.06. 20:08:45 »
A véletlenszám generátor determinisztikus. Azonos kiinduló értékekből mindig ugyan azt a sorozatot fogja legenerálni. Írhattam volna hosszabb kiíratást is, de hogy látsszon az elv ennyi is elég.

A pálya generálása előtt lemented ezt a három számot, és a mentés fájlba beleírod azokkal a további adatokkal együtt, amiket most is mentesz. Visszatöltéskor visszaírod a három számot a helyére, aminek hatására a pályageneráláshoz használt véletlenszámok azonosak lesznek az eredeti lefutáskor kapott számsorral. Létrehozod újra a pályát, elvégzed rajta a mentett módosításokat és vissza bedobod a játékmotorba.

Offline szipucsu

  • EP addict
  • *
  • Posts: 7974
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Firefox 46.0 Firefox 46.0
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Bomber Plus
« Reply #121 on: 2016.June.06. 22:42:54 »
A pálya generálása előtt lemented ezt a három számot
Mármint melyik három számot? Azt értem, hogy az adott poke-okra visszatér oda, ahol előtte volt, de a kiinduló értéket hogyan lehet meghatározni? Mert amit mellékeltél snapshotot, ott is mindig ugyanaz fut le, de a számok minden futtatáskor mások. Hogyan érhetem el, hogy ugyanazokat lehessen előhívni? Lehet, nagyon triviális a válasz...
SOUND SOURCE 3,STYLE 16,LEFT 16,RIGHT 64,SYNC 2
SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 2
SOUND PITCH 25,SYNC 2
Videos

Offline ergoGnomik

  • EP lover
  • *
  • Posts: 798
  • Country: hu
  • Stray cat from Commodore alley
  • OS:
  • Windows NT 6.2 Windows NT 6.2
  • Browser:
  • Firefox 46.0 Firefox 46.0
    • View Profile
Re: Bomber Plus
« Reply #122 on: 2016.June.07. 07:51:09 »
Mármint melyik három számot? Azt értem, hogy az adott poke-okra visszatér oda, ahol előtte volt, de a kiinduló értéket hogyan lehet meghatározni? Mert amit mellékeltél snapshotot, ott is mindig ugyanaz fut le, de a számok minden futtatáskor mások. Hogyan érhetem el, hogy ugyanazokat lehessen előhívni? Lehet, nagyon triviális a válasz...
Na, akkor vegyük végig szépen sorban. Kezdünk egy RANDOMIZE utasítással, ami valamilyen módon feltölti kiinduló értékkel a véletlenszám generátort. Következőnek kiolvasunk a memóriából három értéket és megjegyezzük őket. Ezután dobatunk a géppel három (lehetne több is, csak minek) véletlenszámot, amiket kiíratunk. Utána a három megjegyzett számot visszaírjuk a memóriába azokra a helyekre ahonnan kiolvastuk őket. Ezután újra dobatunk a géppel három véletlenszámot, amiket kiíratunk.

Azt tapasztaljuk, hogy minden lefutásonként különböző számsorokat kapunk, azonban az első három szám sorrendben megegyezik a második hárommal. Azt látjuk, hogy a lefuttatott utasítások visszaállították a generátort egy korábbi ismert állapotba, és onnan pontosan azonos sorozatot állított elő.

Ha most kipróbálnánk - szerintem csináld is meg - azt, hogy a harmadik kiírás után és a POKE-ok elé beszúrnánk egy RANDOMIZE utasítást és három újabb kiíratást, akkor azt látnánk, hogy kapunk három számot, utána még hármat ami valószínűleg teljesen különbözik az első háromtól, és végül még hármat amik sorrendben azonosak az első hárommal.

Így már világosabb?

Offline szipucsu

  • EP addict
  • *
  • Posts: 7974
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Firefox 46.0 Firefox 46.0
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Bomber Plus
« Reply #123 on: 2016.June.07. 13:28:52 »
Szóval a lényege, hogy ha nem lenne RANDOMIZE a program elején, akkor eleve ugyanazok jönnének végig véletlenszámként minden programfutás során.

Következőnek kiolvasunk a memóriából három értéket és megjegyezzük őket.
Szóval csak ezeket a megjegyzett értékeket kell eltárolni későbbre, és megkapjuk ugyanazt a pályát, ha ezeket az értékeket visszatöltjük akár fájlból, és bepoke-oljuk.
Végülis akkor ilyen módon nem kéne a házak színét és magasságát sem elmenteni, hanem csak az egésznek a generálása előtt a három véletlen értéket letárolni/visszaállítani, nem? Sőt, így még a háztetők is megmaradnának olyannak, mint először.

Egyébként miért 3 peek/poke van? Ha csak egy lenne, akkor nem ugyanoda állna be az egész véletlenszám generálás?
SOUND SOURCE 3,STYLE 16,LEFT 16,RIGHT 64,SYNC 2
SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 2
SOUND PITCH 25,SYNC 2
Videos

Offline ergoGnomik

  • EP lover
  • *
  • Posts: 798
  • Country: hu
  • Stray cat from Commodore alley
  • OS:
  • Windows NT 6.2 Windows NT 6.2
  • Browser:
  • Firefox 46.0 Firefox 46.0
    • View Profile
Re: Bomber Plus
« Reply #124 on: 2016.June.07. 15:03:40 »
Szóval a lényege, hogy ha nem lenne RANDOMIZE a program elején, akkor eleve ugyanazok jönnének végig véletlenszámként minden programfutás során.

Szóval csak ezeket a megjegyzett értékeket kell eltárolni későbbre, és megkapjuk ugyanazt a pályát, ha ezeket az értékeket visszatöltjük akár fájlból, és bepoke-oljuk.
Végülis akkor ilyen módon nem kéne a házak színét és magasságát sem elmenteni, hanem csak az egésznek a generálása előtt a három véletlen értéket letárolni/visszaállítani, nem? Sőt, így még a háztetők is megmaradnának olyannak, mint először.

Egyébként miért 3 peek/poke van? Ha csak egy lenne, akkor nem ugyanoda állna be az egész véletlenszám generálás?
Valószínűleg igen, de ezt Zozo, István vagy Bruce tudná biztosra mondani.

Igen, így van.
Nem ismerem a kódodat, de valószínűleg ez is igaz.

Ezt sem tudom, szintén a fenti urak az illetékesek.

Offline szipucsu

  • EP addict
  • *
  • Posts: 7974
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Firefox 46.0 Firefox 46.0
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Bomber Plus
« Reply #125 on: 2016.June.07. 21:46:20 »
Ha jól sejtem, ilyen randomos mentés után újra ki kell adni a randomize-t. Hiszen ha a régebbi, "mesterségesen előállított" randomos állapotból folytatjuk tovább a játékot, akkor az ugyanolyan lesz, akárhányszor csak visszatöltjük az adott részt.

Ez a véletlenszám generálás tényleg csak annyi, hogy az előző számból (bonyolult műveletekkel) valahogy előállítja a következő számot? Az nem számít bele, hogy közben mennyi idő telik el? Vagy ha bármi egyéb műveletet végez közben a gép (pl. fut egy megszakítás a háttérben, vagy leütünk néhány billentyűt), az sem befolyásolja az értékeket?
« Last Edit: 2016.June.07. 21:49:28 by szipucsu »
SOUND SOURCE 3,STYLE 16,LEFT 16,RIGHT 64,SYNC 2
SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 2
SOUND PITCH 25,SYNC 2
Videos

Offline Povi

  • EP addict
  • *
  • Posts: 1868
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Chrome 50.0.2661.102 Chrome 50.0.2661.102
    • View Profile
    • http://povi.fw.hu
Re: Bomber Plus
« Reply #126 on: 2016.June.07. 22:29:51 »
http://ep128.hu/Ep_Konyv/Tippek.htm

"Az egy és két byte hosszon tárolt két elővéletlen számból állítja elő az RND értékét. Az RND 65 535 különféle értéket vehet fel, de periodikus ismétlődés csak 524 287 érték után következik be. Az RND kiszámítása (X+32768)/65536 - összefüggéssel történik. A képletbe X értékét a 246-247H memóriarekesz tartalma szolgáltatja. A memóriarekesz tartalma az előző tartalomtól és a 211H címen tárolt értéktől függ. A fenti állítások ellenőrzésére a 4. program szolgál."

Code: [Select]
1 PROGRAM "RND.bas"
100 ! RND kiismerese
110 LET A=RND:LET E=1
120 PRINT "most (211H)=";PEEK(529)
130 PRINT :PRINT
140 LET B=PEEK(582):LET C=PEEK(583)
150 IF C>128 THEN
160   LET C=256-C:LET E=-1
170 END IF
180 PRINT "RND (ahogy a gep adja):";A
190 PRINT "es ahogy kifigyelheto: ";(32768+E*256*C+B)/65536
200 ! ez az 1. szegmens CAA9H rutinjanak Basic szintu modelje
210 PRINT :PRINT
220 PRINT "legkozelebb (211H)=";B
230 GOTO 110
*** Speicherplatz zu klein

Offline szipucsu

  • EP addict
  • *
  • Posts: 7974
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Firefox 46.0 Firefox 46.0
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Bomber Plus
« Reply #127 on: 2016.June.07. 23:55:42 »
A képletbe X értékét a 246-247H memóriarekesz tartalma szolgáltatja.
A 246-247H memóriarekesz tartalma mitől függ? Ha valamiért más kerül oda a program következő futtatásakor, akkor más REND jöhet ki, és akkor nem alkalmazható a poke-os módszer?
SOUND SOURCE 3,STYLE 16,LEFT 16,RIGHT 64,SYNC 2
SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 2
SOUND PITCH 25,SYNC 2
Videos