Texas-Poker-platform

$ 程序的配置与运行方法
1. 设置初始参数
    在server.py中,可修改如下参数:
        initMoney 初始钱数
        bigBlind 大盲注
        totalPlayer 玩家人数
        button 庄家位置

2. 设置AI
    (1)在client.py中,增加import语句 'from AI.xx(AI文件名) import xx(AI函数名)
    例:from AI.naive import naive_ai即使用AI文件夹下naive.py文件中的naive_ai作为AI
    
    (2)在client.py最后的main routine中,修改‘# ****……*** modify the following sentence to use your own AI****……*****’
       下方的句子 'c = Client(username, xx)',其中xx为AI的函数名
    例:c = Client(username, naive_ai)即使用函数naive_ai作为AI
    
3.安装gRPC
    本程序须在gRPC环境下运行。

4.make
    在主文件夹下,输入make命令
    linux> make

5.设置服务器地址和端口
    在client中将address修改为server端的地址
    在server和client中修改port变量来设置端口

6.运行server端
    在主文件夹下,输入命令:
    linux> /opt/anaconda3/bin/python server.py

7.运行各client端
    在client文件夹下,输入命令
    linux > /opt/anaconda3/bin/python client.py n
    其中n为该client的位置编号,取值为0 ~ totalPlayer-1

    例:4玩家模式,则在4个不同的终端下进入client文件夹,分别输入
    linux> /opt/anaconda3/bin/python client.py 0
    linux> /opt/anaconda3/bin/python client.py 1
    linux> /opt/anaconda3/bin/python client.py 2
    linux> /opt/anaconda3/bin/python client.py 3


$ 平台特性介绍
-server端和client端会输出必要的状态信息
-支持断线重连:若某一client在中途掉线,可以以同一位置重新连接,继续游戏
-15s等待时间:若某一client在15s后仍未响应,则平台判定其自动弃牌,不再等待
-可以用人替代AI按照gRPC dealer.proto的格式发送信息,进行游戏


$ 内置AI:
naive-ai:在合法情况下随机选择放弃、跟注或加注
v1.0,v1.1: 更聪明的AI


$ server-client通信原理:
    client维护两个队列:request和response。每隔1s,client的run线程向request队列压入一个heartbeat询问信息。client的start线程通过chat_with_server句柄向server
传递request,并得到server的GameStream的回应句柄。
    server为每个client维护两个队列:request和response。每当client调用GameStream句柄时,server从client的request句柄(chat_with_server)获得一个request,并
返回response队列的一个元素。
    当server需要向client传递信息或获取信息时(比如一个决策),server将相关内容压入其response队列。
    当client收到相关内容,需要向server返回信息时,client将相关信息压入其request队列。