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

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

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

 
 Ответить  Открыть новую тему 
> Тушевание используя случайные чисела, Графическое
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 5

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


Привет спецам...
Еще одна лабораторка на носу blink.gif
В примере ниже я вывожу на екран в графическом режиме букву , белую на черном.
Нужно сделать так, чтобы эта буква затушевалась, но не просто по порядку, а с применением генерации случайных чисел (буква как бы рассыпается).
Подскажите пожалуйста возможный способ решения.
Заранее благодарен.
	.model	tiny
.code  
org 100h
start:
push ax
mov ax, 0013h
int 10h
pop ax
mov si, 0
mov bx, offset kord

ciklas:
mov cx,[bx+si]
mov dx,[bx+si+2]
mov al, 00000111b
mov ah, 0Ch
int 10h
add si,4
cmp si, 604
jne ciklas

mov ah, 08h
int 21h
cmp al, 32
jne quit

quit: mov ax, 0003h
int 10h
ret

kord dw 50,50,51,50,52,50,53,50,  59,50,60,50,61,50,62,50
dw 50,51,51,51,52,51,53,51,  59,51,60,51,61,51,62,51
dw 50,52,51,52,52,52,53,52,  59,52,60,52,61,52,62,52
dw 50,53,51,53,52,53,53,53,  59,53,60,53,61,53,62,53
dw  50,54,51,54,52,54,53,54,  59,54,60,54,61,54,62,54
dw 50,55,51,55,52,55,53,55,  59,55,60,55,61,55,62,55
dw 50,56,51,56,52,56,53,56,  59,56,60,56,61,56,62,56
dw 50,57,51,57,52,57,53,57,  59,57,60,57,61,57,62,57
dw 50,58,51,58,52,58,53,58,  59,58,60,58,61,58,62,58
dw 50,59,51,59,52,59,53,59,  59,59,60,59,61,59,62,59
dw 50,60,51,60,52,60,53,60,  59,60,60,60,61,60,62,60
dw 50,61,51,61,52,61,53,61,  59,61,60,61,61,61,62,61
dw 50,62,51,62,52,62,53,62,  59,62,60,62,61,62,62,62
dw 50,63,51,63,52,63,53,63,  59,63,60,63,61,63,62,63
dw 50,64,51,64,52,64,53,64,  59,64,60,64,61,64,62,64
dw       51,65,52,65,53,65,  59,65,60,65,61,65
dw      52,66,53,66,54,66,55,66,56,66,57,66,58,66,59,66,60,66
dw      52,67,53,67,54,67,55,67,56,67,57,67,58,67,59,67,60,67
dw     53,68,54,68,55,68,56,68,57,68,58,68,59,68
end start
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 775
Пол: Мужской

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


Привет!

А понятие "затушевалась" - это вроде как не одно и тоже, что рассыпалась?
Тебе, собственно, нужен код генерации псевдослучайного числа?
Тут стоит прикинуть от чего символ (кстати лучше их не описывать, а взять готовые из ПЗУ, или таблиц русификатора) будет рассыпаться. От удара справа, слева, сверху и все такое. Типа как вулканчик??

1) O O
O O
O O
OOO

Примерный вид символа "U"


2) По порядку (в смысле по рядам с любой стороны) вроде как нельзя?
Дык тогда самая простая реализация - это все символы разлетаются в стороны, типа как от удара в центр, по диагонали и вертикали. Начиная от крайних??

Немножко сумбурно... ;)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Знаток
****

Группа: Пользователи
Сообщений: 419
Пол: Мужской

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


Андрей
может тебе надо чтоб она постепенно расплывалась?
тогда для случайных точек около буквы бери сумму её цвета и цветов 8 окружающих её точек и дели сумму на 9.-- это новый цвет для точки.
И так пока не надоестsmile.gif


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Lonely_Raven
****

Группа: Пользователи
Сообщений: 640
Пол: Мужской

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


я так понял нкжно что бы буква строилась по пикселам
причем положение пиксела в букве выбиралось случайно
--------
если это так построй матрицу и выбирай случайное в ней положение


--------------------
Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы.
МЕРФИ
---------------------
RTFM - Read the fucking manual
---------------------
http://www.livejournal.com/users/lonley_raven/
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 5

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


Извините, плохо объяснил, что мне надо...
В том куске программы я вывожу на экран символ "U" по-пиксельно беря координаты из матрицы. Символ будет - белым по черному.
Надо сделать так, чтобы этот символ исчез (затушевался черным по черному), но не по порядку (слева-направо сверху-вниз), а в случайном порядке.
Я в Assemblerе новичок, потому большая просьба, если не трудно, дайте пожалуйста пример программы.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Профи
****

Группа: Пользователи
Сообщений: 775
Пол: Мужской

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


В смысле прогу что-ли за тебя написать?? blink.gif angry.gif

Вот держи лучше кусок кода для генерации псевдослучайных чисел:

Для начала нужны 2 переменных, для сохр-ия предыдущего значения:
типа:

Rand1 dw 20h
Rand2 dw 1024h

Привязка к текущему значению таймера, обычно оформляется отдельной процедурой:
   mov ah,2Ch
  int 21h
  mov Rand1,ax
  mov Rand2,dx


И собственно сама генерация:
Диапазон выбора задается через стек, т.е. положил 2048, то выбор случайного числа из диапазона: 0..2048. А возврат в AX.

   mov     ax,Rand1
  mov     bx,Rand2
  mov     cx,ax
  mul     RandA      ; RandA - любое число, на твой вкус
  shl     cx,1
  shl     cx,1
  shl     cx,1
  add     ch,cl
  add     dx,cx
  add     dx,bx
  shl     bx,1
  shl     bx,1
  add     dx,bx
  add     dh,bl
  mov     cl,5
  shl     bx,cl
  add     dh,bl
  add     ax,1
  adc     dx,0
  mov     Rand1,ax
  mov     Rand2,dx
  mov     bx,sp                
  mov     cx,dx                
  mul     word ptr ss:[bx+4]    
  mov     ax,cx
  mov     cx,dx
  mul     word ptr ss:[bx+4]
  add     ax,cx
  adc     dx,0
  mov     ax,dx


Эта реализация целиком содрана из модуля CRT языка Паскаль. smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Lonely_Raven
****

Группа: Пользователи
Сообщений: 640
Пол: Мужской

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


ню тогда теперь если у тебя сохранены точки и их координаты
то можно случайно выбирать индекс точки в массиве и соответствеено ее закрашивать smile.gif а вместо индекса можно поробовать использовать память тобишь адрес rolleyes.gif :p2:
естественно нужно куча проверок не превысилось ли адресс самого массива
не появилось ли такоеже число т.е. на повтор

Сообщение отредактировано: Shadow -


--------------------
Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы.
МЕРФИ
---------------------
RTFM - Read the fucking manual
---------------------
http://www.livejournal.com/users/lonley_raven/
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8





Группа: Пользователи
Сообщений: 5

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


Ну вот, что то такое соорудил ;)
Большое всем спасибо за дельные советы :D
Публикую пример, может кому пригодится:

.model tiny
.code  
org 100h
start:
mov ax, 0013h
int 10h
mov si, 0
mov bx, offset kord

ciklas:
mov cx,[bx+si]
mov dx,[bx+si+2]
mov al, 00000111b
mov ah, 0Ch
int 10h
add si,4
cmp si, 604
jne ciklas

mov ah, 08h
int 21h
cmp al, 32
jne quit

mov si, 16000 ;ну приблезительно при таком значении полностью закрашивается почти всегда
ats:
push bx
push cx
push dx
; генератор случ. чисел с проверкой диапазона
rn1:                         ;координата столбца
xor ax,ax
out 43h,al
in al,40h
cmp al,64 ; число не менее
jl rn1
cmp al,78 ; число не более
jg rn1
mov byte ptr[rnd1],al

rn2:                         ;координата строки
xor ax,ax
out 43h,al
in al,40h
cmp al,102
jl rn2
cmp al,120
jg rn2
mov byte ptr[rnd2],al

pop dx
pop cx
pop bx

mov cx,rnd1
mov dx,rnd2
mov al, 00000000b
mov ah, 0Ch
int 10h
int 1Ah
dec si
jnz ats

mov ah, 01h
int 21h

quit: mov ax, 0003h
int 10h
ret

kord dw 50,50,51,50,52,50,53,50,  59,50,60,50,61,50,62,50
dw 50,51,51,51,52,51,53,51,  59,51,60,51,61,51,62,51
dw 50,52,51,52,52,52,53,52,  59,52,60,52,61,52,62,52
dw 50,53,51,53,52,53,53,53,  59,53,60,53,61,53,62,53
dw  50,54,51,54,52,54,53,54,  59,54,60,54,61,54,62,54
dw 50,55,51,55,52,55,53,55,  59,55,60,55,61,55,62,55
dw 50,56,51,56,52,56,53,56,  59,56,60,56,61,56,62,56
dw 50,57,51,57,52,57,53,57,  59,57,60,57,61,57,62,57
dw 50,58,51,58,52,58,53,58,  59,58,60,58,61,58,62,58
dw 50,59,51,59,52,59,53,59,  59,59,60,59,61,59,62,59
dw 50,60,51,60,52,60,53,60,  59,60,60,60,61,60,62,60
dw 50,61,51,61,52,61,53,61,  59,61,60,61,61,61,62,61
dw 50,62,51,62,52,62,53,62,  59,62,60,62,61,62,62,62
dw 50,63,51,63,52,63,53,63,  59,63,60,63,61,63,62,63
dw 50,64,51,64,52,64,53,64,  59,64,60,64,61,64,62,64
dw       51,65,52,65,53,65,  59,65,60,65,61,65
dw      52,66,53,66,54,66,55,66,56,66,57,66,58,66,59,66,60,66
dw      52,67,53,67,54,67,55,67,56,67,57,67,58,67,59,67,60,67
dw     53,68,54,68,55,68,56,68,57,68,58,68,59,68
rnd1 dw ?
rnd2 dw ?
end start
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Профи
****

Группа: Пользователи
Сообщений: 775
Пол: Мужской

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


У меня чой-то не работает...??
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Lonely_Raven
****

Группа: Пользователи
Сообщений: 640
Пол: Мужской

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


да к стати букву U вижу, а тушевание нет


--------------------
Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы.
МЕРФИ
---------------------
RTFM - Read the fucking manual
---------------------
http://www.livejournal.com/users/lonley_raven/
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Профи
****

Группа: Пользователи
Сообщений: 775
Пол: Мужской

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


наврал поди... ;)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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