Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.06.2012, 18:03
Аватар для SmoceR
SmoceR SmoceR вне форума
Прохожий
 
Регистрация: 23.06.2012
Сообщения: 3
Репутация: 10
По умолчанию Пишу "змейку", не могу сделать управление

Как начинающий программист решил попробовать написать "змейку". Мне нужно сделать так, чтобы прямоугольник-змейка (пока что) просто изменял направление своего движения при нажатии на одну из кнопок-стрелок (тех, что рядом с RCTRL).
Пробовал как через FormKeyDown, так и через FormKeyPress.
Код:
Код:
unit thesnake;

interface

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

type
  TForm1 = class(TForm)
    GameBoard: TPaintBox;
    Timer1: TTimer;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  len, wid, speed, bX, bY, frX, frY : integer;
  SnakeDirR, SnakeDirD, SnakeDirL, SnakeDirU : boolean;

implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
begin
  wid := 10;
  len := 90;
  bX := 200;
  bY := 50;
  frX := bX + len;
  frY := bY + wid;
  speed := 2;
  GameBoard.Canvas.Brush.Color := rgb(0,0,0);
  GameBoard.Canvas.Rectangle(0,0,GameBoard.Width,GameBoard.Height);
  GameBoard.Canvas.Brush.Color := rgb(0,255,8);
  GameBoard.Canvas.Rectangle(bX,bY,frX,frY);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if Timer1.Enabled then Timer1.Enabled := false else Timer1.Enabled := true
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin

  if SnakeDirR then
  begin
    GameBoard.Canvas.Brush.Color := rgb(0,0,0);
    GameBoard.Canvas.Rectangle(0,0,GameBoard.Width,GameBoard.Height);
    GameBoard.Canvas.Brush.Color := rgb(0,255,8);
    GameBoard.Canvas.Rectangle(bX,bY,frX,frY);
    GameBoard.Canvas.Rectangle(bX-1,bY,bX,frY);
    bX := bX + speed;
    frX := bX + len;
    frY := bY + wid;
  end;

  if SnakeDirD then
  begin
    GameBoard.Canvas.Brush.Color := rgb(0,0,0);
    GameBoard.Canvas.Rectangle(0,0,GameBoard.Width,GameBoard.Height);
    GameBoard.Canvas.Brush.Color := rgb(0,255,8);
    GameBoard.Canvas.Rectangle(bX,bY,frX,frY);
    GameBoard.Canvas.Rectangle(bX-1,bY,bX,frY);
    bY := bY + speed;
    frX := bX + len;
    frY := bY + wid;
  end;

  if SnakeDirL then
  begin
    GameBoard.Canvas.Brush.Color := rgb(0,0,0);
    GameBoard.Canvas.Rectangle(0,0,GameBoard.Width,GameBoard.Height);
    GameBoard.Canvas.Brush.Color := rgb(0,255,8);
    GameBoard.Canvas.Rectangle(bX,bY,frX,frY);
    GameBoard.Canvas.Rectangle(bX-1,bY,bX,frY);
    bX := bX - speed;
    frX := bX + len;
    frY := bY + wid;
  end;

  if SnakeDirU then
  begin
    GameBoard.Canvas.Brush.Color := rgb(0,0,0);
    GameBoard.Canvas.Rectangle(0,0,GameBoard.Width,GameBoard.Height);
    GameBoard.Canvas.Brush.Color := rgb(0,255,8);
    GameBoard.Canvas.Rectangle(bX,bY,frX,frY);
    GameBoard.Canvas.Rectangle(bX-1,bY,bX,frY);
    bY := bY - speed;
    frX := bX + len;
    frY := bY + wid;
  end;

end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case key of
  39 : begin SnakeDirR:=true; SnakeDirD:=false; SnakeDirL:=false; SnakeDirU:=false; end;
  40 : begin SnakeDirD:=true; SnakeDirL:=false; SnakeDirU:=false; SnakeDirR:=false; end;
  37 : begin SnakeDirL:=true; SnakeDirD:=false; SnakeDirR:=false; SnakeDirU:=false; end;
  38 : begin SnakeDirU:=true; SnakeDirD:=false; SnakeDirL:=false; SnakeDirR:=false; end;
  end;
end;


procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  case key of
  chr(39) : begin SnakeDirR:=true; SnakeDirD:=false; SnakeDirL:=false; SnakeDirU:=false; end;
  chr(40) : begin SnakeDirD:=true; SnakeDirL:=false; SnakeDirU:=false; SnakeDirR:=false; end;
  chr(37) : begin SnakeDirL:=true; SnakeDirD:=false; SnakeDirR:=false; SnakeDirU:=false; end;
  chr(38) : begin SnakeDirU:=true; SnakeDirD:=false; SnakeDirL:=false; SnakeDirR:=false; end;
  end;
end;

end.
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:36.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025