基于Swing的Java游戏
这是我一直在努力解决的问题 我需要为一些大学课程制作一个游戏。游戏基本上是一个4x4网格。当我点击一个按钮时,玩家应该在其位置的1平方之内随机移动 在网格上随机生成敌方宇宙飞船,如果玩家降落在宇宙飞船上,它就会摧毁它。如果在同一个广场上有两艘敌舰,并且玩家降落在该广场上,那么玩家将被摧毁 我已经使用基于Swing的Java游戏,java,grid-layout,Java,Grid Layout,这是我一直在努力解决的问题 我需要为一些大学课程制作一个游戏。游戏基本上是一个4x4网格。当我点击一个按钮时,玩家应该在其位置的1平方之内随机移动 在网格上随机生成敌方宇宙飞船,如果玩家降落在宇宙飞船上,它就会摧毁它。如果在同一个广场上有两艘敌舰,并且玩家降落在该广场上,那么玩家将被摧毁 我已经使用gridlayout和移动播放器所需的按钮创建了一个GIU,但是我在尝试如何实际使用网格时遇到了问题。我创建了一个元素类来创建网格对象(即敌舰列表),但我不知道如何将该类与我的网格布局一起使用。我知道
gridlayout
和移动播放器所需的按钮创建了一个GIU,但是我在尝试如何实际使用网格时遇到了问题。我创建了一个元素
类来创建网格对象(即敌舰列表),但我不知道如何将该类与我的网格布局
一起使用。我知道我还必须在每次移动后重新绘制网格以反映更改,但我不知道是否需要为此创建自定义重画方法
任何朝正确方向的推动都会非常有帮助。不久前,我创建了一款基于
网格布局的纸牌游戏。以下是一些用于驱动重大事件的代码:
CardPanel extends JPanel {
public CardPanel() {
setLayout(gridLayout);
placeCards(N);
chatBoxText = new JTextArea(5, 30);
}
public void placeCards(int numCards) {
for (int i = 0; i < numCards; i++) {
Card card = deck.distributeCard();
String cardImageName = card.getImageName();
JLabel jLabel = makeImage(cardImageName);
cardSet.add(new GraphicCard(card, jLabel));
add(jLabel);
jLabel.addMouseListener(this);
}
if (GameLogic.noSetsOnBoard(cardSet)) {
gridLayout.setRows(gridLayout.getRows() + 1);
placeCards(3);
}
}
public void updateCard(Integer location) {
Card card = deck.distributeCard();
String cardImageName = card.getImageName();
JLabel jLabel = makeImage(cardImageName);
cardSet.set(location, new GraphicCard(card, jLabel));
jLabel.addMouseListener(this);
}
}
简言之,是的,这是习惯,但并不难。有比上面更好的方法,这样您就不需要清空整个面板来刷新它,我上面省略的逻辑值得这个特殊的解决方案
我使用的方法跟踪一个CardPanel
对象,该对象是一个抽象,它不仅包含每个框所表示的信息(在我的例子中是一张带有一些值的卡),还包含要渲染的图形元素
这是很久以前的事了,所以我不记得确切的细节了,但希望这会有所帮助。也许这篇关于Java Swing中的一个应用程序的文章会有所帮助。我不清楚您的GraphicCard
方法的作用是什么?GraphicCard是my Card对象的一种扩展。在这个项目中有一些糟糕的OOP概念,它是在我的编码职业生涯的早期完成的,但希望能帮助解决您的问题。请随意浏览项目的其余部分
cardPanel.removeAll();
// Some other logic here
for (GraphicCard card: cardSet) {
cardPanel.add(card.getJLabel());
}
cardPanel.revalidate();
cardPanel.repaint();