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交流哦
招聘面试(招聘秘籍揭秘)招聘面试(招聘秘籍揭秘)目前人才市场呈现两端活跃的状态。如何快速精准的找到你心仪的人才?所以我们要打好需求分析面试谈offer入职前沟通等全流程的基本功,才能精准的招募到想要的人才
郭麒麟个人资料(家教严格纯情的郭麒麟)郭麒麟个人资料(家教严格纯情的郭麒麟)这几天娱乐圈还是很热闹的,吴亦凡于晓光华晨宇周玄毅都被锤了,今天轮到了近几年人气剧增的郭麒麟。时尚博主安珀wang晒出跟郭麒麟的聊天记录,一星
动车退票(一图看懂火车票退改签新规)动车退票(一图看懂火车票退改签新规)今天,2021年春运正式开启。铁路出台多项春运服务举措,其中火车票退改签新规备受关注。线上线下各渠道售票预售期统一调整为15天,相应调整免收退票
明道主演的电视剧(2010年前明道出演的十个剧角色)明道主演的电视剧(2010年前明道出演的十个剧角色)hello,大家好!今天的你们都开心了吗?都在忙些什么呢?6月10日,有台媒拍到明道带着长辈和一名女子踏青。照片中,明道怀中抱着
明道电视剧(明道演的单均昊)明道电视剧(明道演的单均昊)如果说评选8090后最喜欢的偶像剧,相信这部由明道陈乔恩主演的王子变青蛙,一定榜上有名!而明道在这部电视剧中饰演的霸道总裁单均昊,更是给观众留下了深刻的
明道的哥哥(明道亲哥欠千万赌债)明道的哥哥(明道亲哥欠千万赌债)1月5日,台湾媒体报道,台北市湖山区发生命案,死者是一名中年男子和一名女子,旁边躺着一小孩,后该中年男子身份经过证明是影星明道的哥哥,他疑似负债千万
打工皇帝唐骏(唐骏的人生路)打工皇帝唐骏(唐骏的人生路)打工人打工魂,打工人都是人上人。简单的一句话写满了打工人的心声,从实习开始到正式工作,明明同是打工人也出现了内卷。同为打工人,有的人凭借自己的学历胜出,
打工皇帝唐骏(打工皇帝唐骏回来了)打工皇帝唐骏(打工皇帝唐骏回来了)最近,一家叫做微创网络的公司在亮度借壳上市未果的前提下将目光转向了科创板IPO并获得了正式的受理,而这家公司的实控人和法人正是昔日如雷贯耳的打工皇
鲁豫有约刀郎云朵(刀郎情史录)鲁豫有约刀郎云朵(刀郎情史录)刀郎像一2019年,知名歌手刀郎(真名罗林)向法院呈递诉状,状告另一知名歌手降拥卓玛(艺名降央卓玛),要求她立即停止侵权,赔偿原告损失金额若干。刀郎和
小s离婚了吗(大小S为何都不离婚)小s离婚了吗(大小S为何都不离婚)大小S为何都不离婚?这可能是很多读者最近问得最多的问题。小S不离婚,可能很多人会觉得不可思议,夫家不上进一味拖后腿甚至影响到小S的名声生不出儿子而
汽车4s店(买车究竟是去4s店还是汽贸公司?)汽车4s店(买车究竟是去4s店还是汽贸公司?现在我们买车主要有两种渠道,分别是4S店和二级经销商,其中二级经销商也就是我们熟知的汽贸公司。有些人不太清楚汽贸公司和4S店的区别,接下
腾讯老干妈和解(达成和解!腾讯向老干妈道歉)腾讯老干妈和解(达成和解!腾讯向老干妈道歉)经过几度反转,腾讯老干妈事件又有了新进展。7月10日下午消息,腾讯公司称,已向法院申请撤回财产保全申请及本案诉讼,并就合同诈骗行为已向贵
腾讯状告老干妈(厉害!腾讯把老干妈告了!)腾讯状告老干妈(厉害!腾讯把老干妈告了!)腾讯把老干妈告了!这到底是怎么回事呢?腾讯状告网红食品公司老干妈!深圳市南山区人民法院发布一则民事裁定书,同意原告腾讯请求查封冻结被告老干
canon镜头(佳能的四种镜头)canon镜头(佳能的四种镜头)这里是溢图科技(原相机笔记)本文主要面向数码时代的产品概述目前,佳能可换镜头相机共有3条产品线EOS数码单反包括全画幅产品(如6D25D4)和APS
刘邦项羽(同是起陇亩之中的项羽和刘邦)刘邦项羽(同是起陇亩之中的项羽和刘邦)一成名前的项羽项羽是秦代下相(今江苏宿迁)人,出身于楚国贵族,祖上世代为楚国大将,其叔父叫项梁,项梁的父亲则是大名鼎鼎的楚国将领项燕。在秦国展
电动伸缩门电机接线图(伸缩门电机安装步骤)电动伸缩门电机接线图(伸缩门电机安装步骤)过去伸缩门是手动,每天都需要自己动手拉上拉下,久了自己的手也会感觉到特别的疲惫。现在伸缩门则是电动,利用遥控器可以控制它上下,而在其中起作
打马赛克(片名都打马赛克的18禁神剧)打马赛克(片名都打马赛克的18禁神剧)在日本,A。V产业不容小觑。因为你我都懂的原因,日本A。V以大胆敢拍创新等标签世界闻名。看客们关注的是前凸后翘的女优,但最近有部爆款剧却为你揭
心理失衡(心理的不平衡来自哪里?)心理失衡(心理的不平衡来自哪里?)现实生活中,人们的内心或多或少都有一些不平衡。而这种心理上的失衡又驱使着人去追求另一种新的平衡。倘若在追求新的平衡中,能不昧良知不损害他人,自觉地
瓜子产地(大板瓜子原来是从这里来的)瓜子产地(大板瓜子原来是从这里来的)提起籽瓜大家可能不熟悉,但是说到西瓜,想必是无人不知,无人不晓的。若问起炎热的夏天和什么最配,答案当然是一块皮薄瓤大,水灵灵甜津津的西瓜了。接下
三峡水利枢纽工程(耗费2000多亿的三峡工程)三峡水利枢纽工程(耗费2000多亿的三峡工程)全长约3335米的三峡大坝,是当今世界上最大的水利工程枢纽。它每年的发电量超过1000亿千瓦时,每年因发电带来的收益超过500亿元,妥
爱新觉罗胤禛(还在吹雍正勤政?)爱新觉罗胤禛(还在吹雍正勤政?)自电视剧雍正王朝播放以来,康熙皇帝的四阿哥爱新觉罗胤禛,仿佛就脱胎换骨一般,从原先乖张孤僻凶残多疑的形象一下子就变成了一个忍辱负重殚精竭虑勤奋爱民的
布衣之怒(华为不懂布衣之怒)布衣之怒(华为不懂布衣之怒)华为的回应并不高明,它的强硬用错了地方,舆论愤激之下,群起殴之。一个普通的民事纠纷,演变成拘留251天,公众迫切期待华为给个说法,毕竟过去一年,华为渗进