//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; private struct StarPos { //X座標 public int X; //Y座標 public int Y; //X移動量 public int AddX; //Y移動量 public int AddY; } private const int MAPCHIP_SIZE = 32; //スクロールスピード private const int SCROLL_SPEED = 4; //fps計測用 private static int mintFps; //フレームスキップ計測用 private static int mintSkip; //オブジェクト変数を宣言します。 private static Wakaba.GameTimer t; private static Helper w; [STAThread] static void Main(string[] args) { try { Random objRnd = new Random(); int intRnd; int intScroll = 0; int intRoll = 0; StarPos[] Position = new StarPos[STAR_MAX + 1]; int intBackFps=0; int intBackSkip=0; //オブジェクト変数をインスタンス化します。 w = new Helper(); //若葉ヘルパーを初期化します。 w.Initialize(); //fps表示用スプライトを作成する w.SpriteCreate("fps", 128, 32); w.SpritePosition("fps", 0, 0, 0); w.SpriteShow("fps"); w.SpriteCreate("マップチップ", MyGame1.Properties.Resources.map, Helper.TransparentColor.None); w.SpriteCreate("背景1", 640, 480); w.SpriteShow("背景1"); w.SpriteCreate("背景2", 640, 480); w.SpriteShow("背景2"); //マップチップを作成する for (int i = 0; i <= 14; i++) { for (int j = 0; j <= 19; j++) { intRnd = objRnd.Next(0, 3); w.SpriteCopy("背景1", (short)(j * MAPCHIP_SIZE), (short)(i * MAPCHIP_SIZE), "マップチップ", intRnd * MAPCHIP_SIZE, 0, MAPCHIP_SIZE, MAPCHIP_SIZE); } } w.SpriteCopy("背景2", 0, 0, "背景1", 0, 0, 640, 480); //星を作成する w.SpriteCreate("星", MyGame1.Properties.Resources.star, Helper.TransparentColor.PictureTopLeft); for (int i = 1; i <= STAR_MAX; i++) { w.SpriteCreate("星" + i, "星", 0, 0, 64, 64); w.SpriteHitAdd("星" + i, "当り星", 0, 0, 64, 64); 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); } //fps計測タイマー設定 t = new Wakaba.GameTimer(); t.Tick += new GameTimer.TickEventHandler(t_Tick); t.Interval = 1000; t.TimerStart(); do { //スクリーン変更を判定する if (w.KeyPush(Helper.KeyCodes.CodeZ)) { w.ScreenChange(Helper.ScreenMode.Full); } else if (w.KeyPush(Helper.KeyCodes.CodeX)) { w.ScreenChange(Helper.ScreenMode.Window); } //星を移動する for (int j = 1; j <= STAR_MAX; j++) { Helper.SpriteInfo info = w.SpriteInformation("星" + j); if (info.X < 0) { Position[j].AddX = STAR_SPEED; } if (640 - 64 < info.X) { Position[j].AddX = -STAR_SPEED; } if (info.Y < 0) { Position[j].AddY = STAR_SPEED; } if (480 - 64 < info.Y) { Position[j].AddY = -STAR_SPEED; } Position[j].X += Position[j].AddX; Position[j].Y += Position[j].AddY; w.SpriteRotation("星" + j, intRoll); w.SpritePosition("星" + j, j, Position[j].X, Position[j].Y); } if (intRoll > 360) { intRoll = 0; } else { intRoll += STAR_ROLL_SPEED; } //背景をスクロールする w.SpritePosition("背景1", STAR_MAX + 1, intScroll, 0); w.SpritePosition("背景2", STAR_MAX + 1, intScroll - 640, 0); intScroll += SCROLL_SPEED; if (intScroll > 640) { intScroll = 0; } //fps表示 if (mintFps == intBackFps & mintSkip == intBackSkip) { } else { string msg = "fps" + mintFps + " skip" + mintSkip; w.SpriteFillColor("fps"); w.SpriteText("fps", msg, 0, 0, "MS ゴシック", 16, FontStyle.Bold, Brushes.Black); intBackFps = mintFps; intBackSkip = mintSkip; } w.ScreenRefresh(true); } while (!w.WindowClosing & !w.KeyPush(Helper.KeyCodes.CodeEscape)); w.ScreenChange(Helper.ScreenMode.Window); } catch (Exception ex) { //エラーメッセージを表示します。 MessageBox.Show(ex.Message + ex.StackTrace); } //若葉ヘルパーのオブジェクトを破棄します。 t.Dispose(); w.Dispose(); } static void t_Tick() { //fps表示 if (w != null) { mintFps = w.ScreenFpsCount; mintSkip = w.ScreenFpsSkipCount; w.ScreenFpsCount = 0; w.ScreenFpsSkipCount = 0; } } } }