【Python多人游戏】德州扑克TEXAS

写在前面:

本项目仅限于娱乐及学习交流,严禁用于商业或非法用途,否则由此产生的一切后果均与作者无关!

项目链接:

GitHub - moyuweiqing/Texas: 德州扑克在线对战,多人对战


目录

1. 环境和第三方库

2. 技术栈

2.1 tkinter构建界面

 2.2 socket通信

2.3 threading多线程

2. 画牌

3. Player类

4. Texas类

5. 不足


1. 环境和第三方库

python版本: 3.7

第三方库及对应的版本:

pillow    7.1.1


2. 技术栈

2.1 tkinter构建界面

本项目使用tkinter构建客户端界面,用户可以在客户端的界面上进行游戏操作,由于tkinter是python自带的库,因此不需要额外导入。

tkinter界面

 2.2 socket通信

socket通信,使用socket进行客户端与服务端的通信,但由于本人对于socket编程并不是很熟悉,所以socket通信部分的代码写得很烂,对于数据传输用的是类似于json结构的字符串,在传输后再将字符串转为json结构体进行解析。

2.3 threading多线程

使用多线程编程,同时监控服务端和客户端的多个传输信息的情况。


2. 画牌

使用tkinter进行画纸牌,用到了图片库PIL,代码比较简单。

from PIL import Image, ImageFont, ImageDraw

cardnum = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
flowers = {'spade': '♠', 'heart': '♥', 'diamond': '♦', 'club': '♣'}
for c in cardnum:
    for f in flowers.keys():
        im = Image.new('RGB', (100, 150), (255, 255, 255))
        dr = ImageDraw.Draw(im)
        ft = ImageFont.truetype(font='arial', size=40, encoding='gb18030')
        if f == 'heart' or f == 'diamond':
            dr.text((30, 50), c + flowers[f], fill='#FF0000', font=ft)
        else:
            dr.text((30, 50), c + flowers[f], fill='#000000', font=ft)
        im.save('./cards/' + c + f + '.jpg')

im = Image.new('RGB', (100, 150), (255, 255, 255)).save('./cards/block.gif')

3. Player类

玩家类,玩家类的主要功能是建立玩家对象,并对玩家的行为进行操作,主要含有以下的方法:

玩家类的主要函数
函数名参数功能
__init__()

player_name: 玩家姓名

id: 玩家id,默认为客户端的ip和端口号

chip: 初始化筹码量

初始化一个玩家对象
game_init()-初始化玩家角色、行为等
get_act()

act: 玩家当前角色

now_chip: 开局下的筹码

获取每一局玩家的角色和开始的筹码量
get_action()last_chip: 上家的投入筹码量获取客户的行为信息
change_name()name: 玩家姓名更改玩家姓名
change_chip()

action: 当前动作

now_chip: 投入筹码

改变筹码
check_out()check_chip: 结算筹码筹码结算

4. Texas类

Texas类是用于开始一句游戏的,里面会调用到Player类,主要含有以下的方法:

Texas类的方法
函数名参数功能
all_init()--游戏初始化
init_cards()--初始化纸牌
add_player()player: 玩家类添加游戏玩家
show_off()--展示所有牌
start_round_call()--开始第一轮叫牌
make_player_init()--游戏玩家初始化
get_max_chip()--获取当前最大已押筹码
get_status_info()--获取所有玩家的状态
get_call_list()--获取玩家起叫顺序
choose_act()--获取各玩家的位置角色
check_out()--结算
check_out2()--比牌结算
if_last_player()--判断是否是最后一个玩家
get_random_card()--获取随机的纸牌
send_cards()--发牌
send_flop()--翻牌圈发牌
send_turn()--转牌圈发牌
send_river()--河牌圈发牌
if_the_same_chip()--判断是否是一样的筹码
get_all_user()--获取各玩家的位置情况
__init__()--初始化类

5. 不足

  1. 对于双方都直到河牌圈之后比牌大小的情况 ,游戏中没有进行比较,玩家比牌的情况需要在服务器端输入赢家。
  2. 结算部分,对于不同筹码玩家之间的all in等一些存在筹码差距的情况,游戏中并没有进行处理。
  3. 由于本人对于网络通信的编程水平有限,socket编程部分代码比较水。 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于深度强化学习的德州扑克AI算法优化python源码+项目说明+模型.zip 本论文题目为基于深度强化学习的德州扑克AI算法优化 结果储存在result.xlsx,以每个图的数据进行呈现,包括中期报告和论文的数据 本论文三个实验环境为: Limit leduc holdem poker(有限注德扑简化版): 文件夹为limit_leduc,写代码的时候为了简化,使用的环境命名为NolimitLeducholdemEnv,但实际上是limitLeducholdemEnv Nolimit leduc holdem poker(无限注德扑简化版): 文件夹为nolimit_leduc_holdem3,使用环境为NolimitLeducholdemEnv(chips=10) Limit holdem poker(有限注德扑) 文件夹为limitholdem,使用环境为LimitholdemEnv 本论文所设计的agent位于"/实验环境/agents/DeepCFRagent3.py",是由DeepCFRagent改进来的agent,在实验中,我们与CFR,CFR+,MCCFR,DeepCFR进行对比,Limit leduc holdem poker和Nolimit leduc holdem poker使用exploitability进行评估(exploitability衡量算法与纳什均衡的距离),Limit holdem poker环境过大,使用与RandomAgent作战的reward作为评估指标 本论文工作量: 1.本论文所使用的agent,800+行 2.本论文复现出的CFR,CFR+,MCCFR,DeepCFR算法,CFR,CFR+,MCCFR,每个算法400行左右,DeepCFR为600行,以上算法都未开源 3.本文使用的环境,我们使用RLcard作为我们的底层,每个环境大约为500行左右 4.对算法的效果进行测试,主要为含有test的py文件,此部分大约为500行左右 ......
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

moyuweiqing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值