samedi 30 septembre 2023

BATAILLE NAVALE SUR L'ARCTIQUE POUR ZX 81

é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.


une adaptation classique en FreeBASIC


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 ---


une adaptation modernisée en Python



mardi 26 septembre 2023

A BORD D'UN BOMBARDIER SUPERSONIQUE POUR ZX 81

écran de présentation

D'après A BORD D'UN BOMBARDIER SUPERSONIQUE 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

Nous sommes en 2582, les peuples de la Terre sont en guerre contre les robots. En mission au-dessus du territoire des Robots, à bord de votre bombardier supersonique, votre ordinateur de bord affiche 5 graphiques établis à partir de photographies infrarouges relayées par satellite, qui montrent la rpartition des bataillons de Robots. Vos réserves de carburant ne vous permettent d'atteindre qu'un seul objectif ; faite rapidement votre choix en vue de détruire le plus grand nombre de robots et larguez une de vos bombes à corrosion (elles contiennent une substance très active capable de détruire la carcasse d'un robot en quelques secondes).

Pour larguer la bombe, entrez le nombre affiché à côté du graphique représentant la plus grande densité de robots. Si deux graphiques sont identiques, choisissez le plus petit nombre affiché. Serez-vous décoré à votre retour de mission ?

Pourriez-vous trouver une solution pour augmenter le nombre de cibles potentielles ?

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.


une adaptation classique en FreeBASIC


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 - A BORD D'UN BOMBARDIER SUPERSONIQUE ---


' --- Initialisation du mode écran ---

SCREEN 12


' --- Lancement du générateur de nombres aléatoires ---

RANDOMIZE


' --- Déclaration des variables ---

DIM kscore AS INTEGER = 0

DIM kcible AS INTEGER = 0

DIM kpause AS INTEGER = 0

DIM kchoix AS STRING = ""

DIM ksaisie AS STRING = ""

DIM TBL_Zones ( 5 ) AS INTEGER = { 0 , 0  , 0  , 0  , 0  , 0 }


' --- Entrée de la boucle principale ---

DO


  ' --- Boucle du jeu - 10 passages ---

  FOR kbombe AS INTEGER = 1 TO 10

  

    ' --- Présentation et affichage des consignes --- 

    CLS

    PRINT "BOMBARDIER SUPERSONIQUE"

    PRINT ""


    ' --- Initialisation des graphiques ---

    kcible = 1

    FOR kzone AS INtEGER = 1 TO 5 

      TBL_Zones ( kzone ) = INT ( RND * 10 ) + 1

      IF TBL_Zones ( kzone ) > TBL_Zones ( kcible ) THEN kcible = kzone

      PRINT kzone ; " : " ; STRING ( TBL_Zones ( kzone ) , "*" )

    NEXT

  

    ' --- Pause pour le choix du joueur ---

    PRINT "VOTRE CHOIX ? "

    SLEEP ( 3000 - ( 250 * kbombe ) , 1 )

    kchoix = INKEY

    IF CINT ( kchoix ) = kcible THEN kscore = kscore + 1

    

  NEXT 

  

  ' --- Affichage du score ---

  

  PRINT "VOUS AVEZ PLACE " ; kscore ; " BOMBES SUR LA BONNE CIBLE."

  IF kscore = 10 THEN PRINT "VOUS ETES UN HERO"

  IF kscore < 10 THEN PRINT "RESULTATS MEDIOCRE"

  SLEEP ( 1000 , 1 )

  

  ' --- 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 ---



une adaptation modernisée en Python


dimanche 24 septembre 2023

COMBAT AERIEN POUR ZX 81

écran de présentation



D'après COMBAT AERIEN 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

Vous êtes face au pirate du ciel ; vous allez devoir tenter de le placer dans votre ligne de tir et de l'abattre avant qu'il ne le fasse lui-même. S'il se porte devant vous, accélérez ; s'il se place derrière vous, ralentissez.

Votre ordinateur vous communiquera vos vitesse et positions par rapport au pirate. Dès le début du jeu, soyez prêt à appuyer sur les touches appropriées : A pour accélérer, R pour ralentir jusqu'à la bonne position pour faire feu (touche F).

Le jeu est programmé en votre faveur. Transformez-le pour que vos chances de gagner soient identiques à celles du pirate.

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.


une adaptation classique en FreeBASIC

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 - LE COMBAT AERIEN ---


' --- Initialisation du mode écran ---

SCREEN 12


' --- Lancement du générateur de nombres aléatoires ---

RANDOMIZE


' --- Déclaration des variables --- 

DIM kdistance AS INTEgER = 0

DIM kvitesse AS INTEgER = 0

DIM ksaisie AS STRING = ""


' --- Entrée de la boucle principale ---

DO

  ' --- Initialisation des variables ---

  kvitesse = INT ( RND * 11 ) - 5

  kdistance = -INT ( RND * 3 ) + 1


  ' --- Boucle du déroulement jeu ---

  DO 

  

    ' --- Affichage du titre, de la position et de la vitesse --- 

    CLS

    PRINT "COMBAT AERIEN"

    PRINT ""

    IF kdistance < 0 THEN PRINT "VOUS ETES DERRIERE LUI " ; kdistance

    IF kdistance > 0 THEN PRINT "VOUS ETES DEVANT LUI " ; kdistance

    IF kdistance = 0 THEN PRINT "VOUS ETES EN POSITION DE TIR" 

    IF kvitesse > 0 THEN PRINT "VOTRE VITESSE EST TROP ELEVEE " ; kvitesse

    IF kvitesse < 0 THEN PRINT "VOTRE VITESSE EST TROP FAIBLE " ; kvitesse

    IF kvitesse = 0 THEN PRINT "VOTRE VITESSE EST CONVENABLE" 

    

    ' --- Teste la touche appuyée ---

    ksaisie = INKEY

    IF UCASE ( ksaisie ) = "A" AND kvitesse < 5 THEN kvitesse = kvitesse + 1

    IF UCASE ( ksaisie ) = "R" AND kvitesse > -5 THEN kvitesse = kvitesse - 1

    IF UCASE ( ksaisie ) = "F" AND kdistance = 0 THEN ksaisie = "TIR"

    IF UCASE ( ksaisie ) = "F" AND ABS ( kdistance ) > 1 THEN PRINT "VOUS L'AVEZ JUSTE EFFLEURE"

    

    ' --- Vide le tampon du clavier ---

    DO : LOOP UNTIL ( INKEY = "" )


    ' --- Pausse inconditionnelle ---

    SLEEP ( 500 , 1 )

    

    ' --- Actualisation et controle de la distance --- 

    kdistance = kdistance + kvitesse

    IF ABS ( kdistance ) > 20 THEN  ksaisie = "LOIN"

    

  LOOP UNTIL ( ksaisie = "TIR" OR ksaisie = "LOIN" )

  

  ' --- Analyse de la fin de pertie ---

  IF ksaisie = "LOIN" THEN PRINT "VOUS L'AVEZ PERDU DE VUE"

  IF ksaisie = "TIR" THEN IF RND > .7 THEN PRINT "VOUS ETES TOUCHE" ELSE PRINT "VOUS L'AVEZ ABATTU !"

  SLEEP ( 500 , 1 )


  ' --- 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 ---



une adaptation modernisée en Python


vendredi 22 septembre 2023

PROGRAMMES ADAPTES PAR ANNEE


PROGRAMMES ORIGINAUX PUBLIES EN 1982

A Bord d'Un Bombardier (ZX 81 - de D. ISAAMAN et J. TYLER)
Arme Secrète (L') (ZX 81 - de D. ISAAMAN et J. TYLER)
Bataille Sur L'Arctique (ZX 81 - de D. ISAAMAN et J. TYLER)
Blindes Attaquent (Les) (ZX 81 - de D. ISAAMAN et J. TYLER)
Combat Aerien (ZX 81 - de D. ISAAMAN et J. TYLER)
Duel (ZX 81 - de D. ISAAMAN et J. TYLER)
Envahisseurs (Les) (ZX 81 - de D. ISAAMAN et J. TYLER) 
Evadez-Vous (ZX 81 - de D. ISAAMAN et J. TYLER) 
Message Codé (Le) (ZX 81 - de D. ISAAMAN et J. TYLER) 
Missiles Antiaériens (TRS 80 - de D. ISAAMAN et J. TYLER)
Opération Robots (ZX 81 - de D. ISAAMAN et J. TYLER) 
Siege Du Chateau Fort (Le) (ZX 81 - de D. ISAAMAN et J. TYLER) 

EVADEZ VOUS POUR ZX 81

écran de présentation


D'après EVADEZ-VOUS 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


Nous sommes en 2582, les peuples de la Terre sont en guerre contre les robots. Les robots vous ont capturé, désarmé et enfermé. Votre cas semble désespéré, mais tout à coup, vous vous rappelez de l'existence de la montre-sonar toujours à votre poignet. Une fréquence bien précise peut neutraliser vos gardes en les faisant entrer en résonance ; mais attention, une fréquence trop base peut faire vibrer les murs qui s'écrouleraient sur vous ; trop haute, elle se traduirait par un mal de tête insupportable.

Saurez-vous échapper à l'horreur des prisons des robots ? Pour connaitre la gemme des fréquences utilisables, consultez attentivement le programme.

Pouvez-vous rendre le jeu plus difficile en réduisant, de 5, la marge d'erreur autour de la fréquence à découvrir ou bien en augmentant l'amplitude des fréquences au-dela de 100 ?

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.


une adaptation classique en FreeBASIC


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 - EVADEZ-VOUS ---

' --- Initialisation du mode écran ---
SCREEN 12

' --- Lancement du générateur de nombres aléatoires ---
RANDOMIZE

' --- Déclaration des variables --- 
DIM kfrequence AS INTEGER = 0
DIM kbas AS INTEGER = 0
DIM khaut AS INTEGER = 0
DIM kchoix AS INTEGER = 0
DIM ksaisie AS STRING = ""

' --- Entrée de la boucle principale ---
DO
  ' --- Initialisation des variables ---
  kbas = 0
  khaut = 0
  kchoix = 0
  kfrequence = INT ( RND * 100 ) + 1

  ' --- Affichage du titre --- 
  CLS
  PRINT "EVADEZ-VOUS"
  PRINT ""
  
  ' --- Boucle pour cinq essais --- 
  FOR kessais AS INTEGER = 1 TO 5
    
    ' --- Le joueur entre une fréquence ---
    INPUT "VOTRE FREQUENCE ? " , kchoix
    
    ' --- Analyse de la fréquence choisie par le joueur ---
    IF ABS ( kfrequence - kchoix ) < 5 THEN
      GOTO BLS_Evasion
    ELSEIF ( kfrequence - kchoix ) > 40 THEN
      kbas = kbas + 1
      IF kbas = 2 THEN GOTO BLS_Enseveli ELSE PRINT "TROP BASSE... ATTENTION !"
    ELSEIF ( kchoix - kfrequence ) > 40 THEN
      khaut = khaut + 1
      IF khaut = 2 THEN GOTO BLS_Evanoui ELSE PRINT "TROP ELEVEE... AIEEEE"
    ELSE
      PRINT "SANS EFFET"
    END IF

  NEXT
  
  ' --- Le joueur n'a pas trouvée la bonne fréquence --- 
  PRINT "TROP TARD."
  PRINT "LA FREQUENCE ETAIT" ; kfrequence
  GOTO BLS_Boucle
  
  ' --- Le joueur a donné 2 fréquences beaucoups trop basses --- 
  BLS_Enseveli:
    PRINT "LES MURS S'ECROUENT"
    GOTO BLS_Boucle
    
  ' --- Le joueur a donné 2 fréquences beaucoups trop hautes --- 
  BLS_Evanoui:
    PRINT "VOUS VOUS EVANOUISSEZ" 
    GOTO BLS_Boucle
    
  ' --- Le joueur a donné une bonne estimaton de la fréquence --- 
  BLS_Evasion:
    PRINT "EVASION REUSSIE"
    GOTO BLS_Boucle  
    
  ' --- Recommencer ou quitter du jeu --- 
  BLS_Boucle:
    PRINT "R pour recommencer ou Q pour Quitter" 
    ksaisie = INPUT ( 1 ) 

LOOP UNTIL ( ksaisie = "q" OR ksaisie = "Q" )

' --- Programme : JFB ---
' --- Septembre 2023 ---
' --- Fin ---


une adaptation modernisée en Python



ORDINATEURS

LISTES DES ORDINATEURS TRS 80 ZX 81