Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.12.2010, 16:24   #1
iron_cross
Пользователь
 
Аватар для iron_cross
 
Регистрация: 23.11.2010
Сообщений: 29
Смущение

Есть программа Snake и управляется с помощью клавишь (a,s,d,w), можно ли сделать так чтобы червяк(или линия) сам двигался по экрану без управления, как ему хочется. Вот текст программы:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, struct, ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Snake   : TSnake;
  Buffer : TBitMap;
  posX: word;
implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
var i,j:integer;
    newx,newy:integer;
begin
PatBlt(Buffer.Canvas.Handle,
0,
0,
Buffer.Width,
Buffer.Height,
BLACKNESS);

for i:=1 to AMaxX do
for j:=1 to AMaxY do
if gameA[i,j]=-1 then begin
Buffer.Canvas.Rectangle(i*5,j*5,i*5+5,j*5+5);
end;

case Snake.Direction of
1: Snake.Move(Snake.First.X+1,Snake.First.Y);
2: Snake.Move(Snake.First.X,Snake.First.Y+1);
3: Snake.Move(Snake.First.X-1,Snake.First.Y);
4: Snake.Move(Snake.First.X,Snake.First.Y-1);
end;

Snake.Draw(Buffer.Canvas);

BitBlt(Form1.Canvas.Handle,0,0,Form1.Width,Form1.Height,Buffer.Canvas.Handle,0,0,SRCCOPY);
end;

procedure TForm1.FormCreate(Sender: TObject);
var i,j:integer;
begin
for i:=1 to AMaxX do
for j:=1 to AMaxY do
GameA[i,j]:=0;

Buffer:=TBitMap.Create;
Buffer.Width:=Form1.Width;
Buffer.Height:=Form1.Height;

Snake.Create(1,5,10,10,clYellow);

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
Snake.Destroy;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
case key of
87: Snake.SetDirection(4);
68: Snake.SetDirection(1);
65: Snake.SetDirection(3);
83: Snake.SetDirection(2);
27: close;
32: Snake.Remove;
107: Snake.Add;
else Form1.Caption:=IntToStr(key);
end;

end;

end.
Если из этой проги не получится сделать то, что надо. Тогда вопрос, если у кого программа где червечок или линия сама ползает по экрану, не важно на Pascal или на Delphi? Заранее спасибо.

Вот уже готый файл, где змейк сама бегает по полю. Кто нибудь мне может объяснить некоторые строчки кода, некоторые строчки кода не совсем понимаю. Хоть немного расписать.
1.rar

Последний раз редактировалось AlDelta; 03.01.2011 в 09:47.
iron_cross вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Rad Studio 2011 XE: новое в Delphi, C++ Builder, RadPHP и Delphi Prism savva-paladin Софт 18 02.10.2010 20:24
Snake Battle VovanZ Gamedev - cоздание игр: Unity, OpenGL, DirectX 7 21.03.2010 16:27
Игра "Snake" spamer Общие вопросы Delphi 12 31.01.2009 23:42
Delphi. Как нарисовать в Delphi два движущиеся шара с определенной скоростью? redred Общие вопросы Delphi 10 11.12.2007 10:43
Как открыть БД, написанную в Delphi если нf другой машине Delphi нет? dagarik БД в Delphi 7 22.10.2007 17:54