今回はプログラミング言語の「Python」を使って作成しました。
全方位弾と追尾弾が2秒ごとに同時に発射するように下記の本のサンプルを改造してみました。
■ プログラム
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」