ガイスターというボードゲームがあります。
お互いが相手の駒が何かわからない状態で取り合うという心理戦の側面を兼ねたゲームです。
「いいオバケ」(青)と「悪いオバケ」(赤)の 2 種類の駒を手前の 8 マスに 1 個ずつ好きな順に配置できます。
相手の青を全部取るか、自分の赤を全部取らせるか、自分の青を相手の陣地の特定のマスから外に出すことが勝利の条件となります。
今回からこのガイスターを Python と pygame を使って作っていく様子を連載したいと思います。
pygame について役に立つ日本語のサイトがあります。
→ 【Pygame入門】ゲームプログラミング【Python】 | 西住工房
pygame のインストール・画面表示
まずは pygame をインストールします。
$ pip install pygame
これでimport pygame
して使えるようになります。
ウィンドウを表示するコードは以下のようになります。
main.py1import sys23import pygame4from pygame.locals import *56# ウィンドウサイズ7DISP_SIZE = (600, 600)89# 色の設定10IVORY = (240, 227, 206)1112def main():13pygame.init() # 初期化14screen = pygame.display.set_mode(DISP_SIZE) # 画面作成15pygame.display.set_caption('Geister') # タイトルバーの表示1617while True:18screen.fill(IVORY) # 背景色塗りつぶし19pygame.display.update() # 画面更新2021# イベントハンドリング22for event in pygame.event.get():23# 閉じるボタン24if event.type == QUIT:25pygame.quit() # pygame 終了26sys.exit() # プログラム終了2728if __name__ == '__main__': main()
ところでset_mode
の第二引数にFULLSCREEN
を指定するとフルスクリーン表示できます。
コマンドライン引数を受け付けて表示変更できるようにすると、このようになります。
main.py1...2def main():3pygame.init()4args = sys.argv5_flag = FULLSCREEN if len(args) == 2 and args[1] == 'f' else 06screen = pygame.display.set_mode(DISP_SIZE, _flag)7...
これでpy main.py f
のようにするとフルスクリーンになります。
駒配置画面の作成
ゲームを始める前に駒をどのように配置するか、それぞれのプレイヤーに決めてもらうための画面を作ります。
いろいろ描くので、ひとつの関数にまとめて別のモジュールに置きます。
draw.py1import pygame2from pygame.locals import *34def setup():5pass
main.py1...2import draw3...4def main():5...6while True:7screen.fill(IVORY)8draw.setup()9pygame.display.update()
テキストを描画
駒の配置を決めてほしい旨をテキストとして画面上に描いてみます。
pygame ではテキストに日本語フォントを使うこともできます。
使用できるフォントの一覧はprint(pygame.font.get_fonts())
で表示できます。
テキストを描くには、まずフォントを指定して、render
メソッドで内容を指定し、
blit
メソッドで位置を指定します。
main.py1...2def main():3...4font = pygame.font.SysFont('hg丸ゴシックmpro', 16)56while True:7...8draw.setup(screen, font, 1)9...
draw.py1...2def setup(screen, font, turn):3'''4screen : pygame.display.set_mode5font : pygame.font.SysFont6フォント7turn : int8先攻(0)か後攻(1)か9'''10assert turn == 0 or turn == 1, 'draw.setup の引数 turn は 0, 1 の値を取ります'11_text = font.render(12('先' if turn == 1 else '後') + '攻の駒の配置を決めてね(↓自分側 ↑相手側)',13True, (0, 0, 0))14screen.blit(_text, (20, 20))
ここまででプログラムを起動するとこのようになります。
はグリッドや決定ボタンの描画をしていきます。
お読みいただきありがとうございました~
では