Forum
Tipps
News
Menu-Icon

Delphi 5, ich muss ein solitär spiel schreiben aber komm nicht weiter

tach leute,
ich habe ein problem, ich muss ein solitär spiel machen das die kleinst mögliche anzahl an zügen braucht um das feld der pinne auf einen pinn zu reduzieren.

ich habe bereits ein spielfeld konzipiert (tabelle) und dieses auch mit pinnen (also O's) gefüllt. danach habe ich die ersten zwei züge programiert, so dass der sich das leere feld quasi sucht.
hier das prog:

procedure TForm1.StartClick(Sender: TObject);
    procedure fuellen;
    var i,j,x,y: Integer;
    begin
     i:=0;
     j:=0;
     With StringGrid1 do begin
      repeat begin
       Cells[i,0]:='XXX';
       Cells[0,i]:='XXX';
       Cells[i,8]:='XXX';
       Cells[8,i]:='XXX';
       i:=i+1;
      end;
      until i>8;
      repeat begin
       if j<3 then begin
        Cells[1,j]:='XXX';
        Cells[2,j]:='XXX';
        Cells[6,j]:='XXX';
        Cells[7,j]:='XXX';
       end;
      if j>5 then begin
        Cells[1,j]:='XXX';
        Cells[2,j]:='XXX';
        Cells[6,j]:='XXX';
        Cells[7,j]:='XXX';
       end;
       j:=j+1;
      end;
      until j>8;
      end;
     x:=1;
     y:=1;
     With StringGrid1 do begin
      repeat begin
       repeat begin
        If Cells[x,y]='' then begin
         Cells[x,y]:=' 0';
         y:=y+1;
        end
        else
         y:=y+1;
        end;
        until (y=8);
       y:=1;
       x:=x+1;
       end;
      until (x=8);
     Cells[4,4]:='';
     end;
     end;

begin
fuellen;
end;

procedure TForm1.BeendenClick(Sender: TObject);
begin
close;
end;

procedure TForm1.ZugButtonClick(Sender: TObject);
var x,y : integer;
begin
 x:=5; y:=5;
 repeat begin
  With StringGrid1 do begin
    if (Cells[x,y]=' 0') and (Cells[x-1,y]=' 0') and (Cells[x+1,y]='') then begin
     Cells[x-1,y]:='';
     Cells[x,y]:='';
     Cells[x+1,y]:=' 0';
    end
    else begin
     x:=x-1;
    end
  end; end
 until x=1;
 x:=5; y:=y-1;
 repeat begin
  With StringGrid1 do begin
    if (Cells[x,y]=' 0') and (Cells[x,y-1]=' 0') and (Cells[x,y+1]='') then begin
     Cells[x,y-1]:='';
     Cells[x,y]:='';
     Cells[x,y+1]:=' 0';
    end
    else begin
     x:=x-1;
    end
  end; end
 until x=1;
end;

wenn jemand ne idee hat, nur her damit..
ich danke schonmal im vorraus


Antworten zu Delphi 5, ich muss ein solitär spiel schreiben aber komm nicht weiter:

also ich nochmal,

ich danke das mit der tabell ist vieleicht nicht so das rosige! leider weiß ich aber auch nicht was ich sonst nehmen kann. die ganzen anderen sachen sind zu krass zu programieren weil man die felder nicht mit variablen anpeilen kann, oder doch?
wenn ihr ne andere idee habt wie ich das machen kann bin ich natürlich nicht abgeneigt.

tach leute,
ich habe ein problem, ich muss ein solitär spiel machen das die kleinst mögliche anzahl an zügen braucht um das feld der pinne auf einen pinn zu reduzieren.

ich habe bereits ein spielfeld konzipiert (tabelle) und dieses auch mit pinnen (also O's) gefüllt. danach habe ich die ersten zwei züge programiert, so dass der sich das leere feld quasi sucht.
hier das prog:

procedure TForm1.StartClick(Sender: TObject);
    procedure fuellen;
    var i,j,x,y: Integer;
    begin
     i:=0;
     j:=0;
     With StringGrid1 do begin
      repeat begin
       Cells[i,0]:='XXX';
       Cells[0,i]:='XXX';
       Cells[i,8]:='XXX';
       Cells[8,i]:='XXX';
       i:=i+1;
      end;
      until i>8;
      repeat begin
       if j<3 then begin
        Cells[1,j]:='XXX';
        Cells[2,j]:='XXX';
        Cells[6,j]:='XXX';
        Cells[7,j]:='XXX';
       end;
      if j>5 then begin
        Cells[1,j]:='XXX';
        Cells[2,j]:='XXX';
        Cells[6,j]:='XXX';
        Cells[7,j]:='XXX';
       end;
       j:=j+1;
      end;
      until j>8;
      end;
     x:=1;
     y:=1;
     With StringGrid1 do begin
      repeat begin
       repeat begin
        If Cells[x,y]='' then begin
         Cells[x,y]:=' 0';
         y:=y+1;
        end
        else
         y:=y+1;
        end;
        until (y=8);
       y:=1;
       x:=x+1;
       end;
      until (x=8);
     Cells[4,4]:='';
     end;
     end;

begin
fuellen;
end;

procedure TForm1.BeendenClick(Sender: TObject);
begin
close;
end;

procedure TForm1.ZugButtonClick(Sender: TObject);
var x,y : integer;
begin
 x:=5; y:=5;
 repeat begin
  With StringGrid1 do begin
    if (Cells[x,y]=' 0') and (Cells[x-1,y]=' 0') and (Cells[x+1,y]='') then begin
     Cells[x-1,y]:='';
     Cells[x,y]:='';
     Cells[x+1,y]:=' 0';
    end
    else begin
     x:=x-1;
    end
  end; end
 until x=1;
 x:=5; y:=y-1;
 repeat begin
  With StringGrid1 do begin
    if (Cells[x,y]=' 0') and (Cells[x,y-1]=' 0') and (Cells[x,y+1]='') then begin
     Cells[x,y-1]:='';
     Cells[x,y]:='';
     Cells[x,y+1]:=' 0';
    end
    else begin
     x:=x-1;
    end
  end; end
 until x=1;
end;

wenn jemand ne idee hat, nur her damit..
ich danke schonmal im vorraus

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Solitär kenn ich eigentlich nur als Kartenspiel,wärend du dich ja irgendwie auf einem Spielfeld von 9x9 Feldern bewegst.

Beschreib mal genau, wie das Spiel funktionieren soll:
- Spielfeld ?
- Start"aufstellung" (?)
- Regeln?
- Gewinn/Niederlagebedingungen?

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
http://de.wikipedia.org/wiki/Solit%C3%A4r_%28Brettspiel%29
Da ist das Spiel erklärt...

und auch ein Abschnitt über Computerprogramme ist da enthalten...

Was du da aber am Besten für ne Representation holst... keine Ahnung. Das mit dem 2-Dimensionalen Array da (nix anderes ist der Datenteil der Tabelle ja) is denke ich schon okey.

danke sehr,
das hilft mir sehr weiter, jetzt kann ich einfach alle züge programmieren. merkt mein lehrer eh nicht


« Was ist ein Array?Join Problem »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!