只是一个新手入门级项目,希望新手同学能和我得到学习,大佬请手下留情
桌球小游戏项目
先放代码和效果图
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桌球游戏已经很多人做过,我的图片也有水印,因此就不放了,想做的同学可以随便去网上查找新资源;