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í)的方向。


