package entity;
import java.awt.Point;
import java.util.ArrayList;
import java.util.List;
public class GameAct {
/*
* 定义小方块类型编号
*/
private int typeCode;
public int getTypeCode() {
return typeCode;
}
//定义旋转判断常量
private static int MIN_X=0;
private static int MAX_X=9;
private static int MIN_Y=0;
private static int MAX_Y=17;
//定义存放小方块的数组point组件是javaswing提供的
private Point[] actPoints;
//定义静态变量数组,存放七个小方块
private static List<Point[]>TYPE_CONFIG;
static{
//TODO 需要写进配置文件,后续处理
TYPE_CONFIG=new ArrayList<Point[]>(9);
TYPE_CONFIG.add(new Point[]{new Point(4,0),new Point(3,0),new Point(5,0),new Point(5,1)});
TYPE_CONFIG.add(new Point[]{new Point(4,0),new Point(3,0),new Point(4,1),new Point(5,1),});
TYPE_CONFIG.add(new Point[]{new Point(4,0),new Point(3,0),new Point(5,0),new Point(6,0),});
TYPE_CONFIG.add(new Point[]{new Point(4,0),new Point(3,0),new Point(5,0),new Point(4,1),});
TYPE_CONFIG.add(new Point[]{new Point(4,0),new Point(3,0),new Point(5,0),new Point(3,1),});
TYPE_CONFIG.add(new Point[]{new Point(4,0),new Point(5,0),new Point(3,1),new Point(4,1),});
TYPE_CONFIG.add(new Point[]{new Point(4,0),new Point(5,0),new Point(4,1),new Point(5,1),});
}
public GameAct(){
//TODO TYPE_CODE需要补上
this.init(typeCode);
}
public Point[] getActPoints() {
return actPoints;
}
/*
* 小方块移动方法
* */
public boolean move(int moveX,int moveY,boolean[][] gameMap){
//边界判定,将小方块控制在UiBaseGame框框中
//move方法就是讲point[]数组中的坐标全部都加moveX,或者moveY
for (int i = 0; i <actPoints.length; i++) {
//actPoints[i].x+moveX;
//actPoints[i].y+moveY;
int newX=actPoints[i].x+moveX;
int newY=actPoints[i].y+moveY;
if(!overZone(newX, newY,gameMap))
return false;
}
for (int i = 0; i <actPoints.length; i++) {
actPoints[i].x+=moveX;
actPoints[i].y+=moveY;
}
return true;
}
/*
* 方块旋转算法函数
* 顺时针:
B.x = O.x - O.y + A.y
B.y = O.x + O.y - A.x
* */
public void round(boolean[][] gameMap){
//TODO 硬编码方块不需要旋转
if(typeCode==6){
return;
}
int newX=0;
int newY=0;
for (int i = 1; i < actPoints.length; i++) {
newX=actPoints[0].x-actPoints[0].y+actPoints[i].y;
newY=actPoints[0].x+actPoints[0].y-actPoints[i].x;
if(!overZone(newX, newY,gameMap))
return;
}
for(int i = 1; i < actPoints.length; i++){
//TODO判断是否可以旋转
newX=actPoints[0].x-actPoints[0].y+actPoints[i].y;
newY=actPoints[0].x+actPoints[0].y-actPoints[i].x;
actPoints[i].x=newX;
actPoints[i].y=newY;
}
}
/*
* 判断每一个小方块是否都可以旋转,若每一个都可以旋转,则在将方块整体旋转,否则直接退出
* 将gameMap二维数组传递进来进行判断:解决小方块堆积问题
* 在move()方法和round()方法中都需要解决小方块堆积问题
* */
private boolean overZone(int newX,int newY,boolean[][] gameMap){
// newX=actPoints[0].x-actPoints[0].y+actPoints[i].y;
//newY=actPoints[0].x+actPoints[0].y-actPoints[i].x;
if (newX<MIN_X||newX>MAX_X||newY<MIN_Y||newY>MAX_Y||gameMap[newX][newY]) {
return false;
}
return true;
}
public void init(int typeCode) {
this.typeCode=typeCode;
// TODO 硬编码问题,后续解决
/*
* 小方块随机出现可以使用switch case分支来解决,但可以使用算法优化:使用数组映射来解决
*/
//获得list中point数组对象
Point[] tempPoints=TYPE_CONFIG.get(typeCode);
//新定义actPoints数组,并指定长度
actPoints=new Point[tempPoints.length];
//将临时tempPoint数组中的值传递给actPoint数组
for (int i = 0; i < tempPoints.length; i++) {
actPoints[i]=new Point(tempPoints[i].x,tempPoints[i].y);
}
/*
* switch case分支算法可以解决小方块随机出现的问题,新手,考试,面试时候使用
* 随机生成一个0-6的整数new Random().nextInt(6);
switch (typeCode) {
case 0:
actPoints=new Point[]{new Point(4,0),new Point(3,0),new Point(5,0),new Point(5,1),};
break;
case 1:
actPoints=new Point[]{new Point(4,0),new Point(3,0),new Point(4,1),new Point(5,1),};
break;
case 2:
actPoints=new Point[]{new Point(4,0),new Point(3,0),new Point(5,0),new Point(6,0),};
break;
case 3:
actPoints=new Point[]{new Point(4,0),new Point(3,0),new Point(5,0),new Point(4,1),};
break;
case 4:
actPoints=new Point[]{new Point(4,0),new Point(3,0),new Point(5,0),new Point(3,1),};
break;
case 5:
actPoints=new Point[]{new Point(4,0),new Point(5,0),new Point(3,1),new Point(4,1),};
break;
default:
actPoints=new Point[]{new Point(4,0),new Point(5,0),new Point(4,1),new Point(5,1),};
break;
}
*/
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
Game.zip (93个子文件)
Game
.project 380B
save
recode.dat 214B
src
service
GameService.java 4KB
ui
PanelGame.java 2KB
FrameGame.java 1KB
UiBaseGrade.java 698B
UiBase.java 4KB
UiBaseGame.java 2KB
UiBaseDataBase.java 805B
UiBaseDisk.java 726B
UiBasePoint.java 1KB
LayerData.java 1KB
UiBaseButton.java 351B
UiBaseNext.java 1KB
UiBaseBackGround.java 615B
UiBaseAbout.java 329B
gamedto
GameDto.java 2KB
player.java 705B
dao
DataTest1.java 576B
DataDisk.java 2KB
DataBase.java 2KB
DataTest.java 573B
Data.java 248B
config
ConfigFactory.java 486B
GameConfig.java 3KB
LayerConfig.java 613B
entity
GameAct.java 5KB
main
MainTest.java 784B
control
GameContrl.java 2KB
PlayControl.java 548B
lib
dom4j-1.6.1.jar 307KB
mysql-connector-java-5.1.22-bin.jar 813KB
sqljdbc4.jar 455KB
.settings
org.eclipse.jdt.core.prefs 598B
config
笔记
程序编写思路 2KB
graphics
window
rect.png 4KB
Window.png 334B
view.jpg 156KB
game
4.png 3KB
shadow.png 3KB
3.png 3KB
rect.png 3KB
5.png 3KB
1.png 3KB
2.png 3KB
6.png 3KB
0.png 3KB
string
rmline.png 4KB
point.png 4KB
db.png 5KB
strat.png 4KB
config.png 4KB
disk.png 5KB
exp.png 4KB
sign.png 6KB
level.png 4KB
pause.png 7KB
num.png 489B
background
Fish.jpg 312KB
1.jpg 193KB
light.jpg 150KB
w7.jpg 194KB
Sea.jpg 269KB
w8.jpg 140KB
.classpath 447B
bin
service
GameService.class 3KB
ui
FrameGame.class 1KB
UiBasePoint.class 2KB
UiBase.class 4KB
UiBaseButton.class 493B
UiBaseDisk.class 1KB
PanelGame.class 3KB
UiBaseNext.class 2KB
UiBaseGrade.class 1KB
UiBaseDataBase.class 1KB
UiBaseBackGround.class 861B
UiBaseAbout.class 490B
UiBaseGame.class 2KB
LayerData.class 2KB
gamedto
player.class 1KB
GameDto.class 3KB
dao
DataDisk.class 3KB
DataTest.class 991B
DataTest1.class 995B
Data.class 233B
DataBase.class 3KB
config
ConfigFactory.class 671B
LayerConfig.class 921B
GameConfig.class 3KB
entity
GameAct.class 3KB
main
MainTest.class 1KB
control
PlayControl.class 657B
GameContrl.class 2KB
共 93 条
- 1
资源评论
- 该昵称已经被占用2015-03-20这个代码不全,还没敲到最后~
- qq_262528252015-07-24还可以,适合初学者
- 默数步伐2015-12-16虽然没敲完,但还是挺有帮助,谢谢楼主
- java_zmy2015-06-30这个代码还不全,建议楼主弄全了再发布
lecky-fu
- 粉丝: 14
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 学校课程软件工程常见10道题目以及答案demo
- javaweb新手开发中常见的目录结构讲解
- 新手小白的git使用的手册入门学习demo
- 基于Java观察者模式的info-express多对多广播通信框架设计源码
- 利用python爬取豆瓣电影评分简单案例demo
- 机器人开发中常见的几道问题以及答案demo
- 基于SpringBoot和layuimini的简洁美观后台权限管理系统设计源码
- 实验报告五六代码.zip
- hdw-dubbo-ui基于vue、element-ui构建开发,实现后台管理前端功能.zip
- (Grafana + Zabbix + ASP.NET Core 2.1 + ECharts + Dapper + Swagger + layuiAdmin)基于角色授权的权限体系.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功