Java 碰壁小球游戏实例教程

本教程会举例用Java实现简单的小球碰壁反弹游戏,效果如图所示:


JFrame: 窗体部分

首先创建一个窗体界面,下面举一个简单的例子(Jframe是自己定义的类名,注意和JFrame的区别)

import javax.swing.JFrame; //没导入就没卵用
public class Jframe {
 
public static void main(String[] args) 
{
JFrame frame = new JFrame("小球碰壁"); //创建Jframe对象,参数是窗体标题
frame.setSize(300, 300); //设置窗口大小
frame.setVisible(true); //设置可见性,没设置的话就看不见
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //这个是退出时的操作,没加这一行可能关闭后会继续运行
}
 
}


通过继承JFrame也可以

import javax.swing.JFrame;
public class Game extends JFrame //继承父类Jframe
{
 
public static void main(String[] args) {
Game tennis=new Game(); //创建game对象
 
}
Game() //自己的构造函数,同时也会调用父类的构造函数来创建对象
{
this.setTitle("碰壁球游戏");
this.setSize(500,500);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}


如图:

 

 

 

JPanel: 绘图部分

有窗体接下来就是绘图部分,绘图就需要用一个画布JPanel(Jpanel是自己定义的类名,注意和JPanel的区别)

 

import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.*;
public class Jpanel extends JPanel{
public void paint(Graphics g)  //paint方法中的Graphics g是从Graphic继承的对象
{ 
g.setColor(Color.BLUE); //设置颜色
g.fillOval(0, 0, 30, 30); //参数分别为坐标x,y,球的宽度,高度
g.drawString("这是一个小球", 0, 50); //参数分别为字符串,坐标x,y
}
public static void main(String[] args) {
JFrame frame = new JFrame("Tennis");
frame.add(new Jpanel());
frame.setSize(300, 300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}


如图:

 

 

最后整合一下前面两部分所学的知识创建一个Game类。因为Java不支持多继承所以创建多一个继承JPanelDraw类。

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Ellipse2D;
public class Game extends JFrame //继承父类Jframe
{
 
public static void main(String[] args) {
Game tennis=new Game(); //创建game对象
 
}
Game() //自己的构造函数,同时也会调用父类的构造函数来创建对象
{
Draw ball=new Draw();
this.add(ball);
this.setTitle("碰壁球游戏");
this.setSize(600,600);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class Draw extends JPanel //这里创建一个继承JPanel的子类
{
public void paint(Graphics g) {
super.paint(g); //调用父类的paint
Graphics2D g2d = (Graphics2D) g; //进行对象转型,因为Graphic2D的方法比较好也比较丰富,所以这里用Graphics2D,Graphics是旧的类
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON); //这个是防止边缘有锯齿的
g2d.fillOval(0, 0, 60, 60); 
}
}


g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)的效果图.

 

 

接下来要让球移动,球的位置是根据当前所赋值的坐标决定的,所以每次绘制小球的时候我们需要通过更改x,y让小球达到移动的效果,这样的话我们就把刚才的代码改成g2d.fillOval(x, y, 30, 30);然后再通过repaint()方法重新绘制。

原理就是一直更新并重新绘制新的小球使其达到移动的效果。

因此这里打算写一个moveBall()的方法来不断改变x,y的值。

稍微修改一下之前的代码:

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Color;
  • 8
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值