尝试让 GUI 使用 arrayList 在牌组中打印随机卡

2024-05-04

所以我目前正在用java开发一个卡牌战争游戏。我试图让 GUI 屏幕使用 arrayList 从一组卡片图像中打印 2 张随机卡片(必须使用它进行分配)。卡片图像文件名为 1.png、2.png、...52.png 并存储在 image/card 目录中。我的问题是如何让两张卡随机出现?谢谢这是我的代码

另外,请注意,我是一个相对较新的程序员

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.Label;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import javafx.scene.paint.Color;
import javafx.scene.text.FontWeight;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import java.util.ArrayList;

public class CardWar extends Application{

public static void main(String args[]){
Application.launch(args);


}

@Override
public void start(Stage primaryStage){


ArrayList<Integer> cardList = new ArrayList<>();

for(int i = 1; i <=52;i++){
cardList.add(i);
}


java.util.Collections.shuffle(cardList);
System.out.println(cardList.get(0));




//Label label1 = new Label ("Welcome to the Card War Game!");

//layout for first scene
StackPane layout1 = new StackPane();
Button welcome = new Button("Click to Play");
Text text1 = new Text(20,20, "Welcome to The Game");
layout1.getChildren().add(welcome);



//layout for second scene
//Button button2 = new Button("You are here!");
Pane layout2 = new HBox (457);
//layout2.getChildren().add(button2);
Image image = new Image("image/card/1.png");
Image image2 = new Image("image/card/2.png");

ImageView imageView2 = new ImageView(image);
imageView2.setFitHeight(100);
imageView2.setFitWidth(100);

layout2.getChildren().add(new ImageView (image));
layout2.getChildren().add(new ImageView (image2));



Scene scene = new Scene (layout1,600,300);
Scene scene2 = new Scene(layout2,600,300);

welcome.setOnAction(e -> primaryStage.setScene(scene2));

primaryStage.setScene(scene);
primaryStage.setTitle("War Game");
primaryStage.show();

}
} 

这是您的代码的修改版本。这是你应该做的:

  • 创建一个专用的 Card 类,一个您可以使用的对象。不要使用整数
  • 将卡片加载到列表(牌组)中。卡片仅加载一次
  • 创建库存,i。 e.可以修改的套牌列表
  • 洗牌股票
  • 把库存放在桌子上
  • 从库存中选择一张卡片并将其添加到画面中,直到库存中没有更多卡片可用

代码:

public class CardWar extends Application {

    /**
     * List of all available cards. Loaded once at game start.
     */
    List<Card> deck;

    /**
     * List of cards in the game.
     */
    List<Card> stock;

    /**
     * Cards to be dealt
     */
    Pane stockPane;

    /**
     * Cards which are already dealt
     */
    FlowPane tableauPane;

    public static void main(String args[]) {
        Application.launch(args);

    }

    @Override
    public void start(Stage primaryStage) {

        // load all cards into a list
        loadCards();

        // create playfield: table with toolbar
        BorderPane playfield = new BorderPane();
        playfield.setStyle("-fx-background-color:green");

        // simple flowpane to align one card next to the other 
        FlowPane tableauPane = new FlowPane();

        // pick 2 cards and add them to the table
        Button button = new Button( "Pick Cards");
        button.setOnAction( e -> {

            // abort if we don't have cards in the deck
            if( stock.size() == 0)
                return;

            Card card;

            // pick top card and add it to the table
            card = stock.remove( stock.size()-1);
            stockPane.getChildren().remove(card);
            tableauPane.getChildren().add(card);

            // pick top card and add it to the table
            card = stock.remove( stock.size()-1);
            stockPane.getChildren().remove(card);
            tableauPane.getChildren().add(card);

        });

        playfield.setCenter(tableauPane);

        // talon contains all cards of the deck
        stockPane = new Pane();
        playfield.setBottom(stockPane);

        // toolbar with a button
        HBox toolbar = new HBox();
        toolbar.getChildren().add( button);

        playfield.setTop(toolbar);

        Scene scene = new Scene(playfield, 1600, 900, Color.GREEN);

        primaryStage.setScene(scene);
        primaryStage.setTitle("War Game");
        primaryStage.show();

        // create deck for game, shuffle cards
        startGame();

    }

    private void startGame() {

        // create stock from deck
        stock = new ArrayList<>( deck);

        // shuffle stock
        Collections.shuffle(stock);

        // put cards on stock pane
        for( int i=0; i < stock.size(); i++) {

            // get card from stock
            Card card = stock.get(i);

            // set card position
            card.setLayoutX(i * 20);

            // put card on stock pane
            stockPane.getChildren().add( card);

        }
    }

    private void loadCards() {

        deck = new ArrayList<>();

        for (int i = 1; i <= 52; i++) {
            deck.add( new Card( i));
        }
    }

    private static class Card extends ImageView {

        public Card( int id) {

            setImage(new Image( getClass().getResource("image/card/" + id + ".png").toExternalForm()));

            setFitHeight(100);
            setFitWidth(100);

        }

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

尝试让 GUI 使用 arrayList 在牌组中打印随机卡 的相关文章

  • 从 BroadcastReceiver 获取方法来更新 UI

    我正在尝试根据变量的变化更新用户界面BroadcastReceiver 因此 我需要调用一个扩展类的方法 以获取我提到的变量 BroadcastReceiver in MainActivity取决于但我无法以任何方式获得真正的返回值 扩展的
  • Python 3 os.urandom

    在哪里可以找到完整的教程或文档os urandom 我需要获得一个随机 int 来从 80 个字符的字符串中选择一个字符 如果你只需要一个随机整数 你可以使用random randint a b 来自随机模块 http docs pytho
  • Java:无安全管理器:RMI 类加载器已禁用

    您好 我有 RMI 应用程序 现在我尝试从客户端调用服务器上的一些方法 我有以下代码 public static void main final String args try Setting the security manager Sy
  • 为什么我的 @OneToMany 属性出现主键违规?

    我有一个实体 Entity public class Student GeneratedValue strategy GenerationType AUTO Id private long id OneToMany private Set
  • Java - toString 到 Color

    我一整天都在努力解决这个问题 基本上我做了一个 for 循环 将条目添加到数组列表中 其中一项是 颜色 变量 我已经用过random nextInt为颜色构造函数的红色 绿色和蓝色部分创建新值 我还设置了一个toString方法 这样我就可
  • 如何修复maven错误JAVA_HOME环境变量未正确定义

    当我在虚拟环境中检查maven的版本时 出现以下错误 The JAVA HOME environment variable is not defined correctly This environment variable is need
  • 为本地@ExceptionHandler编写JUnit测试

    我有以下控制器 class Controller ResponseStatus HttpStatus OK RequestMapping value verifyCert method RequestMethod GET public vo
  • 生产者程序中的 kafka 网络处理器错误(ArrayIndexOutOfBoundsException:18)

    我有下面的 kafka Producer Api 程序 我对 kafka 本身是新手 下面的代码从 API 之一获取数据并将消息发送到 kafka 主题 package kafka Demo import java util Propert
  • Java:不使用 Arrays.sort() 对整数数组进行排序

    这是我们 Java 课程的练习之一中的说明 首先 我想说我 做了我的功课 我不仅仅是懒惰地请 Stack Overflow 上的人帮我回答这个问题 在所有其他练习中 这个特定项目一直是我的问题 因为我一直在努力寻找 完美的算法 编写JAVA
  • 单元测试、集成测试还是设计中的问题?

    我编写了我的第一个单元测试 我认为它过于依赖其他模块 我不确定是否是因为 这是一个复杂的测试 我实际上已经编写了集成测试或 我的设计有问题 我首先要说的是 虽然我有大约 4 年的开发经验 但我从未学过 也没有人教过自动化测试 我刚刚使用 H
  • Java:java.util.Preferences 失败

    我的程序将加密的产品密钥数据保存到计算机上java util Preferences类 系统首选项 而不是用户 问题是 在 Windows 和 Linux 上 尚未在 OSX 上测试过 但可能是相同的 如果我不运行该程序sudo或者具有管理
  • 如何加载图像文件到ImageView?

    我试图在从文件选择器中选择图像文件后立即显示该图像文件 文件选择器仅限于 png 和 jpg 文件 所选文件存储在文件类型的变量中 为此 我设置了一个 ImageView 我希望用这个新文件设置图像 唯一的问题是它的类型是文件而不是图像 如
  • SDK尚未初始化,请务必先调用FacebookSdk.sdkInitialize()

    我在实现 Facebook SDK 时遇到此错误 并且我tried https stackoverflow com questions 15490399 error inflating class com facebook widget l
  • 在片段之间切换时底部导航栏会向下推

    在我的活动中 我有一个底部导航栏和框架布局来显示片段 一切正常 但问题是当我开始按顺序从 1 4 移动时 底部导航栏保持在其位置 但当我突然从 4 跳到2 然后底部导航栏就会超出屏幕 当再次单击同一项目时 它就会回到正常位置 该视频将清楚地
  • 从特定 JAR 文件读取资源(文件的重复路径)

    假设您有 jar1 和artifactId 动物园 jar2 和artifactId 动物 两个 jar 都有一个具有相同路径的资源文件 例如 animals animal txt 有什么方法可以从特定的 jar 中读取该文件吗 使用 ge
  • 内部类的访问修饰符[重复]

    这个问题在这里已经有答案了 可能的重复 受保护 公共内部类 https stackoverflow com questions 595179 protected public inner classes 我确信这个问题已经被问过 但我找不到
  • 在java中创建一个XML树并将其转换为json对象

    我尝试创建也能够转换为 json 的树 但对于只有一个xpath 当我尝试实现多个 xpath 时 我无法获得所需的输出 这里我分享一下我的实现 private static Document addElemtbypath List
  • 乔达时间中两个日期之间的天数

    如何找到两次之间的天数差异乔达时间 http www joda org joda time DateTime http www joda org joda time apidocs org joda time DateTime html实例
  • 如何在apache POI中读取excel文件的准确单元格内容

    当我读取单元格的内容时 例如如果它是日期格式 它会转换为另一个值 例如 12 31 2099 gt 46052 和 50 00 gt 50 和 50 00 gt 0 5 但我想要的是获取每个单元格的确切字符串值 我的代码是这样的 cell
  • 通过向上转换将 Java.sql.date 转换为 Java.util.date 安全吗?

    java sql date 扩展了 java util date 那么通过将 java sql date 转换为 java util date 是否可以在两者之间进行转换 或者有其他方法可以转换它们吗 您不一定需要强制转换 您可以将 SQL

随机推荐