WPF 3Dプログラミング

第8回「鬼ごっこゲーム」の巻

WPF 3Dプログラミング WPF 3Dプログラミング WPF 3Dプログラミング

先生「最後に前回の続きから『鬼ごっこゲーム』を作ります。
まずは接触したときの『捕まえた!』という声を入れます。
VC#で前回のプロジェクトから続けます。
『プロジェクト>WpfApplication3のプロパティ』メニューで、『リソース』を選び、『リソースの追加>既存のファイルの追加』で『Catch.wav』を追加します。
そして、以下の赤字の部分をコーディングします」

    public partial class Window1 : Window
    {
        //タイマー
        private DispatcherTimer intervalTimer = new DispatcherTimer();
        //剣士キャラの位置
        Vector3D pos = new Vector3D(1000, 0, 1000);
        //剣士キャラの向き
        float angle = 0;
        //魔女キャラの位置
        Vector3D pos2 = new Vector3D(0, 0, 0);
        //魔女キャラの向き
        float angle2 = 225;
        //サウンドプレイヤー
        SoundPlayer catchSound = new SoundPlayer(Properties.Resources.Catch);
        //捕まえたか?
        Boolean catching = false;

        public Window1()
        {
            InitializeComponent();

            //30ミリ秒ごとに、『Update3DEvent』関数を呼び出す
            intervalTimer.Interval = TimeSpan.FromMilliseconds(30);
            intervalTimer.Tick += new EventHandler(Update3DEvent);
            intervalTimer.Start();
        }

        //30ミリ秒ごとに呼ばれる関数
        void Update3DEvent(object sender, EventArgs e)
        {
            //カメラ位置
            Camera_Tag.Position = new Point3D(pos.X + 3000, pos.Y + 1000, pos.Z + 3000);
            //カメラの向き
            Camera_Tag.LookDirection = new Vector3D(-3, -0.9, -3);

            SwordsmanMove();
            WitchMove();

            //ピタゴラスの定理で当たり判定
            double x = pos2.X - pos.X;
            double z = pos2.Z - pos.Z;
            if (!catching && x * x + z * z <= 100 * 100)
            {
                catchSound.Play();
            }
        }
            
WPF 3Dプログラミング



先生
WPF 3Dプログラミング WPF 3Dプログラミング WPF 3Dプログラミング

ツカサ「サウンドも使えるんですね!
本格的!」
WPF 3Dプログラミング



天使
WPF 3Dプログラミング WPF 3Dプログラミング WPF 3Dプログラミング

先生「今度は魔女キャラを逃げるように前進させます。
以下の赤い字のようにコーディングしてください」

        private void WitchMove()
        {
            //ディグリーからラジアンへ変換
            float radian = toRadian(angle2);
            //向いた方向へXとZ座標を加算
            pos2.X += (float)(Math.Sin(radian) * 12);
            pos2.Z += (float)(Math.Cos(radian) * 12);
            //3D行列
            Matrix3D m = new Matrix3D();
            (後略)
            
WPF 3Dプログラミング



先生

タクヤ
WPF 3Dプログラミング WPF 3Dプログラミング WPF 3Dプログラミング
WPF 3Dプログラミング タクヤ「このままだと真っ直ぐにしか進まないので、ランダムに左右に旋回させてみました」

    public partial class Window1 : Window
    {
        //タイマー
        private DispatcherTimer intervalTimer = new DispatcherTimer();
        //剣士キャラの位置
        Vector3D pos = new Vector3D(1000, 0, 1000);
        //剣士キャラの向き
        float angle = 0;
        //魔女キャラの位置
        Vector3D pos2 = new Vector3D(0, 0, 0);
        //魔女キャラの向き
        float angle2 = 225;
        //サウンドプレイヤー
        SoundPlayer catchSound = new SoundPlayer(Properties.Resources.Catch);
        //捕まえたか?
        Boolean catching = false;
        //魔女回転の増分
        float delta = 0;

        (中略)

        private void WitchMove()
        {
            //ランダム
            Random rand = new Random();
            //回転の増分を加算減算
            if (delta < -5)
            {
                delta = (float)(rand.NextDouble() * 3);
            }
            else if (delta > 5)
            {
                delta = -(float)(rand.NextDouble() * 3);
            }
            else
            {
                delta += (float)(rand.NextDouble() - rand.NextDouble());
            }
            angle2 += delta;
            //ディグリーからラジアンへ変換
            float radian = toRadian(angle2);
            //魔女キャラが±3000の位置にいれば前進
            if (Math.Abs(pos2.X) < 3000 && Math.Abs(pos2.Z) < 3000)
            {
                //向いた方向へXとZ座標を加算
                pos2.X += (float)(Math.Sin(radian) * 12);
                pos2.Z += (float)(Math.Cos(radian) * 12);
            }
            else//±3000の外にいれば、ちょっと後退して逆向きに
            {
                pos2.X -= (float)(Math.Sin(radian) * 20);
                pos2.Z -= (float)(Math.Cos(radian) * 20);
                angle2 += 180;
            }
            //魔女の向きが0より小さければ360加算
            if (angle2 < 0)
            {
                angle2 += 360;
            }
            //魔女の向きが1回転したら360減算
            if (angle2 >= 360)
            {
                angle2 -= 360;
            }
            //3D行列
            Matrix3D m = new Matrix3D();

            (後略)
            




WPF 3Dプログラミング WPF 3Dプログラミング WPF 3Dプログラミング

ツカサ「ゲーム完成!やったね!」 WPF 3Dプログラミング



天使
WPF 3Dプログラミング WPF 3Dプログラミング WPF 3Dプログラミング

先生「よくできました。
今までのプロジェクトはここまで」
WPF 3Dプログラミング



先生

前のページへ HOME 1 2 3 4 5 6 7 8 9 次のページへ