亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

桌面彈球--學習筆記(一)

系統 2300 0

?

游戲規則:

在桌面彈球游戲中,玩家通過控制一個可以左右移動的擋板去阻止彈球落地。

當彈球與擋板碰撞,發生反彈后,如果與磚塊碰撞,該磚塊就會被消除掉。注意其中有一些磚塊是有魔法的。

當有魔法的磚塊被消除掉時,就會有一個道具落下,道具有兩種,分別可以使擋板變長和變短。

如果擋板接住了道具,魔法就會起效。

當所有的磚塊都被消除掉后,玩家就勝出,如果彈球球落下時沒有被擋板接住,本輪游戲就失敗了。

?

?

在游戲中,有擋板、彈球、磚塊、道具這四種游戲對象,磚塊是固定不動的,擋板的移動是由玩家通過鍵盤控制的,彈球和道具也是運動的。這些游戲對象都有共同的特性,有自己的位置,即 x y 坐標,有圖片屬性,有速度屬性。
桌面彈球--學習筆記(一)

?

BallComponent 作為 Brick (磚塊)類、 Magic (道具)類、 Stick (擋板)類、 Ball (彈球)類的父類,包含了上面提到的幾個共有的屬性。當然,在 BallComponent 中至少要有一些獲取和設置屬性的方法,為了簡單明了,圖中并沒有標出。


桌面彈球--學習筆記(一)

?

Magic(道具)類(該類中有一個用于使道具功能實現的抽象方法,供子類實現),道具類的子類有LongMagic和ShortMagic,作用是使擋板的長度變長或者變短,由magicDo(Stick stick)來實現。

確定了游戲對象各類后,還需要一個BallFrame類,一個畫板類(BallPanel),一個BallService類來處理與游戲相關的業務邏輯。

?

下面分別思考下Brick(磚塊)類、Stick(擋板)類、Magic(道具)類、Ball(彈球)類、LongMagic類、ShortMagic類該如何定義。

?

Brick(磚塊)類的屬性定義:

?

    // 定義道具,1表示變長道具,2表示變短道具
private Magic magic = null;
public static final int MAGIC_LONG_TYPE = 1;
public static final int MAGIC_SHORT_TYPE = 2;

// 定義一個boolean變量標記磚塊是否有效,如果無效就不繪制在畫板上
private boolean disable = false;
  

?Brick(磚塊)類的構造方法:

    public Brick(String path, int type, int x, int y) throws IOException {
		super(path);
		if (type == Brick.MAGIC_LONG_TYPE) {
			this.magic = new LongMagic("img/long.gif", x, y);
		} else if (type == Brick.MAGIC_SHORT_TYPE) {
			this.magic = new ShortMagic("img/short.gif", x, y);
		}
		if (this.magic != null) {
			this.magic.setX(x);
			this.magic.setY(y);
		}
	}
  

?

注意構造方法的參數中,path指的是磚塊圖片地址;type指的是磚塊的類型,0表示普通磚塊,1表示有變長魔法的磚塊,2表示有變短魔法的磚塊;x,y分別表示道具的x,y坐標。

?

Stick(擋板)類的屬性定義:

    // 定義檔板移動的速度
public static final int SPEED = 20;
// 定義檔板初始的長度
private int preWidth = 0;
  

?

?Stick(擋板)類的構造器:

    /**
	 * 有參數構造器
	 * 
	 * @param panelWidth
	 *            int 畫板寬度
	 * @param panelHeight
	 *            int 畫板高度
	 * @param path
	 *            String 圖片路徑
	 */
	public Stick(int panelWidth, int panelHeight, String path)
			throws IOException {
		// 調用父構造器
		super(panelWidth, panelHeight, path);
		// 設置y坐標
		this.setY(panelHeight - super.getImage().getHeight(null));
		// 設置原本的長度
		this.preWidth = super.getImage().getWidth(null);
	}
  

?

可以看到,利用構造器,可以把擋板定位在畫板的底部。彈球類(Ball)的構造器與擋板類(Stick)的構造器很類似,彈球的初始狀態是正好在擋板的正上方。

?

Ball(彈球)類的屬性定義:

    // 定義球的豎向速度
private int speedY = 10;
// 定義彈球的橫向速度
private int speedX = 8;
// 定義是否在運動
private boolean started = false;
// 定義是否結束運動
private boolean stop = false;
  

?

Magic(道具)類,LongMagic類、ShortMagic類的定義沒有太大難度,關鍵是magicDo(Stick stick)的實現。

?

桌面彈球--學習筆記(一)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 狠狠色噜噜狠狠狠狠奇米777 | 91成人免费在线视频 | 5060网永久免费一级毛片 | 精品在线99 | 亚洲美女视频网址 | 色视频在线免费 | 日韩在线视频在线 | 狠狠躁天天躁夜夜躁婷婷 | 国产精品成人免费观看 | 久草日韩 | 亚洲伦理网站 | 日本久久综合视频 | 久久97精品久久久久久久看片 | 中文字幕精品一区二区精品 | 99久久精品免费看国产 | 亚洲视频99| 国产欧美在线观看不卡 | 奇米777在线观看 | 曹逼视频| 久久香蕉国产线 | 337p日本欧洲亚洲大胆艺术 | 国产精品二区高清在线 | 久久国产精品久久久久久久久久 | 全部免费毛片在线 | 成人午夜天 | 亚洲专区区免费 | 日韩亚洲欧美一区二区三区 | 四虎国产成人免费观看 | 国产精品日本一区二区在线播放 | 日本综合在线观看 | 四虎网站 | 久久精品中文字幕首页 | 欧洲精品在线观看 | 一级毛片人与动免费观看 | 日本三级带日本三级带黄首页 | 五月婷婷在线播放 | 国产区在线观看视频 | 久久亚洲精品中文字幕 | 在线视频一区二区日韩国产 | 99热久久国产精品一区 | 在线免费黄色片 |