效果图
项目链接
https://download.csdn.net/download/weixin_45525272/21106512
代码
#include<stdio.h> #include<conio.h> #include<graphics.h> //图形库头文件 #pragma comment(lib,"winmm.lib") //多媒体库 IMAGE img[8];//图片数组 int x1, y1; //定义主角坐标 int loop=0;//重置开关 //函数申明 void Find(int map[9][9]); void Print(int map[9][9]); void Princes(int x, int y); void Boom(int x, int y); void Wolf(int x, int y); void Bomb(int x, int y); void Man(int x, int y); void Blank(int x, int y); int Victory(int map[9][9]); void Move(int map[9][9], int x, int y); void GameMap(); int PlayGame(int map[9][9]); void Loading(); void GiniGame(); void GiniGame()//窗体初始化 { //创建窗口 initgraph(540, 540); loadimage(NULL, "./游戏素材/图片素材/317760.jpg");// ./ 表示当前路径 Sleep(3000); cleardevice();//刷新界面 } void Loading() { loadimage(&img[0], "./游戏素材/图片素材/0.jpg"); loadimage(&img[1], "./游戏素材/图片素材/1.jpg"); loadimage(&img[2], "./游戏素材/图片素材/2.jpg"); loadimage(&img[3], "./游戏素材/图片素材/3.jpg"); loadimage(&img[4], "./游戏素材/图片素材/4.jpg"); loadimage(&img[5], "./游戏素材/图片素材/5.jpg"); loadimage(&img[6], "./游戏素材/图片素材/6.jpg"); loadimage(&img[7], "./游戏素材/图片素材/7.jpg"); //mciSendString("open ./游戏素材/音乐素材/别看我只是一只羊.mp3 alias BGM",0,0,0); //mciSendString("play BGM", 0, 0, 0); } //3.游戏关卡 void GameMap() { //3.1导入所有地图 int gamemap[5][9][9] = { {{4, 4, 6, 6, 6, 4, 4, 4, 4 }, {4, 4, 6, 3, 6, 4, 4, 4, 4 }, {4, 4, 6, 0, 6, 6, 6, 6, 4 }, {6, 6, 6, 2, 0, 2, 3, 6, 4 }, {6, 3, 0, 2, 1, 6, 6, 6, 4 }, {6, 6, 6, 6, 2, 6, 4, 4, 4 }, {4, 4, 4, 6, 3, 6, 4, 4, 4 }, {4, 4, 4, 6, 6, 6, 4, 4, 4 }, {4, 4, 4, 4, 4, 4, 4, 4, 4 }, }, { {6, 6, 6, 6, 6, 4, 4, 4, 4 }, {6, 1, 0, 0, 6, 4, 4, 4, 4 }, {6, 0, 2, 2, 6, 4, 6, 6, 6 }, {6, 0, 2, 0, 6, 4, 6, 3, 6 }, {6, 6, 6, 0, 6, 6, 6, 3, 6 }, {4, 6, 6, 0, 0, 0, 0, 3, 6 }, {4, 6, 0, 0, 0, 6, 0, 0, 6 }, {4, 6, 0, 0, 0, 6, 6, 6, 6 }, {4, 6, 6, 6, 6, 6, 4, 4, 4 } }, { {4, 6, 6, 6, 6, 4, 4, 4, 4 }, {4, 6, 1, 0, 6, 6, 6, 4, 4 }, {4, 6, 0, 2, 0, 0, 6, 4, 4 }, {6, 6, 6, 0, 6, 0, 6, 6, 4 }, {6, 3, 6, 0, 6, 0, 0, 6, 4 }, {6, 3, 2, 0, 0, 6, 0, 6, 4 }, {6, 3, 0, 0, 0, 2, 0, 6, 4 }, {6, 6, 6, 6, 6, 6, 6, 6, 4 }, {4, 4, 4, 4, 4, 4, 4, 4, 4 }, }, { {4, 6, 6, 6, 6, 6, 6, 6, 4 }, {4, 6, 0, 1, 3, 3, 3, 6, 4 }, {4, 6, 0, 0, 0, 6, 6, 6, 6 }, {6, 6, 6, 2, 0, 0, 0, 0, 6 }, {6, 0, 0, 0, 6, 2, 6, 0, 6 }, {6, 0, 2, 0, 6, 0, 0, 0, 6 }, {6, 0, 0, 0, 6, 6, 6, 6, 6 }, {6, 6, 6, 6, 6, 4, 4, 4, 4 }, {4, 4, 4, 4, 4, 4, 4, 4, 4 }, }, { {4, 6, 6, 6, 6, 6, 4, 4, 4 }, {4, 6, 0, 1, 0, 6, 6, 6, 4 }, {6, 6, 0, 6, 2, 0, 0, 6, 4 }, {6, 0, 5 ,3, 0, 3, 0, 6, 4 }, {6, 0, 0, 2, 2, 0, 6, 6, 4 }, {6, 6, 6, 0, 6, 3, 6, 4, 4 }, {4, 4, 6, 0, 0, 0, 6, 4, 4 }, {4, 4, 6, 6, 6, 6, 6, 4, 4 }, {4, 4, 4, 4, 4, 4, 4, 4, 4 },} }; int map[9][9]; //加载当前地图 for (int i = 0; i < 5; i++) { do { loop = 0; for (int j = 0; j < 9; j++) { for (int k = 0; k < 9; k++) { //3.2获取当前地图 map[j][k] = gamemap[i][j][k]; } } //3.3玩游戏的逻辑 PlayGame(map); } while (loop); } } //3.3玩游戏的逻辑 int PlayGame(int map[9][9]) { Print(map); //3.3.1游戏界面贴图调用 Find(map); //3.3.2游戏角色定位调用 //角色操作 do { switch (_getch()) { case 72: Move(map, -1, 0); break; //向上 case 75: Move(map, 0, -1); break; //向左 case 77: Move(map, 0, 1); break; //向右 case 80: Move(map, 1, 0); break; //向下 case 27: exit(0); break; //退出 case 32: loop = 1; return 0; //空格恢复原状态 } } while (Victory(map)); // Princes(60 * x1, 60 * y1);//胜利后贴美羊羊庆祝通关 MessageBox(NULL,"成功击败狗子们" , "恭喜通关", MB_SYSTEMMODAL);//MB_SYSTEMMODAL使得弹框最前置 return 0; } void Move(int map[9][9], int x, int y) { //喜洋洋前面的位置是否是空地或者是狗子 if (map[x1+x][y1+y]==0|| map[x1 + x][y1 + y] == 3) { map[x1][y1]--;//使得数字数组里的喜洋洋变为空白 map[x1 + x][y1 + y]++;//使得数字数组里的空白变为喜洋洋对应数值 for (int i = 0; i < 60; i++) { Blank(60*x1+i*x,60*y1+i*y);//在移动前喜洋洋位置重绘空白 Man(60 * x1 + (i + 1)*x, 60 * y1 + (i + 1)*y);//在移动后喜洋洋位置重绘空 } if (map[x1][y1]==3)//c重绘狗子 { Wolf(60 * x1, 60 * y1); } //数值数组位置移动 x1 += x; y1 += y; } else if ((map[x1 + x][y1 + y]==2|| map[x1 + x][y1 + y]==5) &&( map[x1 + x*2][y1 + y*2]==0|| map[x1 + x*2][y1 + y*2]==3)) { map[x1][y1]--;//喜洋洋原来位置变成空白 map[x1 + x][y1 + y]--;//炸弹原来位置变成喜洋洋 map[x1 + 2 * x][y1 + 2 * y] += 2;//灰太狼的地方触发爆炸效果 for (int i = 0; i < 60; i++) { Blank(60 * (x1 + x) + i * x, 60 * (y1 + y) + i * y);//将炸弹的位置换为空白以便后期贴图 Boom(60 * (x1 + x) + (i+1) * x, 60 * (y1 + y) + (i+1) * y);//在炸弹被推倒后位置重绘炸弹 Blank(60 * x1 + i * x, 60 *y1+ i * y);//在原来喜洋洋位置重绘空白 Man(60 * x1 + (i+1) * x, 60 *y1 + (i+1) * y);//在原来炸弹位置重绘喜洋洋 } if (map[x1][y1]==3) { Wolf(60 * x1, 60 * y1); } //喜洋洋坐标移动 x1 += x; y1 += y; if (map[x1+x][y1+y]==5) { Bomb(60 * (x1 + x), 60 * (y1 + y));//绘制爆炸效果 } } } int Victory(int map[9][9])//游戏通关判定 { for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { if (map[i][j]==2) { return 1; } } } return 0;//没有炸弹 进去下一关 } //贴单个图 void Blank(int x, int y)//白块 { putimage(y, x, &img[0]); } void Man(int x, int y)//养羊 { putimage(y, x, &img[1]); } void Bomb(int x, int y) { putimage(y, x, &img[5]); } void Wolf(int x, int y) { putimage(y, x, &img[3]); } void Boom(int x, int y) { putimage(y, x, &img[2]); } void Princes(int x, int y) { putimage(y, x, &img[7]); } //3.3.1游戏界面贴图 void Print(int map[9][9]) { for (int x = 0; x < 9; x++) { for (int y = 0; y < 9; y++) { putimage(60 * y, 60 * x, &img[map[x][y]]); } } } //3.3.2游戏角色定位 void Find(int map[9][9]) { for (x1 = 0; x1 < 9; x1++) { for (y1 = 0; y1 < 9; y1++) { if (map[x1][y1]==1) { return; } } } } int main() { //1.游戏界面初始化 GiniGame(); //2.游戏素材加载 Loading(); //3.游戏关卡 GameMap(); getchar(); return 0; }
