- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在研究二十一点游戏,作为面向对象编程类(class)的期末项目。我一生都无法弄清楚为什么我的牌无法正确渲染(未显示的牌的值仍然被考虑在内 - 这意味着如果我有二十一点并且我只能看到我的一张牌,我仍然会因拥有二十一点而获得积分)。这是我想要传达的内容的屏幕截图(注意:每次总是至少缺少一张牌,并且庄家面朝下的牌也无法正确显示):
这是与我的卡片渲染问题相关的代码段:
/**
* Paints the cards stacked top-down in addition to the rest of the
* components. The cards are arranged so the user can still see all of
* the cards' values.
*/
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (hand == null) return;
for (int i = 0; i < hand.length(); i++) {
drawCard(g, hand.get(i), 10, 76 + 33*i);
}
}
/**
* Paints a card image onto (x,y) of the container. A face down card will
* be drawn accordingly.
* @param g the graphics context
* @param card the card to be printed
* @param x the x-position of the printed card in this container
* @param y the y-position of the printed card in this container
*/
private void drawCard(Graphics g, Card card, int x, int y){
String face = "";
String suit = "";
String filepath = "";
if (!card.isFaceUp()) {
suit = "b1";
face = "fv";
}
else {
face = String.valueOf(card.getFace());
if (face == "11"){
face = "j";
}
if (face == "12"){
face = "q";
}
if (face == "13"){
face = "k";
}
switch (card.getSuit()) {
case Card.DIAMONDS: suit = "d"; break;
case Card.CLUBS: suit = "c"; break;
case Card.HEARTS: suit = "h"; break;
default: suit = "s"; break; //Spades
}
BufferedImage cardImg = null;
filepath = "C:/Users/Student/workspace/Blackjack GUI/src/images/" + suit + face + ".png";
try {
cardImg = ImageIO.read(new File(filepath));
} catch (IOException e) {
}
g.drawImage(cardImg,x,y,71,96,this);
}
卡片的值(“面”)和花色是从我的类 Card 中的整数派生出来的。这是该类的副本:
/**
* A class the represents the deck of 52 cards used in Blackjack.
* Cards can be one of 13 faces, one of four suits, and one of two colors.
* Methods will get the names, faces, values, suits, or colors of the cards and
* can flip the card face up or face down.
* @author Mike Mulhearn
*/
public class Card {
/**
* The value of an Ace
*/
public static final int ACE = 1;
/**
* The value of a Two
*/
public static final int TWO = 2;
/**
* The value of a Three
*/
public static final int THREE = 3;
/**
* The value of a Four
*/
public static final int FOUR = 4;
/**
* The value of a Five
*/
public static final int FIVE = 5;
/**
* The value of a Six
*/
public static final int SIX = 6;
/**
* The value of a Seven
*/
public static final int SEVEN = 7;
/**
* The value of an Eight
*/
public static final int EIGHT = 8;
/**
* The value of a Nine
*/
public static final int NINE = 9;
/**
* The value of a Ten
*/
public static final int TEN = 10;
/**
* The value of a Jack
*/
public static final int JACK = 11;
/**
* The value of a Queen
*/
public static final int QUEEN = 12;
/**
* The value of a King
*/
public static final int KING = 13;
/**
* The value of a Spade
*/
public static final int SPADES = 3;
/**
* The value of a Diamond
*/
public static final int DIAMONDS = 0;
/**
* The value of a Club
*/
public static final int HEARTS = 2;
/**
* The value of a Club
*/
public static final int CLUBS = 1;
private int suit; //Represents the suit of the card (0-Diamond,1-Club,2-Heart,3-Spade)
private int face; //Will contain a value from 0 to 12, from Ace to King
private boolean isFaceUp = true; //Tells whether the card is face up or face down
/**
* Create a card with suit cardSuit, face cardFace, and visibility faceUp
* @param cardSuit is the suit of the card
* @param cardFace is the face of the card
* @param faceUp is true when card is face up, false if face down
*/
public Card(int cardSuit, int cardFace, boolean faceUp){
suit = cardSuit;
face = cardFace;
isFaceUp = faceUp;
}
/**
* Create a card with suit cardSuit, face cardFace
* @param cardSuit is the suit of the Card
* @param cardFace is the face of the Card
*/
public Card(int cardSuit, int cardFace){
suit = cardSuit;
face = cardFace;
isFaceUp = true;
}
/**
* Gets the suit of the card
* @return integer value with the suit of the card
*/
public int getSuit(){
return suit;
}
/**
* Gets the color of the card
* @return Color of the card as a String
*/
public String getColor(){
if(suit == 0 || suit == 2)
return "Red";
else
return "Black";
}
/**
* Gets the face of the Card
* @return Face of the Card
*/
public int getFace(){
return face;
}
/**
* Gets the value of the Card
* Uses the face of the Card to calculate the value
* Ace is 1, 2-9 are themselves, 10 and higher are 10
* @return value of the card
*/
public int getValue(){
if(face >= TWO && face <= TEN)
return face;
else if(face > TEN)
return 10;
return -1;
}
/**
* Gets the highest possible value of the ace
* @return integer of the highest possible value of the ace
*/
public int getHighValue() {
int high = getValue();
if (high == -1) {
return 11;
} else {
return high;
}
}
/**
* Gets the lowest value of the ace
* @return integer of the lowest possible value of the ace
*/
public int getLowValue() {
int low = getValue();
if (low == -1) {
return 1;
} else {
return low;
}
}
/**
* Flips the card over
*/
public void flip(){
isFaceUp = !isFaceUp;
}
/**
* Determines whether the cards are face up
* @return boolean value representing whether the card is face up or down
*/
public boolean isFaceUp(){
return isFaceUp;
}
/**
* Gets the suit name
* @return String with the suit of the card
*/
public String getSuitName(){
switch(suit) {
case DIAMONDS: return "Diamonds";
case CLUBS: return "Clubs";
case HEARTS: return "Hearts";
case SPADES: return "Spades";
default: return "Error: No Suit Found";
}
}
/**
* Gets the face name
* @return String with the face of the card
*/
public String getFaceName() {
switch (face) {
case ACE: return "Ace";
case TWO: return "Two";
case THREE: return "Three";
case FOUR: return "Four";
case FIVE: return "Five";
case SIX: return "Six";
case SEVEN: return "Seven";
case EIGHT: return "Eight";
case NINE: return "Nine";
case TEN: return "Ten";
case JACK: return "Jack";
case QUEEN: return "Queen";
case KING: return "King";
default: return "Error: No Face Found";
}
}
}
最后是 GUI 类中主函数的副本:
/**
* Runs the Game
* @param args Main Method
*/
public static void main(String[] args) {
GUI b = new GUI();
Game game = b.new Game();
JOptionPane.showMessageDialog(game, "Welcome to Mike Mulhearn's House of Cards. " +
"Today we will be indulging ourselves in a game of Blackjack. " +
"Please take your seat.");
while (true) {
if (game.human.getMoney() < MIN_BET) {
JOptionPane.showMessageDialog(game, "You don't have enough money to play. YOU LOSE!");
System.exit(0);
}
System.out.println(game.deck.getCount());
game.askBets();
game.deal();
game.repaint();
game.setButtonState(true, true, true, false, true);
if (game.human.getCurrentBet() > game.human.getMoney())
game.playerChoices.disableDouble();
while (game.turnContinue) { game.repaint(); }
game.setButtonState(false, false, false, false, false);
game.doAITurns();
game.repaint();
game.doDealerTurn();
game.repaint();
game.doPayOuts();
game.reset();
}
}
如果我遗漏了任何代码,这里是我的程序的压缩副本:Blackjack GUI.zip !
如果有人能在这方面帮助我,我将非常感激!
最佳答案
我几乎可以肯定这是由于字符串比较错误造成的:
face = String.valueOf(card.getFace());
if (face == "11"){
face = "j";
}
if (face == "12"){
face = "q";
}
if (face == "13"){
face = "k";
}
将它们更改为if (face.equals("另一个字符串"))
。请参阅"How do I compare strings in Java?"
这些检查不会成立,因此您将获得不存在的文件路径。如果您没有吃 IOException,您就会知道这一点:
filepath = "C:/Users/Student/workspace/Blackjack GUI/src/images/" + suit + face + ".png";
try {
cardImg = ImageIO.read(new File(filepath));
} catch (IOException e) {
}
顺便说一句,你不应该在绘画时进行 IO。相反,在启动时读取所有图像并将它们放入 map 中。
static final Map<String, Image> IMGS = new HashMap<String, Image>();
static {
HashMap<String, Image> imgs = new HashMap<String, Image>();
String dir = "C:/Users/Student/workspace/Blackjack GUI/src/images/";
String png = ".png";
for (String suit = "d", name; ;) {
for (int face = 1; face <= 13; face++) {
if (face == 11) {
name = suit + "j";
} else if (face == 12) {
name = suit + "q";
} else if (face == 13) {
name = suit + "k";
} else {
name = suit + face;
}
try {
imgs.put(
name,
ImageIO.read(new File(dir + name + png));
);
} catch (IOException e) {
System.out.println(
"Exception <" + e.toString() + "> for " + name
);
}
}
if (suit.equals("d") {
suit = "c";
} else if (suit.equals("c")) {
suit = "h";
} else if (suit.equals("h")) {
suit = "s");
} else {
break;
}
}
IMGS = Collections.unmodifiableMap(imgs);
}
关于Java Blackjack GUIpaintComponentdrawImage不显示所有纸牌,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20462117/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!