qq_32171635 2016-06-14 04:37
浏览 1013

贪吃蛇监听器自定义问题

packagesnake.box;

importjava.awt.Color;
importjava.awt.Graphics;
importjava.awt.Point;
importjava.util.HashSet;
importjava.util.LinkedList;
importjava.util.Set;

importsnake.listener.SnakeListener;

publicclassSnake {
身体
LinkedList body =newLinkedList<>();

//方向
privatestaticintdirection;
//方向常量
publicstaticfinalintUP=1;
publicstaticfinalintDOWN=-1;
publicstaticfinalintLEFT=2;
publicstaticfinalintRIGHT=-2;

//监听器

Set listeners =newHashSet<>();

/*
 * 构造器
 */
publicSnake(){
    init();
}
/*
 * 初始化
 */
publicvoidinit(){
    intx=(Rec.Width*Rec.Cell_Size)/2;
    inty=(Rec.height*Rec.Cell_Size)/2;
    for(inti=0;i<3;i++){
        this.body.addFirst(newPoint(x--,y));

    }
    this.direction=Snake.LEFT;
}


publicvoidmove(){
    body.removeLast();
    intx=body.getFirst().x;
    inty=body.getFirst().y;
    switch(this.direction){
    caseSnake.UP:
        y--;
        break;
    caseSnake.DOWN:
        y++;
        break;
    caseSnake.LEFT:
        x--;
        break;
    caseSnake.RIGHT:
        x++;
        break;
    }
    body.addFirst(newPoint(x,y));
}

publicvoidchangeDirection(intdirection){
        this.direction=direction;
}

publicvoideatFood(){

}
publicvoideatBody(){

}
publicvoiddraw(Graphics g){
    Color c=g.getColor();

    for(Point p :body){
        g.setColor(Color.black);
        g.fill3DRect(p.x, p.y, Rec.Cell_Size, Rec.Cell_Size,true);
    }
    g.setColor(c);
}

publicvoidaddListener(SnakeListener l){
    if(l!=null){
        listeners.add(l);
    }
}

publicvoidbegin(){
    newThread(newSnakeDriver()).start();
}

classSnakeDriverimplementsRunnable{

        @Override
        publicvoidrun() {
            // TODO Auto-generated method stub
            while(true){
                try{
                    move();

for(SnakeListener listener :listeners){

listener.SnakeMoved(Snake.this);

                    }
                    Thread.sleep(100);
                }catch(InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

    }

}

packagesnake.game;

importjava.awt.BorderLayout;

importjavax.swing.JFrame;

importsnake.box.Food;
importsnake.box.Rec;
importsnake.box.Snake;
importsnake.box.Stone;
importsnake.control.Control;
importsnake.view.GamePanel;

publicclassgameTest {
publicstaticvoidmain(String[] args) {
Food food =newFood();
Snake snake =newSnake();
Stone stone =newStone();
GamePanel gamepanel=newGamePanel();
Control control =newControl(food, snake, stone, gamepanel);

    JFrame f =newJFrame("贪吃蛇");
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setLayout(newBorderLayout());
    f.add(gamepanel,BorderLayout.CENTER);
    f.addKeyListener(control);
    f.setVisible(true);
    f.setSize(Rec.Width*Rec.Cell_Size,
            Rec.height*Rec.Cell_Size);
    snake.addListener(control);
    control.newGame();

}

}


packagesnake.game;

importjava.awt.BorderLayout;

importjavax.swing.JFrame;

importsnake.box.Food;
importsnake.box.Rec;
importsnake.box.Snake;
importsnake.box.Stone;
importsnake.control.Control;
importsnake.view.GamePanel;

publicclassgameTest {
publicstaticvoidmain(String[] args) {
Food food =newFood();
Snake snake =newSnake();
Stone stone =newStone();
GamePanel gamepanel=newGamePanel();
Control control =newControl(food, snake, stone, gamepanel);

    JFrame f =newJFrame("贪吃蛇");
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setLayout(newBorderLayout());
    f.add(gamepanel,BorderLayout.CENTER);
    f.addKeyListener(control);
    f.setVisible(true);
    f.setSize(Rec.Width*Rec.Cell_Size,
            Rec.height*Rec.Cell_Size);

snake.addListener(control);

    control.newGame();

}

}
为什么用使用Set来装listener,只声明一个Listener不行吗?在主函数中,最终也只加了一个监听。使用set不有点多余吗?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 安卓adb backup备份应用数据失败
    • ¥15 eclipse运行项目时遇到的问题
    • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
    • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
    • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
    • ¥50 成都蓉城足球俱乐部小程序抢票
    • ¥15 yolov7训练自己的数据集
    • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
    • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
    • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)