java贪吃蛇三
来源:互联网 发布:程序员的数学怎么样 编辑:程序博客网 时间:2024/05/14 04:29
一:贪吃蛇细节实现----数据对象实现
1,GameDto.class数据对象 实现二维数组map,分数,等级,snake对象,Food对象,线程开始暂停状态标志位start
package com.fupeng.dto;import com.fupeng.entity.Food;import com.fupeng.snake.Snake;import com.fupeng.ui.JPanelGame;public class GameDto {private boolean[][] gameMap;public static int score = 0;public static int level = 0;public JPanelGame jPanelGame = new JPanelGame();private Snake snake;private boolean start;private Food foodEntity;public GameDto() {gameMap=new boolean[30][20];snake = new Snake(this);}public void setSnake(Snake snake) {this.snake = snake;}public Snake getSnake() {return snake;}public boolean[][] getGameMap() {return gameMap;}public boolean isStart() {return start;}public void setStart(boolean start) {this.start = start;}public Food getFoodEntity() {return foodEntity;}public void setFoodEntity(Food foodEntity) {this.foodEntity = foodEntity;}}
boolean型二维数组map作为游戏区背景,存放snake对象和食物方块对象。
score变量存放游戏分数。
level变量存放游戏等级。
start变量作为标志位,玩家控制线程循环检查该标志位,当开始或者暂停时间触发时,改变标志位,做出相应的响应。
2,Snake.class对象
该对象初始化snake对象,snake的结构使用linkedList实现,链表中存放的是Entity对象。链表实现是为了便于吃食物的时候增加节点,移动的时候删除节点。
snake初始化状态为3个长度,随机出现在map(1<x<16)上。
package com.fupeng.snake;import java.util.LinkedList;import java.util.Random;import com.fupeng.dto.GameDto;import com.fupeng.entity.Entity;public class Snake {public static Random random = new Random();private LinkedList<Entity> snake ;private GameDto gameDto;public Snake(GameDto gameDto){this.gameDto=gameDto;snake = new LinkedList<Entity>();snakeHead();}/* * 初始化状态蛇头包括三个实体,且出现位置为1<x<16 */private void snakeHead(){int y=random.nextInt(gameDto.getGameMap()[0].length-1);//0-19int x=random.nextInt(gameDto.getGameMap().length-15);//0-29for(int i=0;i<3;i++){Entity head = new Entity();int [] position = {x+2-i,y};head.setPosition(position);snake.add(head);}}public LinkedList<Entity> getSnakeList() {return snake;}}
3,Food.class
Food实现Runable接口实现多线程。一个Food小方块就是一个Entity对象。在run方法中随机生成食物小方块的坐标,并放入到map地图上
timeFx()函数实现小方块出现时间的控制
package com.fupeng.entity;import java.awt.Component;import com.fupeng.dto.GameDto;import com.fupeng.snake.Snake;public class Food extends Component implements Runnable{private static final long serialVersionUID = 1L;private GameDto gameDto;public Food(GameDto gameDto) {super();this.gameDto=gameDto;}@Overridepublic void run() {while(true){int y=Snake.random.nextInt(gameDto.getGameMap()[0].length);//0-19int x=Snake.random.nextInt(gameDto.getGameMap().length);//0-29if(this.gameDto.isStart()){try {if(gameDto.getGameMap()[x][y])continue;gameDto.getGameMap()[x][y]=true;gameDto.jPanelGame.repaint();gameDto.jPanelGame.setVisible(true);//修改小方块出现的时间time,出现时间跟level相关 time=f(level)Thread.sleep(timeFx(this.gameDto.level));} catch (InterruptedException e) {e.printStackTrace();}}}}/* * 小方块出现时间计算函数 * y=-40x+940 x<=20 * 100x>20 */private long timeFx(int level) {if(level<=20)return -40*level+940;elsereturn 100;}}
4,Entity.class小方块的实体类
小方块实体类,类成员变量包含一个int数组存放在map中的坐标位置,并重写equals方法
Food和snake链表中存放的是Entity对象。
package com.fupeng.entity;import java.awt.Image;import javax.swing.ImageIcon;public class Entity {public static final Image ENTITY = new ImageIcon("image/rect.png").getImage();public static final int DIMENSION = ENTITY.getHeight(null);private int[] position = new int[2];public int[] getPosition() {return position;}public void setPosition(int[] position) {this.position = position;}@Overridepublic boolean equals(Object obj) {if(this == obj)return true;if (obj instanceof Entity) {Entity objEntity = (Entity) obj;if(this.position[0] == objEntity.position[0] && this.position[1] == objEntity.position[1])return true;}return false;}}
0 0
- java贪吃蛇三
- Java实现贪吃蛇(三)
- 贪吃蛇的java代码分析(三)
- java贪吃蛇-一步一步写贪吃蛇
- java贪吃蛇
- 关于java“贪吃蛇”
- java 贪吃蛇1.0
- java贪吃蛇
- 贪吃蛇java代码
- Java贪吃蛇游戏
- java贪吃蛇
- java贪吃蛇
- java贪吃蛇
- java贪吃蛇
- java贪吃蛇源代码
- Java贪吃蛇游戏
- 【JAVA】贪吃蛇
- 贪吃蛇实现--Java
- GCD的简单使用
- 基础的位操作
- excel的一些窍门
- Android RecyclerView的基本使用
- 小波去噪
- java贪吃蛇三
- JavaScript & jQuery交互式Web前端开发
- 多线程简单介绍(摘记)
- Java Reflection(十):数组
- 【笔记】Linux驱动学习第一章
- 尽管关于Java中文问题的讨论已经相当多了,但由于Java的相关技术标准繁多,面向Java的Web服务器、应用服务器以及JDBC数据库驱动等都没有官方的标准,所以Java应用在处理中文时所存在的问
- How-to: Enable yarn ResourceManager HA
- SAT语法三大从句分析
- mysql分表方法-----MRG_MyISAM引擎分表法