マップスクロールについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
分からない・・

マップスクロールについて

#1

投稿記事 by 分からない・・ » 12年前

私は、VC++2010 で DXライブラリー を使用しています。

ゲーム製作の一環として、マップスクロールに挑戦しているのですが、
壁抜けしてしまいます。(特にブロックの角)
おそらくソースの中の、
マップ確認のとこが原因だと思うのですが、
何がいけないか分かりません・・・


-------------------------------ソース----------------------------------
codeタグを付与しておきました。 by softya(ソフト屋)

コード:

#include"reiDX.h"
#define MAX_SHOT_COUNT 3
#define MAX_SHOT 30
#define FloorY 390

//メニューフラグ
int SPoint = 0 ;
int MenuMode=0;

//マップ1定数
#define MAP_X1 50
#define MAP_Y1 30		//このステージのサイズ
#define MAP_Z1 3		//このコースに何ステージあるか
//テスト変数
	int a=0;
	//ステージがどこか表すグラフ
	int NowStage=0;
	//forに使う変数
	int j,i;
	//背景変数
	int BackCMode=0;
	//乱数
#define R GetRand(255)
	//マップ系変数
	int MapDate1[MAP_Z1][MAP_Y1][MAP_X1]={
		{
		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,3,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,1,0,0,0,1,
		1,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,
		1,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,
		1,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,
		1,2,2,2,1,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,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,
		1,0,0,0,1,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,3,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,1,
		1,0,0,0,1,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,3,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,1,
		1,0,0,0,1,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,3,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,1,
		1,1,1,1,1,1,1,1,1,3,0,0,0,0,0,0,0,1,1,1,1,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,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,1,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,1,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,1,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,1,
		1,0,0,0,0,0,0,0,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,1,
		1,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,0,0,0,1,1,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,1,5,5,5,1,0,1,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,1,5,5,5,1,0,0,1,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,1,5,5,5,1,0,0,0,1,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,1,5,5,5,1,0,0,0,0,1,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,1,5,5,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,2,2,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,0,0,0,0,0,0,1,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,2,0,2,2,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,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,2,0,2,2,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,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,2,0,2,2,1,0,0,0,0,0,0,4,4,0,1,0,0,0,0,0,0,0,0,0,1,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,2,0,2,2,2,0,0,1,0,0,4,4,4,4,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,2,2,0,0,1,0,0,4,4,4,4,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,2,2,0,0,1,0,0,4,4,4,4,1,0,0,0,0,0,0,0,0,0,0,0,0,1,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,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,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,4,4,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,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,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,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,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,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,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,2,0,0,0,0,0,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,1,
		1,0,0,0,1,5,5,1,0,2,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,1,
		1,2,2,2,1,1,1,1,2,2,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,1,
		1,6,6,6,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,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,6,6,6,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,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,6,6,6,6,1,0,0,0,0,0,0,0,0,0,1,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,1,
		1,6,6,6,6,1,0,0,0,0,0,0,0,0,0,1,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,1,
		1,6,6,6,6,1,0,0,0,0,0,0,0,0,0,1,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,1,
		1,6,6,6,6,1,0,0,0,0,0,0,0,0,0,1,0,0,1,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,1,
		1,6,6,6,6,1,0,0,0,0,0,0,0,0,0,1,0,0,1,5,5,5,5,5,5,5,5,5,5,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,6,6,6,6,1,0,0,0,0,0,0,0,0,0,1,0,0,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,1,
		1,6,6,6,6,6,1,0,0,0,0,0,0,0,0,1,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,1,
		1,6,6,6,6,6,6,1,0,0,0,0,0,0,0,1,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,1,
		1,6,6,6,6,6,6,1,0,0,0,0,0,0,0,1,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,1,
		1,6,6,6,6,6,6,1,1,1,1,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,6,6,6,6,6,6,1,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,1,
		1,6,6,6,6,6,6,1,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,1,
		1,6,6,6,6,6,6,3,3,3,3,3,3,3,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,1,
		1,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,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,2,3,3,3,3,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,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,3,3,3,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,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,3,3,3,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,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,3,3,3,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,1,
		1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,3,3,3,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,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
		},
	//----------------------------------------------------------------3
		{
		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,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,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,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,1,
		1,3,3,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,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,1,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,1,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,1,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,1,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,1,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,1,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,1,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,1,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,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,1,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,1,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,1,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,1,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,3,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,3,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,3,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,3,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,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,3,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,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
		1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,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,1,1,1
		},
	};
	//マップ座標
	int map_X1=270,map_Y1=170;
	int MSetX=0,MSetY=0;
	int OldMX,OldMY;				//1ループ前の座標
	//プレイヤーデータ
	int WinMode=0;                  //水に入ったとき
	int PlayerMode = 0;             //プレイヤーの向き
	int 	PlayerX=640/2,
			PlayerY=480/2;//プレイヤーの座標
	double HedAngle=0;              //頭の角度
	double angle=0;					//銃の角度
	int ShotCount=0;				//ショットを打つタイミング
	int bacTining;                  //緊急回避の
	int OldX,OldY;				//1ループ前の座標

	int DamageCheck=0;
	int PlayerHP=1000;				//プレイヤーのHP 
	//プレイヤービームデータ
	int ShotX[MAX_SHOT],ShotY[MAX_SHOT],ShotValid[MAX_SHOT];
	double beamAngle[MAX_SHOT];
	double sppedX = 0,sppedY=0;
	int SHOT=0;
	int UpPwer=50;
	//エフェクトデータ
	int efectX[MAX_SHOT];
	int efectY[MAX_SHOT];
	int efectC[MAX_SHOT];
	int efectV[MAX_SHOT];
	//マグマデータ
	double LavaNum;
	//グラフィックロード
	int efectb[9];
	int Lava1[6];
	int Down_Map[6];
	int ranthar = LoadGraph( "Planet invasion\\rantha.bmp" ) ;
	int MyBeam = LoadGraph( "Planet invasion\\myBeam.bmp" ) ;
	int PlayerH = LoadGraph( "Planet invasion\\PlayerHed.bmp" ) ;
	int PlayerB[6];
	int MapCip = LoadGraph( "Planet invasion\\map_cip1.bmp" ) ;
	int MapBCip = LoadGraph( "Planet invasion\\map_cip2.bmp" ) ;
	int MapBCip2 = LoadGraph( "Planet invasion\\map_cip3.bmp" ) ;
	int enemy1 = LoadGraph( "Planet invasion\\enemy_test.bmp" ) ;
	//効果音ロード
	int kaihi = LoadSoundMem( "GoToBack.wav" ) ;
	int SoundBeam = LoadSoundMem( "S_Beam1.wav" ) ;
	int BGM1 = LoadSoundMem( "test_BGM.mp3" ) ;
	int BAttack = LoadSoundMem( "Beam_attack.mp3" ) ;
	int Win = LoadSoundMem( "水in.wav" ) ;
	//キー判定ハンドル
	int Key;

	//-----------敵データ------------------
	int enemyX1[10],enemyY1[10],enemyV1[10];
	int OldEX[10],OldEY[10];


//関数プロトタイプ宣言
	int PlayerForGroundScrolle();		//プレイヤー地上用操作関数
	int DrawGameScleen(int Ch);	//描画関数
	int EnemyTest();
	int MenuSet();
//-----------------------------------------------------------
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
						 LPSTR lpCmdLine, int nCmdShow ){
	   int flag;
        flag=MessageBox(
                NULL ,
                TEXT("フルスクリーンモードで起動しますか?") ,
                TEXT("スクリーン設定") , 
                MB_YESNO | MB_ICONQUESTION );
       if(flag==IDNO){
                winmode;
				SetGraphMode( 640 , 480 , 8 ) ;
	   }
	   if(flag==IDYES) SetGraphMode( 640 , 480 , 32 ) ;
	 LavaNum=0;
	
	//SetDrawScreen(DX_SCREEN_BACK);
	//SetUseMenuFlag( 1 ) ;
	DXint;
	LoadDivGraph("Planet invasion\\bakhatu.bmp",8,8,1,30,30,efectb);
	LoadDivGraph("Planet invasion\\PlayerBoby.bmp",6,6,1,20,54,PlayerB);
	LoadDivGraph("Planet invasion\\マグマ.bmp",6,6,1,20,30,Lava1);
	LoadDivGraph("Planet invasion\\WOWN_MAP.bmp",6,6,1,20,30,Down_Map);
	//グラフィックロード
	 
	 ranthar = LoadGraph( "Planet invasion\\rantha.bmp" ) ;
	 MyBeam = LoadGraph( "Planet invasion\\myBeam.bmp" ) ;
	 PlayerH = LoadGraph( "Planet invasion\\PlayerHed.bmp" ) ;
	 MapCip = LoadGraph( "Planet invasion\\map_cip1.bmp" ) ;
	 MapBCip = LoadGraph( "Planet invasion\\map_cip2.bmp" ) ;
	 MapBCip2 = LoadGraph( "Planet invasion\\map_cip3.bmp" ) ;
	 enemy1 = LoadGraph( "Planet invasion\\enemy_test.bmp" ) ;
	//効果音ロード
	 kaihi = LoadSoundMem( "GoToBack.wav" ) ;
	 SoundBeam = LoadSoundMem( "S_Beam1.wav" ) ;
	 BGM1 = LoadSoundMem( "test_BGM.mp3" ) ;
	 BAttack = LoadSoundMem( "Beam_attack.mp3" ) ;
	 Win = LoadSoundMem( "水in.wav" ) ;
	for(int i = 0 ; i<MAX_SHOT ; i++){
		efectX[i]=0;
		efectY[i]=0;
		efectC[i]=0;
		efectV[i]=0;
	}
	
	for(int i = 0 ; i<MAX_SHOT ; i++){
		ShotX[i]=PlayerX;
		ShotY[i]=PlayerY;
		ShotValid[i]=0;
	}
	for(int i = 0 ; i<10 ; i++){
	enemyX1[i]=GetRand(600);
	enemyY1[i]=GetRand(600);
	enemyV1[i]=1;
	}
	//-*-----------------------------------------------------------------------------
	//BGM操作
		PlaySoundMem( BGM1 , DX_PLAYTYPE_LOOP );
		
	DXloop{
		if(PlayerForGroundScrolle()==-1)goto END;
		 EnemyTest();
	//描画
		DrawGameScleen(1);
	}
	END:
	DXend;
}

int EnemyTest(){
			//メニュー選択
		if(MenuMode==1){
		
	}
	else
	{
		//敵(テスト)
		for(j=0;j<10;j++){
			OldEX[j]=enemyX1[j];
			OldEY[j]=enemyY1[j];
			enemyX1[j]+=sppedX;
			enemyY1[j]-=sppedY;


			if(enemyV1[j]==1)Sgoit(PlayerX,PlayerY,&enemyX1[j],&enemyY1[j],j+1.5,j);
			if(rattackc(PlayerX,PlayerY,20,54,enemyX1[j],enemyY1[j],20,20)==1&&enemyV1[j]==1&&
				 bacTining==0){
				PlayerHP--;
				DamageCheck=1;
			}
		for(i=0;i<MAX_SHOT;i++){
		if(rattackc(map_X1+ShotX[i],map_Y1+ShotY[i],7,7,enemyX1[j],enemyY1[j],20,20)==1&&
			ShotValid[i]==1&&
			enemyV1[j]==1){
				a--;
				
				//効果音を鳴らす
						PlaySoundMem(BAttack,DX_PLAYTYPE_BACK);
				//ビームを消す
				ShotValid[i]=0;
				//敵を消す
				enemyV1[j]=0;
					//エフェクト設定
				efectV[i]=1;
				efectX[i]=ShotX[i]-GetRand(10);
				efectY[i]=ShotY[i];
				
		}
		}
		}
		}
		return 0;
}

int DrawGameScleen(int Ch){
	// 画面を初期化する
		if(Ch==1)ClearDrawScreen() ;
		//描画-----------------------------------------------------------

		//背景描画
		DrawBox(0,0,650,600,GetColor(0,0,100),1);
//プレイヤー描画-----------------------------------------
								
		for(int Y = map_Y1 ; Y < map_Y1+MAP_Y1 ; Y++ ){
			for(int X = map_X1 ; X < map_X1+MAP_X1 ; X++ ){
				if(MapDate1[NowStage][Y-map_Y1][X-map_X1]==5) {
					SetDrawBlendMode( DX_BLENDMODE_ALPHA , 180 ) ;
						DrawGraph(X+MSetX,Y+MSetY-10,Lava1[(int)LavaNum],1);	
						// 描画ブレンドモードをノーブレンドにする
						SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 ) ;
				}
				
				if(MapDate1[NowStage][Y-map_Y1][X-map_X1]==1) DrawGraph(X+MSetX,Y+MSetY,MapCip,1);
				if(MapDate1[NowStage][Y-map_Y1][X-map_X1]==2) DrawGraph(X+MSetX,Y+MSetY,MapBCip,1);
				if(MapDate1[NowStage][Y-map_Y1][X-map_X1]==3) DrawGraph(X+MSetX,Y+MSetY,MapBCip2,1);
				if(MapDate1[NowStage][Y-map_Y1][X-map_X1]==4) DrawBox(X+MSetX,Y+MSetY,X+MSetX+20,Y+MSetY+20,GetColor(0,0,0),1);

				MSetX+=19;
			}
			MSetX=0;
			MSetY+=19;
		}
		MSetY=0;
							//プレイヤーボディ
						if(PlayerMode==0)DrawRotaGraph2( PlayerX , PlayerY , 7 , 7 , 1.0 , -sppedX/4.999 , PlayerB[(int)LavaNum] , TRUE ) ;
						if(PlayerMode==1)DrawRotaGraph2( PlayerX , PlayerY , 7 , 7 , 1.0 , -sppedX/4.999 , PlayerB[(int)LavaNum] , TRUE ,TRUE) ;

						//プレイヤー顔
						if(PlayerMode==0)DrawRotaGraph2(PlayerX+5-sppedX,
PlayerY-5-sppedX,5,16,1.0,HedAngle,PlayerH,1);
						if(PlayerMode==1)DrawRotaGraph2(PlayerX-5-sppedX,
PlayerY-5+sppedX,5,16,1.0,HedAngle,PlayerH,1,TRUE);
						//ランチャー描画
						DrawRotaGraph2( PlayerX+5 , PlayerY+5 , 5 , 5 , 1.1 , angle , ranthar , TRUE ) ;
					//標的描画
						if(CheckHitKey(KEY_INPUT_LSHIFT)){
						DrawCircle( PlayerX+(cos(angle)*100) , 
PlayerY+(sin(angle)*100) , 7 , GetColor(255,255,0) ,0 );
						DrawCircle( PlayerX+(cos(angle)*100) , 
PlayerY+(sin(angle)*100) , 5 , GetColor(25,255,0) ,0 );
						}
		//敵
		for( i = 0 ; i<10 ; i++){
			if(enemyV1[i]==1){
				DrawRotaGraph(enemyX1[i],enemyY1[i],1.0,getAngle(i),enemy1,TRUE);
			}
		}

		//-------------------------------------------------------

		//ビーム
		for( i = 0 ; i<MAX_SHOT ; i++){
			if(ShotValid[i]==1){
				DrawRotaGraph2(map_X1+ShotX[i],map_Y1+ShotY[i],9,3,GetRand(1)+1,beamAngle[i],MyBeam,
TRUE);
	
			}
		}

	//エフェクト
		for(i=0;i<MAX_SHOT;i++){
			if(efectV[i]==1)
			DrawGraph(map_X1+efectX[i],map_Y1+efectY[i]-20,efectb[efectC[i]],TRUE);
		}
		
		//--------------------------------------------------------------------------------------------
		//メニュ―(上)

		//枠
		DrawBox(0,0,700,60,GetColor(0,0,0),1);
		DrawBox(0,60,700,61,GetColor(30,30,30),1);
		DrawBox(0,61,700,62,GetColor(50,50,50),1);
		DrawBox(0,62,700,63,GetColor(80,80,80),1);

		//HP表示
		DrawBox(19+10+30,9,300,21,GetColor(100,100,0),1);
		DrawBox(19+10+30,9,300,21,GetColor(50,50,0),0);
		DrawBox(19+10+30,9,2+10+20+19+PlayerHP/4,21,GetColor(155,155,0),1);
		DrawBox(20+10+30,10,10+20+20+PlayerHP/4,20,GetColor(255,0,0),1);
		DrawFormatString(0,7,GetColor(255,255,255),"HP:%d",PlayerHP);

		//UP表示
		DrawBox(19+10+30,27,210,41,GetColor(0,100,100),1);
		DrawBox(19+10+30,27,210,41,GetColor(0,50,50),0);
		DrawBox(19+10+30,27,8+2+10+20+19+UpPwer/2,41,GetColor(0,0,155),1);
		DrawBox(20+10+30,28,8+10+20+20+UpPwer/2,40,GetColor(0,0,255),1);
		DrawFormatString(0,25,GetColor(255,255,255),"UP:%d",UpPwer);
		
//--------------------------------------------------------------------------------------------
		//メニュ―(中)
		if(MenuMode==1){
			SetDrawBlendMode( DX_BLENDMODE_ALPHA , 255/2) ; 
			DrawBox(0,0,700,600,GetColor(0,0,0),1);
			SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 ) ; 
//ブレンドモードをリセットする。

		MenuSet();

		}else{
			clsDx();
		}
		

		if(Ch==1)rc;
		return 0;
}


int PlayerForGroundScrolle(){
	
	Key = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ;

	if(PlayerHP<0){rcls;
						clsDx();
						printfDx("Game Over");
						rc;
						WaitKey();
						return -1;
						
						}
		//--------------プレイヤー制御---------------------
		{
		//メニュー選択
		if( CheckHitKey( KEY_INPUT_SPACE ) == 1 ||
			MenuMode==1)
	{
		// 押されていない
		if( CheckHitKey( KEY_INPUT_C ) == 0 ){

			MenuMode=1;

		}else{
			MenuMode=0;
		}
	}
	else
	{
		// 押されている
	
	//前の座標記憶
						OldMX = map_X1;
						OldMY = map_Y1;
		
		if(angle >= 6.22222)angle=0;
		if(angle <= -6.22222)angle=0;

		//スピードの修正
		if(CheckHitKey(KEY_INPUT_RIGHT)==0&&
					CheckHitKey(KEY_INPUT_LEFT)==0&&
					sppedX>=-0.2&&sppedX<=0.2){
						sppedX=0.100005;
				}
		if( Key & PAD_INPUT_RIGHT &&
			PlayerMode==0){ sppedX -= 0.5 ;}	// 右を押していたら右に進む
		if( Key & PAD_INPUT_RIGHT &&
			PlayerMode==1){PlayerMode=0;}
		if( Key & PAD_INPUT_LEFT &&
			PlayerMode==1){ sppedX += 0.5;}	// 左を押していたら左に進む
		if( Key & PAD_INPUT_LEFT &&
			PlayerMode==0){PlayerMode=1; }

		
		//頭の角度を戻す
		if( CheckHitKey(KEY_INPUT_UP)==0 ){ HedAngle=0.00000; }
		if( CheckHitKey(KEY_INPUT_DOWN)==0){ HedAngle=0.00000; }
		//銃の角度可変
		if( Key & PAD_INPUT_UP ){ angle -= 0.04; HedAngle=-0.3; }
		if( Key & PAD_INPUT_DOWN){ angle += 0.04;HedAngle=0.1; }



		//敵(テスト)設置
		if(CheckHitKey(KEY_INPUT_ESCAPE)==1){
			for(int i = 0 ; i<10 ; i++){
				enemyX1[i]=GetRand(600);
				enemyY1[i]=GetRand(600);
				enemyV1[i]=1;
		}

		}
		//移動速度制限
		if(sppedX >= 7)sppedX=7;
		if(sppedX <= -7)sppedX=-7;

		
		//緊急回避
		if(CheckHitKey(KEY_INPUT_A)==1&&
			bacTining==0&&
			PlayerMode==0||
			DamageCheck==1&&
			PlayerMode==0){
				PlaySoundMem( kaihi , DX_PLAYTYPE_BACK ) ;
				sppedX = 9.9; bacTining=1;
		DamageCheck=0;
		}
		if(CheckHitKey(KEY_INPUT_A)==1&&
			bacTining==0&&
			PlayerMode==1||
			DamageCheck==1&&
			PlayerMode==1){
				PlaySoundMem( kaihi , DX_PLAYTYPE_BACK ) ;
				sppedX = -9.9; bacTining=1;
		DamageCheck=0;
		}
		//ながおし禁止
		if(CheckHitKey(KEY_INPUT_A)==0&&
			sppedX <= 1&&
			PlayerMode==0) bacTining=0;
		if(CheckHitKey(KEY_INPUT_A)==0&&
			sppedX >= -1&&
			PlayerMode==1) bacTining=0;
		//移動していなければ減速
		if(CheckHitKey(KEY_INPUT_RIGHT)==0||
			CheckHitKey(KEY_INPUT_LEFT)==0){
			if(sppedX > 0)sppedX-=0.2;
			if(sppedX < 0)sppedX+=0.2;
		}

		//マグマページ処理
		LavaNum+=0.1;
		if(LavaNum>=6)LavaNum=0;
		if(map_X1<=0)map_X1-=1;
		//上昇処理
		if(CheckHitKey(KEY_INPUT_X)==1&&UpPwer>=0){sppedY-=0.5;UpPwer--;}
		if(CheckHitKey(KEY_INPUT_X)==0||UpPwer<=0){sppedY+=0.8;}
		
		if(sppedY>=7)sppedY=7;
		if(sppedY<=-7)sppedY=-7;
		// ショット
		if(CheckHitKey(KEY_INPUT_Z)==1)
		{
			ShotCount--;
			if(ShotCount<=0){
				ShotCount=MAX_SHOT_COUNT;
				// ショットデータ検索
				for( j = 0 ; j < MAX_SHOT ; j ++ )
				{
					if( ShotValid[ j ] == 0 ){ break ;}
				}
		
				//ショットを出す
				if( j != MAX_SHOT )
				{
					
					a++;
					//角度の設定
					beamAngle[j]=angle;
					// ショットの位置を設定
					ShotX[ j ] = PlayerX+5-map_X1 ;
					ShotY[ j ] = PlayerY+5-map_Y1 ;

					// ショットデータを使用中にセット
					ShotValid[ j ] = 1 ;

					//効果音を鳴らす
					PlaySoundMem( SoundBeam , DX_PLAYTYPE_BACK ) ;
				}
			}
		}
		
		//移動

		map_X1 += sppedX;
map_Y1 -= sppedY ;
		}
			
		//マップ確認
		for(int Y = map_Y1 ; Y < map_Y1+MAP_Y1 ; Y++ ){
			for(int X = map_X1 ; X < map_X1+MAP_X1 ; X++ ){
				//ビーム判定
				for(int N = 0 ; N < MAX_SHOT ; N++){
				if(MapDate1[NowStage][Y-map_Y1][X-map_X1]==1&&
					rattackc(map_X1+ShotX[N],map_Y1+ShotY[N],5,5,X+MSetX,Y+MSetY,20,20)==1&&
					ShotValid[N]==1
					){
						//効果音を鳴らす
						PlaySoundMem(BAttack,DX_PLAYTYPE_BACK);
						ShotValid[N]=0;
						efectX[N]=ShotX[N];
						efectY[N]=ShotY[N];
						efectV[N]=1;
						a--;
					}

				if(MapDate1[NowStage][Y-map_Y1][X-map_X1]==2&&
					rattackc(map_X1+ShotX[N],map_Y1+ShotY[N],5,5,X+MSetX,Y+MSetY,20,20)==1&&
					ShotValid[N]==1
					){
						//効果音を鳴らす
						PlaySoundMem(BAttack,DX_PLAYTYPE_BACK);
						MapDate1[NowStage][Y-map_Y1][X-map_X1]=0;
						ShotValid[N]=0;
						efectX[N]=ShotX[N];
						efectY[N]=ShotY[N];
						efectV[N]=1;
						a--;
					}

				if(MapDate1[NowStage][Y-map_Y1][X-map_X1]==3&&
					rattackc(map_X1+ShotX[N],map_Y1+ShotY[N],5,5,X+MSetX,Y+MSetY,20,20)==1&&
					ShotValid[N]==1
					){
						//効果音を鳴らす
						PlaySoundMem(BAttack,DX_PLAYTYPE_BACK);
						MapDate1[NowStage][Y-map_Y1][X-map_X1]=2;
						ShotValid[N]=0;
						efectX[N]=ShotX[N];
						efectY[N]=ShotY[N];
						efectV[N]=1;
						a--;
					}
				}

				//側面判定
				if((MapDate1[NowStage][Y-map_Y1][X-map_X1]==1||
					MapDate1[NowStage][Y-map_Y1][X-map_X1]==2||
					MapDate1[NowStage][Y-map_Y1][X-map_X1]==3
					)&&
					rattackc(PlayerX,PlayerY,20,54-7,X+MSetX-2,Y+MSetY+1,12,19)==1
					){
						if(sppedX<=0)sppedX+=0.8;
						
						map_X1=OldMX;
					//	PlayerX = OldX;
				}
				if((MapDate1[NowStage][Y-map_Y1][X-map_X1]==1||
					MapDate1[NowStage][Y-map_Y1][X-map_X1]==2||
					MapDate1[NowStage][Y-map_Y1][X-map_X1]==3
					)&&
					rattackc(PlayerX,PlayerY,20,54-7,X+MSetX+10,Y+MSetY+1,10,19)==1
					){
						if(sppedX>=0)sppedX-=0.8;
						map_X1=OldMX;
					//	PlayerX = OldX;
				}

				//上下判定
				if((MapDate1[NowStage][Y-map_Y1][X-map_X1]==1||
					MapDate1[NowStage][Y-map_Y1][X-map_X1]==2||
					MapDate1[NowStage][Y-map_Y1][X-map_X1]==3
					)&&
					rattackc(PlayerX,PlayerY,20,54,X+MSetX,Y+MSetY-3,20,20)==1
					){
				
				sppedY=0;
				map_Y1=OldMY;
				if(UpPwer<300)
				UpPwer++;
				if(CheckHitKey(KEY_INPUT_RIGHT)==0&&
					CheckHitKey(KEY_INPUT_LEFT)==0&&
					sppedX>=-0.2&&sppedX<=0.2){
						sppedX=0.100005;
				}
				}
				if((MapDate1[NowStage][Y-map_Y1][X-map_X1]==1||
					MapDate1[NowStage][Y-map_Y1][X-map_X1]==2||
					MapDate1[NowStage][Y-map_Y1][X-map_X1]==3
					)&&
					rattackc(PlayerX,PlayerY-10,20,54,X+MSetX,Y+MSetY+15,20,5)==1
					){
						sppedY=0; 
				}
				//マグマ処理
				if(MapDate1[NowStage][Y-map_Y1][X-map_X1]==5&&
					rattackc(PlayerX,PlayerY,20,54-10,X+MSetX,Y+MSetY,20,20)==1
					){
						
						if(PlayerHP>=0)PlayerHP--;
						
				}
				//ステージ変更
				if(MapDate1[NowStage][Y-map_Y1][X-map_X1]==4&&
					rattackc(PlayerX,PlayerY,20,54-10,X+MSetX,Y+MSetY,20,20)==1&&
					CheckHitKey(KEY_INPUT_UP)==1
					){
						for(i=0;i<30;i++){
							 SetDrawBlendMode( DX_BLENDMODE_ALPHA , i) ; 
							DrawBox(0,0,700,600,GetColor(0,0,0),1);
						   SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 ) ;    
                         //ブレンドモードをリセットする。
						   rc;
						}	NowStage+=1;
						//
					for(i=600;i<600;i++)
					DrawLine(0,i,700,i,GetColor(R,R,R),1);
					WaitTimer(1000);
					rc;
				}
				MSetX+=19;
			}
			MSetX=0;
			MSetY+=19;
		}
		MSetY=0;

	
		// ショットの移動処理
		for( j = 0 ; j < MAX_SHOT ; j ++ )
		{
			if( ShotValid[ j ] == 0 ){
				ShotX[j] = PlayerX;
				ShotY[j] = PlayerY;
				continue ; }

			// 位置をずらす
			ShotY[ j ] += sin(beamAngle[j])*9 ;
			ShotX[ j ] += cos(beamAngle[j])*9 ;

			// 画面外に出ていたらショットデータを無効にする
			if( ShotY[ j ] < -320 ||ShotY[j] > 1000 ||
				ShotX[ j ] < -320 ||ShotX[j] > 1000 )
			{ 
			ShotValid[ j ] = 0 ;
			a--;
			}
		}

	//エフェクト処理
		for(i=0;i<MAX_SHOT;i++){
			//コマを進める
			if(efectV[i]==1)efectC[i]++;

			//コマが最後なら消す
			if(efectC[i] >= 8){
				efectC[i]=0;
				efectV[i]=0;

			}
		}
	}
		return 0;
}

// 選択項目の文字列
char *GString[] =
		{
			"ステータス" ,
			"ステージ" ,
			"?",
			"?",
			NULL
		} ;
//メニュー関数
int MenuSet(){
	int SenntakuNum ;
	// 選択ポインタの位置初期化
//	SPoint = 0 ;

	// 選択項目の数を取得&ついでに項目描画
	SenntakuNum = 0 ; 
	while( GString[ SenntakuNum ] != NULL )
	{
		DrawString( 32 , SenntakuNum * 32 , GString[ SenntakuNum ] , GetColor( 255 , 255 , 255 ) ) ;
		SenntakuNum ++ ;
	}

		// 前のカーソル消去
		DrawBox( 0 , 0 , 32 , SenntakuNum * 32 , 0 , TRUE ) ;

		// カーソル描画
		DrawBox( 0 , SPoint * 32 , 16 , SPoint * 32 + 16 , 
				GetColor( 255 , 0 , 0 ) , TRUE ) ;

		// キー入力
		{
			// キー入力待ち
			while( ProcessMessage() == 0 && CheckHitKeyAll() != 0 ){}
			while( ProcessMessage() == 0 && CheckHitKeyAll() == 0 ){}
	
			// キー入力に応じて処理

			// カーソル移動
			if( CheckHitKey( KEY_INPUT_UP ) != 0 && SPoint != 0 ) SPoint -- ;
			if( CheckHitKey( KEY_INPUT_DOWN ) != 0 && SPoint < SenntakuNum - 1 ) SPoint ++ ;

			// 決定キー時処理
			if( CheckHitKey( D_DIK_RETURN ) != 0 )
			{
				// 項目に応じた処理を行う
				if(SPoint==0){clsDx();
				printfDx("\n\n\n\n\n\n\n\n座標:%d,%d\nビームの数:%d\n上昇スピード:%f\n横移動速度:%f\n上昇カウンタ:%d\nプレイヤーの銃の角度:%f\nプレイヤーの顔の角度:%f\nプレイヤーの向き%d\nプレイヤーのHP%d\n%d  \n\nCキーを押して戻る",map_X1,map_Y1,a,sppedY,sppedX,UpPwer,angle,HedAngle,PlayerMode,PlayerHP,MenuMode);
			
				}
				if(SPoint==1){clsDx();
					printfDx("\n\n\n\n\n\n\n練習ステージ-%d\nCキーを押して戻る",NowStage);
				}

				if(SPoint==2){clsDx();
					printfDx("\n\n\n\n\n\n\n\nまだ、未定です。\nCキーを押して戻る");
				}
			}
		}
		return 0;
}

------------------------------------------reiDX.h---------------------------------------------------



#include <DxLib.h>
#include <math.h>
#include<windows.h>
//置き換え
#define DXmain     WINAPI WinMain(HINSTANCE h1, HINSTANCE hP, LPSTR lpC, int nC)
#define DXloop     while(ProcessMessage()==0)
#define winps      ProcessMessage()==0
#define key        GetJoypadInputState(DX_INPUT_KEY)
#define rRIGHT     PAD_INPUT_RIGHT
#define rLEFT      PAD_INPUT_LEFT
#define rUP        PAD_INPUT_UP
#define rDOWN      PAD_INPUT_DOWN
#define winname    SetMainWindowText
#define winsize    SetGraphMode
#define winmode    ChangeWindowMode(TRUE)
#define DXint      if(DxLib_Init() == -1) return -1//-----------------------これは winsize や winmode を書いた後に書いておく
#define rcls       ClsDrawScreen()
#define rc         ScreenFlip() 
#define DXend      	DxLib_End() ;return 0 ;
#define LOGnot     SetOutApplicationLogValidFlag(FALSE);
#define GetMouse   GetMousePoint
//Srattackc関数置き換え
#define ATTACKC_UP 1
#define ATTACKC_DOWN 2
#define ATTACKC_RIGHT 3
#define ATTACKC_LEFT 4
//関数

double Ma[1024];//Sgoitに使った角
int rattackc(int x1, int y1, int sx1 , int sy1, int x2, int y2 ,int sx2 , int sy2){
	int x11;        //右上
	int y11 ;        //左下
	int x111 ;
	int y111;
	int x22 ; 
	int y22 ; 
	int x222 ;
	int y222;
	int y12;
	x11  = x1+sx1;        //右上
	y11  = y1+sy1;        //左下
	y12  = y1+sx1;		//右上
	 x111 = x1+sx1+sy1;//⇒下
	 	 y111 = y1+sy1+sx1;//⇒下
	 x22  = x2+sx2;        //右上
	 y22  = y2+sy2;        //左下
	 x222 = x2+sx2+sy2;//⇒下
	 y222 = y2+sy2+sx2;//⇒下
	 //分岐部
if(((x1 >= x2 && x1 <= x22 )||
	(x2 >= x1 && x2 <= x11))&&(
	  ((y1 >= y2 && y1 <= y22 )||
	(y2 >= y1 && y2 <= y11) )))
	{return 1;
	}else{
	return 0;
	}
	//return 0;
}//

int rattackc2(int x1, int y1, int gf, int x2, int y2 ,int sx2 , int sy2){
	int sx1,sy1;
	GetGraphSize( gf , &sx1 , &sy1 ) ;
	int x11;        //右上
	int y11 ;        //左下
	int x111 ;
	int y111;
	int x22 ; 
	int y22 ; 
	int x222 ;
	int y222;
	x11  = x1+sx1;        //右上
	y11  = y1+sy1;        //左下
	 x111 = x1+sx1+sy1;//⇒下
	 	 y111 = y1+sy1+sx1;//⇒下
	 x22  = x2+sx2;        //右上
	 y22  = y2+sy2;        //左下
	 x222 = x2+sx2+sy2;//⇒下
	 y222 = y2+sy2+sx2;//⇒下
	 //分岐部
if(((x1 >= x2 && x1 <= x22 )||
	(x2 >= x1 && x2 <= x11))&&(
	  ((y1 >= y2 && y1 <= y22 )||
	(y2 >= y1 && y2 <= y11) ))
	   )
	{return 1;
	}else{
	return 0;
	}
	return 0;
}//


int rattackc3(int x1, int y1, int gf, int x2, int y2 ,int gf2){
	int sx1,sy1,sx2,sy2;
	GetGraphSize( gf , &sx1 , &sy1 ) ;
	GetGraphSize( gf2 , &sx2 , &sy2 ) ;
	int x11;        //右上
	int y11 ;        //左下
	int x111 ;
	int y111;
	int x22 ; 
	int y22 ; 
	int x222 ;
	int y222;
	x11  = x1+sx1;        //右上
	y11  = y1+sy1;        //左下
	 x111 = x1+sx1+sy1;//⇒下
	 	 y111 = y1+sy1+sx1;//⇒下
	 x22  = x2+sx2;        //右上
	 y22  = y2+sy2;        //左下
	 x222 = x2+sx2+sy2;//⇒下
	 y222 = y2+sy2+sx2;//⇒下
	 //分岐部
if(((x1 >= x2 && x1 <= x22 )||
	(x2 >= x1 && x2 <= x11))&&(
	  ((y1 >= y2 && y1 <= y22 )||
	(y2 >= y1 && y2 <= y11) ))
	   )
	   
	{return 1;
	}else{
	return 0;
	}
	return 0;
}//
//角度へGotoCertainAngle関数
int GotoCertainAngle(double Angle , int *MovesX , int *MovesY){
	//X
	*MovesX = cos(Angle); 
	//Y
	*MovesY = sin(Angle); 
}

//------------------------------------------------------
//近づく関数
//------------------------------------------------------
int goit( int x1 ,int y1 , int *x2 , int *y2 , int spead ){ 
	if( *x2 <= x1 ){ *x2 += spead; }
	if( *x2 >= x1 ){ *x2 -= spead; }
	if( *y2 <= y1 ){ *y2 += spead; }
	if( *y2 >= y1 ){ *y2 -= spead; }
	return 0;
} 

//goit関数強化バージョン
int Sgoit( int Px , int Py , int *Mx , int *My , double Spead , int SHOT ){
if(SHOT >= 1024)return -1 ;
int i = SHOT;
double ax , ay , bx , by ;
#define PI		3.1415926535897932384626433832795028841971


// bx,by 自分の進んでいる方向 ax,ay 本来進むべき方向  
bx = cos( Ma[i] ) ;
by = sin( Ma[i] ) ;
ax = ( Px ) - *Mx ;
ay = ( Py ) - *My ;
				Ma[i] += ( ax * by - ay * bx < 0.0 ) ? + PI / 180 * 8 : - PI / 180 * 8 ;

			// 移動する
			*Mx += ( int )( cos( Ma[i] ) * Spead );
			*My += ( int )( sin( Ma[i] ) * Spead );

	return 0;

}

//Sgoit関数から角度を取る関数
int getAngle(int SHOT_Nunber){
	 return Ma[SHOT_Nunber];
}

------------------------------------------------------------------------------
すみません・・
添付のやり方がわからなくて・・・・・
で、
画像ファイルは、
https://sites.google.com/site/zatugakut ... revision=1
の中にあります。

みにくいと思いますが、
なぜ、壁抜けしてしまうか理由が分かれば、
助かります。
読解力がないので、できれば、
修正したところを書いてくれればうれしいです。
お願いします。

えっと・・・
自作ヘッダーファイルを使用してしまってみにくいです・・
すみません

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: マップスクロールについて

#2

投稿記事 by みけCAT » 12年前

とりあえずコードはcodeタグで囲んでいただけると嬉しいです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: マップスクロールについて

#3

投稿記事 by softya(ソフト屋) » 12年前

こちらと同じ方ですね?

「マップ(int型2次元配列)のスクロール方法がわからない • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3&t=10670

フォーラムルールで名前は統一していただくようにお願いしております。
codeタグのなどのことも含めて、フォーラムルールをお読みくださるようにお願いします。
http://dixq.net/board/board.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: マップスクロールについて

#4

投稿記事 by softya(ソフト屋) » 12年前

問題点です。
(1)ヘッダに変数や関数定義を書いては行けません。これだとヘッダに分けている意味が無いです。
(2)インデントが不適切で読みづらいです。
(3)命令群をdefineで置き換えるのはバグの元で他の人のプログラムの追跡を困難にします。
(4)break;で済むところをgotoにするのは止めたほうが良いです。
(5)やたらと関数が長過ぎますので、もっと細かい関数に分けられるはずです。
同じようコードが多発するのは関数分けが不十分な証拠です。
(6)最大の問題であるマップとのズレとか壁抜けは、map_X1などの座標単位がピクセルなのに対してマップのデータであるMapDate1などは19ピクセル?のブロック単位となっています。
これをピクセル単位→マップブロック単位の単位変換をせずにMapDate1を参照しているので見当違いな情報を参照しているのが原因だと思います。
とにかくプログラムを整理して単位変換ミスが起きないようなプログラムに組み直して下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

planet invasion

Re: マップスクロールについて

#5

投稿記事 by planet invasion » 12年前

これをピクセル単位→マップブロック単位の単位変換をせずにMapDate1を参照しているので見当違いな情報を参照しているのが原因だと思います。

とは、どういうことでしょうか・・・・

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: マップスクロールについて

#6

投稿記事 by softya(ソフト屋) » 12年前

planet invasion さんが書きました:これをピクセル単位→マップブロック単位の単位変換をせずにMapDate1を参照しているので見当違いな情報を参照しているのが原因だと思います。

とは、どういうことでしょうか・・・・
再確認しますが、map_X1とMapDate1[n][y][x]のyのそれぞれの単位は何でしょうか?
[追記]
補足すると1:1の関係なのでしょうか? 1:1ならmap_X1の変化範囲サイズの配列になるはずですが。遥かに小さいようです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

へにっくす

Re: マップスクロールについて

#7

投稿記事 by へにっくす » 12年前

分からない・・ さんが書きました:

コード:

#define DXmain     WINAPI WinMain(HINSTANCE h1, HINSTANCE hP, LPSTR lpC, int nC)
#define DXloop     while(ProcessMessage()==0)
#define winps      ProcessMessage()==0
#define key        GetJoypadInputState(DX_INPUT_KEY)
#define rRIGHT     PAD_INPUT_RIGHT
#define rLEFT      PAD_INPUT_LEFT
#define rUP        PAD_INPUT_UP
#define rDOWN      PAD_INPUT_DOWN
#define winname    SetMainWindowText
#define winsize    SetGraphMode
#define winmode    ChangeWindowMode(TRUE)
#define DXint      if(DxLib_Init() == -1) return -1//-----------------------これは winsize や winmode を書いた後に書いておく
#define rcls       ClsDrawScreen()
#define rc         ScreenFlip() 
#define DXend       DxLib_End() ;return 0 ;
#define LOGnot     SetOutApplicationLogValidFlag(FALSE);
#define GetMouse   GetMousePoint
この置き換えをやめたソースを掲示してください。
プログラマで仕事している人たちは、こういう置き換えはまずやらないです。
プライベートでやるぶんにはいいですけど、人に見せるなら、これはやってはいけないことだと思います。

naohiro19
記事: 256
登録日時: 13年前
住所: 愛知県

Re: マップスクロールについて

#8

投稿記事 by naohiro19 » 12年前

#defineの罠にもある通り使うのは危険です。
#define を命令に使うのは危険です。
[hr]
大事なことなので二度言いましたよ。

planet invasion

Re: マップスクロールについて

#9

投稿記事 by planet invasion » 12年前

マップスクロールは何とかなりました。
原因はかなり初歩的で恥ずかしいミスを指定ました。


で、ふと疑問に思ったのですが
四聖龍神録を開いている状態で、他のウィンドウにカーソルを持っていっても
ゲームが止まりませんよね?
あれってどうやるんですか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: マップスクロールについて

#10

投稿記事 by softya(ソフト屋) » 12年前

他の質問は良いですが、みなさんの回答を無視しないでくださいね。大事なことをですよ。
あとフォーラムルールにあります通り、修正したコードを貼ってくださいね。 http://dixq.net/board/board.html
その上で質問にお答えします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

planet invasion

Re: マップスクロールについて

#11

投稿記事 by planet invasion » 12年前

へにっくす さん、分かりました。こういうのはプライベートのときだけにします
いま、ソースを書き換えるとなんか余計ゴチャゴチャしそうなので、
ソースは最初に書いたやつとほとんど変わりません。です。
結局、マップ当たり判定の余計な足し算引き算を抜いたら
なんかいけました。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: マップスクロールについて

#12

投稿記事 by softya(ソフト屋) » 12年前

planet invasion さんが書きました:へにっくす さん、分かりました。こういうのはプライベートのときだけにします
いま、ソースを書き換えるとなんか余計ゴチャゴチャしそうなので、
ソースは最初に書いたやつとほとんど変わりません。です。
結局、マップ当たり判定の余計な足し算引き算を抜いたら
なんかいけました。
座標系の問題を放置していたら、うまく動くはずがないんですよ。
うまく動いてみえたら単なる偶然でしかありません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

へにっくす

Re: マップスクロールについて

#13

投稿記事 by へにっくす » 12年前

planet invasion さんが書きました:へにっくす さん、分かりました。こういうのはプライベートのときだけにします
できればプライベートでもやらないでほしいですね。
あと、いじったら何かいけました。じゃだめですよ。
仕事でバグ修正しているときにそんな理由で治ったとか言ったら、はったおされますぜ 笑

Planet invasion

Re: マップスクロールについて

#14

投稿記事 by Planet invasion » 11年前

ずっと試行錯誤していました。
最終的に、マップスクロールの(に限らず)時、
加速すると、たとえば速度(1ループに進むピクセル数)が10だと
1ループし終わった後当たり判定が来るので、
気づいたときにはすでに壁抜けしていたのです。

実際、壁抜けするときは移動速度が速いときでした。
なので、この考えをプログラムに入れて・・・
まあ、forかなにかで確認しながらピクセルづつ座標を動かして
あたったら移動をとめる(breakかなんかする)ってすれば
いいと思ったのですが

確実に重くなります・・・・・・・・・・・・・・・orz

アバター
へにっくす
記事: 634
登録日時: 12年前
住所: 東京都

Re: マップスクロールについて

#15

投稿記事 by へにっくす » 11年前

Planet invasion さんが書きました:確実に重くなります・・・・・・・・・・・・・・・orz
で、どうしたいの?
質問の形式になっていないので答えようがありません。

またコード載せるときは、
#defineをやめたコードを載せてくださいね。
また、インデントもちゃんとそろえてくださいね。
そうでなければ、たぶん、誰も応えてくれません。
(ごちゃごちゃするので、と自分でもおっしゃってましたが、そもそも関数名を別名にしたり
処理をマクロで定義すること自体ダメです。自分で迷路に迷い込んでるようなものですよ)
written by へにっくす

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: マップスクロールについて

#16

投稿記事 by softya(ソフト屋) » 11年前

最新のコードを掲載してもらうとアドバイスできると思います。
10ピクセルの速度で壁抜けするのも良く分かりません。
ブロックって16ピクセルより小さいんでしょうか?

結局「座標系の問題を放置していたら、うまく動くはずがないんですよ。」に帰結するんです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

nil
記事: 428
登録日時: 12年前

Re: マップスクロールについて

#17

投稿記事 by nil » 11年前

高速度で壁にあたった場合壁抜けが起きる。
という場合、それはマップスクロールに起因する問題ではなく
マップスクロール処理を省いたコードであっても同様の問題が起きるはずです。
まあ最新のコードを見ないことにはどうにも言えませんが。

Planet invasion

Re: マップスクロールについて

#18

投稿記事 by Planet invasion » 11年前

そうですね
こんな感じです。

コード:

#include <DxLib.h>

//プレイヤー(だとして)座標
int x=0;//Y座標は300

//プレイヤー速度
int Sp=0;

//当たったか?
int Q=0;

int WINAPI WinMain(HINSTANCE h1, HINSTANCE hP, LPSTR lpC, int nC){

	//ウィンドウモード
	ChangeWindowMode(TRUE);
	//初期化
	if(DxLib_Init() == -1) return -1;

	//メインループ
	while(ProcessMessage()==0){

		//プレイヤー加速処理
		if(Q==0){
		Sp+=1;
		x+=Sp;
		}else{
			//行
			x--;
		}

		//当たり判定
		if(((x >= 400 && x <= 401 )||
		(400 >= x && 400 <= x+10))&&(
		((400 >= 0 && 400 <= 600 )||
		(0 >= 400 && 600 <= 410) )))
		{
			Q=1;
		}

		//描画
		ClsDrawScreen();

		//プレイヤー
		DrawBox(x,300,x+10,300+10,GetColor(255,0,0),1);

		//障害物
		DrawLine(400,0,400,600,GetColor(255,0,0),1);

		ScreenFlip();
		
	}
	//オワリ
	DxLib_End() ;return 0 ;
}
コレだと、
障害物に当たりません。
ですが、

コード:

#include <DxLib.h>

//プレイヤー(だとして)座標
int x=0;//Y座標は300

//プレイヤー速度
int Sp=0;

//当たったか?
int Q=0;

int WINAPI WinMain(HINSTANCE h1, HINSTANCE hP, LPSTR lpC, int nC){

	//ウィンドウモード
	ChangeWindowMode(TRUE);
	//初期化
	if(DxLib_Init() == -1) return -1;

	//メインループ
	while(ProcessMessage()==0){

		//プレイヤー加速処理
		if(Q==0){
		Sp+=1;
			for(int i=0;i<Sp;i++){
				x++;
				//当たり判定
				if(((x >= 400 && x <= 401 )||
				(400 >= x && 400 <= x+10))&&(
				((400 >= 0 && 400 <= 600 )||
				(0 >= 400 && 600 <= 410) )))
				{
					Q=1;
					break;
				}
			}
		}else{
			//行
			x--;
		}



		//描画
		ClsDrawScreen();

		//プレイヤー
		DrawBox(x,300,x+10,300+10,GetColor(255,0,0),1);

		//障害物
		DrawLine(400,0,400,600,GetColor(255,0,0),1);

		ScreenFlip();
		
	}
	//オワリ
	DxLib_End() ;return 0 ;
}

にすると、
通り抜けてしまうところも確実に
当たり判定できる!!
と思ったのです。
実際できました~

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: マップスクロールについて

#19

投稿記事 by softya(ソフト屋) » 11年前

この条件式ですが、

コード:

                //当たり判定
                if(((x >= 400 && x <= 401 )||
                (400 >= x && 400 <= x+10))&&(
                ((400 >= 0 && 400 <= 600 )||
                (0 >= 400 && 600 <= 410) )))
x=400か401の時しか条件を満たしません。
特に後半の定数だけの条件式は存在する意味がありません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Planet invasion

Re: マップスクロールについて

#20

投稿記事 by Planet invasion » 11年前

当たり判定としての処理です。
実行してみると分かりますが、DrawLine関数で
ほっそい線を描画しています。
それを「壁」といたほうが
今回の趣旨に合っているからです。
ちなみにあのソースは、
1ループに90ピクセルも動いたら気づいたときにはもう壁通り過ぎてるじゃねぇか!!
っとなるところを90ピクセルfor分で1ピクセルずつ調べて当たっていたら
途中で抜ける。
するとどんなに早く動いてもかがりなく細い壁にでも当たり判定が使える

っていうソースです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: マップスクロールについて

#21

投稿記事 by softya(ソフト屋) » 11年前

Planet invasion さんが書きました:当たり判定としての処理です。
実行してみると分かりますが、DrawLine関数で
ほっそい線を描画しています。
それを「壁」といたほうが
今回の趣旨に合っているからです。
ちなみにあのソースは、
1ループに90ピクセルも動いたら気づいたときにはもう壁通り過ぎてるじゃねぇか!!
っとなるところを90ピクセルfor分で1ピクセルずつ調べて当たっていたら
途中で抜ける。
するとどんなに早く動いてもかがりなく細い壁にでも当たり判定が使える

っていうソースです。
私の指摘に対する回答だとして、後半が意味が無いって理解されていますか?
あとxを+1づつ増やしているプログラムの方は>=400で判定すれば十分です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Planet invasion

Re: マップスクロールについて

#22

投稿記事 by Planet invasion » 11年前

とある方法を見つけました。
プレイヤーの当たり判定を1ループ先のものを確認して
あたっていたら移動しないようにしたらうまくいきました。
ソース整理して書きます。

ソースの件でまだ、書き方がアhみたいな所があるかもしれませんので
もし見つけたらご指摘お願いします。

閉鎖

“C言語何でも質問掲示板” へ戻る