我用Java创建了一个棋盘游戏,原理上与棋子没有什么不同.它在控制台中工作正常,但现在我正在尝试创建图形.我有一个Piece类,一个Tile类,它检查它是否为空或被白色或黑色的棋子片段占用,Grid类跟踪矩阵中的瓦片,以及Game类.
目前,游戏可以在Grid类中播放; 当我们运行Grid类时,用户在控制台中指定棋盘的大小,然后通过给出用户希望选择的棋子的x和y坐标来玩游戏.我想改变的是在Game类中运行游戏,它是JPanel的扩展并实现MouseListener(下面给出的代码).游戏板将是一个固定的大小(我将从5x5开始),我画了一个应该在游戏背景中的网格图片.将有一个实例变量(Grid g = new Grid(5,5)).我还画了将要使用的不同"跳棋"片段的图片,它们应该在特定的瓷砖上分布在前景中.我想要发生的是当用户点击一块瓷砖时,棋子会移动.理想情况下,我会这样做,以便程序看到鼠标点击的地方的坐标(说JPanel是500x500像素,用户点击带坐标的像素(0,500),然后我们检查是否(0,500)属于一些瓷砖,如果它没有那么没有任何反应,如果它确实属于网格上的瓷砖g然后g.play(某事,某事)).
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.FlowLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;
public class Game extends JPanel implements MouseListener {
private Grid g = new Grid(5,5);
public Game() {
JFrame frame = new JFrame("Boardgame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout());
frame.setLayout(new FlowLayout());
frame.setPreferredSize(new Dimension(500,500));
frame.pack();
frame.setVisible(true);
frame.addMouseListener(this);
}
public void mouseClicked(MouseEvent e) {
//here we check if the user clicked …Run Code Online (Sandbox Code Playgroud) 我有一个用Eclipse编写的Java程序,我想将其改为Android应用程序.因此,作为第一步,我想将相应的Java项目转换为Android项目,我可以在Eclipse中使用ADT插件或在Android Studio中运行.
这似乎是一个常见问题.我读到的第一个指南没有用,因为它只包含一个例子.然后,这个问题已经在这个网络上被问了两次,(显然)没有令人满意的答案(所以我认为再次提问是可以接受的):
第一个答案涵盖了四种可能的解决方案,但正如评论中所指出的,目前它们似乎都没有.如上所述,ADT插件不再支持选择"Android>转换为Android项目",其他方式不适用或似乎不再起作用.
<natures>
<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
Run Code Online (Sandbox Code Playgroud)
到.project文件,当单独不起作用时,我也添加到项目文件中
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.convertproject.test"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" />
</manifest>
Run Code Online (Sandbox Code Playgroud)
和
target=android-7
android.library=true
Run Code Online (Sandbox Code Playgroud)
现在,尝试在Android Studio中导入我的项目(重启Android Studio后)仍会产生以下消息:
[带目录的文件名]是一个Eclipse项目,但不是Android Eclipse项目.请选择Android Eclipse项目的目录(例如,它将包含AndroidManifest.xml文件),然后重试.
当我已经在.project文件中包含AndroidManifest代码snipppet时,我不明白为什么会收到此消息.不幸的是,在Eclipse中发生同样的情况,选择文件 - >新建 - >项目 - > Android - >现有代码中的Android项目不起作用,因为它在文件夹中找不到任何Android项目.
是否还有其他行我需要包含在我的.project文件中,这个方法中是否有任何我缺少的步骤,或者它根本不再起作用?任何帮助赞赏.
我正在尝试在我的JFrame中使用特殊字体,但我遇到了问题.我有一个像这样定义的JLabel:
private JLabel lab = new JLabel("Text");
Run Code Online (Sandbox Code Playgroud)
我有一个名为CUSTOMFONT-MEDIUM.TTF(TrueType字体)的文件,但在写完以下内容之后:
try {
lab.setFont(Font.createFont(Font.TRUETYPE_FONT, getClass().getResource("/CUSTOMFONT-MEDIUM.TTF").openStream()));
} catch(IOException ex){
//exception handled here I suppose
} catch(FontFormatException ex2) {
//same here
}
Run Code Online (Sandbox Code Playgroud)
代码编译,一切正常,但"实验室"没有显示,所以没有文字.我想这是因为我从未指定字体大小应该是什么,但是我做的任何尝试都失败了.有人可以帮帮我吗?
假设我们在Haskell中定义了以下数据类型:
data Blurg = Blub
| Zarg
| Parg Blurg Blurg
Run Code Online (Sandbox Code Playgroud)
这意味着Zarg,Parg Blub (Parg Zarg Zarg),Parg (Parg Blub Blub) (Parg Blub Blub)等,是所有实例Blurgs.
现在一个旧的考试问题如下:
定义一个函数,它将计算所有Blurgs的列表.
所以我尝试过:
allBlurg' :: [Blurg] -> [Blurg]
allBlurg' sofar = sofar ++ allBlurg' [Parg x y | x <- sofar, y <- sofar]
allBlurg :: [Blurg]
allBlurg = allBlurg' [Blub, Zarg]
Run Code Online (Sandbox Code Playgroud)
起初我认为这是一个解决方案,但后来我意识到并非所有可能的Blurgs都包含在结果列表中allBlurg.有人能写一个合适的解决方案吗
顺便说一句,我只想指出,问题所要求的并不是真正的功能,因为它不需要任何参数; 它应该被视为一个价值.其次,虽然问题没有明确说明,但我认为这应该是每个Blurg只在列表中出现一次的条件.另请注意,问题实际上应该只是询问用户zch在评论中提到的有限Blurgs.
对于我大学的课程,我们应该编写三个排序程序,然后将它们存档到.tar文件中并发送给教师.我已经写了这些程序,现在我不确定是否应该存档.class文件,.java文件或两者(指令指定我应该发送"三个文件"),但也许它并不意味着很多,因为他们推荐你在python中编程).我真的不明白为什么有.java和.class文件,有人能解释一下吗?
我已经用谷歌搜索并阅读了很多内容,但没有找到适合我需要的答案,所以我会在这里问:
我想在我的 JFrame 中有一个渐变背景。目前背景是单色的。我的代码看起来像这样:
//imports
public class Game {
//some other irrelevant instance variables
JFrame frame = new JFrame("Game");
public Game() {
frame.getContentPane().setBackground(new Color(200,220,200));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(null);
frame.setPreferredSize(new Dimension(frameX,frameY)); //frameX and frameY are instance variables
getMenu(); //method that adds a few JLabels to the JFrame and so on
}
}
Run Code Online (Sandbox Code Playgroud)
我读过的方法适用于扩展 JPanel 或 JFrame 的类(然后使用 GradientPaint 或类似的东西),但正如您所看到的,我使用 JFrame 作为实例变量。有人可以帮我吗?
编辑: 图片:
