水中移動

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

水中移動

#1

投稿記事 by ふぉつ » 11年前

水中移動用のプログラムを書きたく

マップチップ表で水中である部分は6とし、その6の範囲にきたら
キャラの移動方法が変わる、という風に書いたつもりなんですが

いざビルドしてみると、マップチップ表が6かどうかの判断がされず

6の場所に来ても、キャラの動きに変動はなく、ふつうでした。。。

何が間違っているのでしょうか??

コード:



if(hantei[Nowmap].data[i][j]==6){
         if(muki==4){                     //上キーが押されたとき
                 Movey--;
          }
          if(muki==2){                    //下キーが押されたとき
                 Move++;
          }
}



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

Re: 水中移動

#2

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

これだけではわかりません。
・提示したコードは実行されていますか?
・i,jの値は正常ですか?特にx座標,y座標との対応が逆になっていませんか?
・この処理の結果が、別の処理で相殺されたり無効になっていませんか?
・プログラムをコンパイルしましたか?コンパイル時にエラーは出ませんでしたか?
・実行しているプログラムはこの処理を書いたプログラムですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ふぉつ

Re: 水中移動

#3

投稿記事 by ふぉつ » 11年前

すべて確認すみです。
そして、相殺などもありえませんし、i、jの値も正常です。
狂いはないはずなんですが、なぜか動かないんです、、、。

もしよろしければ、サンプルコードなどを提示してはくれないでしょうか?

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: 水中移動

#4

投稿記事 by usao » 11年前

何やら完璧だとのことですが,

コード:

if(hantei[Nowmap].data[i][j]==6)
{
        //※水中とやらに入ったときに,処理がここに来ているのか?
         if(muki==4){                     //上キーが押されたとき
                 //※水中 且つ 上キー押下時に 処理がここに来ているのか?
                 Movey--;
          }
          if(muki==2){                    //下キーが押されたとき
                 //※↑と同様
                 Move++;  //※変数名が↑と異なっているが大丈夫なのか?
          }
}
このくらいのことは十分に調べているということでしょうか.
であれば, 提示されていない部分のコード に問題があることになるわけで,
そこに何が書かれているかはあなたにしかわからないわけで.
オフトピック
サンプルくれとか言われても現状では

コード:

if( 現在水中にいるなら ){  移動方法がいつもとは異なる感じで }
としか書けない気がしますが???

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

Re: 水中移動

#5

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

すべて確認済みなら予定外のことが起こるはずありませんので、なにか思い違いをしている可能性が高いです。
プログラミングのデバッグの大半は、この思い違いと現実をすり合わせることにありますので、ここで楽してしまうとプログラミングの技術が伸びません。
と言うことで、なぜダメなのかを調べる事を優先されるべきかと思います。

1.デバッガでトレースする。
2.prrintfDXなどで変数の変化を追う。

これらは最低限されるべきかと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ふぉつ

Re: 水中移動

#6

投稿記事 by ふぉつ » 11年前

そうですね、、、失敬。

本気でプログラムを学ぶなら、ここからが本息というのに、自分は人に頼りきりで、、、

分かりました。もっとほかの部分をきめ細かくしらべ、完成させたいと思います

ふぉつお

Re: 水中移動

#7

投稿記事 by ふぉつお » 11年前

if(Nowmap==2 )の部分に水中プログラムをかいてビルドしたところ

水中か地上かの判定クリア
水陸での、左右の進行、落下速度の調整クリア

問題点一つ、水中から地上に出たとき、ジャンプの高さが変化しないとういことです
自分でもいろいろためしましたが、どうすればいいかわかりませんでした。。。

水中から出たとき、規定のジャンプのさせ方にする方法を教えてください

コード:



#include "DxLib.h"
#include <math.h>

#define PI               (3.14159269)

#define MAP_NUM          (3)
#define SCREEN_WIDTH     (640)                          // 画面の横幅
#define SCREEN_HEIGHT    (480)                          // 画面の縦幅
#define CHIP_SIZE        (32)                           // 一つのチップのサイズ
#define MAP_WIDTH        (120)     // マップの横幅
#define MAP_HEIGHT       (30)    // マップの縦幅
#define CHAR_SIZE        (30)
#define h_speed          (1.0F)                          //背景のスピード

//マップ配列
struct map_data{
	int width;
	int height;
	int data[MAP_HEIGHT][MAP_WIDTH];
};

int sousasetumei;
int h_color=(255,0,0),st=(255,255,222);//カラー変数
int color=GetColor(255,255,255);
int mode=0;//シーン用の変数
int t_back,t_mask,t_over,t_count=0,t_moji;
int tai_sound,st_call,st_oto,st_BGM;//タイトル用変数
int title_Bright=0;
int misail[2],mx,my,mcount,m1_count=0,m2_count=0,mRL_flag=0;//弾用変数
int mw,mh;
bool pm_flag=false;
bool key_flag=false;
float px=30.0F,py=0.0F,px_old,py_old;//キャラ用変数
int pr[8],xcount,kaiten_count=0;
float p_jump=10.0F,speed=3.0F,G=0.3F;
float Movex,Movey;//移動量
int ph,pw;//キャラ画像の高さと幅
int at_count,reitai=0;
int muki=3;
float p_downsp=4.0F;
int input=0,keep_input=0;
bool p_flag=false;
int r_flag=0;
int hp_x=143;//HP変数
int sp=274;
char Key[256];
int goki,g_Handle,ex=608,ey=366,ey_prev,ey_tmp,e_junp=0;//敵(死神)用変数
int et_count=0;
int ew,eh;//敵画像の高さと幅
bool ep_flag=false;//敵のジャンプフラグ
bool e_flag=true;//敵の存在有無
int g_hp=70;
int zonbi[10],zx=608,zy=450,zx_count,z_junp=0;//敵(ゾンビ)用
int zw,zh;
int zRL_flag=0;//ゾンビの進行方向
bool z_flag=false;//ゾンビの存在有無
bool zp_flag=false;//ジャンプしてるかどうか
int z_anime,zr_flag=32;
int z_hp=30;
int yurei[6],yu_x=2900,yu_y=212,RL_flag,y_muki=0;//幽霊用変数
bool yuat_flag=false;
int yw,yh;
int yu_count;//アニメの添え字変数
int yu_movex=2;
int yu_hp=40;
int torinn[2],tori_x=2679,tori_y=336,tori_count;//とりんドル用変数
bool tori_flag=false;
int tori_hp=10;
int tow,toh;
int ecso[6],ec_x=880,ec_y=422,ec_count;//エクソシスト
int ech,ecw;
int ec_at,ec_atx,ec_aty,ec;
int hana,hana_x=2220,hana_y=422;//花用変数
bool h_udflag;//UP中かDOWN中か
int hana2[3],hana2_x=2120,hana2_y=320,hana_count;
int hana2at_flag=false;
int hana2h,hana2w;
int hana_animecount=0;
int hana2_oldcount;
bool ec_atflag=false;//聖水の存在有無
int ec_hp=38;
int ecRL_flag;//左右の向き
int ec_Movex;//聖水の方向
int ec_G=0;
int jiga,jigax=2341,jigay=480;//自画用変数
int ji_flag=true;
int j_hp=950;
int jw,jh;
int count=0;
int haikei,stage_haikei;
int hodai,hx=1264,hy=328;//砲台用変数
int h_hp=40;
int hodai_kaiten,hk_x=1270,hk_y=318;
int hodai_tori[18],ht_x=1274,ht_y=258,ht_count;
int ht_oldcount;//前のアニメーションを保持
int tama,tama_x,tama_y,tx_count;
bool t_flag=false;
int tMovex,tMovey;//毒弾の移動量
int htw,hth;
double tkyori,tkyori_x,tkyori_y;//砲台から、キャラまでの距離
int sikeisha,sike_x=1600,sike_y=352;//死刑者用変数
int sikeidai,dai_x=1620,dai_y=480;//死刑台用変数
int kumo_ito,ito_x=2120,ito_y=0;//雲の糸用変数
int iw,ih;
int bup_flag=1;
int bannin,ban_x=1995,ban_y=-448;//番人用変数
bool ban_flag=false;
int bw,bh;
int up_flag=0;
float sh_x=0.0F,sh_y=0.0F,stage_haikei2,sh2_x=0;//1ステージ用変数
int tera,tx=3700,ty=330;
int torii,tr_x=32,tr_y=194;
int ido,id_x=3304,id_y=194,idw,idh;
int umi,umi_x,umi_y;//2ステージ用背景
int mizu,mi_x,mi_y;//水しぶき用変数
int haikei2;
int dokan;
bool umi_flag=false;
int gaikotu[6],ga_x=400,ga_y=389,ga_count=0;//骸骨用変数
int ga_counter=0;
int gah,gaw;
bool ga_flag=false;
int gaMovex,gaMovey;
int honet[3],hone_x,hone_y,hot_count;
int hoh,how;
double gakyori,gakyori_x,gakyori_y;
bool gat_flag=false;
int siri_flag=false;//落下速度倍増中に骸骨に当たってるか
int dao,dao_x=3310,dao_y=480,dao_dy=10,dh,dw;//井戸文字
int jam_dao;//音声変数
int kage,kx=0,ky=384;
int DrawBaseX,DrawBaseY;
int seihai,seihai_x=55,seihai_y=398;//聖杯用変数
int orbu_r,orbu_rx,orbu_ry;//アイテム(オーブ)
int orbu_b,orbu_bx,orbu_by;
int orbu_m,orbu_mx=65,orbu_my=370;
int oh,ow;
bool ob_flag=false;
int orbu_rhyoji[2],orbu_rxhyoji=60,orbu_ryhyoji=0,orbu_rcount=0;
int orbu_bhyoji[2],orbu_bxhyoji=30,orbu_byhyoji=30,orbu_bcount=0;
int orbu_mhyoji[2],orbu_mxhyoji=90,orbu_myhyoji=30,orbu_mcount=0;
int honoo[3],ho_x,ho_y,ho_count;
bool orbuat_flag=false;
int i,j;
int suji[10],su_x=510,su_y=10,su_count=0;
int suji2[10],su2_x=540,su2_y=10,su2_count=0;
int suji3[20],su3_x=570,su3_y=10,su3_count=0;
int reibaisu;
int tairyoku;//体力ゲージ
int tairyoku_color,tai_colorX=143,tai_colorY=20;//体力カラーバー
int wall[2],wx,wy,w_count;

int Nowmap=1;//現在のマップ

//マップとの当たり判定(戻り値0当たらなかった 1:左辺に当たった 2:右辺に当たった
//                                           3:上辺に当たった 4:下辺に当たった
//MoveXとMoveY,どっちか片方が0じゃないと動作しない
int GetChipParam(float x,float y);
int CharMove(float *cx,float *cy,float DownSP,float Movex,float Movey,float size,float *p_flag);
int MapHitCheck(float x,float y,float *Move_shx,float *Move_shy);

map_data hantei[MAP_NUM] ={
	{
		120,20,
		{
			{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}, 
			{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},
			{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},
			{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}, 
			{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},

			{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},
			{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,1,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,1,1, 1,1,0,0,0, 0,0,1,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,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,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},
			{1,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,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 ,0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,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,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,1 ,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,1,1, 1,1,1,1,0, 0,0,0,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,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, 1,1,1,0,0, 0,0,0,1,1 ,0,0,0,1,1, 7,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 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,0, 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, 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, 1,1,1,0,0, 0,0,1,1,1 ,0,0,0,1,1, 1,7,0,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,1, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,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,0,0,0,0, 1,1,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 1,1,1,0,0, 0,1,1,1,1 ,0,0,0,1,1, 1,1,7,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,5,0, 0,0,0,0,0, 0,0,1,0,0, 0,0,0,0,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,0,0, 0,0,0,0,0, 1,1,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 1,1,1,0,0, 1,1,1,1,1 ,0,0,0,1,1, 1,1,1,7,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,1, 0,0,0,0,0, 0,1,1,1,1, 1,1,1,1,0, 4,0,0,0,0, 0,0,0,0,0, 0,0,0,0,2}, 
			{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,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 ,0,0,0,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,1,1, 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,6,0,0,0, 0,1,1,1,1, 1,1,1,1,1}, 	
		}
	},

	{
		20,20,
		{
			{1,0,0,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,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, 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,1,1},

			{1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1},
		    {1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1},
			{1,0,0,0,0, 0,1,1,1,1, 0,0,0,0,0, 0,0,0,1,1},
	        {1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1},
		    {1,0,0,0,0, 0,0,0,0,0, 0,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,1,1},
		    {1,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0},
			{1,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0},
			{1,0,0,0,1, 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, 6,6,6,6,6},	
		}
    },

	{
		60,30,
		{
			{1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,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,},
			{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,},
			{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,},
			{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,},

			{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,},
			{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,}, 
			{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,},
			{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,}, 
			{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,},

			{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,1,9,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 ,0,0,0,0,0, 0,0,0,0,0,},
			{0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 ,0,0,0,0,0, 0,0,0,0,0,},
			{0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 ,0,0,0,0,0, 0,0,0,0,0,},

			{0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 ,0,0,0,0,0, 0,0,0,0,0,},
			{0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 ,0,0,0,0,0, 0,0,0,0,0,}, 
			{0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 ,0,0,0,0,0, 0,0,0,0,0,},
			{0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 ,0,0,0,0,0, 0,0,0,0,0,}, 
			{0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 ,0,0,0,0,0, 0,0,0,0,0,},
		}
    },
};

// キャラクタをマップとの当たり判定を考慮しながら移動する
int CharMove(float *x,float *y,float *DownSP,float Movex,float Movey,float size,bool *p_flag){

    float Dummy = 0.0F ;
    float hsize ;

    // キャラクタの左上、右上、左下、右下部分が当たり判定のある
    // マップに衝突しているか調べ、衝突していたら補正する

    // 半分のサイズを算出
    hsize=size*0.5F ;

    // 先ず上下移動成分だけでチェック
    {
        // 左下のチェック、もしブロックの上にキャラがいたら落下停止
        if( MapHitCheck(*x-hsize,*y+hsize,&Dummy,&Movey)==3){
			*DownSP=0.0F;
		}

        if(MapHitCheck(*x+hsize,*y+hsize,&Dummy,&Movey)==3){
			*DownSP=0.0F;
		}

        if( MapHitCheck(*x-hsize,*y-hsize,&Dummy,&Movey)==4){
			*DownSP*=-1.0F;
		}

        if(MapHitCheck(*x+hsize,*y-hsize,&Dummy,&Movey)== 4){
			*DownSP*=-1.0F;
		}

        // 上下移動成分を加算
        *y+=Movey;
    }

    // 後に左右移動成分だけでチェック
    {
        // 左下のチェック
        MapHitCheck(*x-hsize,*y+hsize,&Movex,&Dummy);

        MapHitCheck(*x+hsize,*y+hsize,&Movex,&Dummy);

        MapHitCheck(*x-hsize,*y-hsize,&Movex,&Dummy);

        MapHitCheck(*x+hsize,*y-hsize,&Movex,&Dummy);

        // 左右移動成分を加算
        *x+=Movex;
    }

    // 接地判定
    {
        // キャラクタの左下と右下の下に床があるかどうか
        if(GetChipParam(*x-size*0.5F,*y+size*0.5F+1.0F)==0 && GetChipParam(*x+size*0.5F,*y+size*0.5F+1.0F)==0){
            // 床が無かったらジャンプ中にする
            *p_flag=true;
        }
        else{
            *p_flag=false;
        }
	}
    return 4;
}		

int MapHitCheck(float x,float y,float *Movex,float *Movey){

    float afX,afY;

    // 移動量を足す
    afX=x+*Movex;
    afY=y+*Movey;

    // 当たり判定のあるブロックに当たっているかチェック
    if(GetChipParam(afX,afY)==1){

        float blx,bty,brx,bby;

        // 当たっていたら壁から離す処理を行う

        // ブロックの上下左右の座標を算出
        blx=(float)((int)afX/CHIP_SIZE)*CHIP_SIZE;       
        brx=(float)((int)afX/CHIP_SIZE+1)*CHIP_SIZE;    
        bty=(float)((int)afY/CHIP_SIZE)*CHIP_SIZE;        
        bby=(float)((int)afY/CHIP_SIZE+1)*CHIP_SIZE;   

        // 上辺に当たっていた場合
        if(*Movey>0.0F){

            // 移動量を補正する
            *Movey=bty-y-1.0F ;

            // 上辺に当たったと返す
            return 3;
        }

        // 下辺に当たっていた場合
        if(*Movey<0.0F){

            // 移動量を補正する
            *Movey=bby-y+1.0F;

            // 下辺に当たったと返す
            return 4;
        }

        // 左辺に当たっていた場合
        if(*Movex>0.0F){
            // 移動量を補正する
            *Movex=blx-x-1.0F;
            // 左辺に当たったと返す
            return 1;
        }

        // 右辺に当たっていた場合
        if(*Movex<0.0F){
            // 移動量を補正する
            *Movex=brx-x+1.0F;
            // 右辺に当たったと返す
            return 2;
        }
        // ここに来たら適当な値を返す
        return 4;
    }
    // どこにも当たらなかったと返す
    return 0;
}

int GetChipParam(float x,float y){
	int cx,cy;
	 
	cx=(int)x/CHIP_SIZE;
	cy=(int)y/CHIP_SIZE;

	if(cx>=SCREEN_WIDTH || cy>=SCREEN_HEIGHT || cx<0 || cy<0){
		return 0;
	}
	return hantei[Nowmap].data[cy][cx];
}

//自画の上下移動
void jiga_move(){

	if(j_hp>0 && ji_flag==true){
		if(jigay>380){
			jigay--;
			if(jigay<=380){
				jigay=450;
			}
		}

		//ダメージ回復
		if(jigay==450 && j_hp<=950){
			j_hp++;
		}

		//弾との当たり判定 
		if(((mx>jigax&&mx<jigax+jw) || (jigax>mx&&jigax<mx+mw))&&((my>jigay&&my<jigay+jh) || (jigay>my&&jigay<my+mh))){//判定処理
			j_hp--;
			reitai++;
		}
		DrawGraph(jigax-DrawBaseX,jigay-DrawBaseY,jiga,TRUE);
	}else{
		ji_flag=false;
	}
}

//井戸・文字の上運動
void dao_move(){

	if(((px>id_x&&px<id_x+idw) || (id_x>px&&id_x<px+pw))&&((py>id_y&&py<id_y+idh) || (id_y>py&&id_y<py+ph))){//判定処理
		dao_y-=20;
	}

	if(dao_y-=20){
		PlaySoundMem(jam_dao,DX_PLAYTYPE_BACK);
	}
}

void reibai(){
	DrawString(px/2,240,"霊払成功!!",GetColor(255,255,255));
}

int updatekey(){
	char tKey[256];
	GetHitKeyStateAll(tKey);
	for(int tk=0;tk<256;tk++){
		if(tKey[tk]!=0){
			Key[tk]++;
		}else {
			Key[tk]=0;
		}
	}return 0;
}


//ゲームオーバー
void gameover(){
	LoadGraphScreen(0,0,"アクション画像/Gameover.png",FALSE);
}

//タイトル
void title(){

/*	//照明
	title_Bright++;
	WaitTimer(100);
	if(title_Bright>=255){
		title_Bright=255;
	}

	SetDrawBright(title_Bright,title_Bright,title_Bright);

	DrawGraph(0,0,haikei,FALSE);
	
	//点滅処理
	if(title_Bright>=255){
		count=(count+1)%16;																
		if(count<2){ 
			WaitTimer(100);
			DrawGraph(-30,100,t_moji,TRUE);
		}
	}*/

	if(Key[KEY_INPUT_G]==1){
		PlaySoundMem(st_oto,DX_PLAYTYPE_BACK);
		PlaySoundMem(st_call,DX_PLAYTYPE_BACK); 
		WaitTimer(3000);
		mode=1;
	}
}

//操作説明
void setumei(){

	DrawGraph(0,0,sousasetumei,TRUE);
	DrawString(320,230,"↑",st);
	DrawString(310,240,"←",st);
	DrawString(330,240,"→",st);

	DrawString(305,200,"ジャンプ",st);
	DrawString(250,240,"左移動",st);
	DrawString(360,240,"右移動",st);
	
	if(Key[KEY_INPUT_G]==1) mode=1;
	if(Key[KEY_INPUT_M]==1) mode=0; 

}

void kabe(){

	{
		if(Nowmap==0){
			DrawBaseX=px-SCREEN_WIDTH/4;
			DrawBaseY=0;
		}
		if(Nowmap==1){
			DrawBaseX=px-SCREEN_WIDTH;
			DrawBaseY=0;
		}
		if(Nowmap==2){
			DrawBaseX=px-SCREEN_WIDTH/4;
			DrawBaseY=py-SCREEN_HEIGHT/4;
		}

		if(DrawBaseX<0){
			DrawBaseX=0;									
		}

		if(DrawBaseX+SCREEN_WIDTH>MAP_WIDTH*CHIP_SIZE){
			DrawBaseX=MAP_WIDTH*CHIP_SIZE-SCREEN_WIDTH;
		}

		if(DrawBaseY<0){
			DrawBaseY=0;
		}

		if(DrawBaseY+SCREEN_HEIGHT>MAP_HEIGHT*CHIP_SIZE){
			DrawBaseY=MAP_HEIGHT*CHIP_SIZE-SCREEN_HEIGHT;
		}
	}
	
	//描画するマップチップの数をセット
    // マップを描く
    for(i=0;i<MAP_HEIGHT;i++){
        for(j=0;j<MAP_WIDTH;j++){
            // マップデータが1だったら四角を描画する
			if(hantei[Nowmap].data[i][j]==1 && Nowmap==0){
				DrawGraph((int)(j*CHIP_SIZE-DrawBaseX),(int)(i*CHIP_SIZE-DrawBaseY),wall[0],FALSE);
			}else if(hantei[Nowmap].data[i][j]==1 && Nowmap==1){
				DrawGraph((int)(j*CHIP_SIZE-DrawBaseX),(int)(i*CHIP_SIZE-DrawBaseY),wall[1],FALSE);
			}else if(hantei[Nowmap].data[i][j]==1 && Nowmap==2){
				DrawGraph((int)(j*CHIP_SIZE-DrawBaseX),(int)(i*CHIP_SIZE-DrawBaseY),wall[1],FALSE);
			}
			if(hantei[Nowmap].data[i][j]==2){
				DrawGraph(tx-DrawBaseX,ty-DrawBaseY,tera,TRUE);
			}
			if(hantei[Nowmap].data[i][j]==3){
				DrawGraph(tr_x-DrawBaseX,tr_y-DrawBaseY,torii,TRUE);
			}
			if(hantei[Nowmap].data[i][j]==4){
				DrawGraph(id_x-DrawBaseX,id_y-DrawBaseY,ido,TRUE);
			}
			if(hantei[Nowmap].data[i][j]==5){
				DrawGraph(dao_x-DrawBaseX,dao_y-DrawBaseY,dao,TRUE);
			}
		}
	}	
}	

//弾の関数
void mr_flag(int mx,int m1_flag,int muki){
	if(muki==1){
		if(m1_count<=640){
			mx+=10;
			m1_count++;
		}
	}
}

void pmove(){

	if(hp_x>0){
	
		{
			Movex=0.0F;
			Movey=0.0F;

			//左キーが押されたとき
			if(Key[KEY_INPUT_LEFT]==1){
				muki=1;
				key_flag=true;
				r_flag=1;
				Movex-=speed;
			}
		
			//右キーが押されたとき
			if(Key[KEY_INPUT_RIGHT]==1){
				muki=3;
				key_flag=true;
				r_flag=3;	
				Movex+=speed;
			}

			//上キーが押されたとき
			if(Key[KEY_INPUT_UP]==1 && p_flag==false){   
				muki=4;			
				p_downsp=-p_jump;
				p_flag=true;
			}
			p_downsp+=G;
			Movey=p_downsp;
			
			//下キーを押すと、落下速度がつく
			if(Key[KEY_INPUT_DOWN]==1){ 
				muki=2;
				p_downsp=10.0;
			}
		
			//主人公のアニメーション
			if(Key[KEY_INPUT_LEFT]==1){
				xcount++;
				if(xcount>=6){
					xcount=2;
				}
			}

			if(Key[KEY_INPUT_RIGHT]==1){
				xcount++;
				if(xcount>=3){
					xcount=0;
				}
			}

			if(Key[KEY_INPUT_DOWN]==1){
				xcount=6;
			}else{
				if(muki==1){
					xcount=3;
			}
				if(muki==3){
					xcount=0;
				}
			}

			if(Key[KEY_INPUT_Z]==1){
				xcount=7;
			}else{
				if(muki==1){
					xcount=3;
				}
				if(muki==3){
					xcount=0;
				}
			}
	
			CharMove(&px,&py,&p_downsp,Movex,Movey,CHAR_SIZE,&p_flag);	
		}

		//プレイヤー弾発射
		if(sp>=210){
			if(Key[KEY_INPUT_Z]==1 && pm_flag==false){
				mx=px-64;
				my=py-15;
				sp=sp-5;
				pm_flag=true;
			}	
		}

		//弾の移動処理
		if(pm_flag==true){
			if(muki==3 && m2_count==0){//右を向いていて、mxの減算処理が終了していたら
				mRL_flag=0;
			}
			if(muki==1 && m1_count==0){
				mRL_flag=1;
			}
		}

		if(mRL_flag==0){
			mcount=0;
			mx+=10;
			m1_count++;
			if(mx>=px+660){
				pm_flag=false;
				m1_count=0;//初期化する
			}
		}

		if(mRL_flag==1){
			mcount=1;
			mx-=10;
			m2_count++;
			if(mx<=px-660){
				pm_flag=false;
				m2_count=0;
			}
		}

		//アイテム出現
		if(e_flag==false){
			if(((px>orbu_bx&&px<orbu_bx+ow) || (orbu_bx>px&&orbu_bx<px+pw) || (orbu_bx>px&&orbu_bx<px+pw) || (px>orbu_bx&&px<orbu_bx+ow))&&((py>orbu_by&&py<orbu_by+oh) || (orbu_by>py&&orbu_by<py+ph))){
				orbuat_flag=true;
				DeleteGraph(orbu_b);
				orbu_bcount=1;
			}
		}

		if(orbu_bcount==1){
			ho_x=orbu_bxhyoji-2;
			ho_y=orbu_byhyoji-10;
			ho_count++;
			if(ho_count>=3){
					ho_count=0;
			}
		}

/*		//死神との当たり判定
		if(((ex>px&&ex<px+pw) || (px>ex&&px<ex+ew))&&((ey>py&&ey<py+ph) || (py>ey&&py<ey+eh))){																													
			if(g_hp>0){
				if(hp_x>=0){
					hp_x=0;
					tai_colorX=0;
					DeleteGraph(pr[xcount]);
					PlaySoundMem(st_BGM,DX_PLAYTYPE_BACK);
				}
			}
		}
		
		//ゾンビとの当たり判定
		if(((zx>px&&zx<px+pw) || (px>zx&&px<zx+zw))&&((zy>py&&zy<py+ph) || (py>zy&&py<zy+zh))){																													
			if(z_hp>0){
				if(zRL_flag==0){
					Movex=2;
				}
				if(zRL_flag==1){
					Movex=-2;
				}
				if(hp_x>=0){
					tai_colorX--;
					hp_x--;
				}else if(hp_x<0){
					DeleteGraph(pr[xcount]);
					PlaySoundMem(st_BGM,DX_PLAYTYPE_BACK);
				}
			}
		}
		*/
		//エクソシスト当たり判定
		if(((ec_x>px&&ec_x<px+pw) || (px>ec_x&&px<ec_x+ew))&&((ec_y>py&&ec_y<py+ph) || (py>ec_y&&py<ec_y+eh))){	
			sp--;
			if(sp<210){
				sp=210;
			}
		}

		//毒弾との当たり判定
		if(t_flag==true){
			if(((ht_x>px&&ht_x<px+pw) || (px>ht_x&&px<ht_x+htw))&&((ht_y>py&&ht_y<py+ph) || (py>ht_y&&py<ht_y+hth))){	
				hp_x--;
				tai_colorX--;
			}
		}

		//とりんドルとの当たり判定
		if(((tori_x>px&&tori_x<px+pw) || (px>tori_x&&px<tori_x+tow))&&((tori_y>py&&zy<py+ph) || (py>tori_y&&py<tori_y+toh)) && tori_flag==false){	
			if(tori_hp>0){
				tori_flag=true;
				DrawRotaGraph(px,py,PI/4,10.0,pr[xcount],TRUE);
				kaiten_count++;
				hp_x--;
				tai_colorX--;
				if(hp_x<0){
					DeleteGraph(pr[xcount]);
					PlaySoundMem(st_BGM,DX_PLAYTYPE_BACK);
				}
			}
		}

		//幽霊の当たり判定
		if(((yu_x>px&&yu_x<px+pw) || (px>yu_x&&px<yu_x+yw))&&((yu_y>py&&yu_y<py+ph) || (py>yu_y&&py<yu_y+yh))){	
			speed=1.0;
			p_jump=8.0;
		}

		//井戸文字あたり判定
		if(((dao_x>px&&dao_x<px+pw) || (px>dao_x&&px<dao_x+dw))&&((dao_y>py&&dao_y<py+ph) || (py>dao_y&&py<dao_y+dh))){	
			if(hp_x>0){
				hp_x--;
				tai_colorX--;
			}
		}

		//jigaとの当たり判定
		if(px+30==jigax&&py+30>jigay){
			px=px+1;
			if(px==jiga+128&&py+30>jigay){
				px=px-1;
			}
		}

		if(px+30>jigax&&px<jigax+128 && py+30<jigay){
			py=jigay;
			p_flag=false;
		}

		//死刑台上下
/*		if(dai_y>=480){
			up_flag=0;
		}
		if(dai_y<=0){
			up_flag=1;
		}

		if(up_flag==0){
			dai_y-=16;
		}
		if(up_flag==1){
			dai_y++;
		}*/

		//処刑台あたり判定
		if(px+30>dai_x+20&&px<dai_x+40 && py+30>dai_y){
			hp_x=hp_x-50;
			tai_colorX=tai_colorX-50;
			if(hp_x<=0){
				hp_x=0;
			}
		}

		//番人の落下
		if(((ito_x>px&&ito_x<px+pw) || (px>ito_x&&px<ito_x+iw))&&((ito_y>py&&ito_y<py+ph) || (py>ito_y&&py<ito_y+ih))){	
			ban_flag=true;
		}

		if(ban_flag==true){
			if(ban_y<=-448){
				bup_flag=1;
			}
			if(bup_flag==1){
				ban_y+=17;
			}
			if(ban_y>=0){
				bup_flag=0;
			}
			if(bup_flag==0){
				ban_y--;
			}
		}

		if(ban_y<=-448){
			ban_flag=false;
		}

		//番人の鉄槌
		if(((ban_x>px&&ban_x<px+pw) || (px>ban_x&&px<ban_x+bw))&&((ban_y>py&&ban_y<py+ph) || (py>ban_y&&py<ban_y+bh))){	
			if(hp_x>0){
				hp_x=hp_x-50;
				tai_colorX=tai_colorX-50;
				if(hp_x<=0){
					hp_x=0;
				}
			}
		}

		//mapchipが6の部分で下を押すと、別ステージへ行く
		if(px>=id_x && px<=id_x+128 && py<=id_y-96){
			if(Key[KEY_INPUT_DOWN]==1){
				py--;
			}
		}

		//寺の前でUPキーを押すと、クリアー
		if(px>=3660 && px>=3690 &&  py<=450 && py>=416){
			if(Key[KEY_INPUT_UP]==1){
				if(reitai>=1000){
					mode=2;
				}else{
					px=30;
					py=432;
				}
			}
		}

		//キャラクタの移動制御
		if(Nowmap==0){
			if(py<=0+32){
				py=0+32;
			}else if(py>=480){
					Nowmap=1;//マップの切り替え
					px=40;
					py=0;
				}
		}

		if(px<=0){
			px=0;
		}
	}

	if(Nowmap==0){
		DrawGraph(sh_x,sh_y,stage_haikei,FALSE);
	}
	if(Nowmap==1){
		DrawGraph(0,0,haikei2,FALSE);
	}

	kabe();
	jiga_move();
	dao_move();

	if(Nowmap==0){
		DrawGraph(ban_x-DrawBaseX,ban_y-DrawBaseY,bannin,TRUE);
		DrawGraph(ito_x-DrawBaseX,ito_y-DrawBaseY,kumo_ito,TRUE);
		DrawGraph(dai_x-DrawBaseX,dai_y-DrawBaseY,sikeidai,TRUE);
		DrawGraph(sike_x-DrawBaseX,sike_y-DrawBaseY,sikeisha,TRUE);
	}

	if(tori_flag==false){
		DrawGraph((int)(px-CHAR_SIZE*0.5F-DrawBaseX),(int)(py-CHAR_SIZE*0.5F-DrawBaseY),pr[xcount],TRUE);
	}

	if(pm_flag==true){
		DrawGraph(mx-DrawBaseX,my-DrawBaseY,misail[mcount],TRUE);
	}

	if(Nowmap==1){
		DrawGraph(320,64,dokan,TRUE);
	}

	if(Nowmap==0){
		DrawGraph(kx-DrawBaseX,ky-DrawBaseY,kage,TRUE);
	}

	DrawGraph(216,10,tairyoku,TRUE);
	DrawRectGraph(216,15,0,0,tai_colorX,tai_colorY,tairyoku_color,TRUE,FALSE);

	DrawGraph(su_x,su_y,suji[su_count],TRUE);
	DrawGraph(su2_x,su_y,suji[su2_count],TRUE);
	DrawGraph(su3_x,su_y,suji[su3_count],TRUE);
	DrawGraph(380,5,reibaisu,TRUE);

	DrawGraph(orbu_bxhyoji,orbu_byhyoji,orbu_bhyoji[orbu_bcount],TRUE);
	DrawGraph(orbu_rxhyoji,orbu_ryhyoji,orbu_rhyoji[orbu_rcount],TRUE);
	DrawGraph(orbu_mxhyoji,orbu_myhyoji,orbu_mhyoji[orbu_mcount],TRUE);
	DrawGraph(ho_x,ho_y,honoo[ho_count],TRUE);
	
	DrawFormatString(3,20,GetColor(255,255,255),"水しぶきは:%d",mi_x);
	DrawFormatString(3,45,GetColor(255,255,255),"水しぶきxは:%d",mi_y);
//	DrawFormatString(3,64,GetColor(255,255,255),"骨yの座標は:%d",hone_y);
//	DrawFormatString(3,100,GetColor(255,255,255),"移動量x軸:%f",Movex);
//	DrawFormatString(3,123,GetColor(255,255,255),"アイテムy軸:%d",GetNowCount);

	//メニュー画面
	if(Key[KEY_INPUT_M]==1){
		mode=0;
	}

	//操作説明画面
	if(Key[KEY_INPUT_S]==1){
		setumei();
	}

	//第二ステージ
	if(Nowmap==1){

		umi_x=480;
		umi_y=432;

		px_old=px;
		py_old=py;

		mi_x=px-30;
		mi_y=py;
			

		//水中移動	
	if(px>=umi_x && px<=umi_x+1500 && py>=umi_y){
		umi_flag=true;
		Movex=0;
		Movey=0;
		speed=1.0; 
		//p_downsp=3.0;
		G=0.1;

	}else umi_flag=false;

		if(umi_flag==true){
			if(Key[KEY_INPUT_UP]==1){
			Movey-=4;
			}
			if(Key[KEY_INPUT_DOWN]==1){
				Movey+=speed;
			}
			if(Key[KEY_INPUT_LEFT]==1){
				Movex-=speed;
			}

			if(Key[KEY_INPUT_RIGHT]==1){
				Movex+=speed;
			}

			if(px>=umi_y && px<=umi_x+1500 && py==umi_y){
				DrawGraph(mi_x,mi_y,mizu,TRUE);
				DeleteGraph(mizu);
			}
		}
		
		//移動制御
		if(py>=500){
			mode=5;
		}

		//ステージ移動
		if(px>=640){
			Nowmap=2;
			py=py_old;
			px=px_old;
		}

		DrawGraph(umi_x,umi_y,umi,TRUE);
		DrawGraph(seihai_x,seihai_y,seihai,TRUE);
		DrawGraph(orbu_mx,orbu_my,orbu_m,TRUE);
	}

	if(Nowmap==2){
		
		umi_x=0;
		umi_y=400;

		mi_x=px-30;
		mi_y=py;

		//水中移動
		if(px>=umi_x && px<=umi_x+1500 && py+10>umi_y){
			umi_flag=true;
		}else{
			umi_flag=false;	
		}

		if(umi_flag==false){
			p_downsp=4.0F;
			p_jump=10.0F;
			speed=3.0F;
		}

		if(umi_flag==true){
			p_flag=false;
			p_downsp=1.0F;
			p_jump=3.0F;
			speed=1.0F; 
		}

		if(Key[KEY_INPUT_UP]==1 && p_flag==false){
			p_downsp=-p_jump;
			p_flag=true;
		}
		p_downsp+=G;
		Movey=p_downsp;
		
		if(Key[KEY_INPUT_DOWN]==1){
			Movey+=speed;
		}
		if(Key[KEY_INPUT_LEFT]==1){
			Movex-=speed;
		}

		if(Key[KEY_INPUT_RIGHT]==1){
			Movex+=speed;
		}

		//水しぶき
		if(px>=umi_x && px>=umi_x+1500 && py+30==umi_y){
			DrawGraph(mi_x,mi_y,mizu,TRUE);
		//	DeleteGraph(mizu);
		}

		//移動制御
		if(py>=1200){
			py=1200;
		}

		DrawGraph(umi_x-DrawBaseX,umi_y-DrawBaseY,umi,TRUE);
	}
}

void enemy(){
	
	if(Nowmap==0){
	//死神
	if(g_hp>0){

		//アイテム座標初期化
		orbu_bx=ex;
		orbu_by=ey+60;

		ey-=e_junp;
		e_junp-=1;

		if(e_flag==true){
			if(ey>=366){
				ey=366;
				e_junp=0;
				ep_flag=false;
			}
			if(p_flag==true && ep_flag==false){
				ep_flag=true;
				e_junp=22;
			}
		}

		//死神と弾の当たり判定
		if(pm_flag==true || e_flag==true){
			if(((mx>ex&&mx<ex+ew) || (ex>mx&&ex<mx+mw))&&((my>ey&&my<ey+eh) || (ey>my&&ey<my+mh))){//判定処理
				g_hp--;
				ex=ex+2;
				reitai++;

				//除霊数表示
				su3_count++;
				if(su3_count>=10){
					su3_count=0;
					if(su3_count==0){
						su2_count++;
					}
				}
				if(reitai==100){
					su_count++;
					reitai=0;
				}
			}
		}

		//敵移動制御
		if(px<=ex){
			ex--;
		}else if(px>=ex){
			ex++;
		}
		DrawGraph(ex-DrawBaseX,ey-DrawBaseX,goki,TRUE);
		DrawFormatString(ex+35-DrawBaseX,ey+35-DrawBaseY,GetColor(255,0,255),"HP:%d",g_hp);
	}else{ 
		e_flag=false;
		DrawGraph(orbu_bx-DrawBaseX,orbu_by-DrawBaseY,orbu_b,TRUE);
	}

	//ゾンビ
	if(z_hp>0 && e_flag==false){
		z_flag=true;
		if(z_flag==true){
			zy-=z_junp;
			z_junp-=1;

			if(z_flag==true){
				if(zy>=386){
					zy=386;
					z_junp=0;
					zp_flag=false;
				}
				if(p_flag==true && zp_flag==false){
					zp_flag=true;
					z_junp=3;
				}
			}
		}

		if(((mx>zx&&mx<zx+mw) || (zx>mx&&zx<mx+mw))&&((my>zy&&my<zy+zh) || (zy>my&&zy<my+mh))){//弾との判定処理
			if(mRL_flag==1){
				zx=zx-2;
			}
			if(mRL_flag==0){
				zx=zx+2;
			}
			z_hp--;
			reitai++;
			
			//除霊数表示
			su3_count++;
			if(su3_count>=10){
				su3_count=0;
				if(su3_count==0){
					su2_count++;
				}
			}
			if(reitai==100){
				su_count++;
				reitai=0;
			}
		}

		if(((px>zx&&px<zx+pw) || (zx>px&&zx<px+pw))&&((py>zy&&py<zy+zh) || (zy>py&&zy<py+ph))){//キャラとの判定処理
			if(zRL_flag==0){
				zx_count=6;
				zx=px;
			}
			if(zRL_flag==1){
				zx_count=8;
				zx=px;
			}
		}

		if(px<=zx){
			zx--;
			zx_count++;
			if(zx_count>=3){
				zx_count=0;
			}
			if(zx==px){
				zRL_flag=0;
			}
		}else if(px>=zx){
			zx++;
			zx_count++;
			if(zx_count>=6){
				zx_count=3;
			}
			if(zx==px){
				zRL_flag=1;
			}
		}

		DrawGraph(zx-DrawBaseX,zy-DrawBaseY,zonbi[zx_count],TRUE);
		DrawFormatString(zx+35-DrawBaseX,zy-1-DrawBaseY,GetColor(255,0,255),"HP:%d",z_hp);
	}else{
		z_flag=false;
	}

	//砲台
	if(h_hp>0){

		ht_oldcount=ht_count;

		ht_count++;
		if(ht_count>=16){
			ht_count=0;
		}
		if(px>=ht_x+32){
			ht_count=17;
		}

		//毒弾
		if(t_flag==false){
			tama_x=ht_x+30;
			tama_y=ht_y;
			t_flag=true;
		}

		if(t_flag==true && px<=ht_x+32){
			tkyori_x=ht_x-px;
			tkyori_y=ht_y-py;
			tkyori=sqrt((double)tkyori_x*tkyori_x+(double)tkyori_y*tkyori_y);
			tMovex=tama_x/tkyori*12;
			tMovey=tama_y/tkyori*12;
			tama_x-=tMovex;
			tama_y+=tMovey;
			DrawGraph((int)tama_x-DrawBaseX,(int)tama_y-DrawBaseY,tama,TRUE);

			if(tama_y>=480){
				t_flag=false;
			}
		}
		DrawGraph(hx-DrawBaseX,hy-DrawBaseY,hodai,TRUE);
	}

	DrawGraph(hk_x-DrawBaseX,hk_y-DrawBaseY,hodai_kaiten,TRUE);
	DrawGraph(ht_x-DrawBaseX,ht_y-DrawBaseY,hodai_tori[ht_count],TRUE);


	//幽霊
	if(yu_hp>0){

		if(yuat_flag==false){
			if(yu_x<=2670){
				RL_flag=0;
			}
			if(yu_x>=2804){
				RL_flag=1;
			}

			if(RL_flag==0){
				yu_x++;
				yu_count++;
				if(yu_count>=4){
					yu_count=2;
				}
			}	
			if(RL_flag==1){
				yu_x--;
				yu_count++;
				if(yu_count>=2){
					yu_count=0;
				}
			}
		}

		if(((px>yu_x&&px<yu_x+pw) || (yu_x>px&&yu_x<px+pw))&&((py>yu_y&&py<yu_y+yh) || (yu_y>py&&yu_y<py+ph))){//判定処理
			yuat_flag=true;
		}
		
		//主人公に添わせる
		if(yuat_flag==true){
			if(muki==1 || muki==4){
				yu_x=px-11;
				yu_y=py-24;
				yu_count=5;
			}
			
			if(muki==3 || muki==4){
				yu_x=px-44;
				yu_y=py-24;
				yu_count=4;
			}
		}

		DrawGraph(yu_x-DrawBaseX,yu_y-DrawBaseY,yurei[yu_count],TRUE);
		DrawFormatString(yu_x+7-DrawBaseX,yu_y-15-DrawBaseY,GetColor(255,0,255),"HP:%d",yu_hp);
	}
	
	//とりんドル
	if(tori_hp>0){
		tori_count++;
		if(tori_count==2){
			tori_count=0;
		}

		DrawGraph(tori_x-DrawBaseX,tori_y-DrawBaseY,torinn[tori_count],TRUE);
		DrawFormatString(tori_x+43-DrawBaseX,tori_y-17-DrawBaseY,GetColor(255,0,255),"HP:%d",tori_hp);
	}

	//エクソシスト
	if(ec_hp>0){

		//進行方向
		if(ec_x<=876){
			ecRL_flag=0;
		}
		if(ec_x>=1040){
			ecRL_flag=1;
		}

		//移動制御とアニメーション
		if(ecRL_flag==0){
			ec_x++;
			ec_count++;
			if(ec_count>=6){
				ec_count=4;
			}
		}
		if(ecRL_flag==1){
			ec_x--;
			ec_count++;
			if(ec_count>=3){
				ec_count=0;
			}
		}

		//弾との当たり判定
		if(((mx>ec_x&&mx<ec_x+ecw) || (ec_x>mx&&ec_x<mx+mw))&&((my>ec_y&&my<ec_y+ech) || (ec_y>my&&ec_y<my+mh))){
			if(mRL_flag==0){
				ec_x=ec_x+2;
			}
			if(mRL_flag==1){
				ec_x=ec_x-2;
			}
			ec_hp--;
			reitai++;

			//除霊数表示
			su3_count++;
			if(su3_count>=10){
				su3_count=0;
				if(su3_count==0){
					su2_count++;
				}
			}
			if(reitai==100){
				su_count++;
				reitai=0;
			}
		}

		DrawGraph(ec_x-DrawBaseX,ec_y-DrawBaseY,ecso[ec_count],TRUE);
		DrawFormatString(ec_x+10-DrawBaseX,ec_y-14-DrawBaseY,GetColor(255,0,255),"HP:%d",ec_hp);
	}

	//花2

	hana2_oldcount=hana_count;

	if(hana2_y<=0){
		h_udflag=1;
	}
	if(hana2_y>=320){
		h_udflag=0;
	}

	if(h_udflag==1){
		hana2_y+=5;
		hana_count=hana2_oldcount;
	}
	if(h_udflag==0){
		hana2_y--;
		hana_count++;
		if(hana_count>=2){
			hana_count=0;
		}
	}

	//弾との当たり判定
	if(((mx>hana2_x&&mx<hana2_x+hana2w) || (hana2_x>mx&&hana2_x<mx+mw))&&((my>hana2_y&&my<hana2_y+hana2h) || (hana2_y>my&&hana2_y<my+mh))){
		hana2at_flag=true;
	}

	if(hana2at_flag==true){
		hana_count=2;
		hana2_x+=2;
		hana2_y+=G;
		if(hana2_y>=420){
			hana2_y=420;
		}
	}

	DrawGraph(hana2_x-DrawBaseX,hana2_y-DrawBaseY,hana2[hana_count],TRUE);	

	//花
	DrawGraph(hana_x-DrawBaseX,hana_y-DrawBaseY,hana,TRUE);	

	}

	if(Nowmap==1){

		//骸骨
		if(((px>ga_x&&px<ga_x+pw) || (ga_x>px&&ga_x<px+pw))&&((py>ga_y&&py<ga_y+gah) || (ga_y>py&&ga_y<py+ph))){//キャラとの判定処理
			ga_flag=true;
			if(ga_counter==2){
				ga_count=0;
				ga_counter=0;
			}
		}
/*		if((pw>=gaw&&pw<=gaw) && (ph<=gah&&ph>=gah) && (p_downsp==10.0)){
			siri_flag=true;
			ga_flag=false;
			ga_count=0;
			printfDx("dsfds");
		}*/
	
		if(ga_flag==true){
			ga_counter++;
			if(px>=ga_x){
				ga_x++;
				ga_count++;
				if(ga_count>=5){
					ga_count=3;
				}
			}
			if(px<=ga_x){
				ga_x--;
				ga_count++;
				if(ga_count>=3){
					ga_count=1;
				}
			}
		}

		if(gat_flag==false){
			hone_x=ga_x+30;
			hone_y=ga_y;
			gat_flag=true;
		}

		//骨飛ばし
	if(ga_flag==true && gat_flag==true && px<=ga_x+32){
			gakyori_x=ga_x-px;
			gakyori_y=ga_y-py;
			gakyori=sqrt((double)gakyori_x*gakyori_x+(double)gakyori_y*tkyori_y);
			gaMovex=hone_x/gakyori*12;
			gaMovey=hone_y/gakyori*12;

			if(px<=ga_x){
				hone_x-=gaMovex;
				if(py<=ga_y){
					hone_y-=gaMovey;
				}
			}
			if(px>=ga_x){
				hone_x+=gaMovex;
				if(py<=ga_y){
					hone_y-=gaMovey;
				}
			}

			hot_count++;
			if(hot_count==3){
				hot_count=0;
			} 
			DrawGraph(hone_x,hone_y,honet[hot_count],TRUE);

			if(hone_x<=30 || hone_x>=620 || hone_y<=0 || hone_y>=480){
				gat_flag=false;
			}
		}
		DrawGraph(ga_x,ga_y,gaikotu[ga_count],TRUE);
	}	
}

void stage(){
	pmove();
	enemy();
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ 
	
	ChangeWindowMode(TRUE);
	SetMainWindowText("maze a point");

	if( DxLib_Init() == -1 ){
		return -1;
	}

	t_moji=LoadGraph("アクション画像/スタート1.png");
	haikei=LoadGraph("アクション画像/メニュー背景1.png");
	tai_sound=LoadSoundMem("アクション音声/1up.wav");
	st_call=LoadSoundMem("アクション音声/スタートコール.wav");
	st_oto=LoadSoundMem("アクション音声/スタート音.wav");
	st_BGM=LoadSoundMem("アクション音声/ステージBGM.wav");
	jam_dao=LoadSoundMem("アクション音声/だお.wav");

	haikei2=LoadGraph("アクション画像/背景2.png");
	umi=LoadGraph("アクション画像/水.png");
	mizu=LoadGraph("アクション画像/水しぶき.png");
	seihai=LoadGraph("アクション画像/聖杯.png");
	LoadDivGraph("アクション画像/骨飛ばし.png",3,3,1,30,30,honet);

	LoadDivGraph("アクション画像/幽霊.png",6,2,3,44,64,yurei);
	LoadDivGraph("アクション画像/ゾンビ.png",6,3,4,30,60,zonbi);
	LoadDivGraph("アクション画像/tekiat.png",8,3,3,30,30,pr);
	LoadDivGraph("アクション画像/とりんドル.png",2,2,1,150,120,torinn);
	LoadDivGraph("アクション画像/エクソシスト.png",6,3,2,60,30,ecso);
	LoadDivGraph("アクション画像/砲台_とりんどる.png",18,5,4,105,64,hodai_tori);
	hana=LoadGraph("アクション画像/花.png");
	LoadDivGraph("アクション画像/hana2.png",3,3,1,30,65,hana2);

	LoadDivGraph("アクション画像/teki.png",2,2,1,32,32,wall);
	goki=LoadGraph("アクション画像/キャラクタ01.png");
	LoadDivGraph("アクション画像/弾00.png",2,2,1,64,32,misail);
	dokan=LoadGraph("アクション画像/土管.png");
	LoadDivGraph("アクション画像/骸骨.png",6,3,2,57,61,gaikotu);

	orbu_r=LoadGraph("アクション画像/オーブ 赤.png");
	orbu_b=LoadGraph("アクション画像/オーブ 紫.png");
	orbu_m=LoadGraph("アクション画像/オーブ 黄色.png");
	LoadDivGraph("アクション画像/オーブ 赤 表示.png",2,2,1,30,30,orbu_rhyoji);
	LoadDivGraph("アクション画像/オーブ 紫 表示.png",2,2,1,30,30,orbu_bhyoji);
	LoadDivGraph("アクション画像/オーブ 黄色 表示.png",2,2,1,30,30,orbu_mhyoji);
	LoadDivGraph("アクション画像/炎.png",3,3,1,50,50,honoo);
	LoadDivGraph("アクション画像/数字.png",10,10,1,30,30,suji);
	LoadDivGraph("アクション画像/数字2.png",10,10,1,30,30,suji2);
	LoadDivGraph("アクション画像/数字3.png",10,10,1,30,30,suji3);
	reibaisu=LoadGraph("アクション画像/霊払数.png");
	tairyoku=LoadGraph("アクション画像/体力バー(仮).png");
	tairyoku_color=LoadGraph("アクション画像/カラーバー(仮).png");
	
	stage_haikei=LoadGraph("アクション画像/ステージ背景.png");
	tera=LoadGraph("アクション画像/お寺.png");
	torii=LoadGraph("アクション画像/鳥居.png");
	ido=LoadGraph("アクション画像/井戸.png");
	dao=LoadGraph("アクション画像/井戸・文字.png");
	jiga=LoadGraph("アクション画像/自画.png");
	kage=LoadGraph("アクション画像/影.png");

	hodai=LoadGraph("アクション画像/砲台.png");
	hodai_kaiten=LoadGraph("アクション画像/砲台_回転部.png");
	sikeisha=LoadGraph("アクション画像/死刑者.png");
	sikeidai=LoadGraph("アクション画像/死刑台.png");
	kumo_ito=LoadGraph("アクション画像/雲の糸.png");
	bannin=LoadGraph("アクション画像/番人.png");
	tama=LoadGraph("アクション画像/毒弾.png");

	sousasetumei=LoadGraph("アクション画像/操作説明.png");

	//グラフィックの縦、横の幅を得る
	GetGraphSize(misail[mcount],&mw,&mh);
	GetGraphSize(pr[xcount],&pw,&ph);

	GetGraphSize(goki,&ew,&eh);
	GetGraphSize(zonbi[zx_count],&zw,&zh);
	GetGraphSize(ecso[ec_count],&ecw,&ech);
	GetGraphSize(jiga,&jw,&jh);
	GetGraphSize(torinn[tori_count],&tow,&toh);
	GetGraphSize(yurei[yu_count],&yw,&yh);
	GetGraphSize(bannin,&bw,&bh);
	GetGraphSize(kumo_ito,&iw,&ih);
	GetGraphSize(hana2[hana_count],&hana2w,&hana2h);

	GetGraphSize(dao,&dw,&dh);
	GetGraphSize(ido,&idw,&idh);
	GetGraphSize(kumo_ito,&iw,&ih);
	GetGraphSize(tama,&htw,&hth);

	GetGraphSize(gaikotu[ga_count],&gaw,&gah);

	SetDrawScreen( DX_SCREEN_BACK );

		while(1){	
			ClearDrawScreen();
			GetHitKeyStateAll(Key);

			switch(mode){
			case 0:
				title();
				break;
			case 1:
				stage();
				break;
			case 2:
			//	stage2();
				break;
			case 5:
				gameover();
				break;
			
			default:
				DxLib_End();
				return 0;
				break;
			}

		if(Key[KEY_INPUT_ESCAPE]==1){
			break;
		}
		if(ProcessMessage()==-1){
			break;
		}
		ScreenFlip();
	}
	DxLib_End();
	return 0;
}




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

Re: 水中移動

#8

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

質問の問題は解決したのですね。良かったです。
さて、新たな質問と最初の質問の内容が違ってきてますので新たなトピックでお願いします。
この質問は、解決チェックして終了しておいてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ふぉと

Re: 水中移動

#9

投稿記事 by ふぉと » 11年前

いや、ここで答えていただいてもいいでしょ?笑

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

Re: 水中移動

#10

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

申し訳ありませんが、名前の統一をお願いします。
あと必要以上に親しい態度も掲示板のもめる原因になるのでご遠慮ください。
掲示板は、質問者・回答者・閲覧者すべての人に有意義になる様にしたいと思っております。
このまま続けるのは、回答者・閲覧者にとって検索しにくい内容となります。

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

閉鎖

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