2015华为软赛(四)——数据结构设计
来源:互联网 发布:applem2传奇引擎源码 编辑:程序博客网 时间:2024/06/04 14:08
点滴记录总结,一天一打鸡血。
2015年5月华为组织了一次软件精英挑战赛,赛题是德州扑克手牌AI~
环境及测试说明:http://pan.baidu.com/s/1dD2dL0P
代码质量在于数据结构,代码质量在于数据结构,代码质量在于数据结构!重要的事情说三遍!!!只是说它重要,细思恐极,说的好像设计出吊炸天的结构呢~事实不是这样的,但能有个数据结构还是很不错的。
首先预定义一些比较好记住的全局变量,方便后续操作:
//牌色,桃、杏、梅、方#define SPADES 0#define HEARTS 1#define CLUBS 2#define DIAMONDS 3//押注圈,上一节介绍过的-_-#define HOLD 0#define FLOP 1#define TURN 2#define RIVER 3//辨识出的牌型,九个,值越大,牌力越大#define HIGHCARD 1#define ONEPAIR 2#define TWOPAIR 3#define THREE 4#define STRAIGHT 5#define FLUSH 6#define FULLHOUSE 7#define FOUR 8#define STRAIGHTFLUSH 9
游戏会有很多信息,捻重要的关键的来定义一个己方游戏信息的结构体:
typedef struct GameInfo { int jetton;//筹码数 int card[2];//手牌 int call;//这次需要跟注的筹码数 int total_call;//这一局总共跟了多少 char s_blind[DATA_SIZE];//谁是小盲注 char b_blind[DATA_SIZE];//谁是大盲注 int players;//现在剩多少玩家在桌上 int folds;//现在已经弃牌的玩家数 int left;//剩余玩家数players-folds,冗余}GameInfo;
需要对手牌解释一下,看过一篇文章,可以将牌型按位存取,这样存取效率高,但是编码效率比较低。这里设计每张牌为一个整型变量a=29,那么它的花色为a/14=1,1==HEARTS,也就是红桃,它的大小为a%14=1, 那就是2,并不是A,A表示13。
碰到自己牌力比较大的情况,比如straigh,flush,full_house,four,straight flush等,可能的决策就是不管不顾或跟或加或all-in,这样有风险,尽管不太大,但是一旦对手更大,就被吊打。所以为提高稳定性,设计如下结构体:
typedef struct Four { int own;//自己有4,5张 int com;//公牌有4,5张}Four;typedef struct Flush { int own;//4,5 int com;//4,5}Flush;typedef struct Straight{ int own;//4,5 int com;//4,5}Straight;typedef struct CardType { int my_type;//1-9,牌型 Flush f_card; Straight s_card; Four four; int three; int pair[2]; int high_card;//高牌}CardType;typedef struct GameJetton{ int hold;//第一个押注圈押注总数 int flop;//第二个... int turn;//第三个... //这是用来计算每一圈投资总数,有第三圈就能算第四圈的总数了,所以没有river}GameJetton;
由于时间有限,就简单设计了这些个结构,效果还行,拓展性也可以,缺陷是不够全面和智能,这是最最最基本的东东了,没有这,没法往下走。
下一小节将介绍一些最最最基本的功能函数。
0 0
- 2015华为软赛(四)——数据结构设计
- SQL查询优化——数据结构设计
- 数据结构设计——考生报名管理
- 网络拓扑结构设计(四)
- Cpp Concurrency In Action(读书笔记5)——基于锁的并发数据结构设计
- 数据结构设计——班级个人信息管理系统
- 读书笔记—数据结构设计中的有用以及无用信息
- 数据结构设计
- 数据结构设计
- 数据结构设计
- SharpStreaming项目开发纪实:构建基本的服务器及客户端应用(四)——总体结构设计(服务器端)
- android开发—项目结构设计
- 华为OJ(四)
- 华为OJ(四)
- 华为组(四)
- 数据结构设计随想
- 权限管理数据结构设计
- 嵌入式数据结构设计
- mysql5.6 忘记root密码
- 智能算法之仿生算法
- Java多线程下载
- 写给自己的话
- State Pattern状态模式(三)
- 2015华为软赛(四)——数据结构设计
- Dubbo 架构分析
- OC基础5:继承
- 从尾到头打印链表
- STM32W108无线ZigBee射频芯片引脚说明(下篇)
- Java程序员应该知道的10个eclipse调试技巧
- 发下牢骚(一)
- Hadoop入门系列(3) -- Eclipse+Hadoop开发环境搭建
- 推荐使用Numba加速Python科学计算