• 大小: 0.14M
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2024-04-13
  • 语言: C/C++
  • 标签: 推箱子  图形  游戏  

资源简介


资源截图

代码片段和文件信息

#include 
#include 
#include “box.h“

int main(int argc char const *argv[])
{
    initgraph(800 650);
    PIMAGE bgimg = newimage();
    getimage(bgimg “D:/EC15/CODE/images/background.jpg“);
    putimage(0 0 bgimg);

    selectGame();
    getMap(maps[cur_level]);
    drawMap();
    for (; is_run(); delay_fps(60))
    {
        char ch = getch();
        move(ch);
        success();
    }
    closegraph();
    return 0;
}

// 获取地图
void getMap(int curMap[13][16])
{
    for (int i = 0; i < 13; i++)
    {
        for (int j = 0; j < 16; j++)
        {
            map[i][j] = curMap[i][j];
        }
    }
}

// 选择游戏
void selectGame()
{
    setfont(50 0 “宋体“);
    setfontbkcolor(WHITE);
    setcolor(BLACK);
    outtextxy(250 100 “1.开始游戏!“);
    xyprintf(250 200 “2.退出游戏!“);
    outtextxy(250 300 “3.随便看看!“);
    getch();
}

// 判断游戏是否胜利
void success()
{
    int flag = 0;
    // 地图上没有目的地就胜利了
    for (int i = 0; i < 16; i++)
    {
        for (int j = 0; j < 13; j++)
        {
            if (map[i][j] == DESTINATION)
            {
                flag = 1;
            }
        }
    }
    // 游戏胜利
    if (!flag)
    {
        setfont(50 0 “宋体“);
        setfontbkcolor(WHITE);
        setcolor(GREEN);
        outtextxy(300 300 “游戏胜利!“);
        outtextxy(250 400 “按C进入下一关游戏“);
        outtextxy(250 500 “按Q退出游戏“);
        char ch = getch();
        if (ch == ‘c‘ || ch == ‘C‘)
        {
            if (++cur_level > 4)
            {
                cur_level = 4;
            }
            getMap(maps[cur_level]);
            drawMap();
        }
        if (ch == ‘q‘ || ch == ‘Q‘)
        {
            exit(0);
            closegraph();
        }
    }
}

void move(char ch)
{
    // 按键之后获取任务下一个坐标
    COORD next = nextCoord(ch person.X person.Y);
    int n = map[next.X][next.Y];
    // 如果下个坐标是目的地,可以移动
    if (n == DESTINATION)
    {
        fillBlock(ROAD person.X person.Y);
        fillBlockWithoutValue(MAN next.X next.Y);
    }
    // 如果下个坐标是路,可以移动
    if (n == ROAD)
    {
        // 人物坐标变成路,下一个坐标变成人物
        // 当前坐标值是目的地的话不能赋值为路
        int curType = map[person.X][person.Y];
        if (curType != DESTINATION)
        {
            fillBlock(ROAD person.X person.Y);
            fillBlock(MAN next.X next.Y);
        }
        else
        {
            fillBlockWithoutValue(DESTINATION person.X person.Y);
            fillBlock(MAN next.X next.Y);
        }
    }
    // 如果下个坐标是箱子,推着箱子一起走
    if (n == BOX)
    {
        // 要判断箱子下一个位置是不是墙
        COORD boxNext = nextCoord(ch next.X next.Y);
        int boxNextType = map[boxNext.X][boxNext.Y];
        // 箱子下一位置是路
        if (boxNextType == ROAD)
        {
            // 箱子和人一起移动
            // 判断当前坐标是不是目的地
            if (map[person.X][person.Y] == DESTINATION)
            {
                // 当前人物坐标为目的地不能赋值为路
                

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2020-10-27 08:31  推箱子\
     文件        4007  2020-07-30 17:45  推箱子\box.h
     目录           0  2020-10-27 08:31  推箱子\images\
     文件      121460  2020-07-27 16:21  推箱子\images\background.jpg
     文件        4232  2020-07-27 16:21  推箱子\images\box.png
     文件        2846  2020-07-27 16:21  推箱子\images\destination.png
     文件        2431  2020-07-27 16:21  推箱子\images\person.jpg
     文件        4688  2020-07-27 16:21  推箱子\images\redbox.png
     文件        2142  2020-07-27 16:21  推箱子\images\road.jpg
     文件        2759  2020-07-27 16:21  推箱子\images\wall.jpg
     文件        7401  2020-07-30 17:45  推箱子\pushboxs.c

评论

共有 条评论