AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

FTLみたいなものを作ってみる(1)

周回遅れですが、インディーズの有名ゲームFTLの動画を見まくっています。
凄い。このゲームモデル。
宇宙船同士でレーザーやミサイルで撃ち合えるのだけでなく、敵戦に乗り込んで攻撃できて、しかも敵も自分の艦に乗り込んでくる。
ドアをあけて真空を使って船内を消火したり、船員のクローンを作って、敵船の送り込んだり、
マインドコントロールで敵兵を拉致してぼこるなど、自由度が半端ない。
まさしく洋ゲーの鏡で、一本道で紙芝居で、絵の物量で勝負する和製ゲームに無いものが満載。
RTSでもあり、ローグライクと作者は定義しているらしい。




ゲームモデルに感動したので、できるところまで模写をしてみようと思う。
真似して仕組みを作っていくうちに、いろいろと勉強できる気がする。
しかも、この敵のAIの思考ルーチンがかなり作ってみたい!

f:id:yasu9780:20161210022047p:plain

まずは配列で定義した部屋情報を元に画面にキューブを表示しただけ。
次はこのマップをもとに経路探索できる処理を追加して、部屋と部屋の間で船員を移動させられるようにします。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace FTL
{
    public class Main : MonoBehaviour
    {
        public int[,] map = new int[100, 100];

        void Start()
        {
            string[] map2 =
            {
                "1111111",
                "1001001",
                "1001001",
                "1002001",
                "1111111"
            };
            for (int i = 0; i < 100; i++) for (int j = 0; j < 100; j++) map[j, i] = 0;
            for (int i=0;i<=4;i++)
            {
                for(int j=0;j<map2[i].Length ;j++)
                {
                    map[j, i] = int.Parse(map2[i].Substring(j, 1));
                }
            }
            for (int i = 0; i < 100; i++) for (int j = 0; j < 100; j++)
                {
                    if (map[j, i] == 1) SetWall(j, i,1);
                    if (map[j, i] == 2) SetWall(j, i,2);
                }

        }
        void Update()
        {

        }
        void SetWall(int x,int y,int type)
        {
            GameObject pf;
            if (type == 1) pf = (GameObject)Resources.Load("FTL/Wall");
            else pf = (GameObject)Resources.Load("FTL/Door");
            GameObject gm = (GameObject)Instantiate(pf, new Vector3(x, 0, 99 - y), Quaternion.identity);
            gm.name = gm.name.Replace("(Clone)", "");
        }
    }
}

壁を薄くするだけで一苦労だよ(´・ω・`)

f:id:yasu9780:20161210025615p:plain