項目實戰:C/C++遊戲:Flappy Bird[C語言版本]
目錄
項目實戰:C/C++遊戲:Flappy Bird[C語言版本]
1.編譯環境:
2.項目運作效果
3.主要源碼:
==================================================================
1.編譯環境:
Win10專業版x64 VS2015
這是2017年9或10月份寫的 一個練手的,但是現在才能夠想起來把它給發出來,算是今天有空整理部分一下這麼久寫的代碼吧。給以後一個永久的回憶
==================================================================
2.項目運作效果

==================================================================
源碼連結:https://pan.baidu.com/s/1mjBb6rQ 密碼:olmj
3.主要源碼:
// FlappyBird.cpp: 定義控制台應用程式的入口點。
//
#include "stdafx.h"
#include <windows.h>
#include <conio.h>
#include <time.h>
#define MAX 100
//Map[][] 地圖數值說明:0-- - ' ' 1-- - '$' 2-- - '*' 3-- - '~' 4-- - '|'
int g_MapHight, g_MapWidth; //實際地圖的場景大小(注意:這兩個數值都是比Map[][]的數組大小要小)
int g_BridX, g_BridY; //鳥的橫、縱坐标
int g_ThroughX, g_ThroughY; //障礙物的 基準中心坐标
int Map[MAX][MAX] = {0}; //題圖場景(用來存儲地圖每一個區域的數值,數值不同對應不同的符号, 而地圖就是由許許多多的符号構成)
bool Book[MAX][MAX] = { false }; //true---觸碰死亡 false---觸碰未死亡
bool g_Result = false; //true---遊戲結束 false---遊戲未結束
int g_Score; //分數成績
//.初始化最基礎的資料
void StartUp();
//.初始化地圖等
void StartMap();
//.清除控制台的光标
void HideCursor();
//.顯示遊戲頁面
void Show();
//.重新整理遊戲的界面
void UpDateOutPut();
//.監測鍵盤的輸入
void UpDateInPut();
int main()
{
system("title Flappy Bird");
system("color 0e");
char ch = 'y';
//char ch1 = 'y';
int i = 1;
printf_s("你先開始Flappy Bird小遊戲嗎?(Y/N)");
scanf_s("%c", &ch);
if ('y' == ch || 'Y' == ch)
{
//while ('y' == ch1 || 'Y' == ch1)
while (1 == i)
{
StartUp(); //.初始化最基礎的資料
while (true)
{
HideCursor(); //.清除控制台的光标
StartMap(); //.初始化地圖等
Show(); //.顯示遊戲頁面
UpDateInPut(); //.監測鍵盤的輸入
UpDateOutPut(); //.重新整理遊戲的界面
if (true == g_Result)
{
break;
}
system("cls");
}
//system("cls");
printf_s("你輸了~~~~\n\n你還要繼續遊戲嗎?(1-->繼續 2-->不繼續)\n");
scanf_s("%d", &i);
if (1 == i)
{
g_Result = false;
}
system("cls");
}
}
printf("歡迎下次運作Flappy Bird小遊戲~~~\n");
return 0;
}
//.初始化最基礎的資料
void StartUp()
{
g_Score = 0;
g_MapHight = 30; //地圖實際的高度(推薦20) --->數值越大,閃爍越厲害
g_MapWidth = 100; //地圖實際的寬度(推薦50) --->數值越大,閃爍越厲害
g_BridX = g_MapWidth / 4;
g_BridY = g_MapHight / 2;
g_ThroughX = g_MapWidth / 4 * 3;
g_ThroughY = g_MapHight / 2;
}
//.初始化地圖等 //0---' ' 1---'$' 2---'*' 3---'~' 4---'|' //true---觸碰死亡 false---觸碰未死亡
void StartMap()
{
int i, j;//i表示行,往下移動; j表示列,往右移動
for (i = 0; i <= g_MapHight - 1; i++)
{
for (j = 0; j <= g_MapWidth - 1; j++)
{
Map[i][j] = 0;
}
}
//Map[MAX][MAX] = {1}; //MMP 原來一直都是這裡出了錯誤, 這是Map[100][100]元素複制唯一
//浪費一個晚上和一個上午,就找到這個原因 真的是他媽的坑爹啊,不能這一行來代替上面兩個for循環給Map[][]每一個都指派
//初始化上下圍牆
for ( j = 0; j < g_MapWidth; j++)
{
Map[0][j] = Map[g_MapHight-1][j] =3;
}
//初始化左右圍牆
for (i = 0; i < g_MapHight; i++)
{
Map[i][0] = Map[i][g_MapWidth-1] =4;
}
//初始化小鳥位置
Map[g_BridY][g_BridX] = 1;
//初始化障礙牆
for (i = 1; i < g_MapHight-1; i++)
{
Map[i][g_ThroughX] = 2;
Book[i][g_ThroughX] = true;
}
//初始化一個通道出來
for ( i = g_ThroughY-2; i < g_ThroughY+2; i++)
{
Map[i][g_ThroughX] = 0;
Book[i][g_ThroughX] = false;
}
}
//.清除控制台的光标
void HideCursor()
{
CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
//.顯示遊戲頁面
void Show()
{
//Gotoxy(0, 0);
int i, j;
for ( i = 0; i < g_MapHight; i++)
{
for ( j = 0; j <g_MapWidth; j++)
{
switch (Map[i][j])
{
case 0:printf(" ");
break;
case 1:printf("$");
break;
case 2:printf("*");
break;
case 3:printf("~");
break;
case 4:printf("|");
break;
default:
break;
}
}
printf("\n");
}
printf("你的分數是:%d 分\n", g_Score);
printf("提示: 按鍵W或空格是往上面運動\n");
}
//.重新整理遊戲的界面
void UpDateOutPut()
{
g_BridY++;
g_ThroughX--;
//鳥觸碰死亡
if (true == Book[g_BridY][g_BridX] || g_BridY <= 0 || g_BridY >= g_MapHight-1)
{
g_Result = true;
}
//鳥跨過障礙物,得分
if (g_BridX == g_ThroughX+1 )
{
g_Score++;
}
if (g_ThroughX < 1)
{
srand(time(NULL)); //擷取随機數的種子
g_ThroughY = rand() % g_MapHight;
while (g_ThroughY <= 3 || g_ThroughY >= g_MapHight-4)
{
g_ThroughY = rand() % g_MapHight;
}
g_ThroughX = g_MapWidth / 4 * 3;
}
memset(Book, 0, sizeof(Book)); //??????
Sleep(100);
}
//.監測鍵盤的輸入
void UpDateInPut()
{
char ch;
if (_kbhit())
{
ch = _getch();
if (' ' == ch || 'w' == ch)
{
g_BridY -= 2;
}
}
}
================================================
下載下傳連結:
Flappy Bird[C語言版本]
參考其他部落格的連結:http://blog.csdn.net/zhao5502169/article/details/62046407
其他:以後會不定期續寫的,且上面得源碼都是自己學習過程的一個又一個腳印,希望也可以給你們一些啟發,也給自己一個回憶,麼麼哒φ(>ω<*)