天天看點

項目實戰:C/C++遊戲:Flappy Bird[C語言版本]項目實戰:C/C++遊戲:Flappy Bird[C語言版本] 

項目實戰:C/C++遊戲:Flappy Bird[C語言版本] 

目錄

項目實戰:C/C++遊戲:Flappy Bird[C語言版本] 

1.編譯環境:

2.項目運作效果

3.主要源碼:

==================================================================

1.編譯環境:

Win10專業版x64    VS2015

這是2017年9或10月份寫的     一個練手的,但是現在才能夠想起來把它給發出來,算是今天有空整理部分一下這麼久寫的代碼吧。給以後一個永久的回憶

==================================================================

2.項目運作效果

項目實戰:C/C++遊戲:Flappy Bird[C語言版本]項目實戰:C/C++遊戲:Flappy Bird[C語言版本] 
項目實戰:C/C++遊戲:Flappy Bird[C語言版本]項目實戰:C/C++遊戲:Flappy Bird[C語言版本] 

==================================================================

源碼連結: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

其他:以後會不定期續寫的,且上面得源碼都是自己學習過程的一個又一個腳印,希望也可以給你們一些啟發,也給自己一個回憶,麼麼哒φ(>ω<*)