Gondol a gép egy számot 1-5-ig és ezt ki kell találni.
100 PROGRAM "GUESS.BAS"
110 RANDOMIZE
115 Z=0
120 FOR A=1 TO 10
130 LET X=RND(5)+1
140 INPUT PROMPT "Guess number "&STR$(A)&":" Y
150 IF X=Y THEN LET Z=Z+1:PRINT "Yes!"
155 IF X<>Y THEN PRINT "No. The number is:" X
157 PRINT "So far:" Z "numbers have been guessed." :PRINT
160 NEXT A
170 PRINT Z "times you guessed the number."
180 END
azért valamivel komolyabb programokra gondoltam ebben a topikbanLehet írni a programhoz zenét, meg lehet csinálni attribútum, sőt gracha képernyősre. Toplistát is lehet csinálni, hangeffekteket ahhoz, amikor eltaláljuk a számot, és amikor nem találjuk el. :D
a random függvégValamelyik EP-s könyv feleslegesnek tartja egy programon belül többször is kiadni a RANDOMIZE parancsot, merthogy semmi értelme, de ha többször is betennénk pl. a FOR cikluson belülre a RANDOMIZÉt, akkor már nehezebb lenne kitalálni, milyen szám jön. De átlagember szerintem sose fogja tudatosan jól megtippelni 5-ből az 5 számót jól egymás után sokszor.
Például a rendszeridőből is kiszámíthatja a véletlenszámot.Na de hát a RANDOMIZE pont ezt csinálja, nem? A rendszeridő (vagy a megszakítások száma alapján, de lényegében azt is felfoghatjuk rendszeridődek, mivel 50Hz-es számláló) alapján ad egy kezdőértéket a véletlenszám generátor függvénynek.
Na de hát a RANDOMIZE pont ezt csinálja, nem? A rendszeridő (vagy a megszakítások száma alapján, de lényegében azt is felfoghatjuk rendszeridődek, mivel 50Hz-es számláló) alapján ad egy kezdőértéket a véletlenszám generátor függvénynek.Lehet. Nem tudom, mit csinál a randomize pontosan. De a programozó is kitalálhat többféle műveletet, hogy mit lehet csinálni a rendszeridővel és a megszakításokkal (pl. osztani, szorozni az értékeiket, gyököt vonni belőle, szinuszát venni, stb.) Ha mérné a gép a hőmérsékletet, azt is belevehetné a számításokba. Vagy a winchesterről beolvassa valamelyik fájlt, és valahányadik bájtját is beszámíthatja (floppynál jobb, mert azt gyakrabban cserélik). De ezeket biztos már ezerszer jobban kitalálták nálam. :D
A RANDOMIZE a 23 bites véletlenszám generátor felső 7 bitjét az R regiszter alapján állítja be, az alsó 8 bitet pedig a RANDOM_IRQ EXOS változóból, aminek az értéke minden megszakításnál eggyel növekszik. A 8..15. bitet nem állítja, ha jól látom. BASIC program indításakor a generátor kezdőértéke 000211h.
Jé, véletlenül jól sikerült a basic programot összedobnom, én nem próbáltam ki egész eddig. :D Már ha nem javítottál bele hiba miatt.
Az rndguess.exe mivel nyílik meg?
Az INPUT PROMPT-nál volt egy szintaktikai hiba.Gondolkodtam, kell-e oda pontosvessző vagy valami, de furán mutatott. Tehát kettőspont kell. Lehetne a programon szépíteni valamit? Pl. a két IF-et összevonni, vagy hasonló, ami programozásilag elegánsabb?
PC program.Hogy kell elindítani? Windows-on dupla kattintással nem indult el, meg dos-os .bat fájlból sem sikerült elindíteni.
(Attachment Link)
Hogy kell elindítani? Windows-on dupla kattintással nem indult el, meg dos-os .bat fájlból sem sikerült elindíteni.
Köszönöm. 3 a csúcsom. :)
Egyre jobb vagyok. :)Na, ha tudtam volna, hogy ekkora sikere lesz ennek a programnak, teszek bele hangeffekteket, zenét, és színes attribútum képernyőn futna.
Tehát itt már biztosan 3 és 4 az utolsó két szám:Ez érdekes. Ha 20, 50 vagy 100 számot kéne eltalálni, akkor is az első 8 után már tudná, mi lesz az összes többi?
Ez érdekes. Ha 20, 50 vagy 100 számot kéne eltalálni, akkor is az első 8 után már tudná, mi lesz az összes többi?
random: ld hl, 0x7fff ; * random seed
ld a, r
xor l
add hl, hl
xor h
ld l, a
xor h
ld h, a
ld (random + 1), hl
ret
sajnos nem igazán egyenletes az elemek eloszlása, van, hogy egy-egy elem csak nagyon soká jön.
Lehet, hogy ez csak véletlenül fordult elő, de az probléma, ha következetesen mindig ugyanaz az elem ritka. Mivel a függvény az R regisztert is használja, elvileg az is ronthatja a kimenet minőségét, ha a hívások időzítése nem szerencsés. A sebesség mennyire fontos?A sebesség nem annyira fontos. Lehet, hogy az R regiszert csak a seed feltöltéséhez kéne használnom?
Ugyanaz a zene nem fordulhat elő kétszer egymás után, és a régebben játszottaknak nagyobb a valószínűsége.Az nem fontos, hogy ne legyen egymás után ugyanaz a két érték, inkább az eloszlás a problémás.
próbáld meg, hogy and 0fh esetén milyen lesz a végeredmény a 16-tal való osztás helyettElőször azzal próbáltam, azzal se volt túl jó, de aztán valahol azt olvastam, hogy szerencsésebb inkább a 16-tal osztás, ezért maradt így, persze ez nyilván algoritmus függő is.
Ha a teljesen egyenletes eloszlás a fontos, akkor talán célszerűbb lenne a generálandó számoknak megfelelő méretű táblázatot 0 és 15 közötti értékekkel egyszerű növekvő sorrendben feltölteni, és utána a táblázatból véletlenszerű címről választani a következő elemet, amelynek a helyére az utolsó kerül, és a táblázat mérete eggyel csökken:
de aztán valahol azt olvastam, hogy szerencsésebb inkább a 16-tal osztás
vajon az ilyen régi gépekben miért nem használtak táblázatot a random szám generálásának gyorsításához? szerintem mondjuk egy 256 elemű táblázat használatával egyszerűbb és gyorsabb generáló kód készíthető. 256 bájt meg nem sok, nem foglalt volna sokat.Speccyn előszeretettel használták a ROM-ot táblázatként :D
Speccyn előszeretettel használták a ROM-ot táblázatként :D
Speccyn előszeretettel használták a ROM-ot táblázatként :DAztán ebből lesznek olyanok, mint pl a Monte Carlo Casino EP átiratában mindig 0 jön ki a ruletten...
Speccyn előszeretettel használták a ROM-ot táblázatként :D