📄 tilecanvas.java
字号:
angel = 0;
}
testenemy(angel);//调用炮弹检测方法
MoveBomb(bombChange1, bombChange2, angel);//调用炮弹移动方法
}
protected void testenemy(int ab) {
try {
int ibomb;//炮弹的最大步长
bombChange1 = 3;
bombChange2 = 3;
boolean noEnemy1 = true;
boolean noEnemy2 = true;
bWater1 = false;
bWater2 = false;
switch (ab) {
case 45://炮弹在45度方向发射
for (ibomb = 1; ibomb < 4; ibomb++) {
if (personRow - ibomb < 0 | personColumn - ibomb < 0) {
bombChange1 = ibomb - 1;
break;
} else if (map[personRow - ibomb][personColumn - ibomb] == Map.ENEMY1
|| map[personRow - ibomb][personColumn - ibomb] == Map.ENEMY2
|| map[personRow - ibomb][personColumn - ibomb] == Map.BEAT) {
bombChange1 = ibomb;
bFlame1 = true;
noEnemy1 = false;
break;
}
} //判断炮弹1射程内最近的船的位置
for (ibomb = 1; ibomb < 4; ibomb++) {
if (personRow + ibomb > 10 | personColumn + ibomb > 10) {
bombChange2 = ibomb - 1;
break;
} else if (map[personRow + ibomb][personColumn + ibomb] == Map.ENEMY1
|| map[personRow + ibomb][personColumn + ibomb] == Map.ENEMY2
|| map[personRow + ibomb][personColumn + ibomb] == Map.BEAT) {
bombChange2 = ibomb;
bFlame2 = true;
noEnemy2 = false;
break;
}
} //判断炮弹2射程内最近的船的位置
break;
case -45:
for (ibomb = 1; ibomb < 4; ibomb++) {
if (personRow - ibomb < 0 | personColumn + ibomb > 10) {
bombChange1 = ibomb - 1;
break;
} else if (map[personRow - ibomb][personColumn + ibomb] == Map.ENEMY1
|| map[personRow - ibomb][personColumn + ibomb] == Map.ENEMY2
|| map[personRow - ibomb][personColumn + ibomb] == Map.BEAT) {
bombChange1 = ibomb;
bFlame1 = true;
noEnemy1 = false;
break;
}
} //判断炮弹1射程内最近的船的位置
for (ibomb = 1; ibomb < 4; ibomb++) {
if (personRow + ibomb > 10 | personColumn - ibomb < 0) {
bombChange2 = ibomb - 1;
break;
} else if (map[personRow + ibomb][personColumn - ibomb] == Map.ENEMY1
|| map[personRow + ibomb][personColumn - ibomb] == Map.ENEMY2
|| map[personRow + ibomb][personColumn - ibomb] == Map.BEAT) {
bombChange2 = ibomb;
bFlame2 = true;
noEnemy2 = false;
break;
}
} //判断炮弹2射程内最近的船的位置
break;
case 0:
for (ibomb = 1; ibomb < 4; ibomb++) {
if (personRow - ibomb < 0) {
bombChange1 = ibomb - 1;
break;
} else if (map[personRow - ibomb][personColumn] == Map.ENEMY1
|| map[personRow - ibomb][personColumn] == Map.ENEMY2
|| map[personRow - ibomb][personColumn] == Map.BEAT) {
bombChange1 = ibomb;
bFlame1 = true;
noEnemy1 = false;
break;
}
} //判断炮弹1射程内最近的船的位置
for (ibomb = 1; ibomb < 4; ibomb++) {
if (personRow + ibomb > 10) {
bombChange2 = ibomb - 1;
break;
} else if (map[personRow + ibomb][personColumn] == Map.ENEMY1
|| map[personRow + ibomb][personColumn] == Map.ENEMY2
|| map[personRow + ibomb][personColumn] == Map.BEAT) {
bombChange2 = ibomb;
bFlame2 = true;
noEnemy2 = false;
break;
}
} //判断炮弹2射程内最近的船的位置
break;
case 90:
for (ibomb = 1; ibomb < 4; ibomb++) {
if (personColumn - ibomb < 0) {
bombChange1 = ibomb - 1;
break;
} else if (map[personRow][personColumn - ibomb] == Map.ENEMY1
|| map[personRow][personColumn - ibomb] == Map.ENEMY2
|| map[personRow][personColumn - ibomb] == Map.BEAT) {
bombChange1 = ibomb;
bFlame1 = true;
noEnemy1 = false;
break;
}
} //判断炮弹1射程内最近的船的位置
for (ibomb = 1; ibomb < 4; ibomb++) {
if (personColumn + ibomb > 10) {
bombChange2 = ibomb - 1;
break;
} else if (map[personRow][personColumn + ibomb] == Map.ENEMY1
|| map[personRow][personColumn + ibomb] == Map.ENEMY2
|| map[personRow][personColumn + ibomb] == Map.BEAT) {
bombChange2 = ibomb;
bFlame2 = true;
noEnemy2 = false;
break;
}
} //判断炮弹2射程内最近的船的位置
break;
}
if (noEnemy1 == true && bombChange1 != 0) {
bWater1 = true;
}
if (noEnemy2 == true && bombChange2 != 0) {
bWater2 = true;
}
} catch (Exception e) {
e.printStackTrace();
}
}
protected void MoveBomb(int bc1, int bc2, int ab) {
xBomb1 = x;//炮弹1的轨迹上x座标
yBomb1 = y;//炮弹1的轨迹上y座标
xBomb2 = x;//炮弹2的轨迹上x座标
yBomb2 = y;//炮弹2的轨迹上y座标
int maxbc = 0;//炮弹1和炮弹2中最远的发射距离
if (bc1 < bc2)
maxbc = bc2;
else
maxbc = bc1;
try {
switch (ab)//根据角度来判断
{
case 45:
for (int ibmove = 0; ibmove <= step * maxbc; ibmove += 8) {
if (ibmove == bc1 * step)//判断炮弹是否移动到预期位置
{
bbc1 = false;
bombEnemy(xBomb1, yBomb1);
if (map[personRow - bc1][personColumn - bc1] == Map.ENEMY1
|| map[personRow - bc1][personColumn - bc1] == Map.ENEMY2) {
map[personRow - bc1][personColumn - bc1] = Map.BONE;
}
}
if (ibmove == bc2 * step) {
bbc2 = false;
bombEnemy(xBomb2, yBomb2);
if (map[personRow + bc2][personColumn + bc2] == Map.ENEMY1
|| map[personRow + bc2][personColumn + bc2] == Map.ENEMY2) {
map[personRow + bc2][personColumn + bc2] = Map.BONE;
}
}
if (bbc1)//炮弹1移动过程,移动到预期位置
{
xBomb1 -= 8;
yBomb1 -= 8;
}
if (bbc2)//炮弹2移动过程,移动到预期位置
{
xBomb2 += 8;
yBomb2 += 8;
}
repaint();
Thread.sleep(50);
}
bbc1 = true;
bbc2 = true;
break;
case -45:
for (int ibmove = 0; ibmove <= step * maxbc; ibmove += 8) {
if (ibmove == bc1 * step)//判断炮弹是否移动到预期位置
{
bbc1 = false;
bombEnemy(xBomb1, yBomb1);
if (map[personRow - bc1][personColumn + bc1] == Map.ENEMY1
|| map[personRow - bc1][personColumn + bc1] == Map.ENEMY2) {
map[personRow - bc1][personColumn + bc1] = Map.BONE;
}
}
if (ibmove == bc2 * step) {
bbc2 = false;
bombEnemy(xBomb2, yBomb2);
if (map[personRow + bc2][personColumn - bc2] == Map.ENEMY1
|| map[personRow + bc2][personColumn - bc2] == Map.ENEMY2) {
map[personRow + bc2][personColumn - bc2] = Map.BONE;
}
}
if (bbc1)//炮弹1移动过程,移动到预期位置
{
xBomb1 += 8;
yBomb1 -= 8;
}
if (bbc2)//炮弹2移动过程,移动到预期位置
{
xBomb2 -= 8;
yBomb2 += 8;
}
repaint();
Thread.sleep(50);
}
bbc1 = true;
bbc2 = true;
break;
case 0:
for (int ibmove = 0; ibmove <= step * maxbc; ibmove += 8) {
if (ibmove == bc1 * step)//判断炮弹是否移动到预期位置
{
bbc1 = false;
bombEnemy(xBomb1, yBomb1);
if (map[personRow - bc1][personColumn] == Map.ENEMY1
|| map[personRow - bc1][personColumn] == Map.ENEMY2) {
map[personRow - bc1][personColumn] = Map.BONE;
}
}
if (ibmove == bc2 * step) {
bbc2 = false;
bombEnemy(xBomb2, yBomb2);
if (map[personRow + bc2][personColumn] == Map.ENEMY1
|| map[personRow + bc2][personColumn] == Map.ENEMY2) {
map[personRow + bc2][personColumn] = Map.BONE;
}
}
if (bbc1)//炮弹1移动过程,移动到预期位置
{
yBomb1 -= 8;
}
if (bbc2)//炮弹2移动过程,移动到预期位置
{
yBomb2 += 8;
}
repaint();
Thread.sleep(50);
}
bbc1 = true;
bbc2 = true;
break;
case 90:
for (int ibmove = 0; ibmove <= step * maxbc; ibmove += 8) {
if (ibmove == bc1 * step)//判断炮弹是否移动到预期位置
{
bbc1 = false;
bombEnemy(xBomb1, yBomb1);
if (map[personRow][personColumn - bc1] == Map.ENEMY1
|| map[personRow][personColumn - bc1] == Map.ENEMY2) {
map[personRow][personColumn - bc1] = Map.BONE;
}
}
if (ibmove == bc2 * step) {
bbc2 = false;
bombEnemy(xBomb2, yBomb2);
if (map[personRow][personColumn + bc2] == Map.ENEMY1
|| map[personRow][personColumn + bc2] == Map.ENEMY2) {
map[personRow][personColumn + bc2] = Map.BONE;
}
}
if (bbc1)//炮弹1移动过程,移动到预期位置
{
xBomb1 -= 8;
}
if (bbc2)//炮弹2移动过程,移动到预期位置
{
xBomb2 += 8;
}
repaint();
Thread.sleep(50);
}
bbc1 = true;
bbc2 = true;
break;
}
isBomb = false;
direction = 0;
} catch (Exception e) {
e.printStackTrace();
}
}
protected void bombEnemy(int xBombEnemy, int yBombEnemy) {
for (int i = 0; i < nEnemy; i++) {
if (!anemy[i].isDead) {
if (((anemy[i].oldRow * 16) == yBombEnemy)
&& ((anemy[i].oldColumn * 16)) == xBombEnemy) {
if (anemy[i].shLevel != Map.BEAT) {
anemy[i].isDead = true;
anemy[i].willDead = true;
Score(anemy[i]);
}
}
}
}
}
protected void walkDown() {
try {
if ((personRow + 1 < ROWCOL)
&& (map[personRow + 1][personColumn] != Map.TREE)
&& (map[personRow + 1][personColumn] != Map.ISLAND)
&& (map[personRow + 1][personColumn] != Map.ENEMY1)
&& (map[personRow + 1][personColumn] != Map.ENEMY2)
&& (map[personRow + 1][personColumn] != Map.BEAT)
&& (map[personRow + 1][personColumn] != Map.BONE)) { //没有超出边界或障碍
imgMainPic = imgShip[2];
oldKeyCode = tmpKeyCode;
for (int imove = 0; imove < 16; imove = imove + 4) {
y += 4;
repaint();
Thread.sleep(50);
}
eat(map[personRow + 1][personColumn], personRow + 1,
personColumn);
if (map[personRow + 1][personColumn] == Map.SWIRL) {
swirl();
} else
personRow = personRow + 1;
changeEnemy = true;
}
} catch (Exception e) {
e.printStackTrace();
}
}
protected void walkDownLeft() {
try {
if ((personRow + 1 < ROWCOL) && (personColumn - 1 >= 0)
&& (map[personRow + 1][personColumn - 1] != Map.TREE)
&& (map[personRow + 1][personColumn - 1] != Map.ISLAND)
&& (map[personRow + 1][personColumn - 1] != Map.ENEMY1)
&& (map[personRow + 1][personColumn - 1] != Map.ENEMY2)
&& (map[personRow + 1][personColumn - 1] != Map.BEAT)
&& (map[personRow + 1][personColumn - 1] != Map.BONE)) { //没有超出边界或障碍
imgMainPic = imgShip[1];
oldKeyCode = tmpKeyCode;
for (int imove = 0; imove < 16; imove = imove + 4) {
y += 4;
x -= 4;
repaint();
Thread.sleep(50);
}
eat(map[personRow + 1][personColumn - 1], personRow + 1,
personColumn - 1);
if (map[personRow + 1][personColumn - 1] == Map.SWIRL) {
swirl();
} else {
personRow = personRow + 1;
personColumn = personColumn - 1;
}
changeEnemy = true;
}
} catch (Exception e) {
e.printStackTrace();
}
}
protected void walkDownRight() {
try {
if ((personRow + 1 < ROWCOL) && (personColumn + 1 < ROWCOL)
&& (map[personRow + 1][personColumn + 1] != Map.TREE)
&& (map[personRow + 1][personColumn + 1] != Map.ISLAND)
&& (map[personRow + 1][personColumn + 1] != Map.ENEMY1)
&& (map[personRow + 1][personColumn + 1] != Map.ENEMY2)
&& (map[personRow + 1][personColumn + 1] != Map.BEAT)
&& (map[personRow + 1][personColumn + 1] != Map.BONE)) { //没有超出边界或障碍
imgMainPic = imgShip[3];
oldKeyCode = tmpKeyCode;
for (int imove = 0; imove < 16; imove = imove + 4) {
y += 4;
x += 4;
repaint();
Thread.sleep(50);
}
changeEnemy = true;
eat(map[personRow + 1][personColumn + 1], personRow + 1,
personColumn + 1);
if (map[personRow + 1][personColumn + 1] == Map.SWIRL) {
swirl();
} else {
personRow = personRow + 1;
personColumn = personColumn + 1;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
protected void walkUp() {
try {
if ((personRow - 1 >= 0)
&& (map[personRow - 1][personColumn] != Map.TREE)
&& (map[personRow - 1][personColumn] != Map.ISLAND)
&& (map[personRow - 1][personColumn] != Map.ENEMY1)
&& (map[personRow - 1][personColumn] != Map.ENEMY2)
&& (map[personRow - 1][personColumn] != Map.BEAT)
&& (map[personRow - 1][personColumn] != Map.BONE)) { //没有超出边界或障碍
imgMainPic = imgShip[8];
oldKeyCode = tmpKeyCode;
for (int imove = 0; imove < 16; imove += 4) {
y -= 4;
repaint();
Thread.sleep(50);
}
eat(map[personRow - 1][personColumn], personRow - 1,
personColumn);
if (map[personRow - 1][personColumn] == Map.SWIRL) {
swirl();
} else
personRow = personRow - 1;
changeEnemy = true;
}
} catch (Exception e) {
e.printStackTrace();
}
}
protected void walkUpLeft() {
try {
if ((personRow - 1 >= 0) && (personColumn - 1 >= 0)
&& (map[personRow - 1][personColumn - 1] != Map.TREE)
&& (map[personRow - 1][personColumn - 1] != Map.ISLAND)
&& (map[personRow - 1][personColumn - 1] != Map.ENEMY1)
&& (map[personRow - 1][personColumn - 1] != Map.ENEMY2)
&& (map[personRow - 1][personColumn - 1] != Map.BEAT)
&& (map[personRow - 1][personColumn - 1] != Map.BONE)) { //没有超出边界或障碍
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -