Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите!

62K
15 мая 2011 года
mdh-person
3 / / 30.09.2010
Доброго времени суток! Помогите пожалуйста... Нужно, чтобы змейка не умирала, когда доходит до пределов экрана, и чтоб она не выходила за пределы экрана...

Вот код программы:
Код:
.model tiny, pascal
.code
.386
org 100h
LOCALS

chain struc ; структура для хранения
 x dw ? ; каждого звена змейки
 y dw ?
 c dw ?
chain ends
struct_size equ 6 ; размер структуры

begin:

 mov ax, 03h ; запись секторов накопителя
 int 10h
@00:
 mov ah, 09h ; вывод меню на экран
 lea dx, menu
 int 21h

 mov ah, 1 ; ввод с клавиатуры с отображением на экране
 int 21h

 cmp al, '1'
 jz @1
 cmp al, '2'
 jz @0
 cmp al, '3'
 jz @3
 jmp @0
@1:
 mov ah, 9
 lea dx, about
 int 21h
 jmp @00
@3:
 ret

@0:
 call InitDelay ; инициализация задержки
 call Randomize ; инициализируем генератор псевдослуч. чисел

 ; устанавливаем видеорежим
 mov ax, 0013h ; видеорежим VGA 320x200 256 цветов
 INT 10h

 call randcolor ; генерируем цвет для 1-го DAC регистра

 ; устанавливаем змейку в начальное положение
 mov ax, zmeika[0].x
 mov cx, zmeika[0].y
 mov dx, zmeika[0].c
 xor bx,bx

@@init_zmeika: ; цикл инициализации змейки
 add bx, struct_size
 add ax, rect_size + 1
 mov zmeika[bx].x, ax ; координата x звена
 mov zmeika[bx].y, cx ; координата у у всех звеньев одинаковая
 mov zmeika[bx].c, dx ; все звенья одинаковым цветом
 cmp bx, len ; цикл продолжается пока не закончатся звенья
 jl @@init_zmeika

 ; очищаем экран
 mov al, 0 ; цвет фона (чёрный)
 call CLR

 ; рисуем змейку
 call DrawZmeika

 ; генерим бонус
 call GenBonus
 ; рисуем бонус квадрат
 push bonus.x ; координата x
 push bonus.y ; координата у
 push bonus.c ; цвет
 call FillRect

 ; для начала ждём нажатия клавиши
 mov ah, 00h
 int 16h

@@main_loop:

 mov ah, 01h ; проверяем нажатие клавиши
 int 16h
 jz @@skip ; если никакая клавиша не была нажата то переходим на @@skip
 mov ah, 00h ; получаем значение нажатой клавиши
 int 16h
 cmp ah,2dh ; если нажаты Alt+x
 je @@exit ; то выход

 cmp ah, 4bh ; если не нажата left
 jne @@check_right ; переходим на проверку right
 cmp direction, 1 ; если змейка движется вправо
 je @@move_right ; то игнорируем нажатие влево
@@move_left:
 mov direction, -1 ; устанавливаем направление движения влево
 jmp @@skip
@@check_right:
 cmp ah, 4dh ; если не нажата right
 jne @@check_up ; переходим на проверку up
 cmp direction, -1 ; если змейка движется влево
 je @@move_left ; то игнорируем нажатие вправо
@@move_right:
 mov direction, 1 ; устанавливаем направление движения вправо
 jmp @@skip
@@check_up:
 cmp ah, 48h ; если не нажата up
 jne @@check_down ; переходим на проверку down
 cmp direction, 2 ; если змейка движется вниз
 je @@move_down ; то игнорируем нажатие вверх
@@move_up:
 mov direction, -2 ; устанавливаем напрвление движения вверх
 jmp @@skip
@@check_down:
 cmp ah, 50h ; если не нажата down
 jne @@skip ; переходим на отрисовку змейки
 cmp direction, -2 ; если змейка движется вверх
 je @@move_up ; то игнорируем нажатие вниз
@@move_down:
 mov direction, 2 ; устанавливаем направление движения вниз
@@skip:
 call MoveZmeika ; процедура движения змейки


 call CheckDeath ; проверяем выход за границы экрана
 jc @@exit ; если вышла то завершение программы


 call CheckBonus ; проверяем бонус
 jnc @@no_bonus ; если не наехали на бонус то переходим дальше
 call randcolor ; изменяем цвет
 add len, struct_size ; увеличиваем змейку на одно звено
 call GenBonus ; генерим новый бонус
 push bonus.x ; х бонуса
 push bonus.y ; у
 push bonus.c ; цвет
 call FillRect ; рисуем новый бонус

 mov eax, speed ; увеличиваем скорость движения
 sub
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог