當前位置:
首頁 > 最新 > C語言編程學習打造—人工智慧版貪吃蛇小遊戲

C語言編程學習打造—人工智慧版貪吃蛇小遊戲

C語言是面向過程的,而C++是面向對象的

C和C++的區別:

C是一個結構化語言,它的重點在於演算法和數據結構。C程序的設計首要考慮的是如何通過一個過程,對輸入(或環境條件)進行運算處理得到輸出(或實現過程(事務)控制)。

C++,首要考慮的是如何構造一個對象模型,讓這個模型能夠契合與之對應的問題域,這樣就可以通過獲取對象的狀態信息得到輸出或實現過程(事務)控制。 所以C與C++的最大區別在於它們的用於解決問題的思想方法不一樣。之所以說C++比C更先進,是因為「 設計這個概念已經被融入到C++之中 」。

C與C++的最大區別:在於它們的用於解決問題的思想方法不一樣。之所以說C++比C更先進,是因為「 設計這個概念已經被融入到C++之中 」,而就語言本身而言,在C中更多的是演算法的概念。那麼是不是C就不重要了,錯!演算法是程序設計的基礎,好的設計如果沒有好的演算法,一樣不行。而且,「C加上好的設計」也能寫出非常好的東西。

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

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

*文件名稱:main.cpp

*文件描述:C語言實現圖形界面的貪吃蛇

*編譯環境:VS2013 && 圖形界面

*最後修改:

*

*

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

*2.剛開始學習,控制台應用程序。

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

#include

#include

#include

#include

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

#include

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

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

//結構體

//蛇的方向

typedef enum ch

{

up = 72,

down =80,

left =75,

right =77

}CH;

//坐標

typedef struct Coor

{

int x;

int y;

}COOR;

//蛇的身體

struct SNAKE

{

COOR sc[SNAKEMAX];//1000節蛇的坐標

int n;//當前的節數

CH ch;//蛇的方向

}Snake;

struct FOOD

{

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

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

}Food;

//對程序進行初始化 每一個程序都要有一個初始化的函數

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

//最開始蛇的坐標

Snake.sc[0].x = 0;

Snake.sc[0].y = 0;

Snake.n = 1; //蛇當前的節數為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--) //循環15

{

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

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

}

}

//蛇移動的坐標計算

void SnakeMove()

{

//讓前面一節蛇的坐標賦值給後面一節蛇

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;

}

//根據當前方向來判斷蛇頭應該怎麼移動

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://速度 單位時間內的位移 單位時間內獲取到的知識量。

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;

}

}

//隨機得到食物的坐標

void FoodCoor()

{

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

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

Food.flag = 1; //食物已經出現

}

void DrawFood()

{

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].x630 || Snake.sc[0].y470)

{

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].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.ch = left;

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

Snake.ch = right;

else if (Food.fc.x == Snake.sc[0].x&&Food.fc.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.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

//其他情況 隨機

int d;

d = rand() % 2;

if (d == 0)

Snake.ch = up;

else

Snake.ch = down;

}

break;

case right:

if (Food.fc.x

Snake.ch = up;

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

Snake.ch = down;

else if (Food.fc.x

{

//y ==0 down

//y==470 up

//其他情況 隨機

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));

//計算機很笨 速度快

//圖形 圖片 計算不認識

//最擅長的事情就是處理數據

GameInit();

while (1)

{

while (!kbhit())

{

cleardevice();

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

{

FoodCoor();

}

DrawFood();

SnakeMove();

FoodEat();

//BreakSnake();

change();

Sleep(100);

}

ChangeSnake();

}

getchar();

closegraph();

return 0;

}

程序運行的效果圖發出來一下,就感覺很簡單的,效果不是很高大上

程序裡面,蛇的注意點的話,1.用一個數組來存放蛇的信息(坐標)。2.用for循環時刻的繪製蛇。

3.移動 除蛇頭外,其他部位用for循環讓前一節蛇的坐標賦值給後面一節蛇的坐標,只要改變蛇頭,後面的蛇會相應的移動。4.通過按鍵,來改變蛇的方向。

涉及到的知識點也並不是很多的呢,1、C語言三大控制結構:順序結構,分支結構,循環結構 2、C語言基本語法 3、自定義類型結構體 4、圖形庫界面。

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


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!

TAG: |