![]() |
AW: Schiffe versenken programmieren
Mit schönem Gruß von uns alle an Deinen Informatik-Lehrer.
Er möge sich hier mal einloggen, damit wir Ihn mal so richtig durch den Wolf drehen können... OK... Wie mache ich aus einem Array ein Spielfeld...
Delphi-Quellcode:
Spielfeld;
Var
Feld : Array ['A'..'B',1..2] of Integer; AB 1.. 2.o Initialisierung:
Delphi-Quellcode:
Schuss:
begin
Feld['A',1] := 0; // Wasser Feld['A',2] := 0; // Wasser Feld['B',1] := 0; // s.o. Feld['B',2] := 1; // U-Boot end; Gegeben sind 2 Edit Felder. 1x für die Spalte "A..B" ('L' in Deinem Fall) 1x für die Reihe
Delphi-Quellcode:
Verstanden?
var
Spalte : Shortstring; // eigentlich auch ein "Array" ;-) Reihe : Integer; begin Spalte := copy(Uppercase(trim(Edit1.Text)),1,1); Reihe := Strtoint(trim(Edit2.Text)); if Feld[Spalte[1],Reihe] = 0 then // Ausgabe "Wasser" else // Ausgabe "Treffer" end; Mavarik PS.: 120 Nachtrichten für so ein kleines Thema... Klingt langsam wie ein Wettbewerb... Wer Programmiert Schiffe-Versenken mit den wenigsten Zeilen Source-Code... Müssen nur noch die Rahmenbedingungen festlegen... |
AW: Schiffe versenken programmieren
[OT]
Zitat:
Gruß K-H [/OT] |
AW: Schiffe versenken programmieren
Zitat:
Das Wasser sagt "Mir doch egal wer Schuld ist" |
AW: Schiffe versenken programmieren
Zitat:
Hast natürlich recht, aber das ist doch auch die Aufgabe eines Lehrers den Stoff so zu vermitteln, dass der Schüler Ihn versteht. So eine Aufgabe "Programmier mal Schiffeversenken" kommt ja nicht von 0 auf 100. Das Thema wurde doch sicherlich aufgebaut... ![]() [/OT] |
AW: Schiffe versenken programmieren
Zitat:
|
AW: Schiffe versenken programmieren
:?::?::?:
Ich bekomme es aber nicht auf meine Form übertragen /: |
AW: Schiffe versenken programmieren
Zitat:
|
AW: Schiffe versenken programmieren
Zitat:
Was von wo nach wo? Kannst du bitte deine Frange etwas ausführlicher stellen? |
AW: Schiffe versenken programmieren
Zitat:
|
AW: Schiffe versenken programmieren
.. das kommt ja auch erst später...
Ein Array ist ein nicht visuelles Element. Ein StringGrid/DrawGrid kannst Du zum anzeigen verwenden. Das Array ist zur Datenhaltung gedacht. Das StringGrid/DrawGrid zur Anzeige der Daten. Im Prinzip musst Du nach jeder Aktion ducht das Array wandern und anhand der Daten das StringGrid/DrawGrid füllen. Grüße Klaus |
AW: Schiffe versenken programmieren
@Sir Rufo
Ok , bis zur Ausgabe habe ich es jetzt.. Wie könnte ich jetzt weitermachen? |
AW: Schiffe versenken programmieren
Zitat:
|
AW: Schiffe versenken programmieren
Zitat:
Delphi-Quellcode:
Ist jetzt nach deiner Idee und etwas andere Begriffe..
var
Form1: TForm1; Spielfeld : array[0..11,0..11] of integer; const wasser = 0 ; nahschiff = 1; //zur Positionierung der schiffe schiff = 2; twert = 10; T_wasser = wasser + twert; T_nahschiff = nahschiff + twert; T_schiff = schiff + twert; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var x, y : integer; begin // Ausgabe des Spielfeldes for y := 0 to 11 do for x := 0 to 11 do begin case Spielfeld[x,y] of wasser : Write( ' ' ); nahschiff : Write( '+' ); schiff : Write( '#' ); T_wasser : Write( 'o' ); T_nahwasser : Write( '*' ); T_schiff : Write( 'X' ); end; end; WriteLn; // Neue Zeile end; end. Wäre das soweit erstmal richtig? |
AW: Schiffe versenken programmieren
@leodinho
Kopiere nicht wieder, verstehe es. Wähl nicht wieder den Weg des kleinsten Widerstandes. Das wichtigste ist zuerst zu verstehen was ein Array ist, und was ich bisher gelesen habe, ist es noch nicht so 100% drin. Eine Variable kann ein Wert aufnehmen: Zitat:
Code:
Wobei man auch statt Integer auch ein zweites Array nehmen kann - z. B. array[1..3] of array[1..3] of Integer; - abgekürzt array[1..3, 1..3] of Integer - aber im Grunde genommen gleich. Das Array kann dann 3 x 3 = 9 Werte aufnehmen. Stellt man sich das nun zweidimensional vor, ergibt das ein Feld:
a[1] := 4;
a[2] := 3; 2[3] := 9; Zitat:
Delphi-Quellcode:
Wieso hast du das so gemacht, und nicht anders? Ich hoffe du hast es nicht nur angeschrieben.
var
Form1: TForm1; Spielfeld : array[0..11,0..11] of integer; Als erstes, es spielt nicht wirklich eine große Rolle, aber man sollte stets den kleinsten Variablentyp nehmen den man benötigt (auch wenn himitsu vermutlich gleich korrekterweise einwenden wird, dass Integer für die Verarbeitung trotz dem günstiger ist, trotzdem...). Ein ShortInt als Typ ist vermutlich ausreichend. Der geht von -128 bis 127. Das reicht. Zweitens solltest du die 11 über eine Konstante zuweisen. Du wirst die 11 noch als Zahl öfters brauchen. Somit ist eine Konstante zu empfehlen.
Delphi-Quellcode:
Was den Code angeht:
const
MaxFeld = 11; var Form1: TForm1; Spielfeld : array[0..MaxFeld, 0..MaxFeld] of ShortInt;
Delphi-Quellcode:
da ist nichts verkehrtes dran, aber das ist zu einfach. Was du dir hier an Arbeit sparst, mußt du später intelligent programmieren. Denn wenn du es dir jetzt einfach machst und Wasser 0 wählst und allen Schiffen dann eine 2, mußt du später einen Algorithmus programmieren der erkennt welche Schiffe untergegangen sind. Wenn dein Schiff von Länge 1 und Schiff von Länge 4 die gleiche Zahl hat, wie erkennst du, dass alle Bereiche von Schiff der Länge 4 getroffen wurden?
const
wasser = 0 ; nahschiff = 1; //zur Positionierung der schiffe schiff = 2; Bedenke, die Regeln in Wikipedia beschrieben die Papiervariante des Spiels. Da erkennt der Mensch ob alle Teile getroffen wurden. Bei einem Programm musst du es anders machen. Vorschlag: Wasser bekommt den Wert 0, dann bekommt jedes Schiff eine Zahl - Schiff 1 die 1, Schiff 2 die 2, Schiff 3 die 3, usw. Gehen wir davon aus, dass Schiff 3 vier Zellen lang ist, haben alle Zellen den Wert 3. Wurde eine Zelle getroffen, wird aus der positiven Zahl 3 die negative Zahl -3. Hat Schiff 3 alle Zahlen negativ, ist er versunken. Da braucht man keinen intelligenten Code um das zu prüfen. Dieses Konzept ist für ein Programm und vor allem für dich einfacher zu händeln. Du musst nur das Array nur nach positiven 3'er durchsuchen um zu prüfen ob das Schiff versunken ist. Teilst du allen Schiffen die gleiche Zahl zu, was am Anfang einfacher ist, musst du später komplizierter prüfen ob ein Schiff versunken ist. |
AW: Schiffe versenken programmieren
Zitat:
Zitat:
Da kommt das weiter oben bereits angesprochene Stringgrid ins Spiel. eine andere Möglichkeit wäre es z.B. Form1.Canvas.Output zu nutzen oder gleich eine gans andere Komponente.... Gruß K-H |
AW: Schiffe versenken programmieren
Hier eine kleine Prozedur zum Anzeigen des Spielfeldes. Benötigt wird die Komponente TPaintBox:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const MaxFelder = 11; //wenn bereits global gesetzt, kann die Konstante weg! procedure Rechteck(ax, ay, az: Integer); const Col: array[0..9] of TColor = (clWhite, clRed, clFuchsia, clGreen, clOlive, clMaroon, clNavy, clPurple, clBlue, clYellow); var w, h: Integer; begin with PaintBox1 do begin w := Width div (MaxFelder + 1); h := Height div (MaxFelder + 1); Canvas.Pen.Color := clBlack; Canvas.Brush.Style := bsSolid; Canvas.Brush.Color := Col[az]; Canvas.Rectangle(ax * w, ay * h, (ax * w) + w, (ay * h) + h); end; end; var x, y: Integer; begin for y := 0 to MaxFelder do for x := 0 to MaxFelder do Rechteck(x, y, SpielFeld[x, y]); end; |
AW: Schiffe versenken programmieren
Sollte die Logik nicht erst einmal klar sein, bevor man eine Oberfläche bastelt? Sonst landet man wieder bei der "function follows design"-Programmierung und vermengt schlimmstenfalls Darstellung und Logik.
|
AW: Schiffe versenken programmieren
Das ist keine Oberfläche, das ist nur zum Testen des Inhalts von dem Array.
|
AW: Schiffe versenken programmieren
Zitat:
Zitat:
Gruß K-H |
AW: Schiffe versenken programmieren
Danke schonmal für eure zahlreichen ideen.. Habe sie weitgehend umgesetzt..
Nun habe ich auch schon einen zähler sowie eine bestenlisten , die ich mit tvielist erstellt habe. (: Nun möchte ich mich wieder an den schwierigen part setzten -> schiffe platzieren :D Wie wäre es sinnvoll dabei vorzugehen? (: |
AW: Schiffe versenken programmieren
Highscores als letztes!
Konzentrier dich auf das Spiel, denn ohne Spiel kein Highscores!:mrgreen: |
AW: Schiffe versenken programmieren
@leodinho
Was hast du bisher programmiert? |
AW: Schiffe versenken programmieren
Zitat:
Nach der groben Planung definiert man die Funktionen/Klassen/Datentypen.
(Beispiel: Welche Werte gibt
Delphi-Quellcode:
zurück und welche Bedeutung haben diese)
SchussAuf
Dann kann man diese bei der Implementierung auch benutzen, ohne dass diese schon implementiert sein müssen. Es passiert halt einfach noch nichts, gibt aber auch keinen Fehler. Dann geht man an die Implementierung der einzelnen Teile. |
AW: Schiffe versenken programmieren
Zitat:
Wie zeige ich nun die Schiffe auf dem 12 x 12 Spielfeld an? Lass ich jetzt per zufallsfunktion 3x 1er , 2x 2er, 1x 3er , 1x 4er zufällig auf das 12x12 anzeigen..? Wie bekomm ich das am besten hin ? |
AW: Schiffe versenken programmieren
Zitat:
Delphi-Quellcode:
und keinen Datentyp
var Spielfeld : array[0..11,0..11] of integer;
Delphi-Quellcode:
. Darum steht da einmal
type TSpielfeld = array[0..11,0..11] of integer;
Delphi-Quellcode:
und
var
Delphi-Quellcode:
.
type
Das T ist nur Konvention und soll zeigen, dass es sich um einen Type handelt. (z.B. kennst du
Delphi-Quellcode:
)
TForm
Gerade wenn man das Spielfeld als Parameter übergeben will/muss, dann einen eigenen Type deklarieren
Delphi-Quellcode:
Das mit dem wie anzeigen und platzieren der Schiffe haben wir hier doch schon durchgekaut.
type
TSpielfeld = array[0..11,0..11] of integer; var Spielfeld : TSpielfeld; procedure ZeigeSpielfeld( ASpielfeld : TSpielfeld ); |
AW: Schiffe versenken programmieren
achso, stimmt, fällt mir grad auch ein.
Ja , das mit dem platzieren meine ich in der Sicht, sie auf dem Feld für den Benutzer sichtbar zu machen? (: wenn ich den datentyp hinschreibe und starten will ob es probleme gibt, erscheint ein problem das '=' vorhanden aber ':' erwartet wird.. Änder ich das, so kommt neue meldung.
Delphi-Quellcode:
TForm1 = class(TForm)
Button1: TButton; PaintBox1: TPaintBox; Label1: TLabel; Button2: TButton; lvHighscore: TListView; Button3: TButton; Label2: TLabel; Label3: TLabel; TSpielfeld = array[0..11,0..11] of integer;
Delphi-Quellcode:
var
Form1: TForm1; zaehler : integer = 0 ; Spielfeld : TSpielfeld; name : integer; |
AW: Schiffe versenken programmieren
Jetzt hast du TSpielfeld unter TForm1 deklariert, du musst den Typ aber unter dem Abschnitt Type deklarieren:
Code:
Type
TForm1 = class(TForm) Button1: TButton; PaintBox1: TPaintBox; Label1: TLabel; Button2: TButton; lvHighscore: TListView; Button3: TButton; Label2: TLabel; Label3: TLabel; end; TSpielfeld = array[0..11,0..11] of integer; |
AW: Schiffe versenken programmieren
Zitat:
nun muss ich nur irgendwie die schiffe auf dem spielfeld anzeigen /: |
AW: Schiffe versenken programmieren
Zitat:
Delphi-Quellcode:
Soll bedeuten, man kann das Array Spielfeld auch als Parameter übergeben. Ohne das wäre es etwas problematischer.
type
TSpielfeld = array[0..11,0..11] of integer; var Spielfeld : TSpielfeld; procedure ZeigeSpielfeld( ASpielfeld : TSpielfeld ); Trotzdem, an dieser Stelle (wg. Anfänger) würde ich das nicht als Parameter übergeben, sondern das Spielfeld global nutzen. Somit könnte man das auch so deklarieren:
Delphi-Quellcode:
man kann es aber auch so lassen:
var
Spielfeld : array[0..11,0..11] of integer;
Delphi-Quellcode:
Die Frage ist nur, ob man es versteht und evtl. dem Lehrer erklären muss was das damit auf sich hat, bzw. woher das Wissen kommt. Aber letztendlich ist beides ok.
type
TSpielfeld = array[0..11,0..11] of integer; var Spielfeld : TSpielfeld;
Delphi-Quellcode:
Wenn du das so machst, dann erweiterst du TForm1, abc ist dann eine Faldvariable von TForm1, bzw. Art Eigenschaft von TFom1. Der Zugriff ist dann aber auch so: Form1.abc := 123;
TForm1 = class(TForm)
Button1: TButton; abc: Integer; @leodinho Und bevor wir weiter machen, eine Frage: was machst du gerade? Zeig mal dein Konzept auf, denn im Beitrag #106 habe ich dir mit der Auflistung der Funktionen ein grobes Konzept gegeben, aber vor allem auch den Weg beschrieben mit kleinen Codes zum Ergebnis zu kommen. Man kann es auch anders machen, aber ich hab das Gefühl, dass du gerade das Stück Code nimmst was dir gerade einer vorlegt, ohne zu verstehen wozu es da ist, statt selbst zu programmieren. Zeig das Konzept, sonst kann man dir nicht wirklich helfen und du kriegst höchstens Antworten auf Fragen, aber keine richtigen Tipps. Zitat:
|
AW: Schiffe versenken programmieren
Irgendwie beschleicht mich immer noch das Gefühl, du weißt gar nicht wie Schiffe versenken wirklich funktioniert, bzw. du hast das noch nicht in die wesentlichen Schritte zerlegt.
Darum verbeißt du dich in diese "bekloppte" Anzeige des Spielfelds, die mit dem Spiel an sich nichts zu tun hat. Nehmen wir doch mal völlig losgelöst (ja das geht, und so sollte man jedes Einzelne Teilproblem hier angehen) den Schuss auf eine Koordinate und überlegen uns, was da passieren muss:
Wäre ja schick, wenn wir eine Rückmeldung bekommen. Was für Rückmeldungen können dort kommen?
Delphi-Quellcode:
Bei 2 Ergebnissen muss die Eingabe der Koordinaten wiederholt werden, und bei einem Ergebnis ist das Spiel zu Ende.
const
Schuss_Wasser = 0; Schuss_Treffer = 1; Schuss_Versenkt = 2; Schuss_FlotteVersenkt = 3; Schuss_NichtNochmal = 4; Schuss_Ausserhalb = 5; function SchussAuf( ASpielfeld : TSpielfeld; x,y : Integer ) : Integer; begin // Dummy, wir melden mal immer Wasser, weil wir noch nicht wissen, wie wir das umsetzen wollen Result := Schuss_Wasser; end; Die anderen Ergebnisse gehören zum normalen Spielablauf. Genau das musst du auch für die anderen Teile erst mal ausarbeiten, dann kannst du anfangen das umzusetzen. |
AW: Schiffe versenken programmieren
Liste der Anhänge anzeigen (Anzahl: 1)
Ich bekomm es einfach nicht hin, das ist das problem.. /:
ich schick euch einfach mal das was ich habe.. weiter bekomm ich das eh nicht hin -.- |
AW: Schiffe versenken programmieren
Zitat:
Einfach so drauf los funktioniert nicht, du musst dir vorher Gedanken über den Ablauf machen und dann kannst du diesen Ablauf umsetzen. Bei der Umsetzung bin ich gerne bereit zu helfen (wenn dann noch benötigt), aber von dem Ablauf habe ich von dir noch nichts gesehen. So wie ich im vorherigen Beitrag den Schussablauf definiert habe kannst du auch die anderen Abläufe darstellen. Die Anzeige kannst du zunächst raus lassen, denn rudimentär ist die ja schon da (Ausgabe über die Konsole) und für einen Test reicht die aus. Schön kommt immer erst nach Funktion. Und Schiffe versenken funktioniert nicht ausschließlich mit bunten Bildern, sondern wird nur hübscher. |
AW: Schiffe versenken programmieren
Zitat:
Erstens: die Prozedur die ich vor paar Beiträgen gepostet habe ist keine Spielfeldanzeige, die kann man schöner machen, sogar mit Bitmaps usw., sondern lediglich eine Kontrollanzeige. Ich traue dir persönlich zu, dass du die gesamte Logik mit der Aufstellung der Schiffe beim ersten Mal und sofort fehlerfrei im Kopf durchdenkst und es fehlerfrei in Pascal runter programmierst. Natürlich wird alles fehlerfrei sein, vor allem die Schiffe im Array-Spielfeld plaziert. Ich denke aber nicht, dass der TE es so hinkriegt, zumindest beim ersten Mal nicht. Sätze des TE wie: "Lass ich jetzt per zufallsfunktion 3x 1er , 2x 2er, 1x 3er , 1x 4er zufällig auf das 12x12 anzeigen..? " lassen die Vermutung zu, dass da noch kein Plan dahinter steckt. Das klingt eher nach: lassen wir es mal runterplumpsen, es wird sich evtl. schon selbst sortieren. Ich denke eher es wird ein Prozess von Try and Error. Nur wie soll er es kontrollieren ohne den Inhalt des Array zu sehen? Selbst bei mir war die Aufstellung erst nach zwei Korrekturen fehlerfrei. Im Kopf war es schon beim ersten Mal richtig. Beim ersten Versuch platzierten sich aber keine Schiffe am Rand. Man denkt eben nicht an alles. Also, ich hab das schon didaktisch durchdacht. Wenn du aber der Meinung bist, dass der TE den Algorithmus direkt hinkriegt, dann ja, dann kann man sich die Prüfanzeige sparen. Zweitens: man sollte schon vorher überlegen wie man es später anzeigen wird. Wenn man das nicht macht, kann man später böse Überraschungen erleben. Drittens: dein Konzept. Dein Konzept hält sich an die Papiervariante, wie sie in Wikipedia beschrieben wird. Und dieses Konzept ist nicht so ohne weiteres auf ein Programm übertragbar. Die Papiervariante funktioniert so: zwei Spieler zeichnen ein Spielfeld auf dem Blatt Papier und platzieren dort ihre Schiffe per menschlicher Logik und Kreuzchen. Im Spiel erkennt der Mensch mit seiner menschlichen Logik wenn alle Felder seines 4'er Schiffes getroffen wurden. Er meldet das Schiff dann als getroffen. Wie übertragen wir das nun auf ein Programm? Du hast das Aufgezählt:
Das klingt toll, aber gehen wir der Reihe nach. Punkt 1 und 2 sind kein Problem, aber erkläre mir wie der TE nun erkennt, das ein Schiff versenkt wurde? Bei dir haben alle Schiffe wohl einen Wert. Einfach Schiff = 1, Wasser = 0. Zumindest habe ich das so verstanden (siehe Wasser, Schiff, Nahbereich). Natürlich ist das umsetzbar, aber was man am Anfang sich an Arbeit gespart hat, in dem man es simpel gemacht hat, muss man später kompliziert programmieren. Nun muss man Schiffe im Feld kompliziert erkennen. Viertens:
Delphi-Quellcode:
. Du bist schon beim Feuern und mir hältst du vor, dass ich schon an die Anzeige denke. Wie wäre es wenn der TE erst die Schiffe automatisch auf dem Feld platziert, die den Regeln entsprechen? Das Feuern und anfragen ob ein Schiff getroffen wurde ist nicht wirklich kompliziert.
function SchussAuf
Fünftens: ich denke mir die Regeln die du favorisierst sind komplizierter als sie sein müssen. In der Computervariante des Spiels dürfen sich Schiffe berühren, sogar auf Stoß. Beim Programmieren hat man andere Möglichkeiten als auf dem Papier. Diese Regeln, die eigentlich nur für die Papier-Variante gelten, machen das für den TE komplizierter als es sein müsste. |
AW: Schiffe versenken programmieren
ich würde mich über eine anmerkung zu meinem bisherigen programm freuen..
ich gehe ja logisch und in kleinen schritten vor aber wie soll ich ein schuss auf das feld machen, wenn nicht mal schiffe auf dem feld vorhanden sind?? |
AW: Schiffe versenken programmieren
@Popov
Wenn ich mit einer Aussage dich anspreche, dann schreibe ich @Popov oder zitiere etwas von dir und schreibe einen Kommentar dazu. Wenn ich den TE meine, dann schreibe ich einfach los. Preisfrage, wen habe ich mit dem von dir zitierten Beitrag angesprochen? Es kommt nicht auf zeitgemäße Regeln oder was auch immer an, sondern nur darauf, was in der Aufgabenstellung, bzw. was im Projektplan festgelegt ist (das gehört da mit rein). Wenn das fehlt, dann ist der Projektplan unvollständig. Ja, so einfach ist das. Des Weiteren befinden wir uns in der nächsten Phase der Programmentwicklung (nach dem Projektplan, der relativ grob das Projekt beschreibt) und konkretisieren die Abläufe weiter - aber wir sind noch nicht bei der Implementierung. Die kommt erst im nächsten Schritt. Mein Beispiel mit dem Schuss war nur ein Wink mit dem Zaunpfahl, dass mit dieser konkrete Beschreibung (viel Text von mir) sehr leicht die Brücke zur Implementierung geschlagen werden kann (substantiell 1 Zeile Code). Es geht nicht darum, ob du in der Lage bist Schiffe versenken ohne vorherigen Projektplan etc. zu implementieren, sondern dass die Aufgabenstellung lautet ein Projekt mit Projektplan zu implementieren. Und die Abfolge ist damit vorgegeben. Nach jedem Schritt wird der Projektplan nochmals von allen Beteiligten überprüft und wenn alle nicken, dann erst dann wenn keine Fragen mehr offen sind, dann wird implementiert. Das ist der Lerneffekt der mit der Aufgabenstellung provoziert werden soll. |
AW: Schiffe versenken programmieren
Wenn ich ehrlich bin , will ich e jetzt nicht mehr unbedingt lernen.. Ich will dieses projekt dann abgeben und sgen: ,,reicht mit programmieren'' da ich mich eher auf auf andere teilgebiete spezialisiere und das programmieren dann eh überflüssig ist..
Noch einmal die frage, ob ihr euch das programm mal angucken könntet, anstatt nur zu disskutieren? /: |
AW: Schiffe versenken programmieren
@leodinho
Im Grunde hast du noch gar nichts. Es kann aber sein, dass ich schon wieder etwas nicht gelesen habe und du musst keine Schiffe automatisch platzieren. Was du hast ist schon mal das Highscore, aber das interessiert zu dem Zeitpunkt keinen, denn vom Spiel selbst ist noch keine Zeile programmiert. Mein Tipp: erzeuge ein neues Projekt und fange von vorne an. Wir können dir am Anfang helfen, aber programmieren mußt du schon selber. Auch sollte dir klar sein, dass die Konzepte von mir und Sir Rufo unterschiedlich sind. Keines der Konzepte ist schlechter oder besser, nur unterschiedlich. Du kannst sie nicht in einem Projekt gleichzeitig umsetzten. Bevor du dich aber für ein Konzept entscheidest, oder gar zwei parallel betreibst, ein kleine Hilfe für den Anfang. Du bist schon bei Highscore, hast aber noch keine Schiffe platziert. Bis die Schiffe platziert sind brauchst du dich nicht entscheiden, soweit kann ich dir helfen. Hier etwas für den Anfang. Am Ende (es fehlen noch fünf weitere Funktionen) wird der Computer alle Schiffe nach deinen Regeln im Spielfeld platziert haben. Das ist noch nicht das Spiel, aber du hast dann ein mit Schiffen gefülltes Array-Spielfeld. Weitere Tipps gibt es wenn die drei Funktionen/Prozedur gefüllt sind.
Delphi-Quellcode:
implementation
const MaxFelder = 11; //12 Felder. Null wird gezählt, also 11. type TSpielfeld = array[0..MaxFelder, 0..MaxFelder] of ShortInt; var Feld: TSpielfeld; //Löscht das Feld-Array mit Nullen. procedure FeldLeeren; begin //mit Code füllen end; //Prüft ob Zelle gültig ist, also im Feld liegt function IstZelleGueltig(x, y: Integer): Boolean; begin //mit Code füllen end; //Prüft ob Zelle frei ist, sich darin also kein anderes Schiff befindet function IstZelleFrei(x, y: Integer): Boolean; begin //mit Code füllen end; |
AW: Schiffe versenken programmieren
das problem dabei ist schon ,dass ich nichtmal weiß was ich beim ersten als code reinschreibe..
|
AW: Schiffe versenken programmieren
Zitat:
Zitat:
Zitat:
Ich denke der einzige Punkt in dem wir uns zurzeit wirklich unterscheiden ist, ob alle Schiffe ein Kreuzchen im Feld bekommen oder jedes Schiff eine eigene Nummer. |
AW: Schiffe versenken programmieren
Zitat:
Du hast ein zweidimensionales Feld, somit kannst du das mit zwei Schleifen machen, z. B. X und Y, angefangen bei 0, weil das Array hier beide Male bei Null beginnt, bis zu der Konstante MaxFelder. Du hast doch schon ein Spielfeld auf deinem Formular. Das muss vorerst mit einem Wert gelöscht werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:24 Uhr. |
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