java编写贪吃蛇小游戏

网友投稿 210 2023-08-03


java编写贪吃蛇小游戏

废话不多说,直接奉上代码:

Frame.java

package snake;

import java.awt.Graphics;

import java.awt.Menu;

import java.awt.MenuBar;

import java.awt.MenuItem;

import java.awt.event.ActionEvent;

impordBibwGxbt java.awt.event.ActionListener;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import javax.swing.JFrame;

public class Frame extends JFrame implements KeyListener {

/**

*

*/

Boolean isAlive;

Boolean isPause;

Panel panel;

Character direction;

private static final long serialVersionUID = 1L;

public Frame(){

// TODO Auto-generated constructor stub

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setSize(300,300);

addKeyListener(this);

panel = new Panel();

add(panel);

http:// setVisible(true);

isAlive = true;

isPause = false;

direction = new Character('d');

MenuBar menuBar = new MenuBar();

Menu menu = new Menu("menu");

MenuItem reset = new MenuItem("newgame");

MenuItem pause= new MenuItem("pause");

pause.addActionListener(new ActionListener(){

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

if(!isPause) isPause= true;

else isPause= false;

}

});

reset.addActionListener(new ActionListener(){

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

reset();

}

});

menu.add(reset);

menu.add(pause);

menuBar.add(menu);

setMenuBar(menuBar);

}

public void reset(){

panel.reset();

isAlive = true;

}

@Override

public void keyTyped(KeyEvent e) {

// TODO Auto-generated method stub

}

@Override

public void keyPressed(KeyEvent e) {

// TODO Auto-generated method stub

if(e.getKeyCode()==KeyEvent.VK_UP) direction = 'w';

if(e.getKeyCode()==KeyEvent.VK_DOWN) direction = 's';

if(e.getKeyCode()==KeyEvent.VK_LEFT) direction = 'a';

if(e.getKeyCode()==KeyEvent.VK_RIGHT) direction = 'd';

}

@Override

public void keyReleased(KeyEvent e) {

// TODO Auto-generated method stub

}

public void paint(Graphics g){

panel.repaint();

}

}

Launch.java

package snake;

import java.util.Timer;

import java.util.TimerTask;

public class Launch extends TimerTask {

Frame frame = new Frame();

public Launch() {

// TODO Auto-generated constructor stub

}

boolean crashWall(){

SnakeBody sb = frame.panel.snake.getFirst();

if((sb.x<0)||(sb.y<0)||(sb.x>=Panel.LINE)||(sb.y>=Panel.LINE))

dBibwGxb return true;

else

return false;

}

void initial(){

frame.panel.snake.add(newBody());

frame.panel.food = newBody();

}

@Override

public void run() {

// TODO Auto-generated method stub

if(frame.panel.snake.isEmpty())

initial();

if(frame.isAlive)

if(!frame.isPause){

if(goStraight())

frame.isAlive = false;

frame.repaint();

}

if(crashWall()) frame.isAlive = false;

}

SnakeBody newBody(){

SnakeBody sb = new SnakeBody();

boolean overlap = true;

while(overlap){

overlap =false;

sb.x = (int) (Math.random()*(Panel.LINE-2)+1);

sb.y = (int) (Math.random()*(Panel.LINE-2)+1);

if(!frame.panel.snake.isEmpty())

for(SnakeBody s : frame.panel.snake)

if(sb.equals(s))

overlap =true;

}

return sb;

}

void eat(SnakeBody sb){

frame.panel.snake.addFirst(sb);

}

boolean goStraight(){

boolean result = false;

SnakeBody sb =new SnakeBody(frame.panel.snake.getFirst());

frame.panel.snake.removeLast();

if(frame.direction=='w')

sb.turnUp();

if(frame.direction=='s')

sb.turnDown();

if(frame.direction=='a')

sb.turnLeft();

if(frame.direction=='d')

sb.turnRight();

for(SnakeBody s : frame.panel.snake){

if(sb.equals(s)) result = true;

}

frame.panel.snake.addFirst(sb);

if(sb.equals(frame.panel.food)){

if(frame.direction=='w')

frame.panel.food.turnUp();

if(frame.direction=='s')

frame.panel.food.turnDown();

if(frame.direction=='a')

frame.panel.food.turnLeft();

if(frame.direction=='d')

frame.panel.food.turnRight();

eat(frame.panel.food);

frame.panel.food = newBody();

}

return result;

}

public static void main(String[] args){

// TODO Auto-generated method stub

Launch timertask = new Launch();

Timer timer = new Timer();

timer.schedule(timertask,0,500);

}

}

Panel.java

package snake;

import java.awt.Color;

import java.awt.Graphics;

import java.util.LinkedList;

import javax.swing.JPanel;

public class Panel extends JPanel {

/**

*

*/

private static final long serialVersionUID = 1L;

public LinkedList snake = new LinkedList();

static final int LINE = 10;

SnakeBody food = new SnakeBody(-99,-99);

public Panel() {

// TODO Auto-generated constructor stub

}

public void reset(){

snake.clear();

}

public void paint(Graphics g){

g.setColor(Color.white);

g.fillRect(0, 0, getWidth(), getHeight());

for(SnakeBody sb : snake){

g.setColor(Color.black);

g.drawRect(sb.x*getWidth()/LINE,sb.y*getHeight()/LINE,getWidth()/LINE,getHeight()/LINE);

g.setColor(Color.orange);

g.fillRect(sb.x*getWidth()/LINE,sb.y*getHeight()/LINE,getWidth()/LINE,getHeight()/LINE);

}

g.setColor(Color.red);

g.fillRect(food.x*getWidth()/LINE,food.y*getHeight()/LINE,getWidth()/LINE,getHeight()/LINE);

}

}

SnakeBody.java

package snake;

class SnakeBody {

int x;

int y;

public SnakeBody() {

// TODO Auto-generated constructor stub

x = 0;

y = 0;

}

public SnakeBody(int a,int b){

x = a;

y = b;

}

public SnakeBody(SnakeBody sb){

this(sb.x,sb.y);

}

public void turnUp(){

y--;

}

public void turnDown(){

y++;

}

public void turnLeft(){

x--;

}

public void turnRight(){

x++;

}

boolean equals(SnakeBody s){

if((x==s.x)&&(y==s.y)) return true;

else return false;

}

}

以上所述就是本文给大家分享的贪吃蛇的全部代码了,希望能够对大家熟练掌握java有所帮助。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java完美实现2048小游戏
下一篇:Java制作智能拼图游戏原理及代码
相关文章

 发表评论

暂时没有评论,来抢沙发吧~