javaxspeed的简单介绍

博主:adminadmin 2023-01-18 14:42:05 293

本篇文章给大家谈谈javaxspeed,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

懂java的请进,求助。

这个我们上课写的.你直接拿去用吧

import java.awt.Color;

import java.awt.Component;

import java.awt.Graphics;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import java.util.ArrayList;

import javax.swing.BorderFactory;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JPanel;

public class SnakeGame {

public static void main(String[] args) {

SnakeFrame frame = new SnakeFrame();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setVisible(true);

}

}

// ----------记录状态的线程

class StatusRunnable implements Runnable {

public StatusRunnable(Snake snake, JLabel statusLabel, JLabel scoreLabel) {

this.statusLabel = statusLabel;

this.scoreLabel = scoreLabel;

this.snake = snake;

}

public void run() {

String sta = "";

String spe = "";

while (true) {

switch (snake.status) {

case Snake.RUNNING:

sta = "Running";

break;

case Snake.PAUSED:

sta = "Paused";

break;

case Snake.GAMEOVER:

sta = "GameOver";

break;

}

statusLabel.setText(sta);

scoreLabel.setText("" + snake.score);

try {

Thread.sleep(100);

} catch (Exception e) {

}

}

}

private JLabel scoreLabel;

private JLabel statusLabel;

private Snake snake;

}

// ----------蛇运动以及记录分数的线程

class SnakeRunnable implements Runnable {

public SnakeRunnable(Snake snake, Component component) {

this.snake = snake;

this.component = component;

}

public void run() {

while (true) {

try {

snake.move();

component.repaint();

Thread.sleep(snake.speed);

} catch (Exception e) {

}

}

}

private Snake snake;

private Component component;

}

class Snake {

boolean isRun;// ---------是否运动中

ArrayListNode body;// -----蛇体

Node food;// --------食物

int derection;// --------方向

int score;

int status;

int speed;

public static final int SLOW = 500;

public static final int MID = 300;

public static final int FAST = 100;

public static final int RUNNING = 1;

public static final int PAUSED = 2;

public static final int GAMEOVER = 3;

public static final int LEFT = 1;

public static final int UP = 2;

public static final int RIGHT = 3;

public static final int DOWN = 4;

public Snake() {

speed = Snake.SLOW;

score = 0;

isRun = false;

status = Snake.PAUSED;

derection = Snake.RIGHT;

body = new ArrayListNode();

body.add(new Node(60, 20));

body.add(new Node(40, 20));

body.add(new Node(20, 20));

makeFood();

}

// ------------判断食物是否被蛇吃掉

// -------如果食物在蛇运行方向的正前方,并且与蛇头接触,则被吃掉

private boolean isEaten() {

Node head = body.get(0);

if (derection == Snake.RIGHT (head.x + Node.W) == food.x

head.y == food.y)

return true;

if (derection == Snake.LEFT (head.x - Node.W) == food.x

head.y == food.y)

return true;

if (derection == Snake.UP head.x == food.x

(head.y - Node.H) == food.y)

return true;

if (derection == Snake.DOWN head.x == food.x

(head.y + Node.H) == food.y)

return true;

else

return false;

}

// ----------是否碰撞

private boolean isCollsion() {

Node node = body.get(0);

// ------------碰壁

if (derection == Snake.RIGHT node.x == 280)

return true;

if (derection == Snake.UP node.y == 0)

return true;

if (derection == Snake.LEFT node.x == 0)

return true;

if (derection == Snake.DOWN node.y == 380)

return true;

// --------------蛇头碰到蛇身

Node temp = null;

int i = 0;

for (i = 3; i body.size(); i++) {

temp = body.get(i);

if (temp.x == node.x temp.y == node.y)

break;

}

if (i body.size())

return true;

else

return false;

}

// -------在随机的地方产生食物

public void makeFood() {

Node node = new Node(0, 0);

boolean isInBody = true;

int x = 0, y = 0;

int X = 0, Y = 0;

int i = 0;

while (isInBody) {

x = (int) (Math.random() * 15);

y = (int) (Math.random() * 20);

X = x * Node.W;

Y = y * Node.H;

for (i = 0; i body.size(); i++) {

if (X == body.get(i).x Y == body.get(i).y)

break;

}

if (i body.size())

isInBody = true;

else

isInBody = false;

}

food = new Node(X, Y);

}

// ---------改变运行方向

public void changeDerection(int newDer) {

if (derection % 2 != newDer % 2)// -------如果与原来方向相同或相反,则无法改变

derection = newDer;

}

public void move() {

if (isEaten()) {// -----如果食物被吃掉

body.add(0, food);// --------把食物当成蛇头成为新的蛇体

score += 10;

makeFood();// --------产生食物

} else if (isCollsion())// ---------如果碰壁或自身

{

isRun = false;

status = Snake.GAMEOVER;// -----结束

} else if (isRun) {// ----正常运行(不吃食物,不碰壁,不碰自身)

Node node = body.get(0);

int X = node.x;

int Y = node.y;

// ------------蛇头按运行方向前进一个单位

switch (derection) {

case 1:

X -= Node.W;

break;

case 2:

Y -= Node.H;

break;

case 3:

X += Node.W;

break;

case 4:

Y += Node.H;

break;

}

body.add(0, new Node(X, Y));

// ---------------去掉蛇尾

body.remove(body.size() - 1);

}

}

}

// ---------组成蛇身的单位,食物

class Node {

public static final int W = 20;

public static final int H = 20;

int x;

int y;

public Node(int x, int y) {

this.x = x;

this.y = y;

}

}

// ------画板

class SnakePanel extends JPanel {

Snake snake;

public SnakePanel(Snake snake) {

this.snake = snake;

}

public void paintComponent(Graphics g) {

super.paintComponent(g);

Node node = null;

for (int i = 0; i snake.body.size(); i++) {// ---红蓝间隔画蛇身

if (i % 2 == 0)

g.setColor(Color.blue);

else

g.setColor(Color.yellow);

node = snake.body.get(i);

g.fillRect(node.x, node.y, node.H, node.W);// *******************试用*********************

}

node = snake.food;

g.setColor(Color.red);

g.fillRect(node.x, node.y, node.H, node.W);

}

}

class SnakeFrame extends JFrame {

private JLabel statusLabel;

private JLabel speedLabel;

private JLabel scoreLabel;

private JPanel snakePanel;

private Snake snake;

private JMenuBar bar;

JMenu gameMenu;

JMenu helpMenu;

JMenu speedMenu;

JMenuItem newItem;

JMenuItem pauseItem;

JMenuItem beginItem;

JMenuItem helpItem;

JMenuItem aboutItem;

JMenuItem slowItem;

JMenuItem midItem;

JMenuItem fastItem;

public SnakeFrame() {

init();

ActionListener l = new ActionListener() {

public void actionPerformed(ActionEvent e) {

if (e.getSource() == pauseItem)

snake.isRun = false;

if (e.getSource() == beginItem)

snake.isRun = true;

if (e.getSource() == newItem) {

newGame();

}

// ------------菜单控制运行速度

if (e.getSource() == slowItem) {

snake.speed = Snake.SLOW;

speedLabel.setText("Slow");

}

if (e.getSource() == midItem) {

snake.speed = Snake.MID;

speedLabel.setText("Mid");

}

if (e.getSource() == fastItem) {

snake.speed = Snake.FAST;

speedLabel.setText("Fast");

}

}

};

pauseItem.addActionListener(l);

beginItem.addActionListener(l);

newItem.addActionListener(l);

aboutItem.addActionListener(l);

slowItem.addActionListener(l);

midItem.addActionListener(l);

fastItem.addActionListener(l);

addKeyListener(new KeyListener() {

public void keyPressed(KeyEvent e) {

switch (e.getKeyCode()) {

// ------------方向键改变蛇运行方向

case KeyEvent.VK_DOWN://

snake.changeDerection(Snake.DOWN);

break;

case KeyEvent.VK_UP://

snake.changeDerection(Snake.UP);

break;

case KeyEvent.VK_LEFT://

snake.changeDerection(Snake.LEFT);

break;

case KeyEvent.VK_RIGHT://

snake.changeDerection(Snake.RIGHT);

break;

// 空格键,游戏暂停或继续

case KeyEvent.VK_SPACE://

if (snake.isRun == true) {

snake.isRun = false;

snake.status = Snake.PAUSED;

break;

}

if (snake.isRun == false) {

snake.isRun = true;

snake.status = Snake.RUNNING;

break;

}

}

}

public void keyReleased(KeyEvent k) {

}

public void keyTyped(KeyEvent k) {

}

});

}

private void init() {

speedLabel = new JLabel();

snake = new Snake();

setSize(380, 460);

setLayout(null);

this.setResizable(false);

bar = new JMenuBar();

gameMenu = new JMenu("Game");

newItem = new JMenuItem("New Game");

gameMenu.add(newItem);

pauseItem = new JMenuItem("Pause");

gameMenu.add(pauseItem);

beginItem = new JMenuItem("Continue");

gameMenu.add(beginItem);

helpMenu = new JMenu("Help");

aboutItem = new JMenuItem("About");

helpMenu.add(aboutItem);

speedMenu = new JMenu("Speed");

slowItem = new JMenuItem("Slow");

fastItem = new JMenuItem("Fast");

midItem = new JMenuItem("Middle");

speedMenu.add(slowItem);

speedMenu.add(midItem);

speedMenu.add(fastItem);

bar.add(gameMenu);

bar.add(helpMenu);

bar.add(speedMenu);

setJMenuBar(bar);

statusLabel = new JLabel();

scoreLabel = new JLabel();

snakePanel = new JPanel();

snakePanel.setBounds(0, 0, 300, 400);

snakePanel.setBorder(BorderFactory.createLineBorder(Color.darkGray));

add(snakePanel);

statusLabel.setBounds(300, 25, 60, 20);

add(statusLabel);

scoreLabel.setBounds(300, 20, 60, 20);

add(scoreLabel);

JLabel temp = new JLabel("状态");

temp.setBounds(310, 5, 60, 20);

add(temp);

temp = new JLabel("分数");

temp.setBounds(310, 105, 60, 20);

add(temp);

temp = new JLabel("速度");

temp.setBounds(310, 55, 60, 20);

add(temp);

speedLabel.setBounds(310, 75, 60, 20);

add(speedLabel);

}

private void newGame() {

this.remove(snakePanel);

this.remove(statusLabel);

this.remove(scoreLabel);

speedLabel.setText("Slow");

statusLabel = new JLabel();

scoreLabel = new JLabel();

snakePanel = new JPanel();

snake = new Snake();

snakePanel = new SnakePanel(snake);

snakePanel.setBounds(0, 0, 300, 400);

snakePanel.setBorder(BorderFactory.createLineBorder(Color.darkGray));

Runnable r1 = new SnakeRunnable(snake, snakePanel);

Runnable r2 = new StatusRunnable(snake, statusLabel, scoreLabel);

Thread t1 = new Thread(r1);

Thread t2 = new Thread(r2);

t1.start();

t2.start();

add(snakePanel);

statusLabel.setBounds(310, 25, 60, 20);

add(statusLabel);

scoreLabel.setBounds(310, 125, 60, 20);

add(scoreLabel);

}

}

java代码

自己写着玩的,很简单,你试一试哦...

主要用了javax.swing.Timer这个类:

import java.awt.*;

import javax.swing.*;

@SuppressWarnings("serial")

public class MainClass extends JFrame {

ControlSnake control;

Toolkit kit;

Dimension dimen;

public static void main(String[] args) {

new MainClass("my snake");

}

public MainClass(String s) {

super(s);

control = new ControlSnake();

control.setFocusable(true);

kit = Toolkit.getDefaultToolkit();

dimen = kit.getScreenSize();

add(control);

setLayout(new BorderLayout());

setLocation(dimen.width / 3, dimen.height / 3);// dimen.width/3,dimen.height/3

setSize(FWIDTH, FHEIGHT);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setResizable(false);

setVisible(true);

}

public static final int FWIDTH = 315;

public static final int FHEIGHT = 380;

}

import java.util.*;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.Timer;

import java.util.Random;

@SuppressWarnings("serial")

public class ControlSnake extends JPanel implements ActionListener {

Random rand;

ArrayListPoint list, listBody;

String str, str1;

static boolean key;

int x, y, dx, dy, fx, fy, flag;

int snakeBody;

int speed;

public ControlSnake() {

snakeBody = 1;

str = "上下左右方向键控制 P键暂停...";

str1 = "现在的长度为:" + snakeBody;

key = true;

flag = 1;

speed = 700;

rand = new Random();

list = new ArrayListPoint();

listBody = new ArrayListPoint();

x = 5;

y = 5;

list.add(new Point(x, y));

listBody.add(list.get(0));

dx = 10;

dy = 0;

fx = rand.nextInt(30) * 10 + 5;// 2

fy = rand.nextInt(30) * 10 + 5;// 2

setBackground(Color.WHITE);

setSize(new Dimension(318, 380));

final Timer time = new Timer(speed, this);

time.start();

addKeyListener(new KeyAdapter() {

public void keyPressed(KeyEvent e) {

if (e.getKeyCode() == 37) {

dx = -10;

dy = 0;

} else if (e.getKeyCode() == 38) {

dx = 0;

dy = -10;

} else if (e.getKeyCode() == 39) {

dx = 10;

dy = 0;

} else if (e.getKeyCode() == 40) {

dx = 0;

dy = 10;

} else if (e.getKeyCode() == 80) {

if (flag % 2 == 1) {

time.stop();

}

if (flag % 2 == 0) {

time.start();

}

flag++;

}

}

});

}

public void paint(Graphics g) {

g.setColor(Color.WHITE);

g.fillRect(0, 0, 400, 400);

g.setColor(Color.DARK_GRAY);

g.drawLine(3, 3, 305, 3);

g.drawLine(3, 3, 3, 305);

g.drawLine(305, 3, 305, 305);

g.drawLine(3, 305, 305, 305);

g.setColor(Color.PINK);

for (int i = 0; i listBody.size(); i++) {

g.fillRect(listBody.get(i).x, listBody.get(i).y, 9, 9);

}

g.fillRect(x, y, 9, 9);

g.setColor(Color.ORANGE);

g.fillRect(fx, fy, 9, 9);

g.setColor(Color.DARK_GRAY);

str1 = "现在的长度为:" + snakeBody;

g.drawString(str, 10, 320);

g.drawString(str1, 10, 335);

}

public void actionPerformed(ActionEvent e) {

x += dx;

y += dy;

if (makeOut() == false) {

JOptionPane.showMessageDialog(null, "重新开始......");

speed = 700;

snakeBody = 1;

x = 5;

y = 5;

list.clear();

list.add(new Point(x, y));

listBody.clear();

listBody.add(list.get(0));

dx = 10;

dy = 0;

}

addPoint(x, y);

if (x == fx y == fy) {

speed = (int) (speed * 0.8);//速度增加参数

if (speed 200) {

speed = 100;

}

fx = rand.nextInt(30) * 10 + 5;// 2

fy = rand.nextInt(30) * 10 + 5;// 2

snakeBody++;// 2

} // 2

repaint();

}

public void addPoint(int xx, int yy) {

// 动态的记录最新发生的50步以内的移动过的坐标

// 并画出最新的snakeBody

if (list.size() 100) {//蛇身长度最长为100

list.add(new Point(xx, yy));

} else {

list.remove(0);

list.add(new Point(xx, yy));

}

if (snakeBody == 1) {

listBody.remove(0);

listBody.add(0, list.get(list.size() - 1));

} else {

listBody.clear();

if (list.size() snakeBody) {

for (int i = list.size() - 1; i 0; i--) {

listBody.add(list.get(i));

}

} else {

for (int i = list.size() - 1; listBody.size() snakeBody; i--) {

listBody.add(list.get(i));

}

}

}

}

public boolean makeOut() {

if ((x 3 || y 3) || (x 305 || y 305)) {

return false;

}

for (int i = 0; i listBody.size() - 1; i++) {

for (int j = i + 1; j listBody.size(); j++) {

if (listBody.get(i).equals(listBody.get(j))) {

return false;

}

}

}

return true;

}

}

java求大神教做

package swing;

import java.awt.Color;

import java.awt.Graphics;

import javax.swing.JFrame;

import javax.swing.JPanel;

public class BallFrame {

public static void main(String[] args) {

JFrame f = new JFrame();

BallPanel bp = new BallPanel();

f.add(bp);

f.setSize(300, 300);

f.setDefaultCloseOperation(3);

f.setLocationRelativeTo(null);

f.setVisible(true);

new Thread(bp).start();

}

}

@SuppressWarnings("serial")

class BallPanel extends JPanel implements Runnable{

private int x=150,y=150,width=50,height=50;

private int speedx,speedy;

public BallPanel() {

this.setBackground(Color.BLACK);

speedx = (int) (Math.random()*5) + 2 ;

speedy = (int) (Math.random()*5) + 2;

}

@Override

public void paintComponent(Graphics g) {

super.paintComponent(g);

g.setColor(Color.RED);

g.fillOval(x, y, width, height);

}

@Override

public void run() {

while (true) {

//边界问题,按角度反射,其实是个坑,不要被迷惑了

if (x + width = this.getX() + this.getWidth() || x = this.getX()) {

speedx = -speedx;

}

if (y + height = this.getY() + this.getHeight() || y = this.getY()) {

speedy = -speedy;

}

try {

Thread.sleep(40);

} catch (InterruptedException e) {

e.printStackTrace();

}

x += speedx;

y += speedy;

this.repaint();

}

}

}

关于javaxspeed和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。