| Autor |
Beitrag |
pufti
Hält's aus hier
Beiträge: 14
|
Verfasst: Mo 21.02.05 18:25
Hallo,
ich habe im Rahmen des Info-Unterrichts ein Spielprogrammiert, wo sich zwo Panzer beschießen.
Und dabei habe ich 2 Probleme.
Zum ersten: Wenn das Geschoss(11 Pixel hoch/breit) auf den Boden trifft wird eine Ellipse in den Boden gemalt um einen Krater darzustellen.
Leider wird die Ellipse nicht auf dem Punkt gemalt wo sie aufschlägt sondern ein paar Pixel verschoben, und es ist ein schwarzer Rahmen um die Ellipse, die sieht dann nicht so gut aus wenn auf einmal "Hügel" ins Bild kommen  wie kann ich den Rahmen bzw Rand wegkriegen oder den Rand weiß machen?
Und zum 2. Problem: Die Panzer haben je 3 Überlebenspunkte, bei jedem treffer wird ihnen 1 Punkt abgezogen.
Die habe ich mit Hilfe 2 Variablen gemacht, Health1 und Health2, und nach jedem Treffer wird der Varible 1 Punkt abgezogen und in ein Edit ausgegeben
Dies zur Theorie
Leider geht das in der Praxis irgendiwe nicht, er will keinen Punkt abziehen von den 3.
wenn source code erforderlich kann ich ihn reinpsoten.
Freundliche Grüße
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Mo 21.02.05 18:29
Also zu Frage 2:
Sieht das so aus bei dir?
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure onTreffer1 begin dec(Health1); Edit1.Text := IntToStr(Health1); end; |
Poste mal bitte den Source.
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
pufti 
Hält's aus hier
Beiträge: 14
|
Verfasst: Mo 21.02.05 18:34
danke für die schnelle antwort...
naja ich habs mir da eher einfach gemacht
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| var health2:integer; begin Health2:=3;
if (Image2.Left>Image3.Left) and (Image2.Top>Image3.Top) and (Image2.Top<Image3.Top+Image3.Height) then begin Image5.visible:=true; Health2:=Health2-1; end; |
|
|
matze.de
      
Beiträge: 576
Win95, Win98 SE, WinXp Prof SP2
D7P, D8P, FPC2.0
|
Verfasst: Mo 21.02.05 18:35
ohne Source geht da nix
mfg matze
//Edit: zu spät gg:
mach aus Health2:=Health2-1; lieber das: dec(Health2);
Was is das für eine Procedure wo der Code drinne steht?
_________________ si tacuisses, philosophus mansisses.
|
|
pufti 
Hält's aus hier
Beiträge: 14
|
Verfasst: Mo 21.02.05 18:43
es ist ne TForm1.Button1Click(Sender: TObject);
und in der berechnet er dann gleich die Positionen für die Kugel.
|
|
matze.de
      
Beiträge: 576
Win95, Win98 SE, WinXp Prof SP2
D7P, D8P, FPC2.0
|
Verfasst: Mo 21.02.05 18:48
ja aber dann setzt du doch mit Health2:=3; die leben immer wieder auf "3" wenn du prüfst?
mfg matze
_________________ si tacuisses, philosophus mansisses.
|
|
der_zaehe
      
Beiträge: 317
WinXP SP2
D6 Pers, D2005 Prof, VS2005
|
Verfasst: Mo 21.02.05 18:49
moment mal...!
täusch ich mich, oder ist da health nur lokal in der procedure deklariert?!
dann ist es ja auch kein wunder, das da nix runtergezählt wird
oder sage ma mal: es wird schon runtergezählt, aber bei jedem neuen aufruf der procedure wieder zurückgesetzt, wie matze.de schon geschrieben hat
wenn ich das nicht missverstanden hab und es so ist wie ich denke würde ich dir empfehlen, health ganz einfach global zu deklariern, dann gehts.
_________________ [inspirationslos]
|
|
pufti 
Hält's aus hier
Beiträge: 14
|
Verfasst: Mo 21.02.05 19:05
nein sie sind nicht lokal, ich habe sie global vereinbart, nur die zeilen dazwischen nicht mit reingepostet 
|
|
matze.de
      
Beiträge: 576
Win95, Win98 SE, WinXp Prof SP2
D7P, D8P, FPC2.0
|
Verfasst: Mo 21.02.05 19:23
jetzte versteh ich nix mea... poste bitte die ganze procedure und globale variablen extra o0
mfg matze
_________________ si tacuisses, philosophus mansisses.
|
|
pufti 
Hält's aus hier
Beiträge: 14
|
Verfasst: Mo 21.02.05 19:35
Globale Variablen:
Delphi-Quelltext 1:
| var health2,health1:integer; |
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| procedure TForm1.Button1Click(Sender: TObject); var X,Xn,Y,Yn,Vx,Vxn,Vy,Vyn,Vw,Fw,Fwx,Fwy,VL,Vsx,Cw,Aq,V,M,Winkel:double; begin dec(Health2); Edit8.text:=IntToStr(Health2); Image5.visible:=false; Image6.visible:=false; Winkel:=StrToFloat(Edit2.Text); X:=10; Y:=50; M:=5; V:=StrToFloat(Edit1.Text); Vx:=V*cos(Winkel*Pi/180); Vy:=V*sin(Winkel*Pi/180); VW:=Random(45)-10; Cw:=0.45; Aq:=0.0075; Edit3.text:=FloatToStr(vw); repeat Image2.Top:=ClientHeight-Round(Y); Image2.Left:=Round(X); Image1.Update; Sleep(10); Vsx:=Vx-Vw; VL:=Sqrt(Sqr(Vsx)+Sqr(Vy)); Fw:=-0.5*p*Cw*Aq*Sqr(VL); Fwx:=Vsx/VL*Fw; Fwy:=Vy/VL*Fw; Xn:=0.5*Fwx/M*Sqr(dt)+Vx*dt+X; Vxn:=Fwx/M*dt+Vx; Yn:=0.5*(Fwy/M+g)*Sqr(dt)+Vy*dt+Y; Vyn:=(Fwy/M+g)*dt+Vy; X:=Xn; Vx:=Vxn; Y:=Yn; Vy:=Vyn until (Y<0) or (X>Image1.Width); if (Image2.Left>Image3.Left) and (Image2.Top>Image3.Top) and (Image2.Top<Image3.Top+Image3.Height) then begin Image5.visible:=true; Health2:=Health2-1; end; if Y<28 then Image1.Canvas.Ellipse(Round(X-10),Round((Image1.height-18)-10),Round(X+10),Round((Image1.height-18)+10)); end; |
|
|
dnk05
      
Beiträge: 40
D3 Prof
|
Verfasst: Do 03.03.05 14:59
Willst du nicht mal dein Spiel online stellen? Würd mich mal interessieren, wie das aussieht.
|
|