LoginSignup
7
1

More than 1 year has passed since last update.

ターミナル上でポーカーのヘッズアップがしたい

Posted at

こんにちは!株式会社アトラエで「転職サイトGreen」のエンジニアをしている浅水です。

この記事では、僕がポーカーのヘッズアップを愛用のターミナル上でやってみたい!!と夢見そして、
半分成功、半分夢半ばで挫折した話を書いていきたいと思います。

作ったもの

gamen_test1.gif

こんな感じで、go_pokerというTUIで起動するポーカーゲーム(と言えるほどのクオリティではない)を作ってみました。

使用したもの

  • Go 1.17
  • tview
    • TUI作成のライブラリ的な

できること

  • ターミナルでテキサスホールデムのヘッズアップがなんとなくできるよ

モチベーション

今回作成するにあたっては、大きく以下の2つのようなモチベーションで作りました。

  • Goのキャッチアップがしたい!!
  • TUIアプリを作ってターミナル作業に疲れたら遊びたい!!

1つ目のGoのキャッチアップに関しては、
僕がアトラエにJoinしたのが今年の7月なのですが、前職では主にインフラの領域を触っていたということもあり、
Greenで使用される技術の1つとして、完全初心者であるGoのキャッチアップをしたいと思ったからです。超絶シンプルです。

2つ目については、以前にQiitaで見かけたファイルパーミッションでスロットがしたいという記事に衝撃を受け、
自分でもTUIアプリを作っておもろいことがしたくなったからです。。

TUIの画面構成

こんな感じでターミナル上で動くアプリをTUIアプリと呼ぶ(らしい)のですが、Golangには多数のTUI作成用のライブラリがありました。
こちらの記事を参考にしつつ結論、新し目でイケてそうなやつということで今回はtviewを採用しています。

Player & Enemy Table

スクリーンショット 2021-12-13 21.04.11.png

見たまんまの情報ですが、ターミナル向かって左側がPlayer's Table、右側がEnemy's Tableとなっています。

名前 用途
Hand プレイヤーに配られた2枚のカードの内容(Enemy側はShowDown時にオープン)
Total Money 残りの金額
Bet ベットしている金額
Action Fold, Call, Raise, Checkの各アクションとTUIを終了するQuit(Enemy側は存在しない)

基本的にプレイヤーはActionのリストの中から選択して、ゲームを進行するような感じです。

Center Table

スクリーンショット 2021-12-13 21.12.58.png

プレイヤーに紐づかない情報や、ゲーム自体の管理に関する情報はTUIの真ん中に大きく枠を取ってます。

名前 用途
Turn ターンの進行
Pot 溜まったPotの額(今回は両プレイヤーのベット数に等しい)
Flop フロップのカード情報
Information 現在の進行情報や手役の結果など

半分挫折したとこ

今回かなり見切り発車で作ったこともあり、以下の課題点を残してます。

  • 手役が同じ時に勝敗の判定がイカレる(くそ)
  • Raiseする時にベット額指定できない
  • Enemyのアクションがテキトーなランダム
  • そもそもポーカー初心者なのでヘッズアップのルール的に合ってるか怪しい

この辺りは随時修正しつつ、特にEnemyのアクションなどは今後面白くしていけたらいいなと思います。

TUIアプリを作ってみて

今までターミナルは好きであれどTUIアプリとか独自コマンドみたいのは全然作ってこなかったのですが、
ライブラリの充実により比較的簡単に且つ愛用ターミナルの上で自分のゲームが動くのはシンプルに楽しかったです!

とりあえず、「疲れたからターミナルでポーカーで遊ぶ!!」はできると思うので、よかったら試してみてください!

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1