C語言遊戲之貪吃蛇 鍊錶實現

2021-07-29 19:36:52 字數 4167 閱讀 1566

早自習時突然想到怎麼寫貪吃蛇,話不多說,**如下:

開發環境:vs2015

雖然開始還是出了很多指標問題。。。(很煩c語言指標)除錯了很久也大概是可以暢快的玩了。

c語言新手,有很多寫得不好的地方望大神提出

當然,我也不介意把我**拿去學習(這樣就說明我的**有學習價值

標頭檔案:snake.h

/**

*by liu yuchuan

*2017.3.30

*/#ifndef snake_h_included

#define snake_h_included

#include//遊戲中各種符號

#define choose_logo "->"

#define snake_node '*'

#define wall '#'

#define food '$'

//地圖大小

#define mapwidth 50

#define mapheight 25

//蛇狀態

#define live 1

#define dead 0

//移動方向

enum direction;

typedef enum direction direction;

struct node;

typedef struct node node;

typedef node* snakehead;

typedef node* ptrtonode;

//蛇的鍊錶節點

struct node;

//蛇的結構體

typedef struct snake *snake;

//食物的結構體

typedef struct food *food;

//移動鍵

char key_down = 's';

char key_up = 'w';

char key_right = 'd';

char key_left = 'a';

//移動間隔時間

int movetime = 100;

//得分

int score = 0;

food food = null;

snake snake = null;

void menu();

void pos(int x, int y);

void startgame();

void initmap();

snake initsnake(snake snake);

void printsnake(snake snake);

void clearsnake(snake snake);

void move(snake snake);

snake getlonger(snake snake);

void createfood();

int islocationok(int x, int y);

#endif // snake_h_included

原始碼:snake.c

#include"snake.h"

#include#include#include#includeint main()

void menu()

} //上移

else if(ch == key_up)

} else if(ch == 13)

} }}//定位游標

void pos(int x, int y)

void startgame()

else if (snake->dir != down && ch == key_up)

else if (snake->dir != left && ch == key_right)

else if (snake->dir != right && ch == key_left)

} move(snake);

} pos(mapwidth + 2, mapheight / 2 - 1);

printf(" ");

pos(mapwidth + 2, mapheight / 2);

printf(" ");

pos(mapwidth + 2, mapheight / 2 + 1);

printf(" ");

pos(mapwidth + 2, mapheight / 2 + 2);

printf(" ");

pos(mapwidth + 2, mapheight / 2 - 1);

printf("遊戲結束");

pos(mapwidth + 2, mapheight / 2);

printf("最終長度: %d", snake->lenth);

pos(mapwidth + 2, mapheight / 2 + 1);

printf("您的得分: %d", score);

pos(mapwidth + 2, mapheight / 2 + 2);

printf("enter鍵返回主選單");

while(ch != 13)

ch = _getch();

system("cls");

}void initmap()

} }pos(mapwidth + 2, mapheight/2 - 1);

printf("當前長度(越長吃一次食物得分越高哦):");

pos(mapwidth + 2, mapheight/2);

printf("%d", snake->lenth);

pos(mapwidth + 2, mapheight / 2 + 1);

printf("當前得分:");

pos(mapwidth + 2, mapheight / 2+2);

printf("%d", score);

}snake initsnake(snake snake)

void printsnake(snake snake)

}void clearsnake(snake snake)

}void move(snake snake)

clearsnake(snake);

snakehead head = snake->snakehead;

int x = head->x;

int y = head->y;

int tmpx, tmpy;

switch (snake->dir)

while (head->next)

if (snake->snakehead->x == food->x

&& snake->snakehead->y == food->y && snake->state)

printsnake(snake);

sleep(movetime);

}snake getlonger(snake snake)

int x1 = position->x;

int y1 = position->y;

position = position->next;

int x2 = position->x;

int y2 = position->y;

position->next = (ptrtonode)malloc(sizeof(node));

position->next->next = null;

if (x1 == x2)

else

snake->lenth++;

return snake;

}//生成食物

void createfood()

} }}//判斷位置是否合理

int islocationok(int x, int y)

} return x > 0 && x < mapwidth - 1

&& y > 0 && y < mapheight - 1;

}

C語言貪吃蛇實現 鍊錶學習

以下 片段就是整個源 主要是github上大佬寫的,附上位址 我又在這基礎上優化了點,釋放漏釋放的記憶體,禁止蛇反向運動 include include include include include include define src width 70 define src height 20 ...

C語言 貪吃蛇遊戲

相信每個人都接觸過貪吃蛇遊戲,而對於學習c語言的同學來說,一開始是不是覺得c語言寫不出什麼東西來呢?那麼,貪吃蛇應該是第一步,開始了解一些模組化的知識,一些物件導向的思想,一些小專案的編寫。效果 通過 wasd 移動蛇,蛇能夠吃隨機產生的食物,並且變長。基本實現 用兩個陣列snakex,snakey...

C語言 貪吃蛇遊戲

該遊戲不依賴tc環境,任何第三方庫,可以在vc 6.0 vs c free等常見ide中編譯通過。設計貪吃蛇遊戲的主要目的是讓大家夯實c語言基礎,訓練程式設計思維,培養解決問題的思路,領略多姿多彩的c語言。遊戲開始後,會在中間位置出現一條只有三個節點的貪吃蛇,並隨機出現乙個食物,如下圖所示 圖1 遊...