Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Schiffe versenken - Hilfe benötigt (https://www.delphipraxis.net/167052-schiffe-versenken-hilfe-benoetigt.html)

Liam 11. Mär 2012 13:01

Delphi-Version: 5

Schiffe versenken - Hilfe benötigt
 
Hallo Leute,

Ich habe vor, das schöne Spiel Schiffe versenken zu programmieren.
Leider hab ich absolut gar keine Idee, wie ich anfangen könnte, mit welcher Komponente etc.
Könnt ihr mir da einen Denkanstoß geben?

Meine Überlegungen bisher:
Welche Grid eignet sich als Spielfeld besser, Stringgrid oder Drawgrid?
Da es 2-Spieler werden soll, 4 Spielfelder nutzen, von denen die ausgeblendet werden, wo die Schiffe gesetzt sind - Sinnvoll und machbar?


Danke schonmal
Liam

Bummi 11. Mär 2012 13:10

AW: Schiffe versenken - Hilfe benötigt
 
hierzu gibt es bereits reichlich Material , Suchen : Schiffe versenken

Popov 11. Mär 2012 13:39

AW: Schiffe versenken - Hilfe benötigt
 
Zitat:

Zitat von Liam (Beitrag 1155993)
Welche Grid eignet sich als Spielfeld besser, Stringgrid oder Drawgrid?

Nichts von beidem. Ganz einfache ein Array 2 x 1-10. Den Rest mit einer Bitmap, alternativ Image Bitmap. Dabei bildet die Image in beide Richtungen ein 10'er Feld. Über X/Y der OnMouseDown der Image bekommst du den Klickpunkt. Jetzt kannst du aus der Breite der Image geteilt durch 10 ermitteln welches Feld geklickt wurde. So einfach ist das.

Coffeecoder 11. Mär 2012 15:11

AW: Schiffe versenken - Hilfe benötigt
 
Zitat:

Zitat von Popov (Beitrag 1156005)
Ganz einfache ein Array 2 x 1-10. Den Rest mit einer Bitmap, alternativ Image Bitmap. Dabei bildet die Image in beide Richtungen ein 10'er Feld. Über X/Y der OnMouseDown der Image bekommst du den Klickpunkt. Jetzt kannst du aus der Breite der Image geteilt durch 10 ermitteln welches Feld geklickt wurde. So einfach ist das.

Man könnte aber den Stringgrid als Darstellung nehmen und intern mit einem Array mit 2 Dimensionen arbeiten.

Popov 11. Mär 2012 15:45

AW: Schiffe versenken - Hilfe benötigt
 
Man kann vieles nehmen, aber seinen wir doch ehrlich: StringGrid hört sich zwar leichter an, denn da sind ja schon Grids. Stimmt, den Punkt kann man sich sparen, die Arbeit kommt aber dann später.

Und Image? Da muß man ja alles machen. Stimmt, so viel ist es aber nicht.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  x, y, w, h: Integer;
begin
  with Image1 do //Felder zeichnen
  begin
    w := Width div 10;
    h := Height div 10;

    for x := 0 to 9 do
      for y := 0 to 9 do
        Canvas.Rectangle(x * w, y * h, (x * w) + w, (y * h) + h);
  end;
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  gx, gy: Integer;
begin
  with Image1 do //Felder per Klick ermitteln
  begin
    gx := X div (Width div 10) + 1;
    gy := Y div (Height div 10) + 1;
  end;

  ShowMessage(Format('Feld X: %d, Feld Y: %d', [gx, gy]));
end;

Coffeecoder 11. Mär 2012 15:49

AW: Schiffe versenken - Hilfe benötigt
 
Ok mit dem Image kannst du auch nette Hintergrundbilder einsetzen z.b. dann ein Star-Wars Schiffer versenken erstellen ;)
In dem Sinne kann man optisch einiges mehr machen als mit einem Stringgrid, da stimm ich dir zu.

Popov 11. Mär 2012 15:59

AW: Schiffe versenken - Hilfe benötigt
 
Du bringst mich doch tatsächlich auf eine Idee, ein Schiffe Versenken in drei Dimensionen, also X/Y/Z. Die Schiffe sind auch nicht zweidimensional, sondern dreidimensional, nehmen also Platz in X und Y, aber auch in Z. Das wären dann 1000 Felder, also der 10-fache Spaß.

Eigentlich sehe ich schon das Spiel vor meinem geistigen Auge in einem 3D Raum, aber ich hab keine Ahnung von 3D Engines. Also muß es jemand anders machen. Wäre aber ein nettes Spiel.

Bummi 11. Mär 2012 16:01

AW: Schiffe versenken - Hilfe benötigt
 
Malen kann man überall, auch im Stringgrid.
Letztlich benötigt wird ein TGraphicControl, das primitivste wenn man keine Komponente schreiben möchte ist TPaintBox, die Verwaltungsstruktur wäre ein Array.
Klar kann man auch ein ein Stringgrid für beides missbrauchen, die Verwaltung über Cells die Darstellung über OnDrawCell.

Bummi 11. Mär 2012 16:02

AW: Schiffe versenken - Hilfe benötigt
 
@Popov

Du kannst Dir ja mal GLScene anschauen, liegen reichlich Beispiel bei und ist free.

newmusicslamer 11. Mär 2012 17:58

AW: Schiffe versenken - Hilfe benötigt
 
Wie wäre es wenn du die einzelnen Schiffe mit Muasklicks als image versetzen lässt und cpu mit Zufallszahlen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:30 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz