下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

贪吃蛇与打砖块的游戏代码分析

作者:课课家教育     来源: http://www.kokojia.com点击数:1088发布时间: 2018-11-29 10:12:10

标签: JAVAJAVA游戏打砖块游戏

大神带你学编程,欢迎选课

  贪吃蛇与打砖块的游戏代码分析

  游戏代码分析:下面我们分析上面开发的游戏代码。

  1.类的结构图。

  在java开发中,我们非常重视面向对象开发,表现在我们把功能模块封闭到类中,通过调用类来实现不同的功能。在这个游戏中,我们主要使用了五个类:

在java开发中,我们非常重视面向对象开发,表现在我们把功能模块封闭到类中,通过调用类来实现不同的功能。在这个游戏中,我们主要使用了五个类:

  它们分别是:

  (1)程序主类Peng作为游戏的顶层容器和程序的入口

程序主类Peng作为游戏的顶层容器和程序的入口

  (2)画图面版类MyPanel作为游戏画面的显示组件,同时用来运行循环游戏,并对用户输入进行处理

  (3)挡板类Pad用来设计档板的属性,并对其运动逻辑进行更新

  (4)砖块类Block用来绘制砖块

  (5)小球类Ball用来绘制小球,并对小球的运动逻辑进行更新

  各类之间的关系如下图:

  下面我们逐一分析每一个类:

  (1)主类Peng.主类Peng和我们前面做过的每一道题目都相同,它的作用是创建一个窗体(app),和实例化MyPanel画板,把MyPanel装入窗体显示出来。

  (2)MyPanel类,MyPanel类主要用来设计画板组件。MyPanel才是整个游戏的主框架,在这里,我们先定义了一些变量:

  然后在构造函数MyPanel()里,我们先设定窗体宽和高,然后创建了Pad,Block,Ball类的实例,下面蓝色框部分,用这种方式调用了Pad,Block,Ball类:

  接下来,我们看MyPanel运行的过程,在Run()方法中我们看到:

  在MyPanel中运行过程是GameUpdate()->GameRender()->GamePaint()

  所以我们阅读的时候也按这个次序进行:

  GameUpdate()是判断小球的运动方向

  GameRender()是擦掉上一个页面,然后画出一个新页面

  GamePaint()将图片装入内存显示

  重要:要强调的是,在这里,用户按了向左或向右键的时候,怎么控制砖块的左右运动。

  注意看MyPanel中监视用户输入的代码:

注意看MyPanel中监视用户输入的代码:

  从上面的代码我们看到,当用户按了向左或向右键时,给变量padMoveRight和padMoveleft赋值true或false.这个值会传递给Pad类,我们打开Pad类,这时我们会看到这两个变量,Pad类获取这两个变量的值,来决定档板的走向,如下图:

从上面的代码我们看到,当用户按了向左或向右键时,给变量padMoveRight和padMoveleft赋值true或false.这个值会传递给Pad类,我们打开Pad类,这时我们会看到这两个变量,Pad类获取这两个变量的值,来决定档板的走向,如下图:

从上面的代码我们看到,当用户按了向左或向右键时,给变量padMoveRight和padMoveleft赋值true或false.这个值会传递给Pad类,我们打开Pad类,这时我们会看到这两个变量,Pad类获取这两个变量的值,来决定档板的走向,如下图:

  下面我们来看Pad类:

  Pad类,下面我们分析Pad类:

import java.awt.Color;

import java.awt.Graphics;

import java.awt.Point;

public class Pad {

 

    public Point location;//创建一个Point变量locatoin

    public Point size;//创建一个Point变量size

    private MyPanel gameP;//创建MyPanel实例,获取MyPanel中的一些变量值

 

    public Pad(MyPanel gp) {

        gameP = gp;//将MyPanel对象传给gameP,下面要用到它的padMoveRight

        size = new Point(100, 20);//给size变量赋值

        location = new Point((gp.width - size.x) / 2, gp.heigth - size.y);//给location变量赋值

    }

 

    public void update() {

        if (gameP.padMoveRight) {//如果MyPanel中padMoveRight的值是true

            if (location.x + size.x < gameP.width) {//如果没到右边缘

                location.x += 10;//向右移

            }

        }

        if (gameP.padMoveLeft) {//如果MyPanel中padMoveLeft的值是true

            if (location.x > 0) {//如果没到左边缘

                location.x -= 10;//向左移

            }

        }

    }

 

    public void draw(Graphics g) {

        g.setColor(Color.BLACK);//设置黑色

        g.fillRoundRect(location.x, location.y, size.x, size.y,10,10);//画出档板

    }

}

 

  Pad类运行的方法,是先获取MyPanel中传过来的padMoveLeft和padMoveRight值,然后用它在draw()方法中画出档板的位置,在MyPanel中调用了pad。Draw()实现画档板。

  (4)Block类,Block类的方法和上面的Pad类很相似,不同的是它是负责画砖块,由于有很多砖,我们定义一个数组来记录每一块砖的位置,再用一个boolean值来判断每一个砖是不是被敲掉了。代码和注释请看上面。此处略

  (6)Ball类,Ball类在这里非常重要,它除了画出球之外,还负责判断碰撞,碰撞的判断是游戏开发中最难和最重要的部分。

  

赞(16)
踩(0)
分享到:
上一篇:初步了解GUI
华为认证网络工程师 HCIE直播课视频教程