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