昨年の自粛期間中に勉強がてらスリーカードポーカーゲームを作ったのですが、ターミナルでしかプレイできません。
どうせゲーム作るなら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
いいですね。
ちゃんと画像が描画できました。
しかも(自分で選びましたが)いい組み合わせですね。
この役だとペアプラスボーナスとアンティボーナスで34倍の払い戻しですw
まとめ
とりあえずGUI化の第一歩は踏み出せました。
まだまだやることはたくさんありますが、とりあえずは
- トランプ画像の選定
- 裏面カードを使うか迷い中
- 本体の処理と画像を紐づけ
- ポーカーテーブルっぽい装飾
というところです。
次はこれらのどれか完了を目標に進めようと思います。