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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2016, 23:09   #1
MOdusss
Новичок
Джуниор
 
Регистрация: 28.12.2016
Сообщений: 1
По умолчанию Нужно сделать движения на кнопки 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 вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Turbo Pascal]Напишите программу движения круга по горизонтали , по вертикали, по периметру экрана как по часовой, так и против часовой стрелки. temar Помощь студентам 0 21.12.2016 22:01
Не могу найти ошибку. Нужно в Turbo Pascal Vitlii Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 07.11.2014 11: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