Thứ Tư, 30 Tháng Mười Một 2022
Trang chủLập trìnhLập trình C/C++Tạo chuyển động cơ bản trong Console C/C++ - Điều khiển chuyển...

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

DANH SÁCH BẢI VIẾT
Viết hàm thay đổi vị trí dấu nhái trong màn hình console C/C++
Lệnh tạm dừng và lệnh tạm dừng trong khoảng thời gian lập trình C/C++
Lệnh xóa màn hình Console trong C/C++ – Cách Reset màn hình Console
Viết hàm thay đổi màu chữ trong màn hình console C/C++
Viết hàm thay đổi kích thước màn hình console C/C++
Tạo âm thanh bíp trong C/C++ với hàm Beep
Hàm getch() - Lệnh bắt một phím nhấn
Hàm Kbhit() – Lệnh kiểm tra có sự kiện nhấn phím
Tạo chuyển động cơ bản trong Console C/C++ – Điều khiển chuyển động
Tỏ tình Crush bằng code C/C++ – I LOVE YOU ngôn ngữ C/C++
Xây dựng demo Code Vượt vật cản trên màn hình Console C/C++
Lập trình game Rắn săn mồi trên C/C++ màn hình Console(Demo Snake
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 Cờ Caro trên C/C++ màn hình Console(Demo Game)

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]

5 1 Bỏ 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