Java 二十一点摇摆 gui ImageIcon

2024-01-28

我一周前刚刚开始学习 Java,并完成了我的第一个二十一点程序。 我想通过使用 Java swing (ImageIcon) 来增强它,以便每次我抽一张牌(比如说一张 A)时,它实际上都会将 A 作为图像显示在屏幕或我当前的手牌上。 我编写了这个程序来显示我想要的卡片:

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 程序复制粘贴到 Blackjack 中,但无济于事:(如果有人可以帮助我或指导我下一步,我将非常感激。


EDIT我现在已经包含了我的二十一点程序并删除了另一个程序,因为 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 */

问候, 中号


“我如何组合这两个类,以便我可以在我的二十一点程序中使用所有这些图像内容?”

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

要更好地学习使用 Swing 进行 GUI 编程,请参阅使用 Swing 创建 GUI http://docs.oracle.com/javase/tutorial/uiswing/。我关注的一些主要部分是

  1. 使用 Swing 组件 http://docs.oracle.com/javase/tutorial/uiswing/components/index.html您可以在其中找到所有可用的不同组件。
  2. 编写事件监听器 http://docs.oracle.com/javase/tutorial/uiswing/events/index.html因为 Swing(与此相关的所有 GUI 框架)都是事件驱动的,这意味着一个事件(例如按下绘制卡片的按钮)会导致将带有卡片图像的标签添加到玩家手中
  3. 在容器内布置组件 http://docs.oracle.com/javase/tutorial/uiswing/layout/index.html在这里您将学习如何使用不同的布局管理器为您的界面提供干净的结构化外观以及所有组件。

您所问的是一个非常广泛的问题……唯一真正可以回答的方法是,如果有人花时间研究您的整个程序并花时间思考如何重构整个程序。我们大多数人都没有那个时间的奢侈,或者直言不讳地说,只是没有足够的关心去付出那样的努力。将控制台程序转换为GUI程序并不是一件容易的事。

因此,我建议您花时间通过链接的教程来学习 Swing。Then如果您有具体问题,例如“为什么我的按钮不抽牌?”,只要您提供必要的代码、所付出的努力以及对问题的详细描述和理解,我们一定可以为您提供帮助。

祝你好运!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 二十一点摇摆 gui ImageIcon 的相关文章

随机推荐

  • 如何用C/C++打开Chrome扩展程序中包含的文件?

    我正在尝试在 Chrome 扩展程序中打开一个要解析的文件 例如 config txt 通过 Javascript 这将相当容易 例如 chrome extension getURL config txt 会得到类似的东西chrome ex
  • 对 Intellij 产品中的控制台输出进行着色

    我有一个带有默认输出的自定义脚本 我想对错误 警告和信息进行着色 在 Intellij 产品 IDEA PhpStorm PyCharm 中有办法做到这一点吗 已经有一段时间了 但如果您仍然感兴趣 有一个用于控制台着色的新插件 与 Inte
  • 如何避免 IntelliTrace 事件中的 EF 查询被截断?

    我正在尝试调试实体框架查询 但是 当查询变得太大时 intelliTrace 中显示的查询会被截断 即使我将其复制并粘贴到记事本中 也仅显示查询的一部分 是否有任何解决方法可以获取 EF 生成的整个查询 提前致谢 已经有一段时间了 但它可能
  • 滚动时列表视图图像发生变化

    I am 解析 json数据在一个列表视图 图像视图和文本视图 首先四项列表视图的图像和文本视图正确添加但是当我滚动列表视图时 图像视图中的图像正在发生变化 这是我的代码 适配器 java public class Adapter exte
  • 角度插值无法正常工作?

    我有一个带有插值的样本 当使用任何一个事件时 它会正确显示下拉值 如下所示 sample click me https stackblitz com edit angular 234dlf file src 2Fapp 2Fapp comp
  • MSBuild (TFS) 中的 Nhibernate.Bytecode.Castle 问题

    我们有一个 Fluent NHibernate 映射测试正在本地计算机上通过 但是当我们签入 TFS 时 测试在构建服务器上失败 我们正在使用 MSTest 我们得到的错误是 NHibernate Bytecode UnableToLoad
  • 如何在不修改代码的情况下禁用在 pytest 中跳过测试?

    我继承了一些实现的代码pytest mark skipif进行一些测试 阅读 pytest 文档 我知道我可以添加条件 可能检查环境变量 或者使用更高级的功能pytest mark将测试组一起控制 不幸的是 到目前为止 文档中似乎没有任何内
  • 字幕与文字混合

    我尝试使用以下方法将字幕与纯文本分开two空格处 我的 Rmd 文档的第一部分如下所示 title Script de Limpieza errores de digitalizacion y division de base madre
  • 弱引用而不是 getActivity() (Android 避免内存泄漏)?

    为了避免内存泄漏 我编写了以下方法 该方法将在活动中使用 并且主要在片段中使用 使用继承 该方法应该允许我永远不会通过调用直接引用该活动 this or getActivity 方法是 private WeakReference
  • 以另一个用户身份运行任务

    使用卡皮斯特拉诺v3 我怎样才能跑all远程任务通过su作为另一个用户 我在官方文档中找不到任何内容 http capistranorb com http capistranorb com 对于我的用例 每个虚拟主机都有一个 SSH 用户和
  • 创建事件观察者以获得焦点?

    原型中是否可以有焦点事件冒泡 我试图避免在每个输入元素上分配一个观察者
  • python和node base64解码的区别

    我对这个base64解码问题感到困惑 似乎python和node js的做法不同 我相信 Node 正确地做到了这一点 有人能帮忙指出为什么 python 在这里不起作用吗 谢谢 Node gt console log Buffer fro
  • 构建进度条而不启动新线程

    我需要在 a 中添加一个进度条JFrame但我想更新这个栏而不生成新线程 例如摇摆工人后台更新栏 有没有办法更新当前线程 主 JFrame 的当前线程 中的进度条 详细信息 我有第一类 ChooseGUI 它扩展 JFrame 并调用第二类
  • MongoDB 全文搜索 + 部分单词匹配的解决方法

    由于使用 mongodb 全文搜索无法通过 blue 一词找到 blueberry 因此我想帮助我的用户将 blue 一词补全为 blueberry 为此 是否可以查询 mongodb 全文索引中的所有单词 gt 我可以使用这些单词作为建议
  • 如何使用 Requests 从 Github 下载并写入文件

    假设 github 存储库中有一个文件 https github com someguy brilliant blob master somefile txt https github com someguy brilliant blob
  • 完全禁用 Backbone.js 哈希,但将 PushState 保留在历史记录中?

    我想使用 Backbone 出色的路由系统 但我不想为旧版浏览器提供任何形式的哈希支持 使用时是否可以完全禁用哈希pushState in Backbone History 它没有记录在backbone js 页面上 但我在带注释的源代码中
  • 离子文件下载不起作用

    我正在构建一个用于壁纸的离子应用程序 在应用程序中 显示了存储在 www assets img 中的图像 我在下面构建了 2 个按钮 用于将显示的图像下载和检索到移动设备内存 当我单击下载按钮时 会显示一个对话框 显示 下载成功 Pug j
  • 构建过程中出现“找不到类型或命名空间名称”错误

    我正在 C Windows 应用程序中使用 我已经使用 TempProWin gt 对于 Windows 应用程序项目TempProApp gt 用于数据库和使用 CSLA 方法的类文件等功能 在 TempProWin frmLogin c
  • TCP/IP IOCP 接收到的数据有时会损坏 - Windows 上的 Visual C++

    我正在编写一个简单的测试 ICOP 客户端和服务器 以确保我正确使用 API 并且服务器正确接收客户端发送的数据 我已经包含了这个问题的所有代码 这就是我遇到一些问题的地方 接收缓冲区内的数据有时似乎已损坏 损坏是因为有时缓冲区内的数据块可
  • Java 二十一点摇摆 gui ImageIcon

    我一周前刚刚开始学习 Java 并完成了我的第一个二十一点程序 我想通过使用 Java swing ImageIcon 来增强它 以便每次我抽一张牌 比如说一张 A 时 它实际上都会将 A 作为图像显示在屏幕或我当前的手牌上 我编写了这个程