C++可視化角色按鍵移動(dòng)控制的實(shí)現(xiàn)
1.新建項(xiàng)目
新建一個(gè)空項(xiàng)目,并添加一個(gè)源文件(.cpp)


記住.cpp文件所在的位置
2.新建一個(gè)窗口,并添加背景圖片
將要使用的圖片,拷貝到項(xiàng)目所在文件夾
與.cpp文件處于同一文件夾
#include<stdio.h> //用于標(biāo)準(zhǔn)輸入輸出
#include<graphics.h> //用于圖形的函數(shù)庫
int main()
{
initgraph(1440, 768); //創(chuàng)建一個(gè)窗口,大小設(shè)定為背景大小,以免圖片拉伸變形
IMAGE background; //創(chuàng)建一個(gè)圖像,命名為background
loadimage(&background, "background.bmp");
//加載背景圖片
putimage(0, 0, &background);
//輸出到窗口,背景圖片從0,0,為原點(diǎn)
getchar(); //暫停,等待輸入任意字符
closegraph(); //關(guān)閉窗口
return 0;

3.加入一個(gè)角色
在main()函數(shù)中插入角色
IMAGE role, roleY; loadimage(&role, "role.bmp" ); loadimage(&roleY, "roleY.bmp"); putimage(100, 500, 93,100,&roleY,0,200,SRCAND); putimage(100, 500, 93,100,&role, 0,200,SRCPAINT );
第4行
putimage(100, 500, 93,100,&roleY,0,200,SRCAND);
100,500表示角色在窗口中的坐標(biāo),位置大約在左下角
93,100 表示角色圖片的大小
&roleY插入的圖片對(duì)象
0,200從該圖片的0,200像素開始取值
SRCAND 使用AND的方式加載
第4、5行,使用三元光柵操作實(shí)現(xiàn)透明貼圖
背景圖:

掩碼圖:


4.接收用戶輸入的按鍵,并判斷輸入的是什么
#include<conio.h> //控制臺(tái)輸入輸出
void keyDonw()
{
char choice = _getch();
switch (choice)
{
case 'w':
case 'W':
case 72:
break;
case 's':
case 'S':
case 80:
break;
case 'a':
case 'A':
case 75:
break;
case 'd':
case 'D':
case 77:
break;
}
}
需要添加一個(gè)頭文件,并接收用戶輸入的按鍵
接收 上下左右 四個(gè)方向鍵
使用switch()循環(huán),判斷用戶輸入
5.當(dāng)用戶按鍵后,執(zhí)行相應(yīng)功能
1.首先將main()函數(shù)中定義的一些變量提出來,作為全局變量
不然只有main()函數(shù)可以使用,別的函數(shù)使用不了
IMAGE background,role, roleY;
2.putimage(100, 500, 93,100,&roleY,0,200,SRCAND);
putimage(100, 500, 93,100,&role, 0,200,SRCPAINT );
putimage()函數(shù)中的,表示角色在窗口位置的參數(shù),
會(huì)隨著用戶操作方向鍵改變因此不能再使用100,500
應(yīng)該使用變量代替,如:int x;int y;
case 'w': case 'W': case 72: putimage(0, 0, &background); putimage(x, y, 93, 100, &roleY, imageNum * 93, 300, SRCAND); putimage(x, y, 93, 100, &role, imageNum * 93, 300, SRCPAINT); imageNum++; y -= 5; if (imageNum == 4) imageNum = 0; break;
以按下向上箭頭為例:
- 首先重新載入背景 putimage(0, 0, &background);
- 其次將圖片顯示為角色像上
- 用 imageNum記錄按下照片的次數(shù)
- 由于每走一步角色會(huì)稍有變化,向上走的圖片共有四張,
- 用每個(gè)角色的寬度X按下的次數(shù)
- 使用if語句,當(dāng)照片到第四張的時(shí)候,回到第一張
- 將y軸減小5個(gè)像素,是人物向上移動(dòng)

6.添加個(gè)背景音樂BGM
將要使用的音樂,拷貝到項(xiàng)目所在文件夾
與.cpp文件處于同一文件夾
#include<mmsystem.h> ////包含多媒體接口
#pragma comment(lib,"winmm.lib")
int main()
{
mciSendString("open 1.mp3 alias music", 0, 0, 0);//媒體控制接口函數(shù)
mciSendString("play music repeat", 0, 0, 0);
}
7.完整代碼
#include<stdio.h> //用于標(biāo)準(zhǔn)輸入輸出
#include<graphics.h> //用于圖形的函數(shù)庫
#include<conio.h> //控制臺(tái)輸入輸出
#include<mmsystem.h> //包含多媒體接口
#pragma comment(lib,"winmm.lib")
IMAGE background,role, roleY;
int x=100;
int y=500;
int imageNum = 0; //為照片計(jì)數(shù),從0開始
void keyDonw()
{
char choice = _getch();
switch (choice)
{
case 'w':
case 'W':
case 72:
putimage(0, 0, &background);
putimage(x, y, 93, 100, &roleY, imageNum * 93, 300, SRCAND);
putimage(x, y, 93, 100, &role, imageNum * 93, 300, SRCPAINT);
imageNum++;
y -= 5;
if (imageNum == 4)
imageNum = 0;
break;
case 's':
case 'S':
case 80:
putimage(0, 0, &background);
putimage(x, y, 93, 100, &roleY, 93 * imageNum, 0, SRCAND);
putimage(x, y, 93, 100, &role, 93 * imageNum, 0, SRCPAINT);
imageNum++;
y += 5;
if (imageNum == 4)
imageNum = 0;
break;
case 'a':
case 'A':
case 75:
putimage(0, 0, &background);
putimage(x, y, 93, 100, &roleY, 93 * imageNum, 100, SRCAND);
putimage(x, y, 93, 100, &role, 93 * imageNum, 100, SRCPAINT);
imageNum++;
x -= 5;
if (imageNum == 4)
imageNum = 0;
break;
case 'd':
case 'D':
case 77:
putimage(0, 0, &background);
putimage(x, y, 93, 100, &roleY, 93 * imageNum, 200, SRCAND);
putimage(x, y, 93, 100, &role, 93 * imageNum, 200, SRCPAINT);
imageNum++;
x += 5;
if (imageNum == 4)
imageNum = 0;
break;
}
}
int main()
{
initgraph(1440, 768); //創(chuàng)建一個(gè)窗口,大小設(shè)定為背景大小,以免圖片拉伸變形
loadimage(&background, "background.bmp");
//加載背景圖片
putimage(0, 0, &background);
loadimage(&role, "role.bmp" );
loadimage(&roleY, "roleY.bmp");
putimage(x, y, 93,100,&roleY,0,200,SRCAND);
putimage(x, y, 93,100,&role, 0,200,SRCPAINT );
mciSendString("open 1.mp3 alias music", 0, 0, 0);//媒體控制接口函數(shù)
mciSendString("play music repeat", 0, 0, 0);
while (true)
{
keyDonw();
}
getchar(); //暫停,等待輸入任意字符
closegraph();
return 0;
}
8.遇到的一些問題
VS中可能找不到頭文件<graphics.h>
安裝EasyX,素材中有
loadimage()函數(shù),沒有與參數(shù)列表匹配的重載函數(shù)
右擊項(xiàng)目名稱,選擇“屬性”,點(diǎn)左側(cè)的“配置屬性”,在右側(cè)的設(shè)置中找到“字符集”,修改默認(rèn)的“使用 Unicode 字符集”為“使用多字節(jié)字符集(即MBCS)”即可。
涉及的素材下載鏈接:Csucai_jb51.rar
到此這篇關(guān)于C++可視化角色按鍵移動(dòng)控制的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)C++ 按鍵移動(dòng)控制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在while中使用cin>>a?為條件及注意事項(xiàng)說明
這篇文章主要介紹了在while中使用cin>>a?為條件及注意事項(xiàng)說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
C++函數(shù)指針和回調(diào)函數(shù)使用解析
這篇文章主要為大家詳細(xì)介紹了C++函數(shù)指針和回調(diào)函數(shù)的使用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10
C語言數(shù)據(jù)結(jié)構(gòu)之模式匹配字符串定位問題
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)之模式匹配字符串定位問題的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解這部分內(nèi)容,需要的朋友可以參考下2017-10-10
VC外部符號(hào)錯(cuò)誤_main,_WinMain@16,__beginthreadex解決方法
這篇文章主要介紹了VC外部符號(hào)錯(cuò)誤_main,_WinMain@16,__beginthreadex解決方法,實(shí)例分析了比較典型的錯(cuò)誤及對(duì)應(yīng)的解決方法,需要的朋友可以參考下2015-05-05
C++容器適配與棧的實(shí)現(xiàn)及dequeque和優(yōu)先級(jí)詳解
這篇文章主要介紹了C++容器適配與棧的實(shí)現(xiàn)及dequeque和優(yōu)先級(jí),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-10-10
C++實(shí)現(xiàn)班級(jí)成績管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)班級(jí)成績管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02

