![]() |
Schiffe versenken
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:
Form2:
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....
Delphi-Quellcode:
das ist das was bisher fuktioniert... in form1 habe ich noch 2 listboxen für spielfeldgrösse und anzahl schiffe
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; [edit=Admin]Code in Delphi-Tags gesetzt. Künftig bitte selber machen, danke. Mfg, Daniel[/edit] |
Re: Schiffe versenken
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:
so oder so ähnlich
form2.setYIndex(Combo1.selectedIndex);
fomr2.showModular(); 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:
so und aus dem teil dann ein pkayer01 : array[0..15, 0..15] od tField;
type tField = record
x : Integer; y : Itneger; ship : Boolean; hit : Boolean; 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:
Delphi-Quellcode:
hmm villeicht hilft das ja ein bissel...
showField(player01);
|
Re: Schiffe versenken
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.... :wall: gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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