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

📄 1.asm

📁 鼠标操作左右 空格暂停 esc退出 r重玩
💻 ASM
📖 第 1 页 / 共 5 页
字号:
DATAS SEGMENT
    ;此处输入数据段代码 
    ;这写变量是用来给setarea传递参数 
    qidianx dw 0
    qidiany dw 0
    zhongdianx dw 10
    zhongdiany dw 3
    color db 10
    racket_color db 0111b;球拍颜色
    frame_color db 0110b;边框颜色
    ball_color db 1110b;球的颜色
    brick_color1 db 15;易碎球的颜色
    brick_color2 db 10;普通球的颜色
    brick_color3 db 5;硬质球的颜色
    inmenu_color db 1110b;
    wave_brick_color db 70;飘动档板的颜色
    ;********************************
    exitflag dw 1;用来记录玩家时候要退出游戏,当为0时退出
    stopflag dw 0;用于记录暂停,如果是1则暂停
    replayflag dw 0;用于记录是否重新开局,1为有效
    propflag db -1;用来判断当前屏幕中是否有道具,如果没有则为-1,否则为相应的第0到n个道具
    speedflag dw 0;用来判断是否要加速,如果为1则为加速
    cmpgameflag db 0;用来记录游戏中的所有砖块是否打完,如果打完,则为1
    inmenuflag  db 1;这个变量只是在最开始进入画面用到,为了防止中断打断,因此init中不需要对它初始化,1为有效
    balldeadflag db 0;判断是不是小球的生命值都打完了,如果为1,那么就意味着小球死光光了
    barflag db 1;用于记录是第几关,一共有5关
    bomb_flag db 0;用于显示当接到bomb后的特效,当为0时说明没有特效
    ;*******************************
    ;一些要显示的字符
    brick_msg db 'BRICK$'
    mader_msg db 'MADE BY: Dou Fangyu$'
    play_msg db 'Press space to play!$'
    score_msg db 'Score:$'
    life_msg db 'Life:$'
    prop_msg db 'PROP$'
    none_msg db 'NULL     $'
    hint_msg1 db '   HINT$'
    hint_msg2 db '<Esc>:exit $'
    hint_msg3 db 'Space:pause$'
    hint_msg4 db '<R>: replay$'
    ;这些msg是用在道具的提示上的
    addlife_msg      db 'LIFE     $'
    addscore_msg     db 'SCORE    $'
    speed_up_msg     db 'SPEED UP $'
    speed_down_msg   db 'SPEEDDOWN$'
    large_racket_msg db 'L RACKET $'
    small_racket_msg db 'S RACKET $'
    bomb_msg         db 'BOMB     $'
    bigbomb_msg      db 'SUP BOMB $'
    
    stop_msg db 'Press space to continue!$'; 当暂停的时候要调用这个
    con_msg  db '                        $';继续玩的时候,将之前的那个字体给涂成黑色
    lose_msg db 'You lose!  Play again?(Y/N)$';当生命值为0时要用到这个msg
    con1_msg db '                            $';继续玩的时候,将之前的那个字体给涂成黑色
    
    congratulation_msg db 'Congratulation!!You win!!$'
    youscore_msg db 'Your score is: 181$'
    playagain_msg db 'Play next level?(Y/N)$'
    ;******************************
    ;要记录的数值
    wave_brick1 dw 15;第一个档板的最左边的位置
    wave_brick2 dw 170;第二个档板的最右边的位置
    wave_brick1_pos db 1;1为向右移动,记录第一个档板的运动方向
    wave_brick2_pos db 0;0为向左移动记录第二个档板的运动方向
    count db 0;这个变量是用来记录次数的
    bomb_count db 0;用于炸弹的特效
    life_num db 3;记录生命值
    score_num db 0;得分总和不能大于255
    mouse_last dw 80;用于记录上一次的的鼠标的位置,只记录x轴
    racket_width dw 30;用于记录球拍的宽度
    ballx dw 90;用来记录球的左上角的x周坐标
    bally dw 183;用来记录球的左上角的y周坐标
    brick_num dw 100;用来记录砖块的数量
    x dw 1;用于记录运动向量
    y dw -1;用于记录运动向量
    propx dw 0;这个变量是用来画道具时,储存道具的左上角的x轴信息
    propy dw 0;这个变量是用来画道具时,储存道具的左上角的y轴的信息
    prop_color db 10;这个是道具的颜色,它们的顺序与低下道具的顺序一一对应
               db 5
               db 9
               db 15
               db 33
               db 12
               db 1110b
               db 1110b
     bomb_color          db 1100b
    ;*******用来记录砖块的剩余生命值
    brick_life db 100 dup(?)
    brick_life_huanyuan1 db 2,2,2,2,2,2,2,2,2,2
               db 1,1,1,1,1,1,1,1,1,1
               db 1,1,1,4,4,4,4,1,1,1
               db 2,2,2,4,1,1,4,2,2,2
               db 4,4,4,4,1,1,4,4,4,4
               db 1,1,1,4,1,1,4,1,1,1
               db 1,1,1,1,1,1,1,1,1,1
               db 4,4,4,4,4,4,4,4,4,4
               db 2,1,2,1,2,1,2,1,2,1
               db 1,2,1,2,1,2,1,2,1,2
 brick_life_huanyuan2 db 2,2,2,2,2,2,2,2,2,2
                      db 1,1,1,1,1,1,1,1,1,1
                      db 4,4,4,4,4,4,4,4,4,4
                      db 2,2,2,4,1,1,4,2,2,2
                      db 1,1,1,4,1,1,4,1,1,1
                      db 2,2,2,4,1,1,4,2,2,2
                      db 1,1,1,1,1,1,1,1,1,1
                      db 4,4,4,4,4,4,4,4,4,4
                      db 2,1,2,1,2,1,2,1,2,1
                      db 1,2,1,2,1,2,1,2,1,2
                      
 brick_life_huanyuan3 db 2,2,2,2,2,2,2,2,2,2
                      db 2,2,2,2,2,2,2,2,2,2
                      db 4,4,4,4,4,4,4,4,4,4
                      db 2,2,2,4,1,1,4,2,2,2
                      db 1,1,1,4,1,1,4,1,1,1
                      db 2,2,2,4,1,1,4,2,2,2
                      db 2,2,2,2,2,2,2,2,2,2
                      db 4,4,4,4,4,4,4,4,4,4
                      db 2,1,2,1,2,1,2,1,2,1
                      db 1,2,1,2,1,2,1,2,1,2
                      
 brick_life_huanyuan4 db 4,4,4,4,4,4,4,4,4,4
                      db 2,2,2,2,2,2,2,2,2,2
                      db 4,4,4,4,4,4,4,4,4,4
                      db 2,2,2,4,1,1,4,2,2,2
                      db 1,1,1,4,1,1,4,1,1,1
                      db 2,2,2,4,1,1,4,2,2,2
                      db 2,2,2,2,2,2,2,2,2,2
                      db 4,4,4,4,4,4,4,4,4,4
                      db 2,2,2,2,2,2,2,2,2,2
                      db 2,1,2,2,2,2,2,2,1,2
                      
 brick_life_huanyuan5 db 4,4,4,4,4,4,4,4,4,4
                      db 2,2,2,2,2,2,2,2,2,2
                      db 4,4,4,4,4,4,4,4,4,4
                      db 2,2,2,4,2,2,4,2,2,2
                      db 1,1,1,4,2,2,4,1,1,1
                      db 2,2,2,4,2,2,4,2,2,2
                      db 4,4,4,4,2,2,4,4,4,4
                      db 4,4,4,4,4,4,4,4,4,4
                      db 2,2,2,2,2,2,2,2,2,2
                      db 2,1,2,2,2,2,2,2,1,2
    ;用来画道具和球;所有的道具都是10*10的
    ball db 0,0,0,1,1,1,1,0,0,0;这个是球
         db 0,1,1,1,1,1,1,1,1,0
         db 0,1,1,1,1,1,1,1,1,0
         db 1,1,1,1,1,1,1,1,1,1
         db 1,1,1,1,1,1,1,1,1,1
         db 1,1,1,1,1,1,1,1,1,1
         db 1,1,1,1,1,1,1,1,1,1
         db 0,1,1,1,1,1,1,1,1,0
         db 0,1,1,1,1,1,1,1,1,0
         db 0,0,0,1,1,1,1,0,0,0
    
add_life  db 0,0,1,0,0,0,0,1,0,0;增加生命的道具
          db 0,1,1,0,0,0,1,1,1,0
          db 1,1,1,1,0,0,1,1,1,1
          db 1,1,1,1,1,1,1,1,1,1
          db 1,1,1,1,1,1,1,1,1,1
          db 0,1,1,1,1,1,1,1,1,0
          db 0,1,1,1,1,1,1,1,1,0
          db 0,0,1,1,1,1,1,1,0,0
          db 0,0,0,1,1,1,1,0,0,0
          db 0,0,0,0,1,1,0,0,0,0
        
add_score db 0,0,0,0,1,1,0,0,0,0;增加分数的道具
          db 0,0,0,1,1,1,1,0,0,0
          db 0,0,1,1,1,1,1,1,0,0
          db 0,1,1,1,1,1,1,1,1,0
          db 1,1,1,1,1,1,1,1,1,1
          db 1,1,1,1,1,1,1,1,1,1
          db 0,1,1,1,1,1,1,1,1,0
          db 0,0,1,1,1,1,1,1,0,0
          db 0,0,0,1,1,1,1,0,0,0
          db 0,0,0,0,1,1,0,0,0,0
          
speed_up  db 0,0,1,0,0,0,0,1,0,0;加速的道具
          db 0,1,1,1,0,0,1,1,1,0
          db 1,1,1,1,1,1,1,1,1,1
          db 0,1,1,1,0,0,1,1,1,0
          db 0,0,1,0,0,0,0,1,0,0
          db 0,0,1,0,0,0,0,1,0,0
          db 0,1,1,1,0,0,1,1,1,0
          db 1,1,1,1,1,1,1,1,1,1
          db 0,1,1,1,0,0,1,1,1,0
          db 0,0,1,0,0,0,0,1,0,0
          
speed_down db 0,0,0,0,1,1,0,0,0,0;减速的道具
          db 0,0,1,1,1,1,1,1,0,0
          db 1,1,1,1,1,1,1,1,1,1
          db 0,0,1,1,1,1,1,1,0,0
          db 0,0,0,0,1,1,0,0,0,0
          db 0,0,0,0,1,1,0,0,0,0
          db 0,0,1,1,1,1,1,1,0,0
          db 1,1,1,1,1,1,1,1,1,1
          db 0,0,1,1,1,1,1,1,0,0
          db 0,0,0,0,1,1,0,0,0,0

lar_racket db 1,1,1,1,1,1,1,1,1,1;大球拍的道具
           db 1,1,1,1,1,1,1,1,1,1
           db 1,1,1,1,1,1,1,1,1,1
           db 0,0,0,0,0,0,0,0,0,0
           db 1,1,1,1,1,1,1,1,1,1
           db 1,1,1,1,1,1,1,1,1,1
           db 0,0,0,0,0,0,0,0,0,0
           db 1,1,1,1,1,1,1,1,1,1
           db 1,1,1,1,1,1,1,1,1,1
           db 1,1,1,1,1,1,1,1,1,1
           
sma_racket db 1,1,1,1,1,1,1,1,1,1;小球拍的道具
           db 1,1,1,1,1,1,1,1,1,1
           db 1,1,0,0,1,1,0,0,1,1
           db 1,0,1,1,0,0,1,1,0,1
           db 1,0,1,1,0,0,1,1,0,1
           db 1,0,1,1,0,0,1,1,0,1
           db 1,0,1,1,0,0,1,1,0,1
           db 1,0,1,1,0,0,1,1,0,1
           db 1,0,1,1,0,0,1,1,0,1
           db 1,1,1,1,1,1,1,1,1,1
           
bomb       db 0,0,0,0,0,0,0,1,1,1;炸弹的道具
           db 0,0,0,0,0,0,0,0,1,0
           db 0,0,1,1,1,1,0,0,1,0
           db 0,1,1,1,1,1,1,1,0,0
           db 0,1,1,1,1,1,1,1,0,0
           db 0,1,1,1,1,1,1,1,0,0
           db 0,1,1,1,1,1,1,1,0,0
           db 0,1,1,1,1,1,1,1,0,0
           db 0,0,1,1,1,1,1,0,0,0
           db 0,0,0,1,1,1,0,0,0,0

bigbomb       db 1,1,0,0,0,0,0,0,1,1;炸弹的道具
              db 1,1,1,0,0,0,0,1,1,1
              db 0,1,1,1,0,0,1,1,1,0
              db 0,0,1,1,1,1,1,1,0,0
              db 0,0,0,1,1,1,1,0,0,0
              db 0,0,0,1,1,1,1,1,0,0
              db 0,0,1,1,1,1,1,1,0,0
              db 0,1,1,1,0,0,1,1,1,0
              db 1,1,1,0,0,0,0,1,1,1
              db 1,1,0,0,0,0,0,0,1,1
              
showbomb      db 0,1,0,0,1,0,0,1,0,0;炸弹爆炸的样子
              db 0,0,1,0,1,0,1,0,0,1
              db 0,1,0,1,1,1,1,0,1,0
              db 1,0,1,1,0,0,1,1,0,0
              db 0,0,1,0,1,1,0,1,1,1
              db 1,1,1,0,1,1,0,1,0,0
              db 0,0,1,1,0,0,1,1,1,0
              db 0,1,0,1,1,1,1,0,0,1
              db 1,0,0,1,0,1,0,1,0,0
              db 0,0,1,0,0,1,0,0,1,0
           
xiaodou    db 0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1;made by xiaodou
           db 0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
           db 0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0
           db 0,0,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0
           db 0,1,1,0,1,1,0,1,1,0,0,0,0,0,1,1,0,0,0,0,1,1,0
           db 1,1,0,0,1,1,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0
           db 1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0
           db 0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0
           db 0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0
           db 0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1
           
zhizuo    db 0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0;zhizuo
           db 0,1,0,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0,1,1,0,0,0
           db 0,1,1,1,1,1,0,1,0,1,0,0,0,1,1,0,0,1,1,1,1,1,1
           db 1,0,0,1,0,0,0,1,0,1,0,0,0,1,1,0,1,1,1,0,0,0,0
           db 0,1,1,1,1,1,0,1,0,1,0,0,0,0,1,0,0,0,1,1,1,1,1
           db 0,0,0,1,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0
           db 0,1,1,1,1,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0
           db 0,1,0,1,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,1,1,1,1
           db 0,1,0,1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0
           db 0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0
MUS_FREG2 DW 330,392,330,294,330,392,330,294,330
          DW 330,392,330,294,262,294,330,392,294
          DW 262,262,220,196,196,220,262,294,332,262,-1
MUS_TIME2 DW 3 DUP(50),25,25,50,25,25,100
          DW 2 DUP(50,50,25,25),100
          DW 3 DUP(50,25,25),100
DATAS ENDS
STACKS SEGMENT
    ;此处输入堆栈段代码
    hh dw 100 dup(?)
STACKS ENDS
CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码 
    mov ax,0
    int 33h
    cmp ax,0
    jz exit
;将屏幕设置为320*200的显示分辨率
    mov ah,00
    mov al,13h
    int 10h
;***********************************获取中断向量并保存
    mov al,1ch
    mov ah,35h
    int 21h
    push es
    push bx
    push ds
;***********************************置新的向量
    mov dx,offset zhongduan
    mov ax,seg zhongduan
    mov ds,ax
    mov al,1ch
    mov ah,25h
    int 21h
    pop ds
;***********************************
    call inmenufun
    call init
    next2:
    call mouse_racket
    cmp exitflag,0;判断退出位是否有效,0为有效,若有效则退出
    jz exit
    
    cmp stopflag,1;如果stopfalg有校,则进入暂停状态
    jne nostop
    call waitfun;调用暂停函数
    nostop:
    ;判断replay的标志位是否为有效,如果有效(1),那么就重新开局
    cmp replayflag,1
    jne noreplay
    call replayfun
    noreplay:
    ;判断小球是不是已经都死光光了,如果是,那么调用函数,询问玩家是不是重新开局或者退出
    cmp balldeadflag,1
    jne noballdead
    call balldeadfun
    noballdead:
    
    cmp bomb_flag,1
    jne nobomb
    call bomb_show
    nobomb:

    ;当所有的砖块都已经被击碎
    cmp cmpgameflag,1
    jne nocmpgame
    call cmpgamefun
    nocmpgame:
    
    jmp next2;循环,等待美妙18.2次的中断,对屏幕中的各个对象进行操作
    exit:
    ;***********************************还原中断向量
    pop dx
    pop ds
    mov al,1ch
    mov ah,25h
    int 21h
    
    MOV AH,4CH
    INT 21H
;******************************************************************
;当接到炸弹后,调用这个函数来实现特效
bomb_show proc near
     push ax
     push bx
     push cx

    mov qidiany,45;先定位垂直方向
    mov zhongdiany,75
    mov al,inmenu_color
    mov color,al
    mov cx,13
    mov propx,-2
    mov propy,65
    mov propflag,8
 show_loop1:;这个函数是把类似炸弹的东西画出来
    add bomb_color,50
    add propx,6
    sub propy,15
    call printprop
    call waitf
    add bomb_color,33
    add propx,8
    add propy,15
    call printprop
    call waitf
    loop show_loop1
    mov propflag,-1;一定要把propflag置为-1,否则将会使prop下掉
    
    mov qidianx,4
    mov zhongdianx,8
    call setarea
    mov cx,194
 bomb_show_loop:;这个循环是用来从做到右把砖块划掉
    mov ax,qidianx
    mov zhongdianx,ax
    mov color,00
    call setarea
    
    add qidianx,1
    add zhongdianx,5
    mov al,inmenu_color
    mov color,al
    call setarea
    
    push cx
    mov ax,03fh
    bomb_show_delay:;延时
       mov cx,0ffffh
       bomb_show_delay1:
       add bx,1
       loop bomb_show_delay1
       sub ax,1
       cmp ax,0
       jne bomb_show_delay
   pop cx
 loop bomb_show_loop
 
    mov color,00
    call setarea
 bomb_show_exit:
    mov bomb_flag,0
    pop cx
    pop bx
    pop ax
ret
bomb_show endp
;****************************************************************
waitf proc near;没什么好解释的吧,很简单的延时
   push cx
       mov cx,0ffffh
       waitf_1:
           push cx
           mov cx,01ffh
           waitf_2:
           loop waitf_2
           pop cx
       loop waitf_1

   pop cx
ret
waitf endp
;******************************************************************
;当将所有的砖块都打完后,执行这个函数
cmpgamefun proc near
;由一个光莲由上到吓显示,将屏幕清空
     add barflag,1
     mov qidianx,0;设置在水平方向上,全部在操作范围内
     mov zhongdianx,319
     mov qidiany,0;设置垂直方向上,从0开始
     mov zhongdiany,5
     mov color,00
     call setarea
     mov cx,194
     cmpgame_loop:;用循环操作,由上到下形成光莲
          mov ax,qidiany;先将上面的一行擦去
          mov zhongdiany,ax
          mov color,00
          call setarea
          ;再在底下生成一行
          add qidiany,1
          add zhongdiany,5

⌨️ 快捷键说明

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