Có những cách bắt sự kiện bàn phím nào trong ngôn ngữ lập trình C/C++? Bạn muốn khi nhấn phím ESC thì thoát chương trình? Hay bạn muốn sử dụng các phím mũi tên để điều khiển trò chơi của mình? Bạn muốn khi nhấn phím nào đó thì chương trình sẽ thực hiện một hành động cụ thể? Tất cả sẽ có câu trả lời trong bài viết này.
1. Mã ASCII của các ký tự trên bàn phím
Để có thể thực hiện bắt sự kiện bàn phím với bất kỳ ngôn ngữ nào, bạn cần biết mã ASCII của các phím đó. Sau đây là mã ASCII của các phím thông dụng trên bàn phím.
Mã ASCII của các phím thông dụng:
- Phím Enter : 13
- Phím ESC: 27
- Phím Tab: 9
- Mũi tên lên: 72
- Mũi tên xuống: 80
- Mũi tên sang trái: 75
- Mũi tên sang phải: 77
- Phím cách: 32
Với các ký tự từ A-Z, a-z và các ký tự khác, bạn tham khảo thêm tại bài viết bảng mã ascii này nhé.
2. Code in ra mã ASCII phím vừa nhập
Giả sử, bạn cần in ra phím mình vừa nhập là phím gì trên bàn phím, hãy thử mấy dòng code đơn giản sau nhé
Mình chạy demo thử một chút:
Lưu ý: Sẽ có nhiều ký tự không thể in lên màn hình, hoặc in ra các ký tự lạ. Điều đó không có nghĩa là code sai đâu nha.
Đó là phần test chơi, bây giờ chúng ta sẽ đi vào từng bài toán cụ thể.
3. Nhấn ESC để thoát chương trình
Nếu bạn muốn bắt sự kiện bàn phím để thoát chương trình, mục này được viết dành riêng cho bạn đấy.
Giả sử bây giờ bạn có một chương trình lặp vô tận. Và bạn muốn thoát chương trình khi ấn phím ESC? Đơn giản, code sau đây sẽ giúp bạn làm điều đó.
Ở đây mình ví dụ là phím ESC có mã ASCII trong hệ thập phân là 27. Bạn có thể dùng bất cứ phím nào khác nhé.
Nếu bạn cần chương trình chờ để giảm tốc độ chạy thì có thể sử dụng hàm Sleep ở trên có trong thư viện windows.h . Lưu ý, chỉ hoạt động trên Windows. Linux cần sử dụng cách khác.
Dòng if(kbhit()) để kiểm tra có sự kiện nhập phím của người dùng hay không. Nếu có, dùng getch() để tóm phím đó.
Như vậy, bạn thấy bắt sự kiện bàn phím để thoát chương trình có dễ không? Hãy thử code trên với các phím khác nhé.
4. Bắt sự kiện bàn phím các phím mũi tên
Để bắt sự kiện bàn phím với các phím mũi tên, nó sẽ phức tạp hơn chút. Nếu bạn thử code sau với các phím mũi tên. Bạn sẽ ngạc nhiên và không hiểu chuyện gì đang xảy ra.
Đoạn code này in ra mã ASCII của phím vừa nhập.
Mỗi lần bạn nhấn 1 phím mũi tên, có 2 dòng text được in ra. Sẽ luôn có 1 dòng in ra giá trị ASCII hệ thập phân là -32.
Để ngăn chặn việc này, bạn hãy sử dụng một lệnh if để kiểm tra trường hợp có giá trị -32 nhé. Nếu nó xảy ra, thực hiện get lại. Sau đây là code minh họa:
5. Ứng dụng sử dụng bắt sự kiện bàn phím
Với việc bắt sự kiện bàn phím này, bạn có thể làm rất nhiều tính năng hay ho cho các đoạn code. Hoặc có thể xây dựng một số trò chơi nhỏ.
5.1. Chuyển hàm khi nhấn phím
Code dưới đây có thể giúp bạn chuyển đổi 2 chức năng khác nhau khi ấn phím. Bạn sẽ có thể chuyển qua lại giữa hàm f1 và hàm f2 nếu nhấn phím ESC trên bàn phím.
Bạn có thể copy code về để chạy thử và xem thành quả!
5.2. Xây dựng game
Đây là trò game rắn săn mồi mình viết hồi sinh viên năm hai. Video demo này quay lúc chưa hoàn thiện nên có chút lỗi nhỏ.
Code này có sử dụng các phím mũi tên để điều hướng rắn và phím gì đó để play/pause của trò chơi(mình quên cmnr).
Về sau, mình có nâng cấp thêm tính năng sử dụng chuột để chọn các chức năng trên menu.
Nếu bạn quan tâm, có thể xem và tải source code tại đây.
Chú ý: Code này lâu rồi và khá rối, mình không tiện sửa lại 😀
Hi vọng bài viết đã giúp các bạn biết cách bắt sự kiện bàn phím với ngôn ngữ C/C++.
Chúc các bạn học tốt!
Tôi là Nguyễn Văn Sỹ có 15 năm kinh nghiệm trong lĩnh vực thiết kế, thi công đồ nội thất; với niềm đam mê và yêu nghề tôi đã tạo ra những thiết kếtuyệt vời trong phòng khách, phòng bếp, phòng ngủ, sân vườn… Ngoài ra với khả năng nghiên cứu, tìm tòi học hỏi các kiến thức đời sống xã hội và sự kiện, tôi đã đưa ra những kiến thức bổ ích tại website nhaxinhplaza.vn. Hy vọng những kiến thức mà tôi chia sẻ này sẽ giúp ích cho bạn!