制作一款打飞机游戏13:状态机

  • 状态机‌:为了实现游戏的不同状态(如启动屏幕和游戏运行状态),我们引入了状态机。通过动态地切换drawupdate函数,我们能够根据游戏当前的状态来执行不同的操作。
  • 启动屏幕‌:制作了一个简单的启动屏幕,当玩家按下按钮时,游戏会从启动屏幕切换到实际运行状态。
  • 清除屏幕‌:移除了每次绘制前的清屏操作,因为我们总是将整个地图绘制到屏幕上,所以不需要清屏来查看各图层之间的空隙。
  • 爆炸效果‌:对爆炸效果进行了微调,使其看起来更加自然和不可预测。通过使用R&D range函数,我们为爆炸的偏移量添加了随机性。

function _init()
 t=0
 debug={}
 
 butarr=split("1,2,3,1,4,6,7,4,5,9,8,5,1,2,3,1")
 dirx=split("0,-1,1, 0,0, -0.7, 0.7,0.7,-0.7")
 diry=split("0, 0,0,-1,1, -0.7,-0.7,0.7,0.7")

 --★
 shiparr=split("65,67,69,71,73")
 flamearr=split("76,77,78,77")
   
 mapsegs=split("3,3,3,3,3,2,1,0,1,7,6,5,10,4,11,6,11,11,5,9,10,8,1,0,15,14,1,13,12,19,19,18,17,16,18,17,16,17,16,19,22,21,20,27,26,25,23,24,3,3")
 
 _upd=upd_menu
 _drw=drw_menu
end

function startgame()
 px,py=64,64
 spd=1.4
 lastdir=0
 shipspr=0

 scroll=0
 xscroll=0
 mapsegi=0
 cursegs={}
 
 boss=false

 parts={}
 shots={}
 shotwait=0
 muzz={}

 _upd=upd_game
 _drw=drw_game
end

function _draw()
 _drw()
 
 --★
 cursor(4,4)
 color(7)
 for txt in all(debug) do
  print(txt)
 end
end

function _update60()
 t+=1
 _upd()
end

-->8
--draw

function drw_game()

 for seg in all(cursegs) do
  map(seg.x,seg.y,xscroll,scroll-seg.o,18,8)
 end
 
 for p in all(parts) do
  if p.wait==nil then
   p.draw(p)
  end
 end
  
 for s in all(shots) do    
  spr(s.sani[flr(s.si)],s.x,s.y,1,s.sh)
 end
 
 for m in all(muzz) do    
  spr(m.sani[flr(m.si)],px+m.x,py+m.y,2,2)
 end
 
 --ship
 spr(shiparr[flr(shipspr*2.4+3.5)],px,py,2,2)
 
 local fframe=flamearr[t\3%4+1]
 spr(fframe,px+6,py+15)
 spr(fframe,px+3,py+15)
 
 debug[1]=scroll
end

function drw_menu()
 map(19,8)
end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值