不知道C++是如何從代碼到游戲的?以王者榮耀為例,來(lái)看看吧!
這個(gè)簡(jiǎn)單啊。
你既然問(wèn)C++了,那我問(wèn)你,現(xiàn)在,我有一個(gè)Student類。C++怎么創(chuàng)建一個(gè)學(xué)生類的對(duì)象?
//?嗯我會(huì)!有兩種方式:
Student?s;
Student?*s2?=newStudent("張三");

那好,現(xiàn)在這學(xué)生的行為有:吃飯,睡覺(jué),上網(wǎng)課?,F(xiàn)在你執(zhí)行個(gè)上網(wǎng)課的行為,怎么做?
//?簡(jiǎn)單啊
s2->upNetworkClass();
通過(guò)對(duì)象調(diào)用成員函數(shù)不就成了么。
嗯,上面的代碼在學(xué)校里都寫過(guò)吧?有這個(gè)基礎(chǔ)就夠了。
那游戲是啥?無(wú)非是一堆圖形堆疊唄,把上面的Student類換成窗體類,換成控件類,換成游戲中不同的元素類,然后再組合起來(lái)不就完了么。
吶現(xiàn)在,我告訴你,有一個(gè)窗體類,叫QWidget,它有一個(gè)行為叫show,可以顯示窗體。你給我生成一個(gè)窗體并顯示出來(lái)。那就照葫蘆畫瓢唄:
QWidget?*w?=newQWidget();
w->show();
來(lái)我們看看效果:

呀,有點(diǎn)意思哈?但是這距離游戲還差遠(yuǎn)呢啊。你這窗體也太丑了不是。
沒(méi)事,窗體丑不要緊,我們給她美化一下!
TDWidget * w = new TDWidget(":/img/welcome.png");
w->show();
QWidget換成了TDWidget,構(gòu)造函數(shù)里傳了一張圖片,沒(méi)超綱吧。再看看效果:

誒?事情好像開(kāi)始變得有趣了起來(lái)?
但還是不夠,我這是游戲,要交互的!你這一張死圖能干啥。
交互嘛!加個(gè)按鈕不完了?我給你一個(gè)按鈕類,這個(gè)類有一個(gè)move()行為,可以把自己移動(dòng)到畫面的任何地方。你知道你想要的按鈕怎么來(lái)了嗎?
QPushButton?*?btn?=newQPushButton("按鈕",w);//第二個(gè)參數(shù)代表它屬于哪個(gè)窗體,如果不寫,它就會(huì)生成在屏幕上而不是窗體里
btn->move(330,450);
瞅瞅:
em.......你這按鈕,有是有,畫風(fēng)有點(diǎn)突兀了吧。

沒(méi)事,再美化一下嘛:
TDPushButton?*btn?=newTDPushButton(
":/img/begin_normal.png",//?常規(guī)圖片
":/img/begin_hover.png",//?鼠標(biāo)懸停的圖片
":/img/begin_press.png",//?鼠標(biāo)按下的圖片
w);//?父控件
btn->move(330,450);
效果:

呀 可以啊。快快快,然后呢,點(diǎn)開(kāi)始游戲,進(jìn)入游戲界面!這個(gè)咋做?
嗯.....其實(shí)界面切換你自己已經(jīng)會(huì)了。
你這個(gè)界面不就是一個(gè)窗體,想切換界面的話.....你把這個(gè)窗體關(guān)了,再換張圖片開(kāi)一個(gè)新的不就完了。
新的窗體用一張傳新的圖片做背景,我再順手給加上四個(gè)按鈕,代碼不貼了,就是上面的代碼復(fù)制粘貼改改坐標(biāo),改改圖片:
接下來(lái)就是游戲的主體部分了,也巨簡(jiǎn)單,有圖就行:
TDMenuButton?*btn1?=newTDMenuButton(":/img/1_normal.png",":/img/1_hover.png",":/img/1_selected.png",this);
btn1->move(100,100);
TDMenuButton?*btn2?=newTDMenuButton(":/img/1_normal.png",":/img/1_hover.png",":/img/1_selected.png",this);
btn2->move(165,100);
TDMenuButton?*btn3?=newTDMenuButton(":/img/1_normal.png",":/img/1_hover.png",":/img/1_selected.png",this);
btn3->move(100,165);
三個(gè)按鈕,和上面的TDPushButton沒(méi)區(qū)別,就是換成了TDMenuButton對(duì)不對(duì),沒(méi)超綱吧。
只要你的圖片夠美,就能生成這樣:

一個(gè)按鈕會(huì)寫,三個(gè)按鈕也會(huì)寫,既然學(xué)了點(diǎn)C++都想做游戲了,循環(huán)總會(huì)寫吧:
for(inti?=0;?i?<11;?i++)
{
for(intj?=0;?j?<6;?j++)
{
TDMenuButton?*?btn?=newTDMenuButton(":/img/1_normal.png",":/img/1_hover.png",":/img/1_selected.png",this);
btn->move(100+i*65,100+j*65);
}
}
效果:(密恐福利)

這.....怎么還有點(diǎn)一言難盡呢......
循環(huán)會(huì)寫,隨機(jī)數(shù)會(huì)寫嗎?隨機(jī)個(gè)頭像行嗎?

嗯......這下終于像點(diǎn)樣了。
最后再加億點(diǎn)點(diǎn)核心邏輯:點(diǎn)擊兩個(gè)相同的圖片,判斷它能不能連通,如果能連通,就把這兩個(gè)按鈕直接delete掉,效果就是醬紫:

就是這樣咯,從你學(xué)過(guò)的C++基礎(chǔ)語(yǔ)法,結(jié)合現(xiàn)有的框架控件,就可以擼這樣一個(gè)簡(jiǎn)單的連連看。
當(dāng)然了,為了點(diǎn)燃你題目里想要的學(xué)習(xí)熱情,我故意避開(kāi)一些以你現(xiàn)有知識(shí)可能聽(tīng)不懂的部分,還有一些邏輯比較繞的部分。比如:
避開(kāi)了注冊(cè)按鈕的回調(diào),
避開(kāi)了隨機(jī)生成圖片的時(shí)候要保證成對(duì)出現(xiàn)的算法,
避開(kāi)了把這些按鈕和數(shù)據(jù)做關(guān)聯(lián),
避開(kāi)了如何通過(guò)數(shù)據(jù)計(jì)算兩點(diǎn)能否連通,
等等
但這都不重要,不妨礙你簡(jiǎn)單體驗(yàn)一下C++是如何從代碼到游戲的這個(gè)過(guò)程。
如果你想更好的提升你的編程能力,好好學(xué)習(xí)C/C++編程知識(shí)成為高薪軟件開(kāi)發(fā)工程師的話!那么你很幸運(yùn)~

UP在主頁(yè)上傳了一些學(xué)習(xí)C/C++編程的視頻教程,有興趣或者正在學(xué)習(xí)的小伙伴一定要去看一看哦!會(huì)對(duì)你有幫助的~
分享(源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長(zhǎng)比自己琢磨更快哦!
編程學(xué)習(xí)書籍:

編程學(xué)習(xí)視頻:
