上篇文章寫到了,我已經打印出了一個從起點到終點的路徑,並且這是受鍵盤事件控制的。今天我會繼續給這個遊戲添加一些東西,讓它看起來像個“遊戲”。
現在我要加上一個障礙,不是隨便一條路徑都可以從起點到終點,這個障礙就姑且叫它“炸彈”,我賦給它的規則是,它的上下左右(稱之爲陷阱)及它本身不能經過,必須繞着走。即如圖:
添加這個道具,我有幾個改動的地方,如下:
- 獲取每個關卡的參數,增加了炸彈的位置和周圍陷阱的位置,結構體變成了這樣子:
type RoundParams struct {
Height int //畫布高度
Width int //畫布寬度
BoomNum int //炸彈數量
BoomPosition [][]int //炸彈位置,座標數組
TrapPosition [][]int //陷阱位置,座標數組
}
-
增加一個檢查下一步是否會踏入陷阱的函數
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 }
- 由於炸彈的上下左右都不能走了,那麼炸彈的位置就有要求,不能是畫布上隨意的一個點,具體要求是:假設畫布是m×n,起點位置是(0,0),終點位置是(m,n),炸彈位置是(x,y),那麼2≤x≤m-2,2≤y≤n-2,否則永遠無法走出起點或者無法走到終點,那多麼可憐。
來看下效果:
至此,我添加了一個炸彈在路上,再也不是隨便能到達終點。項目地址是:https://github.com/TomatoMr/boomboom.git。
後面,還可以繼續思考,一張m×n畫布上,最多可以有多少個炸彈,以及有多個炸彈的干擾,從起點到終點的最短路徑怎麼計算。
歡迎關注我的公衆號:onepunchgo,給我留言。