|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
目前,我正在学习“奇牛编程”rock老师的“羊了羊第二关”编程设计,刚听一部分,代码也是完全仿写。视频中介绍该游戏可以在vs2022运行。视频中运行正常,但是我的代码在VS2022
运行时出现两个问题:一是游戏界面稍作停顿就自动退出,二是中间要渲染的图片不能正常渲染。因为游戏界面不能正常显示,导致也没法向后学习。先把当前已形成的代码发布出来,
请帮忙查找上面两个问题原因。
#include <stdio.h>
#include <graphics.h>
#include <time.h>
#include "tools.h"
#define WIN_WIDTH 504
#define WIN_HEIGHT 1000
#define MAX_LAYER 54
#define BLOCK_KIND 15
#define BLOCK_W 61
#define BLOCK_H 68
IMAGE imgBg[2];
IMAGE imgBlocks[15][2];
typedef struct Block
{
int layer; //方块所在层
int type; //方块类型(物品)>=1,如果为0,则代表被消除
int row, col; // 方块在这一层的位置
int x, y; //
bool isTop; //方块是否顶层方块,只有顶层方块才能消除
int offset_x, offset_y; //这一层第一个方块的偏移
}Block;
Block** maps[MAX_LAYER];
//初始化每一层map
void initLayer(int layer, int rows, int cols, int left, int top)
{
maps[layer] =(Block**) malloc(sizeof(Block*) * (rows * cols+1));
for (int row = 0; row < rows; row++)
{
for (int col = 0; col < cols; col++)
{
maps[layer][row * cols + col] = (Block*)malloc(sizeof(Block));
maps[layer][row * cols + col]->row = row;
maps[layer][row * cols + col]->col = col;
maps[layer][row * cols + col]->offset_x = left;
maps[layer][row * cols + col]->offset_x = top;
maps[layer][row * cols + col]->type =1 + rand() % BLOCK_KIND;
maps[layer][row * cols + col]->isTop = true;
maps[layer][row * cols + col]->x = left + col * BLOCK_W;
maps[layer][row * cols + col]->y = top + row * BLOCK_H;
maps[layer][row * cols + col]->layer = layer;
}
}
maps[layer][rows * cols] = NULL;
}
//初始化map
void initMap()
{
int layer = 0;
for (; layer < 12; layer++) initLayer(layer, 1, 1, 30, 440 + layer * 10);
for (; layer < 24; layer++) initLayer(layer, 1, 1, 414, 440 + (layer-12) * 10);
for (; layer < 30; layer++) initLayer(layer, 1, 1, 94, 583 + (layer-24) * 10);
for (; layer < 36; layer++) initLayer(layer, 1, 1, 346, 583 + (layer-30) * 10);
for (; layer < 42; layer++) initLayer(layer, 1, 1, 30+(layer-36)*10, 130);
for (; layer < 48; layer++) initLayer(layer, 1, 1, 413-(layer-42)*10,130);
initLayer(layer++, 4, 3, 159, 309);
initLayer(layer++, 5, 3, 159, 228);
initLayer(layer++, 5, 4, 129, 204);
initLayer(layer++, 5, 5, 99, 180);
initLayer(layer++, 3, 6, 70, 209);
initLayer(layer++, 5, 3, 159, 228);
}
//游戏初始化
void initGame()
{
//初始化游戏窗口
initgraph(WIN_WIDTH, WIN_HEIGHT);
//把背景图片装入数组
loadimage(&imgBg[0], "res/bg1.png");
loadimage(&imgBg[1], "res/bg2.png");
//初始化随机种子
srand((unsigned int)time(NULL));
//初始化map
initMap();
//初始化图片组
char fileName[256];
for (int i = 0; i<BLOCK_KIND; i++)
{
for (int j = 0; j < 2; j++)
{
sprintf_s(fileName, sizeof(fileName), "res/%d_%d.png", i + 1, j);
loadimage(&imgBlocks[i][j], fileName);
}
}
}
void updateWindow()
{
//BeginBatchDraw();
//绘制背景
putimage(0, 0, &imgBg[0]);
//渲染图片
for (int i = 0; i < MAX_LAYER; i++)
{
for (int j = 0; maps[i][j]; i++)
{
Block* p = maps[i][j];
IMAGE* imgTmp = &imgBlocks[p->type - 1][p->isTop];
putimagePNG(p->x, p->y, imgTmp);
}
}
//EndBatchDraw();
}
int main()
{
initGame();
updateWindow();
system("pause");
return 0;
} |
|