第一个JAVA实战项目!

只是一个新手入门级项目,希望新手同学能和我得到学习,大佬请手下留情

桌球小游戏项目

先放代码和效果图

import java.awt.*;
import javax.swing.*;

public class Ballgame extends JFrame {
    Image ball=Toolkit.getDefaultToolkit().getImage("images/ball.png");
    Image table=Toolkit.getDefaultToolkit().getImage("images/table.jpg");
    double x=200;
    double y=200;
    double degree=3.14/3;//这里都角度为弧度数,3.14=180度,故degree=60
    public void paint(Graphics g){
        g.drawImage(table,0,0,null);
        g.drawImage(ball,(int)x,(int)y,null);
        x+=10* Math.cos(degree);
        y+=10*Math.sin(degree);
        if(y>440||y<60)
        {
            degree=-degree;
        }
        if(x>800||x<30)
        {
            degree=3.14-degree;
        }


    }
    void launchFrame(){
    setSize(856,501);
    setLocation(100,100);
    setVisible(true);
    //实现动画每秒绘制窗口
        while(true) {
            repaint();
            try {
                Thread.sleep(40);
            }catch (InterruptedException e){
                e.printStackTrace();
            }
        }
}
    public static void main(String[] args) {


        System.out.println("我的小游戏开始了!");
        Ballgame  game = new Ballgame();
        game.launchFrame();

    }
}

这里的代码是跟着老师写的,新手上路不可能就直接写出来完整代码;我在老师代码的基础上做了一些优化,例如边缘碰撞弹回等;后面随着学习知识的深入,这个项目我会返回来做完整,加入球杆,小球速度控制,以及进洞处理等;
效果图:
在这里插入图片描述
在这里我认为有几点的学习最为重要:
1、关于动画效果的呈现,原理是一帧一帧重复播放,通过改变小球位置,来达到动画效果;
2、关于小球碰撞边缘弹回,需要在图片尺寸上进行预估,不能让小球飞出桌子或者穿过了桌子的边缘,不符合常理;
3、关于小球反弹角度的设计,这里不考虑小球自转和其他一切因素,仅仅从反射的角度考虑问题,即入射角等于出射角;
4、实际的桌球游戏要比这里的复杂很多很多,因此要做出来一个好游戏还是要付出很多很多心血,考虑很多很多问题的;
5、在java的学习中,虽然无论语法还是表达上,java和c语言都有着很大区别。但是我还是从中体会到了他们之间的联系,在运算符等一些细微的地方,编程语言大概都着相同的逻辑,我们思考问题的逻辑,程序的设计思路,都是从一个地方出发的;这也更加印证了语言只是工具,但是我们要用好这些各具特色的工具;
6、IDEA真的好用,感觉他能知道我想写的下一句代码!!
最后一点:关于图片的资源,作者也是在网上搬运过来的,JAVA桌球游戏已经很多人做过,我的图片也有水印,因此就不放了,想做的同学可以随便去网上查找新资源;

期待对这个项目的继续深化!

  • 27
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 27
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值