striker159
Lt. Junior Grade
- Registriert
- Dez. 2008
- Beiträge
- 327
hallo
ich habe mir ein kleine spiel programmiert. man steuert seine figur hoch und runter, und muss so entgegenkommenden sachen ausweichen. das problem hierbei ist, dass die steuerung nicht will, wie ich will.
sowohl bei
als auch bei
passiert garnichts.
als übergangslösung setze ich momentan den focus beim spielen auf ein memo^^ damit funktioniert onkeypress ohne probleme. aber so möchte ich das nicht lassen.
wer weiß rat?
hier mal mein gesamter code der hauptunit:
ich habe mir ein kleine spiel programmiert. man steuert seine figur hoch und runter, und muss so entgegenkommenden sachen ausweichen. das problem hierbei ist, dass die steuerung nicht will, wie ich will.
sowohl bei
Code:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key='w' then bbb
if key='s' then aaa
end;
Code:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=119 then bbb
if key=113 then aaa
end;
als übergangslösung setze ich momentan den focus beim spielen auf ein memo^^ damit funktioniert onkeypress ohne probleme. aber so möchte ich das nicht lassen.
wer weiß rat?
hier mal mein gesamter code der hauptunit:
Code:
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, GameClass, StdCtrls, Grids, ExtCtrls, jpeg;
type
TT = class(TThread)
protected
procedure Execute; override;
end;
TForm1 = class(TForm)
Button2: TButton;
Button5: TButton;
Label1: TLabel;
Button6: TButton;
Image1: TImage;
Memo1: TMemo;
Edit1: TEdit;
Label2: TLabel;
Label3: TLabel;
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Memo1KeyPress(Sender: TObject; var Key: Char);
private
procedure irefresh(short:boolean);
public
{ Public declarations }
end;
var
Form1: TForm1;
Spiel:TGame;
Images : array[0..4] of array[0..15] of TImage ;
Pause:Boolean;
thread:TT;
speed:integer;
counter:integer;
implementation
{$R *.dfm}
procedure wait(ms:integer);
var x:integer;
begin
try
x:=getTickCount;
while getTickCount-x<ms do
application.ProcessMessages;
except
Showmessage('Fehler wait');
end;
end;
procedure TT.Execute;
var x,s:integer;
begin
try
Randomize;
pause := false;
Form1.Label1.Caption:='Spiel läuft';
Form1.memo1.SetFocus;
//Form1.SetFocus;
While (Spiel.getVerloren = false)and(pause=false) do
begin
s:=200*(6-speed);
x:=random(5);
Spiel.neuHindernis(x);
// x:=random(5);
// Spiel.neuHindernis(x);
Spiel.links;
Form1.irefresh(false);
counter:=counter+1;
Form1.Label3.Caption:=IntToStr(counter);
if counter>100 then begin
speed:=2;
Form1.Edit1.text:=IntToStr(2);
end;
if counter>200 then begin
speed:=3;
Form1.Edit1.text:=IntToStr(3);
end;
if counter>300 then begin
speed:=4;
Form1.Edit1.text:=IntToStr(4);
end;
if counter>500 then begin
speed:=5;
Form1.Edit1.text:=IntToStr(5);
end;
wait(s);
end;
if Spiel.getVerloren then Form1.Label1.Caption:='Verloren. Spiel ist zu Ende.'
else if Pause then Form1.Label1.Caption:='Spiel pausiert';
wait(100);
except
on e: exception do begin
ShowMessage('Fehler TT.Execute');
end;
end;
end;
procedure TForm1.irefresh(short:boolean);
var i,k:integer;
begin
try
if short then begin
for i:=0 to 4 do
case Spiel.g(i,0) of
0: Images[i,0].Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'/res/leer.bmp');
1: Images[i,0].Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'/res/flieger.bmp');
2: Images[i,0].Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'/res/kaputt.bmp');
5: Images[i,0].Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'/res/hindernis.bmp');
end;
end
else
for i:=0 to 4 do
for k:=0 to 15 do
case Spiel.g(i,k) of
0: Images[i,k].Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'/res/leer.bmp');
1: Images[i,k].Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'/res/flieger.bmp');
2: Images[i,k].Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'/res/kaputt.bmp');
5: Images[i,k].Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'/res/hindernis.bmp');
end;
memo1.SetFocus;
//Form1.SetFocus;
except
ShowmEssage('Fehler irefresh');
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
try
Spiel.newgame;
Pause:=false;
Label1.Caption:='';
irefresh(false);
speed:=StrToInt(edit1.Text);
counter:=0
except
ShowmEssage('Fehler button2');
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var i,k:integer;
begin
try
Spiel:=TGame.Create;
// Image1.Canvas.FillRect(rect(-1,-1,Image1.Width,Image1.Height));
for i:=0 to 4 do
for k:=0 to 15 do begin
Images[i,k]:=TImage.Create(nil);
with Images[i,k] do begin
Left:=Image1.Left+(Image1.Width div 16)*k;
Top:=Image1.Top+(Image1.Height div 5)*i;
Width:=64;
Height:=67;
Parent:=self;
Transparent:=true;
end;
end;
except
ShowMessage('Fehler FormCreate');
end;
end;
procedure TForm1.Button5Click(Sender: TObject);
//var x:integer;
begin
try
thread:=TT.Create(true);
thread.FreeOnTerminate:=true;
memo1.SetFocus;
//Form1.SetFocus;
thread.Resume;
except
ShowMessage('Fehler start');
end;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
try
pause:=true;
except
ShowmEssage('Fehler button6');
end;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var i,k:integer;
begin
try
for i:=0 to 4 do
for k:=0 to 15 do
Images[i,k].Free;
Spiel.Free;
except
ShowmEssage('Fehler closequery');
end;
end;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key='w' then Spiel.MovePlayer(true);
if key='s' then Spiel.MovePlayer(false);
irefresh(false) ;
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=119 then Spiel.MovePlayer(true);
if key=113 then Spiel.MovePlayer(false);
irefresh(false) ;
end;
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
try
if (Spiel.getVerloren = false)and(pause=false) then begin
if (key='w')and (Spiel.getPos<>0) then
begin
Spiel.MovePlayer(true);
irefresh(true) ;
end;
if (key='s')and (Spiel.getPos<>4) then
begin
Spiel.MovePlayer(false);
irefresh(true) ;
end;
end;
except
ShowmEssage('Fehler memokeypress');
end;
end;
end.