📄 forground.java~311~
字号:
if(mapArray.m_nY == 0 ){
return -1;
}
else{
return mapArray.m_nY - 1;
}
}
private int getUpNotNull(int x, int initY) { // 从送入的点的坐标求出向上第一个不为空的点的坐标 (包含送入的点)
for (int i = initY - 1; i > mapArray.m_nY; i--) {
if( i < mapArray.getHeight())
if (x >= mapArray.m_nX && x < mapArray.getWidth()) {
if (mapArray.get(x, i) == 1) { //mapArray[x - 1][i] == 1) {
//System.out.println("upNotNull: x : " + x + " y = " + i + " " + mapArray.get(x, i));
return i;
}
}
/*else {
return 1000;
}*/
}
return -1;//********************
}
public int getDownNotNull(int x, int initY) {
//System.out.println("in getDownNotNull() : x = " + x + "initY = " + initY );
for (int i = initY;
i < mapArray.getHeight() /*mapArray[0].length/**/; i++) {
if (x >= mapArray.m_nX && x < mapArray.getWidth())
if (mapArray.get(x, i) == 1) { //mapArray[x - 1][i] == 1) {
//System.out.println("mapArray[" + (x - 1) + "][" + i + "] = " + mapArray[x - 1][i]);
return i;
}
}
return 1000; //到底都为空
}
public int getRightNotNull(int x, int y) {
for (int i = x + 1; i < mapArray.getWidth(); i++) {
if (i >= mapArray.m_nX) {
if (mapArray.get(i, y) == 1) { //mapArray[i][y - 1] == 1) {
return i;
}
}
/*else {
return 1000;
}*/
}
return 1000;
}
public int getLeftNotNull(int x, int y) {
for (int i = x - 1; i >= mapArray.m_nX; i--) {
if(i < mapArray.getWidth())
if (mapArray.get(i, y ) == 1) { //mapArray[i][y] == 1) {
return i;
}
}
return -1;
}
public int getTankY(Tank tank) { //
int y = tank.tank_y + tank.TANK_VSCALE / 2; //坦克所在中心地面的y坐标
int x = tank.tank_x; // + battleCanvas.SCREEN_X; //坦克相对于整个地图的x坐标
/*System.out.println("getTankY x = " + x + " y = " + y);
System.out.println("mapArray.getWidth() = " + mapArray.getWidth());
System.out.println("mapArray.m_nX = " + mapArray.m_nX);
System.out.println("mapArray.m_nY = " + mapArray.m_nY);
System.out.println("mapArray.getHeight() = " + mapArray.getHeight());/**/
if (x < mapArray.getWidth() && x >= mapArray.m_nX && y >= mapArray.m_nY &&
y < mapArray.getHeight()) {
if (tank.direction == 1) { // 向右
//System.out.println("mapArray.get(x, y - 1) = " + mapArray.get(x, y - 1 ));
if (mapArray.get(x + 1, y) == 1) { //mapArray[x][y - 1] == 1) { // 向右水平,向上搜索
int upNull = getUpNull(x + 1, y); //送入的是坐标,不是数组索引,输出也是坐标
if (y - tank.grade > upNull) { //受到梯度限制,不能爬上去
//System.out.println("1");
return -1;
}
else {
//System.out.println("right upNull: " + upNull);
int upNotNull = getUpNotNull(x + 1, upNull);
//System.out.println("ritght upNotNull: " + upNotNull);
if (upNotNull > upNull) {
if ( (upNotNull - upNull + 1) >= tank.TANK_VSCALE) {
return upNull + 1 - tank.TANK_VSCALE / 2;
}
else {
//System.out.println("2");
return -1;
}
}
else {
if ( (upNull - upNotNull) >= tank.TANK_VSCALE) {
return upNull + 1 - tank.TANK_VSCALE / 2;
}
else {
//System.out.println("3");
return -1;
}
}
}
}
else { // 向右向下,向下搜索
//System.out.println("right down ");
if (x + tank.TANK_HSCALE / 2 >= mapImage.getWidth()) {
//System.out.println("4");
return -1;
}
//System.out.println("x = " + x);
int clip = getRightNotNull(x, y);
//System.out.println("clip = " + clip);
if (clip - x >= tank.TANK_HSCALE - 5) { //有足够的裂缝往下掉
int nextY = getDownNotNull(x + 1, y);
//System.out.println("in getTankY nextY = " + nextY);
if (nextY == 1000) {
//判断是否能够向下掉出屏幕
int gap = getRightNotNull(x + 1, mapArray.getHeight() - 1);
//System.out.println("right gap = " + gap);
if (gap > tank.TANK_HSCALE) {
return -2; //掉出屏幕,死亡!
}
else {
//System.out.println("before getDownNotNull x + tank.TANK_HSCALE / 2 = " + x + tank.TANK_HSCALE / 2);
int bb = Math.min( /*mapArray[0].length/**/
mapArray.getHeight() - 1,
getDownNotNull(x +
tank.TANK_HSCALE / 2,
y) -
tank.TANK_HSCALE / 2);
//System.out.println("gg");
return bb;
}
}
else { // 地形没有被炸穿
//System.out.println("ff");
return Math.min( /*mapArray[0].length/**/mapArray.
getHeight() - 1,
getDownNotNull(x +
tank.TANK_HSCALE / 2,
y) - tank.TANK_VSCALE / 2);
}
}
else {
//System.out.println("ee");
return tank.tank_y;
}
}
}
else {
if (tank.direction == -1) { // 向左
//System.out.println("left!");
//System.out.println("x - 1 " + (x -1 ) + " y = " + y);
//System.out.println("mapArray.get(x - 1, y) = " + mapArray.get(x - 1, y));
if (mapArray.get(x - 1, y) == 1) { //mapArray[x - 2][y - 1] == 1) { // 向左水平,向上搜索
int upNull = getUpNull(x - 1, y);
//System.out.println("left horizon upNull: " + upNull);
if (y - tank.grade > upNull) {
//System.out.println("5");
return -1;
}
else {
int upNotNull = getUpNotNull(x - 1, upNull);
//System.out.println("temp: " + upNotNull);
if (upNotNull > upNull) {
if ( (upNotNull - upNull + 1) >=
tank.TANK_VSCALE) {
return upNull + 1 - tank.TANK_VSCALE / 2;
}
else {
//System.out.println("6");
return -1;
}
}
else {
if ( (upNull - upNotNull) >= tank.TANK_VSCALE) {
return upNull + 1 - tank.TANK_VSCALE / 2;
}
else {
//System.out.println("7");
return -1;
}
}
}
}
else { // 向左向下,向下搜索
//System.out.println("left down mapArray[" + (tank.tank_x - 2) + "][" +
//(y - 1) + "] = " + mapArray[tank.tank_x - 2][y -1]);
if (x - tank.TANK_HSCALE / 2 < 0) {
//System.out.println("8");
return -1;
}
//System.out.println("x = " + x);
int clip = getLeftNotNull(x, y);
//System.out.println("clip = " + clip);
if (x - clip >= tank.TANK_HSCALE - 5 /*|| clip >= 1000*/) { //有足够的裂缝往下掉
int nextY = getDownNotNull(x - 1, y);
//System.out.println("left nextY = " + nextY);
if (nextY == 1000) {
//判断是否能够向下掉出屏幕
int gap = getLeftNotNull(x - 1,
mapArray.getHeight() - 1);
//System.out.println("left gap = " + gap);
if (gap > tank.TANK_HSCALE) {
return -2; //掉出屏幕,死亡!
}
else {
//System.out.println("before getDownNotNull x + tank.TANK_HSCALE / 2 = " + x + tank.TANK_HSCALE / 2);
int bb = Math.min( /*mapArray[0].length/**/
mapArray.getHeight() - 1,
getDownNotNull(x -
tank.TANK_HSCALE / 2, y) -
tank.TANK_VSCALE / 2);
//System.out.println("bb");
return bb;
}
}
else { // 地形没有被炸穿
//System.out.println("cc");
return Math.min( /*mapArray[0].length/**/
mapArray.getHeight() - 1,
getDownNotNull(x -
tank.TANK_HSCALE / 2,
y) -
tank.TANK_VSCALE / 2);
}
}
else { // 裂缝不够大
//System.out.println("dd");
return tank.tank_y;
}
}
}
else {
//System.out.println("9");
return -1;
}
}
}
else {
//if (tank.tank_y == Main.displayable.MAP_HEIGHT) {
//System.out.println("haha");
return -2;
//}
//return -1;
}
}
//判断是否有导弹碰撞
public boolean isCollision(Missile e1) {
int x = e1.m_x; //得到导弹的x坐标
int y = e1.m_y; //得到导弹的y坐标
//System.out.println("*******************************mappyArray[][] x = " +
//x + " y = " + y + " = " + mapArray[x][y]);
/*if (mapArray.get(x - 1, y - 1) == 1) { //mapArray[x - 1][y - 1] == 1) {
//System.out.println("crash No. " + e1.debug);
//System.out.println("mappyArray[" + x + "][" + y + "] = " +);
return true;
}/*0310*/
int k = Math.max(e1.m_x - 5, 0);
int l = Math.max(e1.m_y - 5, 0);
int m = Math.min(e1.m_x + 5, Main.displayable.MAP_WIDTH - 1);
int n = Math.min(e1.m_y + 5, Main.displayable.MAP_HEIGHT - 1);
for (int i = k; i < m; i++) {
for (int j = l; j < n; j++) {
if (mapArray.get(i, j) == 1) {
//System.out.println("hit ground crash No. " + e1.debug);
//System.out.println("mappyArray[" + (i) + "][" + (j) + "] = " + mapArray.get(x, y));
exacuteCrash(i, j, e1.attackRadius);
return true;
}
}
}/**/
return false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -