#include <graphics.h>
#include <Windows.h>
#include <stdio.h>
#include
#include <stdlib.h>
#include
#include <conio.h>
#define RATIO 61
#define Distance_UP 125
#define Distance_LETF 110
#define ROW 9
#define COLUMN 12
#define Des1 map [2] [5]
#define Des2 map [2] [8]
#define Des3 map [4] [3]
#define Des4 map [6] [2]
#define LONG 960
#define WIDE 768
#define Valid(pos)pos.x <ROW && pos.x> = 0 && pos.y> = 0 && pos.y <COLUMN
#define UP 'W'
の#define DOWN 'S'
の#define LEFT ''
の#define RIGHT 'D'
の#define goout 'Q'
構造体直接{ int型のX; int y;
};
int map [ROW] [COLUMN] = { { 0、0、0、0、0、0、0、0、0、0、0、0 }、{0、1、0、1、1、1、1 、1、1、1、0、0}、{0、1、4、1、0、2、1、0、2、1、0、0}、{0、1、0、1、0、1 、0、0、1、1、1、0 }、{0、1、0、2、0、1、1、4、1、1、1、0 }、{0、1、1、1、0 、3、1、1、1、4、1、0}、{0、1、2、1、1、4、1、1、1、1、1、0 }、{0、1、0、0 、1、0、1、1、0、0、1、0}、{0、0、0、0、0、0、0、0、0、0、0、0}、};
列挙型POS { WALL、FLOOR、BOX_DES、MAN、BOX、HIT、ALL }; 直接人を構築する; IMAGE img [ALL]; void ChangeMap(struct direct pos、enum POS prop){ map [pos-> x] [pos-> y] = prop; putimage((pos-> y) RATIO + Distance_LETF、(pos-> x)* RATIO + Distance_UP、&img [prop]); }
void GameControl(char input){ //坐PWM的変換换structdirect pos = man; struct direct pos_next = man; switch(input){ case UP:pos.x–; pos_next.x- = 2; ブレーク; ケースダウン:pos.x ++; pos_next.x + = 2; ブレーク; ケース左:pos.y–; pos_next.y- = 2; ブレーク; ケース右:pos.y ++; pos_next.y + = 2; ブレーク;
}
if(Valid(pos)&&map[pos.x][pos.y]==FLOOR||map[pos.x][pos.y]==BOX_DES){
if(map[man.x][man.y]==Des1||map[man.x][man.y]==Des2||map[man.x][man.y]==Des3||map[man.x][man.y]==Des4)
{
ChangeMap(&pos,MAN);//人向前走一步
ChangeMap(&man,BOX_DES);
man = pos;
}else{
ChangeMap(&pos,MAN);//人向前走一步
ChangeMap(&man,FLOOR);
man = pos;
}
}else if(Valid(pos)&&map[pos.x][pos.y]==HIT&&map[pos_next.x][pos_next.y]==FLOOR){
ChangeMap(&pos,MAN);//人向前走一步
ChangeMap(&man,FLOOR);
ChangeMap(&pos_next,BOX);
man = pos;
}
else if(Valid(pos_next)&&map[pos.x][pos.y]==BOX)
if(map[pos_next.x][pos_next.y]==FLOOR){
ChangeMap(&pos,MAN);//人向前走一步
ChangeMap(&man,FLOOR);
ChangeMap(&pos_next,BOX);
man = pos;
}else if(map[pos_next.x][pos_next.y]==BOX_DES){//箱子前面是目的地
ChangeMap(&pos,MAN);//人向前走一步
ChangeMap(&man,FLOOR);
ChangeMap(&pos_next,HIT);
man = pos;
}
}
bool GameJude(){ for(int i = 0; i <9; i ++){ for(int j = 0; j <12; j ++){ if(map [i] [j] == BOX){ return false ; } } } return true; } void WinnerDisplay(IMAGE * img){ putimage(0,0、img); settextcolor(WHITE); RECT rec = {0,0、LONG、WIDE}; settextstyle(20,0、_T ( "Song Ti")); drawtext(_T( "Congratulations〜 \ n資格のある倉庫番の古いドライバーになります!")、&rec、DT_CENTER | DT_VCENTER | DT_SINGLELINE);
}
int main(void){
//设置大小及添加背景
IMAGE bg_img;
initgraph(960,768);
loadimage(&bg_img,_T("blackground.bmp"),960,768,true);
putimage(0,0,&bg_img);
//地图初始化准备
loadimage(&img[0],_T("wall.bmp"),RATIO,RATIO,true);
loadimage(&img[1],_T("floor.bmp"),RATIO,RATIO,true);
loadimage(&img[2],_T("des.bmp"),RATIO,RATIO,true);
loadimage(&img[3],_T("man.bmp"),RATIO,RATIO,true);
loadimage(&img[4],_T("box.bmp"),RATIO,RATIO,true);
loadimage(&img[5],_T("box.bmp"),RATIO,RATIO,true);
//地图初始化
for(int i=0;i<9;i++){
for(int j=0;j<12;j++){
if(map[i][j]==MAN){
man.x=i;
man.y=j;
}
putimage(Distance_LETF+j*RATIO,Distance_UP +i*RATIO,&img[map[i][j]]);
}
}
bool qiut = false;
do{
if(_kbhit()){
char ch;
ch = _getch();
if(ch==UP){
GameControl(UP);
}else if(ch==DOWN){
GameControl(DOWN);
}else if(ch==LEFT){
GameControl(LEFT);
}else if(ch==RIGHT){
GameControl(RIGHT);
}else if(ch==goout){
return true;
}
if( GameJude()){
WinnerDisplay(&bg_img);
qiut = true;
}
Sleep(100);
}
}while(qiut==false);
closegraph();
system("pause");
return 0;
}
//