AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Schiffe versenken

Ein Thema von Netschge · begonnen am 22. Jan 2006 · letzter Beitrag vom 23. Jan 2006
Antwort Antwort
Netschge

Registriert seit: 22. Jan 2006
Ort: Luzärn
2 Beiträge
 
#1

Schiffe versenken

  Alt 22. Jan 2006, 12:11
Hallo,

Ich bin gerade an der Semester-Abschlussarbeit dran und habe mir zum Ziel gesetzt das Spiel Schiffe versenken zu Programmeren.Habe 2 Formulare kreirt und folgende Probleme habe ich derzeit:

1.wenn ich das 2 formular öffne mit form2.showmodal sollte eine meldung kommen mit showmessage(bitte setzen sie x schiffe ein) aber erst wenn die 2 form öffnet und nicht bei der ersten schon...grrr...

2.wie zum teufel erschtelle ich ein 2-dymensianales array mit zugiff auf den in der Lstbox deklarierten wert die ich vorgegeben habe??? habe es mit Items und allem erdenklichem probiert aber hier fehlen mir weitere Ideen....das heisst ich will den 2ten wert im array variabel gestallten und somit das spielfeld => array[1..15,1..15] of TShape; die 15 sollte vo 5 bis 15 variabel gestaltet werden mit dem wert aus listbox in formular 1.... grrr...

3. ebenso sollte die anzahl der schiffe variabel sein, aber das sollte sich erübrigen wenn ich problem 2 beseitigt habe...

4. Meine Grundidee um das Spiel u programmieren: Ich will die variablen tshapes markieren ( aber wie???) und danach mit if then anweisung überprüfen ob das feld leer ist und mit randomize ein schiff setzen für den cpu ( aber wie mache ich das dait es für den spieler nicht sichtbar ist??) mit einer while schleife x schiffe setzen aus problem3... Für mich mus ich die schiffe selbe setzen können ( logisch, oder... ) sollte kein problem sein... danach nach jedem schuss auf treffer und gewinn überprüfen und das wars dann auchschon mit meiner idee.... Frage: Ist dies Grundsätzlich verkehrt was ich überlegt hbe oder kann man auf dem aufbauen????

Habe ich schon erwähnt das ich blutiger anfänger bin ??? Ich glaube die aussage erübrigt sich.... ich wäre jedem tipp sehr dankbar und ich hoffe ihr könnt mir helfen... dankbarkeit in worte zu verfassen ist schwierig, aber ich schätze eure mühen wirklich und währe euch wirklich sehr dankbar... Anm: habe bisher 19 h an diesem projekt verbracht...

Gruss

Nedim

Auszug aus meinem Quelltext:


Form1:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
showmessage ( ' bitte setzen Sie Ihre Schiffe auf ihrem Spielfeld ein ') ;
form2.ShowModal; // wenn man sie umkehrt passier auch nicht das gewünschte....
Form2:
Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
    begin
        
       Schlachtfeld1_Erstellen;
        Schlachtfeld2_Erstellen;
    end;

procedure Schlachtfeld1_Erstellen;
   var i,j : integer;
   begin
          for i:=1 to 15 do
            for j:=1 to 15 do
              begin
              Feld[i,j]          := TShape.Create(form2);
              Feld[i,j].parent          := form2;
              Feld[i,j].Left         := 10 + (i-1)*20;
              Feld[i,j].Width         :=   20;
              Feld[i,j].Top         :=   60 + (j-1)*20;
              Feld[i,j].Height         :=   20;
             // Feld[i,j].OnMouseDown   := form2.FeldMouseDown;
              if odd(i+j) then Feld[i,j].Brush.Color := clblue
                          else Feld[i,j].Brush.Color := clblue;
              Punkt[i,j]           := TShape.create(form2);
              Punkt[i,j].parent       := form2;
              Punkt[i,j].Left           := 20 + (i-1)*20;
              Punkt[i,j].Width       := 20;
              Punkt[i,j].Top           := 20 + (j-1)*20;
              Punkt[i,j].Height       := 20;
              Punkt[i,j].Shape       := stCircle;
              Punkt[i,j].Visible       := false;
              end;
   end;




procedure Schlachtfeld2_Erstellen;
   var i,j : integer;
   begin
           for i:=1 to 15 do
              for j:=1 to 15 do
                begin
                Feld[i,j]                := TShape.Create(form2);
                Feld[i,j].parent          := form2;
                Feld[i,j].Left            := 410 + (i-1)*20;
                Feld[i,j].Width         :=   20;
                Feld[i,j].Top            :=   60 + (j-1)*20;
                Feld[i,j].Height         :=   20;
                //   Feld[i,j].OnMouseDown   := form2.FeldMouseDown;
                if odd(i+j) then Feld[i,j].Brush.Color := clblue
                            else Feld[i,j].Brush.Color := clblue;
                Punkt[i,j]                 := TShape.create(form2);
                Punkt[i,j].parent       := form2;
                Punkt[i,j].Left           := 20 + (i-1)*40;
                Punkt[i,j].Width       := 20;
                Punkt[i,j].Top           := 20 + (j-1)*40;
                Punkt[i,j].Height       := 20;
                Punkt[i,j].Shape       := stCircle;
                Punkt[i,j].Visible       := false;
                end;
   end;
das ist das was bisher fuktioniert... in form1 habe ich noch 2 listboxen für spielfeldgrösse und anzahl schiffe

[edit=Admin]Code in Delphi-Tags gesetzt. Künftig bitte selber machen, danke. Mfg, Daniel[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Corelgott
Corelgott

Registriert seit: 11. Apr 2003
Ort: Lübeck
213 Beiträge
 
Delphi 2006 Enterprise
 
#2

Re: Schiffe versenken

  Alt 22. Jan 2006, 12:21
hmm

also klingt an sich ok... (wenn ich das alles verstanden habe **etwas wirr ist es ja ^^)

so @ von form1 nach form2 daten schaufeln

mach das doch so kurz vor deinem showmodular mach du so was:

Delphi-Quellcode:
form2.setYIndex(Combo1.selectedIndex);
fomr2.showModular();
so oder so ähnlich

dann braucht du in form2 nur eine public funktion, die du von form1 aufrufen kannst
Somit kann sich form2 die daten selbst merken und muss nicht auf die daten von form1 drauf (datahiding ^^)

so und @ shapes usw...
Schon mal an nen eigenen kleinen record typen gedacht?
Der so die wichtigsten daten beinhaltet für jeders feld?

ich dachte da an so was wie x, y, ob ein schiff drin ist oder nicht, schon beschossen...

also:

Delphi-Quellcode:
type tField = record
  x : Integer;
  y : Itneger;
  ship : Boolean;
  hit : Boolean;
so und aus dem teil dann ein pkayer01 : array[0..15, 0..15] od tField;
somit hast du dann die daten von der ausgabe getrennt

nun brauchst du nur noch eine methode erstellen, der du einfach das array gibts, was angezeigt werden soll
so a la:

  showField(player01); hmm villeicht hilft das ja ein bissel...
wer Rächtschraibfehler findet daaf sie behalten...
  Mit Zitat antworten Zitat
Netschge

Registriert seit: 22. Jan 2006
Ort: Luzärn
2 Beiträge
 
#3

Re: Schiffe versenken

  Alt 23. Jan 2006, 18:29
Hallo

Habe das mit dem setYIndex probiert aber, es kommt eine fehlermeldung da nicht deklariert... was macht das setYIndex eigentlich? In der Delphi Hilfe ist nichts zu finden...

und was ist eigentlich eine public-Methode? habe mich bislang auch nicht schlau machen können über diese funktion....

Was hat es auf sich mit den record typen? wie kann ich ihm die von dir vorgschlagenen x,y koordinaten zuweisen?

Danke vielmal für deine Mühen, hoffe auf baldige antwort. bis dann studiere ich weiter an meinem spiel....

gruss
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:22 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