繁体   English   中英

Java二十一点摆动gui ImageIcon

[英]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 我关注的一些主要部分是

  1. 使用Swing组件 ,您可以在其中找到可用的所有不同组件。
  2. 将事件监听器编写为Swing(所有GUI框架)都是事件驱动的,这意味着一个事件,例如用于绘制卡片的按钮,会导致带有卡片图像的标签被添加到播放器手中
  3. 在Container布置组件 ,您将学习如何使用不同的布局管理器为您的界面提供所有组件的清晰结构化外观。

你问的问题是一个非常广泛的问题......唯一可以解决的问题是,如果有人花时间研究你的整个程序并花时间思考如何重构整个程序。 我们大多数人没有那段时间的奢侈品,或者说是生硬,只是不在乎投入那么努力。 将控制台程序转换为GUI程序并非易事。

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

祝好运!

简短的回答是......不要......

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

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

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

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

这在模型 - 视图 - 控制器中得到了最好的描述,而Swing实现了这个概念(松散地)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM