⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 paddleg.asm

📁 paddle game 源码 需要改动速度
💻 ASM
字号:
.model tiny ; MODEL TYPE
.stack ; STACK SEGMENT
.data ; DATA SEGMENT
		
instructions db " This is a Paddle Ball Game for two users ",13,10,13,10
	     db " The Left Paddle is 'q' for UP and 'a' for down",13,10
             db " The Right Paddle is 'p' for UP and 'l' for down",13,10
	     db "                                                ",13,10
             db " The Game Exits if you miss 9 times            $"

DTIME dw 00d0h
Score_text db " Score=   "

	             CharAddr	dw 0
		
                     CharColNo	db 20 ; For Char
                     Char		db " " ; For Char
                     CharRowNo	db 1 ; For Char

		     RPaddleTop	db 0  ; Top of Right Paddle
                     LpaddleTop	db 22 ; Top of Left Paddle		     
		     RCount		db 0   ; Right Player Score
                     LCount		db 0	 ; Left Player Score	     

		     Miss		db 0h	 ; Ball was Missed
		     Key		db 0h  ; Key pressed on keyboard


                     Xdir		db 0       ; 0 for right/1 for left 
                     Ydir		db 0       ; 0 for up/1 for down

                     color db 021h    ; variable 
 .code 
 ;===============================================================================
 START_MAIN: 
			mov ax,@data
			mov ds,ax

			call menu			

init:
		mov Miss,0	
		mov Key,0
		mov Xdir,0       ; 0 for right/1 for left
                mov Ydir,0       ; 0 for up/1 for down
                mov CharColNo,20 ; For Char
                mov CharRowNo,1 ; For Char


			xor al,al	
			mov ah,01h
			mov ch,20h
			mov cl,27h
			int 10h			;hide cursor

 do_again:
		     call draw_rpaddle
		     call draw_lpaddle
		     call draw_scores
                     call draw_char
                     call delay
                     call blank
                     call next_pos
		     call check_keypress
                     jmp do_again

missed:           
     		     sub DTIME,0Ah ; shorten delay / increase speed
		     add Color,10h

		     cmp Lcount,9
		     jnz checkrcount
		     jmp to_end
checkrcount:   cmp RCount,9
		     jnz init
     
to_end:	     mov ax,4C00h ; return to DOS <<<<<<<<< EXIT <<<<<
                     int 21h ; exit program
;===================================================================================================================
;===============================================
next_pos:
                     cmp Xdir,1
                     jz left
             right:  inc CharRowNo
                     cmp CharRowNo,24
                     jnz OK
                     mov Xdir,1
             left:   dec CharRowNo
                     cmp CharRowNo,0
                     jnz OK
                     mov Xdir,0
                     inc CharRowNo
             OK:
                     cmp Ydir,1
                     jz UP
             DOWN:   inc CharColNo
                     cmp CharColNo,79
                     jnz DONE
		     call check_rpaddle
		     cmp MISS,1
		     jz missed
                     mov Ydir,1
             UP:     dec CharCOlNo
                     
                     cmp CharColNo,0
                     jnz DONE
		     call check_lpaddle
		     cmp MISS,1
		     jnz on
		     jmp missed
on:
                     mov YDir,0
                     inc CharcolNo
                     inc CharcolNo
             DONE:
                     ret
;=================================
check_rpaddle:
	      push dx
	      mov Miss,0
	      mov dl,RPaddleTop
	      cmp CharRowNo,dl
	      jz notmiss
		inc dl
		cmp CharRowNo,dl
	      jz notmiss
		inc dl
		cmp CharRowNo,dl
	      jz notmiss
setmiss:	mov Miss,1
		inc LCount
		jmp rdone
notmiss:	mov Miss,0
rdone:		pop dx
		ret

;==================================
;=================================
check_lpaddle:
		push dx
		mov Miss,0
		mov dl, LpaddleTop
	      cmp CharRowNo,dl
	      jz notmiss
		inc dl
		cmp CharRowNo,dl
	      jz notmiss
		inc dl
		cmp CharRowNo,dl
	      jz notmissl
setmissl:	mov Miss,1
		inc Rcount
		jmp ldone
notmissl:	mov Miss,0
ldone:		pop dx
		ret

;==================================
Draw_Char:
                     push bp ax bx dx
		     
          	     mov dh,CharRowNo ; row to put string
                     mov dl,CharColNo ; column to put string


set_cursor:	     xor bh,bh
		     mov ah,02h
		     int 10h
		     	
		     

do_ball:   	     mov al,' '
                     mov ah,09h ; function 9 - write char
                     xor bh,bh ; video page 0
		     mov bl,Color
                     mov cx,1 ; repeat val
                     int 10h ; call BIOS service

		     
                     pop dx bx ax bp
		     
ret ; end proc
                      
;============== BlanK ===========

blank: ;blanks screen
                     push ax bx cx dx 
                     mov ah,2
                     mov bh,0
                     mov dx,0
                     int 10h
                     xor bh,bh
                     mov ah,8
                     int 10h
                     mov bl,bh
                     mov bh,ah
                     sub cx,cx
                     mov dx,184fh ;18h = 24 rows, 4f = 79 coulums
                     mov ax,0600h
                     int 10h
                     pop dx cx dx ax
ret
;=========== DELAY +++++++++
             delay:
             push cx
             mov cx,DTIME
             again: push cx
             mov cx,0FFFFh
             here: loop here
             pop cx
             loop again
             pop cx
ret
;===========================
draw_rpaddle:
		push ax bx cx dx si
	     	mov si,3h	

          	     mov dh,rpaddletop ; row to put string
                     mov dl,79         ; column to put string
 
next_rblock:	     xor bh,bh
		     mov ah,02h
		     int 10h
		     	
		     

    	 	     mov al,' '    ; block char
		 
                     mov ah,09h ; function 9 - write char
                     xor bh,bh ; video page 0
		     mov bl,Color
                     mov cx,1 ; repeat val
                     int 10h ; call BIOS service

		     ;inc dl
		     inc dh
		     dec si
		     jnz next_rblock

                     pop si dx cx bx ax 
ret
;-----------------------------------------		
draw_lpaddle:
		push ax bx cx dx si
	     	mov si,3h	

          	     mov dh,lpaddletop ; row to put string
                     mov dl,0         ; column to put string
 
next_lblock:	     xor bh,bh
		     mov ah,02h
		     int 10h
		     	
		     

    	 	     mov al,' '    ; block char
		 
                     mov ah,09h ; function 9 - write char
                     xor bh,bh ; video page 0
		     mov bl,Color
                     mov cx,1 ; repeat val
                     int 10h ; call BIOS service

		     ;inc dl
		     inc dh
		     dec si
		     jnz next_lblock

                     pop si dx cx bx ax 
ret
;_______________________________________

check_keypress:
		call read_key
isitq:		cmp key,'q'
		jnz isita
                dec LpaddleTop
		jmp done_key
isita:		cmp key,'a'
		jnz isitp
                inc LpaddleTop
		jmp done_key
isitp:		cmp key,'p'
		jnz isitl
                dec RpaddleTop
		jmp done_key
isitl:		cmp key,'l'
		jnz done_key
                inc RpaddleTop
done_key:
ret
;===============
read_key:
	push ax
	mov ah,1
	int 16h
	jz back
	mov ah,8
	int 21h
	mov key,al
	jmp kdone
back:	mov key,0	
kdone:	pop ax
ret
; ============================
menu:
	push ax bx cx dx
	mov dx, OFFSET instructions
	mov ah,9
	int 21h
	mov ah,7
	int 21h
	pop dx cx bx ax
ret

;============================
draw_scores:
		push ax bx cx dx si
	     	mov si,7h	

          	     mov dh,24 ; row to put string
                     mov dl,2         ; column to put string
 		     mov bx,OFFSET Score_text
		     mov cl,LCount
		     add cl,30h
		     mov [bx+7],cl		     
		     push bx

next_schar:          
		     xor bh,bh
		     mov ah,02h
		     int 10h
		     pop bx	
		     inc bx
		     push bx

    	 	     mov al,[bx]    ; block char
		 
                     mov ah,09h ; function 9 - write char
                     xor bh,bh ; video page 0
		     mov bl,Color
                     mov cx,1 ; repeat val
                     int 10h ; call BIOS service

		     inc dl
		     ;inc dh
		     dec si
		     jnz next_schar
		     pop bx

	     	mov si,7h	

          	     mov dh,24 ; row to put string
                     mov dl,69         ; column to put string
 		     mov bx,OFFSET Score_text
		     mov cl,RCount
		     add cl,30h  ; convert to ascii
		     mov [bx+7],cl		     
		     push bx

next_srchar:          
		     xor bh,bh
		     mov ah,02h
		     int 10h
		     pop bx	
		     inc bx
		     push bx

    	 	     mov al,[bx]    ; block char
		 
                     mov ah,09h ; function 9 - write char
                     xor bh,bh ; video page 0
		     mov bl,Color
                     mov cx,1 ; repeat val
                     int 10h ; call BIOS service

		     inc dl
		     ;inc dh
		     dec si
		     jnz next_srchar
		     pop bx

                     pop si dx cx bx ax 
ret

;======================== ====
;===============================
             end START_MAIN ; end prog

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -