Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Паскаль
Регистрация

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

Excel VBA, CAD, Софт, ОС, Windows, Ubuntu, Android, VPS
Win Api, Assembler, C++, Java, Pascal, Lazarus, Delphi, OpenGL, DirectX
C#, Qt, .NET, ASP.NET, Windows Forms, ADO.NET, Framework, WPF, UWP, WinRT, XAML
HTML, CSS, JavaScript, Ajax, PHP, Perl, Python, Ruby, SQL, WordPress, API, XML, JSON, ActionScript, Flash

Ответ
 
Опции темы
Старый 29.12.2016, 00:09   #1
MOdusss
Новичок
 
Регистрация: 29.12.2016
Сообщений: 1
Репутация: 10
По умолчанию Нужно сделать движения на кнопки WASD - Turbo Pascal

Не могу сделать движение Линзы на кнопки WASD помогите пожалуйста!




Код:

Uses CRT; 

Const vx0 = 3; 
vy0 = 2; 
v0 = vx0; 
r0 = 30; 
r02 = (r0-v0)*(r0-v0); 
d = r02 * 10 div 10; 
Type ScreenType = Array[0..199,0..319] of Byte; 
DispType = Array[-r0..r0,-r0..r0] of Integer; 

Var 

Screen : ScreenType Absolute $a000:$0000; 
Buffer1, Buffer2 : ^ScreenType; 
Disp : ^DispType; 
x,y,vx,vy,r2,c : LongInt; 
Procedure Move(Var A,B; Count: Word); 
assembler; 
asm 
push ds 
mov cx, Count 
les di, B 
lds si, A 
shr cx, 1 
jz @zero 
rep movsw 
@zero: pop ds 
end; 
BEGIN 

asm 
mov ax, $13 
int $10 
end; 

New(Buffer1); 
New(Buffer2); 
New(Disp); 

FillChar(Screen, SizeOf(Screen), 16); 
y:=30; 

repeat 

For x:=10 to 300 do Screen[y,x]:=6; 
Inc(y,10); 

until y>170; 

x:=10; 

repeat 

For y:=30 to 170 do Screen[y,x]:=6; 
Inc(x,10); 

until x>300; 

Move(Screen, Buffer1^, SizeOf(Screen)); 
Move(Buffer1^,Screen,64000); 

For y:=-r0 to r0 do 
For x:=-r0 to r0 do 
begin 

r2:=x*x+y*y; 
if r2>r02 then Disp^[y,x] := y*320+x 
else 
Disp^[y,x]:=(y*(r2+d)div(r02+d))*320+(x*(r2+d)div(r02+d)); 

end; 

x:=150; 
y:=100;
vx:=vx0; 
vy:=vy0; 
repeat 

asm 
mov ax, Integer(y) 
mov bx, 320 
imul bx 
add ax, Integer(x) 
mov di, ax 
mov dx, -r0*320-r0 
les si, Disp 
mov ch, 2*r0+1 
@next_dy: mov cl, 2*r0+1 
@next_dx: 
mov es, Word(Disp+2) 
mov bx, es:[si] 
mov es, Word(Buffer1+2) 
mov al, es:[di+bx] 
mov bx, Seg(Screen) 
mov es, bx 
mov bx, dx 
mov es:[di+bx], al 
add si, 2 
inc dx 
dec cl 
jnz @next_dx 
add dx, 320-(2*r0+1) 
dec ch 
jnz @next_dy 
end; 

if ((x+vx)>=r0)and ((x+vx)<=305-r0)then Inc(x, vx) 
else vx:=-vx; 

if ((y+vy)>=r0)and ((y+vy)<=170-r0)then Inc(y,vy) 
else vy:=-vy; 
Delay(2450); 
until Port[$60]=$01; 

Dispose(Buffer1); 
Dispose(Buffer2); 
Dispose(Disp); 

asm 
mov ax, $03 
int $10 
end; 

END.

MOdusss вне форума   Ответить с цитированием
Ответ



Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Turbo Pascal]Напишите программу движения круга по горизонтали , по вертикали, по периметру экрана как по часовой, так и против часовой стрелки. temar Помощь студентам 0 21.12.2016 23:01
Не могу найти ошибку. Нужно в Turbo Pascal Vitlii Assembler 7 07.11.2014 12:20
Одномерный массив, сделать в turbo pascal lubov_morkov Помощь студентам 19 28.10.2010 22:52
Нужно сделать две кнопки. Кто сможет? Zombie47 Помощь студентам 5 24.08.2010 00:20
нужно перевести программу из Turbo Pascal в Delphi Insensible Doll Помощь студентам 3 27.05.2010 13:41




04:56.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Покупайте на сайте www.skinon.ru уникальные чехлы и наклейки для телефонов.
купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru