Autor Beitrag
pufti
Hält's aus hier
Beiträge: 14



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Mo 21.02.05 18:29 
Also zu Frage 2:

Sieht das so aus bei dir?
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mo 21.02.05 18:34 
danke für die schnelle antwort...
naja ich habs mir da eher einfach gemacht :lol:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 576

Win95, Win98 SE, WinXp Prof SP2
D7P, D8P, FPC2.0
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 576

Win95, Win98 SE, WinXp Prof SP2
D7P, D8P, FPC2.0
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 317

WinXP SP2
D6 Pers, D2005 Prof, VS2005
BeitragVerfasst: Mo 21.02.05 18:49 
moment mal...!
täusch ich mich, oder ist da health nur lokal in der procedure deklariert?! :shock:
dann ist es ja auch kein wunder, das da nix runtergezählt wird :D
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 Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 576

Win95, Win98 SE, WinXp Prof SP2
D7P, D8P, FPC2.0
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mo 21.02.05 19:35 
Globale Variablen:
ausblenden Delphi-Quelltext
1:
var health2,health1:integer;					



ausblenden volle Höhe Delphi-Quelltext
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 40


D3 Prof
BeitragVerfasst: Do 03.03.05 14:59 
Willst du nicht mal dein Spiel online stellen? Würd mich mal interessieren, wie das aussieht.