[英]Java blackjack swing gui ImageIcon
我刚刚在一周前开始使用Java并完成了我的第一个二十一点程序。 我想通过使用Java swing(ImageIcon)来增强它,这样每次我绘制一张卡片时,让我们说它实际上将ace作为图像显示在屏幕或我当前的手上。 我写了这个程序,显示我想要的卡片:
import java.awt.FlowLayout;
import javax.swing.*;
public class TenCards extends JFrame {
public TenCards() {
ImageIcon[] images = new ImageIcon[10];
// Saved the card images as 1,2,3...10.gif in my package
// looped them into the images list
for (int i = 1; i < images.length; i++) {
images[i] = new ImageIcon((getClass().getResource(i + ".gif")));
// testing by displaying 7,8 and 9 cards
}
setLayout(new FlowLayout(1, 1, 1));
add(new JLabel(images[7]));
add(new JLabel(images[8]));
add(new JLabel(images[9]));
}
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame frame = new TenCards();
frame.setTitle("Testing!");
frame.pack();
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
现在我的问题是,鉴于我在另一个文件中有我的二十一点类或程序,我如何组合这两个类,以便我可以在我的二十一点程序中使用所有这些图像? 我试着将我的TenCards程序粘贴到二十一点,但无济于事:(如果有人可以借给我一个指针或指向下一步,我会非常感激。
编辑我现在已经包含了我的二十一点程序并删除了另一个,因为stackoverflow不会同时接受两者,因为代码太多了。
import java.util.ArrayList;
import java.util.Scanner;
import javax.swing.JLabel;
public class myblackjack {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
ArrayList<Integer> player = new ArrayList<Integer>();
ArrayList<Integer> dealer = new ArrayList<Integer>();
ArrayList<Integer> cards = new ArrayList<Integer>();
// Ace is 1 as per Amos' instructions
for ( int i =1; i <= 10; i++){
cards.add(i);}
// The 3 face cards representing 10
for (int z = 0; z <= 2; z++){
cards.add(10);}
player.add(cards.get((int) (Math.random()*12)));
player.add(cards.get((int) (Math.random()*12)));
dealer.add(cards.get((int) (Math.random()*12)));
dealer.add(cards.get((int) (Math.random()*12)));
System.out.println("Your cards: "+player);
boolean moreplayer = true, morecomputer = true;
System.out.println("Hit 0 to stop, 1 for another card");
int s1 = sc.nextInt();
while (moreplayer || morecomputer){
int dealersum = 0, playersum = 0 ;
for (int p = 0; p<dealer.size(); p++){
dealersum = dealersum + dealer.get(p);
} if (dealersum<15){
morecomputer = true;
dealer.add(cards.get((int) (Math.random()*12)));
dealersum = dealersum + dealer.get(2);
}else{ morecomputer = false;
}if (s1 == 1){
moreplayer = true;
player.add(cards.get((int) (Math.random()*12)));
for (int b = 0; b<player.size(); b++){
playersum = playersum + player.get(b);
} System.out.println("Your cards: "+player);
System.out.println("Hit 0 to stop, 1 for another card");
s1 = sc.nextInt();
}else if (s1 == 0){
moreplayer = false;
for (int b = 0; b<player.size(); b++){
playersum = playersum + player.get(b);
}}if (playersum>21 && (moreplayer || morecomputer)){
moreplayer = false; morecomputer = false;
System.out.println(dealer + "dealer");
System.out.println("You've gone bust player, computer wins!");
}if (dealersum>21 && (moreplayer || morecomputer)){
moreplayer = false; morecomputer = false;
System.out.println(dealer + "dealer");
System.out.println(player + "player");
System.out.println("Computer has gone bust, player wins!");
}if (playersum>dealersum && (!morecomputer && !moreplayer) && (dealersum<=21 && playersum <=21)){
System.out.println("Player wins!");
System.out.println(dealer + "dealer");
moreplayer = false; morecomputer = false;
}if (dealersum>playersum && (!morecomputer && !moreplayer) && (dealersum<=21 && playersum <=21)){
System.out.println("Dealer wins");
System.out.println(dealer + "dealer");
moreplayer = false; morecomputer = false;
} if ((dealersum == playersum) && (!morecomputer && !moreplayer) && (dealersum<=21 && playersum <=21)){
System.out.println("TIE!");
System.out.println(dealer + "dealer");
moreplayer = false; morecomputer = false;
}
sc.close() ;
}
}
}/** I didn't consider suits, ace is value 1 and all 3 face cards are worth 10 points */
问候,M
“我如何组合这两个类,以便我可以在我的二十一点程序中使用所有这些图像?”
尝试将GUI程序与控制台程序结合起来并不是一个好主意(您的第一段代码是GUI程序,后者是控制台程序)。
要使用Swing更好地学习GUI编程,请参阅使用Swing 创建GUI 。 我关注的一些主要部分是
你问的问题是一个非常广泛的问题......唯一可以解决的问题是,如果有人花时间研究你的整个程序并花时间思考如何重构整个程序。 我们大多数人没有那段时间的奢侈品,或者说是生硬,只是不在乎投入那么努力。 将控制台程序转换为GUI程序并非易事。
所以我建议你花点时间学习Swing,通过链接的教程。 然后,如果你有一个特定的问题,比如“为什么我的按钮没有画一张卡?” ,我们可以为您提供帮助,因为您提供了必要的代码,显示的努力以及对问题的详细描述和理解。
祝好运!
简短的回答是......不要......
你在范式之间转换。 我的意思是,你原来的程序是使用命令行/程序驱动的范例,事情发生在一个定义良好的顺序中),当你试图转向GUI /事件驱动的范例时。
在事件驱动的环境中,事情可能以任何数量的顺序发生,您需要准备好处理它。
您将面临的最重要的范式转换之一是将游戏的模型/虚拟视图与游戏的物理/ UI视图分开。
这是一个重要的概念,因为它不仅可以使您的程序更容易编写,而且还可以更改。
这在模型 - 视图 - 控制器中得到了最好的描述,而Swing实现了这个概念(松散地)
花点时间阅读使用JFC / Swing创建GUI ,设计你的游戏模型,了解你需要告诉视图的内容以及控制器可以改变游戏的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.