Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否实现扩展类_Java_Swing - Fatal编程技术网

Java 是否实现扩展类

Java 是否实现扩展类,java,swing,Java,Swing,关于java继承的另一个问题:我想知道两件事: 1) 如何设置程序在使用继承类与否之间切换? 2) 我不知道为什么我的扩展类glidingObject.java对我的按键没有响应 这是我的Game.java(它运行游戏;我应该传递一些参数,允许用户选择正确使用哪个类-飞行对象或滑动对象?我还包括了飞行对象和滑动对象的两个类) 我应该传入一些参数,允许用户选择正确使用哪个类-飞行对象还是滑动对象 这就是接口变得如此强大的地方。“飞行”和“滑行”对象都将共享一些共同的属性/功能,这些属性/功能应由接

关于java继承的另一个问题:我想知道两件事: 1) 如何设置程序在使用继承类与否之间切换? 2) 我不知道为什么我的扩展类glidingObject.java对我的按键没有响应

这是我的Game.java(它运行游戏;我应该传递一些参数,允许用户选择正确使用哪个类-飞行对象或滑动对象?我还包括了飞行对象和滑动对象的两个类)

我应该传入一些参数,允许用户选择正确使用哪个类-飞行对象还是滑动对象

这就是
接口
变得如此强大的地方。“飞行”和“滑行”对象都将共享一些共同的属性/功能,这些属性/功能应由接口描述。您
游戏
应该只接受此
接口的实例
,它不应该关心实现的内容,只应该遵守约定的
接口

这是“代码到接口,而不是实现”的原则

这有多复杂取决于您,例如,您可以有描述“空中”实体和“地面”实体的抽象实现,从中可以有抽象“空中”类的“有动力”和“无动力”实现,所有这些都将绑定到“游戏实体”
接口

我不知道为什么我的扩展类glidingObject.java对我的按键没有响应


这是因为您使用的是
KeyListener
,这是众所周知的焦点相关问题。有关建议的解决方案,请参见“我不确定我的扩展类glidingObject.java为什么没有响应我的按键”-这是因为您使用的是
KeyListener
,这是众所周知的焦点相关问题。有关建议的解决方案,请参阅。非常感谢。有没有什么方法可以让我构建game.java来选择运行glidingobject还是jumpingobject?如果两者都实现了接口gameobject,那么我会将我的gameobject写入my game.java,但是我如何在这两种实现之间切换,例如,单击Jbutton。如果两个对象都实现了所需的接口,您只需创建所需的实例并将其传递给
游戏
,这取决于
游戏
如何正确管理。而且,键绑定只能用于JComponents,对吗?我的滑动对象是一个类,所以我不确定是否可以向它添加键绑定。那么?如果将键绑定添加到显示内容的组件中,则该组件应该提升相应的标志,主循环可以使用这些标志来更新状态
public class Game extends JPanel {

private static final long serialVersionUID = 1L;

public static int WIDTH = 800, HEIGHT = 750;

public static ArrayList<Rectangle> columns;

public static Random rand;

public static double score;

public static boolean gameOver, started; //two modes, started and gameover

public static String username;

public static String currTime;

public static Timer timer;

public static flyingObject obj;

private PropertyChangeSupport mPcs = new PropertyChangeSupport(this);

public Game(flyingObject object){

    obj = object;
    timer = new Timer(20, new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                tick();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }
    });

    columns = new ArrayList<Rectangle>();
    rand = new Random(); 
    Background bk = new Background();

    addColumn(true);
    addColumn(true);
    addColumn(true);
    addColumn(true);

    addMouseListener(new MouseAdapter() {       
        @Override
        public void mouseReleased(MouseEvent e) {
            started = true;
        }
    });

    PropertyChangeListener listener = new PropertyChangeListener() {
        @Override
        public void propertyChange(PropertyChangeEvent evt) {
            try {
                scoreBoard.record();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    };
    this.addPropertyChangeListener(listener);

    getDate(); //get the date of the game played
    mPcs.firePropertyChange("gameOver",false, true); //alert record() method when the game is over
    timer.start();      
}

//adding the column
public static void addColumn(boolean start) {
    int space = 300; 
    int width = 100; 
    int height = 50 + rand.nextInt(300);

    if (start) { 
        //add top and bottom
        columns.add(new Rectangle(WIDTH + width + columns.size() * 300, HEIGHT - height - 120, width, height + 100));
        columns.add(new Rectangle(WIDTH + width + (columns.size() - 1) * 300, 0, width, HEIGHT - height - space));
    }
    else
    {
        columns.add(new Rectangle(columns.get(columns.size() - 1).x + 600, HEIGHT - height - 120, width, height + 100));
        columns.add(new Rectangle(columns.get(columns.size() - 1).x, 0, width, HEIGHT - height - space));
    }
}

//paint the columns
public void paintColumn(Graphics g, Rectangle column) {
    g.setColor(Color.white);
    g.fillRect(column.x, column.y, column.width, column.height);
}

public static void reset() {
    obj = new glidingObject(WIDTH / 2 - 10, HEIGHT / 2 - 10);
    columns.clear();
    score = 0.0;

    addColumn(true);
    addColumn(true);
    addColumn(true);
    addColumn(true);

    gameOver = false;
}

public void tick() throws IOException {
    if (started) {      
        int speed = 10;
        glidingObject.move();
        for (int i = 0; i < columns.size(); i ++) {
            Rectangle column = columns.get(i);
            column.x -= speed;

            if (column.x + column.width < 0) {
                columns.remove(column);
                if  (column.y == 0) {
                    addColumn(false);
                }
            }
        }
        for (Rectangle column: columns) {
            if (column.x == glidingObject.X) {
                score += 0.5;
            }

            if (column.intersects(glidingObject.getBounds())) {
                gameOver = true;

                //when the object crashes, it does not go through the column
                if (glidingObject.X <= column.x) {
                    glidingObject.X = column.x - glidingObject.DIAMETER; 
                }
                else if (glidingObject.Y < column.height) {
                    glidingObject.Y = column.height;
                }      
                Main.gameOver();
            }
        }

        if (glidingObject.Y > HEIGHT || glidingObject.Y < 0) {
            gameOver = true;
            //timer.stop();
            Main.gameOver();
        }

        if (glidingObject.Y + glidingObject.YMotion >= HEIGHT) {
            gameOver = true;
            //timer.stop();
            Main.gameOver();
        }
    }
    //update the display
    repaint();
}

public void getDate() {
    DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    Date date = new Date();
    currTime = dateFormat.format(date);
    }

 @Override
    public void paintComponent(Graphics g) {

    super.paintComponent(g);


    Background.paint(g);
    glidingObject.paint(g);

    for (Rectangle column: columns) {
        paintColumn(g, column);
    }

    g.setColor(Color.white);
    g.setFont(new Font("Manaspace", 1, 60));

   if (!started) {
       g.drawString("Click to start!", 75, HEIGHT / 2 - 50);
   }

   if (gameOver) {
       g.drawString("Game Over!", 200, HEIGHT / 2 - 50);
   }

   if (!gameOver && started) {
       g.drawString(String.valueOf(score), WIDTH / 2 - 25, 100);
   }
}
public class flyingObject implements ActionListener, MouseListener, KeyListener {

static int DIAMETER = 25;
static int Y; // Y position of the unicorn
static int X; // X position of the unicorn
static int YMotion; // Y movement of the unicorn

//parameters are the initial positions
public flyingObject(int xpos, int ypos) {
    X = xpos;
    Y = ypos; // this changes
}

//getters
public int getX() {
    return X;
}

public int getY() {
    return Y;
}

//setters
public void setX(int newX) {
    X = newX;
}

public void setY(int newY) {
    Y = newY;
}

//the bounds of the object (rectangle) 
public static Rectangle getBounds() {
    return new Rectangle(X, Y, DIAMETER, DIAMETER);
}

//the visible component of the object - this can get overriden by subclasses
public static void paint(Graphics g){   
    g.setColor(Color.white);
    g.fillRect(X, Y, DIAMETER, DIAMETER);
}

//the movement component of the object
public static void jump() {     

    if (Game.gameOver) {
        Game.reset();
        Game.gameOver = false;
    }
    if (!Game.started) {
        Game.started = true;
    }
    else if (!Game.gameOver) {
    if (YMotion > 0) {
        YMotion = 0;
    }
    YMotion -= 14;
    }
}

public static void move() {
    if ((Y > 0) && (Y < Game.HEIGHT)) {
        YMotion += 1.5; // gravity
        Y += YMotion;
    }
}

@Override
public void keyTyped(KeyEvent e) {

}

@Override
public void keyPressed(KeyEvent e) {

}

@Override
public void keyReleased(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_SPACE)
    {
        jump();
    }
}

@Override
public void mouseClicked(MouseEvent e) {
    jump();
}

@Override
public void mousePressed(MouseEvent e) {

}

@Override
public void mouseReleased(MouseEvent e) {

}

@Override
public void mouseEntered(MouseEvent e) {

}

@Override
public void mouseExited(MouseEvent e) {

}

@Override
public void actionPerformed(ActionEvent e) {

}


}
public class glidingObject extends flyingObject{

//velocity of the object
private static int vx; 
private static int vy;
private static int lives;

public glidingObject(int xpos, int ypos) {
    super(xpos, ypos);
    vx = 0;
    vy = 0; 
    lives = 3;
}

//getter methods

public int getVx() {
    return vx;
}

public int getVy() {
    return vy;
}
//setter methods

public void setVx(int newVx) {
    vx = newVx;
}

public void setVy(int newVy) {
    vy = newVy;
}

//moves the object
public static void jump() {
    X += vx;
    Y += vy;
}

public static void paint(Graphics g) {
    g.setColor(Color.CYAN);
    g.fillOval(X, Y, DIAMETER, DIAMETER);
}

@Override 
public void keyTyped(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_RIGHT){
        vx = 10;
    }
    if (e.getKeyCode() == KeyEvent.VK_LEFT){
        vx = -10;
    }
    if (e.getKeyCode() == KeyEvent.VK_UP){
        vy = 10;
    }
    if (e.getKeyCode() == KeyEvent.VK_DOWN){
        vy = -10;
    }
}

@Override
public void keyPressed(KeyEvent e) {

}

@Override
public void keyReleased(KeyEvent e) {

}

@Override
public void mouseClicked(MouseEvent e) {

}

@Override
public void mousePressed(MouseEvent e) {

}

@Override
public void mouseReleased(MouseEvent e) {

}

@Override
public void mouseEntered(MouseEvent e) {

}

@Override
public void mouseExited(MouseEvent e) {

}

@Override
public void actionPerformed(ActionEvent e) {

}

}