码迷,mamicode.com
首页 > 其他好文 > 详细

EGE第三方库实现推箱子(一)

时间:2016-04-06 12:57:01      阅读:1067      评论:0      收藏:0      [点我收藏+]

标签:

#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;
}

 

EGE第三方库实现推箱子(一)

标签:

原文地址:http://www.cnblogs.com/ablewang/p/5358477.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!