gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:42:45 24 4
gpt4 key购买 nike

所以我目前正在用 java 开发一款卡牌 war 游戏。我试图让 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);

}

}
}

关于java - 尝试让 GUI 使用 arrayList 在牌组中打印随机卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29993613/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com