![見出し画像](https://assets.st-note.com/production/uploads/images/143186503/rectangle_large_type_2_b29922e4257bac4f58b95e29303d6acc.png?width=1200)
1を、10に。
「一を聞いて十を知る」という言葉がある。どうやら、元は論語の言葉らしいのだけれど、百でも千でも良くない?と思ったら、「一を聞いて万を知る」(この時の万は、「バン」と読むらしい)という言葉は普通にあるそうだ。日本語って奥が深いよね。
1を聞くと10返ってくる
これも、よく使われる表現だと思うんだけど、意外とこちらは、昔からある言葉や表現ではないらしい。いい意味なのか、悪い意味なのかも、曖昧な気がする。「あの人は何でも知っていて、1を聞くといろいろ周辺情報も含めて10返してくれるんだよね、ありがたいね」なのか、「あの人、1を聞くと10を返してきて、話が長いから面倒なんだよね」なのかで意味合いも変わってくるだろう。
…で、なんでこんな事を私のnoteに書いているかというと、、、
ドンジャラかジャラポンを遊びたい
で書いたのだけれども、私は隙あらば牌で遊びたい人間なので、今日も今日とてChatGPTにこう聞いたわけだ。
私「ブラウザまたはデスクトップアプリで、ドンジャラかジャラポンが遊びたいです。Pythonで実装できますか?」
文字にして、たったの52字。
1を聞くとn返ってくる
ドンジャラやジャラポンのようなゲームをPythonで実装することは可能です。以下のステップを参考にして、ゲームの基本的な部分を作成できます。
ステップ1: ゲームのルールと仕様を整理する
まず、ドンジャラやジャラポンのルールを確認し、どのような機能が必要かをリストアップします。例えば:
-プレイヤー数
-使用する牌の種類と数
-ゲームの進行(牌を引く、捨てる、役を揃えるなど)
-勝利条件
プレイヤー数は2でいいかなぁ、ポンジャン仕様で9種9牌の81枚かなぁ、役どうしようかなぁ、と、このあたりではそう考えていた。
ステップ2: 環境のセットアップ
Pythonでゲームを実装するには、以下のライブラリを使用すると便利です:pygame(グラフィックと音声)
tkinter(シンプルなGUI)
これらをインストールするには、以下のコマンドを使用します:
[bash]
pip install pygame
pip install tk
おお。環境も教えてくれるのね。ありがとう。
ステップ3: 基本的なゲームロジックの実装
まずは、ゲームの基本的なロジックを実装します。例えば、牌の管理やプレイヤーの手牌を扱うクラスを作成します。
[python]
class Tile:
def __init__(self, suit, value):
self.suit = suit
self.value = value
class Player:
def __init__(self, name):
self.name = name
self.hand = []
def draw_tile(self, tile):
self.hand.append(tile)
def discard_tile(self, tile):
self.hand.remove(tile)
class Game:
def __init__(self, players):
self.players = [Player(name) for name in players]
self.deck = self.create_deck()
def create_deck(self):
suits = ['bamboo', 'character', 'circle']
deck = [Tile(suit, value) for suit in suits for value in range(1, 10)]
return deck
def deal_tiles(self):
for player in self.players:
for _ in range(13):
player.draw_tile(self.deck.pop())
おお。早速コードまで出力してくれている。
ステップ4: GUIの実装
pygameやtkinterを使って、牌やプレイヤーの手牌を表示する簡単なインターフェースを作成します。
[python]
import tkinter as tk
from tkinter import messagebox
class GameGUI:
def __init__(self, root, game):
self.root = root
self.game = game
self.create_widgets()
def create_widgets(self):
self.canvas = tk.Canvas(self.root, width=800, height=600)
self.canvas.pack()
self.draw_board()
def draw_board(self):
for player in self.game.players:
for i, tile in enumerate(player.hand):
self.canvas.create_text(50 + i*30, 50, text=f"{tile.suit}-{tile.value}")
if __name__ == "__main__":
root = tk.Tk()
game = Game(["Alice", "Bob"])
game.deal_tiles()
app = GameGUI(root, game)
root.mainloop()
そうね、ロジックだけじゃなくてUIないと遊べないもんね。
ステップ5: ゲームの細かいルールやインタラクションを実装
ここから先は、ゲームの細かいルールやプレイヤーのインタラクションを実装していきます。プレイヤーが牌を引いたり、捨てたり、役を揃えたりする処理を追加していきます。
このように、ステップごとに進めていくと、ドンジャラやジャラポンのようなゲームをPythonで実装することができます。具体的な部分でサポートが必要な場合は、いつでもお知らせください。
というわけで、1を聞いて43.5返してくれることがわかった!(n=43.5ともいう)
まとめ
そりゃ、1を聞いて30も40も返してくれるようになったら、いろんなものをAIに任せたくなるよなぁ、と思うだろうよ。宿題とかね。有名作品の読書感想文とかなら一瞬で出してくれそうだもんね…
というわけで、今日は、コード回と見せかけて、聞いた質問に対していかに長い回答が返ってくるか選手権の回でした。(おそらく、この選手権の優勝は、1文字だけ入れて何か返すだと思うんだけど…誰かやってみて!)
42.195倍より長かったからいいか、と変な納得をしたところで、今日はこのへんで。ほなね!
例のAI画像のコーナー
ドンジャラとかジャラポンというのは、商標登録されている名前のはずだから、ポンジャンの方がいいか。
…というわけで、ポンジャンのプレイ風景を生成していたのだけれど。
![](https://assets.st-note.com/img/1717675225331-sKuk4Ee1za.png?width=1200)
これまでで一番麻雀のプレイ風景に近い画像を手に入れた!!(かなりの枚数は生成したけどね…)
![](https://assets.st-note.com/img/1717675278531-nqzUDKw6oh.png?width=1200)
![](https://assets.st-note.com/img/1717675288396-cufI58Sc0G.png?width=1200)
いいなと思ったら応援しよう!
![りんちゅ](https://assets.st-note.com/production/uploads/images/121833590/profile_f607ea28ba34e4f4ea55b357ed7308df.jpg?width=600&crop=1:1,smart)