[Pascal] Schiffe_Versenken Spielfeld generieren

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von m_Z_e_t, 7. Dezember 2007 .

  1. 7. Dezember 2007
    Zuletzt von einem Moderator bearbeitet: 15. April 2017
    Hi,
    wir haben in der Schule im moment das projekt Schiffe Versenken (in sehr vereinfachter Form).

    Da ich sehr früh damit fertig war und der Lehrer nix mehr dran auszusetzen hatte, hab ich mich dazu entschieden,mal zu versuchen,dass ganze innem richtigem Fenster darzustellen und nicht in ner Dos-Box, wie es Aufgabe war!

    Jetzt hab ich aber schon ne Stunde versucht, das Spielfeld richtig hinzubekommen, so das hinter jedem Button ein Feld des Spielfelds ist. Ich habe mir das in etwa so vorgestellt:

    feldqb0.jpg
    {img-src: //img138.imageshack.us/img138/4943/feldqb0.jpg}


    jeweils 100 Felder, 'W' steht für Wasser.
    Oder gibt es da von eurer Seite aus IDeen wie man das besser umsetzen könnte?

    Man sollte später dann nachdem die Schiffe durch Zufall verteilt wurden, dass gewünschte Feld anklicken können und dann wird halt geguckt ob dahinter ein Schiff (nur ein Feld groß) steckt oder nicht!

    Aber ich kam jetzt noch nicht drauf, wie ich jedem Button einen Teil des Arrays zuteilen kann..

    Im Dos-Modus ging das ja ganz einfach wie folgt:

    Code:
    // Feld des HP generieren
     for zeile := 1 to max_zeilen do
     begin
     for spalte := 1 to max_spalten do
     begin
     feld_hp[zeile,spalte] := 'W';
     end;
     end;
     
     // Feld des SP generieren
     for zeile := 1 to max_zeilen do
     begin
     for spalte := 1 to max_spalten do
     begin
     feld_sp[zeile,spalte] := 'W';
     end;
     end;
     
    /////////////////////////////////////////////////////////////////////
    
    ///////////////////////// TEIL 2 //////////////////////////////////
    
     Write('Geben Sie nun die Anzahl der Schiffe ein (max ',max_spalten*max_zeilen,') : ');
     Readln(max_schiffe);
     If (max_schiffe < 1) or (max_schiffe > max_spalten*max_zeilen)
     then begin
     Writeln('Falsche Eingabe. Sie müssen mindestens ein Schiff und maximal ',max_spalten*max_zeilen,' einfügen.');
     end
     Else begin
     Writeln('Es werden nun ',max_schiffe,' Schiffe auf das Feld verteilt.');
     Writeln('...');
     Writeln('Schiffe erfolgreich verteilt.');
     Writeln;
     end;
     
     Randomize;
     
     //Schiffe des HP generieren
     for gen := 1 to max_schiffe do
     begin
     repeat
     zeile := random(max_zeilen) +1;
     spalte := random(max_spalten) +1;
     check := (feld_hp[zeile,spalte] = 'W');
     until check;
     
     feld_hp[zeile,spalte] := 'S';
     end;
     
     //Schiffe des SP generieren
     for gen := 1 to max_schiffe do
     begin
     repeat
     zeile := random(max_zeilen) +1;
     spalte := random(max_spalten) +1;
     check := (feld_sp[zeile,spalte] = 'W');
     until check;
    
     feld_sp[zeile,spalte] := 'S';
     end; 

    Ich erwarte jetzt nicht, das ihr mir das komplett macht, ich hätte lediglich gern nen kleinen Denkanstoß, da ich jetz so ziemlich alles versucht hab was mir eingefallen ist^^

    Danke schonmal!
     
  2. 8. Dezember 2007
    AW: [Pascal] Schiffe_Versenken Spielfeld generieren

    Wenn du das ganze Zeichnen würdest, währ es wesentlich einfacher. Schau die mal TPaintBox und TCanvas an. Dann hast du auch nicht 200 Buttons auf der Form o_0 ^^
    Definiere dann ein array für jedes Feld;
    Code:
    type TPlayerField = array [0..?]of SHORT; //Da kannste dann die Schiffsgröße reinschreiben
     pPlayerField : TPlayerFiled;
     pCPUField : TPlayerFiled;
    
    Beim OnClick auf die PaintBox kannste die fertige Funktion PointInRect(Galub ich) benutzen um das Feld abzufragen.


    Wenn du doch lieber Buttons nehmen willst, schau dir mal das geerbte Property Tag(Integer) an, das kannste frei verwenden.
    Über die Sender-Variable von jedem Object-Event kannste den Tag auslesen
    Code:
     if Sender is TButton then
     i := TButton(Sender).Tag;
    
    Wenn das noch zu viel ist, schreib ich noch mal en paar einfachere Ansätze.
    Hoffe ich konnt dir helfen ...
     
  3. 8. Dezember 2007
    AW: [Pascal] Schiffe_Versenken Spielfeld generieren

    also ich hab mir das jetzt ma angeguckt mit der paintbox, weil 200 buttons nerven schon :>
    Hab mir dann ma eben bei google paar Sachen dazu angeguckt, da ich damit noch nie was gemacht hab, aber hab jetzt nicht gefunden wie da son spielfeld hinbekomm, hab nur einzelne vierecke hinbekommen (mit PaintBox1.Canvas.Rectangle )

    Aber vielen Dank schonmal, werds ma weiter probieren.. BW is natürlich raus!
     
  4. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.