paloma blog

NWエンジニアやってます。主に自宅環境のお遊びを書きます。Pythonもちょっと。タイトルは好きなカクテルから。

スリーカードポーカーゲームのGUI化への道4 マウスクリック処理の練習

前回まででゲームの処理を画像に紐づけて表示するところまでできました。
次からはボタンを押下してチップの処理やゲームの侵攻と言った処理を作りたいところです。

しかしまたまた未知の領域でボタン処理はどうすればいいのかわからないのでまずは練習です。

今回やること

  • ボタンを押して以下の処理を出力される
    • ボタンを押すとカウントアップする
    • ボタンを押した旨のメッセージが出る

コード

ちょっとずつ追記できればよかったんですが、一気に出してしまいます。
実際のコードに書くのは嫌だったので練習ファイルを作成しました。

  • mouseclick.py

ボタンはとりあえず描写だけして装飾は何もしてません。
ループ内に置いたものがうまく動かず、トライ&エラーになってしまいました。
ここをうまく設計出来て動くとカッコいいんですけどね。

import pygame
import sys
from pygame.locals import *


pygame.init()
DISPLAYSURF = pygame.display.set_mode((600, 400))

i = 1

font = pygame.font.Font(None, 50)
text = font.render('Button was pressed.', True, (0,0,0))

button = pygame.Rect(0, 50, 100, 50)

while True:

        # For counter update in a loop
        counter = font.render(str(i), True, (0,0,0))

        DISPLAYSURF.fill((255, 255 ,255))
        DISPLAYSURF.blit(counter, (10,10))
        pygame.draw.rect(DISPLAYSURF, (120, 120, 120), button)

        for event in pygame.event.get():

                if event.type == MOUSEBUTTONDOWN and button.collidepoint(event.pos):
                        i += 1
                        DISPLAYSURF.blit(text, (10,200))

                elif event.type == QUIT:
                        pygame.quit()
                        sys.exit()

                pygame.display.update()
メモ
  • MOUSEBUTTONDOWN
    • マウスが押されたかどうかの判定
    • 左クリック、ホイール、右クリックの判定ができる
  • button.collidepoint
    • 座標内の図形が押されたかどうか判別する
    • 仕組みはもう少し調べる

実行

実行します。
キャプチャだけとってノー編集なのでデスクトップ丸出しで恥ずかしいです。

f:id:paloma69:20210217213136g:plain

グレーのボタンが押されたら"Button was pressed."の文字が出力されてカウントが増えます。
とりあえずボタン処理が動きました!

まとめ

色々なサイトを調べましたがボタンの作成はRectで図形を作って処理をさせるものがほとんどでした。(ほとんどってか全て)
また、Rectで書いた図形に文字を入れようとすると引数がどっと増えるので、どう描くかもう少し勉強しなければいけません。

最悪ボタンは画像を使うのもありかもです。
なかなか進みませんねえ。