Bon, voici le code en GFW:
- tous les
LET, ainsi que les
THEN ont été supprimés
- Les
SELECT CASE ont été transformés en
SELECT- Les expressions du style
a=a+1 ont été transformés en
INC a (idem pour les
a=a-1 en
DEC a...)
- Toutes les lignes qui comprenaient plusieurs instructions ont été décomposées en plusieurs lignes...
- l'instruction
LINE (x, y)-(x1,y1),c, BF correspond à
PBOX en GFA:
PBOX x,y,x1,y1, c étant la couleur de remplissage (
BF signifie BOX FILL...)
-
win et
intro ont été mis sous forme de
PROCEDURES. Nous laisseront ces procedures telles quelles pour le moment (affichage de texte...)
On a juste ajouté l'ouverture d'une fenêtre 320x200 à la procédure
intro:
OPENW #1,(_X / 2) - 160,(_Y / 2) - 100,320,200,80C'est ce qui correspond au
SCREEN13 en QBASIC, et quelle coincidence sur ATARI ST la basse résolution est également 320x200

Pour le test des touches on utilise l'instruction
KEYTEST- Code: Tout sélectionner
' ----------------------
' CHAOS DUNGEON - GFW
' By Fantomas
' ----------------------
@intro
angle = 0
cfloor = 1
DIM map(10, 20)
DIM sint(359)
DIM cost(359)
FOR z = 0 TO 359
sint(z) = SIN(z * PI / 180) * 100
cost(z) = COS(z * PI / 180) * 100
NEXT z
nextfloor:
' FOR snd = 440 TO 1000 STEP 10
' SOUND snd, .1
' NEXT snd
SELECT cfloor
CASE 1
RESTORE mapdata1
CASE 2
RESTORE mapdata2
CASE 3
RESTORE mapdata3
CASE 4
@win
ENDSELECT
FOR ry = 0 TO 19
FOR rx = 0 TO 9
READ map(rx, ry)
IF map(rx, ry) = 16
map(rx, ry) = 0
px = rx + 1
py = ry + 1
ENDIF
NEXT rx
NEXT ry
px = px * 1000
py = py * 1000
DO
s = -5
FOR z = -31 TO 32
ADD s, 5
a = angle + z
IF a < 0
ADD a,360
ENDIF
IF a > 359
SUB a,360
ENDIF
slx = px
sly = py
dc = 0
DO
slx = slx - sint(a)
sly = sly - cost(a)
m = map(slx / 1000, sly / 1000)
INC dc
LOOP UNTIL m
dist = 1000 / dc
COLOR 1
PBOX s, 0,s + 4, 99 - dist
IF m > 0 AND m < 16
COLOR m
PBOX s,100 - dist,s + 4,100 + dist
ENDIF
IF m = 17
COLOR INT(RND * 15) + 1
PBOX s, 100 - dist,s + 4, 100 + dist
ENDIF
COLOR 6
PBOX s, 101 + dist,s + 4, 199
NEXT z
' COLOR 15
' PRINT "FLOOR: "; cfloor
opx = px
opy = py
KEYTEST k
SELECT BYTE(k)
CASE 38
px = px - sint(angle) * 5
py = py - cost(angle) * 5
CASE 40
px = px + sint(angle) * 5
py = py + cost(angle) * 5
CASE 39
ADD angle, 5
CASE 37
SUB angle, 5
CASE 27
CLOSEW #1
END
ENDSELECT
SELECT map(INT(px / 1000), INT(py / 1000))
CASE 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
' SOUND 500, .5
px = opx
py = opy
CASE 17
INC cfloor
GOTO nextfloor
ENDSELECT
IF angle < 0
ADD angle,360
ENDIF
IF angle > 359
SUB angle,360
ENDIF
LOOP
mapdata1:
DATA 07,08,07,08,07,08,07,08,07,08
DATA 08,00,08,00,00,00,08,00,00,07
DATA 07,00,07,00,00,00,07,00,00,08
DATA 08,00,08,00,16,00,08,07,00,07
DATA 07,00,07,00,00,00,00,00,00,08
DATA 08,00,00,00,00,00,00,00,00,07
DATA 07,00,07,08,07,08,07,00,00,08
DATA 08,00,00,00,08,00,08,00,00,07
DATA 07,00,00,00,07,00,00,00,00,08
DATA 08,07,08,00,08,07,00,07,08,07
DATA 07,17,07,00,00,00,00,00,00,08
DATA 08,00,08,00,08,00,00,07,00,07
DATA 07,00,07,00,07,00,00,08,00,08
DATA 08,00,08,00,08,00,00,07,00,07
DATA 07,00,07,08,07,08,00,08,00,08
DATA 08,00,00,00,00,07,00,07,00,07
DATA 07,08,07,00,07,08,00,08,00,08
DATA 08,00,08,00,08,00,00,00,00,07
DATA 07,00,00,00,00,00,00,00,00,08
DATA 08,07,08,07,08,07,08,07,08,07
mapdata2:
DATA 05,03,05,03,05,03,05,03,05,03
DATA 03,00,03,00,00,05,00,00,00,05
DATA 05,00,05,00,00,03,00,03,00,03
DATA 03,00,00,00,00,05,00,05,00,05
DATA 05,00,05,00,00,03,00,03,00,03
DATA 03,00,03,05,03,05,00,05,00,05
DATA 05,00,00,03,05,00,00,03,00,03
DATA 03,00,00,00,03,00,00,00,00,05
DATA 05,00,00,00,16,00,05,03,00,03
DATA 03,00,03,05,03,00,00,00,00,05
DATA 05,00,00,00,00,00,00,00,00,03
DATA 03,00,03,00,00,00,03,00,00,05
DATA 05,00,05,00,00,00,05,00,00,03
DATA 03,00,03,05,03,00,03,00,00,05
DATA 05,00,05,00,05,00,05,00,00,03
DATA 03,00,00,00,00,00,00,00,03,05
DATA 05,00,00,03,00,03,00,00,00,03
DATA 03,05,03,05,00,05,03,05,00,05
DATA 05,17,00,00,00,00,05,00,00,03
DATA 03,05,03,05,03,05,03,05,03,05
mapdata3:
DATA 04,07,04,07,04,07,04,07,04,07
DATA 07,00,00,00,00,00,00,00,17,04
DATA 04,07,04,07,04,07,00,07,00,07
DATA 07,00,00,00,00,04,00,04,00,04
DATA 04,00,04,07,00,07,00,07,00,07
DATA 07,00,00,04,00,00,00,04,00,04
DATA 04,07,04,07,00,07,00,00,00,07
DATA 07,00,00,00,00,00,00,00,00,04
DATA 04,07,04,07,04,07,04,07,00,07
DATA 07,00,00,00,00,00,00,00,00,04
DATA 04,00,00,00,04,07,04,00,04,07
DATA 07,00,07,04,07,00,07,00,00,04
DATA 04,00,00,00,00,00,04,00,07,07
DATA 07,00,07,04,07,04,07,00,00,04
DATA 04,00,00,00,00,00,04,07,00,07
DATA 07,00,07,04,07,00,07,00,00,04
DATA 04,00,04,00,04,00,04,00,04,07
DATA 07,00,07,00,07,00,07,00,00,04
DATA 04,16,04,00,00,00,04,00,00,07
DATA 07,04,07,04,07,04,07,04,07,04
'
PROCEDURE intro
OPENW #1,(_X / 2) - 160,(_Y / 2) - 100,320,200,80
TITLEW #1," Chaos Dungeon"
CLS
COLOR 4
PRINT "C H A O S D U N G E O N"
PRINT
COLOR 15
PRINT "GEEK BASIC SOFTWARE"
PRINT
COLOR 1
PRINT "WELCOME TO THE DUNGEON, BRAVE ADVENTURER!"
PRINT "YOUR GOAL IS TO ESCAPE FROM THE DUNGEON."
PRINT "THERE WILL BE A NUMBER OF FLOORS IN THE DUNGEON."
PRINT "EACH WILL HAVE AN EXIT TO THE NEXT FLOOR."
PRINT "REACH THE FINAL EXIT AND YOU WILL BE VICTORIOUS!"
PRINT
PRINT "USE THE ARROW KEYS TO MOVE A` ND ESCAPE TO EXIT."
PRINT
PRINT "PRESS ANY KEY TO BEGIN YOUR ADVENTURE..."
DO
LOOP UNTIL INKEY$ <> ""
RETURN
'
PROCEDURE win
COLOR 1
PRINT "YOU HAVE REACHED THE END OF THE DUNGEON!!!"
PRINT "VICTORY!"
END
RETURN
Le source est convertit (mais pas optimisé), il est possible d'y jouer (touches fléchées pour se déplacer), ESC pour quitter...
La présentation (
intro) et la fin (
win) sont en vrac mais pas d'importance on améliorera tout ça après...
Sur PC c'est très fluide (la fenêtre est petite sur du 1280x1024 !), il faut maintenant l'adapter en GFA et l'optimiser (calculs en entiers, le maximum de précalculs...) et là c'est une autre paire de manches.
A suivre...
Fantomas
