ここまでで、だいぶゲームを作れそうな要素が揃ってきた感じがします。いったんテキスト描画は置いておいて、今度は描画の種類を増やしてみましょう。
テクスチャを用意してスプライトを書く流れが定番ですが、プログラマが何が大変って絵を用意することですね…。フリー素材を引っ張ってくる手もありますけれど。
ここはワイヤーフレームでしょう!
幸い、pyglet にはいろいろな shape が用意されていて簡単に描画できそうです。
pyglet.shapes — pyglet v2.0.15
早速やってみます。でも、あんまり複雑な形を手で打つのはちょっと…。シューティングゲームで使う「自機」のつもりで菱形を描くことにしました。少し小さいかな?
import pyglet
from pyglet import shapes
title = "Pyglet Shooting Game"
WINDOW_WIDTH = 640
WINDOW_HEIGHT = 480
window = pyglet.window.Window(WINDOW_WIDTH, WINDOW_HEIGHT, title)
batch = pyglet.graphics.Batch()
@window.event
def on_draw():
window.clear()
batch.draw()
# プレイヤー
class Player():
def __init__(self, x, y, color):
# プレイヤーの形
self.lines = (
((0, 8), (4, 0)),
((4, 0), (0, -8)),
((0, -8), (-4, 0)),
((-4, 0), (0, 8))
)
# プレイヤーの中心位置と色
self.x = x
self.y = y
self.color = color
# プレイヤーのshapes.Lineを作成して記録
self.line_shapes = []
self.create_line_shapes(self.line_shapes, self.lines, self.color)
def create_line_shapes(self, line_shapes, lines, color):
for line in lines:
x1 = self.x + line[0][0]
y1 = self.y + line[0][1]
x2 = self.x + line[1][0]
y2 = self.y + line[1][1]
line_shapes.append(shapes.Line(x1, y1, x2, y2, width=2, color=color, batch=batch))
def create_player():
global player
player = Player(WINDOW_WIDTH // 2, WINDOW_HEIGHT // 3, (0, 230, 0))
if __name__ == '__main__':
create_player()
pyglet.app.run()