日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言小游戏 精简_一个简易的贪吃蛇小游戏C语言源码

發布時間:2023/12/3 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言小游戏 精简_一个简易的贪吃蛇小游戏C语言源码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

/*

*程序名稱:貪吃蛇v2.1

*程序描述:一個簡易的貪吃蛇小游戲

*版本信息:v2.1

*v1.1版本更新:1:加入菜單選擇項

*v1.2版本更新:1:修復菜單選擇bug

*v1.3班本更新:1:加入難度選擇項

*? ?? ?? ?? ? 2:增加鍵盤采集頻率,大大增加操作靈敏度

*? ?? ?? ?? ? 3:優化屏幕刷新頻率,平衡刺眼的情況

*v2.0版本更新:1:使用新的數據存儲結構

*? ?? ?? ?? ? 2:使用全新的蛇的形狀,更加美觀

*? ?? ?? ?? ? 3:解決了1.X版本地圖長寬不等距的問題

*v2.1版本更新:1:修復蛇行進過程中快速切換方向至死亡的bug

*? ?? ?? ?? ? 2:屏幕刷新改為蛇每前進一次刷新一次,閃屏更柔和

*? ?? ?? ?? ? 3:更新退出后版本信息的輸出

*/

#include

#include

#include

#include

#include

#include

int i;

#define N 25

#define M 22

//結構體名的宏定義

#define STRU_B struct board

//結構體元素part的值定義

#define bBORDER "◆"

#define sHEAD "■"

#define sBODY "◆"

#define sTAIL "◇"

#define bNONE "??"

#define bFOOD "☆"

//結構體元素drection的值定義

#define UP 24

#define DOWN 25

#define RIGHT 26

#define LEFT 27

struct board{

char drection;

char part[4];

};

void print_first(void);

int degree_difficulty(void);

void start(int diff);

void initialise_board(STRU_B(*p)[N]);

void creat_sanke(STRU_B(*p)[N]);

void show_board(STRU_B(*p)[N]);

int move_snake(STRU_B(*p)[N], char drection);

void delete_tail(STRU_B(*p)[N]);

void lose(STRU_B(*p)[N]);

void add_food(STRU_B(*p)[N]);

void print_last();

int main(void)

{

print_first();

do

{

start(degree_difficulty());

printf("1:再來一局\n2:退出\n請選擇:");

fflush(stdin);

scanf("%d", &i);

} while (i == 1);

print_last();

return 0;

}

void print_first(void)

{

printf("*************歡迎來到貪吃蛇*************\n\n");

printf("使用鍵盤上、下、左、右鍵控制方向\n\n\n");

}

int degree_difficulty(void)

{

int diff;

do

{

printf("\n請選擇難度:(1——3):");

scanf("%d", &diff);

switch (diff)

{

case 1:diff = 10; break;

case 2:diff = 6; break;

case 3:diff = 2; break;

default:

break;

}

if (2 <= diff && diff <= 10)

return diff;

printf("\n請輸入正確的編號選擇難度:(1——3):");

} while (1);

}

void start(int diff)

{

STRU_B board[M][N];

char drection = RIGHT;

int isn_lose = 1, i, dc;

initialise_board(board);

creat_sanke(board);

while (isn_lose)

{

dc = 0;

system("CLS");

show_board(board);

for (i = 0; i < diff; i++)

{

if (GetKeyState(VK_UP) < 0 && drection != DOWN && dc == 0) drection = UP, dc++;

if (GetKeyState(VK_DOWN) < 0 && drection != UP && dc == 0) drection = DOWN, dc++;

if (GetKeyState(VK_LEFT) < 0 && drection != RIGHT && dc == 0) drection = LEFT, dc++;

if (GetKeyState(VK_RIGHT) < 0 && drection != LEFT && dc == 0) drection = RIGHT, dc++;

Sleep(10);

}

isn_lose = move_snake(board, drection);

}

system("CLS");

show_board(board);

}

void initialise_board(STRU_B(*p)[N])

{

int i, j;

for (j = 0; j < N; j++)

strcpy(p[0][j].part , bBORDER);

for (i = 1; i < M - 1; i++)

for (j = 0; j < N; j++)

if (j == 0 || j == (N - 1))

strcpy(p[i][j].part , bBORDER);

else

strcpy(p[i][j].part , bNONE);

for (j = 0; j < N; j++)

strcpy(p[M - 1][j].part , bBORDER);

}

void creat_sanke(STRU_B(*p)[N])

{

p[M / 2][N / 2].drection = RIGHT;

strcpy(p[M / 2][N / 2].part , sHEAD);

p[M / 2][N / 2 - 1].drection = RIGHT;

strcpy(p[M / 2][N / 2 - 1].part , sBODY);

p[M / 2][N / 2 - 2].drection = RIGHT;

strcpy(p[M / 2][N / 2 - 2].part , sTAIL);

add_food(p);

}

void show_board(STRU_B(*p)[N])

{

int i, j;

for (i = 0; i < M; i++)

{

for (j = 0; j < N; j++)

printf("%s", p[i][j].part);

printf("\n");

}

}

int move_snake(STRU_B(*p)[N], char drection)

{

int i, j, NH = 0;

for (i = 0; i < M; i++)

for (j = 0; j < N; j++)

{

if (strcmp(p[i][j].part, bNONE) == 0 || strcmp(p[i][j].part, sBODY) == 0);

else if (strcmp(p[i][j].part , sHEAD) == 0 && NH == 0)

{

p[i][j].drection = drection;

switch (drection)

{

case UP:if (strcmp(p[i - 1][j].part , bBORDER) == 0) { lose(p); return 0; }

if (strcmp(p[i - 1][j].part , bFOOD) == 0) add_food(p);

else delete_tail(p);

p[i - 1][j] = p[i][j];

break;

case DOWN:if (strcmp(p[i + 1][j].part, bBORDER) == 0) { lose(p); return 0; }

if (strcmp(p[i + 1][j].part, bFOOD) == 0) add_food(p);

else delete_tail(p);

p[i + 1][j] = p[i][j];

break;

case LEFT:if (strcmp(p[i][j - 1].part, bBORDER) == 0) { lose(p); return 0; }

if (strcmp(p[i][j - 1].part, bFOOD) == 0) add_food(p);

else delete_tail(p);

p[i][j - 1] = p[i][j];

break;

case RIGHT:if (strcmp(p[i][j + 1].part, bBORDER) == 0) { lose(p); return 0; }

if (strcmp(p[i][j + 1].part, bFOOD) == 0) add_food(p);

else delete_tail(p);

p[i][j + 1] = p[i][j];

break;

}

strcpy(p[i][j].part, sBODY);

NH++;

}

}

return 1;

}

void delete_tail(STRU_B(*p)[N])

{

int i, j, NT = 0;

for (i = 0; i < M; i++)

for (j = 0; j < N; j++)

if (strcmp(p[i][j].part, sTAIL) == 0 && NT == 0)

{

switch (p[i][j].drection)

{

case UP:strcpy(p[i - 1][j].part, p[i][j].part), strcpy(p[i][j].part, bNONE);

break;

case DOWN:strcpy(p[i + 1][j].part, p[i][j].part), strcpy(p[i][j].part, bNONE);

break;

case LEFT:strcpy(p[i][j - 1].part, p[i][j].part), strcpy(p[i][j].part, bNONE);

break;

case RIGHT:strcpy(p[i][j + 1].part, p[i][j].part), strcpy(p[i][j].part, bNONE);

break;

}

NT++;

}

}

void lose(STRU_B(*p)[N])

{

strcpy(p[M / 2][N / 3].part, "Yo");

strcpy(p[M / 2][N / 3 + 1].part, "u ");

strcpy(p[M / 2][N / 3 + 2].part, "lo");

strcpy(p[M / 2][N / 3 + 3].part, "se");

strcpy(p[M / 2][N / 3 + 4].part, "! ");

}

void add_food(STRU_B(*p)[N])

{

int x, y;

srand(time(0));

x = (rand() % N - 2) + 1;

y = (rand() % M - 2) + 1;

while (strcmp(p[y][x].part, bNONE) != 0)

{

x = (rand() % N - 2) + 1;

y = (rand() % M - 2) + 1;

}

strcpy(p[y][x].part, bFOOD);

}

void print_last()

{

system("CLS");

printf("\n\n\n********************************************************\n");

printf("*? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?*\n");

printf("*? ?? ?? ?? ?? ?? ?? ? 貪吃蛇v2.1? ?? ?? ?? ?? ?? ?? ? *\n");

printf("*? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?*\n");

printf("********************************************************\n");

Sleep(1000);

}

總結

以上是生活随笔為你收集整理的c语言小游戏 精简_一个简易的贪吃蛇小游戏C语言源码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。