团队项目----基于德州扑克的数据结构分析

基于德州扑克的数据结构分析

 

游戏逻辑分析

本游戏实为“21点”扑克牌游戏,计算机作为庄家,1人作为普通玩家参与游戏。参与者设使自己的牌达到总分21而不超过这个数值。扑克牌的分值取他们的面值。A充当1分或11分(此时由玩家自己选择),“Jack”,“Queen”,”King”都当做10分。在一局开始时,包括庄家在内的参与者都有两张牌。玩家可以看到他们的所有牌以及总分,而庄家有一张牌暂时隐藏。接下来,只要愿意,玩家都有机会依次再拿一张牌。如果某个玩家的总分超过了21(称为“引爆”),则这个玩家就输了。在玩家都拿了额外的牌后,庄家将显示隐藏的牌。只要庄家的总分等于或小于16分,那么庄家必须再拿牌。如果庄家引爆了,而玩家没有引爆,玩家将获胜;如果玩家与庄家分数相同,则庄家与玩家达成平局,所投的筹码留为下一局使用。否则,庄家获胜。

玩家一共有¥1000,玩家可随意下注(不能超过剩余筹码),若玩家胜,则庄家需要拿出等额的筹码给玩家,若玩家输,则下注的筹码归庄家。

简单数据类型

本游戏用到的一些简单的数据类型如下:

undefined: 代表一切未知的事物,啥都没有,无法想象,代码也就更无法去处理了。

注意:typeof(undefined) 返回也是 undefined。

可以将undefined赋值给任何变量或属性,但并不意味了清除了该变量,反而会因此多了一个属性。

null: 有那么一个概念,但没有东西。无中似有,有中还无。虽难以想象,但已经可以用代码来处理了。

注意:typeof(null)返回object,但null并非object,具有null值的变量也并非object。

boolean: 是就是,非就非,没有疑义。对就对,错就错,绝对明确。既能被代码处理,也可以控制代码的流程。

number: 线性的事物,大小和次序分明,多而不乱。便于代码进行批量处理,也控制代码的迭代和循环等。

注意:typeof(NaN)和typeof(Infinity)都返回number 。

NaN参与任何数值计算的结构都是NaN,而且 NaN != NaN 。

Infinity / Infinity = NaN 。

string: 面向人类的理性事物,而不是机器信号。人机信息沟通,代码据此理解人的意图等等,都靠它了。

数据结构

数组,结构体(对象)

本游戏采用包含N个结构的数组,每个数据结构包括:牌的面值,牌的花色等。

var GAME={  //对象名

decks:5,

cash:0,

clearing:false,

dealing:false,

playing:false,

hitting:false,

turns:0,

maxturns:1}

JavaScript{}用来定义一个对象,大部分情况下要有成对的属性和值,或是函数,所以访问时,应该用.(点)来层层访问。

此处定义一个对象GAME,包含多个成对的属性和值。

var SUITS=[]   //牌的花色

SUITS[0]=‘Spades‘

SUITS[1]=‘Diamonds‘

SUITS[2]=‘Hearts‘

SUITS[3]=‘Spades‘

JavaScript中使用[]来定义一个数组,也可以理解为一个数组对象

此处定义一个SUITS数组存储四种不同的花色的数据。

var VALUES=[]   //牌的面值

VALUES[0]=‘Ace‘

VALUES[1]=‘Two‘

VALUES[2]=‘Three‘

VALUES[3]=‘Four‘

VALUES[4]=‘Five‘

VALUES[5]=‘Six‘

VALUES[6]=‘Seven‘

VALUES[7]=‘Eight‘

VALUES[8]=‘Nine‘

VALUES[9]=‘Ten‘

VALUES[10]=‘Jack‘

VALUES[11]=‘Queen‘

VALUES[12]=‘King‘

此处定义一个VALUES数组存储从AceKing的牌面值。

var newDeck=[]  //用来存储牌

for(var d=0;d<GAME.decks;d++){

for(var s=0;s<SUITS.length;s++){

for(var v=0;v<VALUES.length;v++){

newDeck.push([SUITS[s],VALUES[v]])//用for循环将牌存入数组

n+=1}}}

JavaScriptpush() 方法可把它的参数顺序添加到 arrayObject 的尾部。它直接修改 arrayObject,而不是创建一个新的数组。push() 方法和 pop() 方法使用数组提供的先进后出的功能。

此处定义一个数组newDeck,通过嵌套for循环,调用push()方法将牌面值和花色组合后存入该数组中。

function shuffle(){     //洗牌函数

var newDeck=DECK

var card1

var card2

var temp

for(var i=0;i<1000;i++){

card1=Math.floor(DECK.length*Math.random())

//随机选牌  Math.random取0.0-0.9

card2=Math.floor(DECK.length*Math.random())

//Math.floor求一个最接近它的整数,它的值小于或等于这个浮点数

temp=DECK[card2]

DECK[card2]=DECK[card1]//互换两张牌

DECK[card1]=temp}

DECK=newDeck}

此函数将牌的顺序打乱,同样保存在DECK数组中,相当于洗牌。

function checkscore(entity){

var hard=0

var soft=0

var h=HANDS[entity.attr(‘id‘)]

if(!h){

h=HANDS[entity.attr(‘id‘)]=[]}

for(var i=0;i<h.length;i++){

var c=$(‘#‘+HANDS[entity.attr(‘id‘)][i])

var b=c.find(‘.Back‘)

if(b.css(‘display‘)!=‘none‘){

if(b.hasClass(‘Ace‘)&&hard<=10){

hard+=11

soft+=1

}else if(b.hasClass(‘Ace‘)&&hard>10){

hard+=1

soft+=1}

else if(b.hasClass(‘Two‘)){

hard+=2

soft+=2}

else if(b.hasClass(‘Three‘)){

hard+=3

soft+=3}

else if(b.hasClass(‘Four‘)){

hard+=4

soft+=4}

else if(b.hasClass(‘Five‘)){

hard+=5

soft+=5}

else if(b.hasClass(‘Six‘)){

hard+=6

soft+=6}

else if(b.hasClass(‘Seven‘)){

hard+=7

soft+=7}

else if(b.hasClass(‘Eight‘)){

hard+=8

soft+=8}

else if(b.hasClass(‘Nine‘)){

hard+=9

soft+=9}

else if(b.hasClass(‘Ten‘)||

b.hasClass(‘Jack‘)||

b.hasClass(‘Queen‘)||

b.hasClass(‘King‘)){

hard+=10

soft+=10}}}

var ht=hard

if(hard>0){

if(soft&&hard !=soft){

if(hard !=21){

if(hard<=21){

ht=soft+‘/‘+hard

}else{

ht=soft}}}}

return ht}

此处同样用数组保存玩家和庄家的分数值,用于判断胜负。

总结

这个HTML游戏用到的数据结构相对简单,主要是对数组和对象的使用。

时间: 2024-10-14 05:21:18

团队项目----基于德州扑克的数据结构分析的相关文章

团队项目分工

团队成员郝佳琪.丁兆鹏.黄静怡.赵彤.刘纤 队长:郝佳琪团队项目基于java的仓库管理系统成员分工郝佳琪负责整个程序的结构和核心代码部分,以及各个成员之间的协调工作.丁兆鹏负责基础代码的编写.赵彤和刘纤.黄静怡负责程序的测试和bug工作. 整个项目在执行的过程中各个环节人人都要参与.同组人之间要多多沟通,交换意见,每个环节的负责人,要尽到督促学员完成任务,监管好当前项目的职责.希望我们日光微澜团队能够保质保量按时完成! 团队成员绩效评估方法1.成员,实现技能互补2.界定成员职责,实行主副分工3.

团队项目推荐:基于社交网络的自动音乐推荐系统——by ZhongXia

来到微软亚洲研究院不知不觉已近两个月,大家都在慢慢适应这紧凑的研究氛围,常听师兄提及的高级软件工程(ASE)也如期开始.上周课后我们完成了组队,而经过初步的调研与思考,我推荐“基于社交网络的自动音乐推荐系统”作为我们团队项目的题目. 音乐是我们生活中重要的一部分,工作中,我们可能需要轻音乐让自己静下心来保持专注:下班后,我们可能需要舒缓的音乐全方位的放松身心.开心时,我们乐于听到一些欢快的乐曲:悲伤时,我们可能需要一些悲伤之音宣泄自己:低潮时,我们想用激昂的声音振奋自己.可见,一个人所处的状态和

A_Pancers团队作业4—基于原型的团队项目需求调研与分析

任务1:实施团队项目软件用户调研活动. (1)用户调研对象:我们的项目软件是基于安卓系统的音乐播放器,以设计出操作简单的音乐播放器为目的,所以本次用户调研的对象主要以身边的老人为主,对他们听音乐,听戏曲的情况进行了解,看他们对于音乐播放器有何需求,有何期待:并将我们设计出的项目模型对他们进行介绍,听取他们的意见和建议.另外考虑到为了获取更加全面的需求其他年龄阶段的人为辅助调研对象(例如:身边的同学.家长.朋友等). (2)调研方式:对于老人这个用户对象我们采取了面对面采访的方式进行调研,而对于其

《对不队》团队作业4—基于原型的团队项目需求调研与分析

一.团队项目软件用户调研活动过程. 首先,我们采访了学院中有组织会议经验的同学和西北师范大学教授,人文地理学博士(区域发展与规划方向),以我们实验七所开发的原型为基础,先让其简单的使用,并提出几点建议.然后我们采用向老师提了如下的几个问题,老师也谈了自己的看法. 1. 是否了解并使用过类似的学术会议管理系统? 2. 参加学术会议一般提交会议论文的方式都有哪些? 3. 觉得这种方式有什么优势? 4. 我们所做的原型还有什么不足? 5. 您会使用这个系统吗? 其次,与此同时我们团队设计了有关会议管理

&lt;Dare To Dream&gt; 第四次作业:基于原型的团队项目需求调研与分析

实验内容与步骤 任务1:实施团队项目软件用户调研活动.要求: (1)真实的用户调研对象: 生科院大三学生 (2)利用实验七所开发的软件原型: 网站原型链接 (3)要有除原型法之外的其他需求获取手段: 访谈法 开会研讨法 (4)收集用户需求调研活动的佐证材料(访谈录音.问卷.调研人员名单等等).       任务2:采用UML模型描述任务1所获取的用户需求,请调研用户复查. 经过复查得出该模型目前适合应用 任务3:参考国标GB8567--88中<软件需求规格说明书>格式,撰写团队项目软件需求规格

一场改变你投资生涯的讨论:职业德州扑克手看交易

各位投友大家好. 校长今天花时间仔细读了一篇长文,叫做<职业德州扑克手看交易:没犯任何错误照样输个精光>,非常棒的文章. 可惜不知道作者是谁,但看得出来,文中讲到的他自己在德州扑克上的经验是真实的. 这篇文章提出了两个非常有价值的概念. 第一个叫盈亏同源.有一些亏损是你在追求盈利道路上必须要支付的成本,这是不可避免也是不应该避免的.因为你一旦避免了这些亏损,你同时也就失去了盈利的机会. 而另外一些亏损择时可以避免也是应该避免的.所谓高手就是在这个部分发挥功力. 第二个概念是把风险分成了三层:系

2015华为德州扑克入境摘要——软体project

直到6一个月2号下午12时00,华为长达一个月的德州扑克锦标赛落下帷幕也被认为是. 我们的团队一直共同拥有3民,间.一个同学(吴)负责算法设计,一个同学(宋)负责分析消息,而我负责的实现框架设计和详细的决策算法.离5报名早年1月开始,要设置环境,设计框架,任务分工,以及各个模块代码的编写.从我个人的感觉来看,整个过程能够说是一个比較艰辛的历程. 德州扑克是一种棋牌类游戏.属于一种博弈过程,起先我对这个游戏没有不论什么的了解,最多的也仅仅是在影视题材里面见过,可是详细的游戏规则并不懂.而正是在这种

2015华为德州扑克参赛总结——软件工程

直到6月2号晚上零点,为期一个月的华为德州扑克比赛也算告一段落了.我们团队总共有3人,其中,一个同学(吴晓东)负责算法的设计,一个同学(宋振兴)负责消息的解析,而我则负责整个框架的设计以及具体决策算法的实现.从5月份初报名开始,到环境的搭建,框架的设计,任务的分工,算法的设计以及各个模块代码的编写,从我个人的感觉来看,整个过程可以说是一个比较艰辛的历程. 德州扑克是一种棋牌类游戏,属于一种博弈过程,起先我对这个游戏没有任何的了解,最多的也只是在影视题材里面见过,但是具体的游戏规则并不懂.而正是在

软件工程团队项目总结

一学期软件工程课结束了,这学期我们共做了三个项目,分别为个人项目.结对项目.以及团队大项目.前两者主要是拿来练手,体会一下简单的软件工程方法论,而结对项目前后历时两个多月,可以说是一次系统的软件工程锻炼,下面对两个迭代过程做一个总结. M1: 我们完成了什么:一个社团平台,给同学提供一个浏览社团活动的活动广场,给社团提供一个管理社员报名和发送通知的集成服务. 我们怎样做到的:需求分析,设想我们的产品的用户场景,建立基本的ER图模型,学习WEB开发的基本知识,做了一些DEMO,学习怎样以基于aja