分享一个贪食蛇游戏,供参考
#include <stdio.h>
#include <windows.h>
int main()
{
char strbuf[1000];
int length = 1, gridSize = 20, mapW = 800, mapH = 600, lose = 0, eat;
POINT snake[1000] = { 5, 10 }, food = { 15, 10 }, direction = { 1, 0 }, move;
HWND hwnd = GetConsoleWindow();
HDC dc = GetDC(hwnd);
MoveWindow(hwnd, 100, 100, 1000, 800, FALSE);
while (snake[0].x >= 0 && snake[0].y >= 0 && snake[0].x < mapW / gridSize && snake[0].y < mapH / gridSize && lose == 0) {
PatBlt(dc, 0, 0, 1000, 800, WHITENESS);
PatBlt(dc, 0, 0, mapW, mapH, BLACKNESS);
if (GetAsyncKeyState(VK_LEFT)) (direction.x = -1, direction.y = 0);
if (GetAsyncKeyState(VK_RIGHT)) (direction.x = 1, direction.y = 0);
if (GetAsyncKeyState(VK_UP)) (direction.x = 0, direction.y = -1);
if (GetAsyncKeyState(VK_DOWN)) (direction.x = 0, direction.y = 1);
move.x = snake[0].x + direction.x;
move.y = snake[0].y + direction.y;
for (int i = length - 1; i >= 0; i -= 1) {
if (snake[i].x == move.x && snake[i].y == move.y) lose = 1;
snake[i] = (i == 0 ? move : snake[i - 1]);
PatBlt(dc, snake[i].x * gridSize + 1, snake[i].y * gridSize + 1, gridSize - 2, gridSize - 2, WHITENESS);
}
if (snake[0].x == food.x && snake[0].y == food.y) {
food.x = rand() % mapW / gridSize;
food.y = rand() % mapH / gridSize;
length += 1;
eat = 1;
}
else eat = 0;
PatBlt(dc, food.x * gridSize + gridSize / 4, food.y * gridSize + gridSize / 4, gridSize / 2, gridSize / 2, WHITENESS);
TextOutA(dc, 0, 0, strbuf, sprintf_s(strbuf, "說明: 鍵盤上下左右鍵控制方向. 蛇長度: %d, 蛇頭位置X: %d, 蛇頭位置Y: %d, 食物位置X: %d, 食物位置Y: %d", length, snake[0].x, snake[0].y, food.x, food.y));
if (eat) Beep(600, 200);
else Beep(60, 200);
}
printf("吃到自己或撞墻, 遊戲失敗");
return 0;
}