Главная страница
    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.003 c
8-1225884531
sloosar
2008-11-05 14:28
2012.04.22
TLabel


2-1324738361
Евгений07
2011-12-24 18:52
2012.04.22
ADODataSet узнать тип поля


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


15-1324457180
Mysql_error
2011-12-21 12:46
2012.04.22
Настроить коннет к mysql с разных компьютеров


2-1325178292
Gu
2011-12-29 21:04
2012.04.22
SizeOf





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский