this slowpoke moves

Light Off

Der folgende Code ist ein Logikspiel, bei dem es darum geht, alle farbigen Felder zu entfärben. Die Schwierigkeit liegt darin, dass wenn ein farbiges Feld angeklickt wird, dass alle vier Felder um ihn entfärbt werden, oder andersrum.

type
  TIdRect=record
    Id:string;
    Left,top,right,bottom:integer;
    W,H,Area:integer;
  end;
  
var Form1: TForm1;
    neuesspiel: boolean;
    lfeld:array[0..21,0..21] of boolean;
    zuege:integer;
  
//

// Neues Spiel
procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
begin
  neuesspiel:=true;
  zuege:=0;
  randomize;
  for i:=1 to 20 do
    for j:=1 to 20 do
       lfeld[i,j]:=(random<0.5);
  PaintBox1Paint(sender);
end;


procedure TForm1.Paintbox1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var nr,b,h,xx,br,i,j,xoffset:integer;
begin
  b:=paintbox1.width;
  h:=paintbox1.height;
  nr:=strtoint(edit1.text);
  if nr>20 then begin nr:=20; edit1.text:='20' end;
  xx:=b;
  if h<b then xx:=h;
  br:=(xx-60) div nr;
  xoffset:=(b-nr*br) div 2;
  if (x>=xoffset) and (y>=30) and neuesspiel then begin
    inc(zuege);
    x:=x-xoffset;
    y:=y-30;
    i:=x div br +1;
    j:=y div br +1;
    if (i in [1..nr]) and (j in [1..nr]) then begin
      lfeld[i,j]:=not lfeld[i,j];
      if i>1 then lfeld[i-1,j]:=not lfeld[i-1,j];
      if i<nr then lfeld[i+1,j]:=not lfeld[i+1,j];
      if j>1 then lfeld[i,j-1]:=not lfeld[i,j-1];
      if j<nr then lfeld[i,j+1]:=not lfeld[i,j+1];
      PaintBox1Paint(sender);
    end;
  end;
end;

procedure TForm1.Paintbox1Paint(Sender: TObject);
var xoffset,nr,b,h,x,i,j,br,anz:integer;
    bitmap:tbitmap;
begin
  nr:=strtoint(edit1.text);
  if nr>20 then begin nr:=20; edit1.text:='20' end;
  b:=paintbox1.width;
  h:=paintbox1.height;
  x:=b;
  if h<b then x:=h;
  br:=(x-60) div nr;
  xoffset:=(b-nr*br) div 2;
  bitmap:=tbitmap.create;
  bitmap.width:=paintbox1.width;
  bitmap.height:=paintbox1.height;
  anz:=0;
  for i:=1 to nr do
    for j:=1 to nr do begin
      if lfeld[i,j] then begin
        inc(anz);
        bitmap.canvas.Brush.color:=clyellow;
      end else begin
        bitmap.canvas.Brush.color:=clwhite;
      end;
      bitmap.canvas.rectangle(xoffset+(i-1)*br,30+(j-1)*br,xoffset+i*br+1,30+j*br+1);
    end;
  paintbox1.canvas.draw(0,0,bitmap);
  bitmap.free;
  label1.caption:='Züge '+inttostr(zuege);
  if anz=0 then begin
    if zuege>0 then begin
      showmessage('Gratulation! Aufgabe mit '+inttostr(zuege)+' Zügen geschafft');
    end;
  end;
end;

Keine Kommentare:

Kommentar veröffentlichen

Beliebte Posts

Translate