二十一点游戏

package twentyOne;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Random;

public class TwentyOne {
     /*名称:二十一点游戏
      * 初始化牌
      * 洗牌
      * 电脑发牌
      * 抽牌
      * 决出胜负
      * 作者:逗号
      * 来自:逗号工作室
      */
 private static String [] card = {"A","2","3","4","5","6","7","8",
  "9","10","J","Q","K"};
 //十二张牌
 private static int [] cardNum = new int [52];
 //总共有52张牌
 private static int [] huaSe = new int [52];
 //52张牌对应的花色
 private static int [] daXiao = new int [52];
 //52张牌的大小
 private static int jiSuanJi;
 //用于存储计算机的所抽牌的点数
 private static int ren;
 //用于存储人的所抽牌的点数
 private static int weiZhi = 0;//抽牌的位置

 public static void main(String[] args) {
  initPlay();
  //初始化牌局
  xiPai();
  /*
   * 用随即的方法在循环中交换两张牌,达到洗牌的效果
   */
  for(int i = 0;i<52;i++){
    huaSe[i] = cardNum[i]/13+3;
   //将52个数分成四类
    daXiao[i] = cardNum[i]%13;
   //每种花色又有12个牌

  }
  chouQian();
  faPai();
      /*
       *电脑从weiZhi开始取牌,为了使所抽的牌不会第二次出现,weizhi不断自加
       */
  chouPai();
  /*
   * 电脑取牌后,接着从自加后的weizhi处抽牌
   */
  shengFu();
  //胜负判断

 }

 private static void chouQian() {
  //决定抽牌的位置
  weiZhi = new Random().nextInt(53);
  
 }

 private static void initPlay() {
  for(int i = 0;i <52; i++){
   cardNum[i] = i;
  }
  //为牌赋值
 }
 private static void xiPai() {
  Random r = new Random();
  for(int i = 0;i<52;i++){
   int j = r.nextInt(52);
   int k = r.nextInt(52);
   int t = cardNum[j];
   cardNum[j] = cardNum[k];
   cardNum[k] = t;
  }
  //洗牌
 }

 private static void faPai() {
  jiSuanJi = daXiao[weiZhi];
     while(againGetCard(jiSuanJi)){
      weiZhi = weiZhi%52+1;//这样表示自加,避免越界
   jiSuanJi = jiSuanJi + daXiao[weiZhi];
  }
  System.out.println("电脑的点数是:"+jiSuanJi);
 }

 private static boolean againGetCard(int jiSuanJi) {
  /*
   * 计算机是否再要牌由此方法决定
   * 按概率来算,计算机如果它的点数没有超过一半即13时,他下次它由50%的概率抽到总点数在24
   * 以下的点数,所以用13作为临界条件
   */
  boolean result = false;
  if(jiSuanJi < 13){
   result = true;
  }else{
   result = false;
  }
  /*
   *  假如我取到的是12,那么我抽1到24中牌的前12张都可以
   *  保证我不超过24,也就是在概率为50%的情况下,设置电脑
   *  继续要牌
   */
  return result;
 }

 private static void chouPai() {
  String get  = "N";
  int i = 0;
  weiZhi = weiZhi%52+1;
        while(true){
         ren += daXiao[weiZhi];
         System.out.println("这是您第"+(++i)+"次抽牌");
   System.out.print("您这次的点数是"+daXiao[weiZhi]+"/t");
   System.out.println("花色是"+(char)huaSe[weiZhi]);
   weiZhi = weiZhi%52+1;
   System.out.println("您的总点数是"+ren);
   System.out.println("您是否还要牌(y/n)");
   
  

   try {
    get = new BufferedReader(new InputStreamReader(System.in)).readLine();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   if(get.equals("y")||get.equals("Y")){
    ;
   }else{
    break;//跳出循环
   }

  }
 }
 
 

 private static void shengFu() {
  if((jiSuanJi > 21 && ren < 21)){
   System.out.println("恭喜恭喜,你赢了电脑");
  }else if(jiSuanJi < 21 && ren < 21 && jiSuanJi < ren){
   System.out.println("恭喜恭喜,你赢了电脑");
  }else{
   System.out.println("傻蛋,你输了!");
  }
  
 }

 

 

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值