




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
贪吃蛇:看了传智博客的视频整理出来的代码Snake类package snake;import java.awt.Color;import java.awt.Graphics;import java.awt.Point;import java.util.HashSet;import java.util.LinkedList;import java.util.Set;public class Snake /定义方向的常量public static final int UP=-1;public static final int DOWN=1;public static final int LEFT=2;public static final int RIGHT=-2;private int oldDirection,newDirection;private Point oldTail; private boolean life;private LinkedList body=new LinkedList(); /蛇的坐标private Set listener=new HashSet();/蛇没身体 要初始化public Snake()init();public void init()/显示区最中间点int x=Global.WIDTH/2;int y=Global.HEIGHT/2;/初始化身体节点for(int i=0;i3;i+)/添加节点body.addLast(new Point(x-,y);/蛇头在右边 默认方向为右oldDirection=newDirection=RIGHT;life=true;public void move()System.out.println(Snakes move);if(!(oldDirection+newDirection)=0)oldDirection=newDirection;/1. 去尾oldTail=body.removeLast();int x=body.getFirst().x; /原坐标int y=body.getFirst().y;switch(oldDirection)case UP:y-;if(y=Global.HEIGHT)y=0;break;case LEFT:x-;if(x=Global.WIDTH)x=0;break;Point newHead=new Point(x,y);/2. 加头body.addFirst(newHead);public void changeDirection(int direction)System.out.println(Snakes changeDirection);/*if(!(direction+this.direction=0)this.direction=direction;*/newDirection=direction;public void die()life=false;public void eatFood()System.out.println(Snakes eatFood);body.addLast(oldTail);public boolean isEatBody()System.out.println(Snakes isEatBody);for(int i=1;ibody.size();i+)if(body.get(i).equals(this.getHead()return true;return false;/显示public void drawMe(Graphics g)System.out.println(Snakes drawMe);g.setColor(Color.BLUE);/蛇身颜色/遍历for(Point p: body)g.fill3DRect(p.x*Global.CELL_SIZE, p.y*Global.CELL_SIZE,Global.CELL_SIZE , Global.CELL_SIZE,true);/得到蛇头的方法public Point getHead()return body.getFirst();/内部类private class SnakeDriver implements Runnablepublic void run()while(life)move();for(SnakeListener l:listener)l.snakeMove(Snake.this);tryThread.sleep(1000);catch(InterruptedException e)e.printStackTrace();/启动线程public void start()new Thread(new SnakeDriver().start();public void addSnakeListener(SnakeListener l)if(l!=null)this.listener.add(l);Food类package snake;import java.awt.Graphics;import java.awt.Point;public class Food extends Point public void newFood(Point p)this.setLocation(p);public boolean isSnakeEatFood(Snake snake)System.out.println(Foods isAnakeEatFood);return this.equals(snake.getHead();/return false;public void drawMe(Graphics g)System.out.println(Foods drawMe);/g.fillOval(x*Global.WIDTH, y*Global.HEIGHT, Global.CELL_SIZE,Global.CELL_SIZE);g.fill3DRect(x*Global.CELL_SIZE, y*Global.CELL_SIZE, Global.CELL_SIZE, Global.CELL_SIZE, true);Ground类package snake;import java.awt.Color;import java.awt.Graphics;import java.awt.Point;import java.util.Random;public class Ground private int rocks=new intGlobal.WIDTHGlobal.HEIGHT;/生成墙public Ground()for(int y=0;yGlobal.WIDTH;y+)rocks0y=1;rocksGlobal.HEIGHT-1y=1;for(int x=0;xGlobal.WIDTH;x+)rocksx0=1;rocksxGlobal.WIDTH-1=1;public boolean isSnakeEatGround(Snake snake)System.out.println(Grounds isSnakeEatGround );for(int x=0;xGlobal.WIDTH;x+)for(int y=0;yGlobal.HEIGHT;y+)if(rocksxy=1&(x=snake.getHead().x&y=snake.getHead().y)/石头和蛇头重合return true;return false;/获得随机位置public Point getPoint()Random ran=new Random();int x=0,y=0;do x=ran.nextInt(Global.WIDTH); y=ran.nextInt(Global.HEIGHT);while(rocksxy=1);return new Point(x,y);public void drawMe(Graphics g)System.out.println(Grounds drawMe);g.setColor(Color.RED);for(int x=0;xGlobal.WIDTH;x+)for(int y=0;yGlobal.HEIGHT;y+)if(rocksxy=1)g.fill3DRect(x*Global.CELL_SIZE, y*Global.CELL_SIZE, Global.CELL_SIZE, Global.CELL_SIZE, true);GamePanel类package snake;import java.awt.Color;import java.awt.Graphics;import javax.swing.JPanel;public class GamePanel extends JPanel private Snake snake;private Food food;private Ground ground;public void display(Snake snake,Food food,Ground ground)System.out.println(CamePanels display);this.snake=snake;this.food=food;this.ground=ground;this.repaint();protected void paintComponent(Graphics g) / TODO 自动生成的方法存根/重新显示super.paintComponent(g);g.setColor(new Color(0xcfcfcf);g.fillRect(0, 0, Global.WIDTH*Global.CELL_SIZE, Global.HEIGHT*Global.CELL_SIZE);if(snake!=null&food!=null&ground!=null)this.snake.drawMe(g);this.food.drawMe(g);this.ground.drawMe(g);/*public void addSnakeListener(Controller controller) / TODO 自动生成的方法存根*/ Controller类package snake;import java.awt.Point;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.util.Random;public class Controller extends KeyAdapter implements SnakeListenerprivate Snake snake;private Food food;private Ground ground; private GamePanel gamePanel;public void keyPressed(KeyEvent e) / TODO 自动生成的方法存根/super.keyPressed(e);/转动方向switch(e.getKeyCode()case KeyEvent.VK_UP:snake.changeDirection(Snake.UP);break;case KeyEvent.VK_DOWN:snake.changeDirection(Snake.DOWN);break;case KeyEvent.VK_LEFT:snake.changeDirection(Snake.LEFT);break;case KeyEvent.VK_RIGHT:snake.changeDirection(Snake.RIGHT);break;public Controller(Snake snake, Food food, Ground ground, GamePanel gamePanel) super();this.snake = snake;this.food = food;this.ground = ground;this.gamePanel = gamePanel;/逻辑public void snakeMove(Snake snake) / TODO 自动生成的方法存根if(food.isSnakeEatFood(snake)snake.eatFood();food.newFood(ground.getPoint();/吃到石头if(ground.isSnakeEatGround(snake)snake.die();/让snake里线程退出/吃到身体if(snake.isEatBody()snake.die();gamePanel.display(snake,food,ground);public void newGame()snake.start();food.newFood(ground.getPoint();SnakeListener接口package snake;public interface SnakeListener void snakeMove(Snake snake);Global 类package snake;public class Global /格子public static final int CELL_SIZE=20;public static final int WIDTH=30;public static final int HEIGHT=30;TestMyGame 类package snake;import java.awt.BorderLayout;import javax.swing.JFrame;public class TestMy
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教育培训心得体会总结简短(汇编10篇)
- 第二章 函数2026年高三数学第一轮总复习
- 职高简单高考题目及答案
- 酒店工作心得体会怎么写(例文10篇)
- 美食餐厅推广营销案例分析
- 体育产业市场分析与投资机会研究
- 医药行业创新发展模式探讨
- 农产品检测技术革新-2025年无损检测技术应用创新报告
- 2025年车工考试题及答案
- 2025年山西省晋城市事业单位工勤技能考试题库及答案
- 商户收单业务培训
- 高校辅导员培训PPT课件:班干部的选任与培训
- 26个英文字母书写动态演示课件
- 分镜头脚本设计-课件
- 拧紧知识培训课件
- 非参数统计课件
- 区妇联家庭教育工作的调研报告
- 强直性脊柱炎中医治疗
- 劳保用品发放表格及管理
- 江苏省盐城市各县区乡镇行政村村庄村名居民村民委员会明细
- 深锥沉降槽地面倒装工法
评论
0/150
提交评论