Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужна помощь с игрой, Нужно чтобы змейка не умирала 
:(
    Опции темы
maqsim
Дата 15.5.2011, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 15.5.2011

Репутация: нет
Всего: нет



Собственно нужно, чтобы змейка не умирала, когда доходит до пределов экрана, и чтоб она не выходила за пределы экрана... 
Помогите пожалуйста!

Вот код
Код

.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

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0363 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.