-
2022-02-26 14:27:56
刚开始要写一个java小游戏可能无处下手,自己学了很多java技能,但要把技能连贯起来写程序毫无头脑,这是很多人第一次写自己的程序都会遇到的现状。
但当我们看一两个博主的java游戏制作视频,我们就会豁然开朗,其实简单的小游戏制作过程基本套用一个思路。我们加以分析总结,就能逐步写出一个属于自己的java小游戏。
言归主题,写java小游戏首先我们要有大体思路框架,我们要大体画出游戏的思维导图,越详细越好,在写游戏的过程中不断修改完善。
首先创建一个主界面类,同时在这个主界面类内创建main方法,这就是整个程序的入口。我们在这个类内绘制图形窗口,也就是我们的游戏窗口。这时我们的主界面类需要继承JFrame类(这样才能创建窗口,监听鼠标键盘等),在主界面类中我们创建绘制窗口的启动方法winstart()在这个方法中初始化游戏窗口。并且在该主界面类中添加画笔的方法paint(),在这个画笔方法中来绘画图形以及绘画你要加载的所有游戏元素。
然后我们在winstart()中添加repaint()方法,这个repaint()方法是重绘,就是重新绘制paint()中的所有图形图片元素,也就是我们看到的游戏界面。游戏不是所有元素一动不动,而是一这些元素不断绘制连续转换,造成视觉上的视频连续播放。这就需要一直调用repaint()方法,直接在这个方法外加一个while循环即可实现连续调用,快速无限调用不行,所以要加上线程休眠(sleep)设置每隔多少毫秒来绘制一次,但在线程休眠要加try—catch语块进行异常处理。
上述方法是在游戏窗口实现视频形式的连续绘画,但是这样每个游戏元素在窗口的快速一次次绘制,游戏元素的移动,会出现视觉上的游戏元素不停闪烁问题。这里要用双缓存技术,双缓存简述为先把所有游戏元素全部绘画到一张图片上,然后再把一张张图片连续调用,就像电影一样是一张张图片快速连续转换。实现是先在主界面类中创建一张尺寸和游戏窗口一样大的图片,然后获得该图片的画笔对象,把所有要绘制的游戏元素通过该画笔对象绘画到这张图片上,实现repaint()重复绘制该张图片。
接下来后面是实现游戏元素的添加,我们要添加很多元素和对象。这个时候我们要想到JAVA的继承,利用先编写父类,然后各个子类及对象用继承父类的方法,可以大大减少重复代码的编写,提高工作量。在父类中我们添加对象共有的横纵坐标,宽度高度,图片等元素进行封装,然后添加paintitself()方法用以实现元素绘制,添加getRec()方法实现物体矩形碰撞。后面的子类对其进行继承并重写,实现自身特定方法。JAVA面向对象,核心:封装,继承,多态皆现与此。
简述一下游戏主角的移动,(1)移动需要改变坐标(x,y)和方向(四个方向,写枚举类把四个方向添加其中),在游戏主角的类中写出四个方法,例如其中一个方法如果向右移动可以写入x+1,并把方向赋值给右。(2)添加键盘事件,我们可以定义boolean的方法,返回值为true或false。定义两个键盘事件方法(添加四个按键分别代表四个移动方向),在方法内用switch来判断按键值,一个方法判断按下,另一个方法判断松开。可以实现按下对应按键,游戏主角会一直移动,松开按键则不移动。(3)写判断移动方向的方法,通过按键返回的按键值,来调用对应移动方法。(4)写移动方法,方法内仅改变一个坐标即可实现移动。
我们应当把移动方法写到父类中,这样不仅游戏主角可以通过这个方法移动,其他游戏元素如敌人也可以通过移动方法,再加调用方法实现敌人的移动。
碰撞检测,利用getRec()和intersects来判断两个元素是否碰撞,如果碰撞可以在该if语句中执行要进行的操作。例如要敌人和游戏主角进行碰撞检测实现碰撞后的敌人消失,先新建一个敌人的List集合,把这个碰撞的敌人添加到一个这个List集合中,在重绘的时候再用removeAll()的方法清除该集合元素,从而实现碰撞后的敌人消失功能。
关于游戏主角发射子弹功能可以让该子弹类继承游戏主角类,通过游戏主角的坐标可以从游戏主角内初始化该子弹。更多游戏功能都是通过创建类并继承,重写实现自身特定功能。
【尚学堂】Java300集零基础适合初学者视频教程_Java300集零基础教程_Java初学入门视频基础巩固教程_Java语言入门到精通_哔哩哔哩_bilibili
更多相关内容 -
15个java小游戏源码合集
2019-12-31 17:16:2115个java小游戏源码合集:Java打猎射击游戏,Java对对碰按钮版(最终版),Java俄罗斯方块2,Java飞行射击类游戏,Java推箱子2,Java网络五子棋2等等15个Java小游戏源码。 -
JAVA小游戏源码(5个)
2018-08-13 00:23:33该资源包含5个JAVA小游戏源码,并且附有说明文档,需要的童鞋可以下载哦! -
20款java小游戏源码Zip
2017-06-05 23:38:12包含20款java小游戏源码,帮助你更好的学习java -
Java小游戏之数字彩虹雨
2014-12-07 20:08:50这是仿照黑客帝国的数字彩虹雨Java小游戏,供大家学习交流 -
java小游戏
2012-09-12 12:42:33java小游戏 -
Java五个小游戏源码合集
2018-05-07 18:27:03java小游戏源码,亲测可用。内含 推箱子,坦克大战,俄罗斯方块,贪吃蛇,扫雷。好玩不贵,值得一探。 -
求一个简单的Java小游戏的代码
2021-02-12 10:21:10展开全部连连看的小源码package Lianliankan;import javax.swing.*;import java.awt.*;import java.awt.event.*;public class lianliankan implements ActionListener{JFrame mainFrame; //主面...展开全部
连连看的小源码
package Lianliankan;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class lianliankan implements ActionListener
{
JFrame mainFrame; //主面32313133353236313431303231363533e58685e5aeb931333335326239板
Container thisContainer;
JPanel centerPanel,southPanel,northPanel; //子面板
JButton diamondsButton[][] = new JButton[6][5];//游戏按钮数组
JButton exitButton,resetButton,newlyButton; //退出,重列,重新开始按钮
JLabel fractionLable=new JLabel("0"); //分数标签
JButton firstButton,secondButton; //分别记录两次被选中的按钮
int grid[][] = new int[8][7];//储存游戏按钮位置
static boolean pressInformation=false; //判断是否有按钮被选中
int x0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV; //游戏按钮的位置坐标
int i,j,k,n;//消除方法控制
public void init(){
mainFrame=new JFrame("JKJ连连看");
thisContainer = mainFrame.getContentPane();
thisContainer.setLayout(new BorderLayout());
centerPanel=new JPanel();
southPanel=new JPanel();
northPanel=new JPanel();
thisContainer.add(centerPanel,"Center");
thisContainer.add(southPanel,"South");
thisContainer.add(northPanel,"North");
centerPanel.setLayout(new GridLayout(6,5));
for(int cols = 0;cols < 6;cols++){
for(int rows = 0;rows < 5;rows++ ){
diamondsButton[cols][rows]=new JButton(String.valueOf(grid[cols+1][rows+1]));
diamondsButton[cols][rows].addActionListener(this);
centerPanel.add(diamondsButton[cols][rows]);
}
}
exitButton=new JButton("退出");
exitButton.addActionListener(this);
resetButton=new JButton("重列");
resetButton.addActionListener(this);
newlyButton=new JButton("再来一局");
newlyButton.addActionListener(this);
southPanel.add(exitButton);
southPanel.add(resetButton);
southPanel.add(newlyButton);
fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText())));
northPanel.add(fractionLable);
mainFrame.setBounds(280,100,500,450);
mainFrame.setVisible(true);
}
public void randomBuild() {
int randoms,cols,rows;
for(int twins=1;twins<=15;twins++) {
randoms=(int)(Math.random()*25+1);
for(int alike=1;alike<=2;alike++) {
cols=(int)(Math.random()*6+1);
rows=(int)(Math.random()*5+1);
while(grid[cols][rows]!=0) {
cols=(int)(Math.random()*6+1);
rows=(int)(Math.random()*5+1);
}
this.grid[cols][rows]=randoms;
}
}
}
public void fraction(){
fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText())+100));
}
public void reload() {
int save[] = new int[30];
int n=0,cols,rows;
int grid[][]= new int[8][7];
for(int i=0;i<=6;i++) {
for(int j=0;j<=5;j++) {
if(this.grid[i][j]!=0) {
save[n]=this.grid[i][j];
n++;
}
}
}
n=n-1;
this.grid=grid;
while(n>=0) {
cols=(int)(Math.random()*6+1);
rows=(int)(Math.random()*5+1);
while(grid[cols][rows]!=0) {
cols=(int)(Math.random()*6+1);
rows=(int)(Math.random()*5+1);
}
this.grid[cols][rows]=save[n];
n--;
}
mainFrame.setVisible(false);
pressInformation=false; //这里一定要将按钮点击信息归为初始
init();
for(int i = 0;i < 6;i++){
for(int j = 0;j < 5;j++ ){
if(grid[i+1][j+1]==0)
diamondsButton[i][j].setVisible(false);
}
}
}
public void estimateEven(int placeX,int placeY,JButton bz) {
if(pressInformation==false) {
x=placeX;
y=placeY;
secondMsg=grid[x][y];
secondButton=bz;
pressInformation=true;
}
else {
x0=x;
y0=y;
fristMsg=secondMsg;
firstButton=secondButton;
x=placeX;
y=placeY;
secondMsg=grid[x][y];
secondButton=bz;
if(fristMsg==secondMsg && secondButton!=firstButton){
xiao();
}
}
}
public void xiao() { //相同的情况下能不能消去。仔细分析,不一条条注释
if((x0==x &&(y0==y+1||y0==y-1)) || ((x0==x+1||x0==x-1)&&(y0==y))){ //判断是否相邻
remove();
}
else{
for (j=0;j<7;j++ ) {
if (grid[x0][j]==0){ //判断第一个按钮同行哪个按钮为空
if (y>j) { //如果第二个按钮的Y坐标大于空按钮的Y坐标说明第一按钮在第二按钮左边
for (i=y-1;i>=j;i-- ){ //判断第二按钮左侧直到第一按钮中间有没有按钮
if (grid[x][i]!=0) {
k=0;
break;
}
else{ k=1; } //K=1说明通过了第一次验证
}
if (k==1) {
linePassOne();
}
}
if (y
for (i=y+1;i<=j ;i++ ){ //判断第二按钮左侧直到第一按钮中间有没有按钮
if (grid[x][i]!=0){
k=0;
break;
}
else { k=1; }
}
if (k==1){
linePassOne();
}
}
if (y==j ) {
linePassOne();
}
}
if (k==2) {
if (x0==x) {
remove();
}
if (x0
for (n=x0;n<=x-1;n++ ) {
if (grid[n][j]!=0) {
k=0;
break;
}
if(grid[n][j]==0 && n==x-1) {
remove();
}
}
}
if (x0>x) {
for (n=x0;n>=x+1 ;n-- ) {
if (grid[n][j]!=0) {
k=0;
break;
}
if(grid[n][j]==0 && n==x+1) {
remove();
}
}
}
}
}
for (i=0;i<8;i++ ) { //列
if (grid[i][y0]==0) {
if (x>i) {
for (j=x-1;j>=i ;j-- ) {
if (grid[j][y]!=0) {
k=0;
break;
}
else { k=1; }
}
if (k==1) {
rowPassOne();
}
}
if (x
for (j=x+1;j<=i;j++ ) {
if (grid[j][y]!=0) {
k=0;
break;
}
else { k=1; }
}
if (k==1) {
rowPassOne();
}
}
if (x==i) {
rowPassOne();
}
}
if (k==2){
if (y0==y) {
remove();
}
if (y0
for (n=y0;n<=y-1 ;n++ ) {
if (grid[i][n]!=0) {
k=0;
break;
}
if(grid[i][n]==0 && n==y-1) {
remove();
}
}
}
if (y0>y) {
for (n=y0;n>=y+1 ;n--) {
if (grid[i][n]!=0) {
k=0;
break;
}
if(grid[i][n]==0 && n==y+1) {
remove();
}
}
}
}
}
}
}
public void linePassOne(){
if (y0>j){ //第一按钮同行空按钮在左边
for (i=y0-1;i>=j ;i-- ){ //判断第一按钮同左侧空按钮之间有没按钮
if (grid[x0][i]!=0) {
k=0;
break;
}
else { k=2; } //K=2说明通过了第二次验证
}
}
if (y0
for (i=y0+1;i<=j ;i++){
if (grid[x0][i]!=0) {
k=0;
break;
}
else{ k=2; }
}
}
}
public void rowPassOne(){
if (x0>i) {
for (j=x0-1;j>=i ;j-- ) {
if (grid[j][y0]!=0) {
k=0;
break;
}
else { k=2; }
}
}
if (x0
for (j=x0+1;j<=i ;j++ ) {
if (grid[j][y0]!=0) {
k=0;
break;
}
else { k=2; }
}
}
}
public void remove(){
firstButton.setVisible(false);
secondButton.setVisible(false);
fraction();
pressInformation=false;
k=0;
grid[x0][y0]=0;
grid[x][y]=0;
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==newlyButton){
int grid[][] = new int[8][7];
this.grid = grid;
randomBuild();
mainFrame.setVisible(false);
pressInformation=false;
init();
}
if(e.getSource()==exitButton)
System.exit(0);
if(e.getSource()==resetButton)
reload();
for(int cols = 0;cols < 6;cols++){
for(int rows = 0;rows < 5;rows++ ){
if(e.getSource()==diamondsButton[cols][rows])
estimateEven(cols+1,rows+1,diamondsButton[cols][rows]);
}
}
}
public static void main(String[] args) {
lianliankan llk = new lianliankan();
llk.randomBuild();
llk.init();
}
}
//old 998 lines
//new 318 lines
更多追问追答
追问
有错误
追答
你要新建java工程 上网搜下java小游戏源码 自己好好看看
追问
好吧,我用的是文本
本回答被提问者和网友采纳
已赞过
已踩过<
你对这个回答的评价是?
评论
收起
-
分享几款java小游戏源码
2021-03-05 15:49:09一:坦克大战源码import java.util.ArrayList;import java.awt.*;import java.awt.event.*;import java.util.List;import javax.swing.JOptionPane;public class TankClient extends Frame implements ...一:坦克大战
源码import java.util.ArrayList;
import java.awt.*;
import java.awt.event.*;
import java.util.List;
import javax.swing.JOptionPane;
public class TankClient extends Frame implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
public static final int Fram_width = 800; //
public static final int Fram_length = 600;
public static boolean printable = true;
MenuBar jmb = null;
Menu jm1 = null, jm2 = null, jm3 = null, jm4 = null;
MenuItem jmi1 = null, jmi2 = null, jmi3 = null, jmi4 = null, jmi5 = null,
jmi6 = null, jmi7 = null, jmi8 = null, jmi9 = null;
Image screenImage = null;
Tank homeTank = new Tank(300, 560, true, Direction.STOP, this);//
GetBlood blood = new GetBlood();
Home home = new Home(373, 545, this);
List theRiver = new ArrayList();
List tanks = new ArrayList();
List bombTanks = new ArrayList();
List bullets = new ArrayList();
List trees = new ArrayList();
List homeWall = new ArrayList();
List otherWall = new ArrayList();
List metalWall = new ArrayList();
public void update(Graphics g) {
screenImage = this.createImage(Fram_width, Fram_length);
Graphics gps = screenImage.getGraphics();
Color c = gps.getColor();
gps.setColor(Color.GRAY);
gps.fillRect(0, 0, Fram_width, Fram_length);
gps.setColor(c);
framPaint(gps);
g.drawImage(screenImage, 0, 0, null);
}
public void framPaint(Graphics g) {
Color c = g.getColor();
g.setColor(Color.green);
Font f1 = g.getFont();
g.setFont(new Font("TimesRoman", Font.BOLD, 20));
g.drawString("最高分: ", 200, 70);
g.setFont(new Font("TimesRoman", Font.ITALIC, 30));
g.drawString("" + tanks.size(), 400, 70);
g.setFont(new Font("TimesRoman", Font.BOLD, 20));
g.drawString("得分ֵ: ", 500, 70);
g.setFont(new Font("TimesRoman", Font.ITALIC, 30));
g.drawString("" + homeTank.getLife(), 650, 70);
g.setFont(f1);
if (tanks.size() == 0 && home.isLive() && homeTank.isLive()) {
Font f = g.getFont();
g.setFont(new Font("TimesRoman", Font.BOLD, 60));
this.otherWall.clear();
g.drawString(" ", 310, 300);
g.setFont(f);
}
if (homeTank.isLive() == false) {
Font f = g.getFont();
g.setFont(new Font("TimesRoman", Font.BOLD, 40));
tanks.clear();
bullets.clear();
g.setFont(f);
}
g.setColor(c);
for (int i = 0; i < theRiver.size(); i++) {
River r = theRiver.get(i);
r.draw(g);
}
for (int i = 0; i < theRiver.size(); i++) {
River r = theRiver.get(i);
homeTank.collideRiver(r);
r.draw(g);
}
home.draw(g);
homeTank.draw(g);
homeTank.eat(blood);
for (int i = 0; i < bullets.size(); i++) {
Bullets m = bullets.get(i);
m.hitTanks(tanks);
m.hitTank(homeTank);
版权属于:逍遥子大表哥
按照知识共享署名-非商业性使用 4.0 国际协议进行许可,转载引用文章应遵循相同协议。
-
java小游戏(适合初学者)
2011-04-02 21:56:19很低级,但用到了很多java知识,适合初学者看一看!解压后,把文件夹导入MyEclipse即可运行! 原创! -
java游戏源代码:11个小游戏的源码集合
2018-12-27 10:38:13包括以下游戏的源码:沙漠阻击手,3D魔方游戏,财富城市,贪吃蛇,俄罗斯方块,麻将,三维迷宫,扫雷,推箱子,算卦游戏和简单回合游戏11个游戏的源码,欢迎下载,供学习与交流。 -
7个Java小游戏源代码
2013-07-22 23:38:22我给出了7个Java小游戏源代码,大家下载下来打开进入查看,感悟Java的魅力把 -
JAVA小游戏编程-源代码
2021-03-04 08:05:59我空间还有很多..import java.applet.Applet;import java.applet.AudioClip;import java.awt.Dimension;import java.awt.Font;import java.awt.Toolkit;import javax.sound.sampled.AudioFileFormat;import j...展开全部
介绍这个给你把...我空间还有很多..
import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioSystem;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Rectangle;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JSlider;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.File;
import java.util.Vector;
public class Frame extends JFrame implements Runnable {
JPanel contentPane;
JPanel jPanel1 = new JPanel();
JButton jButton1 = new JButton();
JSlider jSlider1 = new JSlider();
JLabel jLabel1 = new JLabel();
JButton jButton2 = new JButton();
JLabel jLabel2 = new JLabel();
int count = 1, rapidity = 80; // count 当前进行的个数e5a48de588b63231313335323631343130323136353331333264653463, rapidity 游标的位置
int zhengque = 0, cuowu = 0;
int rush[] = ; //游戏每关的个数 可以自由添加.列
int rush_count = 0; //记录关数
char list[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y',
'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; //随机出现的数字 可以自由添加
Vector number = new Vector();
String paiduan = "true";
AudioClip Musci_anjian, Music_shibai, Music_chenggong;
public Frame() {
try {
setDefaultCloseOperation(EXIT_ON_CLOSE);
//-----------------声音文件---------------------
Musci_anjian = Applet.newAudioClip(new File("sounds//anjian.wav")
.toURL());
Music_shibai = Applet.newAudioClip(new File("sounds//shibai.wav")
.toURL());
Music_chenggong = Applet.newAudioClip(new File(
"sounds//chenggong.wav").toURL());
//---------------------------------------
jbInit();
} catch (Exception exception) {
exception.printStackTrace();
}
}
/**
* Component initialization.
*
* @throws java.lang.Exception
*/
private void jbInit() throws Exception {
contentPane = (JPanel) getContentPane();
contentPane.setLayout(null);
setSize(new Dimension(588, 530));
setTitle("Frame Title");
jPanel1.setBorder(BorderFactory.createEtchedBorder());
jPanel1.setBounds(new Rectangle(4, 4, 573, 419));
jPanel1.setLayout(null);
jButton1.setBounds(new Rectangle(277, 442, 89, 31));
jButton1.setText("开始");
jButton1.addActionListener(new Frame1_jButton1_actionAdapter(this));
jSlider1.setBounds(new Rectangle(83, 448, 164, 21));
jSlider1.setMaximum(100);
jSlider1.setMinimum(1);
jSlider1.setValue(50);
jLabel1.setText("速度");
jLabel1.setBounds(new Rectangle(35, 451, 39, 18));
jButton2.setBounds(new Rectangle(408, 442, 89, 31));
jButton2.setText("结束");
jButton2.addActionListener(new Frame1_jButton2_actionAdapter(this));
jLabel2.setText("第一关:100个");
jLabel2.setBounds(new Rectangle(414, 473, 171, 21));
contentPane.add(jPanel1);
contentPane.add(jButton2);
contentPane.add(jButton1);
contentPane.add(jSlider1);
contentPane.add(jLabel1);
contentPane.add(jLabel2);
this.addKeyListener(new MyListener());
jButton1.addKeyListener(new MyListener());
jSlider1.addKeyListener(new MyListener());
jSlider1.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
rapidity = jSlider1.getValue();
}
});
}
public void run() {
number.clear();
zhengque = 0;
cuowu = 0;
paiduan = "true";
while (count <= rush[rush_count]) {
try {
Thread t = new Thread(new Tthread());
t.start();
count += 1;
Thread.sleep(1000 + (int) (Math.random() * 2000)); // 生产下组停顿时间
// 最快1快.最慢2秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
while (true) { // 等待最后一个字符消失
if (number.size() == 0) {
break;
}
}
if (zhengque == 0) { // 为了以后相除..如果全部正确或者错误就会出现错误. 所以..
zhengque = 1;
}
if (cuowu == 0) {
cuowu = 1;
}
if (paiduan.equals("true")) { // 判断是否是自然结束
if (zhengque / cuowu >= 2) {
JOptionPane.showMessageDialog(null, "恭喜你过关了");
rush_count += 1; // 自动加1关
if (rush_count < rush.length) {
if (rapidity > 10) { // 当速度大于10的时候在-5提加速度.怕速度太快
rapidity -= 5; // 速度自动减10毫秒
jSlider1.setValue(rapidity); // 选择位置
}
Thread t = new Thread(this);
t.start();
} else {
JOptionPane.showMessageDialog(null, "牛B...你通关了..");
rush_count = 0;
count = 0;
}
} else {
JOptionPane.showMessageDialog(null, "请再接再励");
rush_count = 0;
count = 0;
}
} else {
rush_count = 0;
count = 0;
}
}
public void jButton1_actionPerformed(ActionEvent e) {
Thread t = new Thread(this);
t.start();
}
public void jButton2_actionPerformed(ActionEvent e) {
count = rush[rush_count] + 1;
paiduan = "flase";
}
class Tthread implements Runnable {
public void run() {
boolean fo = true;
int Y = 0, X = 0;
JLabel show = new JLabel();
show.setFont(new java.awt.Font("宋体", Font.PLAIN, 33));
jPanel1.add(show);
X = 10 + (int) (Math.random() * 400);
String parameter = list[(int) (Math.random() * list.length)] + "";
Bean bean = new Bean();
bean.setParameter(parameter);
bean.setShow(show);
number.add(bean);
show.setText(parameter);
while (fo) {
// ---------------------数字下移--------------------
show.setBounds(new Rectangle(X, Y += 2, 33, 33));
try {
Thread.sleep(rapidity);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (Y >= 419) {
fo = false;
for (int i = number.size() - 1; i >= 0; i--) {
Bean bn = ((Bean) number.get(i));
if (parameter.equalsIgnoreCase(bn.getParameter())) {
cuowu += 1;
jLabel2.setText("正确:" + zhengque + "个,错误:" + cuowu
+ "个");
number.removeElementAt(i);
Music_shibai.play();
break;
}
}
}
}
}
}
class MyListener extends KeyAdapter {
public void keyPressed(KeyEvent e) {
String uu = e.getKeyChar() + "";
for (int i = 0; i < number.size(); i++) {
Bean bean = ((Bean) number.get(i));
if (uu.equalsIgnoreCase(bean.getParameter())) {
zhengque += 1;
number.removeElementAt(i);
bean.getShow().setVisible(false);
jLabel2.setText("正确:" + zhengque + "个,错误:" + cuowu + "个");
Music_chenggong.play();
break;
}
}
Musci_anjian.play();
}
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception exception) {
exception.printStackTrace();
}
Frame frame = new Frame();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
frame.setLocation((screenSize.width - frameSize.width) / 2,
(screenSize.height - frameSize.height) / 2);
frame.setVisible(true);
}
}
class Frame1_jButton2_actionAdapter implements ActionListener {
private Frame adaptee;
Frame1_jButton2_actionAdapter(Frame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton2_actionPerformed(e);
}
}
class Frame1_jButton1_actionAdapter implements ActionListener {
private Frame adaptee;
Frame1_jButton1_actionAdapter(Frame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton1_actionPerformed(e);
}
}
class Bean {
String parameter = null;
JLabel show = null;
public JLabel getShow() {
return show;
}
public void setShow(JLabel show) {
this.show = show;
}
public String getParameter() {
return parameter;
}
public void setParameter(String parameter) {
this.parameter = parameter;
}
}
已赞过
已踩过<
你对这个回答的评价是?
评论
收起
-
java小游戏之飞机大战
2021-12-09 17:04:42飞机大战脚本组成 1.有一个所有物体的父物体GameObject,然后就是一堆物体继承于他,等到他的属性于函数。...import java.awt.*; public class GameObject { public Image image; public int x; public int y; . -
求一个简单又有趣的JAVA小游戏代码
2021-02-12 11:29:18展开全部连连看的小源码package Lianliankan;import javax.swing.*;import java.awt.*;import java.awt.event.*;public class lianliankan implements ActionListener{JFrame mainFrame; //主面板Container ... -
Java小游戏集合 开源分享
2020-07-17 11:03:29捕达人小游戏点击查看 不定时添加,记得点个赞支持一下,谢谢! 1.抖音火3D相册点击查看 2.雷霆战机点击查看 3.小飞机点击查看 4.超级玛丽点击查看 5.蜡笔小新动感光波bui~点击打败钢达姆!! 6.简易贪吃蛇查看 7.... -
JAVA实现坦克大战(JAVA小游戏)
2020-12-14 21:47:21在非智能机的时代,相信大家用直板机玩过各种各样的小游戏,如坦克大战、魂斗罗,那这个图标,大家一定见过 说明 坦克大战我觉得是 比较经典的一款游戏,相信大家小时候也都玩过,我记得,升级版的坦克大战有船,... -
Java小游戏
2021-12-14 19:52:48import java.util.Random; import java.util.Scanner; public class luckNumber { public static void main(String[] args) { Random r = new Random(); int luckNumber = r.nextInt(8) + 1; Scanner sc = new ... -
【Java篇】 Java小游戏中加入背景音乐
2020-10-24 21:41:50Author: Manba Cople 专业:IOT 说明:记录和输出学习内容 文章目录 问题 思路 部分代码 声明 问题 这篇博客时记录之前基于JAVA语言设计的《抗疫大作战》小游戏中游戏加入问题。首先,由于JAVA中AudioClip包的... -
Java小游戏中加背景音乐--有图有真相
2021-04-30 11:14:42弄了很久才终于把Java添加背景音乐实现了。不过还是很Happy! 在网上 找了很多都不能成功。最后自己琢磨弄好了 很多只给代码,小白都不知道放在哪,是创建文件还是什么。自己在GitHub上下好简单代码,加上一下文件就... -
分享16款Java小游戏源码Java applet小游戏源码
2018-02-06 16:33:49给大家分享本人收集整理的16款Java小游戏源码,大部分是applet小程序,下面把每个游戏做个截图,最下面会有下载地址: 目录结构: 下载地址:... -
Java小游戏之愤怒的小鸟
2014-12-07 20:22:07这是java版实现的愤怒的小鸟,仅供学习交流。 -
复习Java小球游戏代码分享&Java面试题MySQL中常用的锁&生活【记录一个咸鱼大学生三个月的奋进生活】021
2021-07-25 07:50:58记录一个咸鱼大学生三个月的奋进生活021复习Java小球游戏游戏界面的代码小球运动线程的代码运行游戏的代码运行结果代码分享学习Java面试题(MySQL中常用的锁)照片分享 复习Java小球游戏 刚好上一次我们才复习完多... -
飞翔的小鸟--Java小游戏实战(代码完整)
2021-04-05 16:29:34《飞扬的小鸟》是一款曾经比较火热的小游戏,本文可以带你你从零开始,一步一步的开发出这款小游戏。 语言 Java 工具 IntelliJ IDEA,JDK 16 准备工作 创建好项目后,在正式开始编写代码前,先下载游戏素材... -
【Java小游戏】飞翔的小鸟项目介绍
2022-04-12 17:04:17飞翔的小鸟,游戏中玩家只需通过点击方向键操纵让小鸟避开绿色管道等障碍物即可继续前进,如果小鸟碰到管道,游戏立即结束,那么如何用java编写一款属于自己的飞翔的小鸟游戏呢? -
《Java小游戏实现》:贪吃蛇
2016-07-01 21:35:40《Java小游戏实现》:贪吃蛇在完成坦克大战之后,就想到了贪吃蛇这个小游戏,因为这两个游戏太像了,因此,就决定把这个游戏来尝试的写下。接下来的几篇博文就是来记录这个小游戏实现的全过程。突然,想起,一年前... -
关于java小游戏的暂停,退出和从新开始
2019-07-30 15:32:29我的游戏只设置了一个多线程,是用来repaint的,所以当不执行repaint时,游戏画面就会进入停顿(但是监听还在)。这时设置暂停我们需要注意一点就是不能让线程停止,我一开始试了很多方法,都是将run里的while死循环... -
java小游戏《饲养宠物》源代码
2013-12-17 10:52:21一个简单的java游戏开发,对java游戏开发有进一步的了解,对eclipse的使用更加熟悉。