Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Hänge bei units und umsetzung fest (https://www.delphipraxis.net/107790-haenge-bei-units-und-umsetzung-fest.html)

finalmaster2k 2. Feb 2008 08:30


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.

Corpsman 2. Feb 2008 10:32

Re: Hänge bei units und umsetzung fest
 
Ui Ui du hast noch nicht viel programmiert, was.

Also
Delphi-Quellcode:
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;
ist man ganz Böse

Du greifst auf eine Andere Unit und deren Objekte und überhaupt und böse zu.

Delphi-Quellcode:
function dice():integer;
Begin

  result := random(6) + 1;
End;
und in unit1

Delphi-Quellcode:
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;
Wenn du das schon unbedingt so kompliziert machen willst.

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.

finalmaster2k 3. Feb 2008 09:38

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

Corpsman 3. Feb 2008 10:14

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;

finalmaster2k 5. Feb 2008 10:02

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

bitsetter 5. Feb 2008 10:35

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.

finalmaster2k 5. Feb 2008 11:06

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.

stahli 5. Feb 2008 11:46

Re: Hänge bei units und umsetzung fest
 
wenn Du den Abschnitt nur behandeln willst wenn Limit gewählt ist:
Delphi-Quellcode:
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;
Wenn der Abschnitt immer durchlaufen werden soll:
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

finalmaster2k 5. Feb 2008 14:46

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:
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;
klappt aber irgendwie nicht

DeddyH 5. Feb 2008 14:52

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:44 Uhr.
Seite 1 von 2  1 2      

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