首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gui ImageIcon

gui ImageIcon
EN

Stack Overflow用户
提问于 2014-02-12 03:21:02
回答 2查看 1.3K关注 0票数 0

一周前,我刚刚开始使用Java,并完成了我的第一个21点程序。我想通过使用Java (ImageIcon)来增强它,这样每次我画一张卡片时,假设是一个ace,它实际上在屏幕上或我的当前手上显示了一个图像。我编写了这个程序,显示我想要的卡片:

代码语言:javascript
复制
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);
    }
}

现在,我的问题是,如果我将我的blackjack类或程序放在另一个文件中,我如何将这两个类组合在一起,以便在我的blackjack程序中使用所有这些图像内容?,我尝试将我的TenCards程序复制到Blackjack中,但没有效果:(如果有人能帮我或指点我下一步的工作,我会非常感激的。

编辑,我现在已经包含了我的blackjack程序,并删除了另一个,因为由于代码太多,堆栈溢出不能同时接受这两者。

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

发布于 2014-02-12 04:14:17

“我如何将这两个类组合起来,以便在我的blackjack程序中使用所有这些图像内容?”

尝试将GUI程序与控制台程序结合起来并不是一个好主意(您的第一段代码是GUI程序,而后者是控制台程序)。

要更好地学习使用Swing进行GUI编程,请参见用Swing创建GUI。我要关注的几个主要部分是

  1. 使用Swing组件中,您可以找到对您可用的所有不同组件。
  2. 写入事件侦听器作为Swing (所有的图形用户界面框架)都是事件驱动的,这意味着一个事件,比如按下一个按钮来绘制卡片,会导致一个带有卡片图像的标签被添加到玩家的手上。
  3. 在容器中布局组件中,您将学习如何使用不同的布局管理器来为您的界面提供一个干净的结构化外观和您的所有组件。

你要问的是一个非常宽泛的问题。唯一真正能回答的方法是,如果有人花时间研究你的整个程序,并花时间思考如何重构整个程序。我们中的大多数人没有那个时候的奢侈,或者直言不讳,只是不太在意投入到那种努力中。将控制台程序转换为GUI程序并非易事。

所以我建议你花点时间学习Swing,通过阅读相关的教程。然后,如果你有一个特定的问题,比如“为什么我的按钮不画一张卡片?”,如果你提供了必要的代码,所显示的努力,以及对问题的详细描述和理解,我们一定会帮助你。

祝好运!

票数 2
EN

Stack Overflow用户

发布于 2014-02-12 04:37:13

简单的回答是.不要..。

你在范式之间转换。我的意思是,您的原始程序是使用命令行/过程驱动的范例--事情是以一个定义良好的顺序发生的),当您试图迁移到GUI/事件驱动的范例时。

在事件驱动的环境中,事情可以按任意顺序发生,您需要做好处理它的准备。

您将面临的最重要的范式转变之一是将游戏的模型/虚拟视图与游戏的物理/UI视图分开。

这是一个重要的概念,因为它不仅将使您的程序更容易编写,而且还可以更改。

最好用模型-视图-控制器和Swing实现这个概念(松散地)来描述这一点。

花时间阅读用JFC/Swing创建GUI,设计(游戏的)模型,了解需要告诉视图的内容以及控制器可以更改的游戏内容。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21717917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档