分享
  1. 首页
  2. 文章

用golang写一个简单的游戏(三)

wx5e1abbbb0a5e5 · · 1496 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

×ばつn的画布上最多能有多少个炸弹这个问题不是很有意义,比如下图:

max-booms.png

这种排列是最多个炸弹的情况,但它没啥用处。我们的问题应该是最少有多少个炸弹就能造成死局。最少是2颗炸弹就可以造成死局,但这种特色情况,我们已经做了处理--不能在起点和终点的周围有炸弹。除去这种特殊情况外的其他情况,最少有几个炸弹就能造成死局,不难想到是以下的情况:

min-booms.png

min-booms2.png

把规律描述一下就是,取出m和n之中的最小数min,min除以3,如果整除则是min/3,如果有余数,则是min/3+1。那么只要小于min,炸弹的位置就可以任意摆放了。

代码修改一下:

func GetRoundParams(round int) RoundParams {
 once.Do(func() {
 roundParams = RoundParams{
 Height: 10,
 Width: 10,
 BoomNum: 1,
 BoomPosition: [][]int{
 {5, 5},
 },
 }
 switch round {
 case 1:
 roundParams = RoundParams{
 Height: 10,
 Width: 10,
 StartPoint: []int{0, 0},
 EndPoint: []int{9, 9},
 }
 roundParams.BoomNum = minBooms(roundParams.Height, roundParams.Width)
 bp := make([][]int,0)
 tp := make([][]int,0)
 rand.Seed(time.Now().UnixNano())
 for i := 0; i < roundParams.BoomNum - 1; i++ {
 x := rand.Intn(roundParams.Width-3) + 2
 y := rand.Intn(roundParams.Height-3) + 2
 bp = append(bp, []int{x, y})
 tp = append(tp, []int{x - 1, y}, []int{x + 1, y}, []int{x, y - 1}, []int{x, y + 1},)
 }
 roundParams.BoomPosition = bp
 roundParams.TrapPosition = tp
 }
 })
 return roundParams
}
func minBooms(h, w int) int {
 min := h
 if h-w > 0 {
 min = h
 }
 boomNum := min / 3
 if boomNum%3 != 0 {
 boomNum++
 }
 return boomNum
}

这里有一定概率会有炸弹位置是重复的,不过这不是什么问题,可以忽略不管。看一下实际的效果图:

boom1.png

额......有些差强人意,尽管炸弹位置可以任意了,但是数目看起来还是太少了,没有什么难度,一个两个也没差。还是不够丰富,不需要思考就可以通过了。留着这个问题下篇文章再解决。


欢迎关注我的公众号:onepunchgo,给我留言。

image


有疑问加站长微信联系(非本文作者)

本文来自:51CTO博客

感谢作者:wx5e1abbbb0a5e5

查看原文:用golang写一个简单的游戏(三)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
1496 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏