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

首頁綜合 正文
目錄

柚子快報(bào)激活碼778899分享:開發(fā)語言 簡單的C語言貪吃蛇

柚子快報(bào)激活碼778899分享:開發(fā)語言 簡單的C語言貪吃蛇

http://yzkb.51969.com/

一、源代碼

snake.h

#ifndef __SNAKE_H__

#define __SNAKE_H__

#include

#include

#include

#include

#include

#include

#include

#define WIDE 60 // 寬度

#define HIGH 20 // 高度

// 一個(gè)身體的對(duì)象

struct BODY {

int X;

int Y;

};

// 定義蛇對(duì)象

struct SNAKE {

struct BODY body[WIDE*HIGH];

int size;

}snake; // 一個(gè)蛇對(duì)象

// 定義食物對(duì)象

struct FOOD {

int X;

int Y;

}food; // 一個(gè)食物對(duì)象

int score = 0; // 分?jǐn)?shù)

int kx = 0; // 用戶按下 asdw 任意一個(gè)按鍵所得到的 坐標(biāo)值。

int ky = 0;

int lastX = 0; // 蛇尾的坐標(biāo)。

int lastY = 0;

int sleepSecond = 400;

// 聲明函數(shù)

void initSnake(void);

void initFood(void);

void initUI(void);

void playGame(void);

void initWall(void);

void showScore(void);

#endif

main.c

#define _CRT_SECURE_NO_WARNINGS

#include "snake.h" // 引入自定義頭文件

int main(void)

{

// 去除光標(biāo)。

CONSOLE_CURSOR_INFO cci; /*CONSOLE_CURSOR_INFO 是一個(gè)結(jié)

構(gòu)體類型,它定義在 wincon.h 頭

文件中,用來描述控制臺(tái)窗口光標(biāo)的

信息。

dwSize:表示光標(biāo)的大小,取值范圍為 1 到 100。

bVisible:表示光標(biāo)是否可見,如果為 TRUE,則光標(biāo)可見;

如果為 FALSE,則光標(biāo)不可見。

*/

cci.dwSize = sizeof(cci);

cci.bVisible = FALSE; // TRUE :

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci); 設(shè)置控制臺(tái)窗口光標(biāo)大小和可見性

srand(time(NULL)); // 播種隨機(jī)數(shù)種子。

initSnake(); // 初始化蛇

initFood(); // 初始化食物

initWall(); // 畫墻

initUI(); // 畫蛇和食物

playGame(); // 啟動(dòng)游戲

showScore(); // 打印分?jǐn)?shù)

system("pause");

return EXIT_SUCCESS;

}

void showScore(void)

{

// 將光標(biāo)默認(rèn)位置移動(dòng)至 不干擾游戲的任意位置。

COORD coord;

coord.X = 0;

coord.Y = HIGH + 2;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);

printf("Game Over!!!\n");

printf("成績?yōu)椋?d\n\n\n", score);

}

/*

這段代碼使用嵌套的循環(huán),分別遍歷每一行和每一列,

根據(jù)位置情況輸出相應(yīng)的字符。如果到了最后一列,輸出一條豎線 |;

如果到了最后一行,輸出一條橫線 _;其他情況下,輸出一個(gè)空格。

最后,每輸出一行,就換一次行。

*/

void initWall(void)

{

for (size_t i = 0; i <= HIGH; i++) // 多行

{

for (size_t j = 0; j <= WIDE; j++) // 一行中的多列

{

if (j == WIDE) // 如果到了最后一列,輸出一條豎線

{

printf("|");

}

else if (i == HIGH) // 如果到了最后一行,輸出一條橫線

{

printf("_");

}

else // 其他情況下,輸出一個(gè)空格

{

printf(" ");

}

}

printf("\n"); // 每輸出一行,換行一次

}

}

void playGame(void)

{

char key = 'd'; // 定義一個(gè)字符變量 key,表示用戶的按鍵輸入,默認(rèn)是向右移動(dòng)。

while (snake.body[0].X >= 0 && snake.body[0].X < WIDE

&& snake.body[0].Y >= 0 && snake.body[0].Y < HIGH) // 判斷蛇是否撞墻

{

initUI(); // 更新蛇的位置,打印出貪吃蛇和食物

if (_kbhit()) // 檢測(cè)用戶是否有按鍵輸入

{

key = _getch(); // 獲取用戶按下的按鍵

}

switch (key)

{

case 'w': kx = 0; ky = -1; break; // 如果用戶按下 'w',向上移動(dòng)

case 's': kx = 0; ky = +1; break; // 如果用戶按下 's',向下移動(dòng)

case 'd': kx = +1; ky = 0; break; // 如果用戶按下 'd',向右移動(dòng)

case 'a': kx = -1; ky = 0; break; // 如果用戶按下 'a',向左移動(dòng)

default: break; // 如果用戶按下其他鍵,不進(jìn)行移動(dòng)

}

// 碰撞

// 判斷蛇頭是否撞到身體

for (size_t i = 1; i < snake.size; i++)

{

if (snake.body[0].X == snake.body[i].X

&& snake.body[0].Y == snake.body[i].Y)

{

return; // 如果蛇頭撞到身體,游戲結(jié)束

}

}

// 判斷蛇頭是否撞到食物

if (snake.body[0].X == food.X && snake.body[0].Y == food.Y)

{

initFood(); // 食物被吃掉了,重新生成一個(gè)食物

snake.size++; // 蛇的長度增加

score += 10; // 得分增加

sleepSecond -= 100; // 加速游戲

}

// 記錄蛇尾的位置

lastX = snake.body[snake.size - 1].X;

lastY = snake.body[snake.size - 1].Y;

// 更新蛇的位置

for (size_t i = snake.size - 1; i > 0; i--)

{

snake.body[i].X = snake.body[i - 1].X; // 后一節(jié)身體部位的 X 坐標(biāo)等于前一節(jié)身體部位的 X 坐標(biāo)

snake.body[i].Y = snake.body[i - 1].Y; // 后一節(jié)身體部位的 Y 坐標(biāo)等于前一節(jié)身體部位的 Y 坐標(biāo)

}

snake.body[0].X += kx; // 蛇頭的 X 坐標(biāo)根據(jù)用戶按鍵修改

snake.body[0].Y += ky; // 蛇頭的 Y 坐標(biāo)根據(jù)用戶按鍵修改

Sleep(sleepSecond); // 控制游戲速度,讓游戲不會(huì)太快。

}

return;

}

// 定義初始化蛇函數(shù)

void initSnake(void)

{

snake.size = 2;

snake.body[0].X = WIDE / 2; //蛇頭初始化

snake.body[0].Y = HIGH / 2;

snake.body[1].X = WIDE / 2 - 1; // 蛇一節(jié)身體初始化

snake.body[1].Y = HIGH / 2;

return;

}

// 初始化界面控件

void initUI(void)

{

COORD coord = { 0 }; // 定義一個(gè) COORD 類型的結(jié)構(gòu)體變量,用來表示光標(biāo)移動(dòng)的位置。

// 畫蛇

for (size_t i = 0; i < snake.size; i++) // 遍歷貪吃蛇的每個(gè)身體部位

{

coord.X = snake.body[i].X; // 獲取當(dāng)前身體部位的 X 坐標(biāo)

coord.Y = snake.body[i].Y; // 獲取當(dāng)前身體部位的 Y 坐標(biāo)

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); // 將光標(biāo)移動(dòng)到當(dāng)前身體部位所在的位置

if (i == 0) // 如果當(dāng)前身體部位是蛇頭

putchar('@'); // 打印出蛇頭

else

putchar('*'); // 否則打印出蛇身

}

// 去除蛇尾

coord.X = lastX; // 獲取蛇尾的 X 坐標(biāo)

coord.Y = lastY; // 獲取蛇尾的 Y 坐標(biāo)

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); // 將光標(biāo)移動(dòng)到蛇尾所在的位置

putchar(' '); // 打印一個(gè)空格,相當(dāng)于去除了蛇尾

// 畫食物

coord.X = food.X; // 獲取食物的 X 坐標(biāo)

coord.Y = food.Y; // 獲取食物的 Y 坐標(biāo)

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); // 將光標(biāo)移動(dòng)到食物所在的位置

putchar('#'); // 打印出食物

}

// 食物的初始化函數(shù)

void initFood(void)

{

food.X = rand() % WIDE; // 0-59

food.Y = rand() % HIGH; // 0-59

return;

}

?

二、運(yùn)行結(jié)果截圖

?

柚子快報(bào)激活碼778899分享:開發(fā)語言 簡單的C語言貪吃蛇

http://yzkb.51969.com/

好文推薦

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

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

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

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

發(fā)布評(píng)論

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

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄