Thứ Tư, 27 Tháng Mười Một 2024
Trang chủLập trìnhLập trình C/C++Lập trình Game Flappy Bird Trên Graphics C/C++

Lập trình Game Flappy Bird Trên Graphics C/C++

DANH SÁCH BÀI VIẾT
Lập trình tỏ tình người yêu trên Graphics C/C++ – I LOVE YOU
Lập trình Demo Ai Là Triệu Phú trên Graphics C/C++
Lập Trình C/C++ Vẽ và Tô Màu Trái Tim bằng Thư Viện Graphics
Lập trình Đồng Hồ Thời Gian & Bấm Giờ Trên Graphics C/C++ 
Lập trình Game Flappy Bird Trên Graphics C/C++
Lập trình Demo ứng dụng Học lập trình trên Graphics C/C++
Lập trình I LOVE YOU trên Graphics C/C++ – Lập trình tỏ tình Crush
Bóng bay lên trời – Lập trình Happy Birthday  trên C/C++
Tỏ tình Crush bằng code C/C++ – I LOVE YOU ngôn ngữ C/C++
Cách tạo menu game trên thư viện Graphics C/C++
Lập trình game Cờ Caro trên C/C++ màn hình Console(Demo Game)
Lập trình ứng dụng giúp bé học toán trên C/C++ màn hình Console
Lập trình game Rắn săn mồi trên C/C++ màn hình Console(Demo Snake)
Xây dựng demo Code Vượt vật cản trên màn hình Console C/C++

Trong loạt bài chia sẻ các demo và Source code, hôm nay mình sẽ chia sẻ code Lập trình Game Flappy Bird Trên Graphics C/C++ được xây dựng trên thư viện Graphics C/C++.

Lập trình Game Flappy Bird Trên Graphics C/C++

Video dưới đây là demo mà mình đã xây dựng và sẽ chia sẻ source code trong bài viết hôm nay, bạn xem qua nhé.

Demo game này tương đối đơn giản, mình xây xây dựng trên Graphics C/C++ với mục địch nghịch code và học thêm là chính. Game tương đối giật lag, nếu không muốn nói là rất giật lag, bạn có nhu cầu thăm khảo code có thể download về nhé.

Mình sẽ giải thích một số hàm như sau:

Các kiểu dữ liệu Struct định nghĩa

//Struc tọa độ
struct toado{
	int x, y;//Tọa độ x, y
};

//struc định ngĩa con chim cánh cụt
struct flap{
	toado td;
}bird;

//struc các ống chán(vật cản)
struct Barrier{
	toado br[10]; //Khai báo bao gồm 10 ống chán
}BR;

void init() – Hàm khởi tạo

void init()
{
	bird.td.x=50; bird.td.y=250; //Khởi tạo tọa độ chim cánh cụt

//vòng lặp for khởi tạo tọa độ các ống chán
	for(int i=0;i<5;i++)
	{
		BR.br[i].x=900+i*200;
		BR.br[i].y=rand()%200+240;
	}
}

void BIRD() – Hàm Để vẽ chim cánh cụt

void BIRD()
{
	setfillstyle(1,14); setcolor(14); fillellipse(bird.td.x,bird.td.y,25,18);//Than chim
	setfillstyle(1,15); setcolor(15); fillellipse(bird.td.x+12,bird.td.y-9,8,4); //Mat
	setfillstyle(1,0); setcolor(0); fillellipse(bird.td.x+12,bird.td.y-9,2,2); //Mat den
	setfillstyle(1,4); setcolor(4); fillellipse(bird.td.x-13,bird.td.y,15,11);//Canh
	setcolor(0); setlinestyle(1,2,3); line(bird.td.x+15,bird.td.y,bird.td.x+30,bird.td.y);
}

void DLBIRD() – Hàm Để xóa chim cánh cụt

void DLBIRD()
{
	setfillstyle(1,0); setcolor(0); fillellipse(bird.td.x,bird.td.y,25,18);//Than chim
	setfillstyle(1,0); setcolor(0); fillellipse(bird.td.x+12,bird.td.y-9,8,4); //Mat
	setfillstyle(1,0); setcolor(0); fillellipse(bird.td.x-13,bird.td.y,15,11);//Canh
}

void control() – Hàm điều khiển chim cánh cụt bay lên xuống

void control()
{
	bird.td.y+=2;
	if(kbhit()){getch();	bird.td.y-=80;} //Nếu có phím nhấn thì tọa độ y chim cánh cụt trừ đi 80 chim sẽ bay lên(Trên màn hình Graphics tọa độ y sẽ ngược hướng với hệ trục tọa độ XYZ)

//Ngoài sử dụng bàn phím, 2 câu lệnh dưới đây cho phép có thể sử dụng chuột trái hoặc chuột phải để chơi
	if(ismouseclick(WM_LBUTTONDOWN))//Chuột trái
	{
		int t1,t2;
		getmouseclick(WM_LBUTTONDOWN, t1, t2); bird.td.y-=80;
	}
	if(ismouseclick(WM_RBUTTONDOWN))//Chuột phải
	{
		int t1,t2;
		getmouseclick(WM_RBUTTONDOWN, t1, t2); bird.td.y-=80;
	}
}

void display() – Hàm hiển thị

void display()
{
	for(int i=0;i<5;i++)
	{
		setfillstyle(1,0);
		bar(BR.br[i].x,BR.br[i].y,BR.br[i].x+40,450);
		bar(BR.br[i].x,BR.br[i].y-190,BR.br[i].x+40,BR.br[i].y-400);
	}
	for(int i=0;i<5;i++)
	{
		BR.br[i].x--;
		if(BR.br[i].x==-20) {
			BR.br[i].x=1050;
			BR.br[i].y=rand()%200+200;
		}
	}
	for(int i=0;i<5;i++)
	{
		setfillstyle(1,2);
		bar(BR.br[i].x,BR.br[i].y,BR.br[i].x+40,450);
		bar(BR.br[i].x,BR.br[i].y-190,BR.br[i].x+40,BR.br[i].y-400);
	}
}

void gameover(int &thua) – Hàm kiểm tra game over nếu chím cánh cụt bị chạm vào cột chán

void gameover(int &thua)
{
	for(int i=0;i<5;i++)
	{
		if((BR.br[i].x<bird.td.x && BR.br[i].x+40>bird.td.x)&&(bird.td.y>BR.br[i].y || bird.td.y<BR.br[i].y-190)) thua=1;
		else if(bird.td.y<0||bird.td.y>450) thua=1;
	}
}

int main() – Hàm chính

int main()
{
	initwindow(1050,600);
	int thua;
	int a;
	do{
		thua=0;
			init();
			BIRD();setfillstyle(1,0); bar(0,0,1050,600);
			setfillstyle(1,15); bar(0,450,1050,600);
			setcolor(12); settextstyle(6,0,9); setbkcolor(15); outtextxy(200,460,"Flappy Bird");
		while(thua==0)
		{
			DLBIRD();
			control(); 
			BIRD();
			display();
			gameover(thua);
			for(int i=0;i<3000000;i++);
		}
		setfillstyle(1,0); bar(0,0,1050,600);
		setbkcolor(0); settextstyle(6,0,9);setcolor(12); outtextxy(100,200,"GAME OVER"); delay(2000);
		fflush(stdin);
		setfillstyle(1,0); bar(0,0,1050,600);
		setbkcolor(0);  settextstyle(6,0,5); setcolor(12); outtextxy(200,200,"Ban co muon choi lai(Y/N): ");
		a=getch();
	}while(a=='y'||a=='Y');
getch();
}

Chương trình

Đây là một chương trình trên thư viện Graphhics C/C++ nên để chạy thì bạn cần cài đặt thư viện Graphics trước đó, nếu như bạn đang vẫn chưa cài đặt thư viện Graphics hoặc chưa biết cách chạy chương trình trên màn hình Grpahics C/C++ thì hãy xem thêm bài viết này: Cài đặt thư viện Graphics trên IDE Dev C++.

Bạn không hiểu được ý nghĩa, cách dùng và tác dụng của các hàm đồ họa sử dụng trong chương trình dưới thì đọc tiếp bài viết này: Một số hàm đồ họa trong thư viện Graphics C/C++.

MÃ NGUỒN CHƯƠNG TRÌNH

#include <graphics.h>
#include <bits/stdc++.h>
struct toado{
	int x, y;
};
struct flap{
	toado td;
}bird;
struct Barrier{
	toado br[10];
}BR;
void init()
{
	bird.td.x=50;bird.td.y=250;
	for(int i=0;i<5;i++)
	{
		BR.br[i].x=900+i*200;
		BR.br[i].y=rand()%200+240;
	}
}
void BIRD()
{
	setfillstyle(1,14); setcolor(14); fillellipse(bird.td.x,bird.td.y,25,18);//Than chim
	setfillstyle(1,15); setcolor(15); fillellipse(bird.td.x+12,bird.td.y-9,8,4); //Mat
	setfillstyle(1,0); setcolor(0); fillellipse(bird.td.x+12,bird.td.y-9,2,2); //Mat den
	setfillstyle(1,4); setcolor(4); fillellipse(bird.td.x-13,bird.td.y,15,11);//Canh
	setcolor(0); setlinestyle(1,2,3); line(bird.td.x+15,bird.td.y,bird.td.x+30,bird.td.y);
}
void DLBIRD()
{
	setfillstyle(1,0); setcolor(0); fillellipse(bird.td.x,bird.td.y,25,18);//Than chim
	setfillstyle(1,0); setcolor(0); fillellipse(bird.td.x+12,bird.td.y-9,8,4); //Mat
	setfillstyle(1,0); setcolor(0); fillellipse(bird.td.x-13,bird.td.y,15,11);//Canh
}
void control()
{
	bird.td.y+=2;
	if(kbhit()){getch();	bird.td.y-=80;}
	if(ismouseclick(WM_LBUTTONDOWN))
	{
		int t1,t2;
		getmouseclick(WM_LBUTTONDOWN, t1, t2); bird.td.y-=80;
	}
	if(ismouseclick(WM_RBUTTONDOWN))
	{
		int t1,t2;
		getmouseclick(WM_RBUTTONDOWN, t1, t2); bird.td.y-=80;
	}
}
void display()
{
	for(int i=0;i<5;i++)
	{
		setfillstyle(1,0);
		bar(BR.br[i].x,BR.br[i].y,BR.br[i].x+40,450);
		bar(BR.br[i].x,BR.br[i].y-190,BR.br[i].x+40,BR.br[i].y-400);
	}
	for(int i=0;i<5;i++)
	{
		BR.br[i].x--;
		if(BR.br[i].x==-20) {
			BR.br[i].x=1050;
			BR.br[i].y=rand()%200+200;
		}
	}
	for(int i=0;i<5;i++)
	{
		setfillstyle(1,2);
		bar(BR.br[i].x,BR.br[i].y,BR.br[i].x+40,450);
		bar(BR.br[i].x,BR.br[i].y-190,BR.br[i].x+40,BR.br[i].y-400);
	}
}
void gameover(int &thua)
{
	for(int i=0;i<5;i++)
	{
		if((BR.br[i].x<bird.td.x && BR.br[i].x+40>bird.td.x)&&(bird.td.y>BR.br[i].y || bird.td.y<BR.br[i].y-190)) thua=1;
		else if(bird.td.y<0||bird.td.y>450) thua=1;
	}
}
int main()
{
	initwindow(1050,600);
	int thua;
	int a;
	do{
		thua=0;
			init();
			BIRD();setfillstyle(1,0); bar(0,0,1050,600);
			setfillstyle(1,15); bar(0,450,1050,600);
			setcolor(12); settextstyle(6,0,9); setbkcolor(15); outtextxy(200,460,"Flappy Bird");
		while(thua==0)
		{
			DLBIRD();
			control(); 
			BIRD();
			display();
			gameover(thua);
			for(int i=0;i<3000000;i++);
		}
		setfillstyle(1,0); bar(0,0,1050,600);
		setbkcolor(0); settextstyle(6,0,9);setcolor(12); outtextxy(100,200,"GAME OVER"); delay(2000);
		fflush(stdin);
		setfillstyle(1,0); bar(0,0,1050,600);
		setbkcolor(0);  settextstyle(6,0,5); setcolor(12); outtextxy(200,200,"Ban co muon choi lai(Y/N): ");
		a=getch();
	}while(a=='y'||a=='Y');
getch();
}

Cảm ơn bạn đã đọc hết bài viết! Chúc bạn học tốt!

XÊM THÊM

Tỏ tình Crush bằng code C/C++ – I LOVE YOU ngôn ngữ C/C++

Lập trình game Cờ Caro trên C/C++ màn hình Console(Demo Game)

Lập trình game Rắn săn mồi trên C/C++ màn hình Console(Demo Snake)

Xây dựng demo Code Vượt vật cản trên màn hình Console C/C++

0 0 Phiếu bình chọn
Xếp hạng bài viết
BÀI VIẾT LIÊN QUAN

2 BÌNH LUẬN

Đăng ký nhận thông báo
Thông báo email khi
guest
2 Bình luận
Mới nhất
Cũ nhất Được bình chọn nhiều nhất
Không thể gửi email
Phản hồi nội tuyến
PhongAD
PhongAD
2 năm trước

Sao làm trên Dev c++ ko đc , lỗi code à ?

NÊN ĐỌC THÊM

Bạn muốn tìm kiếm gì?

Dịch vụ code thuê

TUICOCACH.COM NHẬN ĐẶT TEXTLINK, BANNER, GP
2
0
Giáo sư! có thể ném gạch bên dưới nhé!x