Welcome, Guest. Please login or register.


Author Topic: Flappy Bird (Read 990 times)

Offline minmax

  • Beginner
  • *
  • Posts: 41
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Opera 9.80 Opera 9.80
    • View Profile
Flappy Bird
« on: 2016.April.15. 23:59:22 »
Szóval, van ez a Flappy Bird játék (FLAPPYB.BAS basic programcsokorból), Endi és Szipucsu munkája. Először is, köszönet érte, szerintem nagyon jól sikerült, mostanában eléggé rákattantam, rengeteget játszottam vele. Kicsit át is írogattam, mert szerettem volna egy "maratoni" verziót, ami ráadásul kicsit határozottabban is nehezedik. Úgyhogy átírtam a 6 életre vonatkozó sort:
  610   IF FAIL=6 THEN
erre:
  610   IF FAIL>SUCC THEN
Így annyi próbálkozásunk van, amennyi pályát már sikeresen teljesítettünk. Így azért tovább lehet jutni, mint 6 élettel, de mégis van tétje a dolognak, szóval mérsékeltebb cheat. Főleg, hogy nehezítettem is a pályákon, a nyílások egyre szűkebbek lesznek, nem állandóak.

És itt jön a probléma, hogy valamiért lefagy a játék a 42. próbálkozás környékén, tehát néhány példával:

sikeres + sikertelen = összes próbálkozás
29+13=42
27+15=42
29+12=41
26+16=42
22+20=42
24+19=43
25+17=39
27+15=42
24+19=43

Általában mielőtt elkezdené kirajzolni az új pályát, tehát fekete képernyőnél (alul az eredményjelzővel), de néha játék közben is. Nézegettem, de nem tudtam rájönni, hogy miért lehet ez. Kipróbáltam azt is, hogy nem 0+0-ról kezdek, hanem 30+30-ról, és akkor is lefagyott kb. ugyanennyi játék után, szóval valami memória-gondra tippelek. Amúgy a poke-ok mit csinálnak a programban? Ha valaki tud megoldást, kérem ossza meg velem. :)

Ide csatolom a fájlt basicban meg txt-ben, hogy ne kelljen esetleg keresgélni:

* FLAPPYB.BAS
* flappyb.txt

Offline szipucsu

  • EP addict
  • *
  • Posts: 8068
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Firefox 45.0 Firefox 45.0
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Flappy Bird
« Reply #1 on: 2016.April.16. 00:16:42 »
Nem néztem még bele, de ez akkor szokott lenni, ha GOTO-val kiugrunk valami FOR vagy egyéb ciklusból a cikluson kívülre. Lehet, hogy a hibát még én csempésztem bele a játékba, amikor módosítgattam, mert régebben nem foglalkoztam ezzel, amíg itt a többiek fel nem hívták rá a figyelmem. A Dot Collector Turbo Editionban is lett volna egy ilyen hiba, sok játék után az is lefagyott volna, ha nem mondják a fórumtársak, hogy az úgy nem jó.
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 szipucsu

  • EP addict
  • *
  • Posts: 8068
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Firefox 45.0 Firefox 45.0
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Flappy Bird
« Reply #2 on: 2016.April.16. 00:21:20 »
Na, belenéztem. Szerintem az 550-es sorban az a GOTO 200 okozza a hibát. Nem FOR ciklus, de a HANDLER közepéből teljesen máshova ugrik.
A POKE-ok gyorsítás miatt vannak. A pálya kirajzolása előtt kikapcsolja a megszakításokra várakozást, így gyorsabban kirajzolja. Ilyenkor hiába nyomkodjuk a billentyűzetet, nem csinál semmit, és a hangok sem szólnak. A kirajzolás végén visszakapcsolja, hogy tudjunk játszani.
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 minmax

  • Beginner
  • *
  • Posts: 41
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Opera 9.80 Opera 9.80
    • View Profile
Re: Flappy Bird
« Reply #3 on: 2016.April.16. 00:36:22 »
Aha, és a GOTO-k azért kellenek, mert HANDLER-ből nem lehet függvényt hívni CALL-al? Mondjuk azt sem igazán értem, hogy miért van hibakezelővel megoldva, miért nem sima DEF HIBA és CALL HIBA?

Offline minmax

  • Beginner
  • *
  • Posts: 41
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Opera 9.80 Opera 9.80
    • View Profile
Re: Flappy Bird
« Reply #4 on: 2016.April.16. 00:40:32 »
Amúgy ez a POKE-os megszakításkikapcsolás minden programnál más? Egy másik programban gondolom nem feltétlenül ugyanoda az 56-ra kell írni a 201-et meg 245-öt. Vagy még a beírt érték sem ugyanaz?

Offline szipucsu

  • EP addict
  • *
  • Posts: 8068
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Firefox 45.0 Firefox 45.0
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Flappy Bird
« Reply #5 on: 2016.April.16. 00:44:14 »
Nem tudom, handlerből lehet-e függvényt hívni, de tényleg nagyon ronda és felesleges az a handler. Valószínű, nagyon megörültem, hogy milyen frappánsan meg lehet oldani az *** Invalid beam position kiküszöbölését. Az egész játék alatt figyelnie kéne, hogy mikor ér bal oldalon a pálya végére, és ez lassítaná, talán ezért találtam ki a handlerezést.

Szerintem minden programban az 56-ra kell írni az értékeket a POKE-kal. Legalábbis én már sok programnál így csináltam.
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 szipucsu

  • EP addict
  • *
  • Posts: 8068
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Firefox 45.0 Firefox 45.0
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Flappy Bird
« Reply #6 on: 2016.April.16. 00:46:26 »
Nem lehetne a Flappy bird előzményeit innen kezdődően áthelyezni ennek a topiknak az elejére?
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: 1873
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Chrome 49.0.2623.112 Chrome 49.0.2623.112
    • View Profile
    • http://povi.fw.hu
Re: Flappy Bird
« Reply #7 on: 2016.April.29. 19:44:28 »
Amúgy ez a POKE-os megszakításkikapcsolás minden programnál más? Egy másik programban gondolom nem feltétlenül ugyanoda az 56-ra kell írni a 201-et meg 245-öt. Vagy még a beírt érték sem ugyanaz?
De, mindenhol használható, ugyanazt kell irni mindig.

A POKE 56, 201 az a 0x38 cimre (ide ugrik a vezérlés minden megszakitáskor, vagyis másodpercenként 50-szer) ir egy RET utasitást (a 201, vagy szebben: 0xc9 a RET gépi kódja), azaz rögtön vissza is térünk a megszakitási rutinból. Ezért lesz gyorsabb a program, mert nem fut le a megszakitási rutin (ezért nincs pl. bill. olvasás, mert azt is az csinálná).

A POKE 56, 245-tel pedig visszaállitjuk a megszakitási rutin elején lévő utasitást az eredetire (egy PUSH AF van ott eredetileg, annak kódja a 245 (vagy 0xf5).
*** Speicherplatz zu klein