這篇文章主要為大家詳細介紹了C語言實現——《别踩白塊遊戲》,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小夥伴們可以參考一下!
遊戲介紹:
《别踩白塊兒 Don't Tap The White Tile》,這就是這個遊戲的一個規則,我們隻需要不斷踩着黑色方塊前進即可,很簡單吧?誰都可以會玩,但并不是誰都能玩得很好噢,你呢?快來挑戰看看吧!經典模式,以最快的速度到達終點。街機模式,你有能力得多少分就得多少分,沒有任何限制,這也是最具挑戰性的一個模式。限時模式,在30秒内看你能走幾步。極速模式,沒有最高速限制的街機模式, 挑戰你的極限接力模式,規定時間内完成50塊兒,然後會有更多時間去完成另外的50塊兒!
好了,那麼我們今天就用我們所學的C語言知識來做出這個遊戲吧!本項目僅實現了街機模式,其他模式大家可以自行摸索喲!
本項目編譯環境:VS2019/VS2013;
插件:圖形庫插件easyX,涉及圖片素材可以自行百度找也可以關注文末領取;
效果圖展示
配套講解教程:别踩白塊遊戲教程——哔哩哔哩
源代碼示例:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<graphics.h>
#include<mmsystem.h> //多媒體設備接口頭文件
#pragma comment(lib,"winmm.lib") //多媒體設備接口庫文件
#define mian main
#define WIDTH 400
#define HEIGHT 700
#define INTERVAL 100
//黑塊怎麼存儲?
int map[4];
int score; //分數
void gameInit()
{
//播放音樂,向多媒體設備接口發送指令字符串
mciSendString(L"open ./野蜂飛舞.mp3 alias BGM", NULL, NULL, NULL); //media device interface send 發送 string 字符串
mciSendString(L"play BGM", NULL, NULL, NULL);
//設置随機數種子
srand((unsigned)time(NULL));
//對map進行随機初始化
for (size_t i = 0; i < 4; i )
{
map[i] = rand() % 4;
}
}
//遊戲界面繪制
void gameDraw()
{
//設置文字樣式
settextstyle(30, 0, L"楷體");
settextcolor(RED);
outtextxy(150, 30, L"别踩白塊");
//繪制遊戲界面
setlinecolor(BLACK);
setlinestyle(PS_SOLID, 2);
for (size_t i = 0; i < 5; i )
{
line(0, i * 150 INTERVAL, WIDTH, i * 150 INTERVAL); //畫橫線
line(i * 100, INTERVAL, i * 100, HEIGHT); //畫豎線
}
//根據map繪制出黑塊所在的位置
setfillcolor(BLACK);
for (size_t i = 0; i < 4; i )
{
int x = map[i] * 100;
int y = i * 150 INTERVAL;
//畫一個黑色的矩形
fillrectangle(x, y, x 100, y 150);
}
//輸出分數
settextstyle(20, 0, L"楷體");
settextcolor(BLACK);
//把int 轉成 字符串用什麼?
WCHAR str[20] = L"";
wsprintf(str, L"%d", score);
outtextxy(20, 20, str);
}
void move()
{
//清屏
cleardevice();
//移動
for (size_t i = 3; i > 0; i--)
{
map[i] = map[i - 1];
}
map[0] = rand() % 4;
}
//用鼠标點擊黑塊,實現所有快,往下移動
bool MOUSEEvent()
{
//獲取鼠标消息
MOUSEMSG msg = GetMouseMsg();
if (msg.uMsg == WM_LBUTTONDOWN) //鼠标左鍵按下
{
//獲取最下面的黑塊的左上角坐标
int x = map[3] * 100;
int y = 3 * 150 INTERVAL;
if (msg.x >= x && msg.x <= x 100 && msg.y >= y && msg.y <= y 150)
{
score = 10;
//move();
}
else
{
return false;
}
}
return true;
}
//街機模式
void loop()
{
Sleep(500); // 這個不太行,要自己寫定時器最好
move();
}
void gameOver()
{
//彈出框
int isok =MessageBox(GetHWnd(), L"you lowser,是否繼續?", L"hit", MB_OKCANCEL);
if (isok == IDOK)
{
printf("繼續遊戲~\n");
}
else
{
printf("推出遊戲~\n");
}
}
int mian()
{
//圖形,正方形,圓形.... 圖片 EW_SHOWCONSOLE同時顯示控制台
initgraph(WIDTH, HEIGHT,EW_SHOWCONSOLE);
//設置窗口背景顔色
setbkcolor(WHITE);
cleardevice();
gameInit();
while (true)
{
gameDraw();
if (!mouseEvent())
{
break;
}
loop();
}
//遊戲結束處理
gameOver();
getchar();
closegraph();
return 0;
}
寫在最後:對于準備學習C/C 編程的小夥伴,如果你想更好的提升你的編程核心能力(内功)不妨從現在開始!
編程學習書籍分享:
編程學習視頻分享:
整理分享(多年學習的源碼、項目實戰視頻、項目筆記,基礎入門教程)
歡迎轉行和學習編程的夥伴,利用更多的資料學習成長比自己琢磨更快哦!
對于C/C 感興趣可以關注小編在後台私信我:【編程交流】一起來學習哦!可以領取一些C/C 的項目學習視頻資料哦!已經設置好了關鍵詞自動回複,自動領取就好了!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!