文明6吧 关注:511,091贴子:4,563,766

自制“马蜂窝”

只看楼主收藏回复

龟速更新,黄皓镇楼,随时TJ


IP属地:上海1楼2018-01-29 21:42回复
    纠结了很久,是否要发这帖,因为很容易TJ
    但是想到发帖了,怕人说TJ了,也许就不TJ了,或者晚点TJ了,也是一件好事
    同样纠结了很久,到底是在311吧发帖还是civ6发帖
    最后还是决定在civ6里发,因为是自制的“马蜂窝”,和311的还是有点区别……
    好了,楼主要去洗澡了,洗完回来继续~


    IP属地:上海2楼2018-01-29 21:47
    回复
      解释下所谓的“马蜂窝”,最近楼主沉迷civ6无法自拔(其实是因为要带娃,没法玩即时的游戏……)
      因为楼主电脑配置太低,只能切战略视图,打打标准大小地图
      老婆大人看到屏幕后来了一句,你玩的这是什么?马蜂窝么?
      仔细看这六边形的地图,还真像马蜂窝……


      IP属地:上海3楼2018-01-29 22:06
      回复
        前排······?


        IP属地:四川4楼2018-01-29 22:08
        收起回复
          因为楼主只是一个底层的码农,收入实在少的可怜
          虽然也想换台高配的台式,和吧里的大神们一样随便开巨大图,或者买个ipad在ios上玩civ
          但一想到娃还要奶粉钱,所以只好咬咬牙,继续耍自己的安卓不足千元机……


          IP属地:上海5楼2018-01-29 22:11
          收起回复
            好了,言归正传,既然我们要制作一个马蜂窝,那么就要从第一个六边形开始
            在楼主看来,六边形应该是这样的~

            感谢伟大的画图工具,第一个六边形完成了~
            现在让我们来复习中学的几何课程
            假设屏幕的左上角是(0,0),六边形的边长是R,那么我们应该如何描述这个六边形呢?


            IP属地:上海6楼2018-01-29 22:15
            回复
              在楼主看来,应该是这样的

              作为一名灵魂画师,我只能做到这样的程度了~


              IP属地:上海7楼2018-01-29 22:18
              回复
                好了,我们已经可以很好的定位一个六边形了,姑且称他为格子
                我们可以定义一个对象来描述这个格子
                在我看来应该是这样的
                this.setPane = function(x, y, r) {
                this.sx = x;
                this.sy = y;
                this.r = r;
                this.px = [x, x + r, x + r, x, x - r, x - r];
                this.py = [y - r, y - r / 2, y + r / 2, y + r, y + r / 2, y - r / 2];
                }
                不懂代码的朋友估计已经懵逼了,其实如果不写注释,我自己看了也会懵~
                简而言之,一个格子有一个中心点坐标(x, y)
                他有六个顶点,假设边长为r,那么6个点的坐标就是(x, y-r) (x+r, y-r/2) (x+r, y+r/2) (x, y+r) (x-r, y+r/2) (x-r, y-r/2)


                IP属地:上海8楼2018-01-29 22:25
                回复
                  六个顶点都有了,顺序把他们用线连接起来,六边形就完成了
                  (此处楼主就直接用H5的canvas绘图完成)

                  恩,没错。背景应该是黑色的~


                  IP属地:上海9楼2018-01-29 22:32
                  回复
                    接下来就是计算机最擅长的事情了,重复同样的工作
                    用for循环写一排六边形

                    然后再套一层for循环,画N排六边形(注意偶数行的六边形要错开,具体坐标就不写了)

                    很好,我们的马蜂窝已经出具规模了~


                    IP属地:上海10楼2018-01-29 22:36
                    收起回复
                      哇,可以的,我感觉,能火!!!


                      IP属地:湖北来自Android客户端11楼2018-01-29 22:41
                      收起回复
                        喝杯茶,想想之后应该做什么呢?这黑漆漆的马蜂窝,是要拿来做宇宙的背景么?
                        我们的地球应该是蓝色(海水)绿色(草原)黄色(沙漠)白色(冻土)吧
                        冷酷的现实告诉楼主,你只是一个码农,别去想美工应该想的事情……


                        IP属地:上海12楼2018-01-29 22:44
                        回复
                          管他呢,既然我们已经想到构造地图需要地形,那么就把地形这个对象造出先
                          就像一开始我们定义了格子一样
                          function Terrain() {
                          this.setTerrain = function(id, name, cost, f, p, m) {
                          this.id = id;
                          this.name = name;
                          this.cost = cost;
                          this.output = [f, p, m];
                          }
                          }
                          地形应该有个id(恩,我认为需要一个id),还需要一个名字name,不同的地形消耗的机动力不同cost,不同的地形应该还有粮食food,产能product,金钱money,把这些放到一个叫产出output的队列里去


                          IP属地:上海13楼2018-01-29 22:55
                          回复
                            不明觉厉


                            来自Android客户端14楼2018-01-29 23:02
                            收起回复
                              按照civ的分类,地块分为地形(草原,平原,黄山,绿山,沙漠……)和地貌(森林,沼泽,冲击……)
                              我们暂时先不搞那么复杂,就先弄一个单一的地形好了,之后再考虑是否要改
                              一开始做的太复杂,反而会弄的很累,还觉得毫无进展

                              靠,沼泽英文怎么说?待我百度一下……swap。好吧,我又学到了新单词~楼主的E文老师应该很欣慰,其他地形楼主都还记得怎么写


                              IP属地:上海15楼2018-01-29 23:05
                              收起回复