最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c++實現(xiàn)超簡單的貪吃蛇游戲?qū)嵗榻B

 更新時間:2021年12月20日 10:55:21   作者:Krito.  
大家好,本篇文章主要講的是c++實現(xiàn)超簡單的貪吃蛇游戲?qū)嵗榻B,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽

設(shè)計思路

? ? ? ??建議先將代碼復(fù)制下來跑一遍再來看思路?。?!

? ? ? ? 通俗易懂,請仔細看。

? ? ? ? 值得注意的是我給出的代碼沒有加墻體,如有需要自己添加。

? ? ? ? 也沒有難度設(shè)計,同上。

地圖大?。ㄟ@里設(shè)計了墻體,代碼中未實現(xiàn))

設(shè)置一個整形數(shù)組map,其大小為1600,對應(yīng)著地圖的大小為1600,并初始化數(shù)組,令數(shù)組中的值全為0,0代表空地。

我們通過設(shè)定窗口的寬度為80,打印時每個map[i] 所對應(yīng)的字符占兩格位置即可實現(xiàn)每打印40個map[i]就換行的效果。

這樣地圖的長寬即為40x40.

? ? ? 2.墻體

墻體在地圖的最外圍,意味著當map[i]中的i為地圖邊界時,對應(yīng)著墻體,使用if語句判斷i的值,符合位于邊界的條件打印墻體即可。

通過地圖的大小我們了解到,當0<=i<=39時,map[i]對應(yīng)著第一行,也就是地圖的邊界 ,同樣的,地圖左邊界的i滿足i%40==0,右邊界的i滿足(i+1)%40==0,,同理下邊界。將上述符合的條件放入if語句中即可實現(xiàn)打印墻體的功能。

? ? ? ? 3.蛇

蛇是如何移動呢?并且保持一定長度。其實我們只需要一個蛇頭就可以辦到,因為蛇身只是舊蛇頭的位置,所以我們一直只需更新蛇頭坐標就能達到目的,如何保持長度呢?,因為我們更新新的蛇頭,去掉舊的蛇尾是很顯然的事了,在地圖大小中我們提到,map[i] 如果等于0,就是空地,讓蛇尾的值變成0就行了,因為蛇一直在移動,所以當前蛇尾的前一節(jié)蛇身會是下一刻的蛇尾,很自然的聯(lián)想到了以1為公差的一組數(shù)1234,分別對應(yīng)蛇身的值,如果我們想使蛇連續(xù)的動起來,新蛇頭的值為4,在加入新蛇頭前將蛇尾變?yōu)?,蛇尾前一節(jié)蛇身變?yōu)榇丝躺呶矊?yīng)的值為1,使蛇整體減去1,此時的蛇的值為0123,加入蛇頭4,01234,此刻原蛇尾變?yōu)榭盏?,原蛇尾前一截蛇身變?yōu)榇丝痰纳呶?。貪吃蛇的持續(xù)移動便完成了。

? ? ? ?4.食物

很自然的,在上面3節(jié)map[i]為0,正整數(shù)時都有了對應(yīng)的含義,食物我們便使其 map[i] =-1.因為貪吃蛇游戲中食物的生成要求是隨機的,但我們的c++課程中并沒有提到,便在網(wǎng)上查找到了隨機數(shù)生成的函數(shù)srand(上面的設(shè)定窗口大小也是如此),生成的隨機數(shù)i可能超出數(shù)組大小,對i取1600的余數(shù)即可。食物只能生成在空地上,當map[i]等于0時,令map[i]=-1。新的食物便生成了。容易忽略的一點是,我們并沒有給墻體map[i]的值,也就是所墻體的值在數(shù)組中對應(yīng)的是空地,只不過通過i的位置來判斷是否為墻體,在這里,同樣也要加入墻體的位置到判斷條件,以免食物生成在墻體內(nèi)。新的食物在舊的食物被吃掉后立即生成。

? ? ? 5.死亡判定

我們通過新蛇頭所對應(yīng)的值來判斷蛇是否死亡

? ? ? ? (1)map[headx+heady*40]>0, 由3我們可以知道,蛇身所對應(yīng)的map [i] ?值大于0,新蛇頭所對應(yīng)的map值大于0也就意味著新蛇頭在蛇身生成,按

照貪吃蛇的規(guī)則,游戲結(jié)束

? ? ? ?(2)(headx+heady*40)滿足墻體的打印條件時,意味著蛇頭在墻體生成,游戲結(jié)束

實現(xiàn)代碼

#include<bits/stdc++.h>
#include<windows.h>
#include<iostream>
#include<conio.h>
int main() {
    int headx = 0, heady = 0, len = 5, map[1600] = { 0 }, i = 0;
    char c = 'd', cl = 'd',body=3,head=2;
    /*隨機數(shù)生成*/
    srand((unsigned)time(0));
    system("mode con:cols=80 lines=40");
    map[rand() % 1600] = -1;
    while (true)
    {
        if (_kbhit())//判斷鍵盤輸入
        {
            cl =_getch();
            if (cl < 97) cl += 32;
            if (cl == 'a' && c != 'd' || cl == 'd' && c != 'a' ||cl == 'w' && c != 's' || cl == 's' && c != 'w')//判斷輸入方向是否與原方向沖突
                c = cl;
        }
        /*改變蛇頭坐標*/
        if (c == 'a') headx--;
        if (c == 'd') headx++;
        if (c == 'w') heady--;
        if (c == 's') heady++;
        /*判斷蛇頭是否撞墻*/
        if(headx==-1||headx==40||heady==-1||heady==40)
            break;
        /*判斷蛇頭是否為空地*/
        if (map[heady * 40 + headx])
        {
            if (map[heady * 40+headx] > 0) break;
            /*吃到食物,蛇身+1,并在空地生成新的食物*/
            if (map[heady * 40 + headx] < 0)
            {
                len++;
                for (i = rand() % 1600; map[i] || !(map[i] = -1); i = rand() % 1600);
            }
        }
        /*是空地則蛇身值整體減1,蛇尾由1減為0變成空地*/
        else for (i = 0; i < 1600; i++)
        {
            if (map[i] > 0) map[i] -= 1;
        }
        system("cls");
        /*新蛇頭賦值,遍歷map,值大于0為蛇身,等于0為空地,小于0為食物*/
        for (map[heady * 40 + headx] = len, i = 0; i < 1600; i++)
        {
            if (map[i] == len) {
                printf("%2d", map[i]);
                continue;
            }
            if (map[i] > 0)  printf("%2d", map[i]);
            if (map[i] == 0)  printf("%2d", map[i]);
            if (map[i] == -1) printf("%2d", map[i]);//打印
         }
        Sleep(100);
    }
}

效果

?如果你仔細閱讀了代碼,將數(shù)字替換成你想要的符號(占兩個字符大小如果是一個字符要加一個空格)是很簡單的事情

如果你想要游戲循環(huán)進行,也是很容易辦到的。

這只是個demo,你可以根據(jù)自己的需要任意的改寫。

到此這篇關(guān)于c++實現(xiàn)超簡單的貪吃蛇游戲?qū)嵗榻B的文章就介紹到這了,更多相關(guān)c++貪吃蛇游戲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用C++的inipp庫處理配置文件.ini的示例詳解

    使用C++的inipp庫處理配置文件.ini的示例詳解

    一個ini文件由多個節(jié)section組成,每個節(jié)由多個鍵值對組成,本文給大家介紹了使用第三方庫inipp來操作ini文件,文中通過代碼示例講解的非常詳細,需要的朋友可以參考下
    2024-01-01
  • C語言實現(xiàn)圖的搜索算法示例

    C語言實現(xiàn)圖的搜索算法示例

    這篇文章主要介紹了C語言實現(xiàn)圖的搜索算法,結(jié)合具體實例形式分析了C語言實現(xiàn)圖的定義及搜索相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • C語言基礎(chǔ)知識分享續(xù)篇

    C語言基礎(chǔ)知識分享續(xù)篇

    這篇文章主要介紹了C語言基礎(chǔ)知識分享續(xù)篇的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • C++小知識:C/C++中不要按值傳遞數(shù)組

    C++小知識:C/C++中不要按值傳遞數(shù)組

    今天小編就為大家分享一篇關(guān)于C++小知識:C/C++中不要按值傳遞數(shù)組,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • C++中string使用+號與int拼接方式

    C++中string使用+號與int拼接方式

    這篇文章主要介紹了C++中string使用+號與int拼接方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 樹形結(jié)構(gòu)的3中搜索方式示例分享

    樹形結(jié)構(gòu)的3中搜索方式示例分享

    樹的3中常見搜索方式,包括二叉樹方式(每一層只有0和1)、滿m叉樹(每一層都有0 到m - 1)、子集樹,也稱為全排列樹,需要的朋友可以參考下
    2014-02-02
  • C/C++運用WMI接口實現(xiàn)查詢系統(tǒng)信息

    C/C++運用WMI接口實現(xiàn)查詢系統(tǒng)信息

    Windows?Management?Instrumentation(WMI)是一種用于管理和監(jiān)視Windows操作系統(tǒng)的框架,本文主要介紹了如何運用WMI接口實現(xiàn)查詢系統(tǒng)信息,感興趣的可以了解下
    2023-11-11
  • C語言控制進程之進程等待詳解

    C語言控制進程之進程等待詳解

    這篇文章主要介紹了C語言控制進程之進程等待即回收子進程的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • C++中實現(xiàn)接口繼承與實現(xiàn)繼承的方法及它們的區(qū)別

    C++中實現(xiàn)接口繼承與實現(xiàn)繼承的方法及它們的區(qū)別

    在 C++ 中,接口繼承和實現(xiàn)繼承是兩種不同的繼承方式,它們在設(shè)計模式、代碼復(fù)用和多態(tài)性方面有著不同的應(yīng)用,下面將分別解釋這兩者的概念、實現(xiàn)方式及其區(qū)別,感興趣的朋友一起看看吧
    2024-12-12
  • 淺談c++的編譯和運行

    淺談c++的編譯和運行

    下面小編就為大家?guī)硪黄獪\談c++的編譯和運行。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05

最新評論

开远市| 南涧| 昌乐县| 靖远县| 兴化市| 屯昌县| 大余县| 蒲城县| 互助| 吉水县| 定陶县| 滦平县| 涪陵区| 南通市| 西吉县| 寿光市| 靖安县| 高邮市| 运城市| 海晏县| 呼伦贝尔市| 凌云县| 临邑县| 改则县| 固始县| 班戈县| 浮梁县| 铜山县| 贵州省| 乳源| 手游| 福海县| 二连浩特市| 通州市| 班玛县| 阜平县| 延川县| 金堂县| 边坝县| 体育| 颍上县|