【Pyxelでゲーム開発】簡単な数当てゲームを作って、Pyxelのゲーム開発に慣れる

Pyxel
スポンサーリンク

実装内容

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していきたいなぁと思っています。

コメント

タイトルとURLをコピーしました