c語言貪吃蛇詳解-2.畫出蛇


c語言貪吃蛇詳解-2.畫出蛇

前幾天的實驗室培訓課后作業我布置了貪吃蛇,今天有時間就來寫一下題解。我將分幾步來教大家寫一個貪吃蛇小游戲。由於大家c語言未學完,這個教程只涉及數組和函數等知識點。

 

蛇的身體就是一些點,我們可以用二維數組把這些點的坐標存起來。

先聲明一個足夠大的二維數組。雖然我覺得你們玩不了這么長(手動滑稽)。

int s[H*W][2];

這樣s[0][0]表示蛇頭的i坐標,s[0][1]表示蛇頭的j坐標。s[i][0]表示蛇第i+1個點的i坐標。s[i][1]同理。

然后再聲明一個int變量存儲蛇的長度。然后把這些初始化操作都放進上面init函數里面。

int sLength;        //蛇的長度
sLength=4;          //讓蛇的最初長度為4

 然后給剛開始的蛇身幾個初始坐標

s[0][0]=H/2;
s[0][1]=W/2;      
for(i=1;i<4;i++)
{
  s[i][0]=s[0][0]+i;
  s[i][1]=s[0][1]; //給剛開始的蛇身幾個初始坐標
}

然后接下來我們把蛇畫出來,我這里有一個函數(百度的),可以實現移動光標到指定點。注:要添加頭文件windows.h

如下:

void gotoxy(int i,int j)
{
    COORD position={j,i}; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),position); }

然后就可以先畫地圖,然后通過移動光標在地圖上畫出蛇。

void drawSnake()
{
    int i; for(i=0;i<sLength;i++) { gotoxy(s[i][0],s[i][1]); //移動關標到蛇的坐標 printf("@"); //在這個位置畫蛇  } }

好,看看效果

 

蛇確實出來了,但是那個光標很礙事,在init函數開始時加入下面代碼可隱藏關標

CONSOLE_CURSOR_INFO cursor_info = {1, 0}; 
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);

 

 

這樣就沒有光標了。

到現在為止的代碼。

#include <stdio.h>
#include <stdlib.h> #include<windows.h> #define H 23 #define W 75 int a[H][W]; //地圖數組 int s[H*W][2]; //蛇身坐標數組 int sLength; //蛇的長度 void init() //程序開始時的初始化操作 { CONSOLE_CURSOR_INFO cursor_info = {1, 0}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info); //隱藏關標 int i,j; for(i=0; i<H; i++) { a[i][0]=1; //讓第一列為1 a[i][W-1]=1; //讓最后一列為1  } for(j=0; j<W; j++) { a[0][j]=1; //讓第一行為1 a[H-1][j]=1; //讓最后一行為1  } sLength=4; //讓蛇的最初長度為4 s[0][0]=H/2; s[0][1]=W/2; //給蛇頭坐標賦值 for(i=1;i<4;i++) { s[i][0]=s[0][0]+i; s[i][1]=s[0][1]; //給剛開始的蛇身幾個初始坐標  } } void gotoxy(int i,int j) //移動光標 { COORD position={j,i}; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),position); } void drawMap() //畫地圖 { int i,j; for(i=0;i<H;i++) { for(j=0;j<W;j++) //兩重for循環遍歷數組  { if(a[i][j]==0) //為0輸出空格 printf(" "); else //為1輸出# printf("#"); } printf("\n"); //別忘了換行  } } void drawSnake() //畫蛇 { int i; for(i=0;i<sLength;i++) { gotoxy(s[i][0],s[i][1]); //移動關標到蛇的坐標 printf("@"); //在這個位置畫蛇  } } int main() { init(); //程序開始時的初始化操作 drawMap(); //畫地圖 drawSnake(); //畫蛇  getchar(); return 0; }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM