JAVA21点游戏源代码
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}else{ return 0;// 超过 21 点(爆分)
} } private void yourPass(int money) {// PASS
// 判断输赢 this.winOrLose(money); }
private void getCardAgain(int money) {// 再发一张 player.setHand(deck.getCard());
} }while(yourChoice!=5); }
// 查看玩家成绩 private void checkScore() {
System.out.println("您胜利了"+player.getWin()+"次");
System.out.println("您失败了"+player.getLose()+"次"); System.out.println("您还有"+player.getCash()+"货币单位"); }
}// BlackJack
/** * * @author * 扑克 */
class Card { // 表示所有纸牌面值的数组 public static final String[] FACES={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
单位");
money=20; System.out.println("您的输入不正确,计算机自动将您的投注金额定为 20 货币
}
System.out.println("下面开始发牌..."); player.setHand(deck.getCard()); com.setHand(deck.getCard()); do{ System.out.println("您得到的牌是:"+player.getHandList()); do{
public static void main(String[] args) { new BlackJack();
}
源自文库
// 游戏开始,完成初始金额的投注及发第一张牌
// 然后用户选择是投注加倍金额,发下一张牌,还是 PASS,或者开牌
private void start() {
// 初始化金额为 20 货币单位 int money=20;// 投注金额
package com.easyjava.sample;
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.Stack;
playerPoint+=Integer.parseInt(c.getFace());// 牌点在 2~9 之间直接累加 }else if(c.getFace().equals("J") ||
c.getFace().equals("Q")|| c.getFace().equals("K")||c.getFace().equals("10")){ playerPoint+=10;// 牌点是 J Q K 则累加 10 }else if(c.getFace().charAt(0)=='A'){ numberOfA++; } }
} catch (IOException ex) { System.out.println("输入错误,请重新输入");
} }while(true);
switch(yourChoice){ case 1:// 加倍 yourDouble(money); break; case 2:// PASS yourPass(money); break; case 3:// 再要一张 getCardAgain(money); break; case 4:// 开牌 winOrLose(money); yourChoice=5; break; case 5:// 退回上一级 break; default: System.out.println("您的输入有误,请输入 1-5");
}else{ System.out.println("电脑:"+comPoint+"你:"+playerPoint+"你输了"); player.setCash(player.getCash()-money); player.youLose();
} }
private int comPlayer() { int comPoint=this.computePoint(com); System.out.println("电脑开始:"+com.getHandList()); while(comPoint!=0&&comPoint<=18 && com.getSize()<5){// 人工智能:如果电脑手
case 1: start(); break;
case 2: checkScore(); break;
case 3: System.exit(0); break;
default: System.out.println("输入有误,请重新输入"); break;
} } }
/** * @param args the command line arguments */
/** * * @author * 21 点游戏 */
public class BlackJack { private Player player,com;// 玩家和电脑 private Dealer deck;// 一副牌 BufferedReader br; /** * 打印菜单 * 完成所有功能调用 */ public BlackJack() { // 初始化玩家,牌 player=new Player(); com=new Player(); deck=new Dealer(); String str = null; br=new BufferedReader(new InputStreamReader(System.in));
// 玩家加倍 private void yourDouble(int money) {
money*=2;// 投注金额加倍
// 判断输赢 this.winOrLose(money); }
// 点数计算 private int computePoint(Player player){
int playerPoint=0;// 玩家的牌点 int numberOfA=0;// A 点拿到的张数
System.out.println("您的选择:1.加倍;2.PASS;3.再要一张;4.开牌;5. 退回上级菜单");
try { yourChoice=Integer.parseInt(br.readLine()); break;
} catch (NumberFormatException ex) { System.out.println("输入错误,请重新输入");
public String toString(){ return getSuit()+getFace();
System.out.println("\t\t 3.结束游戏\n"); System.out.println("\t 请输入:");
try {
str=br.readLine();
} catch (IOException e) {
e.printStackTrace();
} switch(Integer.parseInt(str)){
}else if(playerPoint==0){// 玩家爆分 System.out.println("爆分!你输了。"); player.setCash(player.getCash()-money); player.youLose();
}else if(comPoint<playerPoint||player.getSize()==5||playerPoint==21){ System.out.println("电脑:"+comPoint+"你:"+playerPoint+"你赢了"); player.setCash(player.getCash()+money); player.youWin();
}else{ value=n;
} }
// 返回表示纸牌面值的字符串
public String getFace(){ return FACES[value%FACES.length];
}
// 返回表示纸牌类型的 String public String getSuit(){
return SUITS[value%SUITS.length]; }
// A 点的分数累加 if(numberOfA==0){
}else{ if(playerPoint+(11*numberOfA)>21){ playerPoint+=numberOfA; }else{ playerPoint+=11; }
}
if(playerPoint<=21){ return playerPoint;
上的点数小于 18 点就发牌 com.setHand(deck.getCard());// 再发一张牌给电脑
System.out.println("再发一张,电脑手中:"+com.getHandList());
comPoint=this.computePoint(com);// 重新计算分数 } return comPoint; }
int yourChoice;// 用户选择 System.out.println("请选择你要投注的金额(最低 20 货币单位):"); // 用户输入下注金额
try {
money=Integer.parseInt(br.readLine());
if(money<20){
money=20;
}
} catch (Exception e) {
}
private void winOrLose(int money) {// 判断输赢 int playerPoint=this.computePoint(player);// 获得玩家点数 int comPoint=comPlayer();// 获得电脑点数
if(comPoint==0){// 点脑爆分 System.out.println("爆分!你赢了。"); player.setCash(player.getCash()+money); player.youWin();
// 打印菜单
while(true){
player.playAgain();
com.playAgain(); System.out.println("\t\t\t 黑 杰 克\n");
System.out.println("\t\t System.out.println("\t\t
1.开始游戏\n"); 2.查看比分\n");
// A 点以外的分数累加 for(int i=0;i<player.getHand().size();i++){
Card c=(Card)player.getHand().get(i); if(c.getFace().charAt(0)>='2'&&c.getFace().charAt(0)<='9'){
// 用 0 点创建一个默认纸牌 public Card(){
value=0; }
// 创建第 n 张牌,非法 n 值将使程序终止。 public Card(int n){
if(n<0 || n>MAX_CARDS){ System.out.println("错误:非法牌索引,程序退出"); System.exit(0);
// 表示所有类型值的数组 public static final String[] SUITS={"黑桃","梅花","方块","红心"};
// 纸牌总数 public static final int MAX_CARDS=FACES.length*SUITS.length;
// 这张牌的点值 protected int value;