import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JLabel;
import javax.swing.Timer;
import javax.swing.border.BevelBorder;
import javax.swing.border.Border;
public class BGControler implements ActionListener{
private Gamer g1, g2;
private BGPanel m_Panel;
private String infoStr = null;
private boolean board_flag = false;
private boolean hit_dealer_flag = false;
private Timer infoBoardTimer;
private JLabel lblBoard;
private int gameCounter;
public BGControler(BGPanel panel){
g1 = new Dealer(this);
g2 = new Player(this);
m_Panel = panel;
lblBoard = new JLabel();
lblBoard.setOpaque(true);
lblBoard.setBackground(Color.lightGray);
lblBoard.setBorder(new BevelBorder(BevelBorder.RAISED, Color.white, Color.black));
lblBoard.setVisible(false);
panel.setLayout(null);
panel.add(lblBoard);
infoBoardTimer = new Timer(1500, this);
gameCounter = 0;
g1.setBounds(75, 20);
g2.setBounds(75, 330);
startNextGame();
}
public void setHitDealerEvent(boolean flag){
hit_dealer_flag=flag;
}
public void doDealerTurn(){
if(g1.checkHitEnable()){
g1.Hit();
showInfoBoard("Dealer Turn
Card Number : " + g1.getCardNum()+ "!!");
}
}
public void startNextGame(){
gameCounter++;
g1.repair();
g2.repair();
getActivePlayer().doBet(50);
g1.Hit(); g1.Hit();
g2.Hit(); g2.Hit();
updateBoardGraphic();
lblBoard.setVisible(false);
if(g2.getScore() == 21 || g1.getScore() == 21){
showNextGameInfo();
}
}
public void updateBoardGraphic(){
m_Panel.repaint();
}
public void showInfoBoard(String str){
infoStr = str;
board_flag = true;
updateBoardGraphic();
infoBoardTimer.start();
}
public void showNextGameInfo(){
int dealer_s = g1.getScore();
int player_s = g2.getScore();
ArrayList cardList = null;
StringBuilder str = new StringBuilder();
//Dealer Info
str.append("#" + gameCounter + " round#
Dealer
[Cards]
");
cardList = g1.getCardList();
for(int i1=0; i1 < cardList.size(); i1++){
str.append(cardList.get(i1)); str.append(" ");
}
str.append("
Total :");
str.append(g1.getScore());
//Player Info
str.append("
Player
[Cards]
");
cardList = g2.getCardList();
for(int i1=0; i1 < cardList.size(); i1++){
str.append(cardList.get(i1)); str.append(" ");
}
str.append("
Total :");
str.append(g2.getScore());
str.append("
");
if(player_s <= 21 && dealer_s <= 21 && player_s == dealer_s){
str.append("Push!!");
getActivePlayer().addMoney(getActivePlayer().getBet());
}else if(player_s == 21){
str.append("You're a winer!!");
getActivePlayer().addMoney(getActivePlayer().getBet() * 2);
}else if(player_s > 21){
str.append("Burst!! You're a loser (> <)v");
}else if(player_s < 21){
if(player_s < dealer_s && dealer_s <= 21){
str.append("You're a loser.");
}else if(player_s > dealer_s || dealer_s > 21){
str.append("You're a winer!!");
getActivePlayer().addMoney(getActivePlayer().getBet() * 2);
}
}
str.append("");
int str_x = m_Panel.getWidth()/2 - 150;
int str_y = m_Panel.getHeight()/2 - 140;
lblBoard.setText(str.toString());
lblBoard.setBounds(str_x, str_y, 300, 280);
lblBoard.setVisible(true);
updateBoardGraphic();
}
public Player getActivePlayer(){
return (Player)g2;
}
public Dealer getActiveDealer(){
return (Dealer)g1;
}
public void updateGamerGraphics(Graphics g){
g1.drawGamer(g);
g2.drawGamer(g);
if(board_flag){
int str_x = m_Panel.getWidth()/2 - 100;
int str_y = m_Panel.getHeight()/2 - 100;
lblBoard.setBounds(str_x, str_y, 200, 200);
lblBoard.setText(infoStr);
lblBoard.setVisible(true);
}
}
public void actionPerformed(ActionEvent e) {
if(e.getSource().equals(infoBoardTimer)){
board_flag = false;
lblBoard.setVisible(false);
updateBoardGraphic();
infoBoardTimer.stop();
if(hit_dealer_flag){
doDealerTurn();
hit_dealer_flag = false;
}
}
}
}