#include "DxLib.h" #include #define WINDOW_WIDTH 640 //横ウィンドウの大きさ #define WINDOW_HEIGHT 480 //縦ウィンドウの大きさ #define GRA 1 //重力加速度 #define MAXSPEEDY 20 //自由落下時の最高速度 #define BLOCK 32 //タイルの大きさ[px] #define CENTER 288 //主人公の中央座標 #define HERO_SIZE 32 //主人公の大きさ #define WIDTH_SIZE 50 //横スクロールの大きさ #define HEIGHT_SIZE 15 //縦スクロールの大きさ //イメージのストラクト struct SImg { int migi; int hidari; //int migiattack; //int hidariattack; int kabe; int yuka; int goal; int gameover; int title; int clear; int haikei; int null; }; //プレイヤーのストラクト struct SPlayer { int x, y; //主人公のX,Y座標 int vx,vy; //主人公のX,Y軸方向の速度 int jfly; //飛んでいるかどうかの判定 0:着地 それ以外:空中 int dire; //向き 0:右向き 1:左向き //int attack; //攻撃中か否か 0:通常 1:攻撃中 }; struct SImg img; struct SPlayer player; int map[WIDTH_SIZE][HEIGHT_SIZE]; char keyState[256]; //マップチップ読み込み void Map(void){ FILE *file; if(( file = fopen("map/map.txt","r")) == NULL ){ OutputDebugString( "MapData Read Error\n" ); //デバック画面に表示 exit( EXIT_FAILURE ); } for( int j=0 ; j < HEIGHT_SIZE ; j++ ){ for( int i=0 ; i < WIDTH_SIZE ; i++ ){ fscanf(file, "%d,", &map[i][j]); } } fclose(file); } //画像読み込み void image(void){ img.migi = LoadGraph("img/migi.png"); img.hidari = LoadGraph("img/hidari.png"); //img.migiattack = LoadGraph("img/migiattack.png"); //img.hidariattack = LoadGraph("img/hidariattack.png"); img.yuka = LoadGraph("img/yuka.png"); img.title = LoadGraph("img/title.png"); img.haikei = LoadGraph("img/haikei.png"); img.null = LoadGraph("img/null.png"); } //関数の初期化 void init(void){ player.x = 0; player.y = 416; //プレイヤーの初期座標 player.vx = 0; player.vy = 0; player.jfly = 0; player.dire = 0; //player.attack = 0; } //タイトル画面の表示 void title(void){ ClearDrawScreen(); DrawGraph( 0 , 0 , 【穴埋め1】 , TRUE ) ; //タイトル画面を描画 ScreenFlip(); while( keyState[【穴埋め2】] != 1 && keyState[ KEY_INPUT_X ] != 1){ //エスケープキー、Xが押されると GetHitKeyStateAll(keyState); if( ProcessMessage() == -1 ){ break ; // エラーが発生したらループを抜ける } } } void move(void){ player.vx = 0; //横の速度リセット if( player.jfly != 0 && player.vy < MAXSPEEDY ){ //重力 player.vy += GRA; } GetHitKeyStateAll(keyState);//キーボードの状態を取得 //if(【穴埋め】 == 0){ if(keyState[【穴埋め1】]){ if(player.x > 0){ //プレイヤーの左向き操作 player.x -= 4; } player.dire = 1; //左向いてます } else if(keyState[KEY_INPUT_RIGHT]){ if(player.x <= WINDOW_WIDTH-HERO_SIZE ){ //プレイヤーの右向き操作 【穴埋め2】; } player.dire = 0; //右向いてます } //} if(player.jfly == 0 && keyState[ KEY_INPUT_X ]){ //ジャンプ 【穴埋め1】 = 1; //飛んでます player.vy =- 15; } 【穴埋め1】 //x軸方向移動します player.y += player.vy; //y軸方向移動します if(【穴埋め2】){ //プレイヤーのy座標が画面サイズ-ブロック一マスより大きいとき player.jfly = 0; //着地状態にする player.vy = 0; //落下速度を0にする 【穴埋め3】 } else{ player.jfly = 1; //それ以外の時は空にいるよ! } } /*void attack(void){ GetHitKeyStateAll(keyState); if(keyState[KEY_INPUT_S]){ if( player.attack == 0 ){ player.attack = 1; } } else{ 【穴埋め】 } }*/ void draw(void){ ClearDrawScreen(); //画面クリア for(int i=0; i= 0){ //横の部分より狭い範囲でマップ判断 switch(map[i][j]){ case 0: break; case 1: DrawGraph(i*BLOCK,j*BLOCK,img.yuka,TRUE);break; //床 default:DrawGraph(i*BLOCK,j*BLOCK,img.null,TRUE);break; //ぬる } } else if(j == 14){ DrawGraph(i*BLOCK,j*BLOCK,img.yuka,TRUE); } } } if(【穴埋め2】== 0){ //主人公書くよ DrawGraph(player.x,player.y,img.migi,TRUE); //右左その辺 } else{ DrawGraph(player.x,player.y,img.hidari,TRUE); } /*if(player.attack){ if(player.dire == 0){ //主人公攻撃書くよ DrawGraph(【穴埋め】,player.y,img.migiattack,TRUE); //右左その辺 } else{ DrawGraph(【穴埋め】,player.y,img.hidariattack,TRUE); } }*/ //デバッグ用の変数描画ここから int white=GetColor(255,255,255); DrawFormatString(450,20,white,"X:%4d",player.x); DrawFormatString(550,20,white,"Y:%4d",player.y); DrawFormatString(450,40,white,"VX%4d",player.vx); DrawFormatString(550,40,white,"VY%4d",player.vy); if(player.dire){ DrawString(450,80,"左向き",white) ; } else{ DrawString(450,80,"右向き",white) ; } if(player.jfly){ DrawString(550,80,"空中",white) ; } else{ DrawString(550,80,"着地",white) ; } /*if(player.attack){ DrawString(450,100,"攻撃",white) ; } else{ DrawString(450,100,"通常",white) ; }*/ ScreenFlip(); } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR ipCmdLine, int nShowCmd) { //ウィンドウのタイトルを変更 SetMainWindowText("action"); //ウィンドウモードに変更 ChangeWindowMode(TRUE); //解像度とカラービット数を設定 SetGraphMode(WINDOW_WIDTH, WINDOW_HEIGHT, 32); SetWindowSizeChangeEnableFlag(TRUE) ; //初期化に失敗したらやめる if(DxLib_Init()== -1){return -1;} ////マップチップ読み込み Map(); //画像のロード image(); //変数の初期化 init(); SetDrawScreen(DX_SCREEN_BACK); //タイトル表示 title(); /************************** ゲームループ *****************************/ while(ProcessMessage() == 0&&CheckHitKey(KEY_INPUT_ESCAPE)==0){ //動き move(); //攻撃 //attack(); 攻撃は追加資料で //描画 draw(); } /************************ ゲームループおわり ************************/ //DXライブラリ使用の終了処理 DxLib_End(); //SOFTの終了 return 0; }