![]() |
| écran de présentation |
D'après BATAILLE NAVALE SUR L'ARCTIQUE de D. ISAAMAN et J. TYLER.
dans "des programmes pour votre micro - Battle games"
publié en 1982 écrit en Sinclair BASIC pour ZX 81
![]() |
| caractéristiques de la version originale |
Sans armes et gravement endommagé, votre bateau tente de rentrer à bon port, louvoyant dans une mer encombrée d'icebergs. Un navire ennemi vous talonne. Mais curieusement, s'il peut vous détecter, les icebergs, par contre, lui sont invisibles. Votre dernière chance consiste à l'obliger à en percuter un.
Votre ordinateur affiche une grille sur laquelle apparaissent votre position (Y), celle du navire ennemi (Z) et l'emplacement des icebergs (*). Vos déplacements se font espace par espace au nord, sud, est ou ouest alors que votre poursuivant se déplace par la route la plus directe (y compris en diagonale). S'il parvient à vous rattraper (une des 8 positions environnantes), vous êtes capturé et si, dans votre fuite, vous heurtez un iceberg, votre bateau coule. Arriverez-vous à bon port ?
Pouvez-vous trouver une solution pour augmenter la taille de la grille et le nombre des icebergs ?
A la suite du listing complet pour le ZX 81, vous trouverez les modifications nécessaires pour l'utiliser sur les machines suivantes : VIC, PET, BBC, ACORM, TRS 80, APPLE et ZX SPECTRUM.
contient une présentation et une adaptation en Python
un listing pour FreeBASIC et Python optimisées pour LINUX
une version exécutable pour Linux et pour Windows
' --- Origine Nerd propose ---
' --- un listing en FreeBASIC pour ---
' --- RETROGICIEL - BATAILLE NAVALE SUR L'ARCTIQUE ---
' --- Initialisation du mode écran ---
SCREEN 12
' --- Lancement du générateur de nombres aléatoires ---
RANDOMIZE
' --- Déclaration des variables ---
DIM kami ( 1 ) AS INTEGER
DIM kennemi ( 1 ) AS INTEGER
DIM kmer ( 7 , 7 ) AS STRING
DIM ksaisie AS STRING = ""
' --- Entrée de la boucle principale ---
DO
' --- MaZ de la mer pour une nouvelle partie ---
FOR kordonne AS INTEGER = 0 To 7
FOR kabscisse AS INTEGER = 0 To 7
kmer ( kabscisse , kordonne ) = "."
NEXT
NEXT
' --- Positions aleatoires des icebergs ---
FOR kiceberg AS INTEGER = 0 TO INT ( RND * 8 ) + 4
kmer ( INT ( RND * 8 ) , INT ( RND * 8 ) ) = "*"
NEXT
' --- Position aleatoire du bateau du joueur ---
LBL_Ami:
kami ( 0 ) = INT ( RND * 8 )
kami ( 1 ) = INT ( RND * 8 )
IF kmer ( kami ( 0 ) , kami ( 1 ) ) <> "." GOTO LBL_Ami
kmer ( kami ( 0 ) , kami ( 1 ) ) = "Y"
' --- Position aleatoire du bateau ennemi ---
LBL_Ennemi:
kennemi ( 0 ) = INT ( RND * 8 )
kennemi ( 1 ) = INT ( RND * 8 )
IF kmer ( kennemi ( 0 ) , kennemi ( 1 ) ) <> "." GOTO LBL_Ennemi
kmer ( kennemi ( 0 ) , kennemi ( 1 ) ) = "Z"
' --- Boucle du jeu - les déplacements ---
DO
' --- Affichage des nouvelles positions ---
CLS
PRINT "BATAILLE NAVALE SUR L'ARCTIQUE"
PRINT ""
FOR kordonne AS INTEGER = 0 To 7
FOR kabscisse AS INTEGER = 0 To 7
PRINT kmer ( kabscisse , kordonne ) ;
NEXT
PRINT ""
NEXT
' --- Choix du déplacement par le joueur ---
PRINT "VOTRE DIRECTION N , E , S ou O ? "
ksaisie = UCASE ( INPUT ( 1 ) )
kmer ( kami ( 0 ) , kami ( 1 ) ) = "."
IF ksaisie = "N" AND kami ( 1 ) > 0 THEN kami ( 1 ) = kami ( 1 ) - 1
IF ksaisie = "E" AND kami ( 0 ) < 7 THEN kami ( 0 ) = kami ( 0 ) + 1
IF ksaisie = "S" AND kami ( 1 ) < 7 THEN kami ( 1 ) = kami ( 1 ) + 1
IF ksaisie = "O" AND kami ( 0 ) > 0 THEN kami ( 0 ) = kami ( 0 ) - 1
IF kmer ( kami ( 0 ) , kami ( 1 ) ) <> "." THEN ksaisie = "perdu"
kmer ( kami ( 0 ) , kami ( 1 ) ) = "Y"
' --- Déplacement du bateau ennemi ---
kmer ( kennemi ( 0 ) , kennemi ( 1 ) ) = "."
kennemi ( 0 ) = kennemi ( 0 ) + SGN ( kami ( 0 ) - kennemi ( 0 ) )
kennemi ( 1 ) = kennemi ( 1 ) + SGN ( kami ( 1 ) - kennemi ( 1 ) )
IF kmer ( kennemi ( 0 ) , kennemi ( 1 ) ) = "*" THEN ksaisie = "gagne"
IF kmer ( kennemi ( 0 ) , kennemi ( 1 ) ) = "Y" THEN ksaisie = "perdu"
kmer ( kennemi ( 0 ) , kennemi ( 1 ) ) = "Z"
LOOP UNTIL ( ksaisie = "gagne" OR ksaisie = "perdu" )
' --- Fin de la partie et affichage du résultat ---
IF ksaisie = "gagne" THEN PRINT "SAUVE : IL A HEURTE UN ICEBERG"
IF ksaisie = "perdu" AND kmer ( kami ( 0 ) , kami ( 1 ) ) = "Z" THEN PRINT "VOUS ETES PRIS"
IF ksaisie = "perdu" AND kmer ( kami ( 0 ) , kami ( 1 ) ) <> "Z" THEN PRINT "VOUS COULEZ"
' --- Recommencer ou quitter du jeu ---
PRINT "R pour recommencer ou Q pour Quitter"
ksaisie = INPUT ( 1 )
LOOP UNTIL ( ksaisie = "q" OR ksaisie = "Q" )
' --- Programme : JFB ---
' --- Septembre 2023 ---
' --- Fin ---




Aucun commentaire:
Enregistrer un commentaire