首頁 現(xiàn)實

程序媛養(yǎng)成計劃

第十九章 快跑灰太狼

程序媛養(yǎng)成計劃 任煦之秋 2402 2020-04-22 20:49:31

  在我的期盼中,第二天的課程如約而至,不過在上課之前,老爹在我的電腦上安裝了一款叫做Visual studio的軟件。

  「由于咱們今天是要編寫游戲,自然不能再像之前那樣使用小黑屏咯,而是要使用圖形界面化窗體程序。

  而用C語言直接來編寫圖形化界面有些麻煩,這里咱們就用C語言的加強版C Plus以及微軟提供的MFC來實現(xiàn)推箱子這個游戲了?!?p>  「C Plus?那是不是我要重新學(xué)習(xí)相關(guān)的知識???」

  我苦著臉問道。

  「C Plus就是大家口中的C++,它的基礎(chǔ)語法和C語言幾乎一模一樣,增強的地方在于面向?qū)ο蟛糠??!?p>  老爹一邊安裝軟件,一邊解釋道。

  「啥?我編個程序還得找個對象來坐我對面么?原來當(dāng)程序員的福利真么好啊,難怪不得那么人都想當(dāng)程序員。可是我還這么小,這樣做真的好么?」

  聽到「面向?qū)ο蟆顾膫€字的時候,我不禁一臉懵逼。

  「這里的對象不是你想的那個對象,是……算了,我們先別討論對象的問題,現(xiàn)在只是換一個環(huán)境讓你使用C語言。你看C++,C++,++在后,說明是先使用C語言,然后再加的?!?p>  老爹捂著額頭苦笑道,想要解釋卻不知道該怎么說。

  「這樣的么?那當(dāng)初開發(fā)C++的人應(yīng)該叫它++C才對嘛……」

  在和老爹閑聊的時候,軟件也安裝好了。為了防止我被一些不相關(guān)的東西干擾,老爹先將工程搭建好,并且設(shè)置好了窗體的相關(guān)參數(shù)。

  「現(xiàn)在我給你演示一遍怎么加載圖片,如果記不住就算了,反正我們的目的不在這兒。」

  有了老爹這句話,我理所應(yīng)當(dāng)?shù)臎]有學(xué)會。

  「好了,現(xiàn)在背景圖片和灰太狼都已經(jīng)加載進來了,我們下一步就是獲取從鍵盤上的輸入,然后使用switch語句讓灰太狼動起來。

  在MFC中給我們提供了控件的鍵盤輸入事件,我們只需要到相應(yīng)的位置獲取鍵盤輸入了好了。」

  「鍵盤輸入我能夠理解,事件是個嘛玩意兒?」

  我又被老爹說的新名詞給弄迷糊了。

  「嗯~,比如說哈,我們現(xiàn)在在這個窗體上點擊鼠標(biāo),這個時候計算機是能夠捕捉到我們這個點擊動作的,這個動作被稱之為事件源。當(dāng)計算機捕捉到這個動作的時候,就會去執(zhí)行對應(yīng)的一段代碼。

  而要執(zhí)行的那段代碼,叫做事件響應(yīng)內(nèi)容,需要我們給出,因為計算機并不知道捕捉到動作的時候需要做什么事情。

  之前一直跟你說過,計算機很笨,我們不能把事件響應(yīng)內(nèi)容隨意放置,而是要放在一個特定的地方,否則計算機就找不到。而這個特定的位置,就叫做事件,事件里邊執(zhí)行的是事件響應(yīng)內(nèi)容。

  所以事件的機制是:事件源觸發(fā)事件,事件執(zhí)行事件響應(yīng)內(nèi)容。

  對了對了,我想到一個特別好的例子,我們再來說說諜戰(zhàn)風(fēng)云?!?p>  「好呀好呀!」

  「在諜戰(zhàn)片里邊一般情報人員里邊都是單線聯(lián)系對吧?假設(shè)現(xiàn)在你是老爹的上級,老爹是你手下的一個情報人員,但是由于我們是單線聯(lián)系,你可以直接聯(lián)系我,但是我不能直接聯(lián)系你。

  這天呢,你聯(lián)系我,讓我要在半個月之內(nèi)獲取到敵人的密碼本。老爹我歷經(jīng)千難萬險,九死一生,終于從敵人手里拿到了密碼本。

  密碼本是拿到了,但是我要怎么給你呢?我又沒有辦法主動聯(lián)系你?

  這個時候我就想到你之前說的,一旦拿到敵人的密碼本,就立刻藏在某個寺廟的佛龕下面。

  老爹將密碼本放在佛龕下邊后不放心,于是就旁邊寫上了『此處沒有密碼本』幾個大字。果不其然,敵人很快就找到了老爹藏密碼本的佛龕,但是在看到上面的字后信以為然就走了。

  半個月的時間到,你就到佛龕下面拿到了密碼本,任務(wù)完成!」

  「哈哈!老爹你這不是騙小孩兒么?敵人怎么可能相信你寫的字嘛,這不是此地?zé)o銀三百兩么?」

  「這只是老爹編的故事而已,不要較真嘛。

  在這個故事里邊,半個月的時間就是事件源,當(dāng)半個月的時間一到,你就要去佛龕拿密碼本,所以佛龕就是事件,事件內(nèi)容就是密碼本咯。

  同理,當(dāng)我們按下鍵盤上某個按鍵就是事件源,這個時候就要觸發(fā)鍵盤輸入事件,而我們只需要在事件里面添加我們需要進行的邏輯內(nèi)容。」

  「哦~,原來是這樣的哦。」

  我若有所思道。

  「如果你暫時理解不了也沒有關(guān)系,我們現(xiàn)在的學(xué)習(xí)重點并不是UI的機制。那我們現(xiàn)在分析一下我們在鍵盤輸入事件里面需要添加哪些內(nèi)容:

  首先,我們需要在事件中用一個char類型的變量來獲取鍵盤輸入按鍵的鍵碼,就取名叫做keyCode吧。至于如何獲取,MFC已經(jīng)給我們留好方法了,這個暫且不提。

  接下來我們就應(yīng)該用switch來進行邏輯處理:

  switch(keyCode)

  {

  case 38:/*上*/

  灰太狼向上移動

  break;

  case 40:/*下*/

  灰太狼向下移動

  break;

  case 37:/*左*/

  灰太狼向左移動

  break;

  case 39:/*右*/

  灰太狼向右移動

  break;

  default:/*其他按鍵*/

  什么都不做

  break;

  }

  上下左右的鍵碼分別38、40、37、39,接下來我們要做的就是實現(xiàn)灰太狼的移動邏輯了?!?p>  「嗯~」

  我應(yīng)了一聲,在腦中想了一下老爹剛剛說的內(nèi)容,確認(rèn)沒有什么問題后點了點頭。

  「還記得第一天我跟你說過,電腦的顯示屏其實是一個個排列的點陣吧?應(yīng)該說是像素點?!?p>  「記得!」

  畢竟當(dāng)時老爹讓我親自動手實現(xiàn)了大寫字母「Y」的顯示過程,所以我對這個知識點的印象還是很深刻的。

  「記得就好,對于每一個像素點來說,它們都有自己的位置,就像是五指棋盤行數(shù)用數(shù)字表示,列數(shù)用字母表示,當(dāng)我們描述一個格子的位置時,就會A1,B2等來表示第一行第一列和第二行第二列的格子。

  同樣,像素點也有自己位置的描述方式,它是用x和y來記錄,其中x代表列號,y代表行號,它們都是從0開始的,x從左到右依次增大,y從上到下依次增大。

  像你房間里這臺電腦的顯示器分辨率是1920x1080,這代表著臺顯示器像素點一共有1080行,每一行有1920個像素點。最左上角的那個像素點位置是x=0,y=0,最右上角那個像素點的位置是1920,0。你能告訴老爹最左下角和最右下角的兩個點的像素位置么?」

  老爹拿著屏幕跟我細(xì)細(xì)講道。

  「這有什么難的,左下角像素點的位置是x=0,y=1080,右下角的像素點是x=1920,y=1080?!?p>  「不錯,正是如此。其實我們在移動灰太狼的時候,本質(zhì)上就是在改變灰太狼圖片在屏幕中的位置。比如說我們要把灰太狼向上移動10個像素,那么只需要讓灰太狼的x保持不變,讓y減去10;如果要向下移動,就讓y加上10。

  同理,要向左移動,就是對x做減法,向右則是對x做加法?!?p>  有了老爹的理論支持和技術(shù)支持,很快我就將移動灰太狼的邏輯寫好了。費了這么大的勁,我肯定要好好玩一下,于是在我的控制下,灰太狼在屏幕中到處亂跑。

任煦之秋

手機上邊好像對大括號和尖括號的顯示不是很好,造成閱讀體驗不佳,但是在電腦上不會有這個問題。我之前跟編輯反應(yīng)了,可是編輯沒有理我,所以請大家多多諒解

按 “鍵盤左鍵←” 返回上一章  按 “鍵盤右鍵→” 進入下一章  按 “空格鍵” 向下滾動
目錄
目錄
設(shè)置
設(shè)置
書架
加入書架
書頁
返回書頁
指南