Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1324326603
Юрий
2011-12-20 00:30
2012.04.22
С днем рождения ! 20 декабря 2011 вторник


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


3-1274783943
Phoenix
2010-05-25 14:39
2012.04.22
Помогите составить запрос...


2-1324817661
Евгений07
2011-12-25 16:54
2012.04.22
Ошибка Length(s);


2-1325061895
гия
2011-12-28 12:44
2012.04.22
Пграмма "замерзает" пока TThread не завершится





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский