Форум программистов, компьютерный форум, киберфорум
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 49

Как сделать чтобы фигурка двигалась?

26.05.2018, 10:59. Показов 1376. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как сделать чтобы фигурка двигалась?
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
.386 
.model stdcall, flat 
option casemap:none 
 
includelib \masm32\lib\kernel32.lib 
include \masm32\include\kernel32.inc 
includelib \masm32\lib\user32.lib 
include \masm32\include\user32.inc 
include \masm32\include\windows.inc 
include \masm32\include\gdi32.inc 
includelib \masm32\lib\gdi32.lib 
.data 
 
hwnd dd 0 
hInst dd 0 
szTitleName db 'Человечек', 0 
szClassName db 'Приложение Win32', 0 
msg MONMSGSTRUCT <?> 
wc WNDCLASS <?> 
ps PAINTSTRUCT <?> 
 
.code 
 
Main PROC 
invoke GetModuleHandle, 0 ;получение значения баз. адреса, 
mov hInst, eax ;по которому загружен модуль. 
mov wc.style, CS_HREDRAW + CS_VREDRAW + CS_GLOBALCLASS 
mov wc.lpfnWndProc, offset WndProc ;адрес оконной процедуры 
mov wc.cbClsExtra, 0 
mov wc.cbWndExtra, 0 
mov eax, hInst ;дескриптор приложения 
mov wc.hInstance, eax ;в поле hInstance 
invoke LoadIcon, 0, IDI_APPLICATION 
mov wc.hIcon, eax ;дескриптор значка в поле hIcon 
invoke LoadCursorA, 0, IDC_ARROW 
mov wc.hCursor, eax ;дескриптор курсора в поле hCursor 
mov wc.hbrBackground, WHITE_BRUSH ;цвет бекграунда окна белый 
mov dword ptr wc.lpszMenuName, 0 ;главного меню нет 
mov dword ptr wc.lpszClassName, offset szClassName ;имя класса окна 
invoke RegisterClassA, offset wc ;регистрация класас окна 
invoke CreateWindowEx, 0, offset szClassName, offset szTitleName, \ 
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, \ 
CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, hInst, 0 
mov hwnd, eax ;создание окна 
invoke ShowWindow, hwnd, SW_SHOWNORMAL ;показ окна 
invoke UpdateWindow, hwnd ;перерисовывка содержимого окна 
cycle1: ;цикл сообщений 
invoke GetMessage, offset msg, 0, 0, 0 
cmp ax, 0 
je end_c 
invoke TranslateMessage, offset msg ;трансляция ввода с клавиатуры 
invoke DispatchMessage, offset msg ;отправляем сообщение 
;оконной процедуре 
jmp cycle1 
end_c: 
invoke ExitProcess, 0 ;выход из приложения 
Main ENDP 
 
WndProc PROC USES ebx edi esi, _hwnd: DWORD, _wmsg: DWORD, _wparam: DWORD, _lparam: DWORD 
local _hdc: DWORD 
cmp _wmsg, WM_DESTROY 
je wmdestroy 
cmp _wmsg, WM_PAINT 
je wmpaint 
invoke DefWindowProcA, _hwnd, _wmsg, _wparam, _lparam ;обраб. по умолчанию 
jmp exit_proc 
wmpaint: 
invoke BeginPaint, _hwnd, offset ps ;получаем контекст устройства 
mov _hdc, eax 
invoke Rectangle, _hdc, 170, 120, 310, 260 ;тело 
invoke Rectangle, _hdc, 120, 120, 170, 140 ;левая лапа 
invoke Rectangle, _hdc, 310, 120, 360, 140 ;правая лапа 
invoke Rectangle, _hdc, 170, 260, 190, 310 ;левая ноголапа 
invoke Rectangle, _hdc, 290, 260, 310, 310 ;правая ноголапа 
invoke Rectangle, _hdc, 210, 80, 270, 120 ;башка 
invoke Rectangle, _hdc, 220, 85, 225, 90 ;левый глаз 
invoke Rectangle, _hdc, 250, 85, 255, 90 ;правый глаз 
invoke Rectangle, _hdc, 225, 105, 255, 120 ;рот 
invoke EndPaint, _hdc, offset ps ;освобождаем контекст 
mov eax, 0 ;возвращаемое значение - 0 
jmp exit_proc 
wmdestroy: 
invoke PostQuitMessage, 0 ;послать сообщение WM_QUIT 
mov eax, 0 ;возвращаемое значение - 0 
exit_proc: 
ret 
WndProc ENDP 
END Main
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.05.2018, 10:59
Ответы с готовыми решениями:

Как сделать так чтобы страничка при увеличения разрешения не двигалась в разные стороны, и как сделать чтобы при открытии в опере и в других браузерах
все обьекты на странице не двигались в разные стороны???

Как сделать чтобы, строка на панели двигалась?
&lt;html&gt; &lt;head&gt; &lt;script language=&quot;JavaScript&quot;&gt; &lt;!-- hide function statbar(txt) { window.status = txt; } //...

Анимация. Как сделать, чтобы окружность двигалась по синусоиде?
Создать программу, показывающую движение окружности по синусоиде. Добавлено через 2 минуты Исходный код. При отладке программы,...

6
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8655 / 4490 / 1669
Регистрация: 01.02.2015
Сообщений: 13,898
Записей в блоге: 12
26.05.2018, 19:31
Пересчитайте координаты в относительные.
1
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 49
30.05.2018, 17:00  [ТС]
а как этот фрагмент кода доделать и вставить в главную программу чтобы при нажатии пробела или энтра рисунок появилась в другом месте?
;-----------
Пробел и энтер он движется
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
;------------
X_Start dd 0
Y_Start dd 0
X_End dd 50
Y_End dd 50
key WPARAM 20h
;------------
.elseif uMsg==WM_PAINT
invoke BeginPaint,hWnd,addr ps
mov hdc,eax
invoke Rectangle,hdc,X_Start,Y_Start,X_End,Y_End
invoke EndPaint,hWnd, ADDR ps
.elseif uMsg==WM_CHAR
push wParam
pop key
cmp key,20h
je XXX
cmp key,0Dh
je YYY
XXX:
add X_Start,10
add X_End,10
invoke InvalidateRect, hWnd,NULL,TRUE
jmp go
YYY:
add Y_Start,10
add Y_End,10
invoke InvalidateRect, hWnd,NULL,TRUE
go:
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8655 / 4490 / 1669
Регистрация: 01.02.2015
Сообщений: 13,898
Записей в блоге: 12
30.05.2018, 17:04
Обычно, ещё раз рисуют тот же рисунок, но цветом фона. Или можно прямоугольник на всю фигуру.
А потом в новом месте снова рисуется фигура.
1
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 49
09.06.2018, 10:48  [ТС]
Нужно доделать эту программу так чтобы фигурка двигалась вверх, вниз, вправо и влево и не оставляла за собой след, помогите пожалуйста
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
.386 
.model stdcall, flat 
option casemap:none 
 
includelib \masm32\lib\kernel32.lib 
include \masm32\include\kernel32.inc 
includelib \masm32\lib\user32.lib 
include \masm32\include\user32.inc 
include \masm32\include\windows.inc 
include \masm32\include\gdi32.inc 
includelib \masm32\lib\gdi32.lib 
.data 
;тіло
 X_Start dd 185
Y_Start dd 120
X_End dd 295
Y_End dd 260
;ліва рука
 X1_Start dd 120
Y1_Start dd 120
X1_End dd 185
Y1_End dd 140
;права рука
 X2_Start dd 295
Y2_Start dd 120
X2_End dd 360
Y2_End dd 140
;ліва нога 
 X3_Start dd 185
Y3_Start dd 260
X3_End dd 200
Y3_End dd 295
;права нога
 X4_Start dd 280
Y4_Start dd 260
X4_End dd 295
Y4_End dd 295
;голова 
 X5_Start dd 210
Y5_Start dd 80
X5_End dd 270
Y5_End dd 120
;лівий глаз
 X6_Start dd 220
Y6_Start dd 85
X6_End dd 225
Y6_End dd 90
;правий глаз
 X7_Start dd 255
Y7_Start dd 85
X7_End dd 260
Y7_End dd 90
;рот
 X8_Start dd 225
Y8_Start dd 105
X8_End dd 250
Y8_End dd 120
 
key WPARAM 20h
hwnd dd 0 
hInst dd 0 
szTitleName db 'Chelovek', 0 
szClassName db 'Приложение Win32', 0 
msg MONMSGSTRUCT <?> 
wc WNDCLASS <?> 
ps PAINTSTRUCT <?> 
 
.code 
Main PROC 
invoke GetModuleHandle, 0 ;отримання значення баз. адреси, 
mov hInst, eax ;по якому завантажений модуль. 
mov wc.style, CS_HREDRAW + CS_VREDRAW + CS_GLOBALCLASS 
mov wc.lpfnWndProc, offset WndProc ; адреса віконної процедури 
mov wc.cbClsExtra, 0 
mov wc.cbWndExtra, 0 
mov eax, hInst ;дескриптор приложения 
mov wc.hInstance, eax ;в поле hInstance 
invoke LoadIcon, 0, IDI_APPLICATION 
mov wc.hIcon, eax ;дескриптор значка в поле hIcon 
invoke LoadCursorA, 0, IDC_ARROW 
mov wc.hCursor, eax ;дескриптор курсора в поле hCursor 
mov wc.hbrBackground, WHITE_BRUSH ;колір бекграунду вікна білий 
mov dword ptr wc.lpszMenuName, 0 ;головного меню немає 
mov dword ptr wc.lpszClassName, offset szClassName ;ім'я класу вікна 
invoke RegisterClassA, offset wc ;реєстрація класу вікна 
invoke CreateWindowEx, 0, offset szClassName, offset szTitleName, \ 
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, \ 
CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, hInst, 0 
mov hwnd, eax ;створення вікна 
invoke ShowWindow, hwnd, SW_SHOWNORMAL ;показ вікна 
invoke UpdateWindow, hwnd ;перерисовка вмісту вікна 
cycle1: ;цикл повідомлень 
invoke GetMessage, offset msg, 0, 0, 0 
cmp ax, 0 
je end_c 
invoke TranslateMessage, offset msg ;трансляція введення з клавіатури 
invoke DispatchMessage, offset msg ;відправляємо повідомлення віконній процедурі 
jmp cycle1 
end_c: 
invoke ExitProcess, 0 ;вихід з програми 
Main ENDP 
 
WndProc PROC USES ebx edi esi, _hwnd: DWORD, _wmsg: DWORD, _wparam: DWORD, _lparam: DWORD 
local _hdc: DWORD 
cmp _wmsg, WM_DESTROY 
je wmdestroy 
cmp _wmsg, WM_PAINT 
je wmpaint
cmp  _wmsg, WM_CHAR 
je char
 
invoke DefWindowProcA, _hwnd, _wmsg, _wparam, _lparam ;обраб. по умолчанию 
jmp exit_proc 
wmpaint: 
invoke BeginPaint, _hwnd, offset ps ;отримуємо контекст пристрою 
mov _hdc, eax 
invoke Rectangle, _hdc, X_Start, Y_Start, X_End, Y_End ;тіло 
invoke Rectangle, _hdc, X1_Start, Y1_Start, X1_End, Y1_End ;ліва рука 
invoke Rectangle, _hdc, X2_Start, Y2_Start, X2_End, Y2_End ;права рука 
invoke Rectangle, _hdc, X3_Start, Y3_Start, X3_End, Y3_End ;ліва нога 
invoke Rectangle, _hdc, X4_Start, Y4_Start, X4_End, Y4_End ;права нога 
invoke Rectangle, _hdc, X5_Start, Y5_Start, X5_End, Y5_End ;голова 
invoke Rectangle, _hdc, X6_Start, Y6_Start, X6_End, Y6_End ;лівий глаз 
invoke Rectangle, _hdc, X7_Start, Y7_Start, X7_End, Y7_End ;правий глаз 
invoke Rectangle, _hdc, X8_Start, Y8_Start, X8_End, Y8_End ;рот 
invoke EndPaint, _hdc, offset ps ;звільняємо контекст 
mov eax, 0 ;повертаюче значення - 0
jmp exit_proc 
char:
push _wparam
pop key
cmp key,D0h
je XXX
cmp key,CDh
je YYY
XXX:
add X_Start,10
add X_End,10
add X1_Start,10
add X1_End,10
add X2_Start,10
add X2_End,10
add X3_Start,10
add X3_End,10
add X4_Start,10
add X4_End,10
add X5_Start,10
add X5_End,10
add X6_Start,10
add X6_End,10
add X7_Start,10
add X7_End,10
add X8_Start,10
add X8_End,10
invoke InvalidateRect, _hwnd,NULL,TRUE
jmp exit_proc
YYY:
add Y_Start,10
add Y_End,10
add Y1_Start,10
add Y1_End,10
add Y2_Start,10
add Y2_End,10
add Y3_Start,10
add Y3_End,10
add Y4_Start,10
add Y4_End,10
add Y5_Start,10
add Y5_End,10
add Y6_Start,10
add Y6_End,10
add Y7_Start,10
add Y7_End,10
add Y8_Start,10
add Y8_End,10
invoke InvalidateRect, _hwnd,NULL,TRUE
jmp exit_proc
wmdestroy: 
invoke PostQuitMessage, 0 ;послати повідомлення WM_QUIT 
mov eax, 0 ;повертаюче значення - 0
exit_proc: 
ret 
WndProc ENDP 
 
END Main
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
09.06.2018, 10:59
vitalionchik,
пожалей глаза других форумчан, помещай фрагменты программ в тэги [АSМ] и [/АSМ]
чтобы фигурка двигалась - обрабатывают сообщение WM_TIMER и это раздел х64 тебе нужно в Win32
0
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6812 / 2052 / 238
Регистрация: 14.12.2014
Сообщений: 4,304
Записей в блоге: 12
09.06.2018, 21:04
Есть ещё timeSetEvent / timeKillEvent. Как раз для мультимедиа-программ. Гораздо более точный (до 1 мс).
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.06.2018, 21:04
Помогаю со студенческими работами здесь

Как сделать так чтобы картинка в pictureBox двигалась по форме?
я уже несколько вариантов пробовала, не работает....помогите пожалуйста...

Как сделать так, чтобы картинка от пункта А двигалась к пункту Б
Здравствуйте... Хочу тут давным давно создать монополию не большую. И вроде если механику можно продумать... То вот графический пла хз......

Как сделать так чтобы тележка двигалась после диагонального движения
как сделать так чтобы тележка двигалась после диагонального движения ВЛЕВО uses graphABC; var x,y,i:integer; begin ...

Как сделать, чтобы при наведении на пункт меню двигалась стрелка
Здравствуйте! Подскажите пожалуйста, как сделать такое меню, чтобы при нажатии на пункт меню двигалась стрелка и менялась картинка. ...

Как сделать, чтобы при передвижении по экрану одной формы за ней двигалась другая?
Как сделать, чтобы при передвижении по экрану одной формы за ней двигалась другая?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru