コード:
//
//GV.h 大量の引数宣言
//
#include "../../../include/DxLib.h"
#include "define.h"
#include "math.h"
#ifdef GLOBAL_INSTANCE
#define GLOBAL
#else
#define GLOBAL extern
#endif
#include "function.h"
//画像用変数宣言部
GLOBAL int img_user[256]; //ユーザーアイコン
GLOBAL int img_block[256]; //壁、床とかの画像
GLOBAL int img_item[32]; //アイテム画像
GLOBAL int img_board[256]; //その他画像
//音楽ファイル用変数宣言部
GLOBAL int sound_se[SE_MAX];
GLOBAL int sound_bgm[BGM_MAX];
GLOBAL int bgm_flag[BGM_MAX];
//フラグ・ステータス変数
GLOBAL int MOVE_CNT_MAX;
GLOBAL int func_state; //関数制御用変数
GLOBAL int global_cnt; //何にでもとりあえず使う適当なカウント
GLOBAL int speed_flag;//加速するか?
GLOBAL FILE *TxtHandle_key;
GLOBAL int key_config_flag[19];//フラグが0の時、そのフラグ番号のキー設定を行なう。
GLOBAL unsigned char key_down;
GLOBAL unsigned char key_left;
GLOBAL unsigned char key_right;
GLOBAL unsigned char key_up;
GLOBAL unsigned char key_esc;
GLOBAL unsigned char key_z;
GLOBAL unsigned char key_x;
GLOBAL unsigned char key_c;
GLOBAL unsigned char key_v;
GLOBAL unsigned char key_a;
GLOBAL unsigned char key_s;
GLOBAL unsigned char key_d;
GLOBAL unsigned char key_f;
GLOBAL unsigned char key_q;
GLOBAL unsigned char key_w;
GLOBAL unsigned char key_e;
GLOBAL unsigned char key_r;
GLOBAL unsigned char key_space;
GLOBAL unsigned char key_enter;
GLOBAL int right_move_cnt;//右移動制御
GLOBAL int left_move_cnt;//左移動制御
GLOBAL int down_move_cnt;//下移動制御
GLOBAL int up_move_cnt;//上移動制御
GLOBAL int time_hour;//時間(時間)
GLOBAL int time_minute;//時間(分)
GLOBAL int small_font;
GLOBAL int large_font;
GLOBAL int more_large_font;
GLOBAL int block[HEIGHT][WIDTH];
GLOBAL int message_cnt;//何個メッセージが書かれたかの最大値を見る
GLOBAL int message_graph_cnt;//メッセージを1から順に表示する
GLOBAL int message_rest_flag;//メッセージが2つ以上残っていたら移動させない
GLOBAL int pre_icon[1024];
GLOBAL char pre_id[1024][255];//pre_id[配列数][文字数]
GLOBAL char pre_message[3][1024][255];//pre_message[行目][配列数][文字数]
GLOBAL int pause_select_number;
GLOBAL int belongings[20]; //持ち物
GLOBAL int item_MAX;//今持ってるアイテム数
GLOBAL int clear_flag;
GLOBAL int item_select_number;//今カーソルの当たっているアイテムの番号
GLOBAL int item_what_to_do;//アイテムで選択肢から選んだ制御
GLOBAL int select_number_zero_flag;//アイテムカーソルをゼロに戻すフラグ
//構造体変数宣言部
GLOBAL configpad_t configpad;//コンフィグで設定したキー情報
GLOBAL ch_t ch; //キャラクタデータ宣言
GLOBAL pad_t pad;
GLOBAL item_t item[256];
GLOBAL item_kind kind[1000];
//
//main.cpp すべてのまとめ
//
case 100://メイン
if(CheckStatePad(configpad.x)>0 && left_move_cnt==MOVE_CNT_MAX && right_move_cnt==MOVE_CNT_MAX && up_move_cnt==MOVE_CNT_MAX && down_move_cnt==MOVE_CNT_MAX ){speed_flag=1;}
else if(CheckStatePad(configpad.x)==0 && left_move_cnt==MOVE_CNT_MAX && right_move_cnt==MOVE_CNT_MAX && up_move_cnt==MOVE_CNT_MAX && down_move_cnt==MOVE_CNT_MAX ){speed_flag=0;}
calc_main();
graph_main();
item_zero_flag=0;
if(CheckStatePad(configpad.a)>0 && left_move_cnt==MOVE_CNT_MAX && right_move_cnt==MOVE_CNT_MAX && up_move_cnt==MOVE_CNT_MAX && down_move_cnt==MOVE_CNT_MAX && message_rest_flag!=1){clear_flag=1;func_state=110;}
break;
case 110://pause
pause_select_number_move();
pause_graph_main();
if(pause_select_number==0 && CheckStatePad(configpad.z)==1 && item_MAX!=0){func_state=120;}
if(pause_select_number==0 && CheckStatePad(configpad.z)==1 && item_MAX==0 && item_zero_flag==0){message_add(0,"namari(namari)","がさごそ…なかはゴミばっかり!");item_zero_flag=1;}
if(pause_select_number==3 && CheckStatePad(configpad.z)==1){end_flag=1;}
if(CheckStatePad(configpad.x)==1){func_state=100;}
break;
case 120://道具
pause_graph_item();
if(CheckStatePad(configpad.z)==1){item_belongings_number=belongings[item_select_number];func_state=130;}
if(CheckStatePad(configpad.x)==1){func_state=110;}
break;
//
//graph.cpp
//
void message_add(int icon,char id[],char message[]){//アイコンの画像番号、名前、メッセージ
char *tp;
int i=0;
message_cnt++;
pre_icon[message_cnt]=icon;
strncpy(pre_id[message_cnt],id,255);
tp = strtok( message, "@" );
strncpy(pre_message[0][message_cnt],tp,255);
while ( tp != NULL ) {
i++;
tp = strtok( NULL,"@" );
if ( tp != NULL ) strncpy(pre_message[i][message_cnt],tp,255);
}
}
void message_add(int icon,char id[],char message1[],char argument[],char message2[]){//アイコンの画像番号、名前、メッセージ1,受け取る引数、メッセージ2
char *tp;
int i=0;
char message[255];
message_cnt++;
pre_icon[message_cnt]=icon;
strncpy(pre_id[message_cnt],id,255);
sprintf(message,"%s%s%s",message1,argument,message2);
tp = strtok( message, "@" );
strncpy(pre_message[0][message_cnt],tp,255);
while ( tp != NULL ) {
i++;
tp = strtok( NULL,"@" );
if ( tp != NULL ) strncpy(pre_message[i][message_cnt],tp,255);
}
}
void graph_mess(){//メッセージウィンドウ(後ろ、アイコン、ID名、メッセージ内容、時間)
if(clear_flag==1&&message_graph_cnt==message_cnt){message_graph_cnt++;}
if(message_cnt==0){
message_rest_flag=0;
}
else if(message_cnt-message_graph_cnt>=1){
SetDrawBlendMode( DX_BLENDMODE_ALPHA, 200 );
DrawGraph(0,360,img_board[202] , FALSE );
SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0 );
DrawRotaGraph( 67, 360+23, (float)30/48, 0.0, img_user[pre_icon[message_graph_cnt]], FALSE );
DrawRotaGraph( 570, 460 , 1.0 , -PI/36*global_cnt ,img_board[203], TRUE );//メッセージ次あるよボタン
DrawFormatString( 100, 360+8, BLUE, pre_id[message_graph_cnt]);
DrawFormatString( 48, 360+54, BLACK, pre_message[0][message_cnt]);
DrawFormatString( 48, 360+74, BLACK, pre_message[1][message_cnt]);
DrawFormatString( 48, 360+94, BLACK, pre_message[2][message_cnt]);
DrawFormatStringToHandle( 106, 360+33, BLACK,small_font, "%02d:%02d" ,time_hour,time_minute);
message_rest_flag=1;
if(CheckStatePad(configpad.z)==1){message_graph_cnt++;}
}
else if(message_cnt-message_graph_cnt==0){
SetDrawBlendMode( DX_BLENDMODE_ALPHA, 200 );
DrawGraph(0,360,img_board[202] , FALSE );
SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0 );
DrawRotaGraph( 67, 360+23, (float)30/48, 0.0, img_user[pre_icon[message_graph_cnt]], FALSE );
DrawFormatString( 100, 360+8, BLUE, pre_id[message_cnt]);
DrawFormatString( 48, 360+54, BLACK, pre_message[0][message_cnt]);
DrawFormatString( 48, 360+74, BLACK, pre_message[1][message_cnt]);
DrawFormatString( 48, 360+94, BLACK, pre_message[2][message_cnt]);
DrawFormatStringToHandle( 106, 360+33, BLACK,small_font, "%02d:%02d" ,time_hour,time_minute);
message_rest_flag=0;
}
}
void graph_itemmenu(){
int i,j;static int page=0,number=0;char *tp;char message[3][255];
for(j=0;j<3;j++){strncpy(message[j],NULL,255);}
SetDrawBlendMode( DX_BLENDMODE_ALPHA, 200 );
DrawGraph(0,60,img_board[204] , TRUE );
SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0 );
if(belongings[10]>0){DrawGraph(360,48,img_board[206],TRUE );
if(CheckStatePad(configpad.right)==1 || CheckStatePad(configpad.left)==1 && select_move_flag==1){page=(page+1)%2;number=0;}}
if(page==0){
for(i=0;i<=9;i++){
if(belongings[i]>0){DrawRotaGraph( 60, 80+28*i, 0.6, 0.0, kind[belongings[i]].img, TRUE );}
if(belongings[i]>0){DrawFormatString( 80,75+28*i, WHITE, kind[belongings[i]].name);}
}
}
if(page==1){
for(i=10;i<=19;i++){
if(belongings[i]>0){DrawRotaGraph( 60, 80+28*(i-10), 0.6, 0.0, kind[belongings[i]].img, TRUE );}
if(belongings[i]>0){DrawFormatString( 80,75+28*(i-10), WHITE, kind[belongings[i]].name);}
}
}
if(item_MAX!=0 && page==0){
if(item_MAX<=10){
if(CheckStatePad(configpad.down)==1 && select_move_flag==1){number=(number+1)%item_MAX;}
if(CheckStatePad(configpad.up)==1 && select_move_flag==1){number=(number+item_MAX-1)%item_MAX;}
}
if(item_MAX>10){
if(CheckStatePad(configpad.down)==1 && select_move_flag==1){number=(number+1)%10;}
if(CheckStatePad(configpad.up)==1 && select_move_flag==1){number=(number+10-1)%10;}
}
}
if(item_MAX!=0 && page==1){
if(CheckStatePad(configpad.down)==1 && select_move_flag==1){number=(number+1)%(item_MAX-10);}
if(CheckStatePad(configpad.up)==1 && select_move_flag==1){number=(number+(item_MAX-10)-1)%(item_MAX-10);}
}
if(select_number_zero_flag==1){number=0;select_number_zero_flag=0;page=0;}
DrawGraph( 16, 75+number*28, img_board[205] , TRUE );
SetDrawBlendMode( DX_BLENDMODE_ALPHA, 200 );
DrawGraph(0,360,img_board[202] , FALSE );
SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0 );
DrawRotaGraph( 67, 360+23, (float)30/48, 0.0, img_user[0], FALSE );
DrawFormatString( 100, 360+8, BLUE, "namari(namari)");
tp = strtok( kind[belongings[number]].explain, "@" );/*↓おそらくここから問題の場所*/
strncpy(message[0],tp,255);
while ( tp != NULL ) {
i++;
tp = strtok( NULL,"@" );
if ( tp != NULL ) strncpy(message[i],tp,255);
}
DrawFormatString( 48, 360+54, BLACK, message[0]);
DrawFormatString( 48, 360+74, BLACK, message[1]);
DrawFormatString( 48, 360+94, BLACK, message[2]);
DrawFormatStringToHandle( 106, 360+33, BLACK,small_font, "%02d:%02d" ,time_hour,time_minute);
item_select_number=number+page*10;
}
//普段のゲーム画面の時、mainから呼ばれる。
void graph_main(){
graph_back();//背景画像
graph_block();//ブロック画像
graph_item();//アイテム画像
graph_up();//上部のステータス
graph_ch();//主人公画像
graph_mess();//メッセージ制御
graph_status();//デバッグプレイで内部値を見る用
}
//ポーズ画面の時、mainから呼ばれる。
void pause_graph_main(){
graph_back();
graph_block();
graph_item();
graph_up();
graph_ch();
graph_pause();
graph_character();
graph_mess();
graph_status();
}
//ポーズ画面で、道具を選択したとき、mainから呼ばれる。
void pause_graph_item(){
select_move_flag=1;
graph_back();
graph_block();
graph_item();
graph_up();
graph_ch();
graph_itemmenu();
graph_mess();
graph_status();
}
//
//item.cpp
//
#include "../include/GV.h"
int dont_flag=0;//拾わないフラグ
void item_get(){
int i,j;
for(i=0;i<=255;i++){
if(ch.x==item[i].x && ch.y==item[i].y && item[i].kind!=0 && speed_flag==0 && dont_flag==0 && right_move_cnt==MOVE_CNT_MAX && left_move_cnt==MOVE_CNT_MAX && down_move_cnt==MOVE_CNT_MAX && up_move_cnt==MOVE_CNT_MAX){
for(j=0;j<=19;j++){if(belongings[j]==0){belongings[j]=item[i].kind;item_MAX=j+1;break;}}
message_add(0,"namari(namari)","",kind[item[i].kind].name,"を手に入れた。");
item[i].kind=0;
}
if(ch.x==item[i].x && ch.y==item[i].y && item[i].kind!=0 && speed_flag==1 && dont_flag==0 && right_move_cnt==MOVE_CNT_MAX && left_move_cnt==MOVE_CNT_MAX && down_move_cnt==MOVE_CNT_MAX && up_move_cnt==MOVE_CNT_MAX){
message_add(0,"namari(namari)","",kind[item[i].kind].name,"の上に乗った。");
dont_flag=1;
}
}
if(right_move_cnt!=MOVE_CNT_MAX || left_move_cnt!=MOVE_CNT_MAX || down_move_cnt!=MOVE_CNT_MAX || up_move_cnt!=MOVE_CNT_MAX){dont_flag=0;}
}
void item_loss(int number){
int i;
select_number_zero_flag=1;
for(i=number;i<item_MAX;i++){
belongings[i]=belongings[i+1];
}
item_MAX=item_MAX-1;
}
void item_main(){
item_get();
}
void item_ini(){
/*
strcpy(kind[].name,"");
strcpy(kind[].explain,"");
kind[].price=;
kind[].img=LoadGraph("dat/img/.png");
kind[].alternative=;
strcpy( kind[].select[0],"");
strcpy( kind[].select[1],"");
strcpy( kind[].select[2],"");
strcpy( kind[].select[3],"");
strcpy( kind[].select[4],"");
strcpy( kind[].select[5],"");
strcpy( kind[].select[6],"");
strcpy( kind[].select[7],"");
strcpy( kind[].select[8],"");
strcpy( kind[].select[9],"");
*/
strcpy(kind[1].name,"カラーパン");
strcpy(kind[1].explain,"なんという偽物・・・ちょっとだけ回復");
kind[1].price=200;
kind[1].img=LoadGraph("dat/img/item_sample.png");
kind[1].alternative=3;//食べる、投げる、置く
strcpy( kind[1].select[0],"食べる");
strcpy( kind[1].select[1],"投げる");
strcpy( kind[1].select[2],"置く");
}
int item_action(int item_kind,int action){
if(item_kind==1){
switch(action){
case 0://食べる
ch.hunger=ch.hunger+20;
if(ch.hunger>ch.hunger_max){ch.hunger=ch.hunger_max;message_add(0,"namari(namari)","もぐもぐ・・・もう食べられないよ・・・");}
else{message_add(0,"namari(namari)","もぐもぐ・・・少しだけお腹が膨れた");}
item_loss(item_select_number);
return 100;
case 1://投げる
message_add(0,"namari(namari)","ぽいっ");
return 100;
case 2://置く
message_add(0,"namari(namari)","",kind[item_kind].name,"を置いておいた。");
return 100;
};
}
return 100;
}