如何解决坦克游戏JavaFX中的运动
我正在创建大学项目,这是一个坦克游戏,在这个游戏中,我们使用二维数组作为地图(我们可以通过更改数组的值来更改地图)并通过 KeyEvent 进行坦克遍历,我需要做一个逐块障碍(这是阵列的单元格之一),如果坦克与块相交,则无法移动。有没有办法在我的代码中做到这一点?
public class Tank extends JPanel implements ActionListener,KeyListener {
Timer tm = new Timer(1,this);
int tankX = 270,tankY = 270,velX = 0,velY = 0,direction = 1;
int bulletX = 330;
int bulletY = 330;
String[][] map = {
{"B","S","B","B"},{"B","0","W","T","G",};
public Tank() {
tm.start();
addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
for (int i = 0; i < map.length; i++){
for (int j = 0; j < map.length; j++){
switch (map[i][j]){
case "B":
g.setColor(Color.RED);
break;
case "S":
g.setColor(Color.LIGHT_GRAY);
break;
case "W":
g.setColor(Color.CYAN);
break;
case "T":
g.setColor(Color.GREEN);
break;
case "0":
g.setColor(Color.WHITE);
break;
}
g.fillRect(i*64,j*64,64,64);
}
}
g.setColor(Color.BLUE);
g.fillRect(tankX,tankY,64);
g.setColor(Color.LIGHT_GRAY);
if (direction == 1) {
g.fillRect(tankX + 20,24,24); //UP
}
if (direction == 2) {
g.fillRect(tankX + 20,tankY + 40,24); //DOWN
}
if (direction == 3) {
g.fillRect(tankX + 40,tankY + 20,24); //RIGHT
}
if (direction == 4) {
g.fillRect(tankX,24); //LEFT
}
g.setColor(Color.GRAY);
g.filloval(bulletX,bulletY,14,14);
}
@Override
public void actionPerformed(ActionEvent e) {
if (tankX < 0){
velX = 0;
tankX = 0;
}
if (tankX > 530){
velX = 0;
tankX = 530;
}
if (tankY > 445){
velY = 0;
tankY = 445;
}
if (tankY < 0){
velY = 0;
tankY = 0;
}
bulletX = tankX + 24;
bulletY = tankY + 27;
tankX = tankX + velX;
tankY = tankY + velY;
repaint();
}
boolean Interception(){
int y = bulletY/64;
int x = bulletX/64;
if (map[x][y] == "B"){
map[x][y] = "0";
return true;
}
return false;
}
public void fire(){
while (bulletX > 0 && bulletX < 530 && bulletY > 0 && bulletY < 530) {
if (direction == 1) {
bulletY--;
}
if (direction == 2) {
bulletY++;
}
if (direction == 3) {
bulletX++;
}
if (direction == 4) {
bulletX--;
}
if (Interception()){
}
repaint();
}
destroyBlock();
}
void destroyBlock(){
repaint();
}
@Override
public void keypressed(KeyEvent e) {
int c = e.getKeyCode();
if (c == KeyEvent.VK_SPACE){
fire();
}
if (c == KeyEvent.VK_LEFT){
velX = -1;
velY = 0;
direction = 4;
}
if (c == KeyEvent.VK_RIGHT){
velX = 1;
velY = 0;
direction = 3;
}
if (c == KeyEvent.VK_UP){
velX = 0;
velY = -1;
direction = 1;
}
if (c == KeyEvent.VK_DOWN){
velX = 0;
velY = 1;
direction = 2;
}
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyreleased(KeyEvent e) {
velY = 0;
velX = 0;
}
public static void main(String[] args) {
Tank t = new Tank();
JFrame jf = new JFrame();
jf.setTitle("Tutorial");
jf.setSize(576,576);
jf.setVisible(true);
jf.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
jf.add(t);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。