到目前为止,我所有的代码都编译得很好,但是洗牌按钮使所有的牌都消失了
import java.util.Random;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.image.ImageView;
import javafx.scene.layout.*;
import javafx.scene.control.Button;
import javafx.geometry.Pos;
public class P6 extends Application
{
public static final int ASIZE = 54;
public static final int ROWS = 6;
public static final int COLS = 9;
public void start(Stage primaryStage)
{
int aCardDeck[] = new int[ASIZE]; //54 cards in a deck
for( int i = 0 ; i < ASIZE ; i++ ) //ASIZE is 54
aCardDeck[i] = i + 1; //populate with elements 1-54
GridPane gPane = new GridPane(); //Instantiate Grid for cards in rows/cols
for( int i = 0, k = 0 ; i < ROWS && k < ASIZE; i++ ) //6 rows, 9 columns
for( int j = 0; j < COLS ; j++ )
gPane.add(new ImageView("image/card/" + aCardDeck[k++] + ".png"),j,i);
Button btShuffle = new Button("Shuffle");
btShuffle.setOnAction
( e -> // Lamda Event Handler
{ // Like anonymous inner class
int r, c, n;
shuffle( aCardDeck ); // Random shuffle
gPane.getChildren().clear();
for ( r = n = 0; r < ROWS && n < ASIZE; r++)
for (c = 0; c < COLS ; c++)
gPane.add(new ImageView("~/../public/image/card/" + aCardDeck[n++]
+ ".png"),c,r);
}
);
HBox hBox = new HBox(5); // Row of buttons
hBox.getChildren().add( btShuffle ); // Add button to box
BorderPane pane = new BorderPane();
pane.setCenter(gPane); // Layout rows of cards in center
pane.setBottom(hBox); // Layout buttons at bottom
BorderPane.setAlignment(hBox, Pos.CENTER);
Scene scene = new Scene(pane, 650, 600); // Create scene, place in stage
primaryStage.setTitle("P6"); // Set the stage title
primaryStage.setScene(scene); // Place the scene in the stage
primaryStage.show(); // Display the stage
}
public void ascendSort (int [] a){}
public void descendSort (int [] a){}
public void ascendRankSort (int [] a){}
public void descendRankSort (int [] a){}
public void shuffle( int [] a ){
int r, tmp;
Random rand = new Random();
long seed = System.currentTimeMillis();
rand.setSeed(seed);
for( int i = 0 ; i < ASIZE ; i++ ){
r = rand.nextInt(ASIZE);
tmp = a[r];
a[r] = a[i];
a[i] = tmp;
}
}
public static void main(String[] arg`enter code here`s)
{
launch(args);
}
}
错误消息:线程“JavaFX Application thread”Java.lang.IllegalArgumentException:无效URL:在javafx.scene.image.image.validateurl(image.Java:1094)在javafx.scene.image.image(image.Java:598)在javafx.scene.image.image.image.view(imageview.Java:164)在p6.lambda$start$0(p6.lambda$lambda$1/16273898(imageview.Java:164)在Dispatcher.DispatchEvent(BasicEventDispatchChainImpl.DispatchEvent(EventDispatchChainImpl.java:114)(BasicEventDispatchEvent(BasicEventDispatchEvent(BasicEventDispatchEvent:56)(BasicEventDispatchEvent:56)(BasicEventDispatchEvent(BasicEventDispatchEvent:56)(BasicEventDispatchEvent(EventDispatchChainImpl.java:114在com.sun.javafx.event.CompositeEventHandler.DispatchBubblingEvent(CompositeEventHandler.java:80)在com.sun.javafx.event.EventHandlerManager.DispatchBubblingEvent(EventHandlerManager.java:238)在com.sun.javafx.event.EventHandlerManager.DispatchBubblingEvent(EventHandlerManager.java:191)在com.sun.javafx.event.CompositeEventDispatchEvent(ventutil.java:74)在com.sun.javafx.event.eventutil.fireevent(event.java:54)在javafx.scene.scene$mousehandler.process(scene.java:3746)在javafx.scene.scene$mousehandler.access$1800(scene.java:3471)在javafx.scene.scene.impl_processmouseevent(scene.java:1695)在javafx.scene.scene$scenePeerListener.mouseevent(n.java:48)在com.sun.glass.ui.gtk.gtkApplication$6$1.在java.lang.Thread.Run(gtkApplication.java:149)在java.lang.IllegalArgumentException:无效URL或在javafx.scene.image.image.validateurl(image.java:1086)找不到资源
好吧,我想我有一个答案,但我还没有测试过,所以我不确定。
但我相信你的问题是编码不一致。
下面是您在开始填充GPANE时使用的行:
gPane.add(new ImageView("image/card/" + aCardDeck[k++] + ".png"),j,i);
这是随机化后使用的线:
gPane.add(new ImageView("~/../public/image/card/" + aCardDeck[n++]
+ ".png"),c,r);
我认为您遇到的问题是public/image/card
是错误的路径,您需要对其进行更改,使其与以前的路径相同。另外,我将使它成为refresh
方法,而不是到处复制那一行代码。因此,您将在每次更改数组时调用refresh
方法,而不是在任何地方复制+粘贴gpane.add(...)
。
大多数纸牌游戏都需要洗牌,也就是让纸牌随机排列。在第10.5节,我们看到了怎样生成随机数,但怎样利用随机数实现洗牌功能却并非显然意见的。 一种可行的方案是,模拟人洗牌的方法,将牌分为两堆,然后通过在每个牌堆中轮流选择的方式实现原牌堆的重新组织。因为一般而言,人并不能做到完美地洗牌,而程序经过大约7次迭代之后,牌堆中纸牌的顺序已经相当随机了。但是计算机程序每次在做完美洗牌的时候有一个令人讨厌的属性—
在第13.6节我们编写了一个洗牌算法的伪代码。假设shuffleDeck函数实现洗牌功能,其参数为一个牌堆,我们就可以这样创建牌堆并洗牌: Deck deck; // 创建一个标准的52张牌的牌堆 deck.shuffle (); // 洗牌 然后,使用subdeck函数来分几手牌: Deck hand1 = deck.subdeck (0, 4); Deck hand2 = dec
问题内容: 我想知道,是否有某种方法可以在mysql / sql中改组字符串的字母,即类似 伪代码的内容 :? 从http://dev.mysql.com/doc/refman/5.0/en/string- functions.html 找不到任何内容,对其进行搜索似乎只是找到改组结果的解决方案,而不是字符串。 问题答案: 干得好: 有关输出,请参见sqlfiddle.com。 已使用mariad
在本作业中,您将使用小程序显示扑克牌的图像。小程序应该从您下载的“images”文件夹中加载一组52张扑克牌图像。小程序应该洗牌(使用随机数生成器)并显示洗牌牌组的前10张牌。将卡片分为两行,每行五张。 我的小程序部分工作,但是当我运行小程序查看器时,显示只是同一张卡十次。这是我的代码:
我已经完成了完美洗牌的几乎所有java代码。我只是在与错误作斗争:“线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:索引26长度26在cards\u shuffle.main(cards\u shuffle.java:72)”此错误指的是行: 洗牌牌组的上半部分: 黑桃4黑桃10钻石8黑桃A钻石4红桃J红桃Q黑桃Q黑桃4钻石J黑桃K红桃K红
本文向大家介绍C++扑克牌的洗牌发牌游戏设计,包括了C++扑克牌的洗牌发牌游戏设计的使用技巧和注意事项,需要的朋友参考一下 笔者在大学二年级期间,做过的一次C++程序设计:扑克牌的洗牌发牌游戏。具体内容是:除去大王和小王,将52张扑克牌洗牌,并发出5张牌。然后判断这5张牌中有几张相同大小的牌,是否是一条链,有几个同花等。 笔者在学习他人设计的基础上,完成了自己的程序设计。这里将源程序分享给大家。