Le jeu Soko-Ban est un jeu de réflexion consistant à déplacer des caisses dans un entrepôt de façon à les mettre tous dans un même emplacement (soit au dessus «.» de ce prototype de jeu) pour chacun des étages. Ce qui rend le jeu plus difficile, c'est le fait que ne peut pas tiré des caisses, on peut seulement les pousser. Si vous ne savez pas comment jouer, enfoncé la touche F3 dans le première étage, et le bonhomme sourire déplacera pour vous chacun des cases au dessus des 6 points.
J'ai développé à l'origine cette version du jeu avec ma bibliothèque personnelle graphique, mais par souci de portabilité, j'ai préféré le transformer en écran de texte et ainsi, il est possible par exemple de jouer à ce jeu également avec d'autres compilateurs de Pascal comme Free Pascal.
Le jeu est en quelque sorte un labyrinthe avec des endroits précis où ses les caisses, les murs et le bonhomme. Ainsi, il faut donc, des tableaux de constantes (Tab001, Tab002,...) correspondant à chacun des étages. La génération des étages de façon aléatoire n'aurait pas garantie, d'une part, le niveau de difficulté et deuxièmement qu'il n'y aurait pas été impossible de faire l'étage.
Une démonstration dans le première étage est inclus dans le code sous forme d'une liste de constante correspondant à chacun des déplacements du clavier dans la constante (Solution001). Le jeu changera la variable Run:=True afin de permettre de déplacer automatiquement le joueur. Une pause est naturellement inclus en chaque déplacement (sous la forme de la procédure WaitRetace) afin de permettre à l'utilisateur de constater le déplacement effectué et de comprendre la stratégie à appliquer.
Le moteur de jeu est simplement une boucle attendant que l'utilisateur enfonce une touche du clavier avant d'effectuer une action : kbLeft pour la touche ←, kbRight pour la touche →, kbUp pour la touche ↑, kbDn pour la touche ↓,...
L'exemple de jeu Soko-Ban suivant est développé en Turbo Pascal 7 et fonctionne également sous Free Pascal. Voici le code source en Turbo Pascal du jeu :
- Program SOKOBAN;
-
- Uses Crt,DOS,Strings;
-
- Const
- {Code de touche clavier renvoyée par ReadKey}
- kbNoKey=0;{Pas de touche}
- kbEsc=$001B;{Escape}
- kbUp=$4800;{Up : Caractère : H}
- kbLeft=$4B00;{Flèche de gauche (Left) : K }
- kbRight=$4D00;{Flèche de droite (Right) : M }
- kbDn=$5000;{Flèche du bas (Down) : P }
- kbHome=$4700;{Home}
- kbTab=$0F09;{Tabulation}
- kbEnd=$4F00;{End}
- kbEnter=$000D;{Enter}
- kbF1=$3B00;{F1}
- kbF2=$3C00;{F2}
- kbF3=$3D00;{F3}
- kbF4=$3E00;{F4}
- kbF5=$3F00;{F5}
- kbF6=$4000;{F6}
- kbF7=$4100;{F7}
- kbF8=$4200;{F8}
- kbF9=$4300;{F9}
- kbF10=$4400;{F10}
-
- Const
- Tab001:Array[0..11]of PChar=('~~~~#####~~~~~~~~~~',
- '~~~~# #~~~~~~~~~~',
- '~~~~#$ #~~~~~~~~~~',
- '~~### $##~~~~~~~~~',
- '~~# $ $ #~~~~~~~~~',
- '### # ## #~~~######',
- '# # ## ##### ..#',
- '# $ $ ..#',
- '##### ### #@## ..#',
- '~~~~# #########',
- '~~~~#######~~~~~~~~',
- NIL);
- Solution001:Array[0..255]of Word=(
- kbUp,kbLeft,kbLeft,kbLeft,kbUp,kbUp,kbUp,kbLeft,kbUp,
- kbLeft,kbLeft,kbDn,kbLeft,kbLeft,kbDn,kbDn,kbDn,kbRight,
- kbRight,kbRight,kbRight,kbRight,kbRight,kbRight,kbRight,
- kbRight,kbRight,kbRight,kbRight,kbRight,kbDn,kbRight,
- kbUp,kbLeft,kbLeft,kbLeft,kbLeft,kbLeft,kbLeft,kbLeft,
- kbLeft,kbLeft,kbLeft,kbLeft,kbLeft,kbLeft,kbLeft,kbUp,
- kbLeft,kbLeft,kbDn,kbRight,kbRight,kbRight,kbRight,
- kbRight,kbRight,kbRight,kbRight,kbRight,kbRight,kbRight,
- kbRight,kbRight,kbRight,kbUp,kbRight,kbDn,kbLeft,kbDn,
- kbRight,kbLeft,kbUp,kbLeft,kbLeft,kbLeft,kbLeft,kbLeft,
- kbLeft,kbLeft,kbUp,kbUp,kbUp,kbLeft,kbUp,kbLeft,kbLeft,
- kbDn,kbDn,kbDn,kbUp,kbUp,kbLeft,kbLeft,kbDn,kbDn,kbDn,
- kbRight,kbRight,kbRight,kbRight,kbRight,kbRight,kbRight,
- kbRight,kbRight,kbRight,kbRight,kbRight,kbRight,kbLeft,
- kbLeft,kbLeft,kbLeft,kbLeft,kbLeft,kbLeft,kbLeft,kbUp,
- kbUp,kbUp,kbLeft,kbLeft,kbUp,kbLeft,kbDn,kbDn,kbDn,kbUp,
- kbUp,kbLeft,kbLeft,kbDn,kbDn,kbDn,kbRight,kbRight,
- kbRight,kbRight,kbRight,kbRight,kbRight,kbRight,kbRight,
- kbRight,kbRight,kbRight,kbLeft,kbLeft,kbLeft,kbLeft,
- kbLeft,kbLeft,kbLeft,kbLeft,kbRight,kbUp,kbUp,kbUp,kbLeft,
- kbLeft,kbUp,kbUp,kbUp,kbLeft,kbDn,kbDn,kbDn,kbDn,kbDn,kbUp,
- kbUp,kbLeft,kbLeft,kbDn,kbDn,kbDn,kbRight,kbRight,kbRight,
- kbRight,kbRight,kbRight,kbRight,kbRight,kbRight,kbRight,
- kbRight,kbDn,kbRight,kbUp,kbLeft,kbUp,kbRight,kbLeft,kbDn,
- kbLeft,kbLeft,kbLeft,kbLeft,kbLeft,kbLeft,kbUp,kbUp,kbUp,
- kbLeft,kbLeft,kbUp,kbUp,kbUp,kbRight,kbDn,kbDn,kbLeft,
- kbLeft,kbDn,kbDn,kbDn,kbDn,kbRight,kbRight,kbRight,kbUp,
- kbUp,kbUp,kbLeft,kbLeft,kbUp,kbLeft,kbDn,kbDn,kbDn,kbUp,
- kbUp,kbLeft,kbLeft,kbDn,kbDn,kbDn,kbRight,kbRight,kbRight,
- kbRight,kbRight,kbRight,kbRight,kbRight,kbRight,kbRight,
- kbRight,kbUp,kbRight,kbDn,kbLeft,kbDn,kbRight
- );
- Tab002:Array[0..10]of PChar=('############~~',
- '#.. # ###',
- '#.. # $ $ #',
- '#.. #$#### #',
- '#.. @ ## #',
- '#.. # # $ ##',
- '###### ##$ $ #',
- '~~# $ $ $ $ #',
- '~~# # #',
- '~~############',
- NIL);
- Tab003:Array[0..10]of PChar=('~~~~~~~~########~',
- '~~~~~~~~# @#~',
- '~~~~~~~~# $#$ ##~',
- '~~~~~~~~# $ $#~~',
- '~~~~~~~~##$ $ #~~',
- '######### $ # ###',
- '#.... ## $ $ #',
- '##... $ $ #',
- '#.... ##########',
- '########~~~~~~~~~',
- NIL);
-
- Tab004:Array[0..14]of PChar=('~~~~~~~~~~~########',
- '~~~~~~~~~~~# ....#',
- '############ ....#',
- '# # $ $ ....#',
- '# $$$#$ $ # ....#',
- '# $ $ # ....#',
- '# $$ #$ $ $########',
- '# $ # #~~~~~~~',
- '## #########~~~~~~~',
- '# # ##~~~~~~~',
- '# $ ##~~~~~~~',
- '# $$#$$ @#~~~~~~~',
- '# # ##~~~~~~~',
- '###########~~~~~~~~',
- NIL);
- Tab005:Array[0..13]of PChar=('~~~~~~~~#####~~~~',
- '~~~~~~~~# #####',
- '~~~~~~~~# #$## #',
- '~~~~~~~~# $ #',
- '######### ### #',
- '#.... ## $ $###',
- '#.... $ $$ ##~',
- '#.... ##$ $ @#~',
- '######### $ ##~',
- '~~~~~~~~# $ $ #~',
- '~~~~~~~~### ## #~',
- '~~~~~~~~~~# #~',
- '~~~~~~~~~~######~',
- NIL);
- Tab006:Array[0..11]of PChar=('######~~###~',
- '#.. #~##@##',
- '#.. ### #',
- '#.. $$ #',
- '#.. # # $ #',
- '#..### # $ #',
- '#### $ #$ #',
- '~~~# $# $ #',
- '~~~# $ $ #',
- '~~~# ## #',
- '~~~#########',
- NIL);
- Tab007:Array[0..12]of PChar=('~~~~~~~#####~',
- '~####### ##',
- '## # @## $$ #',
- '# $ #',
- '# $ ### #',
- '### #####$###',
- '# $ ### ..#~',
- '# $ $ $ ...#~',
- '# ###...#~',
- '# $$ #~#...#~',
- '# ###~#####~',
- '####~~~~~~~~~',
- NIL);
- Tab008:Array[0..16]of PChar=('~~####~~~~~~~~~~',
- '~~# ###########',
- '~~# $ $ $ #',
- '~~# $# $ # $ #',
- '~~# $ $ # #',
- '### $# # #### #',
- '#@#$ $ $ ## #',
- '# $ #$# # #',
- '# $ $ $ $ #',
- '##### #########',
- '~~# #~~~~~~',
- '~~# #~~~~~~',
- '~~#......#~~~~~~',
- '~~#......#~~~~~~',
- '~~#......#~~~~~~',
- '~~########~~~~~~',
- NIL);
- Tab009:Array[0..14]of PChar=('~~~~~~~~~~#######',
- '~~~~~~~~~~# ...#',
- '~~~~~~##### ...#',
- '~~~~~~# . .#',
- '~~~~~~# ## ...#',
- '~~~~~~## ## ...#',
- '~~~~~### ########',
- '~~~~~# $$$ ##~~~~',
- '~##### $ $ #####',
- '## #$ $ # #',
- '#@ $ $ $ $ #',
- '###### $$ $ #####',
- '~~~~~# #~~~~',
- '~~~~~########~~~~',
- NIL);
- Tab010:Array[0..16]of PChar=('~###~~#############',
- '##@#### # #',
- '# $$ $$ $ $ ...#',
- '# $$$# $ #...#',
- '# $ # $$ $$ #...#',
- '### # $ #...#',
- '# # $ $ $ #...#',
- '# ###### ###...#',
- '## # # $ $ #...#',
- '# ## # $$ $ $##..#',
- '# ..# # $ #.#',
- '# ..# # $$$ $$$ #.#',
- '##### # # #.#',
- '~~~~# ######### #.#',
- '~~~~# #.#',
- '~~~~###############',
- NIL);
- Tab011:Array[0..15]of PChar=('~~~~~~~~~~####~~~~~',
- '~~~~~####~# #~~~~~',
- '~~~### @###$ #~~~~~',
- '~~## $ #~~~~~',
- '~## $ $$## ##~~~~~',
- '~# #$## #~~~~~',
- '~# # $ $$ # ###~~~~',
- '~# $ # # $ #####',
- '#### # $$ # #',
- '#### ## $ #',
- '#. ### ########',
- '#.. ..#~####~~~~~~~',
- '#...#.#~~~~~~~~~~~~',
- '#.....#~~~~~~~~~~~~',
- '#######~~~~~~~~~~~~',
- NIL);
- Tab012:Array[0..13]of PChar=('################~',
- '# #~',
- '# # ###### #~',
- '# # $ $ $ $# #~',
- '# # $@$ ## ##',
- '# # $ $ $###...#',
- '# # $ $ ##...#',
- '# ###$$$ $ ##...#',
- '# # ## ##...#',
- '##### ## ##...#',
- '~~~~##### ###',
- '~~~~~~~~# #~~',
- '~~~~~~~~#######~~',
- NIL);
- Tab013:Array[0..14]of PChar=('#####~####~~~~~~',
- '#...#~# ####~~~',
- '#...### $ #~~~',
- '#....## $ $###~',
- '##....## $ #~',
- '###... ## $ $ #~',
- '# ## # $ #~',
- '# ## # ### ####',
- '# $ # #$ $ #',
- '# $ @ $ $ #',
- '# # $ $$ $ ###',
- '# ###### ###~~',
- '# ##~~~~####~~~~',
- '###~~~~~~~~~~~~~',
- NIL);
- Tab014:Array[0..13]of PChar=('~~~#########~~~~~~~',
- '~~## ## ######~~',
- '### # # ###',
- '# $ #$ # # ... #',
- '# # $#@$## # #.#. #',
- '# # #$ # . . #',
- '# $ $ # # #.#. #',
- '# ## ##$ $ . . #',
- '# $ # # #$#.#. #',
- '## $ $ $ $... #',
- '~#$ ###### ## #',
- '~# #~~~~##########',
- '~####~~~~~~~~~~~~~~',
- NIL);
- Tab015:Array[0..16]of PChar=('~~~~~~~#######~~~~',
- '~####### #~~~~',
- '~# # $@$ #~~~~',
- '~#$$ # #########',
- '~# ###......## #',
- '~# $......## # #',
- '~# ###...... #',
- '## #### ### #$##',
- '# #$ # $ # #~',
- '# $ $$$ # $## #~',
- '# $ $ ###$$ # #~',
- '##### $ # #~',
- '~~~~### ### # #~',
- '~~~~~~# # #~',
- '~~~~~~######## #~',
- '~~~~~~~~~~~~~####~',
- NIL);
- Tab016:Array[0..16]of PChar=('~~~########~~~~~~',
- '~~~# # #~~~~~~',
- '~~~# $ #~~~~~~',
- '~### #$ ####~~~',
- '~# $ ##$ #~~~',
- '~# # @ $ # $#~~~',
- '~# # $ ####',
- '~## ####$## #',
- '~# $#.....# # #',
- '~# $..**. $# ###',
- '## #.....# #~~',
- '# ### #######~~',
- '# $$ # #~~~~~~~',
- '# # #~~~~~~~',
- '###### #~~~~~~~',
- '~~~~~#####~~~~~~~',
- NIL);
- Tab017:Array[0..15]of PChar=('#####~~~~~~~~~',
- '# ##~~~~~~~~',
- '# #~~####~~',
- '# $ #### #~~',
- '# $$ $ $#~~',
- '###@ #$ ##~',
- '~# ## $ $ ##',
- '~# $ ## ## .#',
- '~# #$##$ #.#',
- '~### $..##.#',
- '~~# #.*...#',
- '~~# $$ #.....#',
- '~~# #########',
- '~~# #~~~~~~~~',
- '~~####~~~~~~~~',
- NIL);
- Tab018:Array[0..14]of PChar=('~~~##########~~~',
- '~~~#.. # #~~~',
- '~~~#.. #~~~',
- '~~~#.. # ####~',
- '~~####### # ##',
- '~~# #',
- '~~# # ## # #',
- '#### ## #### ##',
- '# $ ##### # #',
- '# # $ $ # $ #',
- '# @$ $ # ##',
- '#### ## #######~',
- '~~~# #~~~~~~~',
- '~~~######~~~~~~~',
- NIL);
- Tab019:Array[0..13]of PChar=('~~~~~###########~~~',
- '~~~~~# . # #~~~',
- '~~~~~# #. @ #~~~',
- '~##### ##..# ####~~',
- '## # ..### ###',
- '# $ #... $ # $ #',
- '# .. ## ## ## #',
- '####$##$# $ # # #',
- '~~## # #$ $$ # #',
- '~~# $ # # # $## #',
- '~~# #',
- '~~# ########### #',
- '~~####~~~~~~~~~####',
- NIL);
- Tab020:Array[0..16]of PChar=('~~######~~~~~~~~~~~',
- '~~# @####~~~~~~~~',
- '##### $ #~~~~~~~~',
- '# ## ####~~~~~',
- '# $ # ## #~~~~~',
- '# $ # ##### #~~~~~',
- '## $ $ # #~~~~~',
- '## $ $ ### # #~~~~~',
- '## # $ # # #~~~~~',
- '## # #$# # #~~~~~',
- '## ### # # ######',
- '# $ #### # #....#',
- '# $ $ ..#.#',
- '####$ $# $ ....#',
- '# # ## ....#',
- '###################',
- NIL);
- Tab021:Array[0..16]of PChar=('~~~~##########~~~~~',
- '##### ####~~',
- '# # $ #@ #~~',
- '# #######$#### ###',
- '# # ## # #$ ..#',
- '# # $ # # #.#',
- '# # $ # #$ ..#',
- '# # ### ## #.#',
- '# ### # # #$ ..#',
- '# # # #### #.#',
- '# #$ $ $ #$ ..#',
- '# $ # $ $ # #.#',
- '#### $### #$ ..#',
- '~~~# $$ ###....#',
- '~~~# ##~######',
- '~~~########~~~~~~~~',
- NIL);
- Tab022:Array[0..15]of PChar=('#########~~~~~~',
- '# #~~~~~~',
- '# ####~~~',
- '## #### # #~~~',
- '## #@## #~~~',
- '# $$$ $ $$#~~~',
- '# # ## $ #~~~',
- '# # ## $ ####',
- '#### $$$ $# #',
- '~# ## ....#',
- '~# # # #.. .#',
- '~# # # ##...#',
- '~##### $ #...#',
- '~~~~~## #####',
- '~~~~~~#####~~~~',
- NIL);
- Tab023:Array[0..16]of PChar=('######~~~~~####~~~~',
- '# ####### #####',
- '# $# # $ # #',
- '# $ $ $ # $ $ #',
- '##$ $ # @# $ #',
- '# $ ########### ##',
- '# # #.......# $#~',
- '# ## # ......# #~',
- '# # $........$ #~',
- '# # $ #.... ..# #~',
- '# $ $####$#### $#~',
- '# $ ### $ $ ##',
- '# $ $ $ $ #',
- '## ###### $ ##### #',
- '# # #',
- '###################',
- NIL);
- Tab024:Array[0..14]of PChar=('~~~~#######~~~~~~~~',
- '~~~~# # ####~~~~~',
- '##### $#$ # ##~~~~',
- '#.. # # # #~~~~',
- '#.. # $#$ # $####~',
- '#. # #$ # #~',
- '#.. $# # $ #~',
- '#..@# #$ #$ # #~',
- '#.. # $# $# #~',
- '#.. # #$$#$ # ##',
- '#.. # $# # $#$ #',
- '#.. # # # # #',
- '##. #### ##### #',
- '~####~~####~~~#####',
- NIL);
- Tab025:Array[0..16]of PChar=('###############~~~~',
- '#.......... .####~',
- '#..........$$.# #~',
- '###########$ # ##',
- '# $ $ $ #',
- '## #### # $ # #',
- '# # ## # ##',
- '# $# # ## ### ##',
- '# $ #$### ### ##',
- '### $ # # ### ##',
- '### $ ## # # ##',
- '~# $ # $ $ $ #',
- '~# $ $#$$$ # #',
- '~# # $ #####',
- '~# @## # # #~~~~',
- '~##############~~~~',
- NIL);
- Tab026:Array[0..16]of PChar=('####~~~~~~~~~~~~~~~',
- '# ##############~~',
- '# # ..#......#~~',
- '# # # ##### ...#~~',
- '##$# ........#~~',
- '# ##$###### ####',
- '# $ # ######@ #',
- '##$ # $ ###### #',
- '# $ #$$$## #',
- '# # #$#$###',
- '# #### #$$$$$ #~',
- '# # $ # #~',
- '# # ## ###',
- '# ######$###### $ #',
- '# #~~~~# #',
- '##########~~~~#####',
- NIL);
- Tab027:Array[0..12]of PChar=('~#######~~~~~~~',
- '~# # #####~~~',
- '## # #...###~',
- '# $# #... #~',
- '# $ #$$ ... #~',
- '# $# #... .#~',
- '# # $########',
- '##$ $ $ #',
- '## # $$ # #',
- '~###### ##$$@#',
- '~~~~~~# ##',
- '~~~~~~########~',
- NIL);
- Tab028:Array[0..13]of PChar=('~#################~',
- '~#... # # ##',
- '##..... $## # #$ #',
- '#......# $ # #',
- '#......# # # # #',
- '######### $ $ $ #',
- '~~# #$##$ ##$##',
- '~## $ # $ #',
- '~# ## ### # ##$ #',
- '~# $ $$ $ $ #',
- '~# $ $##$ ######',
- '~####### @ ##~~~~~',
- '~~~~~~~######~~~~~~',
- NIL);
- Tab029:Array[0..15]of PChar=('~~~~~~~~~#####~~~',
- '~~~~~##### #~~~',
- '~~~~## $ $ ####',
- '##### $ $ $ ##.#',
- '# $$ ##..#',
- '# ###### ###.. #',
- '## # # #... #',
- '# $ # #... #',
- '#@ #$ ## ####...#',
- '#### $ $$ ##..#',
- '~~~## $ $ $...#',
- '~~~~# $$ $ # .#',
- '~~~~# $ $ ####',
- '~~~~###### #~~~',
- '~~~~~~~~~#####~~~',
- NIL);
- Tab030:Array[0..13]of PChar=('#####~~~~~~~~~~~~~~',
- '# ##~~~~~~~~~~~~~',
- '# $ #########~~~~~',
- '## # # ######',
- '## # $#$#@ # #',
- '# # $ # $ #',
- '# ### ######### ##',
- '# ## ..*..... # ##',
- '## ## *.*..*.* # ##',
- '# $########## ##$ #',
- '# $ $ $ $ #',
- '# # # # # #',
- '###################',
- NIL);
- Tab031:Array[0..14]of PChar=('~~~~~~~###########~',
- '~~~~~~~# # #~',
- '#####~~# $ $ #~',
- '# ##### $## # ##~',
- '# $ ## # ## $ #~',
- '# $ @$$ # ##$$$ #~',
- '## ### # ## #~',
- '## # ### #####$#~',
- '## # $ #....#~',
- '# ### ## $ #....##',
- '# $ $ # #..$. #',
- '# ## $ # ##.... #',
- '##### ######...##',
- '~~~~#####~~~~#####~',
- NIL);
- Tab032:Array[0..16]of PChar=('~~####~~~~~~~~~~~~',
- '~~# #########~~~~',
- '~## ## # #~~~~',
- '~# $# $@$ ####~',
- '~#$ $ # $ $# ##',
- '## $## #$ $ #',
- '# # # # $$$ #',
- '# $ $ $## ####',
- '# $ $ #$# # #~~~',
- '## ### ###$ #~~~',
- '~# #.... #~~~',
- '~####......####~~~',
- '~~~#....####~~~~~~',
- '~~~#...##~~~~~~~~~',
- '~~~#...#~~~~~~~~~~',
- '~~~#####~~~~~~~~~~',
- NIL);
- Tab033:Array[0..15]of PChar=('~~~~~~####~~~',
- '~~##### #~~~',
- '~## $#~~~',
- '## $ ## ###~',
- '#@$ $ # $ #~',
- '#### ## $#~',
- '~#....#$ $ #~',
- '~#....# $#~',
- '~#.... $$ ##',
- '~#... # $ #',
- '~######$ $ #',
- '~~~~~~# ###',
- '~~~~~~#$ ###~',
- '~~~~~~# #~~~',
- '~~~~~~####~~~',
- NIL);
- Tab034:Array[0..15]of PChar=('############',
- '## ## #',
- '## $ $ #',
- '#### ## $$ #',
- '# $ # #',
- '# $$$ # ####',
- '# # # $ ##',
- '# # # $ #',
- '# $# $# #',
- '# ..# ####',
- '####.. $ #@#',
- '#.....# $# #',
- '##....# $ #',
- '###..## #',
- '############',
- NIL);
- Tab035:Array[0..15]of PChar=('~#########~~~~',
- '~#.... ##~~~',
- '~#.#.# $ ##~~',
- '##....# # @##~',
- '# ....# # ##',
- '# #$ ##$ #',
- '## ### $ #',
- '~#$ $ $ $# #',
- '~# # $ $ ## #',
- '~# ### ## #',
- '~# ## ## ##',
- '~# $ # $ #~',
- '~###$ $ ###~',
- '~~~# #####~~~',
- '~~~####~~~~~~~',
- NIL);
- Tab036:Array[0..16]of PChar=('############~######',
- '# # # ###....#',
- '# $$# @ .....#',
- '# # ### # ....#',
- '## ## ### # ....#',
- ' # $ $ # # ####',
- ' # $ $## # #',
- '#### # #### # ## #',
- '# # #$ ## # #',
- '# $ $ # ## # ##',
- '# # $ $ # # #~',
- '# $ ## ## # #####~',
- '# $$ $$ #~~~~~',
- '## ## ### $ #~~~~~',
- '~# #~# #~~~~~',
- '~######~######~~~~~',
- NIL);
- Tab037:Array[0..16]of PChar=('~~~~~~~~~~~~#####~~',
- '#####~~###### #~~',
- '# #### $ $ $ #~~',
- '# $ ## ## ## ##~',
- '# $ $ $ $ #~',
- '### $ ## ## ##',
- '~~# ##### #####$$ #',
- '~##$##### @## #',
- '~# $ ###$### $ ##',
- '~# $ # ### ###~',
- '~# $$ $ # $$ #~~~',
- '~# # ## #~~~',
- '~#######.. .###~~~~',
- '~~~~#.........#~~~~',
- '~~~~#.........#~~~~',
- '~~~~###########~~~~',
- NIL);
- Tab038:Array[0..15]of PChar=('###########~~~~~~~~',
- '#...... #########',
- '#...... # ## #',
- '#..### $ $ #',
- '#... $ $ # ## #',
- '#...#$##### # #',
- '### # #$ #$ #',
- '~~# $$ $ $ $## #',
- '~~# $ #$#$ ##$ #',
- '~~### ## # ## #',
- '~~~# $ $ ## ######',
- '~~~# $ $ #~~~~',
- '~~~## # # #~~~~',
- '~~~~#####@#####~~~~',
- '~~~~~~~~###~~~~~~~~',
- NIL);
- Tab039:Array[0..11]of PChar=('~~~~~~####~',
- '####### @#~',
- '# $ #~',
- '# $## $#~',
- '##$#...# #~',
- '~# $... #~',
- '~# #. .# ##',
- '~# # #$ #',
- '~#$ $ #',
- '~# #######',
- '~####~~~~~~',
- NIL);
- Tab040:Array[0..16]of PChar=('~~~~~~~~~~~~~######',
- '~#############....#',
- '## ## ##....#',
- '# $$## $ @##....#',
- '# $$ $# ....#',
- '# $ ## $$ # # ...#',
- '# $ ## $ # ....#',
- '## ##### ### ##.###',
- '## $ $ ## . #',
- '# $### # ##### ###',
- '# $ # #~~',
- '# $ #$ $ $### #~~',
- '# $$$# $ #~####~~',
- '# # $$ #~~~~~~~',
- '###### ###~~~~~~~',
- '~~~~~#####~~~~~~~~~',
- NIL);
- Tab041:Array[0..16]of PChar=('~~~~############~',
- '~~~~# ##',
- '~~~~# # #$$ $ #',
- '~~~~#$ #$# ## @#',
- '~~~## ## # $ # ##',
- '~~~# $ #$ # #~',
- '~~~# # $ # #~',
- '~~~## $ $ ## #~',
- '~~~# # ## $ #~',
- '~~~# ## $$# #~',
- '######$$ # #~',
- '#....# ########~',
- '#.#... ##~~~~~~~~',
- '#.... #~~~~~~~~',
- '#.... #~~~~~~~~',
- '#########~~~~~~~~',
- NIL);
- Tab042:Array[0..15]of PChar=('~~~~~~~~~~~#####~~~',
- '~~~~~~~~~~## ##~~',
- '~~~~~~~~~## #~~',
- '~~~~~~~~## $$ #~~',
- '~~~~~~~## $$ $ #~~',
- '~~~~~~~# $ $ #~~',
- '####~~~# $$ #####',
- '# ######## ## #',
- '#. $$$@#',
- '#.# ####### ## ##',
- '#.# #######. #$ $##',
- '#........... # #',
- '############## $ #',
- '~~~~~~~~~~~~~## ##',
- '~~~~~~~~~~~~~~####~',
- NIL);
- Tab043:Array[0..13]of PChar=('~~~~~########~~~~~',
- '~~#### ######',
- '~~# ## $ $ @#',
- '~~# ## ##$#$ $ $##',
- '### ......# $$ ##',
- '# ......# # #',
- '# # ......#$ $ #',
- '# #$...... $$# $ #',
- '# ### ###$ $ ##',
- '### $ $ $ $ #~',
- '~~# $ $ $ $ #~',
- '~~###### ######~',
- '~~~~~~~#####~~~~~~',
- NIL);
- Tab044:Array[0..11]of PChar=('~~~~~~~~#######~~~~',
- '~~~~##### # ####~',
- '~~~~# # $ #~',
- '~#### #$$ ## ## #~',
- '## # # ## ###',
- '# ### $#$ $ $ #',
- '#... # ## # #',
- '#...# @ # ### ##',
- '#...# ### $ $ #',
- '########~## # #',
- '~~~~~~~~~~#########',
- NIL);
- Tab045:Array[0..15]of PChar=('~#####~~~~~~~~~~~~~',
- '~# #~~~~~~~~~~~~~',
- '~# # #######~~~~~~~',
- '~# $@######~~~',
- '~# $ ##$ ### #~~~',
- '~# #### $ $ #~~~',
- '~# ##### # #$ ####',
- '## #### ##$ #',
- '# $# $ # ## ## #',
- '# # #...# #',
- '###### ### ... #',
- '~~~~~####~# #...# #',
- '~~~~~~~~~~# ### # #',
- '~~~~~~~~~~# #',
- '~~~~~~~~~~#########',
- NIL);
- Tab046:Array[0..16]of PChar=('##########~~~~',
- '# ####~',
- '# ###### # ##',
- '# # $ $ $ $ #',
- '# #$ #',
- '###$ $$# ###',
- '~~# ## # $##~',
- '~~##$# $ @#~',
- '~~~# $ $ ###~',
- '~~~# # $ #~',
- '~~~# ## # #~',
- '~~## ##### #~',
- '~~# #~',
- '~~#.......###~',
- '~~#.......#~~~',
- '~~#########~~~',
- NIL);
- Tab047:Array[0..11]of PChar=('~~~~~~~~~####~~~~~',
- '~######### ##~~~~',
- '## $ $ #####',
- '# ## ## ##...#',
- '# #$$ $ $$#$##...#',
- '# # @ # ...#',
- '# $# ###$$ ...#',
- '# $ $$ $ ##....#',
- '###$ #######',
- '~~# #######~~~~~~',
- '~~####~~~~~~~~~~~~',
- NIL);
- Tab048:Array[0..16]of PChar=('~~#########~~',
- '~~#*.*#*.*#~~',
- '~~#.*.*.*.#~~',
- '~~#*.*.*.*#~~',
- '~~#.*.*.*.#~~',
- '~~#*.*.*.*#~~',
- '~~### ###~~',
- '~~~~# #~~~~',
- '###### ######',
- '# #',
- '# $ $ $ $ $ #',
- '## $ $ $ $ ##',
- '~#$ $ $ $ $#~',
- '~# $@$ #~',
- '~# ##### #~',
- '~####~~~####~',
- NIL);
- Tab049:Array[0..15]of PChar=('~~~~~~~####~~~~~',
- '~~~~~~~# ##~~~~',
- '~~~~~~~# ##~~~',
- '~~~~~~~# $$ ##~~',
- '~~~~~###$ $ ##~',
- '~~#### $ #~',
- '### # ##### #~',
- '# # #....$ #~',
- '# # $ ....# #~',
- '# $ # #.*..# #~',
- '### #### ### #~',
- '~~#### @$ ##$##',
- '~~~~~### $ #',
- '~~~~~~~# ## #',
- '~~~~~~~#########',
- NIL);
- Tab050:Array[0..16]of PChar=('~~~~~~############~',
- '~~~~~##.. # #~',
- '~~~~##..* $ $ #~',
- '~~~##..*.# # # $##~',
- '~~~#..*.# # # $ #~',
- '####...# # # #~',
- '# ## # #~',
- '# @$ $ ### # ##~',
- '# $ $ # # #~~',
- '###$$ # # # # #~~',
- '~~# $ # # #####',
- '~~# $# ##### #',
- '~~#$ #~~~# # #',
- '~~# ###~~~## #',
- '~~# #~~~~~~# ##',
- '~~####~~~~~~######~',
- NIL);
- Tab051:Array[0..12]of PChar=('#########~~~~',
- '# #~~~~',
- '# $ $#~~~~',
- '#### #~~~~',
- '~~~# $ ##~~~',
- '#### $ #~~~',
- '#.. $ ## ####',
- '#.. $## #',
- '#.. $ #',
- '#.###$### #@#',
- '#.#~# ###',
- '###~#######~~',
- NIL);
- Tab052:Array[0..12]of PChar=('####################',
- '# ########## @#',
- '# $# # ######',
- '# #### # ###',
- '##### # ###',
- '# $ # ###',
- '# $#### # # #',
- '# # # #..#$### # #',
- '# # #$ #..# $ $$ #',
- '# #..# # # #',
- '# # #..# # # #',
- '####################',
- NIL);
- Tab053:Array[0..12]of PChar=('####################',
- '# ###',
- '# $# $ ## $ ##',
- '# $### # $$ ##',
- '#.### $ $ ## ##',
- '#...# # # #$ #',
- '#..##$$#### $ # #',
- '#...# $ ## ###',
- '#...$ ### # # #',
- '##.. $# ## ##@ #',
- '###.# #',
- '####################',
- NIL);
- Tab054:Array[0..12]of PChar=('####################',
- '# # # # #@#',
- '# $ $ $ # #',
- '## ###..## ### #',
- '# #....#$# $### #',
- '# $ #....# $ $ $ #',
- '# #....# # # $ $ #',
- '# ##..## #$# #',
- '##$## ## # #$##',
- '# $ $ # # #',
- '# # # # #',
- '####################',
- NIL);
- Tab055:Array[0..12]of PChar=('####################',
- '# @## # ##',
- '# ## $ $ ##',
- '# ###....# # # ###',
- '# #....# # # $ #',
- '### #...# # #',
- '## ##.# $ $ #',
- '## $ $ ### # # ###',
- '## $ # # $ #',
- '#### $ $# # # # $ #',
- '#### # # ##',
- '####################',
- NIL);
- Tab056:Array[0..12]of PChar=('####################',
- '# # ## # @###',
- '## $ # $### #',
- '##$# $ ##$# $ $ #',
- '# $# $ ###',
- '# ## $ ### #....#',
- '# # $# # # # #....##',
- '# $ $ # #....###',
- '##$ ### $ #....####',
- '# # $ ######',
- '# # # ######',
- '####################',
- NIL);
- Tab057:Array[0..12]of PChar=('####################',
- '#@ ### # # #',
- '# # # # $ $ #',
- '##### # $ $#$# #',
- '#.#..# ##$ $ #',
- '#..... $ # ##',
- '#..... ###$##$###',
- '#.#..# $ # #',
- '##### # #$ $ #',
- '##### # $ $ $ #',
- '##### # # # # #',
- '####################',
- NIL);
- Tab058:Array[0..12]of PChar=('####################',
- '##... ## # # #',
- '#.... $ ## #',
- '#....# # #$###$ #',
- '#...# # # #',
- '##.# #$ # $## #',
- '# # # $ $ ### $ #',
- '# $ $ # # ## #',
- '## # ## #$$# $# # #',
- '# # $ $ # ##',
- '# # # # @#',
- '####################',
- NIL);
-
- Tab059:Array[0..12]of PChar=('####################',
- '# # #@# ## #####',
- '# # # $ $ #####',
- '# # ###### $ ###',
- '# # #....# $$ #',
- '##$##$##....# #',
- '# #....##$##$##',
- '# $$ #....# #',
- '# $ $ # # ### #',
- '##### $ $ $ #',
- '##### # # # ##',
- '####################',
- NIL);
- Tab060:Array[0..12]of PChar=('####################',
- '# ###..### #',
- '# $$ ###..### $@ #',
- '# # ##......# $ #',
- '# #......# $ #',
- '#### ###..######$ #',
- '# $$$ #..# # #',
- '# $# $ $ $$ #$ #',
- '# # ## $ ## # #',
- '# $ $ ## $ $ #',
- '# # ## ## # #',
- '####################',
- NIL);
- Tab061:Array[0..12]of PChar=('####################',
- '# # # # # # #',
- '# @# # ## $ $ ##',
- '#### # # # $ #',
- '# # ## #$ ## ## #',
- '# $ $ $ #',
- '#..###$$## $##$ ## #',
- '#..#.# # $ $ # #',
- '#....# $$ ##$ ####',
- '#....# ##### #',
- '#...### ## #',
- '####################',
- NIL);
- Tab062:Array[0..12]of PChar=('####################',
- '#....# # # #',
- '#....# # $ $ #',
- '#.... ## $# # $#$ #',
- '#...# $ $# $ #',
- '#..#### # $ $$ #',
- '# #### #### ###',
- '# # # #',
- '# ## # $ # $ $ #',
- '# ## $ ## $ $ #',
- '# @# # # #',
- '####################',
- NIL);
- Tab063:Array[0..12]of PChar=('####################',
- '#....### #',
- '#....##### # #$# ##',
- '#....### #$ $ #',
- '#....### $ #$$##',
- '## #### $# #$ $ #',
- '## #### $ $ # #',
- '#@ ####$###$## $ #',
- '## # # $ #',
- '## ### # $ ####',
- '######## # # #',
- '####################',
- NIL);
- Tab064:Array[0..12]of PChar=('####################',
- '# # @#...###',
- '# # ##...##',
- '# # # ##$## ## ....#',
- '# $ # $$$ ....#',
- '###$### $$ ### ##.#',
- '# $ # # ####',
- '# $ # ### # # #',
- '## #$## $ $$ #',
- '# $ ## # # # #',
- '# # # # #',
- '####################',
- NIL);
- Tab065:Array[0..12]of PChar=('####################',
- '# # #...#@ #',
- '# # ....# #',
- '# $ # #....# #',
- '# ##$#### ##....# #',
- '# $ $ # #...# #',
- '# $$ # # # $$ #',
- '### $$$# $$ $ #',
- '# $ # # # $# #',
- '# $# # $ #',
- '# # # # # #',
- '####################',
- NIL);
- Tab066:Array[0..12]of PChar=('####################',
- '#####@###.##...## #',
- '#####$ ..#...# #',
- '#### ......# $ #',
- '### $ #.....## # ##',
- '## $$# ##### $ $ #',
- '## $# $ ## $$ #',
- '## # # # $ $ #',
- '## $$ ### #$## #',
- '## $# $ $ $ ##',
- '### # # ###',
- '####################',
- NIL);
- Tab067:Array[0..12]of PChar=('####################',
- '#@ # # #',
- '## ### ## #### # ##',
- '# # # $$ #',
- '# # # # $ # $ ## ##',
- '# $ # #$$ # #',
- '# ### # ## ##',
- '#..#.# $ # $ # #',
- '#..#.# $ # ## $$ #',
- '#....## $$ $ # #',
- '#.....## # #',
- '####################',
- NIL);
- Tab068:Array[0..12]of PChar=('####################',
- '# # # # ##',
- '# $# $ $ ##...$ $ #',
- '# $ # ##....# $ #',
- '# ## $ ##....# $ #',
- '# $ #....## $ #',
- '# $## #...# #',
- '# $$$##$## ### ##',
- '# # # # # # #',
- '# $ # $ ## #',
- '# # #@ #',
- '####################',
- NIL);
- Tab069:Array[0..12]of PChar=('####################',
- '# # # # # # #',
- '# $ $ $ #',
- '## # #$###$## ## #',
- '# $ $ # $ #',
- '# ###$##$# # $ #',
- '# # $ $ ###### $#',
- '# $ $$ $ #@#.#...#',
- '# # # # #.#...#',
- '# ########## #.....#',
- '# #.....#',
- '####################',
- NIL);
- Tab070:Array[0..12]of PChar=('####################',
- '# # # ## ##',
- '# $# $ # ## #',
- '# $ $ #..# $ #',
- '# $ $ #....# # ##',
- '# $# #......### $ #',
- '# # #....# #$ #',
- '# $ ####..# # #',
- '## $ ## # # $ $##',
- '### $ $#@$ $# #',
- '#### # # #',
- '####################',
- NIL);
- Tab071:Array[0..12]of PChar=('####################',
- '# ....# ####',
- '# .... #',
- '# # ########## #',
- '# #$ # ###..#',
- '# $ #$$### #..#',
- '# $ ### $ $ #..#',
- '# $ # $ $ # ##..#',
- '# # $$ # $ ## ##',
- '#@## $# $ $ ##',
- '## ## # ###',
- '####################',
- NIL);
- Tab072:Array[0..12]of PChar=('####################',
- '# # #@ # #',
- '# $$ #$$# # # ## #',
- '# # $ $ #$$ # #',
- '## # # # # # # #',
- '# ## # #',
- '# # $ # # # #',
- '# $ #$ # # $ #..#',
- '##$ # #### #...#',
- '# $ #....#',
- '# # # #.....#',
- '####################',
- NIL);
- Tab073:Array[0..12]of PChar=('####################',
- '# # ##### #',
- '## $ # #### $ #',
- '#### $$ #..# # #',
- '# $ $ ##..#### ##',
- '# $ ###.... $$ #',
- '# #$# ....# # $ #',
- '# # # $ ..###$# #',
- '# # $ #..# ## #',
- '# $# #### # $##',
- '# # # @# ##',
- '####################',
- NIL);
- Tab074:Array[0..12]of PChar=('####################',
- '# # # # #@#',
- '# $ $ # $ # #',
- '##$# $### # $$# #',
- '# # #.### #$ $ #',
- '# #$#....# # ### #',
- '# $ #.....## # #',
- '##$ #.#....#$$ $ #',
- '# ######..## # # #',
- '# $ $ ### #',
- '# # # # #',
- '####################',
- NIL);
- Tab075:Array[0..12]of PChar=('####################',
- '# # # # #@## # #',
- '# $ #',
- '# ##$# ##### $ # ##',
- '## ##.....# # #',
- '##$##$#.....###$#$ #',
- '# # ##.....# # ##',
- '# $ ##..## # #',
- '# $ # $ $ $$$ #',
- '## $ $# # # $ #',
- '# ## # # #',
- '####################',
- NIL);
- Tab076:Array[0..13]of PChar=('######~~#####~',
- '# #~~# #~',
- '# $ #### $ #~',
- '# $ $ #~',
- '# ###@###$ #~',
- '########## ###',
- '#.. ## #',
- '#.. ##$ #',
- '#.. ## $ #',
- '#.. ## $ #',
- '#.. $ $ #',
- '### #########',
- '~~####~~~~~~~~',
- NIL);
- Tab077:Array[0..12]of PChar=('~~~~~~~###########~',
- '~~~~~~~# #~',
- '~~~~~~~# $ $ #~',
- '######~# $ ##### #~',
- '# ##### $ ##$#~',
- '# $ $ #~',
- '# ## ## #~',
- '# ##@##### ## #~',
- '# ####~~~# ## ##',
- '#....#~~~~~~# $ #',
- '#....#~~~~~~# #',
- '######~~~~~~#######',
- NIL);
- Tab078:Array[0..12]of PChar=('#############~~~~~~',
- '# #~~~~~~',
- '# ### $$ #~~~~~~',
- '# # $ $ #~~~~~~',
- '# $####$######~~~~',
- '# $ ## #####',
- '# $$ $ ...#',
- '### ## $$# ...#',
- '~~# ## # ...#',
- '~~# # ...#',
- '~~###@#############',
- '~~~~###~~~~~~~~~~~~',
- NIL);
- Tab079:Array[0..13]of PChar=('~~#################',
- '###@## ...#',
- '# # ...#',
- '# $ # ...#',
- '# $$ # ...#',
- '## $ ###$##########',
- '~# ### $ #~~~~~~~~',
- '## $ $ #~~~~~~~~',
- '# $ # $ #~~~~~~~~',
- '# $ # #~~~~~~~~',
- '# $ # #~~~~~~~~',
- '# # #~~~~~~~~',
- '###########~~~~~~~~',
- NIL);
- Tab080:Array[0..13]of PChar=('~~~~~~~~~~~~~~#####',
- '~~~~~########## #',
- '~~~~~# # #',
- '~~~~~# $ $ $$ #',
- '~~~~~# ##### ## $ #',
- '~~~~~#$$ #$## $ #',
- '~~~~~# ### # ##$ #',
- '###### ### $ $ #',
- '#.... ## #',
- '#.... ######',
- '#.... #~~~~~',
- '###########@##~~~~~',
- '~~~~~~~~~~###~~~~~~',
- NIL);
- Tab081:Array[0..13]of PChar=('~~~~######~~~~~~~',
- '~#### #~~~~~~~',
- '~# ## #~~~~~~~',
- '~# $ #~~~~~~~',
- '### #### ########',
- '# $ $ ## ...#',
- '# $$ $$ ...#',
- '# $ $## ...#',
- '##@## ## ## ...#',
- '~### $ ########',
- '~# $$ #~~~~~~~',
- '~# # #~~~~~~~',
- '~#########~~~~~~~',
- NIL);
- Tab082:Array[0..13]of PChar=('#######~#########',
- '# #~# ## #',
- '# ### #~# $ #',
- '# # $ ### $ #',
- '# $$ ##$ #',
- '# #### ## #',
- '#@############ ##',
- '###.. #####$ #',
- '~~#.. #### #',
- '~~#.. $$ #',
- '~~#.. #### $ #',
- '~~#.. #~~# #',
- '~~########~~#####',
- NIL);
- Tab083:Array[0..12]of PChar=('#######~~~~~~~~~',
- '# ##########',
- '# # # ##',
- '# $ # $ $ #',
- '# $ # $ ## #',
- '# $$ ##$ $ #',
- '## # ## #######',
- '## # ## ...#',
- '# #$ ...#',
- '# $$ ...#',
- '# ##@# ...#',
- '################',
- NIL);
- Tab084:Array[0..16]of PChar=('############~~~~~~~~',
- '# # ##~~~~~~~',
- '# $ $ # ######~~',
- '#### ##### #~~',
- '~#.. # #### #~~',
- '~#.#### #### #~~',
- '~#.... # $ ####~',
- '~# ...# # $$$# ##',
- '###.#### ## $@$ #',
- '# ##### $ # #',
- '# #.# $ $###$ #',
- '# #.######## # $ #',
- '# #.. ## $ #',
- '# # ####### $ # # #',
- '# #~~~~~# ##',
- '#####~~~~~##########',
- NIL);
- Tab085:Array[0..12]of PChar=('####################',
- '# # # #',
- '# $ ## ### ##',
- '##### ## $ $ #',
- '##..## # # $ # # #',
- '#.... $ ##$# ##',
- '#.... $##### #$##',
- '##..# # # # $ #',
- '###.# # $ $ # @#',
- '## $ $ # # ####',
- '## ###########',
- '####################',
- NIL);
-
- TP:Array[1..85]of Pointer=(@Tab001,@Tab002,@Tab003,@Tab004,@Tab005,
- @Tab006,@Tab007,@Tab008,@Tab009,@Tab010,
- @Tab011,@Tab012,@Tab013,@Tab014,@Tab015,
- @Tab016,@Tab017,@Tab018,@Tab019,@Tab020,
- @Tab021,@Tab022,@Tab023,@Tab024,@Tab025,
- @Tab026,@Tab027,@Tab028,@Tab029,@Tab030,
- @Tab031,@Tab032,@Tab033,@Tab034,@Tab035,
- @Tab036,@Tab037,@Tab038,@Tab039,@Tab040,
- @Tab041,@Tab042,@Tab043,@Tab044,@Tab045,
- @Tab046,@Tab047,@Tab048,@Tab049,@Tab050,
- @Tab051,@Tab052,@Tab053,@Tab054,@Tab055,
- @Tab056,@Tab057,@Tab058,@Tab059,@Tab060,
- @Tab061,@Tab062,@Tab063,@Tab064,@Tab065,
- @Tab066,@Tab067,@Tab068,@Tab069,@Tab070,
- @Tab071,@Tab072,@Tab073,@Tab074,@Tab075,
- @Tab076,@Tab077,@Tab078,@Tab079,@Tab080,
- @Tab081,@Tab082,@Tab083,@Tab084,@Tab085);
-
- Type
- TPChar=Array[0..10000]of PChar;
- TByte=Array[0..65520]of Byte;
-
- Var
- CurrPtr:^TPChar;Tab:Array[0..1,0..25]of String;
- NmElem,LenElem,NmFixe,FixeOk,XMan,YMan,Stage:Byte;
- NmMove:Word;
- MKey:Array[0..2047]of Word;
- PosKey,RunP:Word;
- Run:Boolean;
- BackgroundScreen:^TByte;
- TBi:Array[0..1999]of Byte;
-
- {$IFNDEF FPC}
- Procedure CursorOff;
- Var
- Regs:Registers;
- Begin
- Regs.AH:=1;
- Regs.CH:=32;
- Regs.CL:=0;
- Intr($10,Regs);
- End;
-
- Procedure CursorOn;
- Var
- Regs:Registers;
- Begin
- Regs.AX:=$0100;
- Regs.CX:=(7 shl 8)+9;
- Intr($10,Regs);
- End;
- {$ENDIF}
-
- Procedure PutWall(X,Y:Byte);Begin
- Dec(X);
- TextBackground(Magenta);
- TextColor(LightGray);
- GotoXY(1+X,1+Y);
- Write({$IFDEF FPC}'='{$ELSE}Chr(177){$ENDIF});
- End;
-
- Procedure PutBrick(X,Y:Byte);Begin
- Dec(X);
- TextBackground(Cyan);
- TextColor(White);
- GotoXY(1+X,1+Y);
- Write(' ');
- End;
-
- Procedure PutBox(X,Y:Byte);Begin
- Dec(X);
- TextBackground(DarkGray);
- TextColor(Brown);
- GotoXY(1+X,1+Y);
- Write({$IFDEF FPC}'X'{$ELSE}Chr(254){$ENDIF});
- End;
-
-
- Procedure PutFixe(X,Y:Byte);Begin
- Dec(X);
- TextBackground(DarkGray);
- TextColor(LightGray);
- GotoXY(1+X,1+Y);
- Write('.');
- End;
-
- Procedure UnSetMan(X,Y:Byte);Begin
- Case Tab[0][Y][X]of
- '#':PutWall(X,Y);
- ' ':PutBrick(X,Y);
- '$':PutBox(X,Y);
- '.':PutFixe(X,Y);
- End;
- End;
-
- Procedure PutMove;Begin
- GotoXY(34,25);
- TextBackground($F);
- TextColor($C);
- If(Run)Then Write(RunP)
- Else Write(NmMove);
- End;
-
- Procedure PutX(X,Y:Integer);Begin
- GotoXY(X+1,Y+1);
- Write(Chr(1));
- End;
-
- Procedure SetMan(X,Y:Byte);Begin
- Case Tab[1][Y][X]of
- '#':PutWall(X,Y);
- ' ':PutBrick(X,Y);
- '$':PutBox(X,Y);
- '.':PutFixe(X,Y);
- End;
- Dec(X);
- PutX(X,Y);
- If Not(Run)Then Begin
- If NmMove=65535 Then NmMove:=0
- Else Inc(NmMove);
- End;
- PutMove;
- End;
-
- Procedure UnPutBar;
- Var
- X,Y:Byte;
- Begin
- X:=(Stage-1)div 17;Y:=(Stage-1)mod 17;
- TextBackground(Black);
- TextColor(LightCyan);
- GotoxY(X*8+1,Y+3+1);
- Write(' ',Stage,' ':5-Byte(Stage>9));
- End;
-
- Procedure PutBar;
- Var
- X,Y:Byte;
- Begin
- X:=(Stage-1)div 17;Y:=(Stage-1)mod 17;
- TextBackground(LightCyan);
- TextColor(Black);
- GotoxY(X*8+1,Y+3+1);
- Write(' ',Stage,' ':5-Byte(Stage>9));
- End;
-
- Function Max(N,M:Byte):Byte;Begin
- If(N<M)Then Max:=N+1 Else Max:=1;
- End;
-
- Function Min(N,Max:Byte):Byte;Begin
- If N>1Then Min:=N-1 Else Min:=Max;
- End;
-
- Procedure ChoiceLevel;
- Var
- J:Byte;
- K:Word;
- Begin
- TextMode(CO40);
- TextBackground(Black);
- ClrScr;
- CursorOff;
- GotoXY(15,1);
- TextColor(Yellow);
- Write('Quel étage ?');
- TextColor(LightCyan);
- For J:=0to 16do Begin
- GotoXY(3+0,1+3+J);
- Write(J+1);
- GotoXY(3+8,1+3+J);
- Write(J+1+17);
- GotoXY(3+16,1+3+J);
- Write(J+1+17+17);
- GotoXY(3+24,1+3+J);
- Write(J+1+17+17+17);
- GotoXY(3+32,1+3+J);
- Write(J+1+17+17+17+17);
- End;
- PutBar;
- Repeat
- K:=Byte(ReadKey);
- If K=0Then K:=K or (Byte(ReadKey)shl 8);
- Case(K)of
- kbLeft:Begin
- UnPutBar;
- Stage:=Min(Stage-16,85);
- PutBar;
- End;
- kbRight:Begin
- UnPutBar;
- Stage:=Max(Stage+16,85);
- PutBar;
- End;
- kbUp:Begin
- UnPutBar;
- Stage:=Min(Stage,85);
- PutBar;
- End;
- kbDn:Begin
- UnPutBar;
- Stage:=Max(Stage,85);
- PutBar;
- End;
- kbEnter:Break;
- End;
- Until False;
- End;
-
- Procedure MemKey(K:Word);Begin
- If Not(Run)Then Begin
- MKey[PosKey]:=K;PosKey:=(PosKey+1)and 2047;
- End;
- End;
-
- Procedure Play;
- Label Restart;
- Var
- I,J,K:Word;
- Chk:Boolean;
- Begin
- ClrScr;
- Repeat
- Restart:
- PosKey:=0;Run:=False;
- TextBackground(Green);
- ClrScr;
- If Stage<=1Then Begin
- GotoXY(1,20);
- Write('F3 = Demonstration');
- End;
- GotoXY(1,25);
- TextColor($C);
- TextBackground($F);
- ClrEol;
- GotoXY(2,25);
- Write('étage:');
- GotoXY(9,25);
- Write(Stage);
- CurrPtr:=TP[Stage];
- NmMove:=$FFFF;
- NmElem:=0;
- LenElem:=StrLen(CurrPtr^[0]);
- FillChar(Tab,SizeOf(Tab),0);
- While(CurrPtr^[NmElem]<>NIL)do Begin
- Tab[0][NmElem]:=StrPas(CurrPtr^[NmElem]);Tab[1][NmElem]:=StrPas(CurrPtr^[NmElem]);Inc(NmElem)
- End;
- FixeOk:=0;NmFixe:=0;
- For J:=0to NmElem-1do For I:=1to(LenElem)do Begin
- Case Tab[0][J][I]of
- '#':PutWall(I,J);
- ' ':PutBrick(I,J);
- '$':Begin
- PutBox(I,J);
- Tab[1][J][I]:=' ';
- End;
- '*':Begin
- PutBox(I,J);
- Tab[0][J][I]:='$';Tab[1][J][I]:='.';
- Inc(FixeOk)
- End;
- '.':Begin
- PutFixe(I,J);
- Inc(NmFixe)
- End;
- '@':Begin
- XMan:=I;YMan:=J;
- Tab[0][J][I]:=' ';
- Tab[1][J][I]:=' ';
- SetMan(I,J)
- End;
- End;
- End;
- GotoXY(14,25);
- TextBackground(White);
- TextColor(LightRed);
- Write('Nombre d,placement:');
- PutMove;
- Repeat
- If(Run)Then Begin
- K:=MKey[RunP];Inc(RunP);
- If(KeyPressed)or(RunP>=PosKey)Then Begin
- Run:=False;
- NmMove:=RunP;
- End;
- Delay(100);
- End
- Else
- Begin
- K:=Byte(ReadKey);
- If K=0Then K:=K or (Byte(ReadKey)shl 8);
- End;
- Case(K)of
- kbF10:Goto Restart;
- kbF9:If Stage<85Then Begin;Inc(Stage);Goto Restart;End;
- kbF8:If Stage>1Then Begin;Dec(Stage);Goto Restart;End;
- kbF3:If Stage<=1Then Begin
- RunP:=0;
- Run:=True;
- Case Stage of
- 1:Begin
- Move(Solution001,MKey,SizeOf(Solution001));
- PosKey:=High(Solution001)+1;
- End;
- End;
- End;
- kbUp:Case Tab[0][YMan-1][XMan]of
- ' ','.':Begin
- UnSetMan(XMan,YMan);
- Dec(YMan);
- SetMan(XMan,YMan);
- MemKey(K);
- End;
- '$':If Tab[0][YMan-2][XMan]in[' ','.']Then Begin
- Chk:=(Tab[1][YMan-1][XMan]=' ')and(Tab[1][YMan-2][XMan]='.');
- If(Chk)Then Inc(FixeOk);
- Chk:=(Tab[1][YMan-1][XMan]='.')and(Tab[1][YMan-2][XMan]=' ');
- If(Chk)Then Dec(FixeOk);
- Tab[0][YMan-2][XMan]:=Tab[0][YMan-1][XMan];
- Tab[0][YMan-1][XMan]:=Tab[1][YMan-1][XMan];
- UnSetMan(XMan,YMan-2);
- UnSetMan(XMan,YMan);
- Dec(YMan);
- SetMan(XMan,YMan);
- MemKey(K);
- If(FixeOk=NmFixe)Then Break;
- End;
- End;
- kbDn:Case Tab[0][YMan+1][XMan]of
- ' ','.':Begin
- UnSetMan(XMan,YMan);
- Inc(YMan);
- SetMan(XMan,YMan);
- MemKey(K);
- End;
- '$':If Tab[0][YMan+2][XMan]in[' ','.']Then Begin
- Chk:=(Tab[1][YMan+1][XMan]=' ')and(Tab[1][YMan+2][XMan]='.');
- If(Chk)Then Inc(FixeOk);
- Chk:=(Tab[1][YMan+1][XMan]='.')and(Tab[1][YMan+2][XMan]=' ');
- If(Chk)Then Dec(FixeOk);
- Tab[0][YMan+2][XMan]:=Tab[0][YMan+1][XMan];
- Tab[0][YMan+1][XMan]:=Tab[1][YMan+1][XMan];
- UnSetMan(XMan,YMan+2);
- UnSetMan(XMan,YMan);
- Inc(YMan);
- SetMan(XMan,YMan);
- MemKey(K);
- If(FixeOk=NmFixe)Then Break;
- End;
- End;
- kbLeft:Case Tab[0][YMan][XMan-1]of
- ' ','.':Begin
- UnSetMan(XMan,YMan);
- Dec(XMan);
- SetMan(XMan,YMan);
- MemKey(K);
- End;
- '$':If Tab[0][YMan][XMan-2]in[' ','.']Then Begin
- Chk:=(Tab[1][YMan][XMan-1]=' ')and(Tab[1][YMan][XMan-2]='.');
- If(Chk)Then Inc(FixeOk);
- Chk:=(Tab[1][YMan][XMan-1]='.')and(Tab[1][YMan][XMan-2]=' ');
- If(Chk)Then Dec(FixeOk);
- Tab[0][YMan][XMan-2]:=Tab[0][YMan][XMan-1];
- Tab[0][YMan][XMan-1]:=Tab[1][YMan][XMan-1];
- UnSetMan(XMan-2,YMan);
- UnSetMan(XMan,YMan);
- Dec(XMan);
- SetMan(XMan,YMan);
- MemKey(K);
- If(FixeOk=NmFixe)Then Break;
- End;
- End;
- kbRight:Case Tab[0][YMan][XMan+1]of
- ' ','.':Begin
- UnSetMan(XMan,YMan);
- Inc(XMan);
- SetMan(XMan,YMan);
- MemKey(K);
- End;
- '$':If Tab[0][YMan][XMan+2]in[' ','.']Then Begin
- Chk:=(Tab[1][YMan][XMan+1]=' ')and(Tab[1][YMan][XMan+2]='.');
- If(Chk)Then Inc(FixeOk);
- Chk:=(Tab[1][YMan][XMan+1]='.')and(Tab[1][YMan][XMan+2]=' ');
- If(Chk)Then Dec(FixeOk);
- Tab[0][YMan][XMan+2]:=Tab[0][YMan][XMan+1];
- Tab[0][YMan][XMan+1]:=Tab[1][YMan][XMan+1];
- UnSetMan(XMan+2,YMan);
- UnSetMan(XMan,YMan);
- Inc(XMan);
- SetMan(XMan,YMan);
- MemKey(K);
- If(FixeOk=NmFixe)Then Break;
- End;
- End;
- kbEsc:Break;
- End;
- Until False;
- If(K<>kbEsc)Then Begin
- GotoXY(1,24);
- TextBackground($F);
- TextColor(0);
- ClrEol;
- GotoXY(1,25);
- ClrEol;
- GotoXY(1,24);
- Write('tage',Stage,' fait!!!');
- GotoXY(1,25);
- Write('Presse une touche pour continuer');
- Inc(Stage);
- If Stage=86Then Begin
- TextBackground(0);
- TextColor($F);
- GotoXY(1,12);
- Write('Tous les ,tages sont fait!!!');
- GotoXY(1,25);
- TextBackground($F);
- TextColor(0);
- ClrEol;
- Write('Presse une touche pour quitter');
- ReadKey;
- Break;
- End;
- End;
- Until K=kbEsc;
- End;
-
- BEGIN
- Stage:=1;
- ChoiceLevel;
- Play;
- TextBackground(Black);
- TextColor(7);
- ClrScr;
- END.
-
Code source
Voici le code source du jeu sur GitHub :
Lien | Langage de programmation | Projet |
---|---|---|
https://github.com/gladir/7iles/blob/main/SOKOBAN.PAS | Turbo Pascal, Free Pascal | 7iles |