Schreiben Sie ein Flipperspiel in Java

Inhaltsverzeichnis

I. Einleitung

2. Flipperspiel

(1) Analyse des Spiels

(2) Spielcode


I. Einleitung

Wenn Sie dieses Spiel erstellen möchten, ist es am besten, AWT- oder Swing-Programmierung gelernt zu haben, die Kenntnisse der grafischen Benutzeroberfläche zu kennen und zu wissen, wie man zeichnet. Dieses Spiel kann Ihnen helfen, eine solide Grundlage zu schaffen.

2. Flipperspiel

(1) Analyse des Spiels

Gemäß den Regeln des Flipper-Minispiels bewegt sich der Ball in die entgegengesetzte Richtung, wenn er auf den Schläger oder die Schnittstelle trifft, und das Spiel endet, wenn er den Schläger nicht berühren kann

 

(2) Spielcode

class Solution {
    //制造组件
    //桌子的大小
    private  int table_width=300;
    private  int table_height=400;
    //球拍的信息
    private int bat_width=80;
    private int bat_height=20;
    private int bat_x=120;
    private int bat_y=350;
    //球的信息
    private int ball_size=16;
    private int ball_x=100;
    private int ball_y=20;
    //定义球的移动速度
    private int speed_x=15;
    private int speed_y=15;
    //定义定时器,0.1秒刷新一次
    private Timer timer;
    //判断游戏是否结束
    private boolean flag=false;
    Frame s=new Frame("小游戏");
    //定义画布
    private class draw extends Canvas{
        @Override
        public void paint(Graphics g) {
            if(flag==true){
                //游戏结束
               g.setColor(Color.BLUE);
               g.setFont(new Font("t",Font.BOLD,30));//设置字体
               g.drawString("游戏结束!",50,200);
            }
            else{

                //绘制小球
                g.setColor(Color.red);
                g.fillOval(ball_x,ball_y,ball_size,ball_size);
                //绘制球拍
                g.setColor(Color.pink);
                g.fillRect(bat_x,bat_y,bat_width,bat_height);
            }
        }
    }
    draw drawarea=new draw();
    public void init(){
        //开始组装

        //事件监听,键盘控
        KeyListener listener=new KeyAdapter() {
            @Override
            public void keyReleased(KeyEvent e) {
                int n=e.getKeyCode();
                if(n==KeyEvent.VK_RIGHT){
                    //右
                    if((bat_x)<(table_width-bat_width)){
                        bat_x+=15;
                    }

                }
                if(n==KeyEvent.VK_LEFT){
                    //左
                    if(bat_x>0){
                        bat_x-=15;
                    }
                }
            }
        };
        s.addKeyListener(listener);
        drawarea.addKeyListener(listener);
        //小球坐标的控制
        ActionListener act=new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if((ball_y>(bat_y-ball_size))&&((ball_x>bat_x+bat_width)||(ball_x<bat_x))){
                    //游戏结束
                    timer.stop();
                    flag=true;
                    drawarea.repaint();
                }
                if(ball_x<=0||(ball_x>(table_width-ball_size))){
                    //撞到界面,换方向
                   speed_x=-speed_x;
                }
                if((ball_y<=0)||(ball_x>=bat_x&&ball_x<=bat_x+bat_width&&ball_y==bat_y)){
                    speed_y=-speed_y;
                }
                //每次球的位置都会在变化
                ball_y+=speed_y;
                ball_x+=speed_x;
                //千万不要忘记刷新页面
                drawarea.repaint();
            }
        };
        timer=new Timer(100,act);//每隔0.1秒刷新一次,act是事件监听
        timer.start();//启动
        drawarea.setPreferredSize(new Dimension(table_width,table_height));
        s.add(drawarea);
        s.pack();
        s.setVisible(true);
    }
}




//游戏入口
public class Test {
  public static  void main(String[] rag){
      Solution ss=new Solution();
      ss.init();
  }
}

Supongo que te gusta

Origin blog.csdn.net/gaoqiandr/article/details/128632755
Recomendado
Clasificación