Section courante

A propos

Section administrative du site

 Langage  Installation  Elément  Tutoriel  Programmation  Emulateur  Annexe  Aide 
ABAP/4
Ada
Assembleur
Assembly & bytecode
ASP (Active Server Pages)
Basic
C
C++
C# (C Sharp)
Cobol
ColdFusion
Fortran
HTML
Java
JavaScript
LISP
Logo
LotusScript
Oberon
Pascal
Perl
PHP
PL/1
Prolog
Python
Rebol
REXX
Ruby
SAS
NoSQL
SQL
Swift
X++ (Axapta)
GNAT
SMALLAda
VHDL
Assembleur 370
Assembleur 1802
Assembleur 4004
Assembleur 6502
Assembleur 6800
Assembleur 68000
Assembleur 8080 et 8085
Assembleur 8089
Assembleur 80x86
Assembleur AGC4
Assembleur ARM
Assembleur DPS 8000
Assembleur i860
Assembleur Itanium
Assembleur MIPS
Assembleur PDP-11
Assembleur PowerPC
Assembleur RISC-V
Assembleur SPARC
Assembleur SuperH
Assembleur UNIVAC I
Assembleur VAX
Assembleur Z80
Assembleur Z8000
Assembleur z/Architecture
ASSEMBLER/MONITOR 64
Micol Assembler
GFA Assembler
A86
MASM (Macro Assembler)
TASM (Turbo Assembler)
CIL
Jasmin
LLVM
MSIL
Parrot
P-Code (PCode)
SWEET16
G-Pascal
ASP 1.0
ASP 2.0
ASP 3.0
ASP.NET
ASP.NET Core
ABasiC (Amiga)
Adam SmartBASIC
Altair BASIC
AmigaBASIC (Amiga)
AMOS Basic (Amiga)
Atari Basic (Atari 400, 600 XL, 800, 800XL)
Basic Apple II (Integer BASIC/APPLESOFT)
Basic Commodore 64 (CBM-BASIC)
Basic Commodore 128 (BASIC 7.0)
Basic Commodore VIC-20 (CBM-BASIC 2.0)
Basic Coco 1 (Color Basic)
Basic Coco 2 (Extended Color Basic)
Basic Coco 3 (Extended Color Basic 2.0)
BASICA (PC DOS)
Basic Pro
BBC BASIC
Blitz BASIC (Amiga)
DarkBASIC
Dartmouth BASIC
GFA-Basic (Atari ST/Amiga)
GWBASIC (MS-DOS)
Liberty BASIC
Locomotive BASIC (Amstrad CPC)
MSX-Basic
Omikron Basic (Atari ST)
Oric Extended Basic
Power Basic
Quick Basic/QBasic (MS-DOS)
Sinclair BASIC (ZX80, ZX81, ZX Spectrum)
ST BASIC (Atari ST)
Turbo Basic
Vintage BASIC
VBScript
Visual Basic (VB)
Visual Basic .NET (VB .NET)
Visual Basic pour DOS
Yabasic
BeckerBASIC
SIMONS' BASIC
Basic09 d'OS-9
Disk Extended Color Basic
Basic09 d'OS-9
Disk Extended Color Basic
Access
Excel
Visual Basic pour Windows
Visual Basic .NET pour Windows
C Shell Unix (csh)
C pour Amiga
C pour Atari ST
C pour DOS
C pour Falcon030
C pour GEMDOS (Atari ST)
C pour Linux
C pour PowerTV OS
C pour OS/2
C pour Unix
C pour Windows
Aztec C
CoCo-C
GNU C
HiSoft C
IBM C/2
Introl-C
Lattice C
Microsoft C
MinGW C
MSX-C
Open Watcom C
OS-9 C Compiler
Pure C
Quick C
Turbo C
HiSoft C for Atari ST
HiSoft C for CP/M (Amstrad CPC)
C++ pour OS/2
C++ pour Windows
Borland C++
C++Builder
IBM VisualAge C++
Intel C++
MinGW C++
Open Watcom C++
Symantec C++
Turbo C++
Visual C++
Visual C++ .NET
Watcom C++
Zortech C++
C# (C Sharp) pour Windows
Apple III Cobol
Microsoft Cobol
BlueDragon
Lucee
OpenBD
Railo
Smith Project
Microsoft Fortran
WATFOR-77
CSS
FBML
Open Graph
SVG
XML
XSL/XSLT
LESS
SASS
GCJ (GNU)
JSP
Jython
Visual J++
Node.js
TypeScript
AutoLISP
ACSLogo
LotusScript pour Windows
Amiga Oberon
Oberon .NET
Apple Pascal
Delphi/Kylix/Lazarus
Free Pascal
GNU Pascal
HighSpeed Pascal
IBM Personal Computer Pascal
Lisa Pascal
Maxon Pascal
MPW Pascal
OS-9 Pascal
OSS Personal Pascal
Pascal-86
Pascal du Cray Research
Pascal/VS
Pascal-XT
PURE Pascal
QuickPascal
RemObjets Chrome
Sun Pascal
THINK Pascal
Tiny Pascal (TRS-80)
Turbo Pascal
UCSD Pascal
VAX Pascal
Virtual Pascal
Turbo Pascal for CP/M-80
Turbo Pascal for DOS
Turbo Pascal for Macintosh
Turbo Pascal for Windows
CodeIgniter (Cadre d'application)
Drupal (Projet)
Joomla! (Projet)
Phalanger (PHP .NET)
phpBB (Projet)
Smarty (balise)
Twig (balise)
Symfony (Cadre d'application)
WordPress (Projet)
Zend (Cadre d'application)
PL360
PL/M-80
PL/M-86
Turbo Prolog
CPython
IronPython
Jython
PyPy
AREXX
Regina REXX
JMP
Btrieve
Cassandra
Clipper
CouchDB
dBASE
Hbase
Hypertable
MongoDB
Redis
Access
BigQuery
DB2
H2
Interbase
MySQL
Oracle
PostgreSQL
SAP HANA
SQL Server
Sybase
U-SQL
QuickPascal
Les remarques
Les opérateurs
Les instructions conditionnelles
Les instructions de boucles
Type de données
Référence des unités
Définition de fonction
Références de mots réservés (mots clefs)
Référence des procédures et des fonctions
Mise en route
Les premiers pas
Données et types de données
Opérateurs et expressions
Procédures et fonctions
Utilisation de fichiers et de répertoires
Programmation graphiques
Bonjour
Affichage
Astronomie
Biochimie
Conversion
Démonstration & Animation
Finance
Fractale
Géographie
Géométrie
Jeux & stratégies
Histoire
Mathématique
Médicale
Météorologie
Océanographie
Sport
Temps
Trigonométrie
Validation
«DRAW» du BASIC
Phase lunaire
Calcul du calcium corrigé
Calcul le taux d'alcoolémie
Bin,Hex,Base62,...
Animation d'étoile en 3 dimensions
IPaymt/Interet
NPer
PPaymt/Principal
Triangle de «Sierpinski»
Distance en Km entre deux longitudes et latitudes
Aire d'un cercle
Aire d'une surface de prisme rectangulaire
Aire d'un triangle
Distance entre deux points
Treillis
Frogger
L25
Nibbles
Tetris
Tours d'Hanois
Chiffre romain
Ackermann
Exp
Factoriel
Fibonacci
Log
Nombre premier
Odd
Random
Sqrt
Triangle Pascal
Hauteur utérine
Unité de mesure
Fréquence des vagues
Hockey
Année bissextile
Calendrier
Date de la Pâque
FirstDayOfMonth
Horloge à aiguille
ArcCos
ArcSin
Atn/ATan/ArcTan/ArcTangente
Cos
Sin
Courriel
DOSBox
PCE - PC Emulator
PCem
Table ASCII
RAM de l'IBM PC
Code d'erreur du Quick Pascal
QPU
Bibliographie
Préface
Notes légal
Dictionnaire
Recherche

Le jeu Frogger est jeu dont le but est faire traverser à une grenouille une rue sans se faire écraser et ensuite de traverser une rivière en sautant sur des billots sans tomber à l'eau.

Le jeu a été écrit originalement sous le GWBASIC et les dessine des feuilles, des billots et de la grenouilles utilisaient l'instruction DRAW. L'utilisation de cette instruction peut devenir un avantage, car on peut choisir une n'importe quel couleur pour afficher un objet.

Le moteur de jeu est construit à l'aide de deux fonctions, soit RunBillot et RunCar, lesquelles permet respectivement à la grenouilles de traverser les billets et de traverser la rue. La partie RunCar est beaucoup plus facile à mettre en oeuvre, car si le joueur de bouge pas, la grenouille ne bouge pas, tandis que la partie avec les billots nécessite de tenir compte que la grenouille doit bouger à intervalle régulier. Donc, dans la fonction RunCar, on se content de permettre de faire bouger la grenouille dans l'intervalle de la rue, du moment que ses coordonnées ne soit pas identiques à celle d'une voiture (indiquer parle tableau CarX). De l'autre, sur les billots, il faut faire l'inverse, si la grenouille n'est pas sur la coordonnées de l'un des billots (indiquer par le tableau BillotX), alors il perd la partie.


L'exemple de jeu Frogger suivant est développé en QuickPascal et fonctionne uniquement sous QuickPascal. Voici le code source en QuickPascal du jeu :

  1. Program Frogger;
  2.  
  3. Uses Crt,MSGraph;
  4.  
  5. Label _Break3,_Break4;
  6.  
  7. Const
  8.  {Code de touche clavier renvoy?e par ReadKey}
  9.  kbNoKey=0;{Pas de touche}
  10.  kbEsc=$001B;{Escape}
  11.  kbUp=$4800;{Up}
  12.  kbLeft=$4B00;{Fl?che de gauche (Left)}
  13.  kbRight=$4D00;{Fl?che de droite (Right)}
  14.  kbDn=$5000;{Fl?che du bas (Down)}
  15.  kbHome=$4700;{Home}
  16.  kbTab=$0F09;{Tabulation}
  17.  kbEnd=$4F00;{End}
  18.  kbEnter=$000D;{Enter}
  19.  kbF10=$4400;{F10}
  20.  
  21. Var
  22.  CarX:Array[0..3,0..9]of Integer;
  23.  CarKr:Array[0..3,0..9]of Byte;
  24.  BileauX:Array[0..3,0..9]of Integer;
  25.  WaitCar,WaitBileau,NmWait,Timer:Word;
  26.  FroggerX,FroggerY:Integer;
  27.  Traverser,Accident,Life:Byte;
  28.  K:Word;
  29.  
  30. Const
  31.  DrawS:Integer=4;
  32.  XL:Integer=160;
  33.  YL:Integer=100;
  34.  
  35. Var
  36.  I:Byte;
  37.  N:String;
  38.  Mode:(_None_,_NoTrace_,_UnMove_);
  39.  a,b:Integer;
  40.  xc,yc:(NoMove,Add,Sub);
  41.  
  42. Procedure WaitRetrace;Begin
  43.  Delay(10*12);
  44. End;
  45.  
  46. Function ExtractNm(S:String):Integer;
  47. Var
  48.  N:String;
  49.  a,b:Integer;
  50. Begin
  51.  N:='';
  52.  While(I<=Length(S))and(S[I] in ['0'..'9'])do Begin
  53.   N:=N+S[I];
  54.   Inc(I);
  55.  End;
  56.  If N=''Then a:=1
  57. Else Val(N,a,b);
  58.  ExtractNm:=a;
  59. End;
  60.  
  61. Function ExtractNmV(S:String):Integer;Begin
  62.  ExtractNmV:=ExtractNm(S)*(DrawS shr 2)
  63. End;
  64.  
  65. Procedure Line2(X,Y:Integer);Begin
  66.  If(Mode<>_NoTrace_)Then Begin
  67.   Case(xc)of
  68.    Add:Inc(X,XL);
  69.    Sub:X:=XL-X;
  70.   End;
  71.   Case(yc)of
  72.    Add:Inc(Y,YL);
  73.    Sub:Y:=YL-Y;
  74.   End;
  75.   If(YL=Y)and(X<XL)Then Begin
  76.    _MoveTo(X,YL);
  77.    _LineTo(XL,Y);
  78.   End
  79.    Else
  80.   Begin
  81.    _MoveTo(XL,YL);
  82.    _LineTo(X,Y);
  83.   End;
  84.  End;
  85. End;
  86.  
  87. Procedure SetPos(X,Y:Integer);Begin
  88.  Case(xc)of
  89.   Add:Inc(X,XL);
  90.   Sub:X:=XL-X;
  91.  End;
  92.  Case(yc)of
  93.   Add:Inc(Y,YL);
  94.   Sub:Y:=YL-Y;
  95.  End;
  96.  If(Mode<>_UnMove_)Then Begin
  97.   XL:=X;
  98.   YL:=Y;
  99.  End;
  100.  Mode:=_None_;
  101.  xc:=NoMove;
  102.  yc:=NoMove;
  103. End;
  104.  
  105.  
  106. Procedure Draw(S:String);Begin
  107.  I:=1;Mode:=_None_;
  108.  While I<=Length(S)do Begin
  109.   Inc(I);
  110.   Case S[I-1]of
  111.    'B':Mode:=_NoTrace_;
  112.    'C':_SetColor(ExtractNm(S));
  113.    'D':Begin
  114.     a:=ExtractNmV(S);
  115.     Line2(XL,YL+a);
  116.     SetPos(XL,YL+a);
  117.    End;
  118.    'E':Begin
  119.     a:=ExtractNmV(S);
  120.     Line2(XL+a,YL-a);
  121.     SetPos(XL+a,YL-a);
  122.    End;
  123.    'F':Begin
  124.     a:=ExtractNmV(S);
  125.     Line2(XL+a,YL+a);
  126.     SetPos(XL+a,YL+a);
  127.    End;
  128.    'G':Begin
  129.     a:=ExtractNmV(S);
  130.     Line2(XL-a,YL+a);
  131.     SetPos(XL-a,YL+a);
  132.    End;
  133.    'H':Begin
  134.     a:=ExtractNmV(S);
  135.     Line2(XL-a,YL-a);
  136.     SetPos(XL-a,YL-a);
  137.    End;
  138.    'L':Begin
  139.     a:=ExtractNmV(S);
  140.     Line2(XL-a,YL);
  141.     SetPos(XL-a,YL);
  142.    End;
  143.    'M':Begin
  144.     If S[I]in['+','-']Then Begin
  145.      If S[I]='+'Then xc:=Add else xc:=Sub;
  146.      Inc(I);
  147.     End;
  148.     a:=ExtractNm(S);
  149.     If S[I]=','Then Begin
  150.      Inc(I);
  151.      If S[I]in['+','-']Then Begin
  152.       If S[I]='+'Then yc:=Add else yc:=Sub;
  153.       Inc(I);
  154.      End;
  155.      b:=ExtractNm(S);
  156.     End
  157.      Else
  158.     b:=YL;
  159.     Line2(a,b);
  160.     SetPos(a,b);
  161.    End;
  162.    'N':Mode:=_UnMove_;
  163.    'R':Begin
  164.     a:=ExtractNmV(S);
  165.     Line2(XL+a,YL);
  166.     SetPos(XL+a,YL)
  167.    End;
  168.    'U':Begin
  169.     a:=ExtractNmV(S);
  170.     Line2(XL,YL-a);
  171.     SetPos(XL,YL-a)
  172.    End;
  173. ' ',';':;{C'est 2 caractSres ne change rien en soit, donc...pas d'arr^t!}
  174.    Else Exit;
  175.   End
  176.  End
  177. End;
  178.  
  179. Procedure _PutFrogger(X,Y:Integer);
  180. Begin
  181.  SetPos(X+8,Y); {Affiche la grenouille}
  182.  Draw('RFL3BL3L0BL2R0BR11R0BR2DL2BL2L5BL2L2FBR3R5BR3GL0BL2L5BL2FR7GL5R5BFBRL0BL2L5BL2DR9DBL3L3BL3DL2BR11R2');
  183. End;
  184.  
  185. Procedure PutFrogger(X,Y:Integer);Begin
  186.  _SetColor(LightGreen);
  187.  _PutFrogger(X,Y);
  188. End;
  189.  
  190. Procedure UnputFrogger(X,Y:Integer);
  191. Var
  192.  Kr:Byte;
  193. Begin
  194.  Case(Y)of
  195.   3*12..10*12-1:Kr:=Blue;
  196.   10*12..11*12-1:Kr:=Green;
  197.   11*12..15*12-1:Kr:=LightGray;
  198.   Else Kr:=Green;
  199.  End;
  200.  _SetColor(Kr);
  201.  _Rectangle(_GFillInterior,X,Y,X+15,Y+11);
  202. { _PutFrogger(X,Y);}
  203. End;
  204.  
  205. Procedure PutFeuille(X,Y:Integer);Begin
  206.  SetPos(X+8,Y); {Affiche la feuille}
  207.  Draw('C3F3DFD2GDGL2H2UE2G3HBD2D0GBU2LHU2E4RE');
  208. End;
  209.  
  210. Procedure PutBillot(X,Y:Integer);Begin
  211.  _SetViewport(0,0,239,199);
  212.  SetPos(X+48,Y); {Billot}
  213.  Draw('C6L45G2DGD2FDF2R46E2UEU2HUH2G2DGD2FDF2');
  214.  SetPos(X+40,Y+5); {Tiret b-che}
  215.  Draw('C14BU3L3BD3L1BH2L2BG1BL4L3BH3L5BD3BG2R3BG3R5BR4R3BE2BR3R2');
  216.  _SetViewport(0,0,319,199);
  217. End;
  218.  
  219. Procedure UnputBillot(X,Y:Integer);Begin
  220.  _SetViewport(0,0,239,199);
  221.  _SetColor(Blue);
  222.  _Rectangle(_GFillInterior,X,Y,X+56,Y+11);
  223.  _SetViewport(0,0,319,199);
  224. End;
  225.  
  226. Procedure PutCarRight(X,Y,Kr:Integer);Begin
  227.  SetPos(X+8,Y); {Automobile vers la droite}
  228.  _SetColor(Kr);
  229.  Draw('R5FL8GRBR5R0BR4DBL4L0BL5LGR2BR5R0BR5R2FRL17GR19FL21DR21BDBLL4BL10L4BFBR2L2BR14R2BR2BE10');
  230. End;
  231.  
  232. Procedure PutCarLeft(X,Y,Color:Integer);Begin
  233.  SetPos(X+8,Y); {Automobile vers la gauche}
  234.  _SetColor(Color);
  235.  Draw('L5GR8FLBL5L0BL4DBR4R0BR5RFL2BL5L0BL5L2GLR17FL19GR21DL21BDBRR4BR10R4BGBL2R2BL14L2BR26BE10');
  236. End;
  237.  
  238. Procedure UpdateTraverser;
  239. Var
  240.  S:String;
  241. Begin
  242.  _SetTextPosition(2,1);
  243.  _SetBkColor(LightGreen);
  244.  _SetTextColor(LightGray);
  245.  Str(Traverser,S);
  246.  _OutText('Traverser : '+S);
  247. End;
  248.  
  249. Function RunBillot:Boolean;
  250. Label _Break,_Break2;
  251. Const Largeur=56;
  252. Var
  253.  I,J,K:Byte;
  254.  BileauFound:Boolean;
  255.  SurLeBileau:Boolean;
  256.  MoveFrogger:Boolean;
  257. Begin
  258.  RunBillot:=True;
  259.  MoveFrogger:=False;
  260.  SurLeBileau:=False;
  261.  For J:=0to 1do For I:=0to 9do Begin
  262.   If BileauX[J,I]=-1Then Begin
  263.    BileauFound:=False;
  264.    For K:=0to 9do Begin
  265.     If BileauX[J,K]in[204..239]Then Begin
  266.  BileauFound:=True;
  267.  Goto _Break;
  268. End;
  269.    End;
  270. _Break:
  271.    If Not(BileauFound)Then Begin
  272.     If WaitBileau=0Then Begin
  273.      WaitBileau:=Random(NmWait);
  274.      BileauX[J,I]:=204+J*12;
  275.      PutBillot(BileauX[J,I],(6+J)*12);
  276.     End
  277.      Else
  278.     Dec(WaitBileau);
  279.    End;
  280.   End
  281.    Else
  282.   Begin
  283.    UnputBillot(BileauX[J,I],(6+J)*12);
  284.    If BileauX[J,I]<24Then BileauX[J,I]:=-1
  285.     Else
  286.    Begin
  287.     Dec(BileauX[J,I],24);
  288.     PutBillot(BileauX[J,I],(6+J)*12);
  289.    End;
  290.   End;
  291.   If(FroggerY=(6+J)*12)Then Begin
  292.    If Not(MoveFrogger)Then Begin
  293.     If(FroggerX > 0)Then Begin
  294.      Dec(FroggerX,24);
  295.  MoveFrogger:=True;
  296.     End;
  297.    End;
  298.    If((FroggerX-BileauX[J,I])in[0..Largeur-1])Then Begin
  299.     SurLeBileau:=True;
  300.     PutFrogger(FroggerX,FroggerY);
  301.    End;
  302.   End;
  303.  End;
  304.  For J:=2to 3do For I:=0to 9do Begin
  305.   If BileauX[J,I]=-1Then Begin
  306.    BileauFound:=False;
  307.    For K:=0to 9do Begin
  308.     If BileauX[J,K]in[0..Largeur-1]Then Begin
  309.  BileauFound:=True;
  310.  Goto _Break2;
  311. End;
  312.    End;
  313. _Break2:
  314.    If Not(BileauFound)Then Begin
  315.     If WaitBileau=0Then Begin
  316.      WaitBileau:=Random(NmWait);
  317.      BileauX[J,I]:=(J-2)*12;
  318.      PutBillot(BileauX[J,I],(6+J)*12);
  319.     End
  320.      Else
  321.     Dec(WaitBileau);
  322.    End;
  323.   End
  324.    Else
  325.   Begin
  326.    UnputBillot(BileauX[J,I],(6+J)*12);
  327.    Inc(BileauX[J,I],24);
  328.    If BileauX[J,I]>(240-Largeur)Then BileauX[J,I]:=-1
  329.    Else PutBillot(BileauX[J,I],(6+J)*12);
  330.   End;
  331.   If(FroggerY=(6+J)*12)Then Begin
  332.    If Not(MoveFrogger)Then Begin
  333.     If(FroggerX <= 239)Then Begin
  334.  Inc(FroggerX,24);
  335.  MoveFrogger:=True;
  336. End;
  337.    End;
  338.    If((FroggerX-BileauX[J,I])in[0..Largeur-1])Then Begin
  339.     SurLeBileau:=True;
  340.     PutFrogger(FroggerX,FroggerY);
  341.    End;
  342.   End;
  343.  End;
  344.  If(SurLeBileau)Then RunBillot:=False
  345. Else RunBillot:=FroggerY<=108;
  346. End;
  347.  
  348. Function RunCar:Boolean;
  349. Label _Break,_Break2;
  350. Var
  351.  I,J,K:Byte;
  352.  CarFound:Boolean;
  353. Begin
  354.  RunCar:=True;
  355.  For J:=0to 1do For I:=0to 9do Begin
  356.   If CarX[J,I]=-1Then Begin
  357.    CarFound:=False;
  358.    For K:=0to 9do Begin
  359.     If CarX[J,K]in[204..239]Then Begin
  360.  CarFound:=True;
  361.  Goto _Break;
  362. End;
  363.    End;
  364. _Break:
  365.    If Not(CarFound)Then Begin
  366.     If WaitCar=0Then Begin
  367.      WaitCar:=Random(NmWait);
  368.      CarX[J,I]:=204+J*12;CarKr[J,I]:=Random(15);
  369.      If(CarKr[J,I]=LightGray)Then CarKr[J,I]:=LightRed;
  370.      PutCarLeft(CarX[J,I],(11+J)*12,CarKr[I,J]);
  371.     End
  372.      Else
  373.     Dec(WaitCar);
  374.    End;
  375.   End
  376.    Else
  377.   Begin
  378.    PutCarLeft(CarX[J,I],(11+J)*12,LightGray);
  379.    If CarX[J,I]<24Then CarX[J,I]:=-1
  380.     Else
  381.    Begin
  382.     Dec(CarX[J,I],24);
  383.     PutCarLeft(CarX[J,I],(11+J)*12,CarKr[I,J]);
  384.    End;
  385.   End;
  386.   If(FroggerY=(11+J)*12)and((FroggerX-CarX[J,I])in[0..23])Then Exit;
  387.  End;
  388.  For J:=2to 3do For I:=0to 9do Begin
  389.   If CarX[J,I]=-1Then Begin
  390.    CarFound:=False;
  391.    For K:=0to 9do Begin
  392.     If CarX[J,K]in[0..23]Then Begin
  393.  CarFound:=True;
  394.  Goto _Break2;
  395. End;
  396.    End;
  397. _Break2:
  398.    If Not(CarFound)Then Begin
  399.     If WaitCar=0Then Begin
  400.      WaitCar:=Random(NmWait);
  401.      CarX[J,I]:=(J-2)*12;CarKr[J,I]:=Random(15);
  402.      If(CarKr[J,I]=LightGray)Then CarKr[J,I]:=LightRed;
  403.      PutCarRight(CarX[J,I],(11+J)*12,CarKr[I,J]);
  404.     End
  405.      Else
  406.     Dec(WaitCar);
  407.    End;
  408.   End
  409.    Else
  410.   Begin
  411.    PutCarRight(CarX[J,I],(11+J)*12,LightGray);
  412.    Inc(CarX[J,I],24);
  413.    If CarX[J,I]>(240-24)Then CarX[J,I]:=-1
  414.    Else PutCarRight(CarX[J,I],(11+J)*12,CarKr[I,J]);
  415.   End;
  416.   If(FroggerY=(11+J)*12)and((FroggerX-CarX[J,I])in[0..23])Then Exit;
  417.  End;
  418.  RunCar:=False;
  419. End;
  420.  
  421. Procedure PutTimer;
  422. Var
  423.  S:String;
  424. Begin
  425.  _SetTextPosition(23,34);
  426.  _SetTextColor(LightRed);
  427.  Str(Timer,S);
  428.  _OutText(S+'  ');
  429. End;
  430.  
  431. Procedure PutLife;
  432. Var
  433.  J:Byte;
  434. Begin
  435.  _SetColor(LightGreen);
  436.  For J:=0to 3do Begin
  437.   If(Life-1<J)Then _SetColor(Black);
  438.   _PutFrogger(272,10+40*J);
  439.  End;
  440. End;
  441.  
  442. BEGIN
  443.  Randomize;
  444.  If _SetVideoMode(_MRes256Color)=0 Then Begin
  445.   WriteLn('Mode video non supporte');
  446.   Halt;
  447.  End;
  448.  Life:=4;NmWait:=64;Traverser:=0;
  449.  Repeat
  450.   _SetColor(Green);
  451.   _Rectangle(_GFillInterior,0,0,239,35);
  452.   _SetColor(Blue);
  453.   _Rectangle(_GFillInterior,0,3*12,239,10*12-1);
  454.   _SetColor(Green);
  455.   _Rectangle(_GFillInterior,0,10*12,239,11*12-1);
  456.   _SetColor(LightGray);
  457.   _Rectangle(_GFillInterior,0,11*12,239,15*12-1);
  458.   _SetColor(Green);
  459.   _Rectangle(_GFillInterior,0,15*12,239,199);
  460.   _SetColor(LightRed);
  461.   _Rectangle(_GBorder,244,0,315,199);
  462.   _SetTextPosition(21,32);
  463.   _SetTextColor(LightRed);
  464.   _OutText('Horloge:');
  465.   PutLife;
  466.   UpdateTraverser;
  467.   FillChar(CarX,SizeOf(CarX),$FF);
  468.   FillChar(BileauX,SizeOf(Bileaux),$FF);
  469.   WaitCar:=0;WaitBileau:=0;FroggerX:=120;FroggerY:=180;Timer:=400;Accident:=0;
  470.   _SetColor(LightGreen);
  471.   _PutFrogger(FroggerX,FroggerY);
  472.   PutTimer;
  473.   Repeat
  474.    Repeat
  475.     If(RunCar)Then Begin
  476.  Accident:=1;
  477.  Goto _Break3;
  478. End;
  479. If(RunBillot)Then Begin
  480.  Accident:=3;
  481.  Goto _Break3;
  482. End;
  483.     WaitRetrace;
  484.     Dec(Timer);
  485.     PutTimer;
  486.     If Timer=0Then Begin
  487.  Accident:=2;
  488.  Goto _Break4;
  489. End;
  490.    Until KeyPressed;
  491. _Break4:
  492.    If Accident>0Then Goto _Break3;
  493.    K:=Byte(ReadKey);
  494.    If K=0Then K:=K or (Byte(ReadKey)shl 8);
  495.    Case(K)of
  496.     kbLeft:If FroggerX>0Then Begin
  497.      UnputFrogger(FroggerX,FroggerY);
  498.      Dec(FroggerX,12);
  499.      PutFrogger(FroggerX,FroggerY);
  500.     End;
  501.     kbRight:If FroggerX<239-24Then Begin
  502.      UnputFrogger(FroggerX,FroggerY);
  503.      Inc(FroggerX,12);
  504.      PutFrogger(FroggerX,FroggerY);
  505.     End;
  506.     kbUp:If FroggerY>47Then Begin
  507.      UnputFrogger(FroggerX,FroggerY);
  508.      Dec(FroggerY,12);
  509.  If FroggerY<48 Then Begin
  510.   Inc(Traverser);
  511.   If Traverser>3 Then Begin
  512.        _SetTextPosition(0,0);
  513.    _SetTextColor(LightGreen);
  514.    _SetBkColor(Green);
  515.        _OutText('Vous avez gagné, vous avez fait traversé 4 grenouilles sans qu''ils soient écrasé !');
  516.    Exit;
  517.   End
  518.    Else
  519.   Begin
  520.     Goto _Break3;
  521.   End;
  522.  End;
  523.      PutFrogger(FroggerX,FroggerY);
  524.     End;
  525.     kbDn:If FroggerY<180Then Begin
  526.      UnputFrogger(FroggerX,FroggerY);
  527.      Inc(FroggerY,12);
  528.      PutFrogger(FroggerX,FroggerY);
  529.     End;
  530.     kbEsc:Exit;
  531.    End;
  532.   Until False;
  533. _Break3:
  534.   {ClrKbd;}
  535.   Case(Accident)of
  536.    1:Begin
  537.     _SetTextPosition(0,0);
  538. _SetTextColor(LightRed);
  539. _SetBkColor(Green);
  540.     _OutText('Ecrasé par une voiture!');
  541. If (ReadKey=#0)Then;
  542.     Dec(Life);
  543.    End;
  544.    2:Begin
  545. _SetTextPosition(0,0);
  546. _SetTextColor(LightRed);
  547. _SetBkColor(Green);
  548.     _OutText('Manque de temps!');
  549. If (ReadKey=#0)Then;
  550.     Dec(Life);
  551.    End;
  552.    3:Begin
  553.     _SetTextPosition(0,0);
  554. _SetTextColor(LightRed);
  555. _SetBkColor(Green);
  556.     _OutText('A côté du billot !');
  557. If (ReadKey=#0)Then;
  558.     Dec(Life);
  559.    End;
  560.   End;
  561.  Until Life=0;
  562. END.

Code source

Voici le code source du jeu sur GitHub :

Lien Langage de programmation Projet
https://github.com/gladir/quickpascal_frogger/blob/main/FROGGER.PAS QuickPascal quickpascal_frogger


PARTAGER CETTE PAGE SUR
Dernière mise à jour : Jeudi, le 4 août 2022