他のマップにチェンジする(マップを左右にスクロールさせる継)
Posted: 2011年7月06日(水) 17:05
掲示板が重くなったので、いちおう前回のタイトルの問題は解決したのでマップチェンジについてでその続きのトピックを立てさせていただきました。
マップのスクロールは解決できたので、現在のマップによってチェンジするマップが変わるようなコードを組む問題を聞いていましたが、
とりあえず決められたマップに変えるコードはint MapChangeNo[4];をStageDataに加えて作れました。
ステージデータを
{ MapData1, MAP_WIDTH, MAP_HEIGHT, 32, 288, {-1,1,-1,-1}, 0,0,0,0,},のようにして
{-1,1,-1,-1}, の部分をMapChangeNo[4]にして、
[0]前のマップ [1]次のマップ [2]他のマップ1 [3]他のマップ2 となるようにし、
その中に変更するマップ数を入れ、-1だったらマップ移動をしないようにしました。
前へもどる扉へ入ったらWhereMapを0、
次へ行く扉へ入ったらWhereMapを1、
別マップ1への扉ならWhereMapを2、
別マップ3への扉ならWhereMapを3を代入してから、マップがチェンジするタイミングで
移動しようとするマップ数が-1ではない時だけ (StageData.MapChangeNo[WhereMap] != -1 )
StageData = StageDataSelect[StageData.MapChangeNo[WhereMap]];で、MapChangeNoをWhereMapに合わせて変更できるようにしました。
マップチェンジのほうはこれで良いと思うのですが、
ステージテーブルにマップチップの画像をそのままいれこまない方法についてです。
ステージデータの{ MapData1, MAP_WIDTH, MAP_HEIGHT, 32, 288, {-1,1,-1,-1}, 0,0,0,0,},の最後の0000の部分がマップの画像なのですが、
その部分に後からロードした画像番号を代入する場合、ステージ1と2の両方で違う画像を代入しなければならないので、
この部分もテーブルのようにするのでしょうか?
そうなら、ステージデータの最後の4つだけをステージごとに分けたテーブルを作ることはできるのでしょうか?
画像番号を大に代入していないコードです。画像が表示されません
マップのスクロールは解決できたので、現在のマップによってチェンジするマップが変わるようなコードを組む問題を聞いていましたが、
とりあえず決められたマップに変えるコードはint MapChangeNo[4];をStageDataに加えて作れました。
ステージデータを
{ MapData1, MAP_WIDTH, MAP_HEIGHT, 32, 288, {-1,1,-1,-1}, 0,0,0,0,},のようにして
{-1,1,-1,-1}, の部分をMapChangeNo[4]にして、
[0]前のマップ [1]次のマップ [2]他のマップ1 [3]他のマップ2 となるようにし、
その中に変更するマップ数を入れ、-1だったらマップ移動をしないようにしました。
前へもどる扉へ入ったらWhereMapを0、
次へ行く扉へ入ったらWhereMapを1、
別マップ1への扉ならWhereMapを2、
別マップ3への扉ならWhereMapを3を代入してから、マップがチェンジするタイミングで
移動しようとするマップ数が-1ではない時だけ (StageData.MapChangeNo[WhereMap] != -1 )
StageData = StageDataSelect[StageData.MapChangeNo[WhereMap]];で、MapChangeNoをWhereMapに合わせて変更できるようにしました。
マップチェンジのほうはこれで良いと思うのですが、
ステージテーブルにマップチップの画像をそのままいれこまない方法についてです。
ステージデータの{ MapData1, MAP_WIDTH, MAP_HEIGHT, 32, 288, {-1,1,-1,-1}, 0,0,0,0,},の最後の0000の部分がマップの画像なのですが、
その部分に後からロードした画像番号を代入する場合、ステージ1と2の両方で違う画像を代入しなければならないので、
この部分もテーブルのようにするのでしょうか?
そうなら、ステージデータの最後の4つだけをステージごとに分けたテーブルを作ることはできるのでしょうか?
画像番号を大に代入していないコードです。画像が表示されません
#include "DxLib.h"
//構造体
// プレイヤー構造体
struct Playerdata{
int X, Y, img;
}Player;
////
int Key[256];
int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1) GetHitKeyStateAll_InputKey[i]++;
else GetHitKeyStateAll_InputKey[i]=0;
}
return 0;
}
#define SCREEN_WIDTH 640
#define SCREEN_HEIGHT 480
#define CHIP_SIZE 32
#define MAP_PIXEL_WIDTH 2560
#define MAP_PIXEL_HEIGHT 480
#define MAP_WIDTH (MAP_PIXEL_WIDTH/CHIP_SIZE)
#define MAP_HEIGHT (MAP_PIXEL_HEIGHT/CHIP_SIZE)
// マップのデータ
int MapData1[ MAP_HEIGHT*MAP_WIDTH ] =
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 0, 0, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
} ;
#define MAP_PIXEL_WIDTH2 2560
#define MAP_PIXEL_HEIGHT2 480
#define MAP_WIDTH2 (MAP_PIXEL_WIDTH2/CHIP_SIZE)
#define MAP_HEIGHT2 (MAP_PIXEL_HEIGHT2/CHIP_SIZE)
int MapData2[ MAP_HEIGHT2*MAP_WIDTH2 ] =
{
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
} ;
/////
int ScrollX,OnGround;
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
// ステージ参照マクロ
#define STAGE_CHIP(y,x) (StageData.stage[(y)*(StageData.width)+(x)])
#define STAGE_CHIPC(y,x) (StageData.stage[(y)/CHIP_SIZE*(StageData.width)+(x)/CHIP_SIZE])
// ステージ構造体
typedef struct {
int *stage; //マップのポインタ
int width; //横サイズ
int height; //縦サイズ
int arriveX; //到着するX座標
int arriveY; //到着するY座標
int MapChangeNo[4]; //[0]前のマップ [1]次のマップ [2]他のマップ1 [3]他のマップ2
int haikei1 ;
int haikei2 ;
int chip[2] ;
} StageData_t;
// ステージテーブル
StageData_t StageDataSelect[2] = {
{ MapData1, MAP_WIDTH, MAP_HEIGHT, 32, 288, {-1,1,-1,-1}, 0,0,0,0,}, //マップ1
{ MapData2, MAP_WIDTH2, MAP_HEIGHT2, 32, 288, {0,-1,-1,-1}, 0,0,0,0,}, //マップ2
};
// マップ配列参照用のデータと初期化。
StageData_t StageData = StageDataSelect[0];
// 画像をロード
//マップ画像
int lenga1 = LoadGraph( "image/map/lenga1.png" );
int conc1 = LoadGraph( "image/map/conc1.png" );
int conc2 = LoadGraph( "image/map/conc2.png" );
int yakei1 = LoadGraph( "image/yakei.png" );
int yakei2 = LoadGraph( "image/yakei2.png" );
int hekiga1 = LoadGraph( "image/hekiga1.png" );
int testimg = LoadGraph( "image/testimg.png" );
//キャラ関係
int chara[24]; //キャラ画像
LoadDivGraph( "image/chara.png" , 24 , 6 , 4 , 64 , 64 , chara );//プレイヤー
int HPgazou[11]; //HPの画像
LoadDivGraph( "image/HP.png" , 11 , 1 , 11 , 224 , 32 , HPgazou );//体力
//ステータスバー
int statesbar = LoadGraph( "image/statesbar.png" );
//ワイプ用
int MapChange = 0 ;
int WhereMap = 0 ; //1=前のマップへ 2=次のマップへ 3=それ以外のマップへ
int wipestart = 0 ; //1=フェードアウト開始 2=フェードイン開始
int wipecount = 0 ; //ワイプ画像アニメーション用
int wipeimg ; //ワイプ画像
int wipe1[20]; //ワイプ1(四角)
LoadDivGraph( "image/wipe/wipe1.png" , 20 , 20 , 1 , 32 , 32 , wipe1 );
//関数
Player.X = 32 , Player.Y = 288 ; //プレイヤー座標
int PlayerViewX ;
int CameraX;
int JumpPower = 0 ; //ジャンプパワー
int Jump = 0 ; //ジャンプ状態か
int walk = 0 ; //歩いているか
int hosei = 0 ; //補正しているか
int walkdirection = 1 ; //歩く向き
int walkanime = 0 ; //歩くアニメーション用
int haikeiX1 = 0 ; //背景1のX座標
int haikeiX2 = 640 ; //背景2のX座標
int HP = 10 ; //HP
int HPimg ; //HP画像
int i , j ; //座標用
while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
//↑メッセージ処理 ↑画面をクリア ↑入力状態を保存 ↑ESCが押されていない
//ココから
if( Key[ KEY_INPUT_RIGHT ] >= 1 ) { //右キーが押されて
if(STAGE_CHIPC(Player.Y,Player.X + 48) == 0 //右が壁じゃなかったら
&&STAGE_CHIPC(Player.Y+31,Player.X + 48) == 0
&&STAGE_CHIPC(Player.Y+32,Player.X + 48) == 0
&&STAGE_CHIPC(Player.Y+63,Player.X + 48) == 0)
Player.X+=3 ; //右に動く
walkdirection = 1 ;
}
if( Key[ KEY_INPUT_RIGHT ] >= 1 && Jump== 0 ){ // 右キーが押されていてジャンプ状態じゃなかったら
walkanime++;
Player.img=chara[(walkanime/10)%4 +1];//右に歩くアニメ
}
if( walkdirection == 1 && ( Key[ KEY_INPUT_RIGHT ] == 0 )&& Jump== 0 )// 右キーが離されてジャンプ状態じゃなかったら
Player.img=chara[0]; //右を向く
if( Key[ KEY_INPUT_LEFT ] >= 1 ){// 左キーが押されて
if(STAGE_CHIPC(Player.Y,Player.X+15) == 0
&&STAGE_CHIPC(Player.Y+31,Player.X+15) == 0
&&STAGE_CHIPC(Player.Y+32,Player.X+15) == 0
&&STAGE_CHIPC(Player.Y+63,Player.X+15) == 0
||Player.X - CameraX < 0 ) //左が壁じゃなかったら
Player.X-=3 ; //左に動く
walkdirection = 0 ;
}
if( Key[ KEY_INPUT_LEFT ] >= 1 && Jump== 0 ){ // 左キーが押されていてジャンプ状態じゃなかったら
walkanime++;
Player.img=chara[(walkanime/10)%4 +7];//右に歩くアニメ
}
if( walkdirection == 0 && ( Key[ KEY_INPUT_LEFT ] == 0 ) && Jump== 0 ) // 左キーが離されてジャンプ状態じゃなかったら
Player.img=chara[6]; //左を向く
if( Key[ KEY_INPUT_RIGHT ] >= 1 && Key[ KEY_INPUT_LEFT ] >= 1){//左右両方押されてたら右向く
Player.img=chara[0];
walk = 0 ;
}
//マップのスクロール///////////////////////////////////////////////////////
CameraX = Player.X - SCREEN_WIDTH/2 + 32;
//ステージのスクロール
if(CameraX < 0)CameraX = 0;
if(CameraX > (StageData.width*CHIP_SIZE)-SCREEN_WIDTH) CameraX = (StageData.width*CHIP_SIZE)-SCREEN_WIDTH;
//背景表示座標をスクロール
if( Player.X - CameraX == SCREEN_WIDTH/2 - 32 && Key[ KEY_INPUT_RIGHT ] >= 1) //キャラが画面の中心にいて右に動いていて
if(STAGE_CHIPC(Player.Y,Player.X + 48) == 0 //右側が壁でないとき
&&STAGE_CHIPC(Player.Y+31,Player.X + 48) == 0
&&STAGE_CHIPC(Player.Y+32,Player.X + 48) == 0
&&STAGE_CHIPC(Player.Y+63,Player.X + 48) == 0){
haikeiX1--; //背景1と2を左にスクロール
haikeiX2--;
}
if( Player.X - CameraX == SCREEN_WIDTH/2 - 32 && Key[ KEY_INPUT_LEFT ] >= 1) //キャラが画面の中心にいて左に動いていて
if(STAGE_CHIPC(Player.Y,Player.X+15) == 0 //左側が壁でない時
&&STAGE_CHIPC(Player.Y+31,Player.X+15) == 0
&&STAGE_CHIPC(Player.Y+32,Player.X+15) == 0
&&STAGE_CHIPC(Player.Y+63,Player.X+15) == 0){
haikeiX1++; //背景1と2を左にスクロール
haikeiX2++;
}
PlayerViewX = Player.X - CameraX;
///////////////////////////////////////////////////////////////
// ジャンプ状態じゃなく、ジャンプボタンを押して地面についていて上が天井じゃなかったらジャンプ
if ( Jump==0 && (Key[KEY_INPUT_SPACE] >=1 ) && JumpPower <= 0) {
if(STAGE_CHIPC(Player.Y+64,Player.X + 16) != 0
||STAGE_CHIPC(Player.Y+64,Player.X + 47) != 0)
{
JumpPower = 16 ;
Jump = 1 ;
}
}
//ジャンプ状態で天井についてなく右向きなら右ジャンプの画像
if ( walkdirection == 1 && Jump == 1 )
if(STAGE_CHIPC(Player.Y-1,Player.X + 16) == 0
&&STAGE_CHIPC(Player.Y-1,Player.X + 47) == 0){
Player.img=chara[5];
}
//ジャンプ状態で天井についてなく左向きなら左ジャンプの画像
if ( walkdirection == 0 && Jump == 1 )
if(STAGE_CHIPC(Player.Y-1,Player.X + 16) == 0
&&STAGE_CHIPC(Player.Y-1,Player.X + 47) == 0){
Player.img=chara[11];
}
// ジャンプ中ならキャラの落下処理
if(Jump == 1){
Player.Y -= JumpPower ;
JumpPower -= 1 ;
}
//補正//
//床にめりこんだら上に補正
if(JumpPower < 0) {
if(STAGE_CHIPC(Player.Y+64,Player.X + 16) != 0
||STAGE_CHIPC(Player.Y+64,Player.X + 47) != 0)
{
Player.Y = ((Player.Y+65)/32) * 32 - 65 + 1 ;
}
}
//天井にめりこんだら下に補正
if(JumpPower > 0) {
if(STAGE_CHIPC(Player.Y-1,Player.X + 16) != 0
||STAGE_CHIPC(Player.Y-1,Player.X + 47) != 0)
{
Player.Y = ((Player.Y+65)/32) * 32 - 65 + 32 + 1 ;
JumpPower = 0 ;
}
}
//右の壁にめりこんだら左に補正
if(STAGE_CHIPC(Player.Y,Player.X + 48) != 0
||STAGE_CHIPC(Player.Y+63,Player.X + 48) != 0)
{
Player.X = ((Player.X+65)/32) * 32 - 65 + 16 + 1 ;
}
//左の壁にめりこんだら右に補正
if(STAGE_CHIPC(Player.Y,Player.X+15) != 0
||STAGE_CHIPC(Player.Y+63,Player.X+15) != 0)
{
Player.X = ((Player.X+65)/32) * 32 - 65 + 16 + 1 ;
}
// ジャンプ中にキャラが地面についたら落下をやめる
if(Jump == 1 && JumpPower < 0 ) {
if(STAGE_CHIPC(Player.Y+64,Player.X + 16) != 0
||STAGE_CHIPC(Player.Y+64,Player.X + 47) != 0)
{
JumpPower = 0 ;
Jump = 0 ;
}
}
//歩いているときに踏み外したらジャンプ状態にする
if(Jump == 0) {
if(STAGE_CHIPC(Player.Y+64,Player.X + 16) == 0
&&STAGE_CHIPC(Player.Y+64,Player.X + 47) == 0)
{
Jump = 1 ;
}
}
///////////////ワイプ//////////
if(Key[ KEY_INPUT_Q ] == 1 && wipestart==0 ){ //前へ戻るワイプの始まり(扉1)
WhereMap=0;
wipestart=1;
}
if(Key[ KEY_INPUT_W ] == 1 && wipestart==0 ){ //次へ行くワイプの始まり(扉2)
WhereMap=1;
wipestart=1;
}
if(Key[ KEY_INPUT_E ] == 1 && wipestart==0 ){ //別へ行くワイプの始まり(扉3)
WhereMap=2;
wipestart=1;
}
if(Key[ KEY_INPUT_R ] == 1 && wipestart==0 ){ //別へ行くワイプの始まり(扉4)
WhereMap=3;
wipestart=1;
}
if(wipestart==1 ){ //ワイプが始まったらカウント++
wipecount++;
wipeimg=wipe1[wipecount];
}
if(wipestart==1 && wipecount == 20 ){ //カウントが16超えたらカウント--
MapChange=1; //ここでマップチェンジ
wipestart=2; //ワイプ戻り始め
}
//////////↓マップチェンジ
//前か次のマップへ
if( MapChange==1 && StageData.MapChangeNo[WhereMap] != -1 ){
StageData = StageDataSelect[StageData.MapChangeNo[WhereMap]];
Player.X = StageData.arriveX , Player.Y = StageData.arriveY ;
walkdirection = 1 ;
haikeiX1 = 0 ;
haikeiX2 = 640 ;
}
/////////↑マップチェンジ
if(wipestart==2 ){
wipecount--;
wipeimg=wipe1[wipecount];
}
if(wipestart==2 && wipecount == 0){
wipecount=0;
wipestart=0;
MapChange = 0 ;
WhereMap = 0 ;
}
//↓描画↓//////////////////////////////
//マップを描画
//背景を描画
DrawGraph( haikeiX1, 0, StageData.haikei1, FALSE ); // 背景1を表示
DrawGraph( haikeiX2, 0, StageData.haikei2, FALSE ); // 背景2を表示
for( i = 0 ; i < StageData.height ; i ++ )
{
for( j = 0 ; j < StageData.width ; j ++ )
{
if( STAGE_CHIP(i,j) != 0 ) //1以上のとき数値に合った画像
{
DrawGraph( j*CHIP_SIZE-CameraX, i*CHIP_SIZE , StageData.chip[STAGE_CHIP(i,j)-1] , FALSE ) ;
}
}
}
//HP
HPimg = HPgazou[HP]; //HP数値にあわせてHP画像
if( Key[ KEY_INPUT_D ] == 1 ) //Dを押したらHPを1へらす
HP -= 1;
if(HP<0) //HPは0以下にならない
HP=0;
if(Player.Y >= 416) //プレイヤーが落ちたらHPが0
HP=0;
//画像
DrawGraph(PlayerViewX, Player.Y, Player.img, TRUE ); // x,y の位置にキャラを描画
//ステータスバー背景
for(int y=0 ; y<1 ; y++){
for(int x=0 ; x<20 ; x++){
DrawGraph(x*32+0,y*32+418,statesbar,FALSE);
}
}
DrawGraph( 0, 420, HPimg, TRUE ); // HPバー
//ワイプ表示
for(int y=0 ; y<15 ; y++){
for(int x=0 ; x<20 ; x++){
DrawGraph(x*32+0,y*32+0,wipeimg,TRUE);
}
}
ScreenFlip();
}
DxLib_End();
return 0;
}