Làm game luyện gõ phím với AutoIT

Bằng AutoIT và những kiến thức cơ bản, chúng ta có thể tạo 1 trò chơi luyện gõ phím thường thấy trên mạng một cách nhanh chóng. Bài viết này sẽ tập trung giới thiệu và hướng dẫn cho bạn tạo 1 trò chơi đơn giản.

💬 KIẾN THỨC CẦN BIẾT

Để đọc hiểu bài viết này, bạn cần có kiến thức cơ bản về AutoIT, bạn có thể nghiên cứu AutoIT qua các bài viết và video tại đây.

🔥 MÔ TẢ TRÒ CHƠI

Mô tả cách chơi của Typing Test


🚀 LET'S DO IT

Bước 1: tạo 1 SplashTextOn trên màn hình bằng hàm SplashTextOn
SplashTextOn("Typing Test","Xin chào, bấm khoảng cách để bắt đầu trò chơi",200,100)
; tạo splashText với size GUI là 200 x 100
Ta được:
GUI Đơn giản khi dùng SplashTextOn
Bước 2: chúng ta sẽ bắt sự kiện khi người dùng ấn khoảng cách. Để biết được khi nào người dùng ấn khoảng cách, ta dùng _IsPressed
Do 
 Sleep(1)
Until _IsPressed('20')
Các dòng code trên sẽ giúp thực hiện 1 vòng lặp mà chỉ thoát vòng lặp đó khi nào khoảng cách được bấm. Tham số '20' trong _IsPressed chính là hex của khoảng cách. Khi nào người dùng nhấn khoảng cách thì _IsPressed('20') trả về giá trị là True và khi đó vòng lặp sẽ thoát.
Bước 3: Bắt đầu chơi. Trò chơi sẽ lặp đi lặp lại vô hạn số từ phải gõ, chỉ thoát khi nào chúng ta ấn Esc. Vì vậy ta sử dụng While 1 cho vòng lặp vô hạn, và bắt sự kiện người dùng bấm Esc thoát bằng _IsPressed.
$user_point = 0 ; khai báo trước biến user_point là điểm khi chơi, giá trị mặc định là 0
While 1
 If _IsPressed('1B') Then ExitLoop ; chỉ thoát vòng lặp khi ấn phím esc có hex là 1B
WEnd
MsgBox(64,'Thông báo','Điểm của bạn là '&$user_point) ; sau khi thoát vòng lặp, hiển thị điểm
Bước 4: Tạo các chữ cái ngẫu nhiên từ A tới Z bằng cách sử dụng hàm Chr. Hàm Chr sẽ chuyển mã ASCII về dạng ký tự. Từ A tới Z có số thứ tự lần lượt là từ 65 tới 90. Vì vậy trước tiên ta Random một số nguyên trong khoảng [65,90], sau đó dùng Chr để chuyển về dạng ký tự.
$ascii = Random(65,90,1)
$chu = Chr($ascii)
Tiếp theo ta in ký tự này lên SplashText lúc nãy bằng cách đổi text trong đó bằng ControlSetText
ControlSetText("Typing Test", "", "Static1", $chu)
Bước 5: Tính thời gian, nếu thời gian mà vượt quá thời gian cho phép (1s) thì không tính điểm, chuyển sang câu hỏi mới. Ta dùng hai hàm TimerInit và TimerDiff. Hai hàm này cho phép chúng ta tính khoảng delta time, hai hiểu nôm na chúng ta sẽ lấy được thời gian trôi qua từ lúc gọi TimerInit đến lúc dùng TimerDiff. Vì vậy đầu tiên ta đặt TimerInit lúc bắt đầu hiện câu hỏi để tính thời gian.
$time = TimerInit()
Bước 6: Bắt sự kiện ấn phím đúng. Tương tự, ta dùng hàm _IsPressed, vấn đề là hex của các phím, ta dùng hàm Hex để chuyển số thứ tự Ascii của ký tự về dạng Hex rồi đưa vào _IsPressed. Ta tạo thêm 1 vòng lặp nữa để kiểm tra và chỉ exitloop khi bấm đúng phím.
 While 1
  if _IsPressed(Hex($ascii,2)) Then ; nếu bấm đúng phím thì
   $user_point += 1 ; cộng điểm
   ExitLoop ; thoát vòng lặp
  EndIf
 WEnd
Tiếp theo, cũng trong vòng lặp đó, ta kiểm tra thời gian trôi qua mà > 1s thì thoát vòng lặp, không cộng điểm.

 While 1
  if _IsPressed(Hex($ascii,2)) Then
   $user_point += 1
   ExitLoop
  EndIf
  If TimerDiff($time) > 1000 Then ExitLoop ; nếu thời gian trôi qua từ khi gọi TimerInit > 1000ms (=1s) thì thoát vòng lặp
 WEnd
Như vậy chúng ta đã hoàn tất 1 game typing test nho nhỏ ^^ F5 và chơi thử xem nào ^^.
Code mẫu đầy đủ:
#include <Misc.au3>
SplashTextOn("Typing Test","Xin chào, bấm khoảng cách để bắt đầu trò chơi",200,100)
Do
 Sleep(1)
Until _IsPressed('20')

$user_point = 0 ; khai báo trước biến user_point là điểm khi chơi, giá trị mặc định là 0
While 1
 $ascii = Random(65,90,1)
 $chu = Chr($ascii)
 ControlSetText("Typing Test", "", "Static1", $chu)
 $time = TimerInit()

 While 1
  if _IsPressed(Hex($ascii,2)) Then
   $user_point += 1
   ExitLoop
  EndIf
  If TimerDiff($time) > 1000 Then ExitLoop
  If _IsPressed('1B') Then ; chỉ thoát trò chơi khi ấn phím esc có hex là 1B
   MsgBox(64,'Thông báo','Điểm của bạn là '&$user_point) ; sau khi thoát vòng lặp, hiển thị điểm
   Exit 
  EndIf
 WEnd
WEnd
Ngoài ra, bạn có thể dùng ý tưởng này, phát triển trò chơi thêm ^^
Đây là một ví dụ về Typing Test kết hợp với âm nhạc Piano.


Bạn có thể tham khảo bộ code mẫu này tại đây.

Xin chào, mình là opdo - một đứa mê những dòng code vô tận. Rất cám ơn vì bạn đã ghé thăm blog của mình ^^. Hi vọng được bạn ủng hộ để blog mình phát triển hơn

Share this

Related Posts

Previous
Next Post »