Delphi-PRAXiS
Seite 5 von 19   « Erste     345 6715     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 19:11

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.

leodinho 12. Jan 2014 19:25

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 :?

TForm1 12. Jan 2014 19:43

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.

leodinho 12. Jan 2014 19:57

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.

TForm1 12. Jan 2014 20:16

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.

Popov 12. Jan 2014 23:45

AW: Schiffe versenken programmieren
 
Zitat:

Zitat von Sir Rufo (Beitrag 1243311)
Mal ne Frage (auch an Popov):

Habt ihr das Spiel "Schiffe versenken" verstanden?

Jep.

Zitat:

Meines Wissens nach gibt es für die Platzierung folgende Regeln:
Steht in etwa auch so in Wikipedia.

Zitat:

Mit diesen Regeln ist es unerheblich zu wissen, welches Schiff es ist, sondern kann durch das Auswerten der Nachbarfelder (horizontal, vertikal) herausfinden ob das Schiff versenkt ist oder nicht.
Jajn. Auf dem Papier ist das sehr einfach. Deshalb sind das auch die Regeln für die Papiervariante, denn bei so einem Aufbau:

Code:
0000000000
XXXXX00000
X000000000
X000000000
0000000000
0000000000
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.

Deshalb auf dem Papier:

Code:
0000000000
XXXXX00000
0000000000
X000000000
X000000000
0000000000
Nun ist die Sache klar. Auf dem Papier.

Nun eine Computerversion:

Code:
0000000000
2111100000
2000000000
2000000000
0000000000
0000000000
Kein Problem, hier kann man erkennen welches Feld für welches Schiff gilt.

Aber bleiben wir mal bei den Regeln für Papierversion. Hier zwei Varianten nebeneinander:

Code:
0000000000 0000000000
XXXXX00000 1111100000
0000000000 0000000000
X000000000 2000000000
X000000000 2000000000
0000000000 0000000000
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.

Zitat:

@Popov

Eine Textaufgabe löst man, indem man den Sinn versteht, in einzelnen logischen Teile zerlegt und sich den passenden Rechenweg überlegt.
Dann fängt man an zu rechnen.
Ja. Aber wenn nach zwei Tagen immer noch die Bitte zu hören ist, dass die Idee für den Anfang fehlt, dann sollte man vielleicht ein Ziel vorschlagen. Das ist wie mit einer Reise in den Urlaub wo man am Flughafen steht und nicht weiß wo man eigentlich hin will.

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.

Sir Rufo 13. Jan 2014 00:22

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.

Popov 13. Jan 2014 01:12

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:
var Kreuzer1: array[1..5] of TPoint;
. Schießt der Gegner, prüft man nicht das Feld, sondern geht alle Schiffe durch und prüft auf Treffer.

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.

Mavarik 13. Jan 2014 10:19

AW: Schiffe versenken programmieren
 
Zitat:

Zitat von Popov (Beitrag 1243351)
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:
var Kreuzer1: array[1..5] of TPoint;
. Schießt der Gegner, prüft man nicht das Feld, sondern geht alle Schiffe durch und prüft auf Treffer.

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.

Einfacher als

Delphi-Quellcode:
if Feld[X,Y] <> Wasser then
  Treffer;
Naja :wall:

Mavarik 13. Jan 2014 10:22

AW: Schiffe versenken programmieren
 
Zitat:

Zitat von leodinho (Beitrag 1243280)
@ Mavarik
Kannst du gerne machen jedoch hilft mir das auch nicht weiter, wenn ich ein fertiges Programm oderso hätte..

Danke für die Erlaubnis! Die Zielgruppe waren auch eher die Profis hier im Forum. Gedacht als kleine Abwechslung für zwischendurch.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:52 Uhr.
Seite 5 von 19   « Erste     345 6715     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