hallo leute habe mal eine frage:
ich bin grad dabei ein spielchen zu programmieren. dabei werden von einem "timer" alle drei sekunden auf einem "panel", "images" erzeugt. ein anderer "timer" befördert diese dann nach unten. am unteren ende des "panels" sitzt ein weiteres "image" das sich mit den pfeiltasten nach links und rechts bewegen lässt. nun möchte ich das, wenn die runterfallenden "images" das untere bewgliche "image" sozusagen treffen (habe gesagt wenn sie die gleiche ".top-Position" haben, geht das auch geschickter??) soll das jeweilige runterfallende image "zerstört werden.
sprich: ImgBallnachunten.Destroy;
allerdings geht das nicht es kommt immer ein fehlermeldung.
wäre nett wenn mir das jmd erklären könnte.
hier och der 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:
| unit uSpiel;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, Menus, StdCtrls;
type TfrmGame = class(TForm) pnlGame: TPanel; MainMenu: TMainMenu; Datei1: TMenuItem; Hilfe1: TMenuItem; btnStart: TButton; btnPause: TButton; gbControl: TGroupBox; TmrNewPoints: TTimer; TmrDown: TTimer; ImgFaenger: TImage; lblScore: TLabel; gbDisplay: TGroupBox; lblLives: TLabel; lblDeadline: TLabel; lblLevel: TLabel; TmrDeadline: TTimer; TmrCheckPoints: TTimer; procedure btnStartClick(Sender: TObject); procedure TmrNewPointsTimer(Sender: TObject); procedure TmrDownTimer(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure TmrDeadlineTimer(Sender: TObject); procedure TmrCheckPointsTimer(Sender: TObject); private procedure CheckPoints(); public end;
var frmGame: TfrmGame; ten_points: array[0..400] of TImage; i, score, lives, level: integer;
implementation
{$R *.dfm}
procedure TfrmGame.btnStartClick(Sender: TObject); begin TmrNewPoints.Enabled := True; i := -1; lives := 3; score := 0; level := 1; end;
procedure TfrmGame.TmrNewPointsTimer(Sender: TObject); var ausrichtung: integer; begin i := i+1; ten_points[i] := TImage.Create(pnlGame); ten_points[i].Parent := pnlGame; ten_points[i].Picture.LoadFromFile('bild_10punkte.bmp'); repeat ausrichtung := Random(pnlGame.Width); until (ausrichtung mod 20) = 0; ten_points[i].SetBounds(ausrichtung,25,20,20); end;
procedure TfrmGame.TmrDownTimer(Sender: TObject); var k:integer; begin for k:=0 to i do begin ten_points[k].Top := ten_points[k].Top +5; end; end;
procedure TfrmGame.CheckPoints(); var l: integer; begin for l:=0 to i do begin if ten_points[l] = nil then continue; if (ten_points[l].Left = ImgFaenger.Left) AND (ten_points[l].Top+20 = ImgFaenger.Top) then begin score := score+10; lblScore.Caption := 'Punktestand: '+IntToStr(score); ten_points[l].Destroy; break; end else if (ten_points[l].Left <> ImgFaenger.Left) AND (ten_points[l].Top+20 = pnlGame.Height) then begin lives := lives-1; lblLives.Caption := 'Leben: '+IntToStr(lives); ten_points[l].visible := false; ten_points[l].Enabled := false; end;
end; end;
procedure TfrmGame.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if key = VK_RIGHT then begin if frmGame.ImgFaenger.Left = 280 then frmGame.ImgFaenger.Left := 280 else frmGame.ImgFaenger.Left := frmGame.ImgFaenger.Left+20; end else if key = VK_LEFT then begin if frmGame.ImgFaenger.Left = 0 then frmGame.ImgFaenger.Left := 0 else frmGame.ImgFaenger.Left := frmGame.ImgFaenger.Left-20; end else if key = VK_SPACE then begin if deadline > 0 then CheckDeadline(true) else CheckDeadline(false); end; end;
procedure TfrmGame.TmrCheckPointsTimer(Sender: TObject); begin CheckPoints(); end;
end. |