日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

桌面彈球--學(xué)習(xí)筆記(一)

系統(tǒng) 2552 0

?

游戲規(guī)則:

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

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

當(dāng)有魔法的磚塊被消除掉時(shí),就會(huì)有一個(gè)道具落下,道具有兩種,分別可以使擋板變長(zhǎng)和變短。

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

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

?

?

在游戲中,有擋板、彈球、磚塊、道具這四種游戲?qū)ο螅u塊是固定不動(dòng)的,擋板的移動(dòng)是由玩家通過(guò)鍵盤控制的,彈球和道具也是運(yùn)動(dòng)的。這些游戲?qū)ο蠖加泄餐奶匦裕凶约旱奈恢茫? x y 坐標(biāo),有圖片屬性,有速度屬性。
桌面彈球--學(xué)習(xí)筆記(一)

?

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


桌面彈球--學(xué)習(xí)筆記(一)

?

Magic(道具)類(該類中有一個(gè)用于使道具功能實(shí)現(xiàn)的抽象方法,供子類實(shí)現(xiàn)),道具類的子類有LongMagic和ShortMagic,作用是使擋板的長(zhǎng)度變長(zhǎng)或者變短,由magicDo(Stick stick)來(lái)實(shí)現(xiàn)。

確定了游戲?qū)ο蟾黝惡螅€需要一個(gè)BallFrame類,一個(gè)畫板類(BallPanel),一個(gè)BallService類來(lái)處理與游戲相關(guān)的業(yè)務(wù)邏輯。

?

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

?

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

?

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

// 定義一個(gè)boolean變量標(biāo)記磚塊是否有效,如果無(wú)效就不繪制在畫板上
private boolean disable = false;
  

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

    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);
		}
	}
  

?

注意構(gòu)造方法的參數(shù)中,path指的是磚塊圖片地址;type指的是磚塊的類型,0表示普通磚塊,1表示有變長(zhǎng)魔法的磚塊,2表示有變短魔法的磚塊;x,y分別表示道具的x,y坐標(biāo)。

?

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

    // 定義檔板移動(dòng)的速度
public static final int SPEED = 20;
// 定義檔板初始的長(zhǎng)度
private int preWidth = 0;
  

?

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

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

?

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

?

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

    // 定義球的豎向速度
private int speedY = 10;
// 定義彈球的橫向速度
private int speedX = 8;
// 定義是否在運(yùn)動(dòng)
private boolean started = false;
// 定義是否結(jié)束運(yùn)動(dòng)
private boolean stop = false;
  

?

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

?

桌面彈球--學(xué)習(xí)筆記(一)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 贵港市| 莎车县| 林芝县| 惠水县| 武陟县| 博野县| 南昌市| 隆化县| 历史| 伽师县| 竹北市| 丹阳市| 苏尼特左旗| 嘉荫县| 滦南县| 浮山县| 新竹市| 淮安市| 葵青区| 安泽县| 洪洞县| 宁远县| 江孜县| 根河市| 红河县| 吐鲁番市| 阿荣旗| 鸡西市| 巴南区| 阳原县| 宁国市| 三门峡市| 高邮市| 大名县| 称多县| 玉树县| 防城港市| 白城市| 台南市| 龙游县| 宁河县|