実装内容
Pyxelの実装に慣れる意味で、簡単なゲームを作ってみます。
ゲームのルール
ランダムで選ばれた3桁の数字を10回以内に当てるゲーム。
1回、解答するごとに自分の解答と正解を比べて、
- 正解の方が数字が高い場合は「ans. is higher!」
- 低い場合は「ans. is lower!」
というヒントを表示する。
ゲームの仕様
- 数字はボタンをクリックして選択する
- answerボタンをクリックして解答する
- 残り解答回数を表示する
- 解答後、ヒントを表示する
- 正解であれば、正解のテキストを表示する
- 解答回数が無くなれば、ゲームオーバーのテキストを表示する
- リセットボタンを表示する
実装コード
import pyxel
import random
class App:
def __init__(self):
pyxel.init(255, 255)
self.x = 0
self.y = 0
self.game_clear = False
self.game_over = False
self.number_0 = 0
self.number_1 = 0
self.number_2 = 0
self.target = random.randint(0, 999)
self.count = 10
self.ans_high = False
self.ans_low = False
pyxel.mouse(True)
pyxel.run(self.update, self.draw)
def update(self):
if pyxel.btnp(pyxel.MOUSE_LEFT_BUTTON):
if self.game_over == False:
if 190 < pyxel.mouse_x < 210 and 40 < pyxel.mouse_y < 60:
ans = self.number_0*100 + self.number_1*10 + self.number_2
if self.target == ans:
self.game_clear = True
self.ans_high = False
self.ans_low = False
elif self.target < ans:
self.ans_high = True
self.ans_low = False
else:
self.ans_high = False
self.ans_low = True
self.count -= 1
if self.count <= 0:
self.game_over = True
self.ans_high = False
self.ans_low = False
elif 40 < pyxel.mouse_x < 50 and 30 < pyxel.mouse_y < 40:
self.number_0 += 1
if self.number_0 >= 10:
self.number_0 = 0
elif 40 < pyxel.mouse_x < 50 and 80 < pyxel.mouse_y < 90:
self.number_0 -= 1
if self.number_0 < 0:
self.number_0 = 9
elif 60 < pyxel.mouse_x < 70 and 30 < pyxel.mouse_y < 40:
self.number_1 += 1
if self.number_1 >= 10:
self.number_1 = 0
elif 60 < pyxel.mouse_x < 70 and 80 < pyxel.mouse_y < 90:
self.number_1 -= 1
if self.number_1 < 0:
self.number_1 = 9
elif 80 < pyxel.mouse_x < 90 and 30 < pyxel.mouse_y < 40:
self.number_2 += 1
if self.number_2 >= 10:
self.number_2 = 0
elif 80 < pyxel.mouse_x < 90 and 80 < pyxel.mouse_y < 90:
self.number_2 -= 1
if self.number_2 < 0:
self.number_2 = 9
if 190 < pyxel.mouse_x < 210 and 190 < pyxel.mouse_y < 210:
self.reset()
def reset(self):
self.game_clear = False
self.game_over = False
self.target = random.randint(0, 999)
self.count = 10
self.ans_high = False
self.ans_low = False
self.number_0 = 0
self.number_1 = 0
self.number_2 = 0
def draw(self):
pyxel.cls(0)
pyxel.text(100, 10, "number hit game", 15)
pyxel.circ(200, 50, 10, 3)
pyxel.text(190, 50, "answer", 15)
pyxel.circ(200, 200, 10, 3)
pyxel.text(190, 200, "reset", 15)
pyxel.text(100, 30, "rest:"+str(self.count), 14)
pyxel.tri(40, 40, 50, 40, 45, 30, 10)
pyxel.tri(60, 40, 70, 40, 65, 30, 10)
pyxel.tri(80, 40, 90, 40, 85, 30, 10)
pyxel.tri(40, 80, 50, 80, 45, 90, 10)
pyxel.tri(60, 80, 70, 80, 65, 90, 10)
pyxel.tri(80, 80, 90, 80, 85, 90, 10)
pyxel.text(40, 60, str(self.number_0), 5)
pyxel.text(60, 60, str(self.number_1), 5)
pyxel.text(80, 60, str(self.number_2), 5)
if self.game_clear == True:
pyxel.text(100, 200, "GAME CLEAR!", 15)
elif self.game_over == True:
pyxel.text(100, 200, "GAME OVER...", 15)
if self.ans_high == True:
pyxel.text(100, 150, "Correct ans. is lower!", 11)
elif self.ans_low == True:
pyxel.text(100, 150, "Correct ans is higher!", 11)
App()
実行結果
解説
Pyxelで作るゲーム一発目ということで、まずは簡単なゲームを作ってみました。
コード実装もGUIもあまり洗練されていないですが、まずはPyxelのゲーム開発に慣れるということが目的なので、大目に見てくださいw
各関数の処理を簡単に解説します。
init関数でGUIの初期化や、正解をランダムで選ぶということをしています。
update関数ではマウスをクリックしたときのイベントの処理をしています。
三角ボタンであれば、数字の変更であったり、answerボタンであれば解答と正解の比較をしたり、リセットボタンであれば、リセット関数を実行するという処理を実装しています。
reset関数は、様々な変数の初期化、正解のランダム再設定を行っています。
draw関数はボタンやテキストの表示処理をしています。
100行ちょっとのコードですが、これだけで簡単な数当てゲームを作成することができました。
これからもゲームを作って、このブログにUPしていきたいなぁと思っています。
コメント