维生素C.net

IronRuby, CLR/DLR, Debugging
posts - 88, comments - 369, trackbacks - 10, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

网友王集鹄组织了一个编程比赛:划拳机器人比赛。类似“Robocode” 的游戏。
早先Microsoft就推出过一款名为
Terrarium的code game,其实这种游戏已经有相当久的历史了,很多人都将其看成是那些hacker们的游戏。

-------

比赛相关帖子如下:

【编程游戏】编写一个会划拳的机器人参加擂台赛,规则内详。
http://topic.csdn.net/u/20080421/17/6a4d1c20-e1d1-4e9d-99ae-d648cb422ca6.html

【编程游戏】划拳机器人,前面一贴的机器人都集中来了,继续PK。谨慎路过。 
http://topic.csdn.net/u/20080423/21/cda52758-a06d-49e1-9db0-eda2b009da8c.html

很有意思的,为了让更多人能参与到这个很有趣的 .NET 编程比赛中来,我转了下面的内容:

划拳介绍

      划拳又叫豁拳、猜枚、猜拳、拇战,即饮酒时两人同时伸出手指并各说一个数,谁说的数目跟双方所伸手指的总数相符,谁就算赢,输的人喝酒。此乃我国
古传至今仍时尚流行的饮酒游戏,它增添酒兴,烘托喜庆,是一种民间的酒令。 其技巧性颇强,给玩者留有神机斗智的余地,且因玩时须喊叫,易让人兴奋,极富竞争性。
两人同时伸出一只手,用攥起的拳头和伸出一到五个手指,表示从零到五这几个数字,与此同时,嘴里喊出从零到10的数字,如果两人伸出的手指表示的数字相加与其中一个人嘴里喊出的数字相同,那么这个人就算赢了这一拳。举例说明:比如一个人伸出了三个手指,另一个人伸出了四个手指,一个人喊了七,另一个喊了六,那么这个人喊七的人就赢了;如一个人伸出攥紧的拳头(表示零),嘴里喊出了三,而另一个恰好伸出了三个手指可嘴里喊的七,那么喊三的就赢了。就这么简单。当然,如果自己喊的是“八仙过海”, 而自己仅伸出了一个手指,那么对方即使伸出五指也不可能凑成八,这种拳就叫臭拳,如果不是事先约定,是要罚酒的。

    划拳规则看完了,那我们就开始写一个会划拳的机器人吧!
    那么一个会划拳的机器会做什么事情呢?其实就是两件:

第一件、出拳,即:自己出几个手指?自己猜合计是多少。
第二件、知道划拳的结果,即:对方出几个手指,对方猜合计是多少,是否获胜还是平局还是其他。
   只要继承Drunkard这个类,重载Come()和Outcome()方法那么你就拥有了一个会划拳的机器人,参与这个游戏了!

【游戏规则】
1、比赛共1000局,即:出现胜负算一局,如出拳100次没有结果也算一局并双方均不得分;
2、赢一局得1分、输不扣分;
3、机器人执行中每出现一次异常,扣100分、对方加1分、记一局;
4、机器人执行中反应超时1000毫秒直接判负,每超时100毫秒,扣1分,超时10次以上直接判负;
5、自己得分高于对手并大于600分判胜;
6、自己得分为正数对手得分为负数判胜;
7、其他情况则判平。
具体执行的过程,算法的过程请参考Drunkery <T1, T2>类的实现

【入门提示】
1、机器人的命名建议是: <自己的id> +  <第几个> + "号",如:Zswang一号、Zswang二号,当然你也可以用“长江七号”
2、不允许修改Drunkard和Drunkery <T1, T2>;
3、机器人必须从Drunkard继承;
4、分析擂主代码是战胜擂主的关键;
5、打擂容易守擂难,大家自由发挥吧!

【擂台赛规则】
1、第一个打败擂主的机器人奖励20分,并成为新的擂主;
2、自己不能挑战自己编写的机器人;
3、最后一个擂主获得200专家分,发帖另付;
4、其余分数酌情散掉。
标准代码和比赛规则有什么不妥或者建议欢迎讨论,谢谢关注

----------

具体内容还是到作者的blog去看吧。

----------

有能力的朋友可以考虑如何把它移植到一个平台上:
1.可以多人对战
2.有一人输了3次后就要退出.

这样才算有点挑战性.

Feedback

#1楼    回复  引用  查看    

2008-04-24 11:06 by 随风流月      
下次 Cnblogs 组织个更有趣的 :)
并且最好有一个 Form Shell,规则也应当更复杂一点,那才好玩。

#2楼    回复  引用  查看    

2008-04-24 11:59 by xc#      
支持

#3楼    回复  引用  查看    

2008-04-24 12:06 by 没剑      
偶希望园子里有类似的活动,这样子偶一定尽全力参加,哈哈

#4楼 [楼主]   回复  引用  查看    

2008-04-24 12:11 by new 维生素C.net()      
@随风流月
@没剑
我跟dudu提一下这个建议

#5楼    回复  引用  查看    

2008-04-24 12:17 by 簡簡單單..      
呵呵! 老王确实很有心思..

#6楼    回复  引用  查看    

2008-04-24 12:27 by 随风流月      
@new 维生素C.net()
如果有,一定通知我,哈哈。

#7楼    回复  引用  查看    

2008-04-24 12:44 by Phinecos(洞庭散人)      
做acm题目?

#8楼    回复  引用  查看    

2008-04-24 13:47 by 李战      
同意!交楼主具体办理

#9楼    回复  引用  查看    

2008-04-24 13:49 by Zhuang miao      
那个机器人随机性太大了,通过研究上一个是可以战胜它。。但是只是战胜上一个,说不准被第一个淘汰的打败了呢~呵呵

#10楼    回复  引用    

2008-04-24 14:04 by 007 [未注册用户]
目标不够明确。

#11楼 [楼主]   回复  引用  查看    

2008-04-24 16:30 by new 维生素C.net()      
@Phinecos(洞庭散人)
那样没什么意思吧.园子应该弄点有特色的

#12楼    回复  引用  查看    

2008-04-24 16:41 by 没剑      
弄个打架机好不?
或者要不就弄大点,弄成web网页游戏一样的,dudu老大可以做一个"dudu"这样的boss,然后我们根据dudu老大放的接口,然后来制作自己的战士,然后跟dudu拼,拼得赢就有奖,哇哈哈~~~
而且整个园子里都可以群PK。。。哈哈。。。

#13楼    回复  引用  查看    

2008-04-24 21:04 by dudu      
谢谢new 维生素C.net() 的建议!
博客园会在发展过程中考虑建立这样的平台。

#14楼    回复  引用  查看    

2008-04-24 23:03 by gogoplayer      
@Phinecos(洞庭散人)
^_^,可爱的acm啊

#15楼    回复  引用  查看    

2008-04-24 23:34 by KymoWang      
感觉太随机了,没什么意思

#16楼    回复  引用  查看    

2008-04-25 01:17 by 没有昵称      
自己出数完全随即就可以了。这样因为自己出的数字是均匀分布,因此理论上对方分析自己的历史数据是完全没有意义的,因为自己下次出哪个跟以前的数据完全无关,概率总是1/5。这样如果对方有学习机的话,就会使他的学习机失效。

因此,只有在双方都使用了学习机的时候,才会因为算法的优劣而影响胜负。

所以,最简单、可靠、聪明的方法,就是完全随即的出牌,并且完全随即的猜测对方的牌。可以保证有50%的胜算。

#17楼    回复  引用    

2008-04-25 02:02 by windsor [未注册用户]
楼上说的有理,没有套路就没有破解,哈哈~

#18楼    回复  引用  查看    

2008-04-25 09:35 by 超晨      
以前不是有个tank robot么?比较有意思

#19楼    回复  引用    

2008-04-25 10:58 by [未注册用户] [未注册用户]
哎.随机其实是最没意思的玩法..

#20楼    回复  引用  查看    

2008-04-25 22:21 by 费哥      
人和人划的话不一样了,要察言观色的,我一般胜率在70%左右

#21楼    回复  引用    

2008-04-26 02:53 by smt [未注册用户]
路过

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-04-24 12:13 编辑过
Google站内搜索

China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》



相关文章:

相关链接: