LoginSignup
5
3

More than 5 years have passed since last update.

ebiten でフィールドの生成

Posted at

前回の続き。
プレイヤーが移動するフィールドをハードコードしていましたが、より効率的に生成することにします。

フィールドの生成

簡易的に文字列からフィールドを生成します。go-inovationの方法を参考にしています。

ソースコード

package field

const Field_data_1 = `+                                        +
+                                        +
+                                        +
+               ++++++++++++++           +
+        +                               +
+          + ++                          +
+      +                     +  +++++    +
+       +                 +              +
+           +++++++++                    +
+      +++              +                +
+                                        +
+   ++                                   +
+           P                            +
++++++++++++++++++++++++++++++++++++++++++
`
  • field/field.go
package field

import (
    "strings"

    "github.com/hajimehoshi/ebiten"

    "github.com/zenwerk/go-pixelman3/sprite"
)

const (
    width  = 17
    height = 17

    blockMark  = "+"
    playerMark = "P"
)

type Field struct {
    Player  *sprite.Player
    Sprites []sprite.Sprite
}

func NewField(fieldData string) *Field {
    field := new(Field)

    for indexY, line := range strings.Split(fieldData, "\n") {
        for indexX, str := range line {
            switch string(str) {
            case blockMark:
                block := sprite.NewBlock()
                block.Position.X = indexX * width
                block.Position.Y = indexY * height
                field.Sprites = append(field.Sprites, block)
            case playerMark:
                player := sprite.NewPlayer()
                player.Position.X = indexX * width
                player.Position.Y = indexY * height
                field.Player = player
            }
        }
    }

    return field
}

func (f *Field) DrawImage(screen *ebiten.Image, viewport sprite.Position) {
    for _, sprite := range f.Sprites {
        sprite.DrawImage(screen, viewport)
    }
}

field_data.go で定義されている文字列がフィールドの生成元です。
field.goNewField で文字列をループで回し、特定の文字が現れたら該当する Sprite を生成します。

実行結果

field_gen.gif

まとめ

手作業で座標を指定するよりだいぶ楽になりました。

5
3
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
5
3