LoginSignup
2
1

More than 3 years have passed since last update.

Goで地形生成ツールを作る

Last updated at Posted at 2019-12-13

この記事はtomowarkar ひとりAdvent Calendar 2019の13日目の記事です。

カレンダーも折り返し地点ですね。

はじめに

Goで画像生成をして遊んでいたらもう少し本格的なものを作ってみたく、機能を追加しつつツール化してみました。

完璧自己満足案件ですね😸

ランダムドットの生成に加え、以下記事を参考に中点変位法を用いたマインクラフトのようなワールドマップの生成を手軽にできるようにしました。

中点変位法 世界生成🌏

現状ランダムドット画像の生成、中点変位法を用いた画像生成の二つの機能しかありませんが、ゆるりと機能追加していけたらなーという次第です。

使い方

ソースコード

go get

go get -u github.com/tomowarkar/biome

コード

ランダムドット画像生成

package main

import "github.com/tomowarkar/biome"


func main() {
    var seed int64
    scale := 100

    d := biome.NewDicts()
    d.Set(0, biome.Khaki)
    d.Set(1, biome.Darkgoldenrod)
    d.Set(2, biome.Royalblue)
    d.Set(3, biome.Seagreen)

    b := biome.NewWorld(5, 8)
    b.RandIntn(len(d), seed)

    err := b.ToPng(scale, d, "image")
    if err != nil {
        panic(err)
    }
}

image.png

中点変位法を用いたワールドマップ生成

package main

import "github.com/tomowarkar/biome"

func main() {
    var seed int64
    width, height, scale := 48, 32, 10
    world := biome.Flactal(height, width, seed)
    d := biome.DefaultDicts()
    world.ToPng(scale, d, "image")
}

image.png


width, height, scale := 240, 160, 2

ワールドマップのスケールを変更すると...
image.png
でん!!!

おわりに

Goのinterfaceやポインタとはあまりお友達ではなかったのですが、このツールを作るにあたってinterfaceやポインタを考えながら使う必要ができ、少しはお友達になれた気がします。

2つの機能しかありませんがそれらしさが出てとても良き良きでした。

以上明日も頑張ります!!
tomowarkar ひとりAdvent Calendar Advent Calendar 2019

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1