Java 我';我试图重新设置我的游戏线索,要么不执行主,要么新的黑色jFrame冻结
我和一个在ActionListener中有重置按钮的家伙玩了一个21点游戏。然而,当我使用它时,程序的大部分功能都不存在。重置由以下程序调用:Java 我';我试图重新设置我的游戏线索,要么不执行主,要么新的黑色jFrame冻结,java,swing,Java,Swing,我和一个在ActionListener中有重置按钮的家伙玩了一个21点游戏。然而,当我使用它时,程序的大部分功能都不存在。重置由以下程序调用: public class BlackjackGameTable extends JFrame{ JButton stayButton = new JButton("STAY"); JButton hitButton = new JButton("HIT"); JButton resetButton = new JButton("Re
public class BlackjackGameTable extends JFrame{
JButton stayButton = new JButton("STAY");
JButton hitButton = new JButton("HIT");
JButton resetButton = new JButton("Reset");
JLabel background;
Hand playerhand = new Hand();
Hand dealerhand = new Hand();
JLabel score;
JLabel text;
class DecisionListener implements ActionListener{
public void actionPerformed(ActionEvent a){
if(a.getSource() == hitButton){
CardGame2.hit(playerhand, dealerhand);
playerAddCardToTable(new CardRender2(playerhand.cardlist.get(playerhand.getSize()-1)));
score.setText("Your score: " + playerhand.getScore());
System.out.println("YOU CHOSE HIT! Your Score: " + playerhand.getScore());
}
else if(a.getSource() == stayButton){
System.out.println("YOU CHOSE STAY!");
}
else if (a.getSource() == resetButton){
//I've tried this below
dispose();
new BlackjackGameTable()
//this almost works but the main doesn't execute
//I've also tried:
dispose();
main(null);
//I get a black jframe
//and lastly
dispose();
new BlackjackGameTable().main(null);
}
}
}
public BlackjackGameTable(){
this.setTitle("Blackjack");
background = new TableComponent();
background.setLayout(null);
this.add(background,BorderLayout.CENTER);
this.setVisible(true);
this.setSize(1300,867);
JPanel buttonPanel = new JPanel();
score = new JLabel("Your score: " + playerhand.getScore() );
text = new JLabel("WELCOME TO BLACKJACK!");
ActionListener pressChoice = new DecisionListener();
hitButton.addActionListener(pressChoice);
stayButton.addActionListener(pressChoice);
resetButton.addActionListener(pressChoice);
buttonPanel.setSize(300,150);
buttonPanel.add(text, BorderLayout.PAGE_START);
buttonPanel.add(hitButton,BorderLayout.WEST);
buttonPanel.add(stayButton,BorderLayout.EAST);
buttonPanel.add(score, BorderLayout.PAGE_END);
buttonPanel.add(resetButton, BorderLayout.EAST);
buttonPanel.setVisible(true);
this.add(buttonPanel, BorderLayout.SOUTH);
CardGame2.dealIn(playerhand);
CardGame2.dealInDealer(dealerhand);
CardRender2 playerFirstCard = new CardRender2(playerhand.cardlist.get(0));
CardRender2 playerSecondCard = new CardRender2(playerhand.cardlist.get(1));
background.add(playerFirstCard);
playerFirstCard.setBounds(0,110, playerFirstCard.image.getWidth(), playerFirstCard.image.getHeight());
background.add(playerSecondCard);
playerSecondCard.setBounds(120, 110, playerSecondCard.image.getWidth(), playerSecondCard.image.getHeight());
CardRender2 dealerFirstCard = new CardRender2();
CardRender2 dealerSecondCard = new CardRender2(dealerhand.cardlist.get(1));
background.add(dealerFirstCard);
dealerFirstCard.setBounds(0, 550, dealerFirstCard.image.getWidth(), dealerFirstCard.image.getHeight());
background.add(dealerSecondCard);
dealerSecondCard.setBounds(120,550,dealerSecondCard.image.getWidth(), dealerSecondCard.image.getHeight());
score.setText("Your score: " + playerhand.getScore());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void playerAddCardToTable(CardRender2 c){
background.add(c);
c.setBounds((playerhand.getSize() - 1) * c.image.getWidth(), 110, c.image.getWidth(), c.image.getHeight());
revalidate();
}
public void dealerAddCardToTable(CardRender2 d){
background.add(d);
d.setBounds((dealerhand.getSize() -1) * d.image.getWidth(), 550, d.image.getWidth(), d.image.getHeight());
revalidate();
}
public void dealerReveal(){
CardRender2 dealerOGCard = new CardRender2(dealerhand.cardlist.get(0));
background.add(dealerOGCard);
dealerOGCard.setBounds(0, 500, dealerOGCard.image.getWidth(), dealerOGCard.image.getHeight());
}
public static void main(String[] args){
System.out.println("Welcome to Blackjack!\n");
BlackjackGameTable g = new BlackjackGameTable();
System.out.println("Dealer hand: " + g.dealerhand.cardlist + " " + g.dealerhand.getScore());
System.out.println("Your hand: " + g.playerhand.cardlist + " " + g.playerhand.getScore());
boolean playerStillIn = true;
while((playerStillIn) && (!CardGame2.isBusted(g.playerhand))){
if(g.playerhand.getScore() != 21){
g.text.setText("Hit or stay?");
if(g.hitButton.getModel().isPressed()){
g.score.setText("Your score: " + g.playerhand.getScore());
System.out.println("YOUR HAND: " + g.playerhand.cardlist);
System.out.println("YOUR SCORE: " + g.playerhand.getScore());
}
else if (g.stayButton.getModel().isPressed()){
playerStillIn = false;
}
}
else{
System.out.println("BLACKJACK 21!!! YOU WIN BIGLY");
g.text.setText("BLACKJACK 21!!! YOU WIN BIGLY");
g.dealerReveal();
break;
}
}
if (CardGame2.isBusted(g.playerhand)){
System.out.println("BUSTED! YOU LOSE!!");
g.text.setText("BUSTED! YOU LOSE!!");
g.dealerReveal();
}
else{
while(((g.dealerhand.getScore() < 17) && (CardGame2.noBusted(g.playerhand,g.dealerhand))) &&(g.playerhand.getScore() != 21)) {
CardGame2.hit(g.dealerhand,g.playerhand);
g.dealerAddCardToTable(new CardRender2(g.dealerhand.cardlist.get(g.dealerhand.getSize()-1)));
}
if ((g.playerhand.getScore() == g.dealerhand.getScore())) {
System.out.println("DEALER HAND: " + g.dealerhand.getHand() + " and SCORE: " + g.dealerhand.getScore());
System.out.println("YOUR HAND: " + g.playerhand.getHand() + " and SCORE: " + g.playerhand.getScore());
System.out.println("PUSH");
g.text.setText("PUSH");
g.dealerReveal();
}
else if((CardGame2.isBusted(g.dealerhand)) && (g.playerhand.getScore() != 21)){
System.out.println("DEALER HAND: " + g.dealerhand.getHand() + " and SCORE: " + g.dealerhand.getScore());
System.out.println("YOUR HAND: " + g.playerhand.getHand() + " and SCORE: " + g.playerhand.getScore() );
System.out.println("YOU WIN");
g.text.setText("YOU WIN");
g.dealerReveal();
}
else if ((g.playerhand.getScore() < g.dealerhand.getScore())) {
System.out.println("DEALER HAND: " + g.dealerhand.getHand() + " and SCORE: " + g.dealerhand.getScore());
System.out.println("YOUR HAND: " + g.playerhand.getHand() + " and SCORE: " + g.playerhand.getScore());
System.out.println("YOU LOSE");
g.text.setText("YOU LOSE");
g.dealerReveal();
}
else if ((g.playerhand.getScore() > g.dealerhand.getScore()) && g.playerhand.getScore() != 21) {
System.out.println("DEALER HAND: " + g.dealerhand.getHand() + " and SCORE: " + g.dealerhand.getScore());
System.out.println("YOUR HAND: " + g.playerhand.getHand() + " and SCORE: " + g.playerhand.getScore());
System.out.println("YOU WIN");
g.text.setText("YOU WIN");
g.dealerReveal();
}
}
}
}
公共类BlackjackGameTable扩展JFrame{
JButton stayButton=新JButton(“停留”);
JButton hitButton=新JButton(“点击”);
JButton resetButton=新JButton(“重置”);
JLabel背景;
掌上游戏机手=新手();
Hand Dealhand=新手();
JLabel评分;
JLabel文本;
类DecisionListener实现ActionListener{
已执行的公共无效操作(操作事件a){
if(a.getSource()==hitButton){
纸牌游戏2.击中(玩家手、交易手);
playerAddCardToTable(新的CardRender2(playerhand.cardlist.get(playerhand.getSize()-1));
score.setText(“您的分数:+playerhand.getScore());
System.out.println(“您选择了命中!您的分数:+playerhand.getScore());
}
else if(a.getSource()==stayButton){
System.out.println(“你选择了留下来!”);
}
else if(a.getSource()==resetButton){
//我在下面试过这个
处置();
新BlackjackGameTable()
//这几乎可以正常工作,但main无法执行
//我也试过:
处置();
主(空);
//我有一个黑色的框架
//最后
处置();
新建BlackjackGameTable().main(空);
}
}
}
公共BlackjackGameTable(){
本.集标题(“21点”);
背景=新的TableComponent();
background.setLayout(null);
添加(背景、边框布局、中心);
此.setVisible(true);
此.setSize(1300867);
JPanel buttonPanel=新的JPanel();
分数=新的JLabel(“你的分数:+playerhand.getScore());
text=新的JLabel(“欢迎来到21点!”);
ActionListener按Choice=新建DecisionListener();
点击按钮。添加ActionListener(按选择);
StatyButton.addActionListener(按选择);
resetButton.addActionListener(按选择);
按钮面板设置尺寸(300150);
buttonPanel.add(文本、边框布局、页面开始);
buttonPanel.add(hitButton,BorderLayout.WEST);
buttonPanel.add(stayButton,BorderLayout.EAST);
buttonPanel.add(分数、边框布局、页码结束);
buttonPanel.add(resetButton,BorderLayout.EAST);
buttonPanel.setVisible(true);
添加(buttonPanel,BorderLayout.SOUTH);
纸牌游戏2.交易(玩家手);
CardGame2.dealInDealer(dealerhand);
CardRender2 playerFirstCard=新的CardRender2(playerhand.cardlist.get(0));
CardRender2 playerSecondCard=新的CardRender2(playerhand.cardlist.get(1));
添加(玩家第一张卡片);
playerFirstCard.setBounds(0110,playerFirstCard.image.getWidth(),playerFirstCard.image.getHeight());
添加(playerSecondCard);
playerSecondCard.setBounds(120110,playerSecondCard.image.getWidth(),playerSecondCard.image.getHeight());
CardRender2 dealerFirstCard=新的CardRender2();
CardRender2 dealerSecondCard=新的CardRender2(dealerhand.cardlist.get(1));
添加(dealerFirstCard);
setBounds(0550,dealerFirstCard.image.getWidth(),dealerFirstCard.image.getHeight());
添加(dealerSecondCard);
setBounds(120550,dealerSecondCard.image.getWidth(),dealerSecondCard.image.getHeight());
score.setText(“您的分数:+playerhand.getScore());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
公共无效播放器ADDCardToTable(CardRender2 c){
背景.添加(c);
c、 收进边界((playerhand.getSize()-1)*c.image.getWidth(),110,c.image.getWidth(),c.image.getHeight());
重新验证();
}
公共作废dealerAddCardToTable(CardRender2 d){
背景.添加(d);
d、 setBounds((dealerhand.getSize()-1)*d.image.getWidth(),550,d.image.getWidth(),d.image.getHeight());
重新验证();
}
公开无效交易公告(){
CardRender2 dealerOGCard=新的CardRender2(dealerhand.cardlist.get(0));
添加(DealOrogCard);
setBounds(0,500,dealorogcard.image.getWidth(),dealorogcard.image.getHeight());
}
公共静态void main(字符串[]args){
System.out.println(“欢迎来到21点!\n”);
BlackjackGameTable g=新BlackjackGameTable();
System.out.println(“经销商手册:+g.dealerhand.cardlist+”“+g.dealerhand.getScore());
System.out.println(“你的手:+g.playerhand.cardlist+”“+g.playerhand.getScore());
布尔playerStillIn=true;
而((playerStillIn)和(!CardGame2.isBusted(g.playershand))){
如果(g.playerhand.getScore()!=21){
g、 setText(“命中还是停留?”);
if(g.hitButton.getModel().isPressed()){
g、 score.setText(“您的分数:+g.playerhand.getScore());
System.out.println(“你的手:+g.playerhand.cardlist”);
System.out.println(“您的分数:+g.playerhand.getScore());
}
else if(g.stayButton.getModel().isPressed()){
playerStillIn=假;
}
}
否则{
System.out.println(“21点!!!你赢了很多”);
g、 text.setText(“21点!!!你赢了很多”);
g、 dealerReveal();
打破
}
}
如果(CardGame2.isBusted(g.playerhand)){
System.out.println(“崩溃了!你输了!!”;
g、 setText(“失败!你输了!!”;
g、 dealerReveal();
}
否则{
而((g.dealerhand.getScore()<17)和&(CardGame2.noBusted(g.playerhand,g.dealerhand))&&(g.playerhand.getScore()!=21)){
纸牌游戏2.命中率(g.dealerhand,g.playerhand);
g、 dealerAddCardToTable(新的CardRender2(g.dealerhand.cardlist.get(g.dealerhand.getSize()-1));
}
if((g.playerhand.getScore()==g.dealerhand.getScore()){
System.out.println(“交易商手:+g.dealerhand.getHand()+”和分数:+g.dealerhand.getScore());
System.out.printl