兩個(gè)月C語言的初學(xué)者,我利用easyx圖形庫所做的球球作戰(zhàn)小游戲(二)

兩個(gè)月C語言的初學(xué)者滤蝠,我利用easyx圖形庫所做的球球作戰(zhàn)小游戲(一)

1.2 在隨機(jī)位置出現(xiàn)一個(gè)減肥果apple

這個(gè)就比較簡單可通過兩個(gè)函數(shù)實(shí)現(xiàn)

通過rand函數(shù)隨機(jī)初始化apple的坐標(biāo)

void initApple()
{
    int x, y;
    x = GRAPH_WIDE - apple.r;//規(guī)定坐標(biāo)(x稿辙,y) 的取值范圍航厚,防止出現(xiàn)再墻外
    y = GRAPH_HIGH - apple.r;
    apple.x = rand() % x;
    apple.y = rand() % y;
}

根據(jù)現(xiàn)有apple坐標(biāo)畫出它

void makeApple()
{
    setfillcolor(LIGHTRED);//畫出不同顏色蘋果
    setlinecolor(LIGHTRED);
    fillcircle(apple.x, apple.y, apple.r);
    setfillcolor(CYAN);//畫完apple后要把顏色恢復(fù)成原始設(shè)置
    setlinecolor(CYAN);
}
1.3 給小球賦予碰邊界死亡和吃果子的屬性

思考一下會發(fā)現(xiàn)顷歌,碰邊界死亡和吃果子的屬性很類似,我們可以通過一個(gè)判斷界限的函數(shù)來實(shí)現(xiàn)這個(gè)功能
基本原理是通過計(jì)算球心距離來判斷球是否撞墻和兩球是否相遇

int checkBound()//0死亡 1存活 2吃果子
{
    float distance;//player和apple的圓心距離
    distance = sqrt((player.x - apple.x)*(player.x - apple.x) + (player.y - apple.y)*(player.y - apple.y));
    if (player.x<player.r || player.x>GRAPH_WIDE - player.r || player.y<player.r || player.y>GRAPH_HIGH - player.r)//撞墻
    {
        return 0;
    }
    else if (distance <= player.r + apple.r)//兩球相遇
    {
        return 2;
    }
    return 1;//以上兩種情況都沒有發(fā)生就表示狀態(tài)未改變
}
1.4 果子被吃要換個(gè)位置再次出現(xiàn)

這一步不用單獨(dú)編寫函數(shù)幔睬,而是在playgame()函數(shù)中添加已有的函數(shù)把功能結(jié)合起來眯漩。
也就是說,零件已經(jīng)造好了麻顶,現(xiàn)在我們來搭積木赦抖。

apple在游戲開始的時(shí)候就應(yīng)該出現(xiàn),那我們把它加到 initgame()函數(shù)里

void initgame()//為了易于觀看辅肾,本函數(shù)只寫了新添加內(nèi)容
{
    apple.r = 8;//初始化apple的半徑
    initApple();//初始化蘋果坐標(biāo)
    makeApple();//初始化蘋果圖形
}
void playgame()
{
    int sign;//用于存儲player的狀態(tài)
    initgame();
    while (1)
    {
        if (_kbhit())//如果有輸入的話队萤,改變方向.沒有就方向不變
        {
            g_direction = _getch();
        }
        moveOrder();//改變玩家的坐標(biāo)
        sign = checkBound();//把player狀態(tài)的判斷結(jié)果存儲下來
        if (sign == 0)//如果死了
        {
            cleardevice();//清屏后跳出while循環(huán)
            break;
        }
        else if (sign == 2)//如果吃到了減肥果
        {
            initApple();//新蘋果坐標(biāo)初始化,也就是更換蘋果位置
        }
        cleardevice();//清屏
        makePlayer();//畫player圖形
        makeApple();//畫apple
    }
}

下圖錄制的有一些問題矫钓,實(shí)際運(yùn)行是勻速運(yùn)動的小球要尔,并不會卡頓和跳躍前進(jìn)


游戲核心功能完成后的效果

至此,我們預(yù)想的游戲核心功能已經(jīng)全部實(shí)現(xiàn)了
現(xiàn)在看來我們的游戲游戲有一些無聊新娜,我們來為它添加一些 有趣的屬性

2.增加功能

開始我們預(yù)想赵辕,player 吃了 apple 后會變小而且移動速度會更快以至于讓游戲難度慢慢增加
我們就暫且增加這一個(gè)功能做示范,如果你想的話概龄。你可以增加“傳送門”毒性果子”“炸彈”还惠,或者加入HP的概念,甚至加入一些你獨(dú)特的概念旁钧,這些都是可以通過增加簡單的函數(shù)來實(shí)現(xiàn)的。

實(shí)現(xiàn)目標(biāo) player 每吃一個(gè)apple 會變小一圈互拾,每吃三個(gè)移動速度會變快

是不是一下就想到了 play.step 和 player.r 的屬性歪今,沒錯(cuò),我們就是通過改變這兩點(diǎn)來實(shí)現(xiàn)颜矿。但是我們?nèi)绻麌L試會發(fā)現(xiàn)寄猩,就算把play.step設(shè)置為1,(也就是一次只移動一個(gè)像素點(diǎn)的距離)小球依然會移動的過快。
為此我們加入一個(gè)Sleep()函數(shù)骑疆,讓程序再適當(dāng)?shù)奈恢眠\(yùn)行“慢”一點(diǎn)

#include <windows.h>

Sleep (500) ; //注意第一個(gè)字母是大寫,作用是讓系統(tǒng)運(yùn)行到此代碼處等待500毫秒再繼續(xù)運(yùn)行

增加功能示例代碼

int g_score = 0;//記分用
int g_step = 10;//玩家實(shí)際每秒移動像素個(gè)數(shù)=1000/STEP*player.step

void playgame()
{
    int sign;
    initgame();
    while (1)
    {
        if (_kbhit())//如果有輸入的話田篇,改變方向.沒有就方向不變
        {
            g_direction = _getch();
        }
        moveOrder();//改變玩家的坐標(biāo)
        sign = checkBound();//把player狀態(tài)的判斷結(jié)果存儲下來
        if (sign == 0)//如果死了
        {
            cleardevice();
            break;
        }
        else if (sign == 2)//如果吃到了減肥果
        {
            g_score++;
            if (g_score % 3 == 0)//每吃3個(gè)速度變快一次
            {
                player.step++;
            }
            player.r -= 3;//減肥吧player~
            initApple();//新蘋果坐標(biāo)初始化
        }
        Sleep(g_step);//讓程序睡一會兒
        cleardevice();//清屏
        makePlayer();//畫player圖形
        makeApple();//畫apple
    }
}

如果你想改變 player 的初始移動速度和大小,可以在 initgame(); 里改變相關(guān)參數(shù)和g_step實(shí)現(xiàn)箍铭。
如果你想改變移動速度增加的頻率 參考公式: *玩家實(shí)際每秒移動像素個(gè)數(shù)=1000/STEPplayer.step **

這個(gè)的運(yùn)行效果需要長時(shí)間的動圖來觀察泊柬,就不放圖了。

結(jié)語

今天我們完成了游戲的核心功能并為游戲增添了一些有趣的屬性
在下一篇文章中诈火,我們將為游戲做一些美化以及排除一些游戲中的bug

今天的代碼下載 github

如果你也是是C語言的初學(xué)者兽赁,并對此文章有興趣,請持續(xù)關(guān)注更新。
如果你跟我一樣是萌新刀崖,遇到了我能理解的問題歡迎私信惊科,我會很樂意交流。
如果你是編程界的前輩亮钦,對我有一些中肯的建議馆截,更加歡迎私信。
我是 Aha_斌蜂莉,一個(gè)對編程有著濃厚興趣的學(xué)生蜡娶。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市巡语,隨后出現(xiàn)的幾起案子翎蹈,更是在濱河造成了極大的恐慌,老刑警劉巖男公,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荤堪,死亡現(xiàn)場離奇詭異,居然都是意外死亡枢赔,警方通過查閱死者的電腦和手機(jī)澄阳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來踏拜,“玉大人碎赢,你說我怎么就攤上這事∷俟#” “怎么了肮塞?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長姻锁。 經(jīng)常有香客問我枕赵,道長,這世上最難降的妖魔是什么位隶? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任拷窜,我火速辦了婚禮,結(jié)果婚禮上涧黄,老公的妹妹穿的比我還像新娘篮昧。我一直安慰自己,他們只是感情好笋妥,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布懊昨。 她就那樣靜靜地躺著,像睡著了一般春宣。 火紅的嫁衣襯著肌膚如雪疚颊。 梳的紋絲不亂的頭發(fā)上狈孔,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機(jī)與錄音材义,去河邊找鬼均抽。 笑死,一個(gè)胖子當(dāng)著我的面吹牛其掂,可吹牛的內(nèi)容都是我干的油挥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼款熬,長吁一口氣:“原來是場噩夢啊……” “哼深寥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起贤牛,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤惋鹅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后殉簸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體闰集,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年般卑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了武鲁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蝠检,死狀恐怖沐鼠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情叹谁,我是刑警寧澤饲梭,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站焰檩,受9級特大地震影響憔涉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜锅尘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一监氢、第九天 我趴在偏房一處隱蔽的房頂上張望布蔗。 院中可真熱鬧藤违,春花似錦、人聲如沸纵揍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泽谨。三九已至璧榄,卻和暖如春特漩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背骨杂。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工涂身, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人搓蚪。 一個(gè)月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓蛤售,卻偏偏與公主長得像,于是被迫代替她去往敵國和親妒潭。 傳聞我的和親對象是個(gè)殘疾皇子悴能,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容