IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

> Игровая программа, таймер и генерация звука
сообщение
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Доброго времени суток, уважаемые форумчане! smile.gif Мне нужно написать программу, которая перед началом игры произвольно устанавливает невидимую на экране метку и видимый символ "*", который перемещается по экрану с помощью стрелок. При движении символа генерируются звуковые колебания, частота которых зависит от расстояния до невидимой метки. Если метка не найдена за 4 секунды, метка перемещается в другую точку.
Мне очень эта программа напоминает металлоискатель : )
Пока что я сделал только перемещение символа "*" с помощью букв w,s,a,d.

data segment

old_cs dw ?
old_ip dw ?

symbol db ?
Pressed db 1

x db ?
y db ?

sgn db '*'
atr db 10

data ends

code segment
assume cs: code, ds: data


new_1c proc far


push ax
push bx
push ds
push es


mov ax, data
mov ds, ax


mov ax, 40h
mov es, ax
mov ax, es:[1Ch]
mov bx, es:[1Ah]
cmp bx, ax
jne get_char


jmp go_out

get_char:
mov al, es:[bx]
mov es:[1Ch], bx
mov symbol, al
inc Pressed

go_out:
pop es
pop ds
pop bx
pop ax
iret
new_1c endp

start:
mov ax, data
mov ds, ax


mov ah, 35h
mov al, 1Ch
int 21h

mov old_ip, bx
mov old_cs, es


push ds
mov dx, offset new_1c
mov ax, seg new_1c
mov ds, ax
mov ah, 25h
mov al, 1Ch
int 21h
pop ds

mov ax, data
mov es, ax

mov x,14
mov y,40

main_loop:

cmp Pressed, 0
je m1


mov Pressed, 0
cmp symbol, 30h
je q

xor ax, ax
mov al, symbol


m1: cmp al, 'w'
jne m2
dec x
jmp met

m2: cmp al, 's'
jne m3
inc x
jmp met

m3: cmp al, 'a'
jne m4
dec y
jmp met

m4: cmp al, 'd'
jne main_loop
inc y



met: xor bh, bh
mov ah, 13h
mov al, 0d
mov dh, x
mov dl, y
lea bp, sgn
mov cx, 1
mov bl, atr
int 10h

jmp main_loop

q:

push ds

mov dx, old_ip
mov ax, old_cs
mov ds, ax
mov ah, 25h
mov al, 1Ch
int 21h
pop ds

mov ax, 4C00h
int 21h
code ends
end start


Не могу понять, почему "вверх" не срабатывает с первого раза? приходится повторно нажимать "w", в результате мы поднимаеся не на одну позицию, а на две...
И как сделать какую-нибудь очистку экрана? чтоб очищать консоль и на экран выводился только один символ "*" .
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Цитата
И как сделать какую-нибудь очистку экрана? чтоб очищать консоль и на экран выводился только один символ "*".
Функция 06h прерывания 10h (прокрутка окна вверх) - задаешь окно, равное всему экрану, и число строк для сдвига = 0 - окно прокручивается полностью, и очищается...

Цитата
Не могу понять, почему "вверх" не срабатывает с первого раза? приходится повторно нажимать "w", в результате мы поднимаеся не на одну позицию, а на две...
Твоя программа у меня только грузит процессор на 25% и больше ничего, ВООБЩЕ ни на что не реагирует, так что тебе еще повезло, что ты хоть КАК-ТО можешь двигать звездочку.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Цитата(volvo @ 9.03.2009 23:46) *

Функция 06h прерывания 10h (прокрутка окна вверх) - задаешь окно, равное всему экрану, и число строк для сдвига = 0 - окно прокручивается полностью, и очищается...

Твоя программа у меня только грузит процессор на 25% и больше ничего, ВООБЩЕ ни на что не реагирует, так что тебе еще повезло, что ты хоть КАК-ТО можешь двигать звездочку.


Так, вот добавил очистку экрана...и проблема с двойным "вверх" ушла сама собой) но мне не понятно почему она у Вас не работает...
Вот что у меня сейчас:

data segment

old_cs dw ?
old_ip dw ?

symbol db ?
Pressed db 1

x db ?
y db ?

sgn db '*'
atr db 10

data ends

code segment
assume cs: code, ds: data

clrscn proc

push ax
push bx
push ds
push es

mov cl, 0
mov ch, 0
mov dl, 80
mov dh, 25

xor ax,ax
mov al,0

xor bx, bx
mov bh, atr

int 10h

pop es
pop ds
pop bx
pop ax

ret

clrscn endp




new_1c proc far


push ax
push bx
push ds
push es


mov ax, data
mov ds, ax


mov ax, 40h
mov es, ax
mov ax, es:[1Ch]
mov bx, es:[1Ah]
cmp bx, ax
jne get_char


jmp go_out

get_char:
mov al, es:[bx]
mov es:[1Ch], bx
mov symbol, al
inc Pressed

go_out:
pop es
pop ds
pop bx
pop ax
iret
new_1c endp

start:
mov ax, data
mov ds, ax


mov ah, 35h
mov al, 1Ch
int 21h

mov old_ip, bx
mov old_cs, es


push ds
mov dx, offset new_1c
mov ax, seg new_1c
mov ds, ax
mov ah, 25h
mov al, 1Ch
int 21h
pop ds

mov ax, data
mov es, ax

mov x,14
mov y,40

main_loop:

;call clrscn

cmp Pressed, 0
je m1


mov Pressed, 0
cmp symbol, 30h
je q

xor ax, ax
mov al, symbol


m1: cmp al, 'w'
jne m2
dec x
jmp met

m2: cmp al, 's'
jne m3
inc x
jmp met

m3: cmp al, 'a'
jne m4
dec y
jmp met

m4: cmp al, 'd'
jne main_loop
inc y



met:
call clrscn
xor bh, bh
mov ah, 13h
mov al, 0d
mov dh, x
mov dl, y
lea bp, sgn
mov cx, 1
mov bl, atr
int 10h

jmp main_loop

q:

push ds

mov dx, old_ip
mov ax, old_cs
mov ds, ax
mov ah, 25h
mov al, 1Ch
int 21h
pop ds

mov ax, 4C00h
int 21h
code ends
end start



Вроде никаких хитростей нет, почему не запускается не понятно.
Просто сейчас начинается реально трудная вещь, которую я ума не приложу как делать, то есть генерация звука определённой частоты, которая зависит от расстояния до невидимой точки... как вообще эту точку произволно-то ставить? в ассеблере есть что-то вроде рандома?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Rocket   Игровая программа   10.03.2009 2:56
volvo   Функция 06h прерывания 10h (прокрутка окна вверх) …   10.03.2009 3:46
Rocket   Функция 06h прерывания 10h (прокрутка окна вверх)…   10.03.2009 4:33
andriano   1. Звук генерится посредством 53 таймера, причем е…   10.03.2009 12:31
TarasBer   2. х86 процессор не имеет аппаратных средств для …   10.03.2009 18:50
TarasBer   А турбо-паскальный рандом такой же. Я не нашёл мен…   10.03.2009 20:00
volvo   По поводу генерации звуков - когда-то 7in на одном…   11.03.2009 0:06
Rocket   По поводу генерации звуков - когда-то 7in на одно…   13.03.2009 1:32
andriano   Использую эту процедуру в программе, динамик изда…   13.03.2009 1:52
Rocket   После долго перерыва возвращаюсь к выполнению этог…   15.05.2009 0:26
volvo   Как обычно: функция генерации случайного числа от …   15.05.2009 4:33
Rocket   Как обычно: функция генерации случайного числа от…   15.05.2009 19:49
Rocket   В интернете как-то мало материала по этой теме, та…   16.05.2009 4:13
Rocket   Что-то вопрос о random'е намертво забуксовал..…   19.05.2009 0:29
volvo   Ничего не забуксовало... Просто до ассемблера надо…   22.05.2009 16:16
volvo   Вероятно, в те моменты, когда звук не нужен, его н…   22.05.2009 18:44
Rocket   Вероятно, в те моменты, когда звук не нужен, его …   22.05.2009 19:36
volvo   Сомневаюсь... Какие ж варианты еще? А что не нрави…   22.05.2009 19:58
Rocket   Сомневаюсь... Какие ж варианты еще? А что не нрав…   22.05.2009 20:06
volvo   Очень просто... Вот тут есть пример практически то…   22.05.2009 20:23
Rocket   Очень просто... Вот тут есть пример практически т…   22.05.2009 20:43
volvo   Почему я? Кто привел тебе этот код, тот пускай и с…   22.05.2009 21:54
Rocket   Чтобы получить разные последовательности - занеси …   22.05.2009 22:38
Rocket   Почему я? Кто привел тебе этот код, тот пускай и …   23.05.2009 2:02
TarasBer   Почему я? Кто привел тебе этот код, тот пускай и …   23.05.2009 23:35
volvo   То есть, у тебя не отрабатывает вот это (переимено…   22.05.2009 23:05
Rocket   То есть, у тебя не отрабатывает вот это Спасибо…   23.05.2009 1:21
volvo   AL взять и использовать, вот и байт тебе...   23.05.2009 4:16


 Ответить  Открыть новую тему 
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 26.06.2024 11:04
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name