パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

2時間クオリティの音ゲーを作ってみる

2018-11-24 | DMB-8836(自作ゲーム機)
せっかくモジュール化したので一本新作
シンプルに音ゲー

4つのレーンで落ちてくるので5段め以下で+1 2段め以下で+2 ないときに押すと-1
レーンは左からLUDR、AB同時押しで終了

最後までいくとスコア表示します。

骨格で1時間
演出で1時間ぐらいで作成しています。

import dmbos as dm
import time
import random

#title
dm.text(0,0,"D",9)
dm.text(4,0,"M",9)
dm.text(0,4,"B",9)
dm.text(4,4,"8",9)

time.sleep(0.2)
dm.cls()
for c in "OTOAME":
  dm.text(2,2,c,9)
  time.sleep(0.2)
  dm.cls()
  time.sleep(0.1)

#display sub
def getWorld(sx,sy,wx,wy):
  mx=0
  for x in range(sx,sx+wx):
    for y in range(sy,sy+wy):
      if world[y][x]==1:return 9
  return mx

def writeWorld():
  scx=[1,1,1,1,1,1,1,1]
  scy=[4,2,1,1,1,1,1,1]
  sy=wy-12
  for y in range(8):
    sx=0
    for x in range(8):
      dm.vram[y][x]=getWorld(sx,sy,scx[x],scy[y])
      sx+=scx[x]
    sy+=scy[y]

#stage
def makeWorld(n):
  global world
  p=0
  while p<n:
    x=random.randint(0,3)
    y=random.randint(12,100)  
    if world[y][x*2]==0:
      p+=1
      world[y][x*2]=1
      world[y][x*2+1]=1

#atari
def hit(x):
  global world,wy,score
  #0 1   great
  #2 3 4 good
  s,dy=0,0
  if world[wy][x]==1:s,dy=2,0
  elif world[wy-1][x]==1:s,dy=2,-1
  elif world[wy-2][x]==1:s,dy=1,-2  
  elif world[wy-3][x]==1:s,dy=1,-3  
  elif world[wy-4][x]==1:s,dy=1,-4
  else:s,dy=-1,-1
  score+=s
  if dy<=0:
    if s==2:dm.play(1,[j for j in [40,44,48] ])
    if s==1:dm.play(1,[j for j in [40,42,44] ])
    world[wy+dy][x]=0
    world[wy+dy][x+1]=0

#init
wy=119
score=0
world=[[0 for i in range(8)] for j in range(120)]
makeWorld(30)

while wy>=0:
  #key
  if dm.button()=="AB":
    break
  if "L" in dm.button():
    hit(0)
  if "U" in dm.button():
    hit(2)
  if "D" in dm.button():
    hit(4)
  if "R" in dm.button():
    hit(6)
  #display
  writeWorld()
  #createsound
  s=[]
  for x in range(8):
    if world[wy-12][x]==1:s+=[50+x]
  if len(s)>0:
    dm.play(0,[j for j in s])
  #dropsound
  s=[]
  for x in range(8):
    if world[wy][x]==1:s+=[30+x]
  if len(s)>0:
    dm.play(2,[j for j in s])
  time.sleep(0.2)
  wy-=1

#playscore
score=max(0,score)
dm.text(0,0,str(int(score/10)),9)
dm.text(4,4,str(int(score%10)),7)
dm.play(1,[j for j in range(score,score+20,2)])
print(score)
time.sleep(2)

dm.clear()


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。