paloma blog

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

スリーカードポーカーゲームのGUI化への道1 画像を表示させる

昨年の自粛期間中に勉強がてらスリーカードポーカーゲームを作ったのですが、ターミナルでしかプレイできません。
どうせゲーム作るならGUI化もしたいと思っていたのですが、そう言っている間に年が明けてしまいました。

今月再度緊急事態宣言で自粛中ですので、少しでも進捗を出したいと思います。

GUI化ってまじでどうすればいいかわからん

プログラムの分岐の流れはどうすればいいかはわかります。
しかし画像処理系の実際のコードをどう書けばいいのかが全然わかりません。
(画面だけは作れました)

だからといって何もしないのは進まないので、画像を1枚でも描画するところから始めようと思います。

とりあえずトランプ画像取得

ありがたいことにオープンソースのトランプ画像がありますので、いったんこちらを使わせていただきます。

GitHub - hayeah/playing-cards-assets: Playing Cards Image Assets (SVG+PNG)

仮で使わせていただきますので画像のcommitはしません。

pygame.blit

画像を描画するにはblit関数を使う様です。

Pygame チュートリアル - たすけて! 絵を動かすにはどうやるの?

一旦画面系は簡単に整理すると

  • display
    • ゲーム画面の作成
  • blit
    • 画像の描画
  • update
    • 画面を更新

で、blitをゲームループの中で処理してupdate書けていく感じですかね。

3枚表示してみる

とりあえず画像を表示させることを目標として3枚出してみます。
スリーカードポーカーゲームなのでね。

  • 追記したコード

3枚の画像を読み込んでリサイズ。
手動で画面に貼り付けます。
画像ロード、位置系はループで処理させたいですね。

(pygames) masashi@PC-ubuntu:~/Three-card-poker$ git diff game.py
(略)
--- a/game.py
+++ b/game.py
@@ -8,10 +8,23 @@ pygame.display.set_caption('Three card poker')

 GREEN = (0, 127, 0)

+width, height = 100, 144
+ace1 = pygame.image.load('src/ace_of_spades.png')
+ace2 = pygame.image.load('src/ace_of_hearts.png')
+ace3 = pygame.image.load('src/ace_of_diamonds.png')
+card1 = pygame.transform.scale(ace1, (width, height))
+card2 = pygame.transform.scale(ace2, (width, height))
+card3 = pygame.transform.scale(ace3, (width, height))
+
 while True:

        DISPLAYSURF.fill(GREEN)

+       x, y = 10, 10
+       DISPLAYSURF.blit(card1, (x,y))
+       DISPLAYSURF.blit(card2, (x + width,y))
+       DISPLAYSURF.blit(card3, (x + width * 2,y))
+
        for event in pygame.event.get():
                if event.type == QUIT:
                        pygame.quit()

実行

動かしてみます。

(pygames) masashi@PC-ubuntu:~/Three-card-poker$ python3 game.py

f:id:paloma69:20210126213946p:plain

いいですね。
ちゃんと画像が描画できました。

しかも(自分で選びましたが)いい組み合わせですね。
この役だとペアプラスボーナスとアンティボーナスで34倍の払い戻しですw

まとめ

とりあえずGUI化の第一歩は踏み出せました。

まだまだやることはたくさんありますが、とりあえずは

  • トランプ画像の選定
    • 裏面カードを使うか迷い中
  • 本体の処理と画像を紐づけ
  • ポーカーテーブルっぽい装飾

というところです。
次はこれらのどれか完了を目標に進めようと思います。

本シリーズ

スリーカードポーカーゲームを作りたい やっとゲームになった編 - paloma blog

gitで初めてbranchを切ってみた - paloma blog