C語言編程學(xué)習(xí)打造—人工智能版貪吃蛇小游戲

C語言是面向過程的,而C++是面向?qū)ο蟮?/b>

C和C++的區(qū)別:

C是一個結(jié)構(gòu)化語言,它的重點(diǎn)在于算法和數(shù)據(jù)結(jié)構(gòu)。C程序的設(shè)計(jì)首要考慮的是如何通過一個過程,對輸入(或環(huán)境條件)進(jìn)行運(yùn)算處理得到輸出(或?qū)崿F(xiàn)過程(事務(wù))控制)。

C++,首要考慮的是如何構(gòu)造一個對象模型,讓這個模型能夠契合與之對應(yīng)的問題域,這樣就可以通過獲取對象的狀態(tài)信息得到輸出或?qū)崿F(xiàn)過程(事務(wù))控制。 所以C與C++的最大區(qū)別在于它們的用于解決問題的思想方法不一樣。之所以說C++比C更先進(jìn),是因?yàn)椤?設(shè)計(jì)這個概念已經(jīng)被融入到C++之中 ”。

C與C++的最大區(qū)別:在于它們的用于解決問題的思想方法不一樣。之所以說C++比C更先進(jìn),是因?yàn)椤?設(shè)計(jì)這個概念已經(jīng)被融入到C++之中 ”,而就語言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,錯!算法是程序設(shè)計(jì)的基礎(chǔ),好的設(shè)計(jì)如果沒有好的算法,一樣不行。而且,“C加上好的設(shè)計(jì)”也能寫出非常好的東西。

總感覺我寫個這樣的貪吃蛇,沒多大用處額,自動版本的,自己玩的貪吃蛇游戲,涉及的知識點(diǎn)也并不是很多的,記得安裝好圖形庫哈,我下面把代碼發(fā)出來,你們自己去運(yùn)行吧,順帶最后我也說下運(yùn)用到的C語言知識點(diǎn),總結(jié)一下

/*********************************************************

小編推薦一個學(xué)C語言/C++的學(xué)習(xí)裙【 二六三,六八八,二七六 】,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!

*文件名稱:main.cpp

*文件描述:C語言實(shí)現(xiàn)圖形界面的貪吃蛇

*編譯環(huán)境:VS2013 && 圖形界面

*最后修改:

*<2016年11月26日> <創(chuàng)建工程> <某某某>

*

*1.圖形界面是一個圖形庫,在最初的TC2.0中.

*2.剛開始學(xué)習(xí),控制臺應(yīng)用程序。

**********************************************************/

#include

#include

#include

#include

//播放音樂的頭文件以及庫文件

#include

#pragma comment(lib,"winmm.lib")

#define SNAKEMAX 1000 //蛇的最大長度為1000

//結(jié)構(gòu)體

//蛇的方向

typedef enum ch

{

up = 72,

down =80,

left =75,

right =77

}CH;

//坐標(biāo)

typedef struct Coor

{

int x;

int y;

}COOR;

//蛇的身體

struct SNAKE

{

COOR sc[SNAKEMAX];//1000節(jié)蛇的坐標(biāo)

int n;//當(dāng)前的節(jié)數(shù)

CH ch;//蛇的方向

}Snake;

struct FOOD

{

COOR fc;//食物的坐標(biāo) //食物每時每刻都只有一個對不對?

int flag;//判斷食物是否被吃掉

}Food;

//對程序進(jìn)行初始化 每一個程序都要有一個初始化的函數(shù)

void GameInit()

{

//軟件工程師 硬件的聲卡 微軟公司為軟件的程序員提供這些接口

mciSendString(L"open 甩蔥歌.mp3 alias bgm", 0, 0, 0); //打開文件

mciSendString(L"play bgm repeat", 0, 0, 0);

setbkcolor(RGB(220,120,150));

cleardevice(); //用指定的背景顏色刷新整個界面

//初始化一條小蛇

rectangle(0, 0, 10, 10); //始終都是0 0 10 10

//最開始蛇的坐標(biāo)

Snake.sc[0].x = 0;

Snake.sc[0].y = 0;

Snake.n = 1; //蛇當(dāng)前的節(jié)數(shù)為10

Snake.ch = right;

//初始化食物

Food.flag = 0; //食物被吃掉

}

//輸出蛇

void SnakeDraw()

{

//Snake.n =15 i的初始值15 0-14

for (int i = Snake.n - 1; i >= 0; i--) //循環(huán)15

{

rectangle(Snake.sc[i].x, Snake.sc[i].y,

Snake.sc[i].x + 10, Snake.sc[i].y + 10);

}

}

//蛇移動的坐標(biāo)計(jì)算

void SnakeMove()

{

//讓前面一節(jié)蛇的坐標(biāo)賦值給后面一節(jié)蛇

for (int i = Snake.n-1 ; i > 0; i--) //n=6 4

{

Snake.sc[i].x = Snake.sc[i - 1].x;

Snake.sc[i].y = Snake.sc[i - 1].y;

}

//根據(jù)當(dāng)前方向來判斷蛇頭應(yīng)該怎么移動

switch (Snake.ch)

{

case right:

Snake.sc[0].x += 10;break;

case left:

Snake.sc[0].x -= 10;break;

case up:

Snake.sc[0].y -= 10;break;

case down://速度 單位時間內(nèi)的位移 單位時間內(nèi)獲取到的知識量。

Snake.sc[0].y += 10;break;

default:

break;

}

SnakeDraw();

}

void ChangeSnake()

{

int input; //定義鍵盤的輸入

input = getch(); //不行 getch()回車 getchar()顯示回文

switch (input)

{

case up:

if (Snake.ch != down)

{

Snake.ch = up;

}

break;

case down:

if (Snake.ch != up)

{

Snake.ch = down;

}

break;

case left:

if (Snake.ch != right)

{

Snake.ch = left;

}

break;

case right:

if (Snake.ch != left)

{

Snake.ch = right;

}

break;

}

}

//隨機(jī)得到食物的坐標(biāo)

void FoodCoor()

{

Food.fc.x = rand() % (640 / 10) * 10;

Food.fc.y = rand() % (480 / 10) * 10;

Food.flag = 1; //食物已經(jīng)出現(xiàn)

}

void DrawFood()

小編推薦一個學(xué)C語言/C++的學(xué)習(xí)裙【 二六三,六八八,二七六 】,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!

{

roundrect(Food.fc.x, Food.fc.y, Food.fc.x + 10, Food.fc.y + 10, 10, 10);

}

int FoodEat()

{

if (Snake.sc[0].x == Food.fc.x&&Snake.sc[0].y == Food.fc.y)

{

Snake.n++;

Food.flag = 0;

}

return Food.flag;

}

void BreakSnake()

{

//撞墻

if (Snake.sc[0].x<0 || Snake.sc[0].x>630 || Snake.sc[0].y<0 || Snake.sc[0].y>470)

{

closegraph();

exit(0);

}

//撞自己

for (int i = Snake.n - 1; i > 0; i--)

{

if (Snake.sc[0].x == Snake.sc[i].x&&Snake.sc[0].y == Snake.sc[i].y)

{

closegraph();

exit(0);

}

}

}

void change()

{

switch (Snake.ch)

{

case up:

if (Food.fc.x < Snake.sc[0].x&&Food.fc.y >= Snake.sc[0].y) //左下

Snake.ch = left;

else if (Food.fc.x > Snake.sc[0].x&&Food.fc.y >= Snake.sc[0].y) //左下

Snake.ch = right;

else if (Food.fc.x == Snake.sc[0].x&&Food.fc.y > Snake.sc[0].y)

{

int d;

d = rand() % 2;

if (d == 0)

Snake.ch = right;

else

Snake.ch = left;

}

break;

case down:

if (Food.fc.x < Snake.sc[0].x&&Food.fc.y <= Snake.sc[0].y) //左上

Snake.ch = left;

else if (Food.fc.x > Snake.sc[0].x&&Food.fc.y <= Snake.sc[0].y) //右上

Snake.ch = right;

else if (Food.fc.x == Snake.sc[0].x&&Food.fc.y < Snake.sc[0].y) //后面

{

int d;

d = rand() % 2;

if (d == 0)

Snake.ch = right;

else

Snake.ch = left;

}

break;

case left:

if (Food.fc.x >= Snake.sc[0].x&&Food.fc.y < Snake.sc[0].y) //右上

Snake.ch = up;

else if (Food.fc.x >= Snake.sc[0].x&&Food.fc.y>Snake.sc[0].y) //右下

Snake.ch = down;

else if (Food.fc.x > Snake.sc[0].x&&Food.fc.y == Snake.sc[0].y) //后面

{

//y ==0 down

//y==470 up

//其他情況 隨機(jī)

int d;

d = rand() % 2;

if (d == 0)

Snake.ch = up;

else

Snake.ch = down;

}

break;

case right:

if (Food.fc.x <= Snake.sc[0].x&&Food.fc.y < Snake.sc[0].y) //左上

Snake.ch = up;

else if (Food.fc.x <= Snake.sc[0].x&&Food.fc.y>Snake.sc[0].y) //左下

Snake.ch = down;

else if (Food.fc.x <= Snake.sc[0].x&&Food.fc.y == Snake.sc[0].y)

{

//y ==0 down

//y==470 up

//其他情況 隨機(jī)

int d;

d = rand() % 2;

if (d == 0)

Snake.ch = up;

else

Snake.ch = down;

}

break;

default:

break;

}

}

int main()

{

initgraph(640, 480);

srand((unsigned int)time(NULL));

//計(jì)算機(jī)很笨 速度快

//圖形 圖片 計(jì)算不認(rèn)識

//最擅長的事情就是處理數(shù)據(jù)

GameInit();

while (1)

{

while (!kbhit())

{

cleardevice();

if (Food.flag==0) //被吃掉

{

FoodCoor();

}

DrawFood();

SnakeMove();

FoodEat();

//BreakSnake();

change();

Sleep(100);

}

ChangeSnake();

}

getchar();

closegraph();

return 0;

}

程序運(yùn)行的效果圖發(fā)出來一下,就感覺很簡單的,效果不是很高大上

小編推薦一個學(xué)C語言/C++的學(xué)習(xí)裙【 二六三,六八八,二七六 】,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!

程序里面,蛇的注意點(diǎn)的話,1.用一個數(shù)組來存放蛇的信息(坐標(biāo))。2.用for循環(huán)時刻的繪制蛇。

3.移動 除蛇頭外,其他部位用for循環(huán)讓前一節(jié)蛇的坐標(biāo)賦值給后面一節(jié)蛇的坐標(biāo),只要改變蛇頭,后面的蛇會相應(yīng)的移動。4.通過按鍵,來改變蛇的方向。

涉及到的知識點(diǎn)也并不是很多的呢,1、C語言三大控制結(jié)構(gòu):順序結(jié)構(gòu),分支結(jié)構(gòu),循環(huán)結(jié)構(gòu) 2、C語言基本語法 3、自定義類型結(jié)構(gòu)體 4、圖形庫界面。

最后的話給剛剛學(xué)習(xí)C語言的同伴們,一些建議吧,怎么去學(xué),就給小小的意見,1.語法:要快 C語言 C++語言 3個月 2.學(xué)的過程當(dāng)中,怎樣去加強(qiáng)記憶。用嘛。連連看 推箱子 貪吃蛇 俄羅斯方塊全部寫一遍。 3.敢于區(qū)接觸新的東西。 4.非常重要 要知道你的學(xué)習(xí)的方向。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容