![]() |
AW: Schiffe versenken programmieren
Also ich würde, wie Sir Rufo schon gesagt hat erst einmal Zettel und Stift zur Hand nehmen und grob die Benutzeroberfläche zeichnen und dir erst eimal darüber Klar werden, wie dein Programm aussehen soll, was passieren soll wenn man auf den und den Button bzw. Feld klickt. D.h. ganz logisch das gesamte Programm erst einmal konzipieren und noch keinen Gedanken daran verschwenden, wie es dann umgesetzt werden soll.
Wenn du das alles gemacht hast kannst Du dir die grobe Strukturierung des Codes überlegen, d.h. noch nicht in Einzelheiten verfallen, sondern dir z.B. überlegen wie viele Units du brauchst(wenn du z.B. mehrere Fenster verwendest), wie diese miteinander verbunden werden sollen und welche Prozeduren du benötigst und was diese wiederum machen sollen. Und dann müsstest Du auch schon das haben, was dein Lehrer von dir bis Dienstag verlangt hat. Danach kannst Du den Code ganz in Ruhe umsetzen. |
AW: Schiffe versenken programmieren
Wofür bräuchte ich mehrere Units?
Und ich muss aber meine Sachen die ich aufgemalt habe irgendwie so verabreiten dass ich das Dienstag abgeben kann.. Ich bin echt überfordet mit dem Versuch wenigstens etwas zu haben :? |
AW: Schiffe versenken programmieren
Mehrere Units bräuchtest du nur dann, wenn Du mehrere Fenster haben willst. Du brauchst ja so oder so 2 Spielfelder für die beiden Spieler. Dann solltest Du z.B. schon mal wissen, ob Du beide Felder in einem Fenster hast (Was allerdings unsinnig wäre da sich dann ja die Spieler gegenseitig aufs Spielfeld gucken könnten, aber das ist programmiertechnisch egal) oder ob Du die Felder nacheinander ein- und ausblenden lassen willst sodass immer das Feld des Spielers, der gerade am Zug ist, aktiv ist. Das sind so grundlegende Sachen, da würde ich mich erst mal entscheiden. Wie Du das dann realisierst, kannst du dann im 2. Schritt überlegen.
Ich weiß ja nicht, in welcher Form dein Lehrer die Projektplanung verlangt, aber grundsätzlich würde es ausreichen, wenn Du im 2.Schritt die Struktur des Quellcodes(z.B. welche Prozeduren benötigt werden) als Diagramm (mit Pfeilen usw.) aufzeichnest. Das kannst Du aber erst machen, wenn Du mit Schritt1 fertig bist. Deswegen würde ich erst mal zur Ruhe kommen und noch mal ganz von Vorne logisch dein Programm aufbauen. |
AW: Schiffe versenken programmieren
Ok ich werde mich morgen nochmal hier melden..
Müsste das ja in paar Stunden morgen hinkriegen /: Aber nochmal zu den Feldern.. Ich hab mir gedacht, dass ich nur ein Feld mache , wo Schiffe zufällig aufgeteilt werden.. Desweiteren hat dann ein Spieler Zeit , diese Schiffe zu suchen und ''zerstören''. Das wichtige dabei ist dann, wie viel Züge er dafür braucht.. Diese Züge werden dann am Ende zusammengerechnet und gelangen in den Highscore. So wäre meine Idee gewesen.. Da ich glaube, dass es mit einem 2 Feld und einem Computer noch schwieriger ist. |
AW: Schiffe versenken programmieren
Achso, dann habe ich das falsch verstanden. Ich habe gedacht, Du wolltest ein Spiel für 2 Spieler machen, die sich dann abwechselnd gegenseitig "beschießen".
So ist das natürlich deutlich einfacher. |
AW: Schiffe versenken programmieren
Zitat:
Zitat:
Zitat:
Code:
weiß man auf dem Papier nicht ob das ein 5'er und dein 2'er Schiff ist, oder ein 4'er und ein 3'er.
0000000000
XXXXX00000 X000000000 X000000000 0000000000 0000000000 Deshalb auf dem Papier:
Code:
Nun ist die Sache klar. Auf dem Papier.
0000000000
XXXXX00000 0000000000 X000000000 X000000000 0000000000 Nun eine Computerversion:
Code:
Kein Problem, hier kann man erkennen welches Feld für welches Schiff gilt.
0000000000
2111100000 2000000000 2000000000 0000000000 0000000000 Aber bleiben wir mal bei den Regeln für Papierversion. Hier zwei Varianten nebeneinander:
Code:
Welche Version ist leichter auszuwerten? Bei der linken Version mußt man erst mit einer Logik das Schiff lokalisieren, dann erkennen um welches es sich handelt, dh. dazu muss man nicht nur Felder zählen, sondern erkennen wo das Schiff einen Anfang und wo Ende hat. Dann zählt man die Felder dazwischen. Sorry, das ist aber mit Verlaub die komplizierteste aller Arten wie man das Problem angehen muss, denn man muss hier eine Logik programmieren. Bei der zweiten Variante weiß ich, dass Schiff 1 fünf Felder lang ist. Jetzt brauche ich nur noch alle Felder prüfen. Finde ich keine 1 mehr auf dem Feld, weiß ich, dann Schiff 1 versunken ist.
0000000000 0000000000
XXXXX00000 1111100000 0000000000 0000000000 X000000000 2000000000 X000000000 2000000000 0000000000 0000000000 Zitat:
Was ich mit meinem abgewandeltem Tic Tac Toe geboten habe ist ein Ziel auf das man hinarbeiten kann. Man fängt auch kein Haus zu bauen ohne zu wissen wie es aussagen will. Das Ziel ist vorgegeben. So abwegig ist also meine Hilfe mit dem Raster nicht. Auf der andere Seite ist die Diskussion wohl aber eher akademisch, denn ich hab das Gefühl, dass der TE sich auf StringGrid eingeschossen hat. |
AW: Schiffe versenken programmieren
Das mit dem Haus ist ein gutes Beispiel.
Bevor auch nur ein Stein bewegt wird (Umsetzung) wird eine Zeichnung erstellt (Plan). Bei Software sind die Steine Codezeilen und die Zeichnung eben der Plan. Die Aufgabe, die der TE zu erfüllen hat besteht aus einem Plan (Deadline Dienstag) und dem fertigen Programm (Deadline in 2 Monaten). Daraus folgere ich: Code hilft ihm im Moment nicht weiter, das Zwischenziel am Dienstag (Plan) zu erreichen. Die Ermittlung ob ein Schiff versenkt wurde, kann mit meiner Methode per Rekursion ermittelt werden (beliebt bei Info-Lehreren) Etwas Ähnliches wird benötigt um die Positionierung des Schiffs zu überprüfen. Des Weiteren würde ich die Schiffe über eine Lookup-Tabelle identifizieren. Dadurch kann das Spielfeld bleiben, wie es ist (und die Schusslogik) auch wenn die Anzahl und Größe der Schiffe variiert. BTW: In einen Plan gehören auch diese unterschiedlichen Lösungsansätze (auch deiner) mit rein und man vergleicht die Vor- und Nachteile. Dann entscheidet man sich für einen Weg und der wird dann umgesetzt. |
AW: Schiffe versenken programmieren
Wobei ich mir schon vorhin überlegt habe wozu überhaupt ein Array nötig ist. Man kann genauso gut 10 Arrays für 10 Schiffe erstellen, die Größe entspricht der Länge der Schiffe, Typ TPoint. Die Koordinate wo sich die Schiffe befinden (bzw. jedes Teil des Schiffes) ist nicht in dem Feld vermerkt, sondern in TPoints des Schiff-Arrays, z. B.
Delphi-Quellcode:
. Schießt der Gegner, prüft man nicht das Feld, sondern geht alle Schiffe durch und prüft auf Treffer.
var Kreuzer1: array[1..5] of TPoint;
So würde ich das angehen, weil am einfachsten. Aber das ist nicht die klassische Methode und ich weiß nicht was der Lehrer sehen will. |
AW: Schiffe versenken programmieren
Zitat:
Delphi-Quellcode:
Naja :wall:
if Feld[X,Y] <> Wasser then
Treffer; |
AW: Schiffe versenken programmieren
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:34 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