欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:c語言 開發(fā)語言 C--貪吃蛇

柚子快報邀請碼778899分享:c語言 開發(fā)語言 C--貪吃蛇

http://yzkb.51969.com/

目錄

前言

簡單的準備工作

蛇的節(jié)點

開始前?void GameStart(pSnake ps)

void WelcomeToGame()

void CreateMap()

? void InitSnake(pSnake ps)

?void CreateFood(pSnake ps)

游戲進行 void GameRun(pSnake ps)

? int NextIsFood(pSnakeNode psn, pSnake ps)

?void NoFood(pSnakeNode psn, pSnake ps)

void SnakeMove(pSnake ps)

游戲結(jié)束 void GameEnd(pSnake ps)

源碼

test.c

snake.h

snake.cpp

總結(jié)

前言

貪吃蛇游戲是一個耳熟能詳?shù)男∮螒?本次我們講解他的簡單的實現(xiàn),需要掌握基本的API知識(http://t.csdnimg.cn/uHH6y),簡單的C語言知識和基本的數(shù)據(jù)結(jié)構(gòu)鏈表

簡單的準備工作

效果展示

屏幕錄制 2024-05-16 092902

蛇的節(jié)點

在游戲運?的過程中,蛇每次吃?個?物,蛇的?體就會變??節(jié),如果我們使?鏈表存儲蛇的信 息,那么蛇的每?節(jié)其實就是鏈表的每個節(jié)點。每個節(jié)點只要記錄好蛇?節(jié)點在地圖上的坐標就?, 所以蛇節(jié)點結(jié)構(gòu)如下:

typedef struct SnakeNode

{

int x;

int y;

struct SnakeNode* next;

}SnakeNode, * pSnakeNode;

但是這樣不好維護這一條蛇,要管理整條貪吃蛇,我們再封裝?個Snake的結(jié)構(gòu)來維護整條貪吃蛇

typedef struct Snake

{

pSnakeNode _pSnake;維護整條蛇的指針

pSnakeNode _pFood;維護?物的指針

enum DIRECTION _Dir;頭的?向默認是向右

enum GAME_STATUS _Status;游戲狀態(tài)

int _Socre;當(dāng)前獲得分數(shù)

int _Add;默認每個?物10分

int _SleepTime;每??步休眠時間

}Snake, * pSnake;

開始前?void GameStart(pSnake ps)

游戲開始,先打印蛇的身體和地圖,以及一些幫助的提示語句,先完成一些準備工作

void GameStart(pSnake ps)

{

設(shè)置控制臺窗?的??,30?,100列

//mode 為DOS命令

system("mode con cols=100 lines=30");

//設(shè)置cmd窗?名稱

system("title 貪吃蛇");

//獲取標準輸出的句柄(?來標識不同設(shè)備的數(shù)值)

HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE); //影藏光標操作

CONSOLE_CURSOR_INFO CursorInfo; //打印歡迎界?

WelcomeToGame(); //打印地圖

CreateMap(); //初始化蛇

GetConsoleCursorInfo(hOutput, &CursorInfo);//獲取控制臺光標信息

CursorInfo.bVisible = false; //隱藏控制臺光標

SetConsoleCursorInfo(hOutput, &CursorInfo);//設(shè)置控制臺光標狀態(tài)

InitSnake(ps);

//創(chuàng)造第?個?物

CreateFood(ps);

}

void WelcomeToGame()

在游戲正式開始之前,做?些功能提醒,來讓玩家了解游戲方法與規(guī)則,其中SetPos是一個已經(jīng)封裝后的函數(shù),可以把這個字體打在這個坐標

void WelcomeToGame()

{

SetPos(40, 15);

printf("歡迎來到貪吃蛇?游戲");

SetPos(40, 25);//讓按任意鍵繼續(xù)的出現(xiàn)的位置好看點

system("pause");

system("cls");

SetPos(25, 12);

printf("? ↑ . ↓ . ← . → 分別控制蛇的移動, F3為加速,F(xiàn)4為減速\n");

SetPos(25, 13);

printf("加速將能得到更?的分數(shù)。\n");

SetPos(40, 25);//讓按任意鍵繼續(xù)的出現(xiàn)的位置好看點

system("pause");

system("cls");

}

void CreateMap()

創(chuàng)建地圖就是將強打印出來,因為是寬字符打印,所有使?wprintf函數(shù),打印格式串前使?L 打印地圖的關(guān)鍵是要算好坐標,才能在想要的位置打印墻體。

void CreateMap()

{

int i = 0;

//上(0,0)-(56, 0)

SetPos(0, 0);

for (i = 0; i < 58; i += 2)

{

wprintf(L"%c", WALL);

} //下(0,26)-(56, 26)

SetPos(0, 26); for (i = 0; i < 58; i += 2)

{ wprintf(L"%c", WALL);

} //左//x是0,y從1開始增?

for (i = 1; i < 26; i++)

{

SetPos(0, i);

wprintf(L"%c", WALL);} //是56y從1開始增?

for (i = 1; i < 26; i++)

{

SetPos(56, i);

wprintf(L"%c", WALL);

}

}

? void InitSnake(pSnake ps)

蛇最開始?度為5節(jié),每節(jié)對應(yīng)鏈表的?個節(jié)點,蛇?的每?個節(jié)點都有??的坐標。 創(chuàng)建5個節(jié)點,然后將每個節(jié)點存放在鏈表中進?管理。創(chuàng)建完蛇?后,將蛇的每?節(jié)打印在屏幕上。?再設(shè)置當(dāng)前游戲的狀態(tài),蛇移動的速度,默認的?向,初始成績,蛇的狀態(tài),每個?物的分數(shù)。

void InitSnake(pSnake ps)

{

pSnakeNode cur = NULL;

int i = 0;

//創(chuàng)建蛇?節(jié)點,并初始化坐標

//頭插法

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

{

//創(chuàng)建蛇?的節(jié)點

cur = (pSnakeNode)malloc(sizeof(SnakeNode));

if (cur == NULL)

{

perror("InitSnake()::malloc()");

return;

}

//設(shè)置坐標

cur->next = NULL;

cur->x = POS_X + i * 2;

cur->y = POS_Y;

//頭插法

if (ps->_pSnake == NULL)

{

ps->_pSnake = cur;

}

else

{

cur->next = ps->_pSnake;

ps->_pSnake = cur;

}

}

//打印蛇的?體

cur = ps->_pSnake;

while (cur)

{

SetPos(cur->x, cur->y);

wprintf(L"%c", BODY);

cur = cur->next;

}

//

初始化貪吃蛇數(shù)據(jù)

ps->_SleepTime = 200;

ps->_Socre = 0;

ps->_Status = OK;

ps->_Dir = RIGHT;

ps->_Add = 10;

}

?void CreateFood(pSnake ps)

先隨機?成?物的坐標 ?

x坐標必須是2的倍數(shù) ??物的坐標不能和蛇?每個節(jié)點的坐標重復(fù)?創(chuàng)建?物節(jié)點,打印?物

void CreateFood(pSnake ps)

{

int x = 0;

int y = 0;

again:

//產(chǎn)?的x坐標應(yīng)該是2倍數(shù),這樣才可能和蛇頭坐標對?。

do

{

x = rand() % 53 + 2;

y = rand() % 25 + 1;

} while (x % 2 != 0);

pSnakeNode cur = ps->_pSnake;//獲取指向蛇頭的指針

//?物不能和蛇?沖突

while (cur)

{

if (cur->x == x && cur->y == y)

{

goto again;

}

cur = cur->next;

}

pSnakeNode pFood = (pSnakeNode)malloc(sizeof(SnakeNode)); //創(chuàng)建?物

if (pFood == NULL)

{

perror("CreateFood::malloc()");

return;

}

else

{

pFood->x = x;

pFood->y = y;

SetPos(pFood->x, pFood->y);

wprintf(L"%c", FOOD);

ps->_pFood = pFood;

}

}

游戲進行 void GameRun(pSnake ps)

游戲運?期間,右側(cè)打印幫助信息,提?玩家 根據(jù)游戲狀態(tài)檢查游戲是否繼續(xù),如果是狀態(tài)是OK,游戲繼續(xù),否則游戲結(jié)束。 如果游戲繼續(xù),就是檢測按鍵情況,確定蛇下?步的?向,或者是否加速減速,是否暫?;蛘咄顺鲇?戲。 確定了蛇的?向和速度,蛇就可以移動了。

void GameRun(pSnake ps)

{

//打印右側(cè)幫助信息

PrintHelpInfo();

do

{

SetPos(64, 10); printf("得分:%d ", ps->_Socre);

printf("每個?物得分:%d分", ps->_Add);

if (KEY_PRESS(VK_UP) && ps->_Dir != DOWN)

{

ps->_Dir = UP;

}

else if (KEY_PRESS(VK_DOWN) && ps->_Dir != UP)

{

ps->_Dir = DOWN;

}

else if (KEY_PRESS(VK_LEFT) && ps->_Dir != RIGHT)

{

ps->_Dir = LEFT;

}

else if (KEY_PRESS(VK_RIGHT) && ps->_Dir != LEFT)

{

ps->_Dir = RIGHT;

}

else if (KEY_PRESS(VK_SPACE))

{

pause();

}

else if (KEY_PRESS(VK_ESCAPE))

{

ps->_Status = END_NOMAL;

break;

}

else if (KEY_PRESS(VK_F3))

{

if (ps->_SleepTime >= 50)

{

ps->_SleepTime -= 30;

ps->_Add += 2;

}

}

else if (KEY_PRESS(VK_F4))

{

if (ps->_SleepTime < 350)

{

ps->_SleepTime += 30;

ps->_Add -= 2;

if (ps->_SleepTime == 350)

{

ps->_Add = 1;

}

}

}

//蛇每次?定之間要休眠的時間,時間短,蛇移動速度就快

Sleep(ps->_SleepTime);

SnakeMove(ps);

} while (ps->_Status == OK);

}

? int NextIsFood(pSnakeNode psn, pSnake ps)

是一個判斷下一個位置是食物的函數(shù),會在下面SnakeMove起到作用,是食物的話將吃掉,不是的話將繼續(xù)按按鍵運動

int NextIsFood(pSnakeNode psn, pSnake ps)

{

return (psn->x == ps->_pFood->x) && (psn->y == ps->_pFood->y);

}

?void NoFood(pSnakeNode psn, pSnake ps)

將下?個節(jié)點頭插?蛇的?體,并將之前蛇?最后?個節(jié)點打印為空格,放棄掉蛇?的最后?個節(jié)點,在時間是毫米的瞬間完成,造成移動的效果

void NoFood(pSnakeNode psn, pSnake ps)

{

//頭插法

psn->next = ps->_pSnake;

ps->_pSnake = psn;

pSnakeNode cur = ps->_pSnake;

//打印蛇

while (cur->next->next)

{

SetPos(cur->x, cur->y);

wprintf(L"%c", BODY);

}

//最后?個位置打印空格,然后釋放節(jié)點

SetPos(cur->next->x, cur->next->y);

printf(" ");

free(cur->next);

cur->next = NULL;

}

void SnakeMove(pSnake ps)

蛇?移動先創(chuàng)建下?個節(jié)點,根據(jù)移動?向和蛇頭的坐標,蛇移動到下?個位置的坐標。 確定了下?個位置后,看下?個位置是否是?物(NextIsFood),是?物就做吃?物處理 (EatFood),如果不是?物則做前進?步的處理(NoFood)。 蛇?移動后,判斷此次移動是否會造成撞墻(KillByWall)或者撞上??蛇?(KillBySelf),從?影 響游戲的狀態(tài)

void SnakeMove(pSnake ps)

{

//創(chuàng)建下?個節(jié)點

pSnakeNode pNextNode = (pSnakeNode)malloc(sizeof(SnakeNode));

if (pNextNode == NULL)

{

perror("SnakeMove()::malloc()");

return;

} //確定下?個節(jié)點的坐標,下?個節(jié)點的坐標根據(jù),蛇頭的坐標和?向確定

switch (ps->_Dir)

{

case UP:

{

pNextNode->x = ps->_pSnake->x;

pNextNode->y = ps->_pSnake->y - 1;

}

break;

case DOWN:

{

pNextNode->x = ps->_pSnake->x;

pNextNode->y = ps->_pSnake->y + 1;

}

break;

case LEFT:

{

pNextNode->x = ps->_pSnake->x - 2;

pNextNode->y = ps->_pSnake->y;

}

break;

case RIGHT:

{

pNextNode->x = ps->_pSnake->x + 2;

pNextNode->y = ps->_pSnake->y;

}

break;

}

//如果下?個位置就是?物

if (NextIsFood(pNextNode, ps))

{

EatFood(pNextNode, ps);

}

else//如果沒有?物

{

NoFood(pNextNode, ps);

}

KillByWall(ps);

KillBySelf(ps);

}

游戲結(jié)束 void GameEnd(pSnake ps)

游戲結(jié)束 游戲狀態(tài)不再是OK(游戲繼續(xù))的時候,要告知游戲技術(shù)的原因,并且釋放蛇?節(jié)點。

void GameEnd(pSnake ps)

{

pSnakeNode cur = ps->_pSnake;

SetPos(24, 12);

switch (ps->_Status)

{

case END_NOMAL:

printf("您主動退出游戲\n");

break;

case KILL_BY_SELF: printf("您撞上??了 ,游戲結(jié)束!\n");

break;

case KILL_BY_WALL:

printf("您撞墻了,游戲結(jié)束!\n"); } //釋放蛇?的節(jié)點

while (cur)

{

pSnakeNode del = cur;

cur = cur->next;

free(del);

}

}

源碼

test.c

#include "Snake.h"

#include

void test()

{

int ch = 0;

srand((unsigned int)time(NULL));

do

{

Snake snake = { 0 };

GameStart(&snake);

GameRun(&snake);

GameEnd(&snake);

SetPos(20, 15);

printf("再來?局嗎?(Y/N):");

ch = getchar();

getchar();//清理\n } while (ch == 'Y');

SetPos(0, 27);

}

int main()

{

//修改當(dāng)前地區(qū)為本地模式,為了?持中?寬字符的打印

setlocale(LC_ALL, "");

test();

return 0;

}

snake.h

#pragma once

#include

#include

#include

#define KEY_PRESS(VK) ((GetAsyncKeyState(VK)&0x1) ? 1 : 0)

//?向

enum DIRECTION

{

UP = 1,

DOWN,

LEFT,

RIGHT

};

//游戲狀態(tài)

enum GAME_STATUS

{

OK,//正常運?

KILL_BY_WALL,//撞墻

KILL_BY_SELF,//咬到??

END_NOMAL//正常結(jié)束

};

#define WALL L'□'

#define BODY L'●' // ★ ○● ◇◆ □■

#define FOOD L' ★ ' // ★ ○● ◇◆ □■ //蛇的初始位置

#define POS_X 24

#define POS_Y 5 //蛇?節(jié)點

typedef struct SnakeNode

{

int x;

int y;

struct SnakeNode* next;

}SnakeNode, * pSnakeNode;

typedef struct Snake

{

pSnakeNode _pSnake;//整條蛇的指針

pSnakeNode _pFood;//維護?物的指針

enum DIRECTION _Dir;//蛇頭的?向默認是向右

enum GAME_STATUS _Status;//游戲狀態(tài)

int _Socre;//當(dāng)前獲得分數(shù)

int _Add;//默認每個?物

int _SleepTime;//每??步休眠時間

}Snake, * pSnake;

//游戲開始前的初始化

void GameStart(pSnake ps); //游戲運?過程

void GameRun(pSnake ps); //結(jié)束

void GameEnd(pSnake ps); //設(shè)置光標的坐標

void SetPos(short x, short y); //歡迎界?

void WelcomeToGame(); //打印幫助信息

void PrintHelpInfo(); //創(chuàng)建地圖

void CreateMap();//初始化蛇

void InitSnake(pSnake ps); //?物

void CreateFood(pSnake ps);暫停響應(yīng)

void pause(); //下?個節(jié)點是?物

int NextIsFood(pSnakeNode psn, pSnake ps); //吃?物

void EatFood(pSnakeNode psn, pSnake ps); //不吃?物

void NoFood(pSnakeNode psn, pSnake ps); //撞墻檢測

int KillByWall(pSnake ps); //撞??檢測

int KillBySelf(pSnake ps); //蛇的移動

void SnakeMove(pSnake ps); //游戲初始化

void GameStart(pSnake ps); //游戲運?

void GameRun(pSnake ps); //游戲結(jié)束

void GameEnd(pSnake ps);

snake.cpp

#include "Snake.h"

//設(shè)置光標的坐標

void SetPos(short x, short y)

{

COORD pos = { x, y };

HANDLE hOutput = NULL;//獲取標準輸出的句柄(?來標識不同設(shè)備的數(shù)值)

hOutput = GetStdHandle(STD_OUTPUT_HANDLE);//設(shè)置標準輸出上光標的位置為

pos SetConsoleCursorPosition(hOutput, pos);

}

void WelcomeToGame()

{

SetPos(40, 15);

printf("歡迎來到貪吃蛇?游戲");

SetPos(40, 25);//讓按任意鍵繼續(xù)的出現(xiàn)的位置好看點

system("pause");

system("cls");

SetPos(25, 12);

printf("? ↑ . ↓ . ← . → 控制蛇的移動, F3為加速,F(xiàn)4為減速\n");

SetPos(25, 13);

printf("加速將能得到更?的分數(shù)。\n");

SetPos(40, 25);//讓按任意鍵繼續(xù)的出現(xiàn)的位置好看點

system("pause");

system("cls"); } void CreateMap()

{

int i = 0;

//上(0,0)-(56, 0)

SetPos(0, 0);

for (i = 0; i < 58; i += 2)

{

wprintf(L"%c", WALL);

}

//

下(0,26)-(56, 26)

SetPos(0, 26);

for (i = 0; i < 58; i += 2)

{

wprintf(L"%c", WALL);

}

//左

//x0,y從1開始增?

for (i = 1; i < 26; i++)

{

SetPos(0, i);

wprintf(L"%c", WALL);

}

//56,從開始增?

for (i = 1; i < 26; i++)

{

SetPos(56, i);

wprintf(L"%c", WALL);

}

}

void InitSnake(pSnake ps)

{

pSnakeNode cur = NULL;

int i = 0;

//創(chuàng)建蛇?節(jié)點,并初始化坐標

//頭插法

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

{

//創(chuàng)建蛇?的節(jié)點

cur = (pSnakeNode)malloc(sizeof(SnakeNode));

if (cur == NULL)

{

perror("InitSnake()::malloc()");

return;

}

//設(shè)置坐標

cur->next = NULL;

cur->x = POS_X + i * 2;

cur->y = POS_Y;

//頭插法

if (ps->_pSnake == NULL)

{

ps->_pSnake = cur;

}

else

{

cur->next = ps->_pSnake;

ps->_pSnake = cur;

}

}

//打印蛇的?體

cur = ps->_pSnake;

while (cur)

{

SetPos(cur->x, cur->y);

wprintf(L"%c", BODY);

cur = cur->next;

}

//初始化貪吃蛇數(shù)據(jù)

ps->_SleepTime = 200;

ps->_Socre = 0;

ps->_Status = OK;

ps->_Dir = RIGHT;

ps->_Add = 10;

}

void CreateFood(pSnake ps)

{

int x = 0;

int y = 0;

again:

//產(chǎn)?的x坐標應(yīng)該是2的倍數(shù),這樣才可能和蛇頭坐標對?。

do

{

x = rand() % 53 + 2;

y = rand() % 25 + 1;

} while (x % 2 != 0);

pSnakeNode cur = ps->_pSnake;//指向蛇頭的指針 //?物不能和蛇?沖突

while (cur)

{

if (cur->x == x && cur->y == y)

{

goto again;

}

cur = cur->next;

}

pSnakeNode pFood = (pSnakeNode)malloc(sizeof(SnakeNode)); //

創(chuàng)建?物

if (pFood == NULL)

{

perror("CreateFood::malloc()");

return;

}

else

{

pFood->x = x;

pFood->y = y;

SetPos(pFood->x, pFood->y);

wprintf(L"%c", FOOD);

ps->_pFood = pFood;

}

}

void PrintHelpInfo()

{

}

void pause()//暫停

{打印提?信息

SetPos(64, 15);

printf("不能穿墻,不能咬到??\n");

SetPos(64, 16);

printf("?↑.↓.←.→分別控制蛇的移動.");

SetPos(64, 17);

printf("F1 為加速,F(xiàn)2 為減速\n");

SetPos(64, 18);

printf("ESC :退出游戲.space:暫停游戲.");

SetPos(64, 20);

while (1)

{

Sleep(300);

if (KEY_PRESS(VK_SPACE))

{

break;

}

}

}

//pSnakeNode psn 是下?個節(jié)點的地址

//pSnake ps 維護蛇的指針

int NextIsFood(pSnakeNode psn, pSnake ps)

{

return (psn->x == ps->_pFood->x) && (psn->y == ps->_pFood->y);

}

//pSnakeNode psn 是下?個節(jié)點的地址

//pSnake ps 維護蛇的指針

void EatFood(pSnakeNode psn, pSnake ps)

{

//頭插法

psn->next = ps->_pSnake;

ps->_pSnake = psn;

pSnakeNode cur = ps->_pSnake;

//打印蛇

while (cur)

{

SetPos(cur->x, cur->y);

wprintf(L"%c", BODY);

cur = cur->next;

}

ps->_Socre += ps->_Add;

free(ps->_pFood);

CreateFood(ps);

}

//pSnakeNode psn

是下?個節(jié)點的地址

//pSnake ps

維護蛇的指針

void NoFood(pSnakeNode psn, pSnake ps)

{

//頭插法

psn->next = ps->_pSnake;

ps->_pSnake = psn;

pSnakeNode cur = ps->_pSnake; //打印蛇

while (cur->next->next)

{

SetPos(cur->x, cur->y);

wprintf(L"%c", BODY);

cur = cur->next;

}

//最后?個位置打印空格,然后釋放節(jié)點

SetPos(cur->next->x, cur->next->y);

printf(" ");

free(cur->next);

cur->next = NULL;

}

//pSnake ps

維護蛇的指針

int KillByWall(pSnake ps)

{

if ((ps->_pSnake->x == 0)

|| (ps->_pSnake->x == 56)

|| (ps->_pSnake->y == 0)

|| (ps->_pSnake->y == 26))

{

ps->_Status = KILL_BY_WALL;

return 1;

}

return 0;

}

//pSnake ps

維護蛇的指針

int KillBySelf(pSnake ps)

{

pSnakeNode cur = ps->_pSnake->next;

while (cur)

{

if ((ps->_pSnake->x == cur->x)

&& (ps->_pSnake->y == cur->y))

{

ps->_Status = KILL_BY_SELF;

return 1;

}

cur = cur->next;

}

return 0;

}

void SnakeMove(pSnake ps)

{

//創(chuàng)建下?個節(jié)點

pSnakeNode pNextNode = (pSnakeNode)malloc(sizeof(SnakeNode));

if (pNextNode == NULL)

{

perror("SnakeMove()::malloc()");

return;

}

//

確定下?個節(jié)點的坐標,下?個節(jié)點的坐標根據(jù),蛇頭的坐標和?向確定

switch (ps->_Dir)

{

case UP:

{

pNextNode->x = ps->_pSnake->x;

pNextNode->y = ps->_pSnake->y - 1;

}

break;

case DOWN:

{

pNextNode->x = ps->_pSnake->x;

pNextNode->y = ps->_pSnake->y + 1;

}

break;

case LEFT:

{

pNextNode->x = ps->_pSnake->x - 2;

pNextNode->y = ps->_pSnake->y;

}

break;

case RIGHT:

{

pNextNode->x = ps->_pSnake->x + 2;

pNextNode->y = ps->_pSnake->y;

}

break;

}

//如果下?個位置就是?物

if (NextIsFood(pNextNode, ps))

{

EatFood(pNextNode, ps);

}

else//如果沒有?物

{

NoFood(pNextNode, ps);

}

KillByWall(ps);

KillBySelf(ps);

}

void GameStart(pSnake ps)

{

//設(shè)置控制臺窗?的??,30?,100

//mode 為DOS命令

system("mode con cols=100 lines=30");

//設(shè)置cmd窗?名稱

system("title 貪吃蛇");

//獲取標準輸出的句柄(來標識不同設(shè)備的數(shù)值)

HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE); //影藏光標操作

CONSOLE_CURSOR_INFO CursorInfo;

GetConsoleCursorInfo(hOutput, &CursorInfo);//獲取控制臺光標信息

CursorInfo.bVisible = false; //隱藏控制臺光標

SetConsoleCursorInfo(hOutput, &CursorInfo);//設(shè)置控制臺光標狀態(tài) //打印歡迎界?

WelcomeToGame(); //打印地圖

CreateMap(); //初始化蛇

InitSnake(ps); /創(chuàng)造第?個?物

CreateFood(ps);

}

void GameRun(pSnake ps)

{ //打印右側(cè)幫助信息

PrintHelpInfo();

do

{

SetPos(64, 10);

printf("得分:%d ", ps->_Socre); printf("每個?物得分:%d分", ps->_Add);

if (KEY_PRESS(VK_UP) && ps->_Dir != DOWN)

{

ps->_Dir = UP;

}

else if (KEY_PRESS(VK_DOWN) && ps->_Dir != UP)

{

ps->_Dir = DOWN;

}

else if (KEY_PRESS(VK_LEFT) && ps->_Dir != RIGHT)

{

ps->_Dir = LEFT;

}

else if (KEY_PRESS(VK_RIGHT) && ps->_Dir != LEFT)

{

ps->_Dir = RIGHT;

}

else if (KEY_PRESS(VK_SPACE))

{

pause();

}

else if (KEY_PRESS(VK_ESCAPE))

{

ps->_Status = END_NOMAL;

break;

}

else if (KEY_PRESS(VK_F3))

{

if (ps->_SleepTime >= 50)

{

ps->_SleepTime -= 30;

ps->_Add += 2;

}

}

else if (KEY_PRESS(VK_F4))

{

if (ps->_SleepTime < 350)

{

ps->_SleepTime += 30;

ps->_Add -= 2;

if (ps->_SleepTime == 350)

{

ps->_Add = 1;

}

}

}

//蛇每次?定之間要休眠的時間,時間短,蛇移動速度就快

Sleep(ps->_SleepTime);

SnakeMove(ps);

} while (ps->_Status == OK);

}

void GameEnd(pSnake ps)

{

pSnakeNode cur = ps->_pSnake;

SetPos(24, 12);

switch (ps->_Status)

{

case END_NOMAL: printf("您主動退出游戲\n");

break;

case KILL_BY_SELF:

printf("您撞上??了 ,游戲結(jié)束!\n"); break;

case KILL_BY_WALL:

printf("您撞墻了,游戲結(jié)束!\n");

break;

}

//釋放蛇?的節(jié)點

while (cur)

{

pSnakeNode del = cur;

cur = cur->next;

free(del);

}

}

總結(jié)

貪吃蛇小游戲是一個有趣的小游戲,也讓我學(xué)到了很多,希望大家多多支持!!!

柚子快報邀請碼778899分享:c語言 開發(fā)語言 C--貪吃蛇

http://yzkb.51969.com/

精彩文章

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/18919839.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄