//usingディレクティブで名前空間の参照を簡単にします。
using System;
using System.Drawing;
using System.Windows.Forms;
using Wakaba;

namespace Game
{
    class Game
    {
        private const int STAR_MAX  = 50;       //星の数
        private const int STAR_SPEED = 4;       //星の移動速度
        private const int STAR_ROLL_SPEED = 8;  //星の回転速度

        public struct StarPos{
            public int X;      //X座標
            public int Y;      //Y座標
            public int AddX;   //X移動量
            public int AddY;   //Y移動量
        }
        
        //オブジェクト変数を宣言します。
        private static Helper w;

        [STAThread]
        static void Main(string[] args)
        {
            try
            {
                int intRoll = 0;
                StarPos[] Position = new StarPos[STAR_MAX];

                //オブジェクト変数をインスタンス化します。
                w = new Helper();

                //若葉ヘルパーを初期化します。
                w.Initialize();

                //背景を作成します。
                w.SpriteCreate("背景", MyGame1.Properties.Resources.wall, Helper.TransparentColor.None);
                w.SpritePosition("背景", STAR_MAX + 1, 0, 0);
                w.SpriteHitAdd("背景", "当り壁上", 0, -32, 640, 32);
                w.SpriteHitAdd("背景", "当り壁右", 640, 0, 32, 480);
                w.SpriteHitAdd("背景", "当り壁下", 0, 480, 640, 32);
                w.SpriteHitAdd("背景", "当り壁左", -32, 0, 32, 480);
                w.SpriteShow("背景");

                //星を作成します。
                w.SpriteCreate("星", MyGame1.Properties.Resources.star, Helper.TransparentColor.PictureTopLeft);
                for (int i = 0; i < STAR_MAX; i++)
                {
                    w.SpriteCreate("星" + i, "星", 0, 0, 64, 64);
                    w.SpriteHitAdd("星" + i, "当り星", 0, 0, 64, 64);

                    Random objRnd = new Random(i);
                    Position[i].X = objRnd.Next(0, 640 - 64);
                    Position[i].Y = objRnd.Next(0, 480 - 64);
                    Position[i].AddX = STAR_SPEED;
                    Position[i].AddY = STAR_SPEED;

                    w.SpritePosition("星" + i, i, Position[i].X, Position[i].Y);
                    w.SpriteTransparent("星" + i, 128);

                    w.SpriteShow("星" + i);
                }

                //ウィンドウを閉じるまで画面を更新します。
                do
                {
                    for (int j = 0; j < STAR_MAX; j++)
                    {

                        foreach (Helper.HitName objWallName in w.SpriteHitList("星" + j))
                        {

                            switch (objWallName.AreaName)
                            {
                                case "当り壁上":
                                    Position[j].AddY = STAR_SPEED;
                                    break;
                                case "当り壁右":
                                    Position[j].AddX = -STAR_SPEED;
                                    break;
                                case "当り壁下":
                                    Position[j].AddY = -STAR_SPEED;
                                    break;
                                case "当り壁左":
                                    Position[j].AddX = STAR_SPEED;
                                    break;
                            }

                        }

                        Position[j].X += Position[j].AddX;
                        Position[j].Y += Position[j].AddY;

                        w.SpriteRotation("星" + j, (short)intRoll);
                        w.SpritePosition("星" + j, j, Position[j].X, Position[j].Y);
                    }

                    if (intRoll > 360)
                    {
                        intRoll = 0;
                    }
                    else
                    {
                        intRoll += STAR_ROLL_SPEED;
                    }

                    w.ScreenRefresh(true);

                } while (!w.WindowClosing);

            }
            catch (Exception ex)
            {
                //若葉ヘルパーのエラーメッセージを表示します。
                MessageBox.Show(ex.Message + ex.StackTrace);
            }

            //若葉ヘルパーのオブジェクトを破棄します。
            w.Dispose();
        }
    }
}