この記事はプロトアウトスタジオのカレンダー | Advent Calendar 2021 - Qiitaの2日目の記事です。
はじめに
ゲームコントローラーのボタン連打でアリーヴェデルチ
をするだけのアプリ作りました。
完成品はこちら
アリーヴェデルチとは
アリーヴェデルチの意味がわからんという方のためにリンク置いときます。
「アリアリアリアリアリ、アリーヴェデルチ!」と言い、アリアリの間はずーっと殴りっぱなしで、止めめに強い一撃を相手にくらわせる。
↑ ここをアプリにしました。
スクリプト
Python3 スクリプトです。実行環境は Python 3.9.5
です。
import pygame
from pygame.locals import *
import random
screenWidth = 1200
screenHeight = 800
def setString(screen,dispStr,sFlg):
col1 = 255
col2 = 255
col3 = 255
fSize = 100
posX = 250
posY = screenHeight / 2 -50
if sFlg == 0:
col1 = random.randrange(255)
col2 = random.randrange(255)
col3 = random.randrange(255)
fSize = random.randrange(20) * 10
posX = random.randrange(screenWidth)
posY = random.randrange(screenHeight)
else:
screen.fill((0,0,0))
font = pygame.font.Font("meiryo.ttc", fSize) # フォントの設定(55px)
text = font.render(dispStr, True, (col1,col2,col3)) # 描画する文字列の設定
screen.blit(text, [posX, posY]) # 文字列の表示位置
pygame.display.update() # 画面を更新
def clearScreen(screen):
screen.fill((0,0,0)) # 画面を黒色に塗りつぶし
pygame.display.update() # 画面を更新
pygame.init() # pygameの初期化
pygame.joystick.init()
try:
joystick = pygame.joystick.Joystick(0)
joystick.init()
print('ジョイスティックの名前:', joystick.get_name())
print('ボタン数 :', joystick.get_numbuttons())
except pygame.error:
print('ジョイスティックが接続されていません')
screen = pygame.display.set_mode((screenWidth, screenHeight)) # 画面の生成
# ループ
active = True
while active:
# イベントの取得
for e in pygame.event.get():
# 終了ボタン
if e.type == QUIT:
active = False
print('|'+str(e))
# ジョイスティックのボタンの入力
if e.type == pygame.locals.JOYAXISMOTION:
print('十時キー:', joystick.get_axis(0), joystick.get_axis(1))
elif e.type == pygame.locals.JOYBUTTONDOWN:
print('ボタン'+str(e.button)+'を押した')
if e.button == 3:
setString(screen,"アリ",0)
elif e.button == 2:
clearScreen(screen)
elif e.button == 1:
setString(screen,"アリーヴェデルチ",1)
elif e.type == pygame.locals.JOYBUTTONUP:
print('ボタン'+str(e.button)+'を離した')
補足
操作について
ゲームコントローラの3つのボタンを使います。
-
ボタン2 : 画面に
アリ
を描画。文字サイズ、座標、色はランダム - ボタン3 : 画面クリア(画面全体を黒で塗る)
-
ボタン4 : 画面クリアの後、
アリーヴェデルチ
を描画
該当するスクリプトはこちらです。
if e.button == 3:
setString(screen,"アリ",0)
elif e.button == 2:
clearScreen(screen)
elif e.button == 1:
setString(screen,"アリーヴェデルチ",1)
関数 setString
は、第3引数により、画面クリアの有無や、文字設定の処理が変わります。
ゲームコントローラの制御について
ゲームコントローラの制御スクリプトについてはこちらに記載しました。
pygame 日本語文字列の描画について
Pythonモジュール pygame
でスクリーン上に日本語の文字列を描画するには以下のように日本語に対応したフォントの設定が必要です。
font = pygame.font.Font("meiryo.ttc", fSize)
無料フォントを取得するなどで用意してください。
おわりに
ゲームコントローラーを使った何かを作りたくて簡単なアプリを作ってみました。今後はラジコンのコントローラーとして使ってみたいと思います。