C語言+圖形界面——實現貪吃蛇遊戲

先來說一下基本的思路,希望對各位有所幫助吧,項目編程思路很重要,這個是必須的。先了解一下貪吃蛇由哪些部分組成吧。由C語言寫出來的貪吃蛇然後再加上圖形庫,配上音樂也不錯了哈,寫程序項目的話不要太死板,要更靈活。

貪吃蛇有幾個組成部分:

第一:按鍵的控制,推薦用中斷的方式;

第二:蛇,這是難點,首先蛇是分節的,要注意蛇的變化規律,一次只變化一節,

後節依次變化到前節的位置,所以才會出現蛇頭碰蛇身的問題,相信大家都玩過。

第三:小球,每次碰到後,小球會出現在框內任一隨機的位置。

初次之外,還有邊框,這個簡單;

蛇的速度,筆者是靠延遲和蛇一次移動的距離配合著來控制的,但是限於目前的水平,筆者蛇一次移動的距離,

至少大於等於一節蛇身的直徑,筆者的蛇是用小球所組成的;

蛇每次碰壁或者碰著自己後,要從新開始或者顯示GAME OVER什麼的都行,再多些的就自由發揮吧。

C語言+圖形界面——實現貪吃蛇遊戲

下面給出一下程序,去運行吧。

#include "game.h"

//主函數

int main()

{

GameInit(); //初始化的函數.

//按鍵控制 不按鍵->移動循環 按鍵-->退出移動循環-->改變方向-->回到移動循環

while (1)

{

while (!kbhit()) //kbhit(檢測鍵盤是否有消息) getch conio.h

{

if (food.flag == 0)

FoodCoor();

Sleep(100);

cleardevice();

FoodPaint();

SnakePaint();

SnakeMove();

EatFood();

GameBreak();

}

ChangeSnakeCh();

}

getchar();

return 0;

}

//遊戲初始化

void GameInit()

{

//打開一個窗口

initgraph(640, 480);

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

mciSendString(L"open ./res/明天你好.mp3 alias gebilaowang",0,0,0);

mciSendString(L"play gebilaowang repeat", 0, 0, 0);

//設置背景顏色 顏色的三基色 紅R 綠G 藍B

setbkcolor(RGB(220,120,150)); //set bk color

cleardevice(); //使用設置好的背景顏色刷新屏幕 system("cls")

//初始化一條小蛇

rectangle(0, 0, 10, 10);

//蛇的結構初始化

snake.scr[0].x = 0;//蛇頭的x初始化為0

snake.scr[0].y = 0;

snake.n = 1;//當前有一節蛇

snake.ch = down;//方向往右

food.flag = 0; //食物初始化被吃掉的

}

//繪製蛇

void SnakePaint()

{

//n節蛇 最大的下標是多少? n-1 100

for (int i = snake.n - 1; i >= 0; i--)

{

rectangle(snake.scr[i].x, snake.scr[i].y, snake.scr[i].x + 10, snake.scr[i].y + 10);

}

}

//right 往右走 n節蛇 C C++ win32

void SnakeMove()

{

for (int i = snake.n - 1; i > 0; i--)

{

snake.scr[i].x = snake.scr[i - 1].x;

snake.scr[i].y = snake.scr[i - 1].y;

}

switch (snake.ch)

{

case up:

snake.scr[0].y -= 10;

break;

case down:

snake.scr[0].y += 10;

break;

case left:

snake.scr[0].x -= 10;

break;

case right:

snake.scr[0].x += 10;

break;

}

}

//人來控制 檢測到按鍵getchar getch

//通過不同的按鍵(分支結構 switch if)

// snake.scr[0].ch

void ChangeSnakeCh()

{

//鍵值 wasd 上下左右(鍵值!=ASCII)

//上 72 下80 左75 右77

int move;

move = getch(); //頭文件 conio.h

switch(move)

{

case 72: //up

if(snake.ch!=down)

snake.ch = up;

break;

case 80: //down

if (snake.ch != up)

snake.ch = down;

break;

case 75:

if (snake.ch != right)

snake.ch = left;

break;

case 77:

if (snake.ch != left)

snake.ch = right;

break;

}

}

void FoodCoor()

{

food.fsr.x = rand()%64*10; //0 10 20 30 40 50 ... 630 0-630-63 *10

food.fsr.y = rand() % 48*10; //0 10 20 30... 470 0-470-47 *10

food.flag = 1; //食物沒有被吃

}

void FoodPaint()

{

roundrect(food.fsr.x, food.fsr.y, food.fsr.x + 10, food.fsr.y+10, 10, 10);

}

void EatFood()

{

if (snake.scr[0].x == food.fsr.x&&snake.scr[0].y == food.fsr.y)

{

snake.n++;

food.flag = 0;

}

}

//判斷遊戲退出

void GameBreak()

{

//撞牆

if (snake.scr[0].y < -1 || snake.scr[0].y>471 || snake.scr[0].x < -1 || snake.scr[0].x>631)

{

//退出

OverGame();

}

for (int i = snake.n - 1; i > 0; i--)

{

if (snake.scr[0].x == snake.scr[i].x&&snake.scr[0].y == snake.scr[i].y)

{

//退出

OverGame();

}

}

}

void OverGame()

{

cleardevice();

outtextxy(300, 200, L"game over");

getch();

closegraph();

}

全部的代碼發出來了,希望對各位有所幫助,照抄自然是不可能的,希望看了對於有C語言基礎的各位有所幫助吧,自然這還只是一個小的項目,有基礎的話,可以建議加下我的群368282579,群內有各種項目資源,沒基礎的自然也是可以加的哈,基本的C語言資源,沒基礎的也可以學習的,要學的話編程這條路不單單是隻努力還得堅持,兩者具備才行的哈。

C語言+圖形界面——實現貪吃蛇遊戲


分享到:


相關文章: