1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
(* Projet Puissance 4 *)
program grille;
{$FRAME_WIDTH 459}
{$FRAME_HEIGHT 408}
{$BACKGROUND $310062}
uses
Flash8, Couleurs;
type
tCellule = class(MovieClip)
etat: integer;
cx, cy: integer;
constructor create(name: string; x, y: integer);
procedure doRelease;
procedure colorie;
procedure attribue(nEtat: integer);
procedure onEnterFrame; override;
end;
const
vide = 0;
blanc = 1;
noir = -1;
r = 16;
var
cellules: array [0 .. 6, 0 .. 5] of tCellule;
x, y: integer;
s: string;
compteur: integer;
trait: integer;
caseX: integer;
caseY: integer;
procedure nouvellePartie;
var
x, y: integer;
begin
compteur := 0;
for x := 0 to 6 do for y := 0 to 5 do cellules[x, y].attribue(vide);
trait := blanc;
//
caseX := -1;
//
end;
constructor tCellule.create(name: string; x, y: integer);
begin
inherited create(_root, name, x + 7 * y);
cx := x;
cy := y;
_x := x * 51 + 25 + 51;
_y := y * 51 + 25 + 51;
onRelease := doRelease;
end;
procedure tCellule.doRelease;
begin
if (caseX < 0) and (compteur < 7 * 6) and (cellules[cx, 0].etat = vide) then
begin
inc(compteur);
caseX := cx;
caseY := 0;
cellules[caseX, caseY].attribue(trait);
trait := - trait;
end;
end;
procedure tCellule.colorie;
var
c: integer;
begin
lineStyle(0, DarkIndigo);
moveTo(-r, 0);
case etat of
vide : c := Indigo;
blanc: c := Amethyst;
noir : c := PersianBlue;//MediumBlue;//DarkOrchid;//BlueViolet;
end;
beginFill(c);
curveTo(-r, -r, 0, -r);
curveTo( r, -r, r, 0);
curveTo( r, r, 0, r);
curveTo(-r, r, -r, 0);
end;
procedure tCellule.attribue(nEtat: integer);
begin
etat := nEtat;
colorie;
end;
procedure tCellule.onEnterFrame;
begin
if (cx = caseX) and (cy = caseY) then
begin
if (cy = 5) or (cellules[cx, cy + 1].etat <> vide) then
//
caseX := -1
//
else
begin
Inc(caseY);
cellules[caseX, caseY].attribue(etat);
attribue(vide);
end;
end;
end;
begin
for x := 0 to 6 do for y := 0 to 5 do
begin
s := 'cell_' + IntToStr(x) + '_' + IntToStr(y);
cellules[x,y] := tCellule.create(s, x, y);
end;
nouvellePartie;
stage.scaleMode := 'noScale';
end. |
Partager