|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
20.02.2011, 14:24 | #1 |
Новичок
Джуниор
Регистрация: 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. Змейка работает очень криво. Не всегда правильно понимает, что врезалась в другую змейку. В чем дело не могу понять |
20.02.2011, 15:29 | #2 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
20.02.2011, 17:09 | #3 |
Подтвердите свой е-майл
Регистрация: 19.12.2010
Сообщений: 808
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Змейка | 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 |