Tạo chuyển động cơ bản trong Console C/C++ – Điều khiển chuyển động

Trong bài viết này chúng ta sẽ tìm hiểu về cách tạo chuyển động cơ bản, cũng như điều khiển hướng chuyển động trong màn hình console lập trình C/C++.

Tạo hiệu ứng chuyển động

Trong bài viết trước chúng ta đã biết về hàm gotoxy(), đây là một hàm có tác dụng thay đổi vị trí con trỏ trong màn hình console. Ta sẽ dựa vào hàm này để tạo hiểu ứng chuyển động cho một thành phần. Nếu bạn vẫn chưa đọc bài viết có thể click vào link dưới đây để đọc nhé!

Viết hàm thay đổi vị trí dấu nhái trong màn hình console C/C++

Ví dụ mình sẽ có một hiệu ứng chuyển động cơ bản nhất đó là cho dòng chữ có nội dung “TUICOCACH – TOI YEU LAP TRINH“, chạy từ phía bên trái màn hình qua bên phải màn hình.

Ý tưởng để có một hiệu ứng chuyển động ta sẽ làm như sau, đầu tiên in dòng chữ đó tại một ví trí (x, y), và sau một khoảng thời gian nhất định ta sẽ xóa sạch màn hình rồi di chuyển vị trí con trỏ để in dòng chữ đó tại một ví trí khác. Như vậy ta đã có một hiệu ứng chuyển động cơ bản.

Code minh họa như sau:

#include <iostream>
#include <Windows.h>

using namespace std;

//Hàm di chuyển vị trí con trỏ trong console - đọc bài viết trước nhé
void gotoxy(int x,int y)
{  
    HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD a = {x, y};
    SetConsoleCursorPosition(h, a);
}

int main()
{
	for(int x = 0; x <75; x++)
	{
		gotoxy(x,10); //Di chuyển con trỏ tới vị trí tọa độ vị trí (x, 10)
		cout<<"TUICOCACH.COM - TOI YEU LAP TRINH"; //In dòng chữ tại vị trí con trỏ
		Sleep(100); //Tạm dừng 100ms (0.1s)
		system("cls"); //Hàm xóa màn hình console
	}
}

Nếu bạn cũng chưa hiểu 2 hàm là Sleep và system(‘cls’) thì trước đó mình cũng đã có 2 bài viết riêng.

Và đây chính là kết quả khi chạy đoạn chương trình trên.

Mình sẽ cải tiến chương trình lên một chút đó là cho chữ chạy từ trái qua phải rồi lại từ phải qua trái lặp lại liên tục.

#include <iostream>
#include <Windows.h>

using namespace std;
//Hàm thay đổi cị trí con trỏ
void gotoxy(int x,int y)
{  
    HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD a = {x, y};
    SetConsoleCursorPosition(h, a);
}

int main()
{
//Vong lap while để chương trình thực hiện lặp đi lặp lại
	while(true){
//Dòng chữ di chuyển từ trái qua phải
		for(int x = 0; x < 55; x++)
		{
			gotoxy(x,10); 
			cout<<"TUICOCACH.COM - TOI YEU LAP TRINH";
			Sleep(100); 
			system("cls"); 
		}
//Dòng chữ di chuyển ngược lại từ phải qua trái		
		for(int x = 55; x > 0; x--)
		{
			gotoxy(x,10); 
			cout<<"TUICOCACH.COM - TOI YEU LAP TRINH"; 
			Sleep(100); 
			system("cls"); 
		}
	}
}

Bạn hãy tự chạy thử xem chương trình hoạt động ra sao nhé.

Và nếu bạn cảm thấy màu chữ chỉ có màu trắng đơn thuần và quá nhạt nhẽo, vậy ta sẽ có hàm textcolor() để thay đổi màu văn bản: Viết hàm thay đổi màu chữ trong màn hình console C/C++ – textColor()

#include <iostream>
#include <Windows.h>

using namespace std;

void gotoxy(int x,int y)
{  
    HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD a = {x, y};
    SetConsoleCursorPosition(h, a);
}


//Viết hàm thay đổi màu chữ
void TextColor(int x)
{
    HANDLE h= GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(h, x);
}


int main()
{
	
	while(true){
		for(int x = 0; x < 55; x++)
		{
			TextColor((x%14) + 1); //Random mã màu từ 1 - 14
			gotoxy(x,10); 
			cout<<"TUICOCACH.COM - TOI YEU LAP TRINH";
			Sleep(100); 
			system("cls"); 
		}
	
		for(int x = 55; x > 0; x--)
		{
			TextColor((x%14) + 1);//Random mã màu từ 1 - 14
			gotoxy(x,10); 
			cout<<"TUICOCACH.COM - TOI YEU LAP TRINH"; 
			Sleep(100); 
			system("cls"); 
		}
	}
}

Okay, bây giờ màu chữ đã đủ 14 sắc cầu vồng.

Điều khiển hướng chuyển động

Ở phía trên chỉ đơn thuần là tạo được hiệu ứng chuyển động theo một hướng xác định trước, vậy làm sao để có thể điều khiển được hướng chuyển động.

Cũng rất đơn giản thôi, màn hình console là một mặt phẳng và sẽ có 4 hướng đó là hướng x++, x- -, y++, y- – tương ứng với 4 hướng phải, trái, xuống, lên(Đọc lại bài viết về hàm gotoxy() xem hình minh họa). Như vậy để điều khiển 4 hướng tương ứng ta sẽ sử dụng 4 phím nhấn trên bàn phím để điều khiển.

Giả dụ giờ ta quy ước phím A di chuyển sang trái(x- -), phím D – di chuyển sang phải(x++), phím S – di chuyển xuống(y++), phím W – di chuyển lên(y- -).

Để bắt được sự kiện nhấn phím của người dùng ta dùng hàm getch() và hàm kbhit() chi tiết cách dùng 2 hàm này đọc bài viết này: Hàm Kbhit() – Lệnh kiểm tra có sự kiện nhấn phím trong C/C++

Vậy bây giờ mình viết một đoạn chương trình đơn giản để minh họa điều khiển hướng đi của một vật “O“.

#include <iostream>
#include <conio.h>
#include <Windows.h>

using namespace std;
//Hàm thay đổi cị trí con trỏ
void gotoxy(int x,int y)
{  
    HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD a = {x, y};
    SetConsoleCursorPosition(h, a);
}
//Hàm đổi màu
void TextColor(int x)
{
    HANDLE h= GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(h, x);
}


int main()
{
	int x = 10, y = 10; //khởi tạo vật tại vị trí tọa độ là (10,10)
	while(true){
			if(kbhit())//Kiểm tra xem có bấm phím kg
           {
				char key = getch(); //Lấy ký tự người dùng vừa bấm
				if(key == 'a' || key == 'A') x--; //Di chuyển phải
				if(key == 'd' || key == 'D') x++;//Di chuyển trái
				if(key == 'w' || key == 'W') y--;//Di chuyển lên
				if(key == 's' || key == 'S') y++;//Di chuyển xuống
			}
			
			gotoxy(x,y); //Di chuyển con trỏ tới vị trí (x,y)
			cout<<"O";//In O ra vị trí đó
			gotoxy(0,0); cout<<"Bam A - D - S - W"; //In hướng dẫn tại đầu màn hình console
			Sleep(100); 
			system("cls"); 
	}
}

Như vậy lúc này bạn bấm hướng nào “O” sẽ di chuyển qua hướng đó.

Như vậy từ ví dụ này bạn có thể phát triển ý tưởng lên một chút là đã có thể tự lập trình được game Rắn săn mồi trên màn hình Console C/C++ rồi đấy.

Mình đã có một bài viết lập trình game này, nếu bạn có nhu cầu có thể thăm khảo thêm nhé!

Cuối cùng thì mình xin cảm ơn bạn đã đọc bài viết, chúc bạn học tốt! sớm trở thành một Pro Dev.

[Xem tất cả bài viết chủ đề C/C++ tại đây]

0

0

Phiếu bình chọn

Xếp hạng bài viết