package sample;
import lib.Input;
public class BlackJack {
static final int SUIT = 4;
static final int RANK = 13;
static int max; //全カード枚数 max
static int[] deck = new int[SUIT*RANK]; //全カードを表す配列
static int[] pHand = new int[8]; //手札(最大8枚)の配列
static int pn = 0; //手持ちの札の数
static int[] cHand = new int[8];
static int cn = 0;
static final String[] suitString={"♠","♦","♣","♥"};
static void initDeck(){ //initDeck
for(int i=0;i<SUIT*RANK;i++){ //カードデッキ作成
deck[i]=i+1;
}
max = SUIT*RANK;
}
static int nextCard(){ //int nextCard()
int p=(int)(Math.random()*max); //カードを一枚引く
int ret = deck[p];
deck[p]=deck[max-1];
max--;
return ret;
}
static void deal(){ //deal()
pHand[0]= nextCard(); //最初の二枚
pHand[1]= nextCard();
pn=2;
cHand[0]= nextCard();
cHand[1]=nextCard();
cn=2;
}
static int number(int n){ //int number()
int m = (n-1)%RANK+1; //札の実数
return m;
}
static String suit(int n){ //String suit()
int index = (n-1)/RANK; //札の種類
return suitString[index];
}
static String cardString(int n){ //String cardString()
String s = suit(n); //♠<12>
int i = number(n);
return s+"<"+i+">";
}
static void show(){ //show()
System.out.print("■Com ("+sum(cHand,cn)+") "+cards(cHand,cn));
System.out.println();
System.out.print("□Player ("+sum(pHand,pn)+") "+cards(pHand,pn));
System.out.println("\n");
}
static int toPoints(int card){ //toPoint()
int point; //札のポイント
if(number(card)<=10){
point = number(card);
}else{
point = 10;
}return point;
}
static int sum(int[] hand,int n){ //int sum()
int total = 0; //手札の合計ポイント
for(int i=0;i<n;i++){
total += toPoints(hand[i]);
}return total;
}
static String cards(int[] hand,int n){ //String cards()
String s=""; //
for(int i=0;i<n;i++){
s= s+cardString(hand[i])+"\t";
}return s;
}
static void hit(){ //hit()
while(sum(pHand,pn)<21){
String s=Input.getStr("もう一枚カードを引きますか?");
if(s!=null&&s.equals("n"))
break;
pHand[pn++]=nextCard();
disp();
}
}
static void dealer(){ //dealer()
while(sum(cHand,cn)<16){
cHand[cn++]=nextCard();
}
}
static void judge(int c,int p){ //judge()
if(c>21&&p>21||c==p)
System.out.println(" 引き分け");
else if(p<=21&&(c>21||c<p))
System.out.println(" あなたの勝ち!!\n");
else
System.out.println(" コンピュータのかち。。\n");
}
static void disp(){ //disp()
System.out.print("■Com (--p) "+cards(cHand,1)+"*<->");
System.out.println();
System.out.print("□Player ("+sum(pHand,pn)+"p) "+cards(pHand,pn));
System.out.println();
System.out.println();
}
static void delay(int t){
try{
Thread.sleep(t);
}catch(InterruptedException e){
e.printStackTrace();
}
}
static void animation(){
System.out.print(" ");
for(int i=0;i<10;i++){
System.out.print("☆ ");
delay(125);
}System.out.println("\n");
}
public static void main(String[] args) { //main
System.out.println();
System.out.println(" □■□■□■□Black Jack□■□■□■□");
System.out.println();
String s;
initDeck();
do{
if(max<=16)
initDeck();
deal();
disp();
hit();
dealer();
animation();
show();
judge(sum(cHand,cn),sum(pHand,pn));
s=Input.getString("続けますか?(y/n)");
System.out.println();
}while(s!=null&&!s.equals("n"));
}
}
package lib;
import java.io.IOException;
public class Input {
public static final String CR = System.getProperty("line.separator");
public static final int CR_LEN = CR.length();
public static String getStr(String s){
byte[] buf = new byte[1000];
int len = 0;
try {
guide(s);
len = System.in.read(buf);
} catch (IOException e) {
System.out.println(e);
}
return new String(buf, 0, len-CR_LEN);
}
public static void guide(String s){
System.out.print( "[" + s + "] > ");
}
public Input(){
}
}
コンソール上で動作するもの
エースは1としてのみ