作者NDark (溺於黑暗)
看板GameDesign
标题[心得] 浏览"How i built ... poker bot?"心得(上)
时间Wed Jan 13 19:37:39 2010
浏览"How i built a working online poker bot?"心得
作者:NDark
时间:20100113
参考网站:
http://www.codingthewheel.com/archives/how-i-built-a-working-poker-bot
前言
我会去看这页面是由於一位朋友(这边称L先生)对这个有兴趣,但又技术不足,
因此我总共花了4个晚上(不含文章撰写)
把James Devlin这一系列相关的文章大致上看过一遍。
所谓大致上就是我没有每段都去仔细看。因此本篇文章只能说是一个心得报告。
对於有兴趣的人只能说是个导读。
我认为这篇文章应该属於AI应用的部分,因此应该适合本版。
James Devlin先生是一个视窗程式程式设计工作者与扑克玩家,
他在完成自己的线上扑克机器人後在2008年初开始发布这一系列文章。
主要说明你要怎麽建置自己的线上扑克机器人。
很重要的第一点是:
Devlin说到:"为了能赢,你必须让你的机器人不能赢"。
因为这个机器人是在现实世界赚真实的钱,一旦赚的太凶可能会把地球玩垮XD。
(他的意思大概是这样没错,原意复利与倍数的级数会导致赚钱的速度高过你的想像,
以至於到最後你没办法获利[不管是被盯上或是钱都赚光了]。)
很重要的第二点是:
线上扑克的客户端程式基本上都是间谍程式-
"online poker client are basically spyware"
是为了纪录你浏览过哪些网页,是否开启什麽程式。
很重要的第三点是:
透过线上扑克机器人,你还是不可能看透对手的牌。(对手的资料没有存在客户端)
很重要的第四点是:
建议不要使用非原生语言来撰写,因为你要处理的东西是视窗程式,
因此越能靠近它的语言是最好的,如C++。
"C# and other managed code is not suitable for this case"
L先生曾经找过程试设计的工作者来估价这个系统,结果是30万。原本我以为太贵,
但是等我全部把这一系列文章都看完,我觉得确实值这个价钱(甚至更高)。
短时间之内,我并不想投入这个金钱游戏,
因为我还不觉得这个工作可以让我长久专心投入。
系统
简单来讲,要完成一个线上扑克机器人你会需要建置一个系统
以架构来说,你会有
1.虚拟的bot程式或PC若干。
2.一个主控伺服器控制各PC上的bot程式唤起或结束,收集资讯。
3.资料伺服器:bot的历史资料。
4.收集伺服器:收集线上的各种资料库。
以流程来论
input processing output
撷取资讯 处理资料 输出驱动
撷取资讯-从线上扑克的程式撷取资料的系统,这里牵涉比较多的视窗底层运作。
处理资料-从目前牌桌状况决定要作什麽的系统,这里则是AI与扑克理论。
输出驱动-按下线上扑克程式的控制项并真正反应的系统。
所谓"简单"是指你已经有下列这些背景知识之後会较为简单,
如果你没有这些背景知识(像我一样),那麽整个工程会变的相当大,
幸运地,作者释出了他部分的程式码,你可以照抄照改。
会需要学习的程式技巧(What skills will I need to write a bot?)
Windowing & GDI
Windows Hooks
Kernel objects
DLL Injection (in general: the injecting of code into other processes)
API Instrumentation (via Detours or similar libraries)
Inter-process Communication (IPC)
Multithreading & synchronization
Simulating user input
Regular expressions (probably through Boost)
Spy++
会需要学习的技术领域
Artificial Intelligence.
Poker Strategy.
Input Simulation.
Operating Systems.
Reverse Engineering.
Probability and Statistics.
建议读物(Recommended Reading)-程式设计类
Windows via C/C++. Jeffrey Richter.
Exploiting Online Games: Cheating Massively Distributed Systems
(Addison-Wesley Software Security Series).
Exploiting Software: How to Break Code (Addison-Wesley Software Security
Series). Greg Hoglund and Gary McGraw.
建议读物(Recommended Reading)-牌局类
The Theory of Poker. David Sklansky.
The Mathematics of Poker. Bill Chen and Jerrod Ankenman.
Professional No-Limit Hold 'em: Volume I. Matt Flynn, Sunny Mehta, and Ed
Miller.
No Limit Hold'em: Theory and Practice. David Sklansky and Ed Miller.
Gambling Theory and Other Topics. Mason Malmuth.
Getting Started in Hold 'em. Ed Miller.
作者有释出的程式
XPokerBot
XMonitorBot
XFileMonitor
作者收集到的算牌函式库
Poker Hand Evaluators : collect open-source poker code
The Pokersource Poker-Eval library
The Java enumeration library built on top of Pokersource
Keith Rule's C# port of the Poker-Eval library
Cactus Kev's 5-Card Evaluator
Paul Senzee's Improved 5-Card Evaluator
Paul Senzee's 7-Card Evaluator
Moritz Hammer's Directed Acyclic Graph-based 7-Card Evaluator
Steve Brecher's HandEval routines
The Two Plus Two 7-Card Evaluator
(未完待续)
--
"May the Balance be with U"(愿平衡与你同在)
视窗介面游戏设计教学(
http://0rz.tw/V28It ),讨论,分享。欢迎来信。
视窗程式设计(Windows CLR Form)游戏架构设计(Game Application Framework)
游戏工具设计(Game App. Tool Design )
电脑图学架构及研究(Computer Graphics)论文代读(含投影片制作)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.96.77.176
1F:推 ddavid:有个朋友才没多久前也跟我提过一样的事,该不会同一人吧XD 01/13 19:56
2F:→ ddavid:我虽然会打TH也算有程式能力,不过特定必要技术上有所不足 01/13 19:57
3F:→ ddavid:又一时没空去学,所以我照实说暂时帮不上忙XD 01/13 19:58
4F:→ rofellosx:那怎样躲过间谍程式? 01/13 20:00
5F:推 justben:spy++是真的有这东西吗?XDDD 01/13 20:36
6F:推 wangm4a1:推 01/13 21:09
7F:推 etrexetrex:好像有道理喔 外挂直接赚现金 01/13 23:00
8F:推 KanoLoa:推推 01/13 23:12
9F:→ rofellosx:哪时开发机器人炒股 01/13 23:23
10F:推 FSVDFS:好像看到攻壳机动队的剧情了@@ 01/14 03:44
11F:推 enthos:好文! 注: Spy++(Debug用)-Visual Studio Tools 01/14 10:32
12F:推 yoco315:我曾经跟一位版友一起接过 poker bot 的 case... 01/15 00:46
13F:→ yoco315:但是只作到一半,还好是分阶段拿钱的 :D 业主後续没动作 01/15 00:47