Trang chủLập trìnhSource CodeCách tạo menu game trên thư viện Graphics C/C++

Cách tạo menu game trên thư việ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 tạo menu game trên thư viện Graphics C/C++.

Nếu như bạn đang đọc bài viết này nhưng vẫn chưa cài đặt thư viện Graphics thì bạn nên xem thêm bài viết này: Cài đặt thư viện Graphics trên IDE Dev C++

Tạo menu game trên thư viện Graphics C/C++

Trong lập trình Android hay trên HTML, CSS để tạo được menu tương đối đơn giản, chỉ cần tạo các nút bấm theo từng mục ra là có thể bấm được.

Tuy nhiên, để xây dựng được menu trên thư viện Graphics C/C++ thì có thể nói là rất phức tạp.

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é.

Để xây dựng được như trên mình đã thực hiện như sau:

Các mục chính của menu bao gồm: NEW GAME, SCORE, HELP, ABOUT, EXIT…

Nếu như bạn đã tìm hiểu về màn hình Graphics trên C/C++, bạn sẽ biết ở mỗi vị trí trên màn hình sẽ có 1 tọa độ X, Y riêng.

Tọa độ trên màn hình Graphics C/C++ thì hơi ngược một chút với tọa độ xy trong toán học. Gốc O sẽ từ vị trí bên trái và phía trên màn hình, tức là trục y sẽ ngược hướng xuống dưới, xem ảnh mình họa để hiểu hơn.

Như vậy mỗi phần tử trên màn hình Grpahics này sẽ nằm trong một khu vực có vị trí tọa độ X sẽ nhỏ hơn một số Alớn hơn 1 số B nào đó, và tọa độ Y cũng vậy. Tức là một khu vực có dạng hình chữ nhật.

Ở đây, mình ví dụ với phần tử là NEW GAME sẽ nằm trong khu vực có tọa độ là x ∈ [255,450), y ∈ [230,260].

Cách tạo menu game trên thư viện Graphics C/C++

Lúc này nếu mình đang di chuột tới điểm có tọa độ (x, y)(280,240)….như vậy 280 ∈ [255,450), 240 ∈ [230,260] tức là mình đang trỏ chuột vào NEW GAME.

Lúc này chúng ta chỉ cần bắt sự kiện click chuột và xử lý sự kiện tương ứng là được.

À, để có thể dễ dàng lấy được vị trí độ bạn có thể sử dụng hàm mình viết sẵn này nhé, hàm này có tác dụng là khi bạn di chuyển chuột trong màn hình Graphics nó sẽ in vị trí tọa độ x, y tương ứng trong màn hình Console.

void printfCoordinatesXY(){
	int x,y;
	while(true){
		if(ismouseclick(WM_MOUSEMOVE)) //Nếu có sự kiện di chuyển chuột
		{
			getmouseclick(WM_MOUSEMOVE, x, y); //Lấy tọa độ vị trí chuột
	        printf("%d -  %d\n",x,y);
	    }
	    delay(100);
	}
}

Chương trình minh họa hoàn chỉnh

#include <iostream>
#include <conio.h>
#include <windows.h>
#include <graphics.h>

using namespace std;

//Hàm vẽ khung menu và sự kiện hover menu
void menu(int &x, int &y)
{
	settextstyle(4,0,5);	setcolor(14); //Đặt kiểu chữ và màu vẽ
	outtextxy(40,20,"DEMO MENU GAME");
	settextstyle(1,0,1);	setcolor(12);	settextstyle(4,0,5);	setcolor(14); //Đặt kiểu chữ và màu vẽ
	outtextxy(390,670,"-----by Tanchan679----");

	if(ismouseclick(WM_MOUSEMOVE)) //Nếu di chuyển con chuột
	{
		getmouseclick(WM_MOUSEMOVE, x, y); //Lấy tọa độ vị trí con trỏ
	//Lệnh if này với các giá trị x,y tương ứng với đang di chuột tới phần tử NEW GAME(Tức là ta đang hover NEW GAME)
	if((y>=230 && y<=260) && (x>=255 && x<=450))
	{
    settextstyle(1,0,3);	setcolor(14);//Đặt kiểu chữ kích cỡ chữ để viết chữ NEW GAME
	outtextxy(255,230,"NEW GAME");
    settextstyle(1,0,2);	setcolor(15);//Đặt kiểu chữ kích cỡ chữ để viết các phần tử còn lại
	outtextxy(290,260," SCORE          ");
	outtextxy(305,290," HELP              ");
	outtextxy(290,320," ABOUT          ");
	outtextxy(310,350," EXIT           ");
	}
//Đang hover phần tử SCORE -> tương tự với các phần tử phía dưới
	else if((y>=260 && y<=290) && (x>=255 && x<=450))
	{
    settextstyle(1,0,2);	setcolor(15);
	outtextxy(255,230," NEW GAME                ");
    settextstyle(1,0,3);	setcolor(14);
	outtextxy(290,260,"SCORE");
    settextstyle(1,0,2);	setcolor(15);
	outtextxy(305,290," HELP                ");
	outtextxy(290,320," ABOUT              ");
	outtextxy(310,350," EXIT              ");
	}
		else if((y>=290 && y<=320) && (x>=255 && x<=450))
	{
    settextstyle(1,0,2);	setcolor(15);
	outtextxy(255,230," NEW GAME               ");
	outtextxy(290,260," SCORE             ");
    settextstyle(1,0,3);	setcolor(14);
	outtextxy(305,290,"HELP");
    settextstyle(1,0,2);	setcolor(15);
	outtextxy(290,320," ABOUT              ");
	outtextxy(310,350," EXIT            ");
	}
	else	if((y>=320 && y<=350) && (x>=255 && x<=450))
	{
    settextstyle(1,0,2);	setcolor(15);
	outtextxy(255,230," NEW GAME                 ");
	outtextxy(290,260," SCORE             ");
	outtextxy(305,290," HELP           ");
    settextstyle(1,0,3);	setcolor(14);
	outtextxy(290,320,"ABOUT");
    settextstyle(1,0,2);	setcolor(15);
	outtextxy(310,350," EXIT                ");
	} 
	else if((y>=350 && y<=380) && (x>=255 && x<=450))
	{
    settextstyle(1,0,2);	setcolor(15);
	outtextxy(255,230," NEW GAME                ");
	outtextxy(290,260," SCORE               ");
	outtextxy(305,290," HELP             ");
	outtextxy(290,320," ABOUT              ");
    settextstyle(1,0,3);	setcolor(14);
	outtextxy(310,350,"EXIT");
	}
	else 
	{
	 settextstyle(1,0,2);	 setcolor(15);
 	outtextxy(255,230," NEW GAME            ");
	outtextxy(290,260," SCORE               ");
	outtextxy(305,290," HELP                  ");
	outtextxy(290,320," ABOUT                   ");
	outtextxy(310,350," EXIT                         ");
	} 
	}
}


Hàm xử lý các sự kiện click vào menu thành phần
void clickmouse(int &thoat, int x, int y) 
{
//Nếu click vào chuột trái(click chứ kg phải click đúp)
	if(ismouseclick(WM_LBUTTONDBLCLK) && (y>230 && y<380) && (x>255 && x<450))
	{
		int x1, y1;
		cleardevice();//Lệnh xóa màn hình hiện tại
		settextstyle(1,0,1);	setcolor(12);
	    outtextxy(390,670,"-----by Tanchan679----");
		getmouseclick((WM_LBUTTONDBLCLK), x1, y1);  //Lấy tọa độ x, y vị trí click chuột

//Click vào NEW GAME
		if((y1>=230 && y1<=260) && (x1>=255 && x1<=450))
		{
			setcolor(15); outtext("Ban vua click "); setcolor(12);outtext("NEW GAME"); setcolor(15); outtext("  - by tanchan679");
		}

		if((y1>=260 && y1<=290) && (x1>=255 && x1<=450))//Click SCORE
		{
		setcolor(15);	outtext("Ban vua click ");setcolor(12);outtext("SCORE"); setcolor(15); outtext("  - by tanchan679");
		}

		if((y1>=290 && y1<=320) && (x1>=255 && x1<=450))//click HELP
		{
		setcolor(15);	outtext("Ban vua click  ");setcolor(12);outtext("HELP"); setcolor(15); outtext("  - by tanchan679");
		}
		if((y1>=320 && y1<=350) && (x1>=255 && x1<=450))//click ABOUT
		{
		setcolor(15);	outtext("Ban vua click  ");setcolor(12);outtext("ABOUT"); setcolor(15); outtext("  - by tanchan679");
		}
		if((y1>=350 && y1<=380) && (x1>=255 && x1<=450))//click EXIT
		{
			thoat = 1;
		}

//Xử lý sự kiện để có thể quay lại menu khi đang hiển thị màn hình mới
     if(thoat !=1)
     {
     	int tamdung = 0;
      do{
		if(ismouseclick(WM_MOUSEMOVE))
		{
		 getmouseclick(WM_MOUSEMOVE, x, y); //Lay toa do vi tri con tro
		}
	      bar(300,500,395,530);
          if((y>=500 && y<=530) && (x>=300 && x<=395)) setbkcolor(10);
	   	  else setbkcolor(15);
	   	  settextstyle(1,0,1); setcolor(12);  
	      outtextxy(303,505, " EXIT ");
	      setbkcolor(0);
       if(ismouseclick(WM_LBUTTONDBLCLK))
       {
     	 getmouseclick(WM_LBUTTONDBLCLK, x, y);
     	 if((y>=500 && y<=530) && (x>=300 && x<=395)) tamdung = 1;
	   }
	  	  delay(10);
	   }while(tamdung == 0);
	 }
	 cleardevice();
	 menu(x, y);
   }
}
int main()
{
	int x, y, thoat;
	initwindow(700,700);
	do{
	    menu(x, y);
	   clickmouse(thoat, x, y);
	    delay(10);
       }while(thoat !=1);
closegraph();
return 0;
}
0 0 Phiếu bình chọn
Xếp hạng bài viết
BÀI VIẾT LIÊN QUAN
Đăng ký nhận thông báo
Thông báo email khi
guest
0 Bình luận
Không thể gửi email
Phản hồi nội tuyến

NÊN ĐỌC THÊM

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


0
Giáo sư! có thể ném gạch bên dưới nhé!x
()
x