AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Schiffe versenken, Platzierung
Thema durchsuchen
Ansicht
Themen-Optionen

Schiffe versenken, Platzierung

Ein Thema von m2zer0 · begonnen am 11. Mai 2010 · letzter Beitrag vom 8. Jun 2010
 
IceBube

Registriert seit: 9. Jul 2008
178 Beiträge
 
#15

Re: Schiffe versenken, Platzierung

  Alt 27. Mai 2010, 22: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
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz