Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 2
1

TSR программа - подобие пинг-понга

25.02.2018, 22:52. Просмотров 1255. Ответов 3
Метки нет (Все метки)


Написать TSR-программу, реализующую следующую игру. Из случайного места в центре экрана вылетает шарик (буква О, можно все делать в псевдографике) и движется в случайном направлении. Шарик отражается от верхней, левой и правой границы экрана. Пользователь управляет ракеткой (несколько горизонтальных символов тире или равно, ширина ракетки задается при запуске программы). Если пользователь успел подставить ракетку, то шарик отражается по законам физики (угол падения = углу отражения), если пропустил, тог гол. Ракетка управляется стрелками влево, вправо. Скорость движения шарика задается в обработчике 1Ch. Обработка клавиш через 09h. TASM
Ракетка есть (@Catstail), также есть отдельный кусок полёта элемента на экране.
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
.MODEL Tiny
.CODE
ORG 100h
 
Start:
                jmp main
 
;организация данных перед кодом
    PtrS  dw 160*24
    Place db "                  "
    Attan db '==========='   
 
    i db 0
    k db 0
    s db 23
 
                ;отсюда начинается код программы
main:
 
    
; rnd1 proc
    ; push dx
    ; mov ax, Seed
    ; add ax, 7
    ; mov dx, 13
    ; mul dx
    ; mov Seed, ax
    ; pop dx 
    ; ret
; rnd1 endp
 
video:
     mov ah,06h ;ф-ция инициализации окна
     mov al,0 ;не прокручивать
     mov bh,70h ;бирюзовый фон
     mov ch,0 ;у-левый верхний
     mov cl,0 ;х-левый верхний
     mov dh,24 ;у-правый нижний
     mov dl,79 ;х-правый нижний
     int 10h
 
 
;------------------------------  
;begin-------------------------  
     mov ax,0B800h
     mov es,ax
@main:     
     call saveScr
     call PutStr
@Ink:
     xor  ax,ax
     int  16h
     cmp  al,27
     je   @Stop
     ; cmp  ah,48h
     ; je   @Up
     ; cmp  ah,50h
     ; je   @Down
     cmp  ah,4bh
     je   @Left
     cmp  ah,4dh
     je   @Right
     jmp  @Ink
@Up:
     call RestScr
     mov  ax,PtrS
     sub  ax,160
     jl   @main
     mov  PtrS,ax     
     jmp  @main
@Down:
     call RestScr
     mov  ax,PtrS
     add  ax,160
     cmp  ax,4000
     jg   @main
     mov  PtrS,ax     
     jmp  @main
@Left:
     call RestScr
     mov  ax,PtrS
     sub  ax,2
     mov  PtrS,ax     
     jmp  @main
@Right:
     call RestScr
     mov  ax,PtrS
     add  ax,2
     mov  PtrS,ax     
     jmp  @main
@Stop:
     int  20h          
     
SaveScr:
     push ax
     push cx
     push di
     push si
     mov  cx,18
     lea  si,Place
     mov  di,PtrS
@0:     
     mov  al,es:[di]
     mov  ds:[si],al
     inc  si
     inc  di
     loop @0      
     pop  si
     pop  di
     pop  cx
     pop  ax
     ret
     
RestScr:
     push ax
     push cx
     push di
     push si
     mov  cx,18
     lea  si,Place
     mov  di,PtrS
@1:     
     mov  al,ds:[si]
     mov  es:[di],al
     inc  si
     inc  di
     loop @1      
     pop  si
     pop  di
     pop  cx
     pop  ax
     ret
     
PutStr:  
     push ax
     push cx
     push di
     push si
     mov  cx,9
     lea  si,Attan
     mov  di,PtrS
@2:     
     mov  al,ds:[si]
     mov  es:[di],al
     inc  si
     inc  di
     mov  es:[di],byte ptr 3Eh
     inc  di
     loop @2      
     pop  si
     pop  di
     pop  cx
     pop  ax
     ret  
 
        ;эпилог
        int 20h            ; Выход
 
END     Start
Хромой "полёт" элемента
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
.MODEL Tiny
.CODE
ORG 100h
 
Start:
                jmp main
 
;организация данных перед кодом
 
    i db 0
    k db 0
    s db 23
 
                ;отсюда начинается код программы
main:
 
    
; rnd1 proc
    ; push dx
    ; mov ax, Seed
    ; add ax, 7
    ; mov dx, 13
    ; mul dx
    ; mov Seed, ax
    ; pop dx 
    ; ret
; rnd1 endp
 
video:
     mov ah,06h ;ф-ция инициализации окна
     mov al,0 ;не прокручивать
     mov bh,70h ;бирюзовый фон
     mov ch,0 ;у-левый верхний
     mov cl,0 ;х-левый верхний
     mov dh,24 ;у-правый нижний
     mov dl,79 ;х-правый нижний
     int 10h
 
 
 
;------------------------------
; ; Задаем начальный символ * с координатами (1.1)
    mov dh, 8
    mov dl, 8   ; 1-я строка , 1-й столбец.
    mov bh,0
    mov ah,2
    int 10h
    mov ah,9    ; вывод символа
    mov bh,0    ; видеостраница 0
    mov bl,00010111b    ; черным по белому
    mov al,'O'
    mov cx,1    ; Количество символов(в нашем случае 1)
    int 10h
 
 
 
; ; Цикл задержки
    mov bx,003ffh; Цикл задержки
    m100:
    mov cx,003ffh
    m200: 
    loop m200
    dec bx
    jnz m100 
 
 
; Стирает символ
    mov dh, dh
    mov dl, dl  ; 1-я строка , 1-й столбец.
    mov bh,0
    mov ah,2
    int 10h
    mov ah,9    ; вывод символа
    mov bh,0    ; видеостраница 0
    mov bl,01110111b    ; черным по белому
    mov al,' '
    mov cx,1    ; Количество символов(в нашем случае 1)
    int 10h
 
 
    m1:
    cmp dh,23
    jz m2
    m5:
    inc dh
    inc i
    cmp dl,79
    jz m3
    inc dl
    inc k
 
;Рисует символ
    mov dh, dh
    mov dl, dl  ; 1-я строка , 1-й столбец.
    mov bh,0
    mov ah,2
    int 10h
    mov ah,9    ; вывод символа
    mov bh,0    ; видеостраница 0
    mov bl,00010111b    ; черным по белому
    mov al,'O'
    mov cx,1    ; Количество символов(в нашем случае 1)
    int 10h
 
; Цикл задержки
    mov bx,003ffh; Цикл задержки
    m101:
    mov cx,003ffh
    m201: 
    loop m200
    dec bx
    jnz m100 
 
; Стирает символ
    mov dh, dh
    mov dl, dl  ; 1-я строка , 1-й столбец.
    mov bh,0
    mov ah,2
    int 10h
    mov ah,9    ; вывод символа
    mov bh,0    ; видеостраница 0
    mov bl,01000111b    ; черным по белому
    mov al,' '
    mov cx,1    ; Количество символов(в нашем случае 1)
    int 10h
 
    cmp k,78
    jz m4
    cmp i,22
    jnz m5
 
;Выход из программы, нажатием клавиши Esc
    mov ah,7
    int 21h
    cmp al,1bh ; сравнение полученного кода с кодом esc (при нажатии - выход из программы)
    je m99
 
    jmp m1
 
;mov ah,7
;int 21h 
    m2:
    m3:
    m4:
    m99:
    mov ah,4ch ; выход в NORTON
    int 21h
 
 
        ;эпилог
        int 20h            ; Выход
 
END     Start
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.02.2018, 22:52
Ответы с готовыми решениями:

Распечатать те TSR-программы, у которых не освобождена память Environment (TSR)
Здравствуйте! Мне необходимо написать такую программу: TSR -программа должна распечатывать те TSR...

TSR, которая записывает в файл журнал статистику обо всех удаленных файлах в процессе работы данной TSR программы
Всем привет! Возникла проблема с TSR программой. Не знаю даже с чего подступиться. Буду...

TSR программа
Помогите пожалуйста сделать прогу! TSR программма .При нажатии горячей клавиши появляется...

Игра на подобии пинг-понга
Необходима ваша помощь. Срочно очень! Нужно создать программу с использованием принципов ООП на...

__________________
Помогаю в написании студенческих работ здесь.
3
1576 / 809 / 146
Регистрация: 13.06.2015
Сообщений: 3,015
25.02.2018, 23:38 2
Цитата Сообщение от GazzaRhino Посмотреть сообщение
Написать
Писать нам за вас, или у вас есть какие-то вопросы по реализации?
1
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 2
26.02.2018, 00:01  [ТС] 3
Kukuxumushu, вопрос по "адаптации" кода к прерыванию 1Ch, потому что, насколько я понимаю - без него невозможно одновременное движение на экране и ракетки и шарика. Да и в задании требуется этот пункт.
0
1576 / 809 / 146
Регистрация: 13.06.2015
Сообщений: 3,015
26.02.2018, 00:06 4
Цитата Сообщение от GazzaRhino Посмотреть сообщение
"адаптации" кода к прерыванию 1Ch
В прерывании 1Ch должна происходить раскадровка, т.е. 1 кадр перемещения шарика с анализом его отскакивания или проваливания. Поскольку 1Ch вызывается 18,2 раза в секунду, скорость будет самое то. Только режим экрана надо 40x25 поставить, чтобы более-менее шарик был квадратный и двигался по более-менее адекватной траектории.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.02.2018, 00:06

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Робот для пинг- понга
В общем люблю настольный теннис. Чтоб доехать до спортзала нужно потратить час в одну сторону....

Просьба поправить код Пинг-понга
Сделал простенький пинг-понг для курсовой, но столкнулся с проблемой - не считает очки заработанные...

TSR программа
Здрасте,великие программисты. На асме я никто и нужен он мне лишь для написания работы вот такого...

TSR-программа, работающая с двумя меню
Здравствуйте, очень тяжело мне даётся ассемблер, почти ничего не понимаю, а понимать хочется. На...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.