當前位置:
首頁 > 知識 > C語言 圖形界面——實現貪吃蛇遊戲

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()

{

}

void EatFood()

{

{

snake.n++;

food.flag = 0;

}

}

//判斷遊戲退出

void GameBreak()

{

//撞牆

if (snake.scr[0].y 471 || 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語言基礎的各位有所幫助吧

想要一起學習C++的可以加裙四五三二四三二八零,裙內有各種資料滿足大家,歡迎加裙


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 C加加 的精彩文章:

C語言寫的秒速計算四則混合運算項目
C語言新案例-跳躍的小球
學習C語言要注意以下幾個點!

TAG:C加加 |

您可能感興趣

寵物語言翻譯器實現在即
谷歌為遊戲開放地圖數據 開放世界遊戲更易實現
C語言快速入門——笑臉繪圖程序:最終實現
瑞薩電子圖形硬體和軟體,實現賞心悅目的人機界面
谷歌黑科技實現視頻背景實時「摳像」
工具產品轉型社交面臨哪些困境?美圖的社交夢能實現嗎?
兩種方式實現C語言訪問MCU寄存器
國風文化崛起引領的遊戲熱潮,你的武俠情緣夢將在這裡輕鬆實現
美實現隱身艦載機之夢!卻被這一現實問題逼的面紅耳赤是何故
無需綠幕,谷歌黑科技實現視頻背景實時「摳像」
簡單幾步實現人臉面具效果
想要一面文化牆?壁紙貼一下就能實現!
球賽題材渣作泛濫 但這款遊戲可以實現你的足球夢
自動駕駛中感測器包的實現形式猜想
古與今的對話 讓傳統文化實現「現代一躍」
勇敢地面對困難去實現夢想——《烏龜一家去看海》導讀
C語言字元串相關函數實現
全球唯一實現單個物體編輯的智能美圖APP——馬卡龍玩圖正式上線啦
如何在圖片中實現電影色調?
使用CNN生成圖像先驗,實現更廣泛場景的盲圖像去模糊