标题:推箱子控制台 贴图 显示黑屏
只看楼主
天霁
Rank: 2
等 级:论坛游民
帖 子:33
专家分:18
注 册:2015-7-17
结帖率:83.33%
已结贴  问题点数:10 回复次数:5 
推箱子控制台 贴图 显示黑屏
最近,编推箱子的时候想给每个元素贴对应的图,可控制台运行时发现是黑屏,不知道是怎么了?
程序代码:
#include<stdio.h>
#include<conio.h>
#include<Windows.h>
#include<graphics.h>
#include<stdlib.h>
#pragma comment(lib, "winmm.lib")

int map[9][11] = {
    {0,1,1,1,1,1,1,1,1,1,0},
    {0,1,0,0,0,1,0,0,0,1,0},
    {0,1,0,4,4,4,4,4,0,1,0},
    {0,1,0,4,0,4,0,4,0,1,1},
    {0,1,5,0,0,0,0,0,4,0,1},
    {1,1,0,1,1,1,1,0,4,0,1},
    {1,0,3,3,3,3,3,1,0,0,1},
    {1,0,3,3,3,3,3,0,0,1,1},
    {1,1,1,1,1,1,1,1,1,1,0}
};
IMAGE box, wall, redbox, people, blank, end, pbox;

void DrawMap()
{
    for (int i = 0; i < 9; i++)
    {
        for (int j = 0; j < 11; j++)
        {
            switch (map[i][j])
            {
            case 0: putimage(i * 50, j * 50, &blank);
                //putimage(i * 50, j * 50, &blank); //空地
                break;
            case 1: putimage(i * 50, j * 50, &wall);    //
                break;
            case 3: putimage(i * 50, j * 50, &end);    //目的地
                break;
            case 4: putimage(i * 50, j * 50, &box);    //箱子
                break;
            case 5: putimage(i * 50, j * 50, &people);    //
                break;
            case 7: putimage(i * 50, j * 50, &redbox); //箱子和目的地重合
                break;
            case 8: putimage(i * 50, j * 50, &pbox);//人和目的地重合
                break;
            }
        }
        printf("\n");
    }
}

void PlayGame()
{
    char key; //保存按键的值
    int r, c;    //保存人的下标
              //获取人的位置
    for (int i=0;i<9;i++)
        for (int j = 0; j < 11; j++)
        {
            if (map[i][j] == 5 || map[i][j] == 8)
            {
                r = i;
                c = j;
            }
        }
    key = _getch();        //接受键盘按键
    
    switch (key)
    {
    case 72:    //up
                //map[r][c]        map[r-1][c]
                //1.人的前面是空地   2.人的前面是目的地
        if (map[r - 1][c] == 0 ||map[r-1][c]==3)
        {
            map[r - 1][c] += 5;
            
            map[r][c] -= 5;
        }
        //3.人的前面是箱子 不一定
            //3.1箱子的前面是空地
            //3.2箱子的前面是目的地
        if (map[r - 1][c] == 4 || map[r - 1][c] == 7)
        {
            if (map[r - 2][c] == 0 || map[r - 2][c] == 3)
            {
                map[r - 2][c] += 4;
                map[r - 1][c] += 1;
                map[r][c] -= 5;
            }
        }
        break;
    case 80:    //down
        if (map[r + 1][c] == 0 || map[r + 1][c] == 3)
        {
            map[r + 1][c] += 5;

            map[r][c] -= 5;
        }

        if (map[r + 1][c] == 4 || map[r + 1][c] == 7)
        {
            if (map[r + 2][c] == 0 || map[r + 2][c] == 3)
            {
                map[r + 2][c] += 4;
                map[r + 1][c] += 1;
                map[r][c] -= 5;
            }
        }
        break;
    case 75:    //    left
        if (map[r][c-1] == 0 || map[r][c-1] == 3)
        {
            map[r][c-1] += 5;

            map[r][c] -= 5;
        }

        if (map[r][c-1] == 4 || map[r][c-1] == 7)
        {
            if (map[r][c-2] == 0 || map[r][c-2] == 3)
            {
                map[r][c-2] += 4;
                map[r][c-1] += 1;
                map[r][c] -= 5;
            }
        }
        break;
    case 77:    //    right
        if (map[r][c + 1] == 0 || map[r][c + 1] == 3)
        {
            map[r][c + 1] += 5;
            map[r][c] -= 5;
        }

        if (map[r][c + 1] == 4 || map[r][c + 1] == 7)
        {
            if (map[r][c + 2] == 0 || map[r][c + 2] == 3)
            {
                map[r][c + 2] += 4;
                map[r][c + 1] += 1;
                map[r][c] -= 5;
            }
        }
        break;

    }

}

int main(void)
{
    initgraph(450, 550);
    loadimage(&box, L"./box.jpg", 50, 50);
    loadimage(&redbox, L"./redbox.jpg", 50, 50);
    loadimage(&people, L"./people.jpg", 50, 50);
    loadimage(&wall, L"./wall.jpg", 50, 50);
    loadimage(&blank, L"./blank.jpg", 50, 50);
    loadimage(&end, L"./end.jpg", 50, 50);
    loadimage(&pbox, L"./pbox.jpg", 50, 50);

//    mciSendString(L"open fade.mp3", 0, 0, 0);
    DrawMap();
    //mciSendString(L"play",0,0,0);
    while (1)
    {
        //system("cls");
        //cleardevice();
        DrawMap();
        PlayGame();
    }
    //EndBatchDraw();
    closegraph();
    return 0;
}


我已经装了easyx了;
搜索更多相关主题的帖子: map case break || jpg 
2018-09-20 21:12
no1xijin
Rank: 9Rank: 9Rank: 9
来 自:江西
等 级:贵宾
威 望:20
帖 子:211
专家分:1207
注 册:2015-7-8
得分:4 
通过相对地址加载图片和输出图片,在生成的exe同目录下新建一个名叫 res 的文件夹,在 res 文件夹下放一张名叫 jiemian.jpg 的图片。用以下三行代码实现该图片的输出
IMAGE img;   // 定义加载图片变量
loadimage(&img, _T("res\\jiemian.jpg"));   // 加载图片
putimage(0,0,&img);  // 输出图片

126邮箱联系方式:no1xijin@126. com
2018-09-21 08:50
天霁
Rank: 2
等 级:论坛游民
帖 子:33
专家分:18
注 册:2015-7-17
得分:0 
回复 2楼 no1xijin
按照你说的我试了下,发现还是老样子,黑屏,不知道是不是vs2017没有配置好?绝对路径也没用
2018-09-21 22:03
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:4 
直接“loadimage(&box, "res\\box.jpg", 50, 50);”试试。
字符串格式取决于你对vs的设定,如果设定为asc字符则不需要加“L”的,vs好像默认为unicode字符了。

能编个毛线衣吗?
2018-09-22 08:45
天霁
Rank: 2
等 级:论坛游民
帖 子:33
专家分:18
注 册:2015-7-17
得分:0 
回复 4楼 wmf2014
我改成不加L之后,还是一样控制台是黑的,而且我用的字符集应该是unicode
2018-09-22 10:46
l1415926
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2020-11-30
得分:0 
我也遇到了这个问题那么长时间啦怎么解决呀???
2020-11-30 22:12



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-489913-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.228392 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved