Írjunk programot,
mellyel az itt látható játéktéren lévő lámpácskákat mind felkapcsolhatjuk.
Program Lampak;
(*
Lámpácskák nevű játék
szabályai:
- ha egy lámpának az állapotát megváltoztatjuk,
akkor a szomszédos lámpák állapota is az ellenkezőjére változik;
- egy téglalap alakban elrendezett lámparendszerünk
van, melyben minden lámpa kezdetben kikapcsolt állapotú;
- a lámpák kapcsolgatásával el kell érni azt,
hogy minden lámpa égjen.
*)
Uses NewDelay, Crt,
CrtPlus, Drivers;
Var
S, O, N: Byte;
Ch: Char;
L: Array[0..20,
0..14] Of
Byte;
Ax, Ay: Byte;
Procedure Jatekter;
Var
Ws: String;
Kod: Integer;
I, J: Byte;
Begin
HideMouse;
TextMode(CO80);
Szinek(7,9);
ClrScr;
ShowMouse;
WriteXY(2,3,'Sorok száma (3..12): ');
Repeat
GotoXY(26,3);
ClrEol;
Ws:= Bevitel(1,15,26,3,3);
Val(Ws,S,Kod)
Until S In [3..12];
WriteXY(2,5,'Oszlopok száma (3..18): ');
Repeat
GotoXY(26,5);
ClrEol;
Ws:= Bevitel(1,15,26,5,3);
Val(Ws,O,Kod)
Until O In [3..18];
For I:= 0 To O Do
For J:= 0 To S Do L[I, J]:= 0;
HideMouse;
TextMode(CO80);
Szinek(7,15);
ClrScr;
If Not
Odd(O)
And Not Odd(S) Then Begin Ax:=
19; Ay:= 13 End;
If Not
Odd(O)
And Odd(S) Then Begin
Ax:= 19; Ay:= 14 End;
If Odd(O) And
Not Odd(S) Then Begin
Ax:= 20; Ay:= 13 End;
If Odd(O) And
Odd(S) Then Begin
Ax:= 20; Ay:= 14 End;
Racs(Ax-O, Ay-S,
1,1, O, S);
Tunj;
ShowMouse;
N:=0;
End;
Function Vege: Boolean;
Var
I, J: Byte;
Begin
Vege:= True;
For I:= 1 To O Do
For J:= 1 To S Do If L[I, J]= 0 Then
Begin I:= O; J:= S; Vege:= False End;
End;
Procedure Jatek;
Var
X, Y, Tx, Ty: Byte;
Begin
Repeat
While Not KeyPressed And (MouseButtons=0)
Do;
If KeyPressed Then Exit;
X:= MouseWhere.X +1; Y:= MouseWhere.Y +
1;
If Not(Odd(X)
Or Odd(Y)) Then
If (X>Ax-O)
And (X<Ax+O) And (Y>Ay-S) And (Y<Ay+S) Then
Begin
HideMouse;
Duda;
Inc(N);
GotoXY(38,2);
Szinek(7,14);
Write(N:3);
Tx:= (X-20+O) Div 2 + 1;
Ty:= (Y-14+S) Div 2 + 1;
L[Tx, Ty]:= 1 - L[Tx, Ty];
Szinek(7,15);
WriteXY(X, Y, Chr(32 + L[Tx, Ty] * 187));
L[Tx-1, Ty]:= 1 - L[Tx-1, Ty];
If Tx>1
Then WriteXY(X-2, Y, Chr(32 + L[Tx-1, Ty] * 187));
L[Tx+1, Ty]:= 1 - L[Tx+1, Ty];
If Tx<O Then WriteXY(X+2, Y, Chr(32 + L[Tx+1, Ty] * 187));
L[Tx, Ty-1]:= 1 - L[Tx, Ty-1];
If Ty>1
Then WriteXY(X, Y-2, Chr(32 + L[Tx, Ty-1] * 187));
L[Tx, Ty+1]:= 1 - L[Tx, Ty+1];
If Ty<S Then WriteXY(X, Y+2, Chr(32 + L[Tx, Ty+1] * 187));
SHowMouse;
Tunj;
If Vege Then
Begin
Szinek(7,1+Blink);
WriteXY(12,
2, 'G A M E O
V E R');
Tunj;
Exit
End;
End; While
MouseButtons=1 Do;
Until False;
End;
Begin
InitEvents;
Repeat
Jatekter;
Jatek;
Ch:= ReadKey
Until Ch=#27;
End.