写个dos弹球小动画

前段时间把汇编复习了一遍,心里感觉踏实多了。。。最近一直在看数电和数据结构,结果好像用眼过度了,老毛病又犯了,只能连着休息了两天,没敢用电脑。今天刚打开计算机也不知道干什么,就写个简陋的dos动画吧,纯属练练手。
一个碰到四壁会反弹的小球,纯dos下可以看到闪烁的效果,v86自然就木有闪烁了。其实进一步编写应该可以写出一个小游戏来,不(但)过(是)考(我)虑(是)的(个)东(水)西(平)就(很)比(次)较(的)多(渣)了(啊)。
下面是源码:

assume cs:code
data segment
data ends
code segment
start:
	mov ax,data
	mov ds,ax
	mov ax,0
	mov bx,1
	mov cx,1
	mov dh,5
	mov dl,12
	
	call boder
	
game:
	call display
	call delay
	call clear
	call cmprc
	
	add dh,bl
	add dl,cl
	jmp game
	
	mov ax,4c00h
	int 21h

cmprc:                                      ;判断小球是否到达边界
	push ax
	cmp dh,1
	jz s1
	cmp dh,23
	jz s1
	jmp k1
s1:	mov al,0
	sub al,bl
	mov bl,al
	
k1:	cmp dl,1
	jz s2
	cmp dl,78
	jz s2
	jmp k2
s2:	mov al,0
	sub al,cl
	mov cl,al
k2:	pop ax
	ret
display:
	push ax
	push bx
	push cx
	
	mov ah,2
	mov bh,0
	int 10h			
	mov ah,9
	mov al,2
	mov bl,84h
	mov bh,0
	mov cx,1
	int 10h

	pop cx
	pop bx
	pop ax
	ret
clear:
	push ax
	push bx
	push cx
			
	mov ah,9
	mov al,' '
	mov bl,7
	mov bh,0
	mov cx,1
	int 10h

	pop cx
	pop bx
	pop ax
	ret
delay:
	push ax
	push dx
	mov dx,500h
	mov ax,0
s:	sub ax,1
	sbb dx,0
	cmp ax,0
	jne s
	cmp dx,0
	jne s
	pop dx
	pop ax
	ret
boder:                              ;边界绘制
	push ax
	push bx
	push cx
	push dx
	mov dh,0
	mov dl,0
	mov cx,80
up:	
	mov ah,2
	mov bh,0
	int 10h			
	mov ah,9
	mov al,8
	mov bl,2
	mov bh,0
	push cx
	mov cx,1
	int 10h
	pop cx
	inc dl
	loop up
	
	mov dh,24
	mov dl,0
	mov cx,80
down:
	mov ah,2
	mov bh,0
	int 10h			
	mov ah,9
	mov al,8
	mov bl,2
	mov bh,0
	push cx
	mov cx,1
	int 10h
	pop cx
	inc dl
	loop down
	
	mov dh,0
	mov dl,0
	mov cx,25
left:
	mov ah,2
	mov bh,0
	int 10h			
	mov ah,9
	mov al,8
	mov bl,2
	mov bh,0
	push cx
	mov cx,1
	int 10h
	pop cx
	inc dh
	loop left
	
	mov dh,0
	mov dl,79
	mov cx,25
right:	
	mov ah,2
	mov bh,0
	int 10h			
	mov ah,9
	mov al,8
	mov bl,2
	mov bh,0
	push cx
	mov cx,1
	int 10h
	pop cx
	inc dh
	loop right
	
	pop dx
	pop cx
	pop bx
	pop ax
	ret
code ends
end start

下面附上exe程序:
ball
话说MIT的算法导论公开课不错,大二争取要在这方面有所进步啊,算法菜真是道硬伤。。

..2012.9.22
今天在win7下测试了一下这段代码,发现有时在快到边界时(还没到)就可能反弹,不知道什么原因,可能是代码问题,也可能是延时过短问题。。

2 thoughts on “写个dos弹球小动画

Comments are closed.