Форум: "Начинающим";
Текущий архив: 2012.04.22;
Скачать: [xml.tar.bz2];
Вниззмейка Найти похожие ветки
← →
ghjtyu21 © (2011-12-28 23:04) [0]что здесь не так?
unit ttt;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ExtCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
Image1: TImage;
MainMenu1: TMainMenu;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
TSnake=Class
length:Byte;
Body:array of TPoint;
dx,dy:Integer;
Constructor Create(length0:byte);
Procedure ChangeDirection(arg:char);
Procedure Move;
Procedure Show(arg:TCanvas);
end;
var
Form1: TForm1;
Snake:TSnake;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.Canvas.Brush.Color:=Form1.Color;
Image1.Canvas.Rectangle(0,0,form1.ClientWidth,form1.ClientHeight);
snake:=TSnake.Create(5);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
snake.Move;
Snake.Show(image1.Canvas);
end;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
snake.ChangeDirection(key);
end;
Procedure TSnake.ChangeDirection(arg:char);
begin
case arg of
#65: begin dx:=0;dy:=-1;end;
#66: begin dx:=-1;dy:=0;end;
#68: begin dx:=0;dy:=1;end;
#67: begin dx:=1;dy:=0;end;
end;
end;
Constructor TSnake.Create(length0:byte);
var i:integer;
begin
length:=length0;
Setlength(body,length);
for i:=length-1 downto 0 do
begin
body[i].X:=(Form1.ClientWidth div 2)-10*(length-1-i);
body[i].Y:=Form1.ClientHeight div 2;
end;
dx:=1;
dy:=0;
end;
Procedure TSnake.Move;
var i:integer;
begin
for i:=0 to length-1 do
body[i]:=body[i+1];
body[length-3].X:=body[length-3].X+10*dx;
body[length-3].Y:=body[length-3].Y+10*dy;
end;
Procedure TSnake.Show(arg:TCanvas);
var i:integer;
begin
with arg do
begin
Rectangle(0,0,form1.ClientWidth,form1.ClientHeight);
for i:=length-1 downto 0 do
Rectangle(body[i].X-4,body[i].Y-4,body[i].X+4,body[i].Y+4);
end;
end;
end.
← →
Сергей М. © (2011-12-28 23:18) [1]ползет, гадит и не убирает за собой ?)
← →
ghjtyu21 © (2011-12-28 23:20) [2]вообще не ползет...(
← →
Rouse_ © (2011-12-28 23:27) [3]Ну для начала выходы за пределы в настройках компилера включи, а то не понятно как вот это у тебя отработало:
Procedure TSnake.Move;
var i:integer;
begin
for i:=0 to length-1 do
body[i]:=body[i+1];
body[length-3].X:=body[length-3].X+10*dx;
body[length-3].Y:=body[length-3].Y+10*dy;
end;
← →
ghjtyu21 © (2011-12-28 23:34) [4]что включить?
← →
Rouse_ © (2011-12-28 23:35) [5]В настройках компирера Range check error и т.д. - короче при отладке все настройки по максимуму выставь :)
← →
RWolf © (2011-12-28 23:56) [6]очевидно, что код некорректно обращается с индексами:
Procedure TSnake.Move;
var i:integer;
begin
for i:=0 to length-2 do //фикс №1
body[i]:=body[i+1];
body[length-1].X:=body[length-1].X+10*dx; //фикс №2
body[length-1].Y:=body[length-1].Y+10*dy; //
end;
← →
Германн © (2011-12-29 00:45) [7]В таких случаях положено приводить не только pas, но и dfm.
> ghjtyu21 © (28.12.11 23:20) [2]
>
> вообще не ползет...(
>
А отладчик в OnKeyPress формы заходит?
← →
KilkennyCat © (2011-12-29 01:08) [8]таймер выключен, стопудово.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2012.04.22;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.002 c