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交流哦
莫言的小说(莫言除了写小说,还写诗)莫言的小说(莫言除了写小说,还写诗)1895年,诺贝尔奖开始颁布,在诺贝尔奖的五个奖项中,其中一个便是文学奖,从诺贝尔奖颁奖至今,全球已经有一百多位作家,获得了该项奖项,而莫言,则
世界十大危险机场(世界上最危险机场之一)世界十大危险机场(世界上最危险机场之一)随着经济的发达,我们平时的出行方式也有了很大的改变,以前坐火车就是件很了不起的事,如今的乘坐飞机也像是坐公交一样平常。现如今我国的机场建设也
世界最大的黑帮(日本黑帮,为什么可以持续存在?)世界最大的黑帮(日本黑帮,为什么可以持续存在?)日本黑帮,世界上独树一帜的存在。很多人都知道,日本的黑社会存在是合法的,不仅拥有自己的制服,甚至可以携带身份证明,公开行动等等。对此
2008金融危机(还想像08年金融危机那样坑中国?)2008金融危机(还想像08年金融危机那样坑中国?)2021年6月4日,中美贸易领域恢复了沟通,随后美国财政部长与我国贸易代表进行视频沟通。视频通话结束后中国也向外界传递了信息,中
广州市最好的国际学校(广州贝赛思国际学校为什么备受热捧?)广州市最好的国际学校(广州贝赛思国际学校为什么备受热捧?)近年来,大湾区规划快速发展,涌现了很多新的国际学校。在留学之前或在疫情的当下,国际学校被家长们看作与世界大学接轨的过渡,英
农村种什么赚钱(农村种植哪些经济作物)农村种什么赚钱(农村种植哪些经济作物)对于目前农村种植业而言,想实现高收入,不仅仅是看种植的品种和产量,关键还是要看市场。回答这个粉丝的问题,农村种植哪些经济作物,能实现亩收入一万
电视免费(电视机如何免费看CCTV5直播)电视免费(电视机如何免费看CCTV5直播)家里装修买了小米电视机,想看电视直播。打了宽带公司电话得知要么很贵,要么机顶盒没有CCTV5,对于体育迷来说这怎么可以呢?于是我就费了好半
东芝电视机(东芝电视怎么免费看电视直播)东芝电视机(东芝电视怎么免费看电视直播)近几年,东芝电视的不断降价,让很多人开始注意和购买这个品牌。但是你知道吗?如果你购买了东芝电视而不格外安装电视直播软件,每年至少会损失几百块
卫星天线升级(受益军队卫星通讯系统升级)卫星天线升级(受益军队卫星通讯系统升级)参与单位与人员中信证券中信证金等多家机构公司拥有三大业务板块,卫星通信惯性导航智能无人系统。公司预计2020年的整体收入同比增长7080,实
室内卫星电视天线(微型立方体卫星的强大天线)室内卫星电视天线(微型立方体卫星的强大天线)这项挑战是这样开始的2014年11月的一天早晨,我在喷气推进实验室(JPL,位于美国加州帕萨迪纳)的同事卡玛尔奥德瑞(KamalOudr
道道通导航地图下载(便携式导航安装道道通地图)道道通导航地图下载(便携式导航安装道道通地图)GPS类型便携车载GPS屏幕5。0英寸分辨率800480屏幕类型TFT操作系统WindowsCE6。0处理器SiRFAtlasIVDu
韬韬传世论坛(韬韬双色球第21065期)韬韬传世论坛(韬韬双色球第21065期)双色球2021065期一二等奖中奖纪录2021017期预测命中大乐透二等奖109万2020128期预测命中大乐透二等奖121万2020123
如何去除双下巴(如何消除双下巴?)如何去除双下巴(如何消除双下巴?)双下巴是如何形成的?双下巴的产生主要是由于肌肉松弛。除了脸颊和嘴周围,控制咀嚼和舌头运动的肌肉也是影响下巴轮廓的关键。尤其是舌头周围的肌肉直接与下
如何去除面部老年斑(老年斑如何消除?)如何去除面部老年斑(老年斑如何消除?)日常生活中,人们在变老时,皮肤会出现一些棕色斑块,而它们在医学上被称之为是脂溢性角化,通常人们喜欢把它叫做老年斑。出现老年斑是很正常的生理现象
白百合电影(白百何新戏我们的婚姻官宣)白百合电影(白百何新戏我们的婚姻官宣)腾讯视频招商会拾光盛典大牌云集,流量小花小生悉数到场,一线卫视的招商会都没有这么热闹,不愧是鹅呀。肖战,杨幂,迪丽热巴,刘亦菲,许凯,陈晓,吴
电影十年(虹膜的世界电影十年最佳)电影十年(虹膜的世界电影十年最佳)这不是一次大规模的电影奖评选活动,是虹膜邀请十位拥有丰富电影批评经验的资深影评人给出的一个观点,榜单代表的是这十位作者的选择判断与眼光。熟悉虹膜的
京胡演奏(京二胡怎样才能与京胡形成配合与协作)京胡演奏(京二胡怎样才能与京胡形成配合与协作)系列公众号,全天候陪您赏玩京剧京二胡是专门从事京剧伴奏的乐器,是我国民族器乐中年轻的一员,只有不到八十年的历史。1923年梅兰芳在排演
30岁前别结婚(年轻人三十岁以前千万不要结婚)30岁前别结婚(年轻人三十岁以前千万不要结婚)今天在极速版上看到一个话题,三十岁以前千万不要结婚,再想想自己的经历,也确实如此,我们那一代人二十多岁就奉父母之命结婚了,所以到现在没
闽南语歌手(千禧一代都在听的闽南语歌曲)闽南语歌手(千禧一代都在听的闽南语歌曲)提起闽南语歌曲你脑海当中出现的第一首歌是爱拼才会赢还是落雨声以往很长一段时间这些歌仿佛是阿嬷专属一样办酒的时候才会听啦透着那么一股古早味可都
佟大为与关悦(佟大为和老婆罕见同框)佟大为与关悦(佟大为和老婆罕见同框)佟大为虽然单眼皮,但是形象俊朗,与老婆关悦结婚多年,很少有绯闻出现,如今的他们已经育有三个孩子了,家庭幸福美满!述(最多18字01hr佟大为带老
豆油价格(豆油,菜油,棕榈油有什么区别?)豆油价格(豆油,菜油,棕榈油有什么区别?)作者皈依佛皈依法皈依僧一般来说,三者都属于油脂,价格大趋势是一致的,但是短期走势上,豆油和菜油价格走势更为一致,但是和棕榈油价格走势短期存
电脑屏幕刷新率(Windows11桌面将支持动态刷新率技术)电脑屏幕刷新率(Windows11桌面将支持动态刷新率技术)Tom39sHardware在微软发布的一篇博客文章中发现,该公司似乎有意为Windows11操作系统的桌面,引入对动态