C語言編程字元貪吃蛇
C語言是面向過程的,而C++是面向對象的。C和C++的區別:
C是一個結構化語言,它的重點在於演算法和數據結構。C程序的設計首要考慮的是如何通過一個過程,對輸入(或環境條件)進行運算處理得到輸出(或實現過程(事務)控制)。
C++,首要考慮的是如何構造一個對象模型,讓這個模型能夠契合與之對應的問題域,這樣就可以通過獲取對象的狀態信息得到輸出或實現過程(事務)控制。 所以C與C++的最大區別在於它們的用於解決問題的思想方法不一樣。之所以說C++比C更先進,是因為「 設計這個概念已經被融入到C++之中 」。
C與C++的最大區別:在於它們的用於解決問題的思想方法不一樣。之所以說C++比C更先進,是因為「 設計這個概念已經被融入到C++之中 」,而就語言本身而言,在C中更多的是演算法的概念。那麼是不是C就不重要了,錯!演算法是程序設計的基礎,好的設計如果沒有好的演算法,一樣不行。而且,「C加上好的設計」也能寫出非常好的東西。
時代總是在進步
代碼如下:
#include
#include
#include
#include
#include
#define N 20
#define M 40
int foodx,foody;
int positionx,positiony;
int screen[N][M];
int i,j;
*rate=20;
srand((unsigned)time(NULL));
for(i=0;i
for(j=0;j
screen[i][j]=0;
}
}
//初始化
screen[0][0]=5;
screen[0][1]=4;
screen[0][2]=3;
screen[0][3]=2;
screen[0][5]=1;
foodx=10;
foody=10;
screen[foody][foodx]=-1;
positiony=0;
positionx=5;
*length=5;
*vx=0;
*vy=1;
*score=0;
} 小編推薦一個學C語言/C++的學習裙【 二六三,六八八,二七六 】,無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發工具,很多乾貨和技術資料分享!
void show(int* score,int* rate){
system("cls");
printf("wasd2ù×÷
");
for(i=-1;i
for(j=-1;j
if(i==-1||i==N)
putchar("-");
else if(j==-1||j==M)
putchar("|");
else if(screen[i][j]>0)
putchar("*");
else if(screen[i][j]==-1)
putchar("@");
else
putchar(" " );
}
putchar("
");
}
printf("分數%d
",*score);
Sleep(20*(*rate));
}
void updatewithoutinput(int* length,int* vx,int* vy,int* score,int* rate){
//配速
int rank=0;
rank=(*score>5)+(*score>10)+(*score>15)+(*score>20)+(*score>25);
*rate=20-rank;
//死亡
*score=-1;
*score=-1;
if(positiony==0&&*vy==-1)
*score=-1;
if(positiony==N-1&&*vy==1)
*score=-1;
*score=-1;
//移動
for(i=0;i
for(j=0;j
if(screen[i][j]>0)
screen[i][j]++;
}
}
for(i=0;i
for(j=0;j
if(screen[i][j]>*length)
screen[i][j]=0;
}
}
//前進
for(i=0;i
for(j=0;j
if(screen[i][j]==2){
positiony=i+*vy;
screen[positiony][positionx]=1;
}
}
}
for(i=0;i
for(j=0;j
(*length)++;
(*score)++;
foodx=rand()%M;
foody=rand()%N;
while(screen[foody][foodx]){
foodx=rand()%M;
foody=rand()%N;
}
screen[foody][foodx]=-1;
}
}
}
}
char input;
if(kbhit()){
input=getch();
*vx=-1;
*vy=0;
}
if(input=="d"&&positionx
*vx=1;
*vy=0;
}
if(input=="w"&&positiony>0&&(*vy)!=1){
*vx=0;
*vy=-1;
}
if(input=="s"&&positiony
*vx=0;
*vy=1;
}
if(input=="q")
system("pause");
}
}
int main(){
int length;
int score;
int rate;
while(1){
if(score==-1)
goto begin;
show(&score,&rate);
} 小編推薦一個學C語言/C++的學習裙【 二六三,六八八,二七六 】,無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發工具,很多乾貨和技術資料分享!
return 0;
}
貪吃蛇核心的演算法就是移動。其實所有遊戲都是這樣,演算法的難點都在更新這一步上。拿象棋來說,遊戲規則最關鍵的就是不同棋子的走法。
還是建立在坐標繫上,我們將蛇分為一節一節的,將頭編為1,蛇身為2,3,4......如果不去操控貪吃蛇,它就會一直向前,也就是有個不變的速度,我們只需保存這個速度,然後沒個循環去操作蛇前進。
最為核心的是操作方法。如果分解一下移動過程的話,當前的蛇(包括頭)在下一個循環就會變成蛇身,然後在前進方向加一個蛇頭,再把蛇尾去掉。根據分解動作,我們可以將蛇整體+1,就變成了2,3,4......,然後把最後的坐標清零,再將前進方向的坐標賦值為1。建立在移動演算法的基礎上蛇身伸長的就明了了,只需將上限+1即可。
演算法的思想很簡單,回想一下高中物理題,求一根繩子被拉著運動做了多少功。在計算時我們將物理過程等效為取繩子末端的一個個微元移動到前端,保持中間的不變,這樣就可以簡化計算。運用在貪吃蛇中,我們就只需將蛇尾移到蛇頭就行,分解一下就是去掉蛇尾,生成蛇頭就ok了。

