您好,欢迎访问三七文档
当前位置:首页 > 医学/心理学 > 药学 > Java实训报告纸牌游戏黑杰克
《Java实训》设计报告《Java实训》设计报告纸牌游戏黑杰克专业:软件技术班级:09-23班学号:090123012姓名:姜企家石家庄科技信息职业学院信息工程系2011年10月15日《Java实训》设计报告项目简介项目名称纸牌游戏黑杰克开发人员姜企家项目简介该项目是一款控制台小游戏。项目目的开发一款人们日常生活中可以作为休闲用的游戏,为人们的休闲时间提供一种休闲游戏。丰富我们的日常生活。主要技术Java编程语言开发环境JDK1.6,Eclipse项目特点操作简单,好玩好用。占用计算机空间小,运行速度快。技术重点对用户手中牌的大小,AI手中的牌的大小,比较大小,涉及21点游戏的独特计分方式。技术难点随机数的处理编写算法异常处理《Java实训》设计报告纸牌游戏黑杰克一、项目需求黑杰克简称为21点,1700年左右法国赌场就有这种21点的纸牌游戏。该游戏由2到6个人玩,使用除大小王之外的52张牌,游戏者的目标是使手中的牌的点数之和不超过21点且尽量大。有着悠久的历史。发牌:一开始给每个玩家发一张牌,这张牌是底牌,只有玩家自己知道是什么,然后只发给要牌的玩家。如果所有玩家都不再要牌,则开牌计分。计分:2到10都是按牌面计算点数,直接累加。J、Q、K按10点计算,A一般记作11点累加,此时如果点数大于21点则将A记作1点。爆分:21点为最大点数值,如果玩家手中的牌点数大于21点,则属于爆分,玩家手中点数将归0,判定为输。要牌:玩家在底牌之后可以继续要牌,知道点数满意或爆分为止。下注:玩家在每局开局前可下注,定当前局输赢的钱数。输赢:21点位最大点数,哪个玩家点数大,就哪个玩家赢。二、项目设计下面是5个Java源文件的总体设计。(1)BlackJack.java(主类)BlackJack类负责创建主窗口,该类含有main方法,游戏从该类开始执行。BlackJack类有5种类型的对象,分别是:Dealer,Scanner,Player,Computer,Card,对象。(2)Card.java对于一张扑克牌来说,主要有牌面值及花色,Card类用faces数组及suits数组分别存储所有牌面值及花色,并提供了getFace()方法及getSuit()方法获取一张扑克的面值及花色信息。(3)CardsInHand.java玩家手上的牌。(4)Dealer.java荷官的抽象只是实现了两个较核心的能力,一个是发牌,一个是洗牌。发牌涉及到一个随机算法的问题,是比较重要的运算处理。《Java实训》设计报告(5)Player.java玩家类的抽象是非常明显的,完全模拟了现实中一个玩家的属性及行为,属性有:赢次数、输次数、拥有现金数、手上的牌。与赌场相关的行为能力也相当完善,例如获取发牌、重开一局等等。1、BlackJack类(主类)(1)数据和方法构造方法输出菜单并完成所有方法调用。1)成员变量money投注金额yourChoice用户选择(2)代码publicvoidstart(){intmoney=20;//投注金额intyourChoice;//用户选择System.out.println(请输入你要投注的金额(最小面值20):);money=input.nextInt();if(money20){System.out.println(您输入的金额过小,系统自动将投注金额设置为20);money=20;//强制最小投注为20}System.out.println();System.out.println(开始发牌。。。。。);player.setHand(deck.getCard());computer.setHand(deck.getCard());do{System.out.println(您得到的牌是:+player.getHandList());System.out.println(您的选择:1.加倍;2.PASS;3.再要一张;4.开牌;5.退回上级菜单);yourChoice=input.nextInt();switch(yourChoice){case1:yourDouble(money);break;case2:yourPass(money);break;case3:《Java实训》设计报告getCardAgain();break;case4:winOrLose(money);break;case5:break;default:break;}}while(yourChoice!=5);}publicvoidcheckStore(){System.out.println(您胜利了+player.winNumber+次);System.out.println(您失败了+player.loseNumber+次);System.out.println(您还有+player.cash+货币单位);}publicstaticvoidmain(String[]args){newBlackJack();}publicvoidyourDouble(intmoney){money*=2;//投注金额加倍//判断输赢winOrLose(money);}publicintcomputePoint(Playerplayer){intplayerPoint=0;intnumberOfA=0;//由于A的积分特殊,需要单独运算for(inti=0;iplayer.hand.getSize();i++){Cardcard=player.hand.cards[i];if(card.getFace().charAt(0)='2'&&card.getFace().charAt(0)='9'){playerPoint+=Integer.parseInt(card.getFace());}elseif(card.getFace().equals(J)||card.getFace().equals(Q)||card.getFace().equals(K)||card.getFace().equals(10)){playerPoint+=10;}elseif(card.getFace().equals(A)){numberOfA++;//统计A牌面的数量}}if(numberOfA!=0){《Java实训》设计报告if((playerPoint+11*numberOfA)21){playerPoint+=numberOfA;}else{playerPoint+=11;}}if(playerPoint=21){returnplayerPoint;}return0;//爆分清0}publicvoidyourPass(intmoney){//判断输赢winOrLose(money);}publicvoidgetCardAgain(){player.setHand(deck.getCard());}publicvoidwinOrLose(intmoney){intplayerPoint=computePoint(player);//获得玩家点数intcomPoint=comPlayer();//获得电脑点数if(comPoint==0){//点脑爆分System.out.println(电脑爆分!你赢了。);player.cash=player.cash+money;player.youWin();}elseif(playerPoint==0){//玩家爆分System.out.println(爆分!你输了。);player.cash=player.cash-money;player.youLose();}elseif(comPointplayerPoint||player.getSize()==5||playerPoint==21){System.out.println(电脑:+comPoint+分,你:+playerPoint+分,你赢了);player.cash=player.cash+money;player.youWin();}else{System.out.println(电脑:+comPoint+分,你:+playerPoint+分,你输了);player.cash=player.cash-money;player.youLose();}player.hand.clear();//清空玩家及电脑手中的牌computer.hand.clear();System.out.println();//开始下一局System.out.println(开始发牌。。。。。);《Java实训》设计报告player.setHand(deck.getCard());computer.setHand(deck.getCard());}publicintcomPlayer(){intcomPoint=this.computePoint(computer);System.out.println(电脑开始:+computer.getHandList());while(comPoint!=0&&comPoint=18&&computer.getSize()3){//人工智能:如果电脑手上的点数小于18点就发牌computer.setHand(deck.getCard());//再发一张牌给电脑System.out.println(再发一张,电脑手中:+computer.getHandList());comPoint=computePoint(computer);//重新计算分数}returncomPoint;}2、Card类(1)数据和方法构造方法输出菜单并完成所有方法调用。1)成员变量faces牌面值数组suits花色数组maxCards牌的总数value这张牌的点数(2)代码publicCard(){value=0;//用0创建一章默认纸牌}//构造方法,创建第n张牌publicCard(intn){if(n0||nmaxCards){System.out.println(错误:非法牌索引,程序退出);System.exit(0);//退出程序}else{value=n;}}//返回表示纸牌面值的字符串《Java实训》设计报告publicStringgetFace(){returnfaces[value%faces.length];}//返回表示纸牌花色的字符串publicStringgetSuit(){returnsuits[value%suits.length];}//返回当前纸牌的花色及面值publicStringtoString(){returngetSuit()+getFace();}3、CardsInHand类1)代码publicclassCard{String[]faces={2,3,4,5,6,7,8,9,10,J,Q,K,A};intmaxCards=faces.length*suits.length;intvalue=0;publicvoidsetCard(Cardcard){for(inti=0;icards.length;i++){if(cards[i]==null){cards[i]=card;break;}}}/***清空玩家手中的牌*/publicvoidclear(){cards=newCard[22];}/***返回玩家手中的牌张数*@return*/publicintgetSize(){for(inti=0;icards.length;i++){if(cards[i]==null){returni;《Java实训》设计报告}}returncards.length;}/***返回玩家手中的牌列表*/publicStringtoString(){Stringhand=;for(inti=0;icards.length;i++){if(cards[i]!=null){hand+=cards[i].toString()+;}
本文标题:Java实训报告纸牌游戏黑杰克
链接地址:https://www.777doc.com/doc-6222307 .html