Delphi-PRAXiS
Seite 3 von 19     123 4513     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Schiffe versenken programmieren (https://www.delphipraxis.net/178499-schiffe-versenken-programmieren.html)

TForm1 12. Jan 2014 15:54

AW: Schiffe versenken programmieren
 
Ich würde mir vielleicht erst mal dieses Tutorial hier anschauen, ist zwar kein Schiffe versenken, aber von der Grundart (Spielfeld usw.) sehr ähnlich. Dabei lernt man auch gleich die grundsätzliche Verwendung von Bitmaps und wie man darauf zeichnet. Das ist zwar deutlich umständlicher, aber dafür ist der Lerneffekt größer :wink:. Danach kannst Du ja versuchen das Konzept soweit auf dein Konzept zu übertragen.

leodinho 12. Jan 2014 15:56

AW: Schiffe versenken programmieren
 
Ok habe ich jetzt gemacht..
12x12 Spielfeld aufgezeichnet ..
Ist bloß scheiße wenn die Schiff zufällig drauf sein sollen /:

Popov 12. Jan 2014 16:01

AW: Schiffe versenken programmieren
 
@leodinho

Meine Frage zu diesem Zeitpunkt ist: welche Programmierkenntnisse habt ihr?

Die Frage ist wichtig, denn ein Problem kann man verschieden anpacken. Man kann z. B. eine TSchiffeVersenken Klasse erstellen. Nur stellt sich die Frage ob der Lehrer dir das dann auch abnimmt. Hat ihr das schon durchgekommen? Oder ohne Klasse. Soll alles einfach oder bunt sein, usw.

Mavarik 12. Jan 2014 16:08

AW: Schiffe versenken programmieren
 
So langsam bekomme ich lust Schiffe versenken zu programmieren...

1:1 über tcp/ip in Firemonkey 3d und so... :stupid:

Sollen wir einfach mal?

Mavarik

Sir Rufo 12. Jan 2014 16:09

AW: Schiffe versenken programmieren
 
Zitat:

Zitat von leodinho (Beitrag 1243276)
Ok habe ich jetzt gemacht..
12x12 Spielfeld aufgezeichnet ..
Ist bloß scheiße wenn die Schiff zufällig drauf sein sollen /:

Und, wo ist das Problem?

Suche dir einen zufälligen Punkt und eine zufällige Richtung (links, oben, rechts, unten).
Jetzt versuchen das Schiff anhand der Vorgabe zu platzieren.
Wenn das nicht geht, dann neuer Punkt neue Richtung

Wenn das geht dann zum nächsten Schiff

leodinho 12. Jan 2014 16:19

AW: Schiffe versenken programmieren
 
@ Mavarik
Kannst du gerne machen jedoch hilft mir das auch nicht weiter, wenn ich ein fertiges Programm oderso hätte..

@ Popov

Wir haben halt alle Grundlagen von Algorhtymenstrukturen zu Variablen bis hin zu Schleifen und Verkettunken und noch am Ende Sortier und Such - Algorythmen..
Das Problem: Viele aus meiner Klasse müssen halt nur eine Datenbank eines Sportvereins etc erstellen , was nicht so schwer ist.. Ich hab halt die Aufgabe bekommen ein Programm zu programmieren /:

Popov 12. Jan 2014 16:19

AW: Schiffe versenken programmieren
 
Ich hab hier ein Ansatz, ein Spielfeld. Benötigt wird eine PaintBox. Das habe ich mal für Tic Tac Toe erstellt. Ich hab es nur auf 12 Felder erweitert. Das Feld ist simpel und die Ansteuerung ist simpel. Vielleicht bringt es dich auf eine Idee.
Delphi-Quellcode:
const
  MaxFelder = 12;

//Breite der Zelle
function CellWidth(Canvas: TCanvas): Integer;
begin
  with Canvas do
    Result := (ClipRect.Right - ClipRect.Left) div (MaxFelder + 1);
end;

//Höhe der Zelle
function CellHeight(Canvas: TCanvas): Integer;
begin
  with Canvas do
    Result := (ClipRect.Bottom - ClipRect.Top) div (MaxFelder + 1);
end;

//Rect-Bereich der Zelle
function CellRect(Canvas: TCanvas; x, y: Integer): TRect;
begin
  with Canvas do
    Result := Rect(x * CellWidth(Canvas), y * CellHeight(Canvas),
      (x + 1) * CellWidth(Canvas), (y + 1) * CellHeight(Canvas));
end;

//Text in Zelle mittig plazieren (horizontal und vertikal)
procedure CellRectText(Canvas: TCanvas; x, y: Integer; Text: String);
var
  a, b: Integer;
begin
  with Canvas do
  begin
    //Vermittelt Text in Höhe und Breite
    a := (CellWidth(Canvas) div 2) - (TextWidth(Text) div 2);
    b := (CellHeight(Canvas) div 2) - (TextHeight(Text) div 2);

    with Canvas do
      TextRect(CellRect(Canvas, x, y), (x * CellWidth(Canvas)) + a, (y * CellHeight(Canvas)) + b, Text);
  end;
end;

procedure DrawMatrix(Canvas: TCanvas);
var
  x, y: Integer;
  s: String;
begin
  with Canvas do
  begin
    Font.Color := clBlack;
    Font.Style := [] + [fsBold];

    //X-Koordinaten-Beschriftung zeichnen (1, 2, 3, ...)
    y := 0;
    for x := 1 to MaxFelder do
    begin
      s := IntToStr(x);
      CellRectText(Canvas, x, y, s);
    end;

    //Y-Koordinaten-Beschriftung zeichnen (A, B, C, ...)
    x := 0;
    for y := 1 to MaxFelder do
    begin
      s := Chr(y + 64); //64 ist das Ascii-Zeichen für @, ein Zeichen vor A
      CellRectText(Canvas, x, y, s);
    end;

    //Beispiel
    CellRectText(Canvas, 3, 5, 'X');
    CellRectText(Canvas, 6, 9, 'X');
    CellRectText(Canvas, 4, 7, 'O');


    //Gitter zeichnen
    Canvas.Brush.Style := bsClear;
    for x := 1 to MaxFelder do
      for y := 1 to MaxFelder do
      begin
        Pen.Color := clGray;

        Rectangle(CellRect(Canvas, x, y));
      end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  with PaintBox1 do
    DrawMatrix(Canvas);
end;

Sir Rufo 12. Jan 2014 16:28

AW: Schiffe versenken programmieren
 
@Popov

Das ist aber der Teil der zum Schluß kommt. Der TE hat aber bis jetzt nur den linken Fuß gehoben.
Von losgehen oder Schluß in Sicht kann man hier nicht sprechen.

Von daher trägt dein Beitrag im Moment nur zur Verwirrung bei.
Zu einem späteren Zeitpunkt wird dieser Beitrag sehr hilfreich sein.

leodinho 12. Jan 2014 16:38

AW: Schiffe versenken programmieren
 
Ja ich wollte es auch grad schreiben..
Ich bin mir unschlüssig wie ich nun das Feld erstellen soll..
Soll ich es mit einer Imagekomponente oder mit einem StringGrid machen?
Ich weiß einfach nicht wie ich anfangen soll..
Aufgemalt habe ich auch schon alles aber hilft auch nicht /:

Popov 12. Jan 2014 16:51

AW: Schiffe versenken programmieren
 
@Sir Rufo

Da bin ich vorläufig einer anderen Meinung. Im Grunde würde ich die evtl. zustimmen, aber unter anderen Umständen. Ich weiß auf was du hinaus willst. Zuerst zwei Arrays erstellen, Schiffe platzieren und das Ganze trocken abspielen. Und wenn alles funktioniert, kümmern wir uns um die Ausgabe.

Auf der anderen Seite fragt der TE schon seit zwei Tagen und bis auf warme Worte hat er bisher nichts bekommen, d. h. der hat noch nicht mal den ersten Schritt gemacht.

Der Code oben ist ein mögliches Ziel. Er kann sich auch ein anderes entwickeln, aber es ist vorläufig ein Ziel. Ein Feld von 12x12. Auf das hin kann er hinarbeiten.

Wenn du aber meinst, dass kein professioneller Programmierer so arbeitet, er ist kein professioneller Programmierer.

@leodinho

Als der Lehrer Aufgaben verteilte hast du vermutlich gedacht eine leichtere Aufgabe ergattert zu haben. Das war vermutlich kein guter Gedanke.

Du überlegst nun das Ganze mit einem StringGrid zu lösen, weil es ja schon das typische Feld hat. Ich denke nicht, dass das ein guter Gedanke ist. Es hat Vorteile, man muss nichts zeichnen, aber das Beispiel oben zeigt, dass das Zeichnen das kleinste Problem ist. Die Nachteile die ein StringGrid mit sich bringt kommen später.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:39 Uhr.
Seite 3 von 19     123 4513     Letzte »    

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