uses crt,keyboard; const MAXLINES = 10; const MAXCOLUMNS = 10; type Candy = (Ye, Og, Gr, Re, Bl, Pu); type Cases = record sweet: Candy; empty: boolean; end; type Grid = Array [1..MAXCOLUMNS, 1..MAXLINES] of Cases; type Coordinates = record x : Integer; //colonnes y : integer; //lignes end; procedure nouvelleCase(x, y: Integer; var grid1: Grid); //Créer une nouvelle case var a: Integer; begin a:= random(6); case a of 0: grid1[x,y].sweet:= Ye; 1: grid1[x,y].sweet:= Og; 2: grid1[x,y].sweet:= Gr; 3: grid1[x,y].sweet:= Re; 4: grid1[x,y].sweet:= Bl; 5: grid1[x,y].sweet:= Pu; end; end; procedure nouvelleGrille(var grid1: Grid; var pos: Coordinates); //Créer la grille var i,j: integer; begin pos.x:=1; pos.y:=1; randomize; for i:=1 to MAXCOLUMNS do for j:=1 to MAXLINES do nouvelleCase(i,j,grid1); end; procedure afficherBonbon (i, j: Integer; grid1: Grid); //afficher les bonbons begin case grid1[j,i].sweet of Ye: begin textcolor(Yellow); write(' Y '); end; Og: begin textcolor(Brown); write(' O '); end; Gr: begin textcolor(Green); write(' G '); end; Re: begin textcolor(Red); write(' R '); end; Bl: begin textcolor(Blue); write(' B '); end; Pu: begin textcolor(Magenta); write(' P '); end; end; end; procedure afficherGrille(pos: Coordinates; var grid1: Grid); //Afficher la grille var i, j: Integer; begin ClrScr; for i:=1 to MAXLINES do begin for j:=1 to MAXCOLUMNS do if (j=pos.x) and (i=pos.y)then begin textBackground(White); afficherBonbon(i, j, grid1); textBackground(Black); end else afficherBonbon(i, j, grid1); writeln(); end; TextColor(White); writeln (); end; function getMove (): TKeyEvent; //récupérer la touche entrée par l'utilisateur var k: TKeyEvent; begin InitKeyboard; k:= GetKeyEvent(); k:= TranslateKeyEvent(k); DoneKeyboard; getMove:= k; end; procedure move (var pos: Coordinates; var selection,quit: Boolean); //Déplacement dans la grille var k: TKeyEvent; begin k:= getMove(); if (k<>0) then case KeyEventtostring(k) of 'Up' : if (pos.y) > 1 then pos.y := pos.y -1; 'Down' : if (pos.y) < MAXLINES then pos.y := pos.y +1; 'Right' : if (pos.x) < MAXCOLUMNS then pos.x := pos.x +1; 'Left' : if (pos.x) >1 then pos.x := pos.x -1; 'q' : quit := False; 'a' : selection:=True end; end; procedure switch(grid1 : Grid;pos:Coordinates;i,j,k,l:Integer;selection,quit:Boolean); //Echanger deux bonbons var n :Candy; begin i:=pos.x; j:=pos.y; move(pos,selection,quit); afficherGrille(pos,grid1); k:=pos.x; l:=pos.y; n:=grid1[i,j].sweet; grid1[i,j].sweet:=grid1[k,l].sweet; grid1[k,l].sweet:=n; afficherGrille(pos,grid1); end; procedure jeuPrincipal(); var grid1 : Grid; pos : Coordinates; quit,selection : Boolean; i,j,k,l:Integer; begin i:=0; j:=0; k:=0; l:=0; quit:=True; selection:=False; nouvelleGrille(grid1,pos); afficherGrille(pos,grid1); repeat begin selection:=False; move(pos,selection,quit); afficherGrille(pos,grid1); if selection=True then begin switch(grid1,pos,i,j,k,l,selection,quit); selection:=False; end; end; until quit=False; end; begin jeuPrincipal(); end.