//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();
}
}
}