2010-05-27 4 views
0

Проблема в том, что я пытаюсь заблокировать определенные плитки, чтобы игрок не мог ходить по ним. Тем не менее, это только чтение FIRST плитки, которая board[0][0] и все остальное не проверено ....Проблема Java for-loop

Что я делаю неправильно? :(

Вот мой код:

import java.applet.*; 
import java.applet.Applet; 

import java.awt.*; 
import java.awt.Canvas.*; 
import java.awt.Graphics; 
import java.awt.Image; 
import java.awt.event.*; 


public class gen extends Applet implements KeyListener { 
    Image[] tiles; 
    Image player; 
    int x; 
    int y; 
    int px; 
    int py; 
    boolean left; 
    boolean right; 
    boolean down; 
    boolean up; 
    int[][] board; 
    final int NUM_TILES = 5; 
    public final int BLOCKED = 1; 



    public void init() { 
    // Load board 
    board = loadBoard(); 





     tiles = new Image[NUM_TILES]; 
    for(int i = 0;i < NUM_TILES;i++) { 
     tiles[i] = getImage(getClass().getResource(String.format("tile%d.png", i))); 
    } 
    for (int y=0;y< NUM_TILES;y++) { 
     board[1][1] = BLOCKED; 
     board[1][2] = BLOCKED; 
     board[1][3] = BLOCKED; 
     } 
     player = getImage(getClass().getResource("player.png")); // our player 
     addKeyListener(this); 

     px = 0; 

     py = 0; 
    } 

    public void keyPressed(KeyEvent e) { 



     if (e.getKeyCode() == KeyEvent.VK_LEFT) { 
      left = true; 

      px = px - 32; 
     } 

     if (e.getKeyCode() == KeyEvent.VK_RIGHT) { 
      right = true; 

      px = px + 32; 
     } 

     if (e.getKeyCode() == KeyEvent.VK_DOWN) { 
      down = true; 

      py = py + 32; 
     } 

     if (e.getKeyCode() == KeyEvent.VK_UP) { 
      up = true; 

      py = py - 32; 
     } 

     repaint(); 

    } 

    public void keyReleased(KeyEvent e) { 
    } // ignore 

    public void keyTyped(KeyEvent e) { 
    } // ignore 

    public void paint(Graphics g) { 
     x = 0; 

     y = 0; 

     // here's a sample map! 

     // but we're loading from a text file! 

     // so... why is this needed? 
     for (int row = 0; row < board.length; row++) { 
      for (int col = 0; col < board[row].length; col++) { 
       int index = board[row][col]; 
       g.drawImage(tiles[index], 32 * col, 32 * row, this); 
       if (board[row][col] == BLOCKED) { 
       System.out.println("\n"+board[row][col] + "is BLOCKED!\n"); 
       }else{System.out.println("\n"+board[row][col] + "is NOT Blocked!\n");} 
      } 
     } 

     g.drawImage(player, px, py, this); 
     try { 
     System.out.println("ON BLOCKED TILE?: " + blocked(px,py) + "\n"); 
    }catch(ArrayIndexOutOfBoundsException e) {} 
    } // end paint method 

    public void update(Graphics g) { 
     paint(g); 
    } 

    private int[][] loadBoard() { 
     int[][] board = { 
       { 0, 1, 2, 3, 4, 4, 3, 4 }, 
       { 0, 1, 2, 3, 4, 4, 3, 4 }, 
       { 2, 2, 4, 2, 2, 1, 1, 0 }, 
       { 0, 1, 2, 3, 4, 4, 3, 4 }, 
       { 0, 0, 0, 2, 3, 4, 4, 2 }, 
       { 2, 2, 4, 2, 2, 1, 1, 0 }, 
       { 0, 1, 2, 3, 4, 4, 3, 4 }, 
       { 0, 0, 0, 2, 3, 4, 4, 2 } 
      }; 
    return board; 
    } 

    public boolean blocked(int tx, int ty) { 
      return board[tx][ty] == BLOCKED; 
     } 
} // end whole thing 
+0

Не могли бы вы добавить код на ваш вопрос? –

+1

Вы говорите об этом цикле? # для (int y = 0; y RoflcoptrException

+0

У меня был цикл, потому что это была доска [1] [y], поэтому это была бы целая строка или coloumn, которая была бы заблокирована, но затем я столкнулся с этим проблема. – nn2

ответ

1

Одна из проблем в вашем коде на этой линии вы вызываете блокированной рх, ру, которые кратны 32:

blocked(px, py) 

Но вы можете использовать эти числа как индексы в массиве, который вызовет ArrayIndexOutOfBoundsException:

public boolean blocked(int tx, int ty) 
{ 
    return board[tx][ty] == BLOCKED; 
} 

Какой у ou've пытался «исправить», игнорируя его:

try 
{ 
    System.out.println("ON BLOCKED TILE?: " + blocked(px,py) + "\n"); 
} 
catch(ArrayIndexOutOfBoundsException e) {} 

Так что я подозреваю, что это работает только для (0,0), потому что (32,32) выходит за пределы границ. В вашем коде есть и другие ошибки, но это должно быть хорошим началом для вас.

+0

О, эй. Я вижу проблему сейчас! Благодаря! И ... Я не вижу никаких других ошибок в моем коде. : S – nn2