美文网首页
30分钟完成桌球小游戏项目

30分钟完成桌球小游戏项目

作者: 巧乐兹小白 | 来源:发表于2019-01-20 17:26 被阅读81次

    一、桌球游戏小项目

    • 练习目标:
      1.找到敲代码的感觉
      2.收获敲代码的兴趣
      3.作出效果,找到自信
      4.从一开始就学会调试错误
      5.掌握Java代码基本结构

    二、项目需求

    • 桌球在球桌中按照一定线路和角度移动,遇到边框会自动弹回。


    • 项目中用到的两个小图片,如下:


      ball.png

      小球的图片如上,台球桌的图片如下:


      desk.jpg

    三、开发步骤

    • 版本1:
      目标:创建项目、创建窗口。
      创建项目并拷贝图片:
      在项目名hello上单击右键,在菜单中依次选择new---Folder,创建一个名称是images的文件夹,并复制两张图片到该目录下。并在src下创建类BallGame.java。eclipse下项目的最终结构如图1-40所示。
      01.png

    实现窗口加载

    import java.awt.*;
    import javax.swing.*;
    
    public class BallGame extends JFrame {
            
        //窗口加载
        void lauchFrame() {
            setSize(300,300);        //窗口的宽和高     
            setLocation(100,100);   //定位窗口的宽和高
            setVisible(true);
        }
                    
        //main方法是程序执行的入口
        public static void main(String[] args) {
            System.out.println("慧慧");
            BallGame game = new BallGame();
            game.lauchFrame();
            
        }
        
    }
    

    运行效果


    02.png
    • 版本2:
      目标:加载两个图片
      代码:
    import java.awt.*;
    import javax.swing.*;
    
    public class BallGame extends JFrame {
        Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.png");
        Image desk = Toolkit.getDefaultToolkit().getImage("images/desk.jpg");
        
        double x = 100;    //小球的横坐标
        double y = 100;    //小球的纵坐标
        //画窗口的方法
        public void paint(Graphics g){
            g.drawImage(desk,0,0,null);
            g.drawImage(ball,(int)x,(int)y,null);
            
        }
            
        //窗口加载
        void lauchFrame() {
            setSize(856,500);        //窗口的宽和高     
            setLocation(100,100);   //定位窗口的宽和高
            setVisible(true);
        }
                    
        //main方法是程序执行的入口
        public static void main(String[] args) {
            System.out.println("慧慧");
            BallGame game = new BallGame();
            game.lauchFrame();
            
        }
        
    }
    

    运行效果


    03.png
    • 版本3:
      目标:实现动画,小球沿着水平方向移动并做边界检测
      代码:
    import java.awt.*;
    import javax.swing.*;
    
    public class BallGame extends JFrame {
        Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.png");
        Image desk = Toolkit.getDefaultToolkit().getImage("images/desk.jpg");
        
        double x = 100;    //小球的横坐标
        double y = 100;    //小球的纵坐标
        boolean right = true; //方向
        //画窗口的方法
        public void paint(Graphics g){
            g.drawImage(desk,0,0,null);
            g.drawImage(ball,(int)x,(int)y,null);
            
              
            if(right){
                x = x +10;            
            }else{
                x = x - 10;
            }
             
            if(x>856-40-30){    //856是窗口宽度,40是桌子边框的宽度,30是小球的直径
                right = false;
            }
             
            if(x<40){        //40是桌子边框的宽度
                right = true;
            }
            
        }
            
        //窗口加载
        void lauchFrame() {
            setSize(856,500);        //窗口的宽和高     
            setLocation(100,100);   //定位窗口的宽和高
            setVisible(true);
        
         //重画窗口,每秒画25次
        while(true){
            repaint(); 
            try{
                Thread.sleep(40);   //40ms,   1秒=1000毫秒.  大约一秒画25次窗口
            }catch(Exception e){
                e.printStackTrace();
            }
             
        }
         
    }
                    
        //main方法是程序执行的入口
        public static void main(String[] args) {
            System.out.println("慧慧");
            BallGame game = new BallGame();
            game.lauchFrame();
            
        }
        
    }
    
    • 版本4:
      目标:实现小球沿着任意角度飞行(会用到初中学习的三角函数,如果忘记了就想想你们的体育老师吧)
      代码:
    import java.awt.*;
    import javax.swing.*;
    
    public class BallGame extends JFrame {
        Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.png");
        Image desk = Toolkit.getDefaultToolkit().getImage("images/desk.jpg");
        
        double x = 100;    //小球的横坐标
        double y = 100;    //小球的纵坐标
        
        double degree = 3.14/3;   //弧度, 60度。
        //画窗口的方法
        public void paint(Graphics g){
            g.drawImage(desk,0,0,null);
            g.drawImage(ball,(int)x,(int)y,null);
            
             x  = x+ 10*Math.cos(degree);
             y  = y +10*Math.sin(degree); 
                 
                //碰到上下边界
            if(y>500-40-30||y<40+40){//500是窗口高度;40是桌子边框,30是球直径;最后一个40是标题栏的高度
                   degree = -degree;
              }
                 
                //碰到左右边界
             if(x<40||x>856-40-30){
                   degree = 3.14 - degree;
              }
                 
            }
             
            
        //窗口加载
        void lauchFrame() {
            setSize(856,500);        //窗口的宽和高     
            setLocation(100,100);   //定位窗口的宽和高
            setVisible(true);
        
         //重画窗口,每秒画25次
        while(true){
            repaint(); 
            try{
                Thread.sleep(40);   //40ms,   1秒=1000毫秒.  大约一秒画25次窗口
            }catch(Exception e){
                e.printStackTrace();
            }
             
        }
         
    }
                    
        //main方法是程序执行的入口
        public static void main(String[] args) {
            System.out.println("慧慧");
            BallGame game = new BallGame();
            game.lauchFrame();
            
        }
        
    }
    

    相关文章

      网友评论

          本文标题:30分钟完成桌球小游戏项目

          本文链接:https://www.haomeiwen.com/subject/rkcodqtx.html