Game Studio
Liên kế mạng xã hội

Game Studio


Hướng dẫn: Tìm hiểu về các số ngẫu nhiên trong Corona SDK

[​IMG]
Thư viện math.* của Corona cho phép bạn dễ dàng tạo ra các giá trị ngẫu nhiên để sử dụng trong các ứng dụng của bạn. Từ xáo trộn một bộ bài cho đến xác định bao nhiêu sát thương một anh hùng phải nhận lấy khi trúng phải một đòn tấn công của một con rồng, giá trị ngẫu nhiên có thể là một khía cạnh quan trọng trong thiết kế ứng dụng.

Một điều cần phải nói rằng số ngẫu nhiên được tạo ra bởi hầu hết các hệ thống máy tính không phải là những con số thực sự ngẫu nhiên. Thay vào đó, chúng là "giả ngẫu nhiên" - có nghĩa là, chúng được tạo ra bởi một thuật toán bằng toán học để cho ra kết quả trong có vẻ ngẫu nhiên, nhưng theo thời gian, các con số sẽ bắt đầu lặp lại. Số thực sự ngẫu nhiên - giống như những con số trên random.org - được tạo ra bằng cách đọc các tín hiệu từ các “tiếng ồn vô tuyến trong khí quyển”, và chúng sẽ luôn khác nhau. Trang web này cũng cung cấp một API RESTful để bạn có thể lấy chúng nếu project của bạn muốn những con số thực sự ngẫu nhiên.

Nhưng nói đi cũng phải nói lại, những con số ngẫu nhiên được tạo ra bởi Corona là "đủ ngẫu nhiên" cho hầu hết các trường hợp bạn cần. Có 2 hàm tham gia vào việc tạo ra chúng là:

math.randomseed ()
Về cơ bản, mỗi dự án mà sử dụng số ngẫu nhiên, bạn nên thêm dòng này ở đầu main.lua:

Mã (Lua):
math.randomseed( os.time())

Điều này sẽ đảm bảo rằng con số của bạn là "ngẫu nhiên". Đúng thế, hàm này thực sự tạo ra các số ngẫu nhiên, nó cần có một "giá trị bắt đầu" hay còn gọi là "seed" để bắt đầu quá trình tạo ra các số ngẫu nhiến. Bằng cách sử dụng các giá trị của os.time(), nó sẽ cung cấp cho bạn số lượng giây kể từ ngày 01 tháng 1 năm 1970, bạn sẽ nhận được một random seed thực sực khác biệt mỗi khi khởi động ứng dụng và vì thế bạn sẽ có một trình tự khác để tạo các con số ngẫu nhiên.

Lưu ý rằng bạn chỉ cần seed một lần cho bộ tạo số ngẫu nhiên. Một số nhà phát triển gọi math.randomseed() mỗi lần trước khi họ gọi math.random(), nhưng điều này không cần thiết. Bạn có thể sẽ hỏi rằng "Tại sao hệ thống không làm điều này cho chúng ta luôn mà phải seed bằng tay?". Đó là vì đôi khi ta cần cung cấp một giá trị không đổi được xác định cho hàm math.randomseed() thay vì os.time(). Nếu bạn làm như thế này, bạn sẽ có được những con số được lập lại. Ví dụ bạn đang tạo một game khoa học viễn tưởng, trong game bạn cần tạo ra những hành tinh một cách ngẫu nhiên, nhưng qua thời gian bạn sẽ không thể nhớ hết thông tin của các hành tinh này. Bằng cách truyền vào hàm math.randomseed() một mã số xác định cho mỗi hành tinh, bạn sẽ có một trình tự chính xác của những con số ngẫu nhiên, điều này cho phép bạn đặt những thành phố giống nhau vào những hành tinh giống nhau.

math.random()
Hàm math.random() cũng thực sự tạo ra một số ngẫu nhiên. Tùy thuộc vào các tham số bạn truyền vào nó, kết quả sẽ khác nhau.

Tạo một giá trị từ 0 đến 1
Gọi math.random() mà không có bất kỳ tham số sẽ trả về một giá trị giữa 0 và 1, ví dụ 0.22, 0.98, 0.56. Trong Corona, điều này có thể hữu ích để tạo ra giá trị cho màu sắc fill/stroke một cách ngẫu nhiên, vì các tham số RGB (Đỏ/Lục/Xanh) yêu cầu một giá trị giữa 0 và 1. Ví dụ:

Mã (Lua):
local rectangle = display.newRect( 100, 100, 80, 200 )
rectangle:setFillColor( math.random(), math.random(), math.random() )

Tạo một giá trị từ 1 đến một số nào đó
Nếu bạn muốn tính toán một loạt các số nguyên, ví dụ như kết quả xoay được của một con xúc xắc 6 mặt, bạn có thể làm như sau:

Mã (Lua):
local dieRoll = math.floor( math.random()*6 ) + 1

Kết quả math.floor( math.random()*6 ) tạo ra một số từ 0 đến 5, và thêm 1 ở cuối để tạo một phạm vi từ 1 đến 6 như bạn mong muốn.

Ngoài ra, hàm math.random() cung cấp một số phương pháp trợ giúp có thể giúp bạn trong việc đỡ phải tính toán con số. Code này sẽ hoạt động giống như code ở trên:

Mã (Lua):
local dieRoll = math.random( 6 )

Tạo một giá trị giữa số bắt đầu và số kết thúc:

Mã (Lua):
local value = math.random( -2, 2 )

Hàm này này sẽ tạo ra một dãy số, trong ví dụ này là từ -2 đến 2. Một ví dụ tuyệt vời về hàm này là xáo trộn một bảng dữ liệu cố định, giống như một bộ bài, nơi bạn cần phải sử dụng tất cả các giá trị trong một thứ tự ngẫu nhiên.

Lời kết
Như bạn có thể thấy, tạo ra các số ngẫu nhiên trong Corona rất đơn giản. Và trên hết, bạn có thể tự tin rằng bạn đang cung cấp cho ứng dụng của bạn một số yếu tố thực sự ngẫu nhiên khi sử dụng các hàm ngẫu nhiên trong Corona.

Xem thêm:

Corona SDK