學習貪喫蛇

針對貪喫蛇,小白表示莫大的困難,一時由基礎突然躍向自己去寫一個遊戲,還是十萬個不情願的,然而作業的壓力使我不得不進行一系列的嘗試。
衆所周知,可能大家眼中的貪喫蛇是這樣的:
這裏寫圖片描述

不不不,小白還是做不出如此絢麗的貪喫蛇。
實際而是這條:
這裏寫圖片描述

首先展示老師的僞代碼程序總體結構:

輸出字符矩陣
    WHILE not 遊戲結束 DO
        ch=等待輸入
        CASE ch DO
        ‘A’:左前進一步,break 
        ‘D’:右前進一步,break    
        ‘W’:上前進一步,break    
        ‘S’:下前進一步,break    
        END CASE
        輸出字符矩陣
    END WHILE
    輸出 Game Over!!! 

下面是其中的一些函數:

# include <stdio.h>
# include <string.h>
# include <windows.h>
# include <stdlib.h>
# include <conio.h>
# include <time.h>
# include <math.h>

# define de_lenth 5//蛇初始長度
# define ROW_MAX 12//地圖行
# define LINE_MAX 12//地圖列

int ROW = ROW_MAX;
int LINE = LINE_MAX;
int Head_x = ROW_MAX/2, Head_y = LINE_MAX/2;//蛇的初始座標
int Head_v = 5;//判斷是否爲頭
int Tail_x = 0, Tail_y = 0;//蛇尾座標
int count = 0;//計數
char direct = 'a';//蛇移動的方向
int times = 1;

void SetUp(void);
void CreateMap(char map[ROW_MAX][LINE_MAX]);//創建地圖
void CreateSnake(int snkae[ROW_MAX][LINE_MAX]);//構造蛇的初始位置
void CreateFood(char map[ROW_MAX][LINE_MAX], int snake[ROW_MAX][LINE_MAX]);//產生隨機食物
void TraverseMap(char map[ROW_MAX][LINE_MAX], int snake[ROW_MAX][LINE_MAX]);//輸出地圖以及蛇的全部
int JudgeWall(void);//判斷蛇是否撞牆
void MoveTail(int snake[ROW_MAX][LINE_MAX]);//蛇尾部的移動
int EatFood(char map[ROW_MAX][LINE_MAX]);//蛇喫到食物的操作
void run(char map[ROW_MAX][LINE_MAX], int snake[ROW_MAX][LINE_MAX]);//蛇的移動
void gotoxy(int x, int y);//將光標定位到某一位置, 用於顯示結果, 以及暫停是使用
void Result(void);//顯示結果
void dely(void);

對於小白來說,初級版貪喫蛇最重要的應該是關於蛇的移動了,這裏展示一下蛇的移動代碼(W/A/S/D):
 switch (direct){

                case 'w':
                    if(snake[Head_x-1][Head_y] != 0)
                        return;

                    snake[Head_x-1][Head_y] = ++Head_v;
                    Head_x--;
                    if(EatFood(map))
                        MoveTail(snake);
                    else
                        CreateFood(map, snake);
                    break;
                case 'a':
                    if(snake[Head_x][Head_y-1] != 0)
                        return;

                    snake[Head_x][Head_y-1] = ++Head_v;
                    Head_y--;
                    if(EatFood(map))
                        MoveTail(snake);
                    else
                        CreateFood(map, snake);
                    break;
                case 's':
                    if(snake[Head_x+1][Head_y] != 0)
                        return;

                    snake[Head_x+1][Head_y] = ++Head_v;
                    Head_x++;
                    if(EatFood(map))
                        MoveTail(snake);
                    else
                        CreateFood(map, snake);
                    break;
                case 'd':
                    if(snake[Head_x][Head_y+1] != 0)
                        return;

                    snake[Head_x][Head_y+1] = ++Head_v;
                    Head_y++;
                    if(EatFood(map))
                        MoveTail(snake);
                    else
                        CreateFood(map, snake);
                    break;
            }
            system("cls");
            TraverseMap(map, snake);
        }
        else
            return;
        dely();
    }
}
大概的就是這些,當然現在我的貪喫蛇中還存在一些bug,我知道給我更多的時間一定會解決。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章