Giter Site home page Giter Site logo

poker-bot's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

poker-bot's Issues

[bug] permitCheck逻辑错误

  1. preflop阶段,没有人raise,大盲位应该可以check
  2. 多人游戏,A raise 60,B all in 20,C call,回到A时,A应该可以check

判断是否能够check的依据应该为:
当前玩家的下注是否不少于其他所有玩家的下注

添加manage层逻辑

添加manage层逻辑,保存与游戏逻辑无关内容,并维护其他状态。

完善Table逻辑

table逻辑规约如下:

  1. table在manager.py中管理,libs/game.py只负责单局游戏
  2. table的字段如下:
    • 指向game的指针
    • 房主
    • 用户id: list
    • 当前正在等待行动的用户id
    • 等待倒计时
    • 上一次记录的游戏轮次(最新的游戏轮次可通过game.get_round_status_name()获取
  3. 一局游戏的逻辑如下:
    • table调用game.start()开始游戏,成功返回后,manager中的函数timer_function会被调用,进入无限循环,且每隔一秒会调用mainloop函数
    • mainloop被调用会通过game读取当前游戏的状态,如果状态与table中保留的状态相比发生了变化(等待行动的id变化游戏轮次改变),则将倒计时复位,否则倒计时-1
    • 当倒计时为0时,调用game的check_or_fold(暂未实现,使用pfold代替)
    • mainloop中获取游戏状态为END的时候,结束游戏,输出结算信息,等待N秒后,调用game.start()继续下一局(暂时实现为结束运行)
    • 在上述过程中,接受外部输入,并调用game的相关接口

集成sqlite

用户join到牌桌时,自动登录,并提示用户剩余筹码

消除channel和table的弱关联

认为一个channel中最多只有一个table,将channel与table当做一个实体。
消除代码中关于channel和table的转换。

精简game kernel

目标让game类只处理一局游戏,内部只是一个自动状态机,接受外部请求并处理。

  • 将timer移出game,在gameManager中设置一个每隔1s自动触发的mainloop函数,它会主动调用game中的接口并主动获取game当前信息
  • 将table相关的信息移出game

添加help功能

添加help功能,显示目前所有可用操作。
游戏开始时提示“可输入help获取帮助”。

小盲规则错误

两人单挑时,小盲位应和庄位重合。ref

In heads-up play with two blinds, the small blind is on the button.

撤回展示的旧数据

目前的实现是:每当进入一个新的状态,重新输出当前游戏状态,只有在读秒时触发更新操作。理想的实现应该是总是只有一个输出消息被固定在屏幕上。然而这一点难以实现,可以等效为删除之前展示的旧数据,然后发布新数据。

优化游戏提示

例如:

  • 显示手牌时使用emoji代替文本
  • 输出当前游戏状态

等等。。。

start导致程序崩溃

start在执行时没有进行游戏状态检查,随时可能导致程序崩溃
可以考虑精简timer_thread的逻辑、优化continuestart的关系

处理游戏结束逻辑

规约如下:

  1. 判断进入游戏结束的时机
    • 有人fold
    • RIVER阶段结束
  2. 可能的情况
    • 存在多个用户,需要比较大小
    • 只剩一个用户
  3. 当游戏进入END阶段,需要将game中的一个字段(game_result)置为游戏结果
    • game_result结构的字段:
      • 结束类型(多个游戏玩家/一个玩家)
      • 赢家 list
      • 底池分配(id, chip)

支持并发

支持并发操作,有两种方案:

  1. 内核中的关键操作加锁
  2. manager中判断操作能否进入内核

kernel添加测试

为kernel添加测试。

  • 测试框架。
  • 单元测试。
  • 正确性测试。

bot间对战无响应

复现方法:

open
bot
bot
leave
start

预期效果:
两个bot完成一局游戏

将交互逻辑从table中分离出来

把bots/game的调用从table.py中移除。

  • 统一管理对slackapi的调用。
  • 将包装过的,与游戏逻辑相关的交互逻辑放到bots/game里。
  • 将调用交互逻辑的代码放到libs/manager里。
  • table只保留关于多局游戏的逻辑。

游戏结束时展示手牌

规则如下:

  • 只剩下一个人时不需要展示手牌
  • 剩下多人时,展示牌的顺序从河牌圈的激进者(首先下注或加注者,都check则为第一个行动者)开始依次往后,如果待展示的手牌比之前展示的所有手牌都大,则亮出该手牌;否则不亮牌
  • 在河牌圈之前所有玩家all-in,所有人都需要展示手牌

支持多种client连接

支持多种client连接,例如qq,自定义client等。
可以将client设计成插件或其他模式来完成。

游戏流程

  • 任何人都可以开始一局游戏
  • 任何人都可以在任意时刻加入一张桌子(但是需要等待下一局)
  • 任何人都可以在任意时刻退出一张桌子(当前局视为fold)
  • 桌子可以在以下情况下被解散:
    1. open后2min内没有start
    2. 游戏人数只剩一个人(最好此时进入2min倒计时)
    3. 至少两人同时同意解散一张桌子(比如有人没有显式退出,却一直在牌桌上,影响游戏体验)

bot

游戏内所有操作没有通知bot。

设想:

  1. 设计一个api,通知bot游戏内其他玩家的操作。
  2. 轮到bot执行时,调起bot。
  3. 开发强力bot。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.