用純C語言實現簡易貪喫蛇的小遊戲

如何用純C語言來實現貪喫蛇的小遊戲,個人思路如下:
1.首先,我們要先顯示一個遊戲界面,所以我一般想到用一個數組game[ROW][COL]來實現

   static char game[ROW][COL];
   方法:遍歷整個遊戲界面的座標,首先在初始化的函數中規定當下x,y滿足什麼條件時,game[ROW][COL]=?,
   然後在顯示函數中通過game[y][x]=?進行printf打印出來

2.然後,用一個結構體來定義蛇

typedf struct snake{
     int data;//1:蛇頭 2:蛇身 3:蛇尾
     int y,x;//蛇在遊戲區域的位置座標
     struct snake *next,*prev;
}Snake_t;

3.對於蛇要喫的食物,我將採取隨機出現的情況
  規定遊戲界面一直保持同時存在6個食物
int i; srand(getpid());//初始化隨機數種子 for(i=0;i<6;i++) {
while(1)
{ y=rand()%(ROW-2)+1; x=rand()%(COL-2)+1; if(game[y][x]==0) { game[y][x]=6; break; }
} }

4.我們還應該實現貪喫蛇它自動運動,所以我們要用到信號函數
//初始化信號
signal(SIGALRM,moveSnake);
struct itimerval new={0};//一定要初始化,否則爲垃圾值
new.it_value.tv_usec=500000;
new.it_interval.tv_usec=500000;
setitimer(ITIMER_REAL,&new,NULL);
//默認向下移動
dy=1;
dx=0;

5.同時我們也要通過按鍵來控制蛇的上、下、左、右和暫停
   對於方向的移動,我們只需定義一個在本文件使用的全局變量
static int dy,dx; case UP: if(dy==0) dy=-1.dx=0; moveSnake(SIGALRM); DOWN --dy=1.dx=0; LEFT --dy=0,dx=-1; RIGHT --dy=0,dx=1;

要實現貪喫蛇的移動暫停,自然少不了之前的定時器了
void stopSnake(void)
{
      struct itimerval zero={0},old;
      int key;
      setitimer(ITIMER_REAL,&zero,&old);
      while(1)
      {
           key=getInput();
           if(key==EXIT)
           {
              exit(0);
           }
           else if(key==STOP)  break;
           setimer(ITIMER_REAL,&old,NULL);
      }
}

6.當蛇喫到食物後,蛇的身體如何增長,我用到了雙向鏈表(採取尾部追加的方式)

  

Snake_t  *new,*tail=head.prev->prev;
new=malloc(sizeof(Snake_t));
if(new!=NULL)
{
    new->dat=2;
    new->y=tail->prev->y;
    new->x=tail->prev->x;
    new->next=tail;
    new->prev=tail->prev;
    new->next->prev=new;
    new->prev->next=new;
}

蛇總是後面的部分跟隨前面部分的移動軌跡,所以我們還需要把前面的座標賦值給後面的(i->y=i->prev->y),
我們定義game[y][x]=0 ,打印空白,所以尾後給個0節點 用於移動時清除(new->data=0)。
7.判斷遊戲結束的條件:

   a.當蛇碰到邊界時
if(first->y<=0||first->x<=0||first->y>=(ROW-1)||first->x>=(COL-1))
{
     printf("Game Over");
     exit(0);
}

    b.當蛇喫到自己了
for(i=head.prev->prev;i!=first;i=i->prev) { if(first->y==i->y&& first->x==i->x) { printf("Game Over"); exit(0); } }

  8.遊戲改進

  <1>可以增加分數的累計,當分數達到多少就升級,用一個數組把10個升級速度
    先保存好,再調用
     也可以通過文件操作的方式(fopen...),進行遊戲存檔與調用。
 <2>可利用SDL庫,給遊戲增加音效和華麗界面。
 <3>我們可以實現雙人對戰的貪喫蛇遊戲,在規定時間內,誰的蛇身最長爲勝利者
 <4>在QT上面進行改進,實現多人同一局域網上共同遊戲,可以一直玩,兩蛇相撞恢復初始蛇身,
        繼續遊戲,通過增加積分,來定義玩家等級。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章