Registriert seit: 9. Jul 2008
178 Beiträge
|
Re: Schiffe versenken, Platzierung
27. Mai 2010, 23:51
Hallo!
Mir war langweilig , und dachte ich schreib dir schnell meine Variante dazu..
Delphi-Quellcode:
type
//Schiff Typ (Size, Senkrecht?)
TTypus = Record
Size : Integer;
Senkrecht : Boolean;
end;
//Form
TForm1 = class(TForm)
DrawGrid1: TDrawGrid;
procedure DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
procedure DrawGrid1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
//NewGame
procedure NewGame();
var
Form1: TForm1;
//Schiffm Typen (0=Unbesetz, 1=Besetzt, 2=Treffer)
Ships : Array[0..25, 0..20] of Integer;
Typen : Array[0..2] of TTypus;
//Aktiv - Gesetzt Schiff-typ
Aktiv : Integer;
//State - 0 = Setzen, 1=Play..
State : Integer;
implementation
{$R *.dfm}
procedure NewGame();
var
X, Y : Integer;
begin
//----
//Neues Spiel
//----
for Y := 0 to 20 do
for X := 0 to 25 do
Ships[X, Y] := 0;
//
Form1.DrawGrid1.Repaint;
end;
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
//----
//DrawCell - TDrawGrid
//----
with Sender as TDrawGrid do
begin
//
case Ships[aCol, aRow] of
0: Canvas.Brush.Color := clWhite; //Frei
1: Canvas.Brush.Color := clRed; //Besetzt
2: Canvas.Brush.Color := clBlue; //Treffer
end;
//
canvas.fillrect(rect);
end;
end;
procedure TForm1.DrawGrid1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Row, Col : Integer;
I, iX, iY : Integer;
Typ : TTypus;
//------------------
Collision : Boolean;
begin
//----
//Setze ein Schiff
//----
DrawGrid1.MouseToCell(X, Y, Col, Row);
//
if State = 1 then
begin
//Treffer
if Ships[Col, Row] = 1 then
Ships[Col, Row] := 2
else
ShowMessage('Kein Treffer!');
//Alle gefunden?
Collision := True;
for iY := 0 to 20 do
for iX := 0 to 25 do
if Ships[iX,iY] = 1 then Collision := False;
//
if Collision then
//Gewonnen
ShowMessage('Sie haben gewonnen!');
Exit;
end;
//Typ
Typ := Typen[Aktiv];
//Prüfen
Collision := False;
if not Typ.Senkrecht then
for I := -1 to Typ.Size do
begin
if Ships[Col+I, Row] = 1 then Collision := True;
//Auf den Seiten?
if Ships[Col+I, Row+1] = 1 then Collision := True;
if Ships[Col+I, Row-1] = 1 then Collision := True
end
else
for I := -1 to Typ.Size do
begin
if Ships[Col, Row+I] = 1 then Collision := True;
//Auf den Seiten?
if Ships[Col+1, Row+I] = 1 then Collision := True;
if Ships[Col-1, Row+I] = 1 then Collision := True;
end;
//Collision?
if Collision then
begin
ShowMessage('Sie können hier kein Schiff setzen!');
Exit;
end;
//
if not Typ.Senkrecht then
for I := 0 to Typ.Size-1 do
Ships[Col+I, Row] := 1
else
for I := 0 to Typ.Size-1 do
Ships[Col, Row+I] := 1;
//
DrawGrid1.Repaint;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
//--------
//Form Create
//--------
//Typen
//--------------------------
//5er Schiff Waagrecht
Typen[0].Size := 5;
Typen[0].Senkrecht := False;
//3er Schiff Senkrecht
Typen[1].Size := 3;
Typen[1].Senkrecht := True;
//2er Schiff Senkrecht
Typen[2].Size := 2;
Typen[2].Senkrecht := True;
//--------------------------
//Aktives Schiff (0-2)
Aktiv := 2;
//
State := 0;
end;
Hoffe das hilft dir
lg
Edit : Spielmode hinzugefügt...
Edit2: Dachte man kann die Schiffe auch nebeinander bauen :S
Jetzt aber nicht mehr
|
|
Zitat
|