标签:
#include <graphics.h> #include <stdio.h> #include <math.h> //上下左右宏定义 #define RIGHT 295 #define UP 294 #define LEFT 293 #define DOWN 296 //边界定义 #define BORDER_TOP 152 #define BORDER_BOTTOM 376 #define BORDER_LEFT 192 #define BORDER_RIGHT 448 int BorderLeftX =160; //初始化边界X坐标 int BorderLeftY =120; //初始化边界Y坐标 int PlayerX=192; //人物默认X 轴坐标 int PlayerY=152; //人物默认Y 轴坐标 int BoxPosX=288; //箱子 默认坐标 int BoxPosY=215; int TargetX=BORDER_LEFT; int TargetY=BORDER_BOTTOM; //加载背景 void Load_BackGround(){ PIMAGE WallSource;//粕昝原图片 PIMAGE Wall; //申明墙 PIMAGE Box; PIMAGE Target; WallSource =newimage(); Wall =newimage(); //初始化墙对象 Box =newimage(); Target=newimage(); getimage(WallSource,"a.jpg"); getimage(Wall,WallSource,0,0,30,30); //从WallSource中 将 0.0 坐标图给 Wall 30*30大小 getimage(Box,WallSource,60,0,30,30); getimage(Target,WallSource,90,0,30,30); setbkcolor(WHITE); setcolor(BLACK); setfillcolor(YELLOW); //设置填充色 for (int i=1;i<=10;i++) //背景 { for (int j=1;j<=10;j++) { if ( j==1) //第一列的墙 { putimage(BorderLeftX,BorderLeftY,Wall); }else if (i==10) //最后一行的墙 { putimage(BorderLeftX,BorderLeftY,Wall); } else if (i==1) //第一行的墙 { putimage(BorderLeftX,BorderLeftY,Wall); } else //正常背景 { bar(BorderLeftX,BorderLeftY,BorderLeftX+30,BorderLeftY+30); } BorderLeftX+=32; } putimage(BorderLeftX,BorderLeftY,Wall); BorderLeftY+=32; BorderLeftX=160; putimage(TargetX,TargetY,Target); putimage(BoxPosX,BoxPosY,Box); } //复原 BorderLeftX=160; BorderLeftY=120; } void ISwin(int Pk) //胜利条件 { if (abs(TargetX-BoxPosX)<=2 && abs(TargetY-BoxPosY)<=2 ) { setfont(24,0,"宋体"); outtextxy(50,50,"Success! Press any key to netx round"); Pk==key_esc; getch(); closegraph(); initgraph(600,600); } } //程序主入口 int main(){ setinitmode(INIT_ANIMATION); initgraph(640,480); //创建 图片 对象 PIMAGE SourceImg; PIMAGE Player; SourceImg =newimage(); Player = newimage(); getimage(SourceImg,"a.jpg"); getimage(Player,SourceImg,30,0,30,30); //设置颜色 Load_BackGround(); //背景 加载 putimage(PlayerX,PlayerY,Player); //将人物 画上去 .. setfont(24,0,"宋体"); int Presskey; //按键值 for (;Presskey!=key_esc;) //当不退出的时候 { Presskey=getch(); switch (Presskey) { //右键 按下 时 触发事件 case RIGHT: //右 → 295 BORDER_RIGHT 448 if (PlayerX <BORDER_RIGHT) //正常情况 { if ( abs(BoxPosX-32-PlayerX)<=5 && abs(BoxPosY-PlayerY)<=5)//判断 是否 遇到了箱子 { BoxPosX >=BORDER_RIGHT ? BoxPosX=BORDER_RIGHT : BoxPosX+=32; //预估箱子的下一步位置 如果为边界 则 固定位置不懂,否则箱子向对应放心进一步 if (BoxPosX==BORDER_RIGHT) //箱子到了边界 { cleardevice(); //清屏 Load_BackGround(); //加载场景 putimage(416,PlayerY,Player); //重新投放人物位置 }else{ cleardevice(); Load_BackGround(); PlayerX+=32; //箱子向前进了一步,人也要根则进一步 putimage(PlayerX,PlayerY,Player); } //没遇到箱子,正常执行走动方法,不操作箱子 }else{ cleardevice(); Load_BackGround(); PlayerX+=32; putimage(PlayerX,PlayerY,Player); } } if ( PlayerX > 448) { putimage(448,PlayerY,Player); } ISwin(Presskey); break; case LEFT: // 左 ← 293 BORDER_LEFT 192 if (PlayerX >BORDER_LEFT) { if ( abs(BoxPosX+32-PlayerX)<=5 && abs(BoxPosY-PlayerY)<=5)//判断 是否 遇到了箱子 { BoxPosX <= BORDER_LEFT ? BoxPosX=BORDER_LEFT :BoxPosX-=32; if (BoxPosX==BORDER_LEFT) { cleardevice(); Load_BackGround(); putimage(224,BoxPosY,Player); }else{ cleardevice(); Load_BackGround(); PlayerX-=32; putimage(PlayerX,PlayerY,Player); } }else{ cleardevice(); Load_BackGround(); PlayerX-=32; putimage(PlayerX,PlayerY,Player); } } if ( PlayerX < 182) { putimage(192,PlayerY,Player); } ISwin(Presskey); break; case UP : //上 ↑ if (PlayerY >BORDER_TOP ) { if ( abs(BoxPosY+32-PlayerY)<=5 && abs(BoxPosX-PlayerX)<=5)//判断 是否 遇到了箱子 { BoxPosY <= BORDER_TOP ?BoxPosY =152 :BoxPosY-=32; if(BoxPosY==BORDER_TOP){ //到了顶! cleardevice(); Load_BackGround(); putimage(BoxPosX,184,Player); }else{ cleardevice(); Load_BackGround(); PlayerY-=32; putimage(PlayerX,PlayerY,Player); } }else{ cleardevice(); Load_BackGround(); PlayerY-=32; putimage(PlayerX,PlayerY,Player); } }else if (PlayerY <BORDER_TOP) { putimage(PlayerX,BORDER_TOP,Player); } ISwin(Presskey); break; case DOWN: //下 ↓ if (PlayerY <BORDER_BOTTOM) { if ( abs(BoxPosY-32-PlayerY)<=5 && abs(BoxPosX-PlayerX)<=5)//判断 是否 遇到了箱子 { BoxPosY > BORDER_BOTTOM-32 ? BoxPosY=376 : BoxPosY+=32; if (BoxPosY>=BORDER_BOTTOM) { cleardevice(); Load_BackGround(); putimage(BoxPosX,344,Player); }else{ cleardevice(); Load_BackGround(); PlayerY+=32; putimage(PlayerX,PlayerY,Player); } }else{ cleardevice(); Load_BackGround(); PlayerY+=32; putimage(PlayerX,PlayerY,Player); } } else if (PlayerY >BORDER_BOTTOM) { putimage(PlayerX,BORDER_BOTTOM,Player); } ISwin(Presskey); break; } } delimage(Player); delimage(SourceImg); return 0; }
标签:
原文地址:http://www.cnblogs.com/ablewang/p/5358477.html