![]() |
Hänge bei units und umsetzung fest
Liste der Anhänge anzeigen (Anzahl: 1)
hey,
ich bin am das Spiel Böse eins am Programieren und habe einige Probleme Das Spiel Man würfelt so lange, bis man die Zahl eins erreicht hat oder vorher die summierten würfeln Zahlen gespeichert hat. Wer ne eins Würfelt bekommt seinen Aktuellen Spielstand gelöscht, sofern er sie nicht vorher gespeichert hat. Problem Ich versuche grade die Spiele zum laufen zu bringen, habe einen Unit würfel und einen unit gamer. ICh weiß aber nicht wie ich den Spielstand auf dem Hauptfenster ändern soll ?. Für euer hilfe wäre ich dankbar. |
Re: Hänge bei units und umsetzung fest
Ui Ui du hast noch nicht viel programmiert, was.
Also
Delphi-Quellcode:
ist man ganz Böse
Procedure dice();
Begin randomize; Zahl := trunc(random(6)) + 1; Case Zahl Of 1: fenster_frm.Image1.Picture.LoadFromFile('one.bmp'); 2: fenster_frm.Image1.Picture.LoadFromFile('two.bmp'); 3: fenster_frm.Image1.Picture.LoadFromFile('tree.bmp'); 4: fenster_frm.Image1.Picture.LoadFromFile('four.bmp'); 5: fenster_frm.Image1.Picture.LoadFromFile('five.bmp'); 6: fenster_frm.Image1.Picture.LoadFromFile('six.bmp'); End; End; Du greifst auf eine Andere Unit und deren Objekte und überhaupt und böse zu.
Delphi-Quellcode:
und in unit1
function dice():integer;
Begin result := random(6) + 1; End;
Delphi-Quellcode:
Wenn du das schon unbedingt so kompliziert machen willst.
Procedure Tfenster_frm.dice_btnClick(Sender: TObject);
Begin Case dice Of 1: Image1.Picture.LoadFromFile('one.bmp'); 2: Image1.Picture.LoadFromFile('two.bmp'); 3: Image1.Picture.LoadFromFile('tree.bmp'); 4: Image1.Picture.LoadFromFile('four.bmp'); 5: Image1.Picture.LoadFromFile('five.bmp'); 6: Image1.Picture.LoadFromFile('six.bmp'); End; End; Allerdings gäbe es da noch ettliche Verbesserungen .. Mir scheint das sind 4 Spieler also baust du dir eine Spieler Klasse und machst 4 instanzen davon, KEINE globalen Variablen und dann eine Vernünftige Spielsteuerung von Unit1 aus. Ich hoffe ich habe dir nicht all zu viele Fremdwörter um die Ohren gehaun. [Edit] Ach ja Randomize wird nur 1 mal aufgerufen, und nicht jedesmal in Dice. |
Re: Hänge bei units und umsetzung fest
Liste der Anhänge anzeigen (Anzahl: 2)
danke für den tipp mit dem würfeln ^^..
Habe jetzt mal weiter gebastelt und habe ein Problem Jedesmal wenn ich würfle zählt es die summen nicht richtig zusammen !? .. Laut bilder würfel zeigt es ne 3 und dann ne 5 an ! aber als SUmme kommt da zb 7 raus oder so ... Anhang habe ich hochgeladen |
Re: Hänge bei units und umsetzung fest
Lol,
Du rufst dice auf, jeder Aufruf erzeugt einen neuen Zufallswert, willst du mit dem Wert noch mehr machen, so must du ihn zwischenspeichern. In etwa so :
Delphi-Quellcode:
Procedure Tfenster_frm.dice_btnClick(Sender: TObject);
Var Dice_result: Integer; Begin Dice_result := dice; Case Dice_result Of 1: Image1.Picture.LoadFromFile('one.bmp'); 2: Image1.Picture.LoadFromFile('two.bmp'); 3: Image1.Picture.LoadFromFile('tree.bmp'); 4: Image1.Picture.LoadFromFile('four.bmp'); 5: Image1.Picture.LoadFromFile('five.bmp'); 6: Image1.Picture.LoadFromFile('six.bmp'); End; If Dice_result = 1 Then Begin If spieler = 1 Then Begin punkte_1 := 0; summe_edt.Text := floattostr(punkte_1); spieler := 2; gamer_label.Caption := 'Spieler 2 ist am Zug' End Else Begin punkte_2 := 0; summe_edt.text := floattostr(punkte_2); spieler := 1; gamer_label.Caption := 'Spieler 1 ist am Zug' End; End Else Begin If spieler = 1 Then Begin punkte_1 := punkte_1 + Dice_result; summe_edt.text := floattostr(punkte_1); End Else Begin punkte_2 := punkte_2 + Dice_result; summe_edt.Text := floattostr(punkte_2); End; End; End; |
Re: Hänge bei units und umsetzung fest
Liste der Anhänge anzeigen (Anzahl: 1)
Dankee für die hilfe jetzt hänge ich an einem weiteren problem xD !!..
Ich habe versucht im Spiel einen Limit berreich zu erstellen das ich zb bei eingabe im edit fel 500 Punkte dann die MSG kommt das Spiele XYZ gewonnnen hat.. es kommt aber folgende fehler meldeung :( .. [Warnung] ufenster.pas(126): Variable 'limit' ist möglicherweise nicht initialisiert worden [Fehler] ufenster.pas(134): Deklaration erwartet, aber 'ELSE' gefunden [Fehler] ufenster.pas(135): '.' erwartet, aber ';' gefunden [Fataler Fehler] Badone.dpr(6): Verwendete Unit 'ufenster.pas' kann nicht compiliert werden |
Re: Hänge bei units und umsetzung fest
Hallo,
was machst du denn da?
Delphi-Quellcode:
procedure Tfenster_frm.limit_radiobtnClick(Sender: TObject);
var limit : integer; begin IF limit_radiobtn.Checked = true THEN limit := StrToInt(limit_edt.Text);{wenn der Code hier nicht ausgeführt wurde dann ist die Variable 'limit' möglicherweise nicht initialisiert worden} IF limit = punkte_2 THEN ShowMessage('Winner ist (game2_edt.Text)') ELSE IF limit = punkte_1 THEN ShowMessage('Winner ist (game1_edt.Text)') ELSE END;//<-- hier ist die Prozedur schon zu Ende Else.//was soll denn der Punkt hier bringen? END; limit := 0; end. |
Re: Hänge bei units und umsetzung fest
ich verusch halt die limit grenze zu bestimmen und , dejenige der sie erreicht hat, soll halt als gewinner angezeigt werden,
Delphi-Quellcode:
procedure Tfenster_frm.limit_radiobtnClick(Sender: TObject); var limit : integer; begin IF limit_radiobtn.Checked = true THEN limit := StrToInt(limit_edt.Text);{hier habe ich versucht halt im limit edt von str in integer umzuwandeln} IF limit = punkte_2 THEN ShowMessage('Winner ist (game2_edt.Text)') ELSE IF limit = punkte_1 THEN ShowMessage('Winner ist (game1_edt.Text)') ELSE END;//hier soll eigentlich nix passieren hmm mus noch mal ändern :(.. Else//hier soll eigentlich nix passieren hmm mus noch mal ändern :(.. END; limit := 0; end. |
Re: Hänge bei units und umsetzung fest
wenn Du den Abschnitt nur behandeln willst wenn Limit gewählt ist:
Delphi-Quellcode:
Wenn der Abschnitt immer durchlaufen werden soll:
procedure Tfenster_frm.limit_radiobtnClick(Sender: TObject);
var limit : integer; begin IF limit_radiobtn.Checked THEN begin limit := StrToInt(limit_edt.Text); IF limit = punkte_2 THEN ShowMessage('Winner ist (game2_edt.Text)') ELSE begin // hier muss kein begin+end, ist aber übersichtlicher nach dem else IF limit = punkte_1 THEN ShowMessage('Winner ist (game1_edt.Text)'); end; END; limit := 0; end;
Delphi-Quellcode:
procedure Tfenster_frm.limit_radiobtnClick(Sender: TObject);
var limit : integer; begin IF limit_radiobtn.Checked THEN limit := StrToInt(limit_edt.Text); else limit := 12345; // sonst inst unklar, welcher Wert in Limit steht! IF limit = punkte_2 THEN ... stahli |
Re: Hänge bei units und umsetzung fest
Liste der Anhänge anzeigen (Anzahl: 1)
ich habe jetzt 2 würfeln und will das bei einer 1 den spieler wechselt !? ..
habe das mit
Delphi-Quellcode:
klappt aber irgendwie nicht
If (Dice_result = 1 or Dice2_result = 1) Then Begin
If spieler = 1 Then Begin punkte_1 := 0; summe_edt.Text := floattostr(punkte_1); spieler := 2; gamer_label.Caption := game2_edt.Text End Else Begin punkte_2 := 0; summe_edt.text := floattostr(punkte_2); spieler := 1; gamer_label.Caption := game1_edt.Text End; End Else Begin If spieler = 1 Then Begin punkte_1 := punkte_1 + Dice_result; summe_edt.text := floattostr(punkte_1); End Else Begin punkte_2 := punkte_2 + Dice_result; summe_edt.Text := floattostr(punkte_2); End; End; |
Re: Hänge bei units und umsetzung fest
Was heißt "klappt nicht"? Ändere die erste Zeile erst einmal.
Delphi-Quellcode:
If (Dice_result = 1) or (Dice2_result = 1) Then Begin
|
Re: Hänge bei units und umsetzung fest
Liste der Anhänge anzeigen (Anzahl: 1)
ah danke ^^.. sry ich programiere nicht sehr lange xD..
habe jetzt 2 weiter probelme.. und zwar einmal mit dem Limit, jedesmal wenn ich versuche es zu erreichen kommt da die Fehlermeldung Punkte1 ist kein integer wert oder so was.. zweites problem bei mir ist, das RadioGroup bei auswahl wenn ich auf neues Spiele gehe es nicht richtig anzeigt !?... |
Re: Hänge bei units und umsetzung fest
Zitat:
Aber versuch mal, die Fragen genauer zu stellen und die Probleme genauer einzugrenzen. Was klappt an welcher Stelle genau nicht? Zeig dann lieber die Quelltextauszüge mit konkreter Fragestellung. Es ist vielen sicher zu aufwändig, Dein ganzes Projekt auszupacken und auszutesten... Und duch lesen und überlegen lernt man am meisten - kann ich aus eigener Erfahrung sagen ;-) stahli |
Re: Hänge bei units und umsetzung fest
ahh okey ^^..
also bei Limit .. kommt immer der fehler Punkte1 ist kein gültiger integer wert !?
Delphi-Quellcode:
und mein RadioGroup im andenren unit funktioniert nicht richtig :/...
procedure Tfenster_frm.store_btnClick(Sender: TObject);
begin if spieler=1 then if strtoint(store1_edt.Text) >= strtoint (limit_edt.Text) then begin showmessage('Spieler 1 hat gewonnen!'); end else begin gesamt_1:=gesamt_1+punkte_1; store1_edt.text:=floattostr(gesamt_1); punkte_1:=0; summe_edt.Text:=floattostr(punkte_1); spieler:=2; gamer_label.Caption:=game2_edt.Text; end else if strtoint(store2_edt.Text) >= strtoint (limit_edt.Text) then begin showmessage('Spieler 2 hat gewonnen!'); end else begin gesamt_2:=gesamt_2+punkte_2; store2_edt.text:=floattostr(gesamt_2); punkte_2:=0; summe_edt.Text:=floattostr(punkte_2); spieler:=1; gamer_label.Caption:=game1_edt.Text; end; end;
Delphi-Quellcode:
begin
fenster_frm.game1_edt.Text := name1_lbl.Text; fenster_frm.game2_edt.Text := name2_lbl.Text; fenster_frm.limit_edt.Text := limit_edt.Text; fenster_frm.store_btn.Enabled := true; if dice_rg.ItemIndex = 1 then begin fenster_frm.dice_btn.Enabled := true ; fenster_frm.dice_btn.Visible := true ; fenster_frm.dice2_btn.Enabled := true ; fenster_frm.dice2_btn.Visible := true ; end else begin //LAME fenster_frm.dice_btn.Enabled := true ; fenster_frm.dice_btn.Visible := true ; fenster_frm.dice2_btn.Enabled := false ; fenster_frm.dice2_btn.Visible := false ; close end end; |
Re: Hänge bei units und umsetzung fest
Da kann ich nur raten:
In einer Edit-Komponente steht sicher kein gültiger Integerwert bzw. z.B. gar nix. Edits sind sicher nicht gut geeignet, um Zahlenwerte zu speichern. Wenn Du´s so machen willst, dann schau Dir mal StrToIntDef an. dann kannst Du als "Notfallwert" einfach 0 vorgeben. Du kannst ja einen Haltepunkt setzen und dann zur Debugzeit nachsehen, was für Werte in den Edits stehen. Vielleicht ist auch eine TTrackBar oder TSpinEdit sinnvoller einzusetzen. Und was geht mit der RadioGroup nicht? Vielleicht beachtest Du ja nur nicht, dass der erste Eintrag ItemIndex = 0 !!! entspricht!? Da hilft es auch, das Programm schrittweise zu durchlaufen und alle Werte genau einzusehen.... Übrigens ist es auch üblich, die Komponenten "EditGame1" usw. zu benennen. Dann ist es auch für andere Programmierer offensichtlich, dass hier eine Edit-Komponente angespochen wird. stahli |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:09 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