java小游戏 java小游戏模拟器

java小游戏 java小游戏模拟器

大家好,关于java小游戏很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于java小游戏模拟器的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

贪吃蛇程序:

GreedSnake.java(也是程序入口):

import java.awt.BorderLayout;

import java.awt.Canvas;

import java.awt.Color;

import java.awt.Container;

import java.awt.Graphics;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import java.util.Iterator;

import java.util.LinkedList;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

public class GreedSnake implements KeyListener{

JFrame mainFrame;

Canvas paintCanvas;

JLabel labelScore;//计分牌

SnakeModel snakeModel= null;//蛇

public static final int canvasWidth= 200;

public static final int canvasHeight= 300;

public static final int nodeWidth= 10;

public static final int nodeHeight= 10;

//----------------------------------------------------------------------

// GreedSnake():初始化游戏界面

//----------------------------------------------------------------------

public GreedSnake(){

//设置界面元素

mainFrame= new JFrame("GreedSnake");

Container cp= mainFrame.getContentPane();

labelScore= new JLabel("Score:");

cp.add(labelScore, BorderLayout.NORTH);

paintCanvas= new Canvas();

paintCanvas.setSize(canvasWidth+ 1, canvasHeight+ 1);

paintCanvas.addKeyListener(this);

cp.add(paintCanvas, BorderLayout.CENTER);

JPanel panelButtom= new JPanel();

panelButtom.setLayout(new BorderLayout());

JLabel labelHelp;//帮助信息

labelHelp= new JLabel("PageUp, PageDown for speed;", JLabel.CENTER);

panelButtom.add(labelHelp, BorderLayout.NORTH);

labelHelp= new JLabel("ENTER or R or S for start;", JLabel.CENTER);

panelButtom.add(labelHelp, BorderLayout.CENTER);

labelHelp= new JLabel("SPACE or P for pause", JLabel.CENTER);

panelButtom.add(labelHelp, BorderLayout.SOUTH);

cp.add(panelButtom, BorderLayout.SOUTH);

mainFrame.addKeyListener(this);

mainFrame.pack();

mainFrame.setResizable(false);

mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

mainFrame.setVisible(true);

begin();

}

//----------------------------------------------------------------------

// keyPressed():按键检测

//----------------------------------------------------------------------

public void keyPressed(KeyEvent e){

int keyCode= e.getKeyCode();

if(snakeModel.running)

switch(keyCode){

case KeyEvent.VK_UP:

snakeModel.changeDirection(SnakeModel.UP);

break;

case KeyEvent.VK_DOWN:

snakeModel.changeDirection(SnakeModel.DOWN);

break;

case KeyEvent.VK_LEFT:

snakeModel.changeDirection(SnakeModel.LEFT);

break;

case KeyEvent.VK_RIGHT:

snakeModel.changeDirection(SnakeModel.RIGHT);

break;

case KeyEvent.VK_ADD:

case KeyEvent.VK_PAGE_UP:

snakeModel.speedUp();//加速

break;

case KeyEvent.VK_SUBTRACT:

case KeyEvent.VK_PAGE_DOWN:

snakeModel.speedDown();//减速

break;

case KeyEvent.VK_SPACE:

case KeyEvent.VK_P:

snakeModel.changePauseState();//暂停或继续

break;

default:

}

//重新开始

if(keyCode== KeyEvent.VK_R|| keyCode== KeyEvent.VK_S

|| keyCode== KeyEvent.VK_ENTER){

snakeModel.running= false;

begin();

}

}

//----------------------------------------------------------------------

// keyReleased():空函数

//----------------------------------------------------------------------

public void keyReleased(KeyEvent e){

}

//----------------------------------------------------------------------

// keyTyped():空函数

//----------------------------------------------------------------------

public void keyTyped(KeyEvent e){

}

//----------------------------------------------------------------------

// repaint():绘制游戏界面(包括蛇和食物)

//----------------------------------------------------------------------

void repaint(){

Graphics g= paintCanvas.getGraphics();

// draw background

g.setColor(Color.WHITE);

g.fillRect(0, 0, canvasWidth, canvasHeight);

// draw the snake

g.setColor(Color.BLACK);

LinkedList na= snakeModel.nodeArray;

Iterator it= na.iterator();

while(it.hasNext()){

Node n=(Node) it.next();

drawNode(g, n);

}

// draw the food

g.setColor(Color****);

Node n= snakeModel.food;

drawNode(g, n);

updateScore();

}

//----------------------------------------------------------------------

// drawNode():绘画某一结点(蛇身或食物)

//----------------------------------------------------------------------

private void drawNode(Graphics g, Node n){

g.fillRect(n.x* nodeWidth, n.y* nodeHeight, nodeWidth- 1,

nodeHeight- 1);

}

//----------------------------------------------------------------------

// updateScore():改变计分牌

//----------------------------------------------------------------------

public void updateScore(){

String s="Score:"+ snakeModel.score;

labelScore.setText(s);

}

//----------------------------------------------------------------------

// begin():游戏开始,放置贪吃蛇

//----------------------------------------------------------------------

void begin(){

if(snakeModel== null||!snakeModel.running){

snakeModel= new SnakeModel(this, canvasWidth/ nodeWidth,

this.canvasHeight/ nodeHeight);

(new Thread(snakeModel)).start();

}

}

//----------------------------------------------------------------------

// main():主函数

//----------------------------------------------------------------------

public static void main(String[] args){

GreedSnake gs= new GreedSnake();

}

}

Node.java:

public class Node{

int x;

int y;

Node(int x, int y){

this.x= x;

this.y= y;

}

}

SnakeModel.java:

import java.util.Arrays;

import java.util.LinkedList;

import java.util.Random;

import javax.swing.JOptionPane;

public class SnakeModel implements Runnable{

GreedSnake gs;

boolean[][] matrix;//界面数据保存在数组里

LinkedList nodeArray= new LinkedList();

Node food;

int maxX;//*大宽度

int maxY;//*大长度

int direction= 2;//方向

boolean running= false;

int timeInterval= 200;//间隔时间(速度)

double speedChangeRate= 0.75;//速度改变程度

boolean paused= false;//游戏状态

int score= 0;

int countMove= 0;

// UP和DOWN是偶数,RIGHT和LEFT是奇数

public static final int UP= 2;

public static final int DOWN= 4;

public static final int LEFT= 1;

public static final int RIGHT= 3;

//----------------------------------------------------------------------

// GreedModel():初始化界面

//----------------------------------------------------------------------

public SnakeModel(GreedSnake gs, int maxX, int maxY){

this.gs= gs;

this.maxX= maxX;

this.maxY= maxY;

matrix= new boolean[maxX][];

for(int i= 0; i< maxX;++i){

matrix[i]= new boolean[maxY];

Arrays.fill(matrix[i], false);//没有蛇和食物的地区置false

}

//初始化贪吃蛇

int initArrayLength= maxX> 20? 10: maxX/ 2;

for(int i= 0; i< initArrayLength;++i){

int x= maxX/ 2+ i;

int y= maxY/ 2;

nodeArray.addLast(new Node(x, y));

matrix[x][y]= true;//蛇身处置true

}

food= createFood();

matrix[food.x][food.y]= true;//食物处置true

}

//----------------------------------------------------------------------

// changeDirection():改变运动方向

//----------------------------------------------------------------------

public void changeDirection(int newDirection){

if(direction* 2!= newDirection* 2)//避免冲突

{

direction= newDirection;

}

}

//----------------------------------------------------------------------

// moveOn():贪吃蛇运动函数

//----------------------------------------------------------------------

public boolean moveOn(){

Node n=(Node) nodeArray.getFirst();

int x= n.x;

int y= n.y;

switch(direction){

case UP:

y--;

break;

case DOWN:

y++;

break;

case LEFT:

x--;

break;

case RIGHT:

x++;

break;

}

if((0<= x&& x< maxX)&&(0<= y&& y< maxY)){

if(matrix[x][y])//吃到食物或者撞到身体

{

if(x== food.x&& y== food.y)//吃到食物

{

nodeArray.addFirst(food);//在头部加上一结点

//计分规则与移动长度和速度有关

int scoreGet=(10000- 200* countMove)/ timeInterval;

score+= scoreGet> 0? scoreGet: 10;

countMove= 0;

food= createFood();

matrix[food.x][food.y]= true;

return true;

} else

return false;//撞到身体

} else//什么都没有碰到

{

nodeArray.addFirst(new Node(x, y));//加上头部

matrix[x][y]= true;

n=(Node) nodeArray.removeLast();//去掉尾部

matrix[n.x][n.y]= false;

countMove++;

return true;

}

}

return false;//越界(撞到墙壁)

}

//----------------------------------------------------------------------

// run():贪吃蛇运动线程

//----------------------------------------------------------------------

public void run(){

running= true;

while(running){

try{

Thread.sleep(timeInterval);

} catch(Exception e){

break;

}

if(!paused){

if(moveOn())//未结束

{

gs.repaint();

} else//游戏结束

{

JOptionPane.showMessageDialog(null,"GAME OVER",

"Game Over", JOptionPane*****RMATION_MESSAGE);

break;

}

}

}

running= false;

}

//----------------------------------------------------------------------

// createFood():生成食物及放置地点

//----------------------------------------------------------------------

private Node createFood(){

int x= 0;

int y= 0;

do{

Random r= new Random();

x= r.nextInt(maxX);

y= r.nextInt(maxY);

} while(matrix[x][y]);

return new Node(x, y);

}

//----------------------------------------------------------------------

// speedUp():加快蛇运动速度

//----------------------------------------------------------------------

public void speedUp(){

timeInterval*= speedChangeRate;

}

//----------------------------------------------------------------------

// speedDown():放慢蛇运动速度

//----------------------------------------------------------------------

public void speedDown(){

timeInterval/= speedChangeRate;

}

//----------------------------------------------------------------------

// changePauseState():改变游戏状态(暂停或继续)

//----------------------------------------------------------------------

public void changePauseState(){

paused=!paused;

}

}

package reduce;

import java.***let.Applet;

import java.***let.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当前进行的个数, rapidity游标的位置

int zhengque= 0, cuowu= 0;

int rush[]={ 10,20,30};//游戏每关的个数可以自由添加.列{ 10,20,30,40,50}

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;

}

}

我只有一个打字母小游戏

相关文章
  • jar手机游戏 jar手机游戏网

    大家好,今天来为大家分享jar手机游戏的一些知识点,和jar手机游戏网的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧! JAR文件是一种Java应用程序的归档文件格式,通常用于分发和部署Java应用程序,包括一些手机游戏。JAR文件包含了Java程序的所有相关文件,如.class文件、资源文件和元数据文件等。

  • i酷加速器 i酷加速器为什么用这么多流量

    这篇文章给大家聊聊关于i酷加速器,以及i酷加速器为什么用这么多流量对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。 这不是bug是游戏崩盘如果你的LOL无限崩溃了,请认真往下看。耐心点!! ! 1.是否开过多玩盒子,173神灯等辅助工具。 2.是否用360游戏提速器优化过网络进程。 3.显卡驱动是否**。 4.电脑是否有**,**。是否有其他软件占用的了过多的网络。尤其是播放器的后台加速器

  • i淮安 i淮安App官方网

    大家好,i淮安相信很多的网友都不是很明白,包括i淮安App官方网也是一样,不过没有关系,接下来就来为大家分享关于i淮安和i淮安App官方网的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧! 需要下载一个手机模拟器就可以安装i淮安了。 “i淮安”***被列入淮安市****为民办实事工程,由市工信*牵头、多部门多单位共同参与建设,是集政务和民生于一体的一站式便民服务平台。

  • iw战队是哪个赛区的 iw战队成员

    各位老铁们好,相信很多人对iw战队是哪个赛区的都不是特别的了解,因此呢,今天就来为大家分享下关于iw战队是哪个赛区的以及iw战队成员的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧! 英雄联盟比赛中会有很多参赛队伍,其中iw这个队伍可能听过的玩家比较少,在去年的MSI赛事中,和RNG首战对阵的就是iw,有玩家想知道iw是哪个**的,接下来小编为大家带来了详细介绍。 回答:

  • iw战队 iw战队美女中单

    大家好,今天来为大家分享iw战队的一些知识点,和iw战队美女中单的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧! 英雄联盟比赛中会有很多参赛队伍,其中iw这个队伍可能听过的玩家比较少,在去年的MSI赛事中,和RNG首战对阵的就是iw,有玩家想知道iw是哪个**的,接下来小编为大家带来了详细介绍。 回答: 土耳其

  • java手机游戏 java手机游戏网站

    大家好,今天给各位分享java手机游戏的一些知识,其中也会对java手机游戏网站进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧! 作为智能手机的前身,诺基亚的java手机曾经风靡全球。虽然在如今的手机市场上已经被淘汰,但是那个年代的诺基亚手机许多人依然难忘。回忆一下,当年诺基亚的java单机游戏,你玩过哪些? 诺基亚java单机游戏**弹:推箱子

  • java手机游戏版 手机游戏java

    大家好,感谢邀请,今天来为大家分享一下java手机游戏版的问题,以及和手机游戏java的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧! JAR文件是一种Java应用程序的归档文件格式,通常用于分发和部署Java应用程序,包括一些手机游戏。JAR文件包含了Java程序的所有相关文件,如.class文件、资源文件和元数据文件等

  • java游戏 java游戏盒子安卓版

    本篇文章给大家谈谈java游戏,以及java游戏盒子安卓版对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,*重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。 这是Java格式的游戏,现在的安卓手机是不支持的,就算强行打开也会卡机或者黑屏。那到底怎么样才可以玩呢?其实很简单的。所需材料及方法:1、安卓手机。2

  • java游戏模拟器 java游戏模拟器安卓版

    各位老铁们好,相信很多人对java游戏模拟器都不是特别的了解,因此呢,今天就来为大家分享下关于java游戏模拟器以及java游戏模拟器安卓版的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧! 下载地址: 类型:安卓游戏-**游戏 版本:java游戏模拟器***v0.79+MC_0.98.6.2 大小:5.45M 语言:中文 平台:安卓APK 推荐星级(评分):★★★★★

  • jdg战队 jdg战队王者荣耀

    大家好,今天小编来为大家解答以下的问题,关于jdg战队,jdg战队王者荣耀这个很多人还不知道,现在让我们一起来看看吧! jdg队员名单有:白家浩、Yagao、徐进赫、Missing、Zoom等。 1、白家浩 白家浩是JDG战队上单选手,他擅长鳄鱼、船长和吸血鬼等英雄。他在2019年加入JDG并作为上单征战,在2020年取得LPL春季赛亚军、夏季赛冠军,并在2021年取得LPL春季赛冠军