用golang寫一個簡單的遊戲(二)

上篇文章寫到了,我已經打印出了一個從起點到終點的路徑,並且這是受鍵盤事件控制的。今天我會繼續給這個遊戲添加一些東西,讓它看起來像個“遊戲”。

現在我要加上一個障礙,不是隨便一條路徑都可以從起點到終點,這個障礙就姑且叫它“炸彈”,我賦給它的規則是,它的上下左右(稱之爲陷阱)及它本身不能經過,必須繞着走。即如圖:
boom.png

添加這個道具,我有幾個改動的地方,如下:

  1. 獲取每個關卡的參數,增加了炸彈的位置和周圍陷阱的位置,結構體變成了這樣子:
type RoundParams struct {
    Height       int //畫布高度
    Width        int //畫布寬度
    BoomNum      int //炸彈數量
    BoomPosition [][]int //炸彈位置,座標數組
    TrapPosition [][]int //陷阱位置,座標數組
}
  1. 增加一個檢查下一步是否會踏入陷阱的函數

    func checkTrap(round int, point *components.Point, direction string) bool {
    rp := rounds.GetRoundParams(round)
    x := point.X
    y := point.Y
    switch direction {
    case "up":
        y -= 1
    case "down":
        y += 1
    case "left":
        x -= 1
    case "right":
        x += 1
    }
    for _, v := range rp.TrapPosition {
        if x == v[0] && y == v[1] {
            return true
        }
    }
    return false
    }
  2. 由於炸彈的上下左右都不能走了,那麼炸彈的位置就有要求,不能是畫布上隨意的一個點,具體要求是:假設畫布是m×n,起點位置是(0,0),終點位置是(m,n),炸彈位置是(x,y),那麼2≤x≤m-2,2≤y≤n-2,否則永遠無法走出起點或者無法走到終點,那多麼可憐。

boomboom.png

來看下效果:

boom-demo.gif

至此,我添加了一個炸彈在路上,再也不是隨便能到達終點。項目地址是:https://github.com/TomatoMr/boomboom.git

後面,還可以繼續思考,一張m×n畫布上,最多可以有多少個炸彈,以及有多個炸彈的干擾,從起點到終點的最短路徑怎麼計算。


歡迎關注我的公衆號:onepunchgo,給我留言。

image

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章