文章目錄
- 效果圖
- 專案鏈接
- 代碼
效果圖

專案鏈接
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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/294797.html
標籤:其他
上一篇:P1057傳球游戲 題解
