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