今回はプログラミング言語の「Python」を使って作成しました。
弾幕が1秒ごとに発射するように下記の本のサンプルを改造してみました。
■ プログラム
from game import *
from crash import *
import math
import random
import time
import datetime
import re
image_player = image('player_spaceship.png')
image_enemy = image('enemy_spaceship.png')
image_bullet = image('bullet.png')
SW, SH = 1, 9/16
def player(p):
v = 0.01
if key(LEFT):
p.x -= v
if key(RIGHT):
p.x += v
if key(UP):
p.y += v
if key(DOWN):
p.y -= v
p.x = max(-SW+p.sx, min(SW-p.sx, p.x))
p.y = max(-SH+p.sy, min(SH-p.sy, p.y))
for b in group(bullet):
d = math.dist((p.x, p.y), (b.x, b.y))
if d < p.sx*0.5:
#---------------------------------------------------------
# new_crashへ
#---------------------------------------------------------
new_crash(p.x, p.y, 0.01, 20, 0.98)
p.life = 0
def bullet(b):
b.x += b.vx
b.y += b.vy
b.r += 0.01
if abs(b.x) > SW+b.sx or abs(b.y) > SH+b.sy:
b.life = 0
def new_dir(x, y, v, dir):
rad = dir*math.pi*2
vx = math.cos(rad)*v
vy = math.sin(rad)*v
#---------------------------------------------------------
# ④弾生成
#---------------------------------------------------------
add(bullet, image_bullet, 0.03, x, y, vx, vy)
def new_nway(x, y, v, dir, n, angle):
if n > 1:
for i in range(n):
#---------------------------------------------------------
# ③new_dirへ
#---------------------------------------------------------
new_dir(x, y, v, dir+angle/(n-1)*(i-(n-1)/2))
def new_circle(x, y, v, dir, n):
rad = dir*math.pi*2
vx = math.cos(rad)*v
vy = math.sin(rad)*v
add(bullet, image_bullet, 0.03, x, y, vx, vy)
#---------------------------------------------------------
# ②new_nwayへ
#---------------------------------------------------------
new_nway(x, y, v, dir, n, 1-1/n)
bulletFlag = False
cnt = 0
def enemy(e):
global bulletFlag, cnt
now = datetime.datetime.now()
text = str(int(time.mktime(now.timetuple()) * 1000) + int(now.microsecond / 1000))
t = re.findall("\d{4}",text[-4:])
t = int(t[0])
t //= 1000
cnt += 1
#print('カウントは{0}'.format(cnt))
#if random.random() < 0.05:
if t% 1 == 0 and bulletFlag == False:
cnt = 0
bulletFlag = True
#---------------------------------------------------------
# ①new_circleへ
#---------------------------------------------------------
new_circle(e.x, e.y, 0.01, random.random(), 20)
elif cnt > 60:
bulletFlag = False
def start():
add(player, image_player, 0.08, -0.9, 0)
add(enemy, image_enemy, 0.08, 0, 0)
run(start, 640, 360)
|
■ 参考書
「Pythonでつくる ゲームプログラミング入門」
■ ゲーム用ライブラリ
「pyglet」
■ プログラミング言語
「Python」



