Java swing框架实现的贪吃蛇游戏完整示例
时间:2019-04-11
本文章向大家介绍Java swing框架实现的贪吃蛇游戏完整示例,主要包括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<Treasure> bw = new ArrayList<Treasure>(); public body[] b = new body[5]; public String state = ""; public ArrayList<point> p = new ArrayList<point>(); 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"; return true; } } public void stmove() { if (pzjc() == false && (yj() == false)) { 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程序设计有所帮助。
- [快学Python3]循环控制
- [linux][kprobe]谁动了我的文件---使用kprobe找到目标进程
- [快学Python3]if条件控制
- codeforces 767A Snacktower(模拟)
- [快学Python3]Sets(集合)
- [nptl][rwlock]pthread rwlock原理分析
- [快学Python3]Dictionary(字典)
- [快学Python3]List(列表)
- [快学Python3]Tuple(元组)
- HDU 1248 寒冰王座(完全背包裸题)
- [快学Python3]String(字符串)
- [快学Python3]XML解析处理 - Element Tree
- Educational Codeforces Round 21(A.暴力,B.前缀和,C.贪心)
- [快学Python3]JSON解析
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 最长有效括号
- 统计全为1的子矩形
- Android Camera1中的人脸检测
- Executors功能如此强大,ThreadPoolExecutor功不可没(一)
- dotNET:怎样处理程序中的异常(实战篇)?
- 二维背包问题
- 小程序系列之禁用视频快进
- springBoot整合Mq报错:JmsMessagingTemplate that could not be found
- TCP:测试小工具TCPing
- 对象实例化内存布局与访问定位 Krains 2020-08-14
- 基于Docker Compose部署分布式MinIO集群
- Go语言 | 从并发模式看channel使用技巧
- 字节码文件 Krains 2020-08-04
- 为WordPress添加自定义设置上传头像功能
- 229. 求众数 II Krains 2020-08-04 16:03:03 数学