[计算机]用16位汇编编写的弹球游戏.doc_第1页
[计算机]用16位汇编编写的弹球游戏.doc_第2页
[计算机]用16位汇编编写的弹球游戏.doc_第3页
[计算机]用16位汇编编写的弹球游戏.doc_第4页
[计算机]用16位汇编编写的弹球游戏.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

;ballgame jinjing 11002222 ready1 macro mov ch,0 mov cl,0 mov dh,80 mov dl,60 mov al,00001111b endm ready2 macro mov ch,15 mov cl,14 mov dh,55 mov dl,40 mov al,11011001b endm data segment bump_freqdw100,-1 bump_timedw15 hit_freqdw200,300,400,500,600,700,800,-1 hit_timedw3,3,3,3,3,3,3 x dw ? bytes db ? count_8 db 8 speed dw ? move_mode_x dw 2 move_mode_y dw -2 same db ? start_col db ? BALL_X dw 320 ;Present x coordilnate BALL_Y dw 380 ;Present y coordinate db 16 ;Horizontal rows in block db 2 ;Number of bytes per row ;Symbol encoding of ball symbol DB 0FH,0F0H,1FH,0F8H,3FH,0FCH,7FH,0FEH DB 16 DUP(0FFH) DB 7FH,0FEH,3FH,0FCH,1FH,0F8H,0FH,0F0H DW 0000H ;COLOR ENCODING OF BALL SYMBOL BALLCOL DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DB 0,0,0,0,8 DUP(0CH),0,0,0,0 DB 0,0,0,10 DUP(0CH),0,0,0 DB 0,0,12 DUP(0CH),0,0 DB 0,14 DUP(0CH),0 DB 0,14 DUP(0CH),0 DB 0,14 DUP(0CH),0 DB 0,14 DUP(0CH),0 DB 0,11 DUP(0CH),0FFH,0CH,0CH,0 DB 0,10 DUP(0CH),0FFH,0CH,0CH,0CH,0 DB 0,9 DUP(0CH),0FFH,0CH,0CH,0FFH,0CH,0 DB 0,11 DUP (0CH),0FFH,0CH,0CH,0 DB 0,0,9 DUP(0CH),0FFH,0CH,0CH,0,0 DB 0,0,0,6 DUP(0CH),0FFH,0FFH,0CH,0CH,0,0,0 DB 0,0,0,0,8 DUP(0CH),0,0,0,0 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DW 0000H ;- ;- ;Block control area for board BOARD_X dw 300 ;Present x coordinate BOARD_Y dw 416 ;Present y coordinate db 16 ;Horizontal rows in block db 10 ;Number of bytes per row ;Symbol encoding of board symbol db 160 dup(0FFH) dw 0000 ;Color encoding of board symbol BOARD_COL db 80 dup(0EH) db 0EH,78 dup(06H),0EH ,0EH,78 dup(06H),0EH db 0EH,78 dup(06H),0EH ,0EH,78 dup(06H),0EH db 0EH,78 dup(06H),0EH ,0EH,78 dup(06H),0EH db 0EH,78 dup(06H),0EH ,0EH,78 dup(06H),0EH db 0EH,78 dup(06H),0EH ,0EH,78 dup(06H),0EH db 0EH,78 dup(06H),0EH ,0EH,78 dup(06H),0EH db 0EH,78 dup(06H),0EH ,0EH,78 dup(06H),0EH db 80 dup(0EH) dw 0000H ;- ;Instructions displayed on the top Instrc db 1 db 14 db 10001001B db Instructions :,0ffh db A. Choose a Level to start the game!,0ffh db B. Press to move board!,0ffh db C. Press to exit!,0ffh db D. You may link my web to update!,0ffh db E. jinjing 11002222 ,0ffh db 00h ;- ;Level information displayed on the left level db 10 db 1 db 10001010B db Select level:,0ffh db 20h,0ffh db easy :,0ffh db normal:,0ffh db hard :,0ffh db insane:,0ffh db 00h ;- passed db 15 db 27 db 10001111B db Great!You have passed this level!,0ffh db please select another level,0ffh db Press any key to continue!,0ffh db 00h ;- ;Information displayed on the middle OVER_MS db 15 db 29 db 10001110B db Y O U L O S E!,0ffh db ,0ffh db Press to replay ?,0ffh db 00h ;- ;Score displayed on the right Score db 12 db 38 db 00001010B db Score: SCO db 30H db 30H db 0FFH db 00H SCOR db 00H ;- ;Message displayed on the bottom of the screen about thew maker Producer db 20 db 2 db 10001010B db ,0ffh db ,0ffh db 00h ;- data ends stack segment stack db 100(?) stack ends code segment main proc far assume cs:code,ds:data,ss:stack start: push ds xor ax,ax push ax mov ax,data mov ds,ax mov ax,stack mov ss,ax mov ah,0 mov al,12h int 10h mov al,2 call writemode mov ax,0a000h mov es,ax mov ah,0 mov al,12h int 10h mov al,2 call writemode ready1 call guang_b ready2 call guang_b mov ch,69 mov cl,14 mov dh,2 mov dl,40 mov al,00101011b call guang_b mov ch,13 mov cl,14 mov dh,2 mov dl,40 mov al,00101011b call guang_b mov al,0 call writemode mov di,offset Instrc call graphics_text mov di,offset Producer call graphics_text mov di,offset Level call graphics_text mov ch,67 mov cl,14 mov dh,10 mov dl,40 mov al,00000000b ;call guang_b beg: mov al,0 call writemode mov sco,48 mov sco-1, lea di,Score call graphics_text mov scor,0 mov al,2 call writemode call data_xor call draw_board gamebeg: mov ah,07h int 21h s1: cmp al,49 jne s2 mov speed,35000 movbp,offset hit_time mov si,offset hit_freq callmusic jmp go_on s2: cmp al,50 jne s3 mov speed,25000 movbp,offset hit_time mov si,offset hit_freq callmusic jmp go_on s3: cmp al,51 jne s4 mov speed,18000 movbp,offset hit_time mov si,offset hit_freq callmusic jmp go_on s4: cmp al,52 jne quit mov speed,10000 movbp,offset hit_time mov si,offset hit_freq callmusic jmp go_on quit: cmp al,20h jne no jmp gameover no: jmp gamebeg go_on: call ballshow call pulloff mov ah,6 mov dl,0ffh int 21h cmp al,4bh jz board_left cmp al,4dh jz board_right cmp al,20h jz quit jmp ball_move board_left: call draw_board mov cx,board_x cmp cx,130 js no_left sub cx,10 mov board_x,cx no_left: call draw_board jmp ball_move board_right: call draw_board mov cx,board_x cmp cx,465 jns no_right add cx,10 mov board_x,cx no_right: call draw_board ball_move: call ballshow mov ax,BALL_X mov bx,BALL_Y cmp ax,120 js l_end cmp ax,533 jns r_end cmp bx,128 jns ready_1 mov ax,board_x sub ax,8 cmp ball_x,ax js over_bottom_1 mov ax,board_x add ax,72 cmp ball_x,ax jns over_bottom_1 CALL EDITSCORE mov ax,2 mov move_mode_y,ax callbump_music jmp xy_change r_end: mov ax,-2 mov move_mode_x,ax callbump_music jmp xy_change l_end: mov ax,2 mov move_mode_x,ax callbump_music jmp xy_change ready_1: cmp bx,400 js xy_change mov ax,board_x sub ax,8 cmp ball_x,ax js over_bottom_1 mov ax,board_x add ax,72 cmp ball_x,ax jns over_bottom_1 CALL EDITSCORE cmp scor,5h jb next2 call imp jmp repl over_bottom_1: jmp over_bottom_2 next2: mov ax,board_x cmp ball_x,ax js b_end_1 cmp ball_x,ax add ax,24 cmp ball_x,ax js b_end_2 cmp ball_x,ax add ax,40 cmp ball_x,ax js b_end_3 cmp ball_x,ax add ax,64 cmp ball_x,ax js b_end_2 jmp b_end_1 over_bottom_2: jmp over_bottom b_end_1: mov ax,-1 mov move_mode_y,ax callbump_music jmp xy_change b_end_2: mov ax,-2 mov move_mode_y,ax callbump_music jmp xy_change b_end_3: mov ax,-3 mov move_mode_y,ax xy_change: mov al,0 call writemode call data_xor next: mov al,2 call writemode call data_xor mov ax,ball_x add ax,move_mode_x mov ball_x,ax mov ax,ball_y add ax,move_mode_y mov ball_y,ax jmp go_on mov ax,ball_x add ax,move_mode_x mov ball_x,ax mov ax,ball_y add ax,move_mode_y mov ball_y,ax jmp go_on over_bottom: mov al,0 call writemode lea di,OVER_MS call graphics_text wait_here: mov ah,7 int 21h cmp al,82 jz Replay cmp al,114 jz Replay cmp al,20h jz gameover jmp wait_here Replay: mov al,0 call writemode call data_xor lea di,OVER_MS call graphics_text repl: mov al,2 call writemode call data_xor call draw_board mov ball_x,320 mov ball_y,380 mov board_x,280 mov board_y,416 jmp beg gameover: mov al,0 call writemode call data_normal mov al,3 mov ah,0 int 10h mov ax,4c00h int 21h ret main endp ;* imp proc near mov al,0 call writemode call data_xor lea di,passed call graphics_text mov ah,7 int 21h lea di,passed call graphics_text ret imp endp ;- EDITSCORE PROC NEAR MOV Al,SCOR CMP Al,99H JNB SHOWSCORE ADD Al,01H DAA MOV SCOR,Al SHOWSCORE: MOV AL,0 CALL writemode CALL DATA_XOR LEA DI,SCORE CALL GRAPHICS_TEXT MOV AL,SCOR MOV AH,AL MOV CL,4 SHR AH,CL OR AH,30H AND AL,0FH OR AL,30H MOV SCO,AH MOV SCO+1,AL LEA DI,SCORE CALL GRAPHICS_TEXT MOV AL,2 CALL writemode CALL DATA_XOR RET EDITSCORE ENDP ;- ;(cx)=count of 15.08us ;- waitf proc near push ax waitf1: in al,61h and al,10h cmp al,ah je waitf1 mov ah,al loop waitf1 pop ax ret waitf endp pulloff proc near mov cx,speed call waitf ret pulloff endp ;- ballshow proc near lea si,BALL_X lea bx,ballcol call VARI_PATTERN ret ballshow endp ;* ;- ;on entry: ; al=write mode requested ;- writemode PROC NEAR PUSH AX MOV DX,3CEH MOV AL,5 OUT DX,AL JMP SHORT $+2 MOV DX,3CFH POP AX OUT DX,AL JMP SHORT $+2 ;Set bit mask regster to default setting MOV DX, 3CEH MOV AL,8 OUT DX,AL JMP SHORT $+2 MOV DX, 3CFH MOV AL,0FFH OUT DX,AL JMP SHORT $+2 RET writemode ENDP ;* ;- ;Fill a screen area on a byte boundary base ;On entry: ; CH=pillar address of start point(range 0 to 79) ; CL=rank address of start point(range 0 to 59) ; DL=total ranks to fill(range 1 to 60) ; DH=total pillars to fill(range 1 to 80) ; AL=IRGB color to fill in area ;- guang_b PROC NEAR PUSH CX PUSH DX PUSH AX ; MOV AH,0FFH PUSH AX CALL COARSE_ADD ;Byte offset into video ROM is now set in BX ;Next set up column counter in CX and row counter in DX MOV CL, DH MOV CH, 0 PUSH CX ;Row counter=DL*8 MOV AX,DX MOV AH,0 MOV CL,8 MUL CL ;Set up outer counter in DX MOV DX,AX POP CX POP AX OUTER: PUSH CX PUSH BX INNER: CALL WRITE_PIX INC BX LOOP INNER ;Index to next column POP BX ADD BX,80 POP CX DEC DX JNZ OUTER ;Restore input register POP AX POP DX POP CX RET guang_b ENDP ;* ;- draw_board proc near mov board_y,112 lea si,BOARD_X lea bx,BOARD_COL call VARI_PATTERN mov board_y,416 lea si,BOARD_X lea bx,BOARD_COL call VARI_PATTERN ret draw_board endp ;* ;- ;VGA mode 12H device driver for wrti

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论