大家好 , 我是逼哥 , 記得每天好好學習 , 天天向上 , 尤其是大學生 . 不要荒廢學業.
首先說明 , 我使用的開發環境是 vs2017 , 有些函數方法可能不通用 ,大家可以百度下其他方法. 向童老師致敬.
實現圖片中人物的行走效果 , 即4張圖合成一個人物動態走路的效果 , 分別是向左行走和向右行走.
當4張圖輪流的播放時 , 人的停留效果就會出現 , 看起來像是人在走動
#include <graphics.h>
#include <conio.h>
int main()
{
initgraph(480, 300);
IMAGE img_human, img_walls; // 定義 IMAGE 對象
loadimage(&img_human, _T("D:\\桌面\\行走素材圖.jpg"));
//putimage(0, 0, 75, 130, &img_human, 0, 0);
loadimage(&img_walls, _T("D:\\桌面\\walls.gif"));
int x, y; // 小人整體的座標位置
x = 250;
y = 80;
int left_i = 0; // 向左行走動畫的序號
int right_i = 0; // 向右行走動畫的序號
char input;
int maps[8][5] = { 0 }; // 存儲地圖信息,0爲空地,1爲牆
int i, j;
// 以下讓地圖四個邊界爲牆
for (i = 0; i<8; i++)
{
maps[i][0] = 1;
maps[i][4] = 1;
}
for (j = 0; j<5; j++)
{
maps[0][j] = 1;
maps[7][j] = 1;
}
// 顯示地圖圖案
for (i = 0; i<8; i++)
for (j = 0; j<5; j++)
if (maps[i][j] == 1)
putimage(i * 60, j * 60, &img_walls);
putimage(x, y, 75, 130, &img_human, 0, 0);
BeginBatchDraw();
while (1)
{
if (_kbhit()) // 判斷是否有輸入
{
input = _getch(); // 根據用戶的不同輸入來移動,不必輸入回車
if (input == 'a') // 左移
{
//clearrectangle(x, y, x + 75, y + 130); // 清空畫面全部矩形區域
left_i++;
if (x>60) // 沒有達到左邊的牆,才移動小人的座標
x = x - 10;
putimage(x, y, 75, 130, &img_human, left_i * 75, 0);
FlushBatchDraw();
Sleep(1);
if (left_i == 3)
left_i = 0;
}
else if (input == 'd') // 右移
{
//clearrectangle(x, y, x + 75, y + 130); // 清空畫面全部矩形區域
right_i++;
if (x<340) // 沒有達到右邊的牆,才移動小人的座標
x = x + 10;
putimage(x, y, 75, 130, &img_human, right_i * 75, 120);
FlushBatchDraw();
Sleep(1);
if (right_i == 3)
right_i = 0;
}
}
}
return 0;
}
圖片資源可以從網上隨便下載下來 , 到處都有的哦!
大家可以在百度上搜索: 遊戲人物行走效果圖 , 有很多哦 !