using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using DxLibDLL; namespace Action { static class Program { // プログラムは WinMain から始まります static int Main() { int PlayerX = 0, PlayerY = 0, JumpPower = 0; int red, green, blue, alpha; int CharMuki = 1, BackGraph, BackGraph2,CharGraph1, CharGraph6; int KabeKyori = 0; int stara1, stara2; DX.ChangeWindowMode(DX.TRUE); //ウィンドウ640,480 if( DX.DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1 ; // エラーが起きたら直ちに終了 } DX.SetTransColor(255, 0, 0); // 透過色を変更 // グラフィック『test1.bmp』をメモリにロード BackGraph = DX.LoadSoftImage("back.png"); BackGraph2 = DX.LoadGraph("back.png"); CharGraph1 = DX.LoadGraph("char1.png"); CharGraph6 = DX.LoadGraph("char6.png"); while (true) { // 画面に描かれているものをすべて消す DX.ClearDrawScreen(); //背景を描画する DX.DrawGraph(0, 0, BackGraph2, DX.FALSE); // 上下左右のキー入力に対応して x, y の座標値を変更する //左へ移動 if (DX.CheckHitKey(DX.KEY_INPUT_LEFT) == 1) { //壁を検索する for (stara1 = 0; stara1 < 7; stara1++) { for (stara2 = 16; stara2 < 63; stara2++) { DX.GetPixelSoftImage(BackGraph, PlayerX + 15 - stara1, PlayerY + stara2, out red, out green, out blue, out alpha); if (stara1 == 0 & red == 0 & green == 0 & blue == 0) //壁接触 { KabeKyori = 0; } else if (KabeKyori > stara1 & red == 0 & green == 0 & blue == 0) //壁にめり込みそうなとき移動速度を壁までの距離にする { KabeKyori = stara1; } else if (KabeKyori > stara1) //壁なし { KabeKyori = 8; } } } PlayerX -= KabeKyori; KabeKyori = 8; CharMuki = 6; DX.DrawGraph(PlayerX, PlayerY, CharGraph6, DX.TRUE); } //右へ移動 else if (DX.CheckHitKey(DX.KEY_INPUT_RIGHT) == 1) { //壁を検索する for (stara1 = 0; stara1 < 7; stara1++) { for (stara2 = 16; stara2 < 63; stara2++) { DX.GetPixelSoftImage(BackGraph, PlayerX + 33 + stara1, PlayerY + stara2, out red, out green, out blue, out alpha); if (stara1 == 0 & red == 0 & green == 0 & blue == 0) //壁接触 { KabeKyori = 0; } else if (KabeKyori > stara1 & red == 0 & green == 0 & blue == 0) //壁にめり込みそうなとき移動速度を壁までの距離にする { KabeKyori = stara1; } else if (KabeKyori > stara1) //壁なし { KabeKyori = 8; } } } PlayerX += KabeKyori; KabeKyori = 8; CharMuki = 1; DX.DrawGraph(PlayerX, PlayerY, CharGraph1, DX.TRUE); } //待機 else { if (CharMuki == 6) DX.DrawGraph(PlayerX, PlayerY, CharGraph6, DX.TRUE); if (CharMuki == 1) DX.DrawGraph(PlayerX, PlayerY, CharGraph1, DX.TRUE); } PlayerY -= JumpPower; // 落下処理 JumpPower -= 1; // 落下加速度を加える //床を検索する for (stara1 = 0; stara1 < 480; stara1++) { for (stara2 = 16; stara2 < 32; stara2++) { DX.GetPixelSoftImage(BackGraph, PlayerX + stara2, PlayerY + 64 + stara1, out red, out green, out blue, out alpha); if (stara1==0 & red == 0 & green == 0 & blue == 0 ) { JumpPower = 0; //着地 } else if (-JumpPower>stara1 & red == 0 & green == 0 & blue == 0) { JumpPower = -stara1; //床にめり込みそうなとき落下加速度を床までの距離にする } } } // ジャンプボタンを押していて、地面についていたらジャンプ for (stara1 = 16; stara1 < 32; stara1++) { DX.GetPixelSoftImage(BackGraph, PlayerX + stara1, PlayerY + 64, out red, out green, out blue, out alpha); if (DX.CheckHitKey(DX.KEY_INPUT_SPACE) == 1 & red == 0 & green == 0 & blue == 0) { JumpPower = 10; break; } } // 裏画面の内容を表画面に反映させる DX.ScreenFlip(); // 待たないと処理が早すぎるのでここで20ミリ秒待つ DX.WaitTimer(20); // Windows システムからくる情報を処理する if (DX.ProcessMessage() == -1) break; // ESCキーが押されたらループから抜ける if (DX.CheckHitKey(DX.KEY_INPUT_ESCAPE) == 1) break; } DX.DxLib_End() ; // DXライブラリ使用の終了処理 // 使い終わったら解放 DX.DeleteSoftImage(BackGraph); return 0 ; // ソフトの終了