纯汇编实现打飞机小游戏

本文介绍了作者使用汇编语言实现打飞机小游戏的过程,包括飞机、导弹和敌人的绘制与移动,以及碰撞检测和游戏逻辑。通过主程序调用各个例程,实现了游戏的运行。游戏具有自定义难度和无限发射导弹的特性。
摘要由CSDN通过智能技术生成

    汇编暑假作业要求做一个大项目,题目可以自拟。我思来想去,还是觉得做一个小游戏比较有意思。最后选择了做打飞机游戏。

            这里采用的是VGA模式320x200 4色。

            打飞机游戏的游戏逻辑比较简单。首先,飞机可以移动,也可以发射炮弹;其次,会有敌人不断地从前方飞过来,如果撞上飞机游戏结束;最后,飞机发射的炮弹可以击落敌人。

            既然是打飞机,我们就必须首先造一台飞机,代码如下:

           

Comment/***********
	  function:   draw a horizontal line
	  parameters: horizontal position
	              vertical position
	  			  length of the line
	  			  color
	  return:     void
	  description:draw some points horizontally.
	  			  color '0001h' represents drawing a line while
	  			  color '0000h' which is black means erase the line.
**********/
drawALine PROC NEAR 
       PUSH BP
       MOV BP, SP
       PUSH AX
       PUSH CX
       PUSH DX
       PUSH SI
       	
       MOV AH, 0Ch
       MOV CX, [BP+4]
       MOV DX, [BP+6]
       MOV SI, [BP+8]
       MOV AL, Byte Ptr [BP+10]
drawALineLoop:
	   INT 10h
	   INC CX
	   DEC SI
	   JNZ drawALineLoop
       
       POP SI
       POP DX
       POP CX
       POP AX
       MOV SP, BP
       POP BP
       RET
drawALine ENDP   


Comment/***********
	  function:   draw a plane or a missile 
	  parameters: horizontal position
	              vertical position
	              color
	              type (plane or missile or enemy)
	              map length  
	  return:     void
	  description:call "drawALine" function repeatedly.
**********/
drawCraft PROC NEAR
	    
	    PUSH BP
	    MOV BP, SP
	    SUB SP, 8
	    
	    PUSH AX
	    PUSH DX
	    PUSH SI
	    PUSH DI
	    MOV DI, 0
	    
	    MOV AX, [BP+12]
	    MOV [BP-8],AX
	    MOV SI, [BP+10]
	    MOV AX, [BP+8]
	    MOV [BP-6], AX
	    MOV AX, [BP+6]
	    MOV [BP-4], AX
	    MOV AX, [BP+4]
	    MOV [BP-2], AX
drawCraftLoop:
		PUSH Word Ptr [BP-6]
	    MOV DX, Word Ptr [SI]
	    PUSH DX	    
	    PUSH Word Ptr [BP-4]
	    MOV AX, [BP-2]
	    SHR DX, 1
	    SUB AX, DX
	    PUSH AX
	    CALL drawALine
	    ADD SP, 8
	    ADD Word Ptr [BP-4], 1
	    ADD SI, 2
	    INC DI
	    CMP DI, [BP-8]
	    JB  drawCraftLoop
	    
	    POP DI
	    POP SI
	    POP DX
	    POP AX    
	    MOV SP, BP
	    POP BP
		RET
drawCraft ENDP
P LANEMAP DW  1,1,3,3,3,3,3,3,7,14,16,14,6,2,2,6,6 
N1 EQU  ($-PLANEMAP)/2
   

                     这里之所以做的这么复杂是出于代码重用的考虑,相同的代码只要输入不同的参数,就能制造出不一样的东西。这是抽象的思想。

                     drawCraft 根据输入的不同的数组,可以绘制出不同的东西,比如飞机,导弹,敌人。而不必画飞机一个函数,画导弹又是另一个函数了。

                     drawCraft主要是一条线一条线

  • 5
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值