Java swing框架实现的贪吃蛇游戏完整示例

网友投稿 459 2023-03-06


Java swing框架实现的贪吃蛇游戏完整示例

本文实例讲述了java swing框架实现的贪吃蛇游戏。分享给大家供大家参考,具体如下:

java是门高级语言,做游戏时适合做后台,但是用它也可以做游戏。闲来无事做的时候可以用来写点小游戏,练习练习预防早衰哈哈!

闲话不说了

下面是以前练习的作品,不怕大家笑话,那个时候用了一个礼拜才做出来的。

源码如下供大家学习。

使用的是java的 swing  Jframe Jpanel JButton   当然你也可以使用awt

先来看看运行效果:

具体代码:

package Tcs;

/**

*

*

*

* @author tx

*/

import java.awt.Color;

import java.awt.Container;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.Collection;

import java.util.Random;

import java.util.Timer;

import java.util.TimerTask;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

public class Snack extends JPanel implements KeyListener {

public JButton bt = new JButton("重新开始");

public ArrayList bw = new ArrayList();

public body[] b = new body[5];

public String state = "";

public ArrayList p = new ArrayList();

public static int score;

public Snack() {

this.addKeyListener(this);

shengc();

}

public void shengc() {

for (int i = 0; i < b.length; i++) {

b[i] = new body();

b[i].x = 10 - i * 10;

b[i].y = 150;

}

}

public int x = 0, y = 0;

public void paint(Graphics g) {

super.paint(g);

g.setColor(new Color(165,41,10));//RGB定义颜色的方法

g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 20));

for (int i = 0; i < b.length; i++) {

body z1 = b[i];

g.drawString("O", b[i].x, b[i].y);

}

g.setColor(Color.BLUE);

g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 20));

g.drawString("SCORE:" + score, 30, 30);

paintjs(g);

paintbw(g);

}

public void paintjs(Graphics g) {

g.setColor(Color.BLACK);

if (state.length() > 1) {

g.drawString(state, 140, 200);

}

}

public void paintbw(Graphics g) {

g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 25));

g.setColor(Color.RED);

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

g.drawString("o", bw.get(i).x, bw.get(i).y);

}

}

public boolean yj() {

if ((b[0].x < 400 && b[0].x > 0) && (b[0].y < 400 && b[0].y > 0)) {

return false;

} else {

state = "GAME OVER";

rehttp://turn true;

}

}

public void stmove() {

if (pzjc() == false && (yj() == false)) {http://

b[0].speed = 8;//此处可提升速度增加难度

b[0].move();

p.add(new point(b[0].x, b[0].y, b[0].fx));

if (p.size() > b.length) {

p.remove(p.get(0));

// System.out.println(p.size());

}

}

}

public int jl(body a, Treasure b) {

int jl = 0;

jl = (int) Math.sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y)

* (a.y - b.y));

return jl;

}// 暂时无用

public void ssmove() {

if (p.size() >= b.length) {

for (int i = 0; i < b.length - 1; i++) {

b[i + 1].fx = p.get(i).fx;

b[i + 1].x = p.get(i).x;

b[i + 1].y = p.get(i).y;

}

}

}

Random r = new Random();

public void bzbw() {

if (bw.size() < 1) {

Treasure s = new Treasure();

s.x = r.nextInt(300) + 50;

s.y = r.nextInt(300) + 50;

bw.add(s);

}

}

public void bwxs() {

Timer t = new Timer();

t.schedule(new TimerTask() {

public void run() {

}

}, 0, 8000);

}

public boolean pzjc() {

for (int i = 1; i < p.size(); i++) {

if (p.get(0).equals(p.get(i))) {

state = "GAME OVER";

return true;

}

}

return false;

}

public void crush() {

if (bw.size() > 0) {

if (jl(b[0], bw.get(0)) < 8) {

bw.remove(0);

b = Arrays.copyOf(b, b.length + 1);

b[b.length - 1] = new body();

score += 10;

}

}

}

public void gameover() {

MouseListener k = new MouseAdapter() {

public void mouseClicked(MouseEvent e) {

super.mouseClicked(e);

state = "";

b = Arrays.copyOf(b, 5);

p.clear();

shengc();

score = 0;

bt.setVisible(false);

}

};

if (state.length() > 1) {

this.add(bt);

bt.setVisible(true);

bt.setBounds(150, 150, 100, 30);

bt.addMouseListener(k);

}

if(bt.isVisible()==false){this.remove(bt);}

this.requestFocus();

}

public void zmAction() {

Timer timer = new Timer();

timer.schedule(new TimerTask() {

public void run() {

bzbw();// 生成宝物

stmove();// 蛇头运动

ssmove();// 蛇身运动

crush();// 碰撞检测

gameover();

repaint();

}

}, 10, 83);

}

public static void main(String[] args) {

JFrame jf = new JFrame("我们 - 贪吃蛇游戏测试");

jf.setBounds(0, 0, 400, 400);

jf.setVisible(true);

jf.setLayout(null);

Container c = new Container();

c = jf.getContentPane();

c.setBackground(Color.WHITE);

jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Snack s = new Snack();

s.setVisible(true);

s.setBounds(0, 0, 600, 600);

s.setLocation(0, 0);

s.setBackground(Color.ORANGE);

jf.add(s);

s.zmAction();

s.requestFocus();

}

public void keyTyped(KeyEvent e) {

}

public void keyPressed(KeyEvent e) {

int k = e.getKeyCode();

switch (k) {

case KeyEvent.VK_UP:

if (b[0].fx != "sz" && b[0].fx != "xz") {

b[0].fx = "sz";

}

break;

case KeyEvent.VK_DOWN:

if (b[0].fx != "sz" && b[0].fx != "xz") {

b[0].fx = "xz";

}

break;

case KeyEvent.VK_LEFT:

if (b[0].fx != "zz" && b[0].fx != "yz") {

b[0].fx = "zz";

}

break;

case KeyEvent.VK_RIGHT:

if (b[0].fx != "zz" && b[0].fx != "yz") {

b[0].fx = "yz";

}

break;

}

repaint();

}

public void keyReleased(KeyEvent e) {

}

}

body类

package Tcs;

public class body {

public int x=0;

public int y=0;

public int speed;

private String str;

public String fx;

public body(){

fx="yz";

}

public int getX() {

return x;

}

public void setX(int x) {

this.x = x;

}

public int getY() {

return y;

}

public void setY(int y) {

this.y = y;

}

public String getStr() {

return str;

}

public void setStr(String str) {

this.str = str;

}

public void sz(){

this.y+=-speed;

}

public void xz(){

this.y+=speed;

}

public void zz(){

this.x+=-speed;

}

public void yz(){

this.x+=speed;

}

public void move(){

if(fx=="xz"){

xz();

}

if(fx=="sz"){

sz();

}

if(fx=="zz"){

zz();

}

if(fx=="yz"){

yz();

}

}

}

宝物类

package Tcs;

public class Treasure {

public int x;

public int y;

public String str;

}

point类

package Tcs;

public class point {

public int x;

public int y;

public String fx;

public point(int x,int y,String fx){

this.x=x;

this.y=y;

this.fx=fx;

}

public boolean equals(Object o){

if(o instanceof point){

point p=(point)o;

if(p.x==this.x&&p.y==this.y){

return true;

}

}

if(o==this){return true;}

if(o==null){return false;}

return false;}

}

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。


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

上一篇:调用微信登录接口开发(app微信登录接口)
下一篇:spring boot 自定义starter的实现教程
相关文章

 发表评论

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