あれとかこれとかそれとか

気まぐれプログラマーのブログです。簡単なことから小難しいことまで必死に勉強した内容を書き留めていきます。プログラム以外にも気になったことや面白かったことをまとめていこうと思います。

【Swift】 リバーシを作りましょう #3 オブジェクトの配置と判定の追加

前回の記事はこちらから
aretoka-koretoka-soretoka.hatenablog.com

オブジェクトを打つため、setObject 関数を作成します。
引数では、打つ予定のオブジェクトタイプと打つ座標をもらいます。

①打てない条件のうち、
> 盤面の範囲外には打てない
をチェックし、条件に当てはまる場合には無処理で返ります。

②打てない条件のうち、
> 既にオブジェクトが打たれている座標には打てない
をチェックし、条件に当てはまる場合には無処理で返ります。
指定座標が " "(空白) 以外の場合、既にオブジェクトが打たれていると判断します。

③打てない条件のうち、
> 別種のオブジェクトをひっくり返せない座標には打てない
をチェックし、条件に当てはまる場合には無処理で返ります。

④指定した座標にオブジェクトを配置します。

// オブジェクトを配置(x:X座標,y:Y座標,type:オブジェクトタイプ(0 ■,!0 ●))
func setObject(x:Int,y:Int,type:Int) {
    // ①
    // 範囲外の場合はエラー
    if(workArray.count <= y || workArray[y].count <= x || y < 0 || x < 0) {
        print("over position")
        return
    }
    // ②
    // 既に何かが置かれている場合置けない
    if(workArray[y][x] != " ") {
        print("not put1")
        return
    }
    
    // ③
    // オブジェクトが置けるか検索
    if searchObject(x,y:y,type:type) {
        // ④
        // オブジェクトを配置
        workArray[y][x] = object[type]
    }
    else {
        print("not put2")
    }

    print("end")
}

以上で完成です。

setObject(6,y:5,type:0)

といった感じで使用することで workArray が書き変わります。
配列の中身を確認するために、以下のような関数を作成して確認してみましょう。

// 配列状態を表示
func printArray() {
    print("printArray")
    print("____0____1____2____3____4____5____6____7____8____9__")
    for var idx0 = 0; idx0 < workArray.count; idx0++ {
        print(idx0,workArray[idx0])
        for var idx1 = 0; idx1 < workArray[idx0].count; idx1++ {
        }
    }
}

完成したソースコードはこちらから。

reversi_for_swift · GitHub

確認は Playground や、SwiftStub何かを使用すると楽ちんです。

swiftstub.com