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

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

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

> Игровая программа, таймер и генерация звука
Rocket
сообщение 9.03.2009 22:56
Сообщение #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 
 К началу страницы 
+ Ответить 

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


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

 

- Текстовая версия 26.07.2025 8:28
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"