#include "DxLib.h" //キャラの最大数 #define CHMAX 1 //マップのセル数 #define XMAX 20 #define YMAX 15 //円周率 #define PI 3.14159265 //キャラ情報 typedef struct{ int x,y,img,muki,walking_flag; }ch_t; //セル情報 typedef struct{ int x,y; }cell_t; //画像ハンドル int image[16],img_kabe[3]; int Key[256];//キー int map[YMAX][XMAX];//マップ int GetHitKeyStateAll_2(int KeyStateBuf[]){ char GetHitKeyStateAll_Key[256]; GetHitKeyStateAll( GetHitKeyStateAll_Key ); for(int i=0;i<256;i++){ if(GetHitKeyStateAll_Key[i]==1) KeyStateBuf[i]++; else KeyStateBuf[i]=0; } return 0; } //初期化 void ini(ch_t ch[CHMAX], cell_t *cell){ int i,j; int muki0,muki1; SetFontSize(8); for(j=0;jx=ch[0].x/32;//セル情報を格納 cell->y=ch[0].y/32; } //移動判定 int can_or_cannot(int x,int y,int muki){//進めるかを判定する if(muki==0){//上向きなら if(map[y/32][x/32] & 1<<1){//上が開いてて if(map[y/32-1][x/32] & 1<<3)//上の下が開いてるか return 0;//OK } } else if(muki==1){//左向きなら if(map[y/32][x/32] & 1<<0){//左が開いてて if(map[y/32][x/32-1] & 1<<2) return 0; } } else if(muki==2){//下向きなら if(map[y/32][x/32] & 1<<3){//下が開いてて if(map[y/32+1][x/32] & 1<<1) return 0; } } else if(muki==3){//右向きなら if(map[y/32][x/32] & 1<<2){//右が開いてて if(map[y/32][x/32+1] & 1<<0) return 0; } } return 1;//通れない } //移動計算 void move_ch_calc(ch_t ch[CHMAX]){ for(int i=0;i 0 )ch[i].muki=0; //上ボタンが押されたら else if( Key[ KEY_INPUT_LEFT ] > 0 )ch[i].muki=1; //左ボタンが押されたら else if( Key[ KEY_INPUT_DOWN ] > 0 )ch[i].muki=2; //下ボタンが押されたら else if( Key[ KEY_INPUT_RIGHT] > 0 )ch[i].muki=3; //右ボタンが押されたら //歩かないフラグを立てる else ch[i].walking_flag=0; //何のボタンも押されてなかったら if(ch[i].walking_flag==1) //もし歩くなら if(can_or_cannot(ch[i].x,ch[i].y,ch[i].muki)==1)//行き先が歩けないなら ch[i].walking_flag=0; //歩かないフラグを立てる。 } if(ch[i].walking_flag==1){ //歩くフラグが立っていたら if (ch[i].muki==0)ch[i].y--; //上向きならch[i].y座標を減らす else if(ch[i].muki==1)ch[i].x--; //左向きならch[i].x座標を減らす else if(ch[i].muki==2)ch[i].y++; //下向きならch[i].y座標を増やす else if(ch[i].muki==3)ch[i].x++; //右向きならch[i].x座標を増やす } } } //セルの移動 void move_cell_calc(cell_t *cell){ if ( Key[ KEY_INPUT_UP ] == 1 )cell->y--; //上ボタンが押されたら else if( Key[ KEY_INPUT_LEFT ] == 1 )cell->x--; //左ボタンが押されたら else if( Key[ KEY_INPUT_DOWN ] == 1 )cell->y++; //下ボタンが押されたら else if( Key[ KEY_INPUT_RIGHT] == 1 )cell->x++; //右ボタンが押されたら } //セルの回転 void change_cell_calc(cell_t cell){ int flag=0; if(Key[KEY_INPUT_Z]==1){ if(map[cell.y][cell.x] & 1) flag=1; map[cell.y][cell.x] = map[cell.y][cell.x] >> 1; if(flag==1) map[cell.y][cell.x] += 1<<3; } } //描画 void graph(ch_t ch[CHMAX] , cell_t cell){ int i,j,img; double angle; /*白い壁を描画*/ for(i=0;i<15;i++){ for(j=0;j<20;j++){ angle=0; if(map[i][j] & 1<<0 && map[i][j] & 1<<2 || map[i][j] & 1<<1 && map[i][j] & 1<<3){//直線 if(map[i][j] & 1<<1) angle=PI/2; img=img_kabe[0]; } else{ if(map[i][j] & 1<<2) angle+=PI/2; if(map[i][j] & 1<<3){ angle+=PI/2; if(map[i][j] & 1<<0) angle+=PI; } img=img_kabe[1]; } DrawRotaGraphF(j*32+16,i*32+16,1.0,angle,img,FALSE); } } for(i=0;i