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("傻蛋,你输了!");
}
}
}