java贪吃蛇(教你用java做贪吃蛇)
java贪吃蛇(教你用java做贪吃蛇)
要用java写贪吃蛇呢,你要掌握这几个知识点
1、集合的应用,Arraylist。
用来存储蛇块对象的。
2、swing编程
你需要绘制图形界面
3、事件监听
键盘监听和按钮点击事件监听
4、线程或定时器的应用(这里我们就用线程)
5、贪吃蛇的核心算法
(面向对象作为java的基本功在这里就不写出来了)
掌握了这些知识点之后,我们就可以来制作贪吃蛇了
1、创建蛇块对象
蛇块属性有位置位置用x,y表示,
package snakeeat;
public class Snakeact {
private int x;
private int y;
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;
}
}
2、创建窗口
package snakeeat;
import javax.swing.*;
public class Snake extends JFrame{
public Snake (){
Snakewin win=new Snakewin();
add(win);
setTitle("贪吃蛇");
setSize (435,390);
setLocation(200,200);
setVisible(true);
}
public static void main(String[] args) {
new Snake();
}
}
3、绘制面板(很多逻辑方法都在这个类里)
package snakeeat;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.List;
public class Snakewin extends JPanel implements ActionListener, KeyListener, Runnable {
JButton newGame, stopGame;//开始和结束的按钮
int score = 0;//分数
int speed = 1;//蛇运动的速度
int rx = 0;//食物的X坐标
int ry = 0;
int num1 = 0, num2 = 0;
int temp = 0;//判断方向
boolean start = false;//判断游戏是否开始
JLabel lable;
List<Snakeact> list = new ArrayList<Snakeact>();
Random r = new Random();
JDialog die = new JDialog();
JButton ok;
//构造方法,初始化各种值
public Snakewin() {
newGame = new JButton("开始");
stopGame = new JButton("结束");
this.setLayout(new FlowLayout(FlowLayout.LEFT));
newGame.addActionListener(this);
stopGame.addActionListener(this);
this.addKeyListener(this);
this.add(newGame);
this.add(stopGame);
die.setLayout(new GridLayout(2, 1));
ok = new JButton("继续");
ok.addActionListener(this);
die.setSize(200, 200);
die.setLocation(400, 300);
die.add(ok);
die.setVisible(false);
if (start) {
lable = new JLabel("您的分数是:" + score);
die.add(lable);
}
}
//绘制图形界面和蛇
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawRect(10, 40, 400, 300);
g.drawString("分数:" + score, 150, 20);
g.drawString("速度:" + speed, 150, 35);
g.setColor(new Color(0, 255, 0));
if (start) {
g.fillRect(10 + rx * 10, 40 + ry * 10, 10, 10);
g.setColor(new Color(255, 0, 0));
for (int i = 0; i < list.size(); i++) {
g.fillRect(10 + list.get(i).getX() * 10, 40 + list.get(i).getY() * 10, 10, 10);
}
eat();
}
}
//吃食物的方法
public void eat() {
if (list.size() != 0) {
if (list.get(0).getX() == rx && list.get(0).getY() == ry) {
score++;
if (score % 10 == 0) {
speed++;
}
rx = r.nextInt(40);
ry = r.nextInt(30);
Snakeact tempAct = new Snakeact();
tempAct.setX(list.get(list.size() - 1).getX());
tempAct.setY(list.get(list.size() - 1).getY());
list.add(tempAct);
}
}
}
//蛇身移动方法
public void sonMove() {
Snakeact tempAct = new Snakeact();
for (int i = 0; i < list.size(); i++) {
if (i == 1) {
list.get(i).setX(list.get(0).getX());
list.get(i).setY(list.get(0).getY());
} else if (i > 1) {
tempAct = list.get(i - 1);
list.set(i - 1, list.get(i));
list.set(i, tempAct);
}
}
}
//蛇头移动方法
public void move(int x, int y) {
if (list.size() != 0) {
if (minYes(x, y)) {
sonMove();
list.get(0).setX(list.get(0).getX() + x);
list.get(0).setY(list.get(0).getY() + y);
} else {
die.setVisible(true);
}
}
}
//按钮事件监听
public void actionPerformed(ActionEvent e) {
if (e.getSource() == newGame) {
newGame.setEnabled(false);
start = true;
rx = r.nextInt(40);
ry = r.nextInt(30);
Snakeact tempAct = new Snakeact();
tempAct.setX(20);
tempAct.setY(15);
list.add(tempAct);
requestFocus(true);
Thread mThread = new Thread(this);
mThread.start();
repaint();
}
if (e.getSource() == stopGame) {
System.exit(0);
}
if (e.getSource() == ok) {
list.clear();
newGame.setEnabled(true);
die.setVisible(false);
score = 0;
speed = 1;
}
}
public boolean minYes(int x, int y) {
if (list.size() != 0) {
if (!maxYes(list.get(0).getX() + x, list.get(0).getY() + y)) {
return false;
}
}
return true;
}
//判断是否出界
public boolean maxYes(int x, int y) {
if (x < 0 || x >= 40 || y < 0 || y >= 30) {
return false;
}
for (int i = 0; i < list.size(); i++) {
if (i > 1 && list.get(i).getX() == list.get(0).getX() && list.get(i).getY() == list.get(0).getY()) {
return false;
}
}
return true;
}
//键盘敲击事件监听
public void keyPressed(KeyEvent e) {
if (start) {
switch (e.getKeyCode()) {
case KeyEvent.VK_UP:
if (temp != 2) {
move(0, -1);
temp = 1;
}
repaint();
break;
case KeyEvent.VK_DOWN:
if (temp != 1) {
move(0, 1);
temp = 2;
}
repaint();
break;
case KeyEvent.VK_LEFT:
if (temp != 4) {
move(-1, 0);
temp = 3;
}
repaint();
break;
case KeyEvent.VK_RIGHT:
if (temp != 3) {
move(1, 0);
temp = 4;
}
repaint();
break;
default:
break;
}
}
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent e) {
}
//线程的run方法
public void run() {
while (start) {
switch (temp) {
case 1:
move(0, -1);
break;
case 2:
move(0, 1);
break;
case 3:
move(-1, 0);
break;
case 4:
move(1, 0);
break;
default:
move(1, 0);
break;
}
repaint();
try {
Thread.sleep(600 / speed);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
每一点都是一个类哦
效果图
有问题可以加qq群708653884交流哦
北冰洋为什么那么贵(北冰洋汽水卖那么贵有销量吗)在老汽水朋友圈里,北京的北冰洋独树一帜,它是地地道道的北京文化符号之一,历史人文背景深厚丰富,故事最多,在它身上,既能看到生动的老北京市民史,同时也勾勒了中国本土汽水的兴衰往事。北
四月发朋友圈的句子(适合4月发朋友圈的句子简短)四月发朋友圈的句子(适合4月发朋友圈的句子简短)时间不知不觉地流逝。面对过去的三月,终于说再见了。面对即将到来的四月,先打个招呼。四月份一切都会好起来的。今天小编给大家整理了四月你
小米凉席(小米有品悄然上架凉席)小米凉席(小米有品悄然上架凉席)夏天到了,空调凉席成为很多家庭的标配,日前小米米家有品就悄然上架一款凉席,售价99元。其名为床尚天然原木御凉席,选用20年树龄以上原木,还传统草编材
艾青儿子(诗人艾青的儿子)艾青儿子(诗人艾青的儿子)细数起来,艾青绝对算最著名的现代诗人之一,他的很多作品都出现在我们初中高中的语文课本中。诗人艾青艾青原名蒋海澄,因发表诗集作品笔名为艾青故以此为名,艾青的
乾隆儿子(乾隆有17个儿子)乾隆儿子(乾隆有17个儿子)大家好,我今天百忙之中抽空给大家带来以下这篇文章,欢迎大家一起品鉴!清朝虽然在后期是衰落不堪的,可是在中间,也是有着闻名的康乾盛世的,期间的三位帝王都是
草圣张芝(兰州碑林记草圣张芝)草圣张芝(兰州碑林记草圣张芝)大河之上,青峰之巅,兰州碑林巍然屹立。走进碑林,仿佛走进了中国书法的浩瀚长河。兰州碑林,始建于公元2000年,位于黄河之畔,白塔山西峰之巅。兰州碑林赵
行李箱哪个牌子质量好(性价比高的拉杆箱品牌)眼看着时间来到六月份,跟六月联系在一起的永远都是毕业季。无论是高考中考还是大学毕业,这都意味着一个新的开始,每个人都将踏上新的旅途。而毕业旅行就成了六月最重要的出行计划,不管是古镇
什么红酒最好(智利最顶级的葡萄酒有哪些?)什么红酒最好(智利最顶级的葡萄酒有哪些?)虽然智利葡萄酒以性价比高口感平易近人的特点闻名于全球,但是,在这片美丽狭长的南美大陆上也不缺乏顶尖之作。在两岸三地华语圈享有葡萄酒教父美誉
不知道自己想干什么(想换工作又不知道自己适合做什么?)不知道自己想干什么(想换工作又不知道自己适合做什么?)每个月都会遇到一些因为职场问题来咨询的来访者,老师,我是不是该换个工作呢?什么样的工作适合我呢?一般这样的来访者心理都挺迷茫的
缩小毛孔(想缩毛孔,你可以从这4个方法入手)缩小毛孔(想缩毛孔,你可以从这4个方法入手)照着镜子,你有没有发现脸上的毛孔越来越大了?毛孔生来就有,但年轻的时候皮肤细嫩基本看不出毛孔的存在,而随着年龄的增长,胶原蛋白流失,还有
开个小店(想开个赚钱的小店)开个小店(想开个赚钱的小店)你喜欢什么?准备开店时,最重要的一件事,就是从你喜欢的商品和服务项目着手。经营一家商店,并不是只在进货与顾客周旋,或是商品陈列这些乍看之下轻松愉快的工作
一念天堂票房(虽然票房扑街但是意义深远)一念天堂票房(虽然票房扑街但是意义深远)虽然票房扑街但是意义深远一念天堂Hello,大家好,我是你们的小编橙子,最近小编被沈叔叔迷的不行,所以一直翻看他曾经的电影作品。小编发现了一
郑州市区地图(从地形图看郑州暴雨及洪灾原因)郑州市区地图(从地形图看郑州暴雨及洪灾原因)郑州附近,黄河岸边海拔高度9092米。郑州市区东北方向海拔最低,大约8588米,低于黄河河岸。郑州市区纬三路以南,海拔基本上都高于92米
艺术基金(北京艺术品基金会)艺术基金(北京艺术品基金会)北京艺术品基金会艺术基金会蓬勃发展,以第三方角色参与到人类艺术的繁荣进程,为政府和市场行为拾遗补阙,成为当代社会文化艺术发展的重要推动力量。作为非营利组
皇城相府旅游(皇城相府很值得我们慢慢去游览)皇城相府旅游(皇城相府很值得我们慢慢去游览)大家好,我是游小皇昨天选择了去皇城相府走一走从市区自驾25分钟左右我开启了一趟文化之旅以下是我连夜做出来的攻略,供你们参考时间安排(一天
卫星发射中心(酒泉卫星发射中心)卫星发射中心(酒泉卫星发射中心)镰锤相拥红旗飘,誓言声声心向党。6月29日,沉寂了55年的西北大漠两弹结合试验阵地,再一次沸腾起来。酒泉卫星发射中心在此组织学东风历史悟东风传统讲东
电子束焊(关于焊接接头的选择与坡口设计)电子束焊(关于焊接接头的选择与坡口设计)焊接结构是由许多部件元件零件用焊接方法连接而成的,因此焊接接头的性能质量好坏直接与焊接结构的性能和安全性可靠性有关。多年来焊接工程界对焊接接
姓王的来历(王姓起源)姓王的来历(王姓起源)根据公安部发布的二二年全国姓名报告记载,王李张刘陈五大姓氏人口总数占全国户籍总人口的30。8,其中王姓户籍人口数量排名第一。中华民族有两大共同祖先,黄帝和炎帝
北京景点介绍(北京最全精华景点名录)北京景点介绍(北京最全精华景点名录)北京作为世界文化名城,处处藏着宝藏,到处充满惊喜,值得游玩的地方实在太多太多。馨姐精心整理了一份景区名录,可根据时间长短合理安排你的行程,如果想
北京卧佛寺(古迹寻踪之北京许愿极为灵验的卧佛寺)北京卧佛寺(古迹寻踪之北京许愿极为灵验的卧佛寺)早就听闻卧佛寺的大名,据说这里许愿极为灵验,不少工作不顺,感情不顺,学业不顺,乃至健康出问题的善男信女们纷纷至此,所以这里常年香火鼎
用的多资源网(6个教师常用资源网站)用的多资源网(6个教师常用资源网站)经常收到小伙伴的留言说能力不行,怎么提升自己工作的时候发现自己和别的同事差一大截,怎么提升自己的能力水平其实我想说,只要我们有一颗努力学习的心,
熬夜黑眼圈怎么去除(因为长期熬夜导致的黑眼圈如何消呢?)熬夜黑眼圈怎么去除(因为长期熬夜导致的黑眼圈如何消呢?)引子莫叔,因为长期熬夜导致的黑眼圈如何消呢?导致黑眼圈的原因有很多,比如有人先天性体质问题,从小的时候就开始有黑眼圈了,这种