![]() |
AW: Schiffe versenken programmieren
Ich würde mir vielleicht erst mal
![]() |
AW: Schiffe versenken programmieren
Ok habe ich jetzt gemacht..
12x12 Spielfeld aufgezeichnet .. Ist bloß scheiße wenn die Schiff zufällig drauf sein sollen /: |
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. |
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 |
AW: Schiffe versenken programmieren
Zitat:
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 |
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 /: |
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; |
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. |
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 /: |
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 03:36 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