Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.04.22;
Скачать: CL | DM;

Вниз

змейка   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.008 c
2-1323823424
Валентина
2011-12-14 04:43
2012.04.22
распределение средств между предприятиями


3-1274956779
Николай2010
2010-05-27 14:39
2012.04.22
Access+Delphi+Ado - про транзакции


15-1324319659
KilkennyCat
2011-12-19 22:34
2012.04.22
Че-то мне так много девушек пишет


15-1323981002
Юрий
2011-12-16 00:30
2012.04.22
С днем рождения ! 16 декабря 2011 пятница


15-1324385736
Zheksonz
2011-12-20 16:55
2012.04.22
Синтаксис языка СИ