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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2011, 14:24   #1
CRASHIK
Новичок
Джуниор
 
Регистрация: 20.02.2011
Сообщений: 2
По умолчанию Змейка на delphi

var
Form1: TForm1;
napb, napr : byte;
x1r,y1r,x2r,y2r,x1b,y1b,x2b,y2b : integer;
zap: array[1..10000,1..10000] of byte;
i,j : integer;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Height := Screen.Height -Screen.Height mod 15;
Form1.Width := Screen.Width -Screen.Width mod 15;
Form1.Left := 0;
Form1.Top := 0;
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (key = VK_LEFT) and (napb <> 3) then napb := 1;
if (key = VK_RIGHT) and (napb <> 1) then napb := 3;
if (key = VK_UP) and (napb <> 4) then napb := 2;
if (key = VK_DOWN) and (napb <> 2) then napb := 4;
if (key = $41) and (napr <> 3) then napr := 1;
if (key = $44) and (napr <> 1) then napr := 3;
if (key = $57) and (napr <> 4) then napr := 2;
if (key = $53) and (napr <> 2) then napr := 4;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
case napr of
1: begin x1r := x1r-15; x2r := x2r-15; end;
2: begin y1r := y1r-15; y2r := y2r-15; end;
3: begin x1r := x1r+15; x2r := x2r+15; end;
4: begin y1r := y1r+15; y2r := y2r+15; end;
end;
if (x1r < 0) or (zap[x1r,y1r] = 1) or (y2r < 15) or (zap[x1r,y1r] = 1) or (x1r > ClientWidth) or (zap[x1r,y1r] = 1) or (y1r > ClientHeight + 15) or (zap[x1r,y1r] = 1) then
begin
With Form1.Canvas do
Begin
Pen.Color := clRed;
Brush.Color:=clRed;
Rectangle(x1r,y1r,x2r,y2r);
end;
Timer1.Enabled := False;
Timer2.Enabled := False;
ShowMessage('Синий победил');
end
else
begin
zap[x1r,y1r] := 1;
With Form1.Canvas do
Begin
Pen.Color := clRed;
Brush.Color:=clRed;
Rectangle(x1r,y1r,x2r,y2r);
end;
end;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
case napb of
1: begin x1b := x1b-15; x2b := x2b-15; end;
2: begin y1b := y1b-15; y2b := y2b-15; end;
3: begin x1b := x1b+15; x2b := x2b+15; end;
4: begin y1b := y1b+15; y2b := y2b+15; end;
end;
if (x1b < 0) or (zap[x1b,y1b] = 1) or (y2b < 15) or (zap[x1b,y1b] = 1) or (x1b > ClientWidth) or (zap[x1b,y1b] = 1) or (y1b > ClientHeight + 15) or (zap[x1b,y1b] = 1) then
begin
With Form1.Canvas do
Begin
Pen.Color := clBlue;
Brush.Color:=clBlue;
Rectangle(x1b,y1b,x2b,y2b);
end;
Timer1.Enabled := False;
Timer2.Enabled := False;
ShowMessage('Красный победил');
end
else
begin
zap[x1b,y1b] := 1;
With Form1.Canvas do
Begin
Pen.Color := clBlue;
Brush.Color:=clBlue;
Rectangle(x1b,y1b,x2b,y2b);
end;
end;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
With Form1.Canvas do
Begin
Pen.Color := clRed;
Brush.Color:=clRed;
x1r := (Clientwidth div 15 div 2)*15-15;
y1r := (Clientheight div 15 div 2)*15;
x2r := (Clientwidth div 15 div 2)*15;
y2r := (Clientheight div 15 div 2)*15-15;
Rectangle(x1r,y1r,x2r,y2r);
zap[x1r,y1r] := 1;
Pen.Color := clBlue;
Brush.Color:=clBlue;
x1b := (Clientwidth div 15 div 2)*15+30;
y1b := (Clientheight div 15 div 2)*15;
x2b := (Clientwidth div 15 div 2)*15+15;
y2b := (Clientheight div 15 div 2)*15-15;
Rectangle(x1b,y1b,x2b,y2b);
zap[x1b,y1b] := 1;
end;
end;
procedure TForm1.N2Click(Sender: TObject);
var
i: Integer;
begin
for i := 1 to 10000 do
for j := 1 to 10000 do zap[i,j] := 0;
PatBlt(Form1.Canvas.Handle, 0, 0,
Form1.ClientWidth, Form1.ClientHeight, WHITENESS);

With Form1.Canvas do
Begin
Destroy;Pen.Color := clRed;
Brush.Color:=clRed;
x1r := (Clientwidth div 15 div 2)*15-15;
y1r := (Clientheight div 15 div 2)*15;
x2r := (Clientwidth div 15 div 2)*15;
y2r := (Clientheight div 15 div 2)*15-15;
Rectangle(x1r,y1r,x2r,y2r);
zap[x1r,y1r] := 1;
Pen.Color := clBlue;
Brush.Color:=clBlue;
x1b := (Clientwidth div 15 div 2)*15+30;
y1b := (Clientheight div 15 div 2)*15;
x2b := (Clientwidth div 15 div 2)*15+15;
y2b := (Clientheight div 15 div 2)*15-15;
Rectangle(x1b,y1b,x2b,y2b);
zap[x1b,y1b] := 1;
timer1.Enabled := true;
timer2.Enabled := true;
End;end;
procedure TForm1.N3Click(Sender: TObject);
begin
Form1.Close;
end;

begin
napr := 1;
napb := 3;

end.
Змейка работает очень криво. Не всегда правильно понимает, что врезалась в другую змейку. В чем дело не могу понять
CRASHIK вне форума Ответить с цитированием
Старый 20.02.2011, 15:29   #2
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Как писать код понятный себе самому.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 20.02.2011, 17:09   #3
asmodey1
Подтвердите свой е-майл
 
Регистрация: 19.12.2010
Сообщений: 808
По умолчанию

Как правильно оформить код в своем сообщении на форуме
asmodey1 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Змейка Vi[RUS] Помощь студентам 1 20.11.2010 21:59
Змейка ChEaTeR-abc Помощь студентам 0 19.09.2010 09:34
Змейка SAMY93 Общие вопросы Delphi 1 27.06.2010 19:58
Змейка(С++) MISHA13 Помощь студентам 1 08.02.2009 09:35