2013-10-03 3 views
-3

Я пытаюсь скомпилировать эту программу, которая доступна здесь,программы Java ... Неожиданные ошибки

http://zetcode.com/tutorials/javagamestutorial/breakout/

Но я получаю ошибки,

Игра состоит из семи файлы.

Commons.java

package breakout; 

public interface Commons { 
    public static final int WIDTH = 300; 
    public static final int HEIGTH = 400; 
    public static final int BOTTOM = 390; 
    public static final int PADDLE_RIGHT = 250; 
    public static final int BALL_RIGHT = 280; 

}

Sprite.java

package breakout; 

import java.awt.Image; 
import java.awt.Rectangle; 

public class Sprite { 

    protected int x; 
    protected int y; 
    protected int width; 
    protected int heigth; 
    protected Image image; 


    public void setX(int x) { 
     this.x = x; 
    } 

    public int getX() { 
     return x; 
    } 

    public void setY(int y) { 
     this.y = y; 
    } 

    public int getY() { 
     return y; 
    } 

    public int getWidth() { 
     return width; 
    } 

    public int getHeight() { 
     return heigth; 
    } 

    Image getImage() 
    { 
     return image; 
    } 

    Rectangle getRect() 
    { 
     return new Rectangle(x, y, 
      image.getWidth(null), image.getHeight(null)); 
    } 
} 

Brick.java

package breakout; 

import javax.swing.ImageIcon; 


public class Brick extends Sprite { 

    String brickie = "../images/brickie.png"; 

    boolean destroyed; 


    public Brick(int x, int y) { 
     this.x = x; 
     this.y = y; 

     ImageIcon ii = new ImageIcon(this.getClass().getResource(brickie)); 
     image = ii.getImage(); 

     width = image.getWidth(null); 
     heigth = image.getHeight(null); 

     destroyed = false; 
    } 

    public boolean isDestroyed() 
    { 
     return destroyed; 
    } 

    public void setDestroyed(boolean destroyed) 
    { 
     this.destroyed = destroyed; 
    } 

} 

Ball.java

package breakout; 

import javax.swing.ImageIcon; 


public class Ball extends Sprite implements Commons { 

    private int xdir; 
    private int ydir; 

    protected String ball = "../images/ball.png"; 

    public Ball() { 

    xdir = 1; 
    ydir = -1; 

    ImageIcon ii = new ImageIcon(this.getClass().getResource(ball)); 
    image = ii.getImage(); 

    width = image.getWidth(null); 
    heigth = image.getHeight(null); 

    resetState(); 
    } 


    public void move() 
    { 
     x += xdir; 
     y += ydir; 

     if (x == 0) { 
     setXDir(1); 
     } 

     if (x == BALL_RIGHT) { 
     setXDir(-1); 
     } 

     if (y == 0) { 
     setYDir(1); 
     } 
    } 

    public void resetState() 
    { 
     x = 230; 
     y = 355; 
    } 

    public void setXDir(int x) 
    { 
     xdir = x; 
    } 

    public void setYDir(int y) 
    { 
     ydir = y; 
    } 

    public int getYDir() 
    { 
     return ydir; 
    } 
} 

Paddle.java

package breakout; 

import java.awt.event.KeyEvent; 

import javax.swing.ImageIcon; 


public class Paddle extends Sprite implements Commons { 

    String paddle = "../images/paddle.png"; 

    int dx; 

    public Paddle() { 

     ImageIcon ii = new ImageIcon(this.getClass().getResource(paddle)); 
     image = ii.getImage(); 

     width = image.getWidth(null); 
     heigth = image.getHeight(null); 

     resetState(); 

    } 

    public void move() { 
     x += dx; 
     if (x <= 2) 
      x = 2; 
     if (x >= Commons.PADDLE_RIGHT) 
      x = Commons.PADDLE_RIGHT; 
    } 

    public void keyPressed(KeyEvent e) { 

     int key = e.getKeyCode(); 

     if (key == KeyEvent.VK_LEFT) { 
      dx = -2; 

     } 

     if (key == KeyEvent.VK_RIGHT) { 
      dx = 2; 
     } 
    } 

    public void keyReleased(KeyEvent e) { 
     int key = e.getKeyCode(); 

     if (key == KeyEvent.VK_LEFT) { 
      dx = 0; 
     } 

     if (key == KeyEvent.VK_RIGHT) { 
      dx = 0; 
     } 
    } 

    public void resetState() { 
     x = 200; 
     y = 360; 
    } 
} 

Board.java

package breakout; 

import java.awt.Color; 
import java.awt.Font; 
import java.awt.FontMetrics; 
import java.awt.Graphics; 
import java.awt.Image; 
import java.awt.Point; 
import java.awt.Toolkit; 
import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 

import java.util.Timer; 
import java.util.TimerTask; 

import javax.swing.JPanel; 


public class Board extends JPanel implements Commons { 

    Image ii; 
    Timer timer; 
    String message = "Game Over"; 
    Ball ball; 
    Paddle paddle; 
    Brick bricks[]; 

    boolean ingame = true; 
    int timerId; 


    public Board() { 

     addKeyListener(new TAdapter()); 
     setFocusable(true); 

     bricks = new Brick[30]; 
     setDoubleBuffered(true); 
     timer = new Timer(); 
     timer.scheduleAtFixedRate(new ScheduleTask(), 1000, 10); 
    } 

     public void addNotify() { 
      super.addNotify(); 
      gameInit(); 
     } 

    public void gameInit() { 

     ball = new Ball(); 
     paddle = new Paddle(); 


     int k = 0; 
     for (int i = 0; i < 5; i++) { 
      for (int j = 0; j < 6; j++) { 
       bricks[k] = new Brick(j * 40 + 30, i * 10 + 50); 
       k++; 
      } 
     } 
    } 


    public void paint(Graphics g) { 
     super.paint(g); 

     if (ingame) { 
      g.drawImage(ball.getImage(), ball.getX(), ball.getY(), 
         ball.getWidth(), ball.getHeight(), this); 
      g.drawImage(paddle.getImage(), paddle.getX(), paddle.getY(), 
         paddle.getWidth(), paddle.getHeight(), this); 

      for (int i = 0; i < 30; i++) { 
       if (!bricks[i].isDestroyed()) 
        g.drawImage(bricks[i].getImage(), bricks[i].getX(), 
           bricks[i].getY(), bricks[i].getWidth(), 
           bricks[i].getHeight(), this); 
      } 
     } else { 

      Font font = new Font("Verdana", Font.BOLD, 18); 
      FontMetrics metr = this.getFontMetrics(font); 

      g.setColor(Color.BLACK); 
      g.setFont(font); 
      g.drawString(message, 
         (Commons.WIDTH - metr.stringWidth(message))/2, 
         Commons.WIDTH/2); 
     } 


     Toolkit.getDefaultToolkit().sync(); 
     g.dispose(); 
    } 

    private class TAdapter extends KeyAdapter { 

     public void keyReleased(KeyEvent e) { 
      paddle.keyReleased(e); 
     } 

     public void keyPressed(KeyEvent e) { 
      paddle.keyPressed(e); 
     } 
    } 


    class ScheduleTask extends TimerTask { 

     public void run() { 

      ball.move(); 
      paddle.move(); 
      checkCollision(); 
      repaint(); 

     } 
    } 

    public void stopGame() { 
     ingame = false; 
     timer.cancel(); 
    } 


    public void checkCollision() { 

     if (ball.getRect().getMaxY() > Commons.BOTTOM) { 
      stopGame(); 
     } 

     for (int i = 0, j = 0; i < 30; i++) { 
      if (bricks[i].isDestroyed()) { 
       j++; 
      } 
      if (j == 30) { 
       message = "Victory"; 
       stopGame(); 
      } 
     } 

     if ((ball.getRect()).intersects(paddle.getRect())) { 

      int paddleLPos = (int)paddle.getRect().getMinX(); 
      int ballLPos = (int)ball.getRect().getMinX(); 

      int first = paddleLPos + 8; 
      int second = paddleLPos + 16; 
      int third = paddleLPos + 24; 
      int fourth = paddleLPos + 32; 

      if (ballLPos < first) { 
       ball.setXDir(-1); 
       ball.setYDir(-1); 
      } 

      if (ballLPos >= first && ballLPos < second) { 
       ball.setXDir(-1); 
       ball.setYDir(-1 * ball.getYDir()); 
      } 

      if (ballLPos >= second && ballLPos < third) { 
       ball.setXDir(0); 
       ball.setYDir(-1); 
      } 

      if (ballLPos >= third && ballLPos < fourth) { 
       ball.setXDir(1); 
       ball.setYDir(-1 * ball.getYDir()); 
      } 

      if (ballLPos > fourth) { 
       ball.setXDir(1); 
       ball.setYDir(-1); 
      } 


     } 


     for (int i = 0; i < 30; i++) { 
      if ((ball.getRect()).intersects(bricks[i].getRect())) { 

       int ballLeft = (int)ball.getRect().getMinX(); 
       int ballHeight = (int)ball.getRect().getHeight(); 
       int ballWidth = (int)ball.getRect().getWidth(); 
       int ballTop = (int)ball.getRect().getMinY(); 

       Point pointRight = 
        new Point(ballLeft + ballWidth + 1, ballTop); 
       Point pointLeft = new Point(ballLeft - 1, ballTop); 
       Point pointTop = new Point(ballLeft, ballTop - 1); 
       Point pointBottom = 
        new Point(ballLeft, ballTop + ballHeight + 1); 

       if (!bricks[i].isDestroyed()) { 
        if (bricks[i].getRect().contains(pointRight)) { 
         ball.setXDir(-1); 
        } 

        else if (bricks[i].getRect().contains(pointLeft)) { 
         ball.setXDir(1); 
        } 

        if (bricks[i].getRect().contains(pointTop)) { 
         ball.setYDir(1); 
        } 

        else if (bricks[i].getRect().contains(pointBottom)) { 
         ball.setYDir(-1); 
        } 

        bricks[i].setDestroyed(true); 
       } 
      } 
     } 
    } 
} 

и финал,

Breakout.java

package breakout; 

import javax.swing.JFrame; 

public class Breakout extends JFrame { 

    public Breakout() 
    { 
     add(new Board()); 
     setTitle("Breakout"); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setSize(Commons.WIDTH, Commons.HEIGTH); 
     setLocationRelativeTo(null); 
     setIgnoreRepaint(true); 
     setResizable(false); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     new Breakout(); 
    } 
} 

Но я получаю эти ошибки,

C:\jdk1.3.0_02\bin>javac Breakout.java 
Breakout.java:9: cannot resolve symbol 
symbol : class Board 
location: class breakout.Breakout 
     add(new Board()); 
       ^
Breakout.java:12: cannot resolve symbol 
symbol : variable Commons 
location: class breakout.Breakout 
     setSize(Commons.WIDTH, Commons.HEIGTH); 
       ^
Breakout.java:12: cannot resolve symbol 
symbol : variable Commons 
location: class breakout.Breakout 
     setSize(Commons.WIDTH, Commons.HEIGTH); 
          ^
Breakout.java:13: cannot resolve symbol 
symbol : method setLocationRelativeTo (<null>) 
location: class breakout.Breakout 
     setLocationRelativeTo(null); 
     ^
Breakout.java:14: cannot resolve symbol 
symbol : method setIgnoreRepaint (boolean) 
location: class breakout.Breakout 
     setIgnoreRepaint(true); 
     ^
5 errors 

C:\jdk1.3.0_02\bin> 

Я не понимаю, что вызывает проблему, так как я не внес никаких изменений в исходный код.

+0

как вы скомпилируете? используя javac? или использовать идеал как затмение? Ваша проблема определенно потому, что вы не помещали .java-файлы внутри вашего пути к классам. Более простой способ - импортировать проект в ide в Eclipse/netbeans/some other ide. – Rudy

+0

Для вашего собственного здравомыслия, я серьезно предлагаю вам получить IDE – MadProgrammer

+0

@ ruby ​​Посмотрите на выход 'C: \ jdk1.3.0_02 \ bin> javac Breakout.java' - легко пропустить во всем шуме – MadProgrammer

ответ

-1

Это связано с тем, что ваши файлы java не находятся в каталоге «breakout».

Вы должны поместить их в таком каталоге, а затем компилировать их из вне указанного каталога:

C:\jdk1.3.0_02\bin>javac breakout\Breakout.java 
1

Это потому, что вы запускаете Breakout.java но компилятор не знает, что он также должен подумайте о компиляции Broad.java и других файлов.

У вас есть 2 варианта решения этого:

  1. Скачать IDE, чтобы сделать его проще добавить путь к классам. (рекомендуется) Вы можете установить Eclipse/Netbeans/другую IDE и импортировать все java-файлы в проект и запустить Breakout.java.

  2. Запустите javac с параметром -sourcepath. Это не просто. но лучше взгляните на javac command documentation.

    Пример:

    Javac -d C: \ projectsCC \ ETL \ Xtract \ ADM \ общие \ классы -sourcepath C: \ projectsCC \ ETL \ Xtract \ ADM \ Common \ SRC C: \ IBM \ esmrt \ адм \ Common \ Conductor.java

-sourcepath SourcePath Укажите путь исходного кода для поиска определений классов или интерфейсов. Как и в случае с классом пользовательского класса, исходные записи разделяются точками с запятой (;) и могут быть каталогами, JAR-архивами или ZIP-архивами. Если используются пакеты, имя локального пути в каталоге или архиве должно отражать имя пакета. Примечание. Классы, найденные через путь класса, могут быть подвергнуты автоматической перекомпиляции , если их источники также найдены. См. Поиск для Типы.

+0

Что должен указать OP с аргументом -cp? –

+0

Я имею в виду, так как файлы находятся в текущем каталоге, а с тех пор, как -cp не указан, текущий каталог находится в пути к классам, я не вижу, как ваш ответ адресует проблему. –

+0

@EtienneMiret, он должен быть -sourcepath (а не classpath). – Rudy

Смежные вопросы