Entwickler-Ecke

Multimedia / Grafik - 2d spiel


ri\/en - Mi 23.02.05 13:08
Titel: 2d spiel
Hoi
Sitzt grad in info un verzweifle... wir versuchen ein 2d spiel für ein projekt zu programmieren. wir haben eine Figur und ein Fadenkreuz nur die Projektile fliegen überall hin nur nicht da wo wir hinzielen (: Könnt uns jemand helfen`?


MrSaint - Mi 23.02.05 13:11

Glaskugel kaputt, leider sollte dann ein bisschen Code her :)


ri\/en - Mi 23.02.05 13:21

Hab mal alles eingefügt. hoff du findest dich irgendwie zurecht. Unser Algorhytmus fürs schiessen beginnt in Zeile 371

EDIT: eigene Verbesserung in zeile 374 und 375


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:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
340:
341:
342:
343:
344:
345:
346:
347:
348:
349:
350:
351:
352:
353:
354:
355:
356:
357:
358:
359:
360:
361:
362:
363:
364:
365:
366:
367:
368:
369:
370:
371:
372:
373:
374:
375:
376:
377:
378:
379:
380:
381:
382:
383:
384:
385:
386:
387:
388:
389:
390:
391:
392:
393:
394:
395:
396:
397:
398:
399:
400:
401:
402:
403:
404:
405:
406:
407:
408:
409:
410:
411:
412:
413:
414:
415:
416:
417:
418:
419:
420:
421:
422:
423:
424:
425:
426:
427:
428:
429:
430:
431:
432:
433:
434:
435:
436:
437:
438:
439:
440:
441:
442:
443:
444:
445:
446:
447:
448:
449:
450:
451:
452:
453:
454:
455:
456:
457:
458:
459:
460:
461:
462:
463:
464:
465:
466:
467:
468:
469:
470:
471:
472:
473:
474:
475:
476:
477:
478:
479:
480:
481:
482:
483:
484:
485:
486:
487:
488:
489:
490:
491:
492:
493:
494:
495:
496:
497:
498:
499:
500:
501:
502:
503:
504:
505:
506:
507:
508:
509:
510:
511:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ExtCtrls, jpeg;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Datei1: TMenuItem;
    NeuesSpiel1: TMenuItem;
    Image_hinten: TImage;
    Shape1: TShape;
    image_waffe: TImage;
    Panel2: TPanel;
    Fadenlinks: TShape;
    Fadenrechts: TShape;
    Fadenoben: TShape;
    Fadenunten: TShape;
    TimerEmitter: TTimer;
    Fadenalter: TImage;
    Projektil1: TImage;
    Projektil2: TImage;
    Projektil3: TImage;
    projektil4: TImage;
    Monster1: TImage;
    Monster2: TImage;
    Monster3: TImage;
    Projektil6: TImage;
    Projektil5: TImage;
    Monster4: TImage;
    Timerschiesen: TTimer;
    Timerbewegung: TTimer;
    Panel1: TPanel;
    Pause1: TMenuItem;
    Beenden1: TMenuItem;
    Timermonster: TTimer;
    Mauer1: TImage;
    Health: TPanel;
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormCreate(Sender: TObject); 
    procedure Image_hintenMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Image_hintenMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Image_hintenMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
      MousePos: TPoint; var Handled: Boolean);
    procedure TimerEmitterTimer(Sender: TObject);
    procedure Shape2MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure TimerschiesenTimer(Sender: TObject);
    procedure TimerbewegungTimer(Sender: TObject);
    procedure Image_hintenProgress(Sender: TObject; Stage: TProgressStage;
      PercentDone: Byte; RedrawNow: Boolean; const R: TRect;
      const Msg: String);
    procedure FormKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Beenden1Click(Sender: TObject);
    procedure Pause1Click(Sender: TObject);
    procedure TimermonsterTimer(Sender: TObject);



  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
Sineins,Hyp,Coseins: Extended;
gesundheit,v,abstandx,abstandy,unsinn,Richtung,panel,Zielxpeins,Zielypeins,Zielxpzwei,Zielypzwei,Zielxpdrei,Zielypdrei,Zielxpvier,Zielypvier,Zielxpfuenf,Zielypfuenf,Zielxpsechs,Zielypsechs,xachse,yachse,schiesen: integer;
  Form1: TForm1;

implementation

{$R *.dfm}





procedure TForm1.FormCreate(Sender: TObject);
begin
gesundheit:=100;
Health.Caption:=IntToStr(gesundheit);
v:=10;
panel:=0;
Projektil1.AutoSize:=True;
Projektil2.AutoSize:=True;
Projektil3.AutoSize:=True;
Projektil4.AutoSize:=True;
Projektil5.AutoSize:=True;
Projektil6.AutoSize:=True;   //
Panel2.Caption:=IntToSTr(0);
end;



procedure TForm1.Image_hintenMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin

schiesen:=schiesen+1;;                                   //schiesen

panel:=panel+1;
Panel1.Caption:=IntToStr(panel);

end;

procedure TForm1.Image_hintenMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin

xachse:=X;
yachse:=y;
Fadenoben.Top:=Y-30;     //Bewegung des Fadenkreuzes.
Fadenoben.Left:=X-10;
Fadenunten.Top:=Y+10;
Fadenunten.Left:=X-10;
Fadenlinks.Top:=Y;
Fadenlinks.Left:=X+5;
Fadenrechts.Top:=Y;
Fadenrechts.Left:=X-40;
Fadenlinks.BringToFront;
Fadenrechts.BringToFront;
Fadenoben.BringToFront;
Fadenunten.BringToFront;


Timerbewegung.Enabled:=True;
TimerEmitter.Enabled:=True;
Timerschiesen.Enabled:=True;
                                       //hier der neue Teil


if(Shape1.Top>650then
begin
Richtung:=0;
end;
if(Shape1.Top<40)then
begin
Richtung:=0;
end;
if(Shape1.Left>980then
begin
Richtung:=0;
end;
if(Shape1.Left<50then
begin
Richtung:=0;
end;

if(richtung=0then
begin
Shape1.Left:=Shape1.Left-0;image_waffe.Left:=image_waffe.Left-0;
end;
if(richtung=1then
begin
Shape1.Left:=Shape1.Left-3;image_waffe.Left:=image_waffe.Left-3;
end;
if(richtung=2then
begin
Shape1.Left:=Shape1.Left+3;image_waffe.Left:=image_waffe.Left+3;
end;
if(richtung=3then
begin
Shape1.Top:=Shape1.Top-3;image_waffe.Top:=image_waffe.Top-3;
end;
if(richtung=4then
begin
Shape1.Top:=Shape1.Top+3;image_waffe.Top:=image_waffe.Top+3;
end;

// hier Teil 2



if(projektil1.Top>697then  projektil1.Visible:=False;     //Grenze nach oben
if(projektil2.Top>697then  projektil2.Visible:=False;
if(projektil3.Top>697then  projektil3.Visible:=False;
if(projektil4.Top>697then  projektil4.Visible:=False;
if(projektil5.Top>697then  projektil5.Visible:=False;
if(projektil6.Top>697then  projektil6.Visible:=False;


if(projektil1.Top<0then  projektil1.Visible:=False;       // Grenze nach unten
if(projektil2.Top<0then  projektil2.Visible:=False;
if(projektil3.Top<0then  projektil3.Visible:=False;
if(projektil4.Top<0then  projektil4.Visible:=False;
if(projektil5.Top<0then  projektil5.Visible:=False;
if(projektil6.Top<0then  projektil6.Visible:=False;

if(projektil1.Left>1027then  projektil1.Visible:=False;
if(projektil2.Left>1027then  projektil2.Visible:=False;
if(projektil3.Left>1027then  projektil3.Visible:=False;
if(projektil4.Left>1027then  projektil4.Visible:=False;
if(projektil5.Left>1027then  projektil5.Visible:=False;
if(projektil6.Left>1027then  projektil6.Visible:=False;

if(projektil1.Left<0then  projektil1.Visible:=False;
if(projektil2.Left<0then  projektil2.Visible:=False;
if(projektil3.Left<0then  projektil3.Visible:=False;
if(projektil4.Left<0then  projektil4.Visible:=False;
if(projektil5.Left<0then  projektil5.Visible:=False;
if(projektil6.Left<0then  projektil6.Visible:=False;





if(projektil1.Visible=true) then
begin
if(projektil2.Visible=true) then
begin
projektil2.Top:=projektil2.Top+1;
end;
if(projektil3.Visible=true) then
begin
projektil3.Top:=projektil3.Top+1;
end;
if(projektil4.Visible=true) then
begin
projektil4.Top:=projektil4.Top+7;
end;
if(projektil5.Visible=true) then
begin
projektil5.Top:=projektil5.Top+7;
end;
if(projektil6.Visible=true) then
begin
projektil6.Top:=projektil6.Top+7;
end;
end;
end;

procedure TForm1.Image_hintenMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
schiesen:=schiesen-1;

end;

procedure TForm1.FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
  panel:=panel-1;
Panel1.Caption:=IntToStr(panel);

end;



procedure TForm1.TimerEmitterTimer(Sender: TObject);
begin
if(schiesen=1then begin                                             //funktioniert
if(projektil1.Visible=False) then                                      //xachse,yachse
                             begin
                                Zielxpeins:=Xachse;
                                Zielypeins:=Yachse;
                                projektil1.Visible:=True;
                                projektil1.Top:=image_waffe.Top;
                                projektil1.Left:=image_waffe.Left;
                                Sineins:=Sin(sqrt(Zielxpeins*Zielxpeins+Zielypeins*Zielypeins)/Zielypeins);
                                Coseins:=Cos(Zielxpeins/sqrt(Zielxpeins*Zielxpeins+Zielypeins*Zielypeins));
                                end

        else if(projektil2.Visible=False)  then
                             begin
                                Zielxpzwei:=Xachse;
                                Zielypzwei:=Yachse;
                                projektil2.Visible:=True;
                                projektil2.Top:=image_waffe.Top;
                                projektil2.Left:=image_waffe.Left;
                                end
        else if(projektil3.Visible=False)  then
                             begin
                                Zielxpdrei:=Xachse;
                                Zielypdrei:=Yachse;
                                projektil3.Visible:=True;
                                projektil3.Top:=image_waffe.Top;
                                projektil3.Left:=image_waffe.Left;
                                end
        else if(projektil4.Visible=False)  then
                             begin
                                Zielxpvier:=Xachse;
                                Zielypvier:=Yachse;
                                projektil4.Visible:=True;
                                projektil4.Top:=image_waffe.Top;
                                projektil4.Left:=image_waffe.Left;
                                end
        else if(projektil5.Visible=False)  then
                             begin
                                Zielxpfuenf:=Xachse;
                                Zielypfuenf:=Yachse;
                                projektil5.Visible:=True;
                                projektil5.Top:=image_waffe.Top;
                                projektil5.Left:=image_waffe.Left;
                                end
        else if(projektil6.Visible=False)  then
                             begin
                                Zielxpsechs:=Xachse;
                                Zielypsechs:=Yachse;
                                projektil6.Visible:=True;
                                projektil6.Top:=image_waffe.Top;
                                projektil6.Left:=image_waffe.Left;
                                end

 end;





end;

procedure TForm1.Shape2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin

xachse:=X;
yachse:=y;
Fadenoben.Top:=Y-50+Shape1.Top;     //Bewegung des Fadenkreuzes.
Fadenoben.Left:=X+Shape1.Left;
Fadenunten.Top:=Y+20+Shape1.Top;
Fadenunten.Left:=X+Shape1.Left;
Fadenlinks.Top:=Y+Shape1.Top;
Fadenlinks.Left:=X-50+Shape1.Left;
Fadenrechts.Top:=Y+Shape1.Top;
Fadenrechts.Left:=X+20+Shape1.Left;
end;

procedure TForm1.TimerschiesenTimer(Sender: TObject);
var i:integer;
begin

if(projektil1.Top>697then  projektil1.Visible:=False;     //Grenze nach oben
if(projektil2.Top>697then  projektil2.Visible:=False;
if(projektil3.Top>697then  projektil3.Visible:=False;
if(projektil4.Top>697then  projektil4.Visible:=False;
if(projektil5.Top>697then  projektil5.Visible:=False;
if(projektil6.Top>697then  projektil6.Visible:=False;


if(projektil1.Top<0then  projektil1.Visible:=False;       // Grenze nach unten
if(projektil2.Top<0then  projektil2.Visible:=False;
if(projektil3.Top<0then  projektil3.Visible:=False;
if(projektil4.Top<0then  projektil4.Visible:=False;
if(projektil5.Top<0then  projektil5.Visible:=False;
if(projektil6.Top<0then  projektil6.Visible:=False;

if(projektil1.Left>1027then  projektil1.Visible:=False;   //Grenze nach rechts
if(projektil2.Left>1027then  projektil2.Visible:=False;
if(projektil3.Left>1027then  projektil3.Visible:=False;
if(projektil4.Left>1027then  projektil4.Visible:=False;
if(projektil5.Left>1027then  projektil5.Visible:=False;
if(projektil6.Left>1027then  projektil6.Visible:=False;

if(projektil1.Left<0then  projektil1.Visible:=False;   //Grenze nach links
if(projektil2.Left<0then  projektil2.Visible:=False;
if(projektil3.Left<0then  projektil3.Visible:=False;
if(projektil4.Left<0then  projektil4.Visible:=False;
if(projektil5.Left<0then  projektil5.Visible:=False;
if(projektil6.Left<0then  projektil6.Visible:=False;

if(projektil1.Visible=True) then
begin
Hyp:=sqrt(Zielxpeins*Zielxpeins+Zielypeins*Zielypeins);
projektil1.top:=round((hyp*sineins)/100*V)+projektil1.top;
projektil1.left:=round((hyp*coseins)/100*V)+projektil1.left;
//Sineins:=Sin(sqrt(Zielxpeins*Zielxpeins+Zielypeins*Zielypeins)/Zielypeins);
//Coseins:=Cos(Zielxpeins/sqrt(Zielxpeins*Zielxpeins+Zielypeins*Zielypeins));
end;





end;

procedure TForm1.TimerbewegungTimer(Sender: TObject);
begin

if(Shape1.Top>650then
begin
Richtung:=0;
end;
if(Shape1.Top<40)then
begin
Richtung:=0;
end;
if(Shape1.Left>980then
begin
Richtung:=0;
end;
if(Shape1.Left<50then
begin
Richtung:=0;
end;






if(richtung=0then
begin
Shape1.Left:=Shape1.Left-0;image_waffe.Left:=image_waffe.Left-0;
end;
if(richtung=1then
begin
Shape1.Left:=Shape1.Left-3;image_waffe.Left:=image_waffe.Left-3;
end;
if(richtung=2then
begin
Shape1.Left:=Shape1.Left+3;image_waffe.Left:=image_waffe.Left+3;
end;
if(richtung=3then
begin
Shape1.Top:=Shape1.Top-3;image_waffe.Top:=image_waffe.Top-3;
end;
if(richtung=4then
begin
Shape1.Top:=Shape1.Top+3;image_waffe.Top:=image_waffe.Top+3;
end;


end;





procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if(key =VK_left)  then Richtung:=1;
if(key =Vk_Right) then Richtung:=2;
if(key =Vk_Up)    then Richtung:=3;
if(key =Vk_Down)  then Richtung:=4
end;


procedure TForm1.Image_hintenProgress(Sender: TObject;
  Stage: TProgressStage; PercentDone: Byte; RedrawNow: Boolean;
  const R: TRect; const Msg: String);
begin
unsinn:=0;
 //TGraphic.OnProgress


end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if(key =VK_left)  then Richtung:=0;  // zum stehen bleiben
if(key =Vk_Right) then Richtung:=0;
if(key =Vk_Up)    then Richtung:=0;
if(key =Vk_Down)  then Richtung:=0;
end;




procedure TForm1.Beenden1Click(Sender: TObject);
begin
close;
end;

procedure TForm1.Pause1Click(Sender: TObject);
begin
Timerbewegung.Enabled:=False;
TimerEmitter.Enabled:=False;
Timerschiesen.Enabled:=False;
end;

procedure TForm1.TimermonsterTimer(Sender: TObject);
begin


if(monster1.Visible=True) then
begin
if((monster1.Visible=True)and(Shape1.Top>monster1.Top)) then          //nach unten
        if(monster1.Top+monster1.Height<>mauer1.Top+mauer1.Height)then
        monster1.Top:=monster1.Top+1;
if((monster1.Visible=True)and(Shape1.Top<monster1.Top)) then         //nach oben
monster1.Top:=monster1.Top-1;
if((monster1.Visible=True)and(Shape1.Left<monster1.Left)) then         //nach links
monster1.left:=monster1.left-1;
if((monster1.Visible=True)and(Shape1.Left>monster1.Left)) then         //nach rechts
monster1.left:=monster1.left+1;



if((monster1.Top=shape1.Top)and(monster1.left=shape1.left))then
begin
monster1.Visible:=False;
ShowMessage('Verloren');
gesundheit:=gesundheit-20;
Health.Caption:=IntToStr(gesundheit);

end;
end;
end;
end.


Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.


MrSaint - Mi 23.02.05 13:53

Wie habt ihr denn das hergeleitet?

Delphi-Quelltext
1:
projektil1.top:=round((hyp*sineins)/100*V)+projektil1.top;                    

und was ist V?
Hier würde ne richtige Variablenbenennung viel helfen ;) Außerdem wären ein paar Kommentare nicht schlecht...


MrSaint