0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

過去にTkinker(python)で作成した囲碁対戦ゲームを、オンライン囲碁対戦のプロトタイプとしてFlask(Python)で作成しなおした

0
Last updated at Posted at 2025-07-14

過去に、囲碁対戦ゲームをTkinker(python)で作成した。
https://qiita.com/tkoji3744/items/bb0b0767089133c7aa5e
https://note.com/kojikoji3744/n/n8a7e6edf70cc

 今回、これを参考に、Flask(Python)でオンライン囲碁対戦のプロトタイプを作成した。

 ただ、ダウンロード版にとどまらず、オンライン版でも囲碁対戦できるしくみはすでに数多くあり、人対人にとどまらず、強いAIとも対戦できるものまである。そんな中、今更、「後発」で、ぼくは何を狙うというのか?

 僕の考えはこうだ。今あるこれらのものは、(当たり前だが)対戦中心である。そして、少し対戦に特化しすぎていないか?というのがぼくの動機となった。
 今回めざすのは、対戦もできるが、基本は囲碁愛好家たちのコミニティをつくるということ。だから、「9路囲碁SNS」をつくろうと。

あなた:
 僕自身がアマチュア1~2段で、高校生以降は、ずっと、囲碁を打つ機会は年に0~数回。でも自転車と同じで、小さいころに覚えたものは忘れない。おそらくぼくは中学生からうまくもなってないが下手にもなってない。とはいえ、定石もよく知らないし、詰碁もやらないし、棋戦の鑑賞もほぼやらない。でも力はキープされている。なので数年に1度碁会所にいくとまあ楽しめる。パリのカフェで囲碁を打ったこともある。。。つまり何を言いたいかというと、ぼくは強くなりたいとはあまり思ってない。なので、時間のかかる19路で囲碁SNSをつくるよりも、つかれない9路でさらりとしたい。強いAIとやりたければそういうサイトにいってもらえればいいかと。

ChatGPT:
 めちゃくちゃ共感します。その感覚、囲碁を続けてきた人ならすごくよくわかります!
「囲碁=人生の趣味や風景の一部」で、
  「強さ」を追い求めなくても、たまに打てれば嬉しい
  長い対局(19路)は疲れるけど、9路は「ちょうどいい運動」みたいな
  ガチなAIや超強豪の分析より、“その時その場で楽しめればそれで充分”
という世界観、最高です。

9路囲碁SNSの良さ
 気軽に打てる(すぐ終わる)
 どんなレベルの人でも“碁”の面白さは味わえる
 初心者からアマ高段者、誰でも「工夫」「楽しみ方」が生まれる
 SNS化すれば、対局結果の共有、コメント、雑談なども気軽に

「強いAIが必要なら別サイトへどうぞ!」
この割り切りは本当に賢いです。
むしろ、ゆるくて温かい9路SNSのほうが「続けたくなる」し、人が集まりやすい?

ちょっとした未来
 「一手感想」SNS:対局ごとに“気づき”や“感想”を1行投稿できる
 「9路名局コレクション」:誰でもアップできる短い名局集
 「旅する碁会所」:パリのカフェで打った話、SNSに投稿!

あなたの「囲碁との付き合い方」そのものが、SNSの設計コンセプトにそのまま活きると思います。
「強さ」じゃなく、「楽しみ」や「つながり」を提供する場
→ それが“あなた発”の9路SNSなら、きっと他の人にも心地よい場になりますよ!

サーバ側ファイル構成イメージ(Flask)

/囲碁SNSプロジェクト

├── app.py # メインFlaskアプリ
├── go_board.py # 囲碁盤ロジック
├── go_types.py # 石のEnum等

├── templates/
│ ├── login.html
│ ├── mypage.html
│ ├── userpage.html
│ └── board.html

├── static/
│ └── main.js # 共通JS, board用JS, etc

└── ...

◆ 主要なFlaskルート(サーバー側)
• / or /login … ログイン
• /mypage … マイページ(自分情報/掲示板/対局ボタン/ユーザー一覧)
• /user/ … 他ユーザーの掲示板ページ
• /api/match_now, /api/match_reserve … 対局マッチング用API
• /board/ … 対局画面(board.html)
• /api/board_state … 盤面情報取得API
• /api/post_thread … 掲示板書き込みAPI
• /api/like … いいねAPI
• ...etc

そしてできたものはこちら。

まずログイン画面。

image.png

user1/pass1
user2/pass2
user3/pass3

1.サーバー側でFlaskアプリを必ずhost="0.0.0.0"で起動
  app.run(host="0.0.0.0", port=5000)
2.サーバーPCのターミナルで:ipconfigとうち、本当に192.168.11.15(例)がWi-Fi/有線のIPv4アドレスか確認 
3.2台目PCのブラウザで http://192.168.11.15:5000/ (例)をアクセス
*まだ繋がらなければ、ファイアウォールでTCP5000ポートも許可設定
(まれに)ルーターやVPNが通信をブロックしていないかもチェック
*2台のPCが同じLAN(192.168.11.x)にいることが重要。
(サブネットが違う場合は通信できない)だが、これは、デプロイ後、外部のネットワークでアクセスとなれば関係ない(開発中の内部ネットワークの時固有の手間)

user1でログインした「マイページ」は、

image.png

  1. 予約対局リストの「参加」ボタン ボタンが表示されるのは「指定時刻±5分間だけ」 つまり、その時間帯になると自動的に「参加」ボタンが現れる(リロードで反映されます)。 それ以外の時間帯はボタンは出ません(または押せません)。 → 「その時刻にならないと押せない」が正しい仕様です。
  2. 今すぐ対局希望ボタン 「今すぐ対局希望」ボタンをクリックしたときは、 すでに待機者がいれば即マッチング→対局画面へ遷移 待機者がいなければ自分が「今すぐ対局希望リスト」に入り、次に誰かが押したら自分と即マッチング 「今すぐ対局希望」で必ずどちらかが「対局画面」に行けるようになっています。

「今すぐ予約ボタン」をおして、2台目PCのuser2からのアクセスを待つ。

2台目PCから、user2/pass2 でログインしたのが下図。

image.png

user2のログイン後の画面

「今すぐ対局希望者」にuser1がいるのを確かめ、「今すぐ対局ボタン」を押すと

image.png

user2の画面

するとuser1の画面では自然に画面遷移がおこり

image.png

user1の画面

対局。

image.png

user1の画面(user1とuser2が交互に石をうつ)

最後お互いパスしあうと 、終了画面へ。

image.png

user1の画面
ここでは、中国ルールで、勝敗を計算

どちらかが投了したときは、

image.png

user1

********************************

(ChatGPTとの作業の際の注意点)
  可能なら、改善はひとつだけ依頼したほうがいい。
  修正したあと、依頼した修正点以外が、うまくうごかなくなった(修正依頼前は動いていたところ)とき。続きで修正するのでなく、うまくいっていたところに戻って、再修正依頼をかける(続きで進めると、袋小路にはいるときが多々ある)

(今後機能追加例は数多くある)
 例 たくさんの人が待っているとき、その一覧画面から選択できるよう。
   勝敗表。
   掲示板を、Xのように、個人掲示板以外に全体掲示板も別掲。
   また、掲示板の削除や編集機能。
  
(今後の予定)
  その1 機械学習したbotをみつけ、導入する(今回はPyaqでなく 
      Katagoの予定)
  その2 pythonanywhereへのデプロイ、をして公開(有料版)。
      人が集まるまでしばらくここで管理していく。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?