Playdate SDKを使ってPlaydate Simulatorで起動してみる

## Playdateの簡単な説明

![スクリーンショット 2022-12-01 21.52.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100912/8d1e0d2a-0e44-b4ec-cf1e-1a5b34f385a5.png)
Playdateは十字キーとABボタンに加えて、くるくる回せるクランクのついたゲーム端末です。
画面は400x240pxのモノクロの1bitなのですが、フレームレートはデフォルト30fpsとサクサク動きます。
ゲームは毎週2本配信されるのですが、**Playdate SDK**という開発キットがあるので自作することもできます。
今回一番ミニマムな形でゲームを**Playdate Simulator**で起動してみようと思います。

## 開発に必要なもの

- [Playdate SDK(v1.12.3)](https://play.date/dev/)
    - Playdateの開発キット

https://play.date/dev/

- [Nova(v10.3)](https://nova.app/)
    - IDE。Playdate Similatorを直接起動してデバッグできる。

https://nova.app/

上記のインストールを済ませておきます。

## Playdateゲームをミニマムに作る

`myProjectName`という作業用のディレクトリを作り以下のようなディレクトリ構成にします。

```
myProjectName/
    source/
        main.lua
        Images/
            playerImage.png
            background.png
```

`background.png`
![background.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100912/b2bf68a9-7bfd-b61c-6502-66af09ad5ddd.png)

`playerImage.png`
![playerImage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100912/538ac148-c51f-9000-142a-4c5060fce6bf.png)

`main.lua`は以下のように記述します。

``` main.lua
import "CoreLibs/object"
import "CoreLibs/graphics"
import "CoreLibs/sprites"
import "CoreLibs/timer"

local gfx <const> = playdate.graphics

local playerSprite = nil

function myGameSetUp()

    local playerImage = gfx.image.new("Images/playerImage")
    assert( playerImage )

    playerSprite = gfx.sprite.new( playerImage )
    playerSprite:moveTo( 200, 120 )
    playerSprite:add()

    local backgroundImage = gfx.image.new( "Images/background" )
    assert( backgroundImage )

    gfx.sprite.setBackgroundDrawingCallback(
        function( x, y, width, height )
            backgroundImage:draw( 0, 0 )
        end
    )

end

myGameSetUp()

function playdate.update()

    if playdate.buttonIsPressed( playdate.kButtonUp ) then
        playerSprite:moveBy( 0, -2 )
    end
    if playdate.buttonIsPressed( playdate.kButtonRight ) then
        playerSprite:moveBy( 2, 0 )
    end
    if playdate.buttonIsPressed( playdate.kButtonDown ) then
        playerSprite:moveBy( 0, 2 )
    end
    if playdate.buttonIsPressed( playdate.kButtonLeft ) then
        playerSprite:moveBy( -2, 0 )
    end

    gfx.sprite.update()
    playdate.timer.updateTimers()

end
```

次にNovaを起動して`ファイル` > `開く…` より、 `myProjectName`を選択します。
`myProjectName`を開いた後、タイトルバーに表示されている`myProjectName`をクリックし、設定ウィンドウを開きます。
<img width="580" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100912/6067fa73-7bca-58ae-a253-04b5d0bb0f5d.png">
設定ウィンドウを開いた後、`タスク`から新しいタスク`Playdate Similator`を追加します。
追加後、完了ボタンを押し、設定ウィンドウを閉じます。
<img width="580" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100912/f9ab7ced-2224-2998-837b-220cff152ce0.png">
先程のタイトルバーの`myProjectName`表記の右側に`Playdate Similator`が表示されていることを確認したら、緑色の再生アイコンボタンを押下するとシミュレーターでデバッグすることができます。
<img width="580" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100912/07a62881-26c3-2b72-8934-ed414245a4ea.png">

<img width="580" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100912/4016d73c-0147-61ad-15f2-5d02fe414c2a.png">

次回はこれを実機に転送できるようにしたいと思います。