C語言C++編程基礎入門新手學習打造——游戲場景里面的人物行走

今天帶來一個游戲場景的人物行走。用的是C語言寫的,用到的編譯器是vs2015,2013或者(vc)也行的,自然要記得安裝圖形庫文件。

涉及到的知識點不多:

圖形庫 鼠標和鍵盤操作 圖片 貼圖

C語言 if swicth分支 函數 循環for while do while

星城下面就把代碼發出來一下,代碼如下:

#include//圖形庫頭文件

#include

#include//getch 獲取鍵盤消息 kbhit 判斷是否有鍵盤消息

//#include"resource.h"

#include//加音樂 mcisendstring playsound

#pragma comment(lib,"WINMM.LIB")//多媒體的庫 winmm.lib 可以小寫

/*

1.實現 打包圖片 涉及到資源文件

//如果是添加資源的話 資源文件 改下代碼

2.音樂 wav-->playsound

*/

/*

關于 貼圖 圖形庫

創建一個窗口 initgraph

圖片 -->IMAGE 變量 loadimage 加載一張圖片

putimage 貼圖

*/

/*

人物移動

1.貼圖 素材 基本動作 上 下 左 右 左上 左下 右上 右下 8個方向

2. 人物走路 四個動作 //動作越多人物效果越好

人物 透明貼圖

1.貼圖 人物圖片 遮擋的圖片 -->素材

loadimage 貼圖 遮擋的圖片 AND SRCPAINT

人物圖片 OR SRCAND

貼圖 需要坐標 人物坐標 目的坐標 人物的移動方向 人物動作

傳遞參數會很麻煩

沒什么區別 但是結構體好看一點 結構體 變量名字 取名字比較簡單

1.全局變量

2.定義全局結構體

*/

struct//結構體可以沒有名字

{

int x, y;//人物當前坐標 像素

int _x,_y;//目的地坐標

int move;//人物的移動方向

/*

0表示往下 1左 2往右 3往上 4左下 5右下 6左上 7右上

*/

int num;//人物動作 0 1 2 3

}person = {100,100,250,250,2,1};//初始化狀態

IMAGE people[3];//圖片 背景圖 人物圖片 掩碼圖

void init()//初始化

{//創建窗口 圖片加載部分

mciSendString(L"open 1.mp3 alias bgm", 0, 0, 0);

mciSendString(L" play bgm", 0, 0, 0);

initgraph(640, 480);//窗口大小 像素

loadimage(&people[0], L"背景.jpg",640,480); //縮放 jpg bmp L多字節

loadimage(&people[1], L"人物圖.bmp");//以圖片像素加載

loadimage(&people[2], L"掩碼圖.bmp");

//IDR_JPG1 JPG "背景.jpg"

//IDB_BITMAP1 BITMAP "人物圖.bmp"

//IDB_BITMAP2 BITMAP "掩碼圖.bmp"

//loadimage(&people[0], L"JPG",MAKEINTRESOURCE(IDR_JPG1), 640, 480); //縮放 jpg bmp L多字節

//loadimage(&people[1], L"BITMAP", MAKEINTRESOURCE(IDB_BITMAP1),280,992);//以圖片像素加載

//loadimage(&people[2], L"BITMAP", MAKEINTRESOURCE(IDB_BITMAP2),280,992);

}

void draw()//繪圖

{

//1.重新繪制背景圖

//2.人物圖

//雙緩沖繪圖

BeginBatchDraw();//開始繪圖

//寫繪圖部分

putimage(0, 0, &people[0]);//背景圖片

//人物圖片

putimage(person.x-30, person.y-80, 70, 124, &people[2], 70 * person.num, 124 * person.move, SRCAND);//掩碼圖

putimage(person.x-30, person.y-80, 70, 124, &people[1],70*person.num,124*person.move,SRCPAINT);//貼人物圖 AND 方式貼圖

EndBatchDraw();//結束繪圖

if (person.num == 3)

{

person.num = 0;

}

else

{

person.num++;

}

Sleep(10);

}

//實現行走

void walk()

{

//如果目的坐標 和人物坐標不一樣 就需要走動

//先判斷哪個方向 可能沒辦法走到這個區域 給他一個范圍 4 x-=5 x=x-5

if (person.x > person._x&&person.y > person._y) { person.x -=1, person.y -= 1, person.move = 6; return; }//人物在目的地的右下方 左上方走

if (person.x < person._x&&person.y > person._y) { person.x += 1, person.y -= 1, person.move = 7; return; }//往右上方走

if (person.x > person._x&&person.y < person._y) { person.x -= 1, person.y += 1, person.move = 4; return; }//左下方走

if (person.x < person._x&&person.y < person._y) { person.x += 1, person.y += 1, person.move = 5; return; }//右下

if (person.x > person._x) { person.x -= 1, person.move = 1; return; }//往左走

if (person.x < person._x) { person.x += 1, person.move = 2; return; }//往右走

if (person.y > person._y) { person.y -= 1, person.move = 3; return; }//往上走

if (person.y < person._y) { person.y += 1, person.move = 0; return; }//往下走

/*

單位像素 一個像素一個像素 角度 三角函數 出現小數(舍棄) 跑偏的 剛剛好是整數情況非常小

*/

}

void change()//用鼠標/鍵盤實現改目標位置

{

//鍵盤實現的部分 有沒有鍵盤輸入

if (kbhit())

{

switch (getch())//獲取鍵盤消息

{

case 'W':

case'w':

//兩種方案

//目標位置 當前位置的上方 或目標點的上方

person._y = person.y - 15;//一次移動 15個單位

person._x = person.x;

break;

case 'A':

case'a':

person._y = person.y;

person._x = person.x-15;

break;

case'S':

case's':

person._y = person.y + 15;

person._x = person.x;

break;

case'D':

case 'd':

person._y = person.y;

person._x = person.x+15;

break;

}

}

else if(MouseHit())//有沒鼠標信息的

{

MOUSEMSG msg = GetMouseMsg();//獲取鼠標信息 等待

switch(msg.uMsg)

{

case WM_LBUTTONDOWN://左鍵按下

person._x = msg.x;

person._y = msg.y;

break;

//case WM_RBUTTONDOWN://右鍵按下

}

}

}

int main()

{

init();

draw();

while (1)

{

change();

walk();

draw();

}

getchar();

closegraph();//關閉窗口

return 0;

}

/*

IMAGE img;//裝圖片的容器

loadimage(&img,L"背景.jpg",640,480);//jpg bmp L多字節

putimage(0, 0, &img);//把這張圖片貼出來 0,0坐標

IMAGE img2;

loadimage(&img2, L"boy.bmp");//jpg bmp L多字節

putimage(0, 0, &img2);//把這張圖片貼出來 0,0坐標*/

學習編程(C語言/C++)并不難各位可以加下群315732400(資料和視頻),一起交流提升,編程不要覺得很難,雖說也有難度,但是學好了對以后的幫助是非常大。

最終的效果圖:


星城就差不多把效果圖,代碼都已經發出來了,可以借鑒一下我的思路,圖形庫記得安裝好,別忘了,這個鼠標可以控制人物的移動,素材的話自己都可以去找一下,可以不一樣的,小編就暫時說到這,素材,圖片命名,路徑都是要統一別亂了。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,698評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,202評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,742評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,580評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,297評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,688評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,693評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,875評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,438評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,183評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,384評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,931評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,612評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,022評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,297評論 1 292
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,093評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,330評論 2 377

推薦閱讀更多精彩內容