[Game Mechanic] Loạn số (số ngẫu nhiên)

Thảo luận trong 'Tin tức - Giới thiệu - Thảo luận chung về game' bắt đầu bởi asm65816, 31/10/16.

  1. asm65816

    asm65816 Mega Man

    Tham gia ngày:
    23/5/09
    Bài viết:
    3,320
    Nơi ở:
    El Sallia
    I. Khái niệm

    Số ngẫu nhiên, hay còn gọi là "loạn số" là một khái niệm phổ biến trong thống kê và khoa học máy tính. Khái niệm này được dùng để chỉ con số/dãy số biến thiên bất quy tắc, hay có vẻ là bất quy tắc, hay theo những quy tắc mà ở mức độ trí tuệ của loài người đương đại chưa nhận biết được.

    Số ngẫu nhiên được ứng dụng nhiều trong việc mã hóa, ứng dụng trong cờ bạc và rất thường thấy trong xây dựng game. Các ứng dụng lâu đời nhất của số ngẫu nhiên thường thấy là đổ xí ngầu (xúc xắc) hay búng đồng xu để phân định thắng thua, quyết định ai được đi trước trong các trò cờ bạc.
    Trong từ điển ngôn ngữ của nhân loại có hai từ: "may mắn" và "xui xẻo". Đây là sản phẩm của số ngẫu nhiên.
    Lấy ví dụ về số ngẫu nhiên trong các game RPG, khi nhân vật Level up thì sẽ tăng ngẫu nhiên các chỉ số: HP, sức mạnh, phòng thủ.... Hay hành động, phản ứng của đối phương trong game, chẳng hạn như chọn một hành động trong số những hành động có thể dùng trong tình huống lúc đó: tấn công vật lý, tấn công ma pháp, dùng Item, dùng kỹ năng đặc biệt...

    [​IMG]

    Các chỉ số của nhân vật được tăng ngẫu nhiên
    Lấy ví dụ chỉ số Hit biểu diễn khả năng đánh trúng mục tiêu của nhân vật. Khi chỉ số này bằng 0% hoặc 100% thì nó không còn là số ngẫu nhiên, nhưng khi nó nằm trong phạm vi ngoài hai con số này thì chỉ số này trở thành số ngẫu nhiên. Nhân vật có 90% cơ hội đánh trúng mục tiêu về bản chất cũng giống như nhân vật có 10% cơ hội đánh trúng mục tiêu, về bản chất chỉ là "trật" hoặc "trúng" và chỉ khác nhau ở cơ hội nhiều hay ít. Vậy khi Hit nằm trong khoảng 1% ~ 99% thì khi nào thì đánh trúng, khi nào thì đánh trật? Máy tính dựa vào cơ sở nào để phán đoán đòn đánh của nhân vật là trúng hay trật?

    II. Hai loại loạn số

    Người ta thường chia số ngẫu nhiên thành hai loại: số ngẫu nhiên thực (chân loạn số) và số ngẫu nhiên giả (nghĩ tự loạn số).

    Số ngẫu nhiên thực là con số mà quy tắc biến đổi mỗi lần lấy của nó nằm ngoài khả năng dự báo của con người, chẳng hạn như các yếu tố trong tự nhiên: độ nhiễu khí quyển, nhiệt tạp âm, tia vũ trụ,...

    Còn số ngẫu nhiên giả là số được sinh thành từ các thuật toán chính xác.
    Nếu như tính chất của số ngẫu nhiên thực là bất quy tắc và không thể tái hiện (khi đổ xí ngầu, ta không thể dựa vào mặt xí ngầu hiện tại để dự đoán lần đổ tiếp theo sẽ ra mặt nào) thì tính chất của số ngẫu nhiên giả là hoàn toàn có thể dự đoán được nếu như biết trước thuật toán sinh ra nó và nắm được các điều kiện sinh thành của nó, tuy rằng việc này cũng rất khó.

    Trong điều kiện bình thường thì không thể phán đoán một con số/dãy số ngẫu nhiên là thực hay giả và cũng rất khó để nói tính chất về mặt thống kê của số ngẫu nhiên thực khác với số ngẫu nhiên giả. Do vậy, ở mức độ người dùng thông thường thì khó để phân biệt hai loại loạn số này.


    III. Cách sinh thành


    Ta có hai cách sinh thành nên số ngẫu nhiên, ứng với hai loại thực và giả.
    Đối với số ngẫu nhiên thực, cách sinh thành cổ xưa nhất và vẫn được dùng đến ngày nay là đổ xí ngầu hay búng đồng xu, vòng quay roulette. Nhiều loại máy tính ngày nay cũng trang bị phần cứng có khả năng sinh thành số ngẫu nhiên như dùng cảm biến (sensor) đo lường các hiện tượng vật lý ngẫu nhiên như nhiệt tạp âm, vật chất phóng xạ do diod trong máy sinh ra và chuyển những tín hiệu đó thành con số.
    Đối với số ngẫu nhiên giả, người ta dùng các thuật toán chính xác, các phương pháp luận lý như phép dời bit để tạo ra. Các phương pháp tính toán này cũng mang lại hiệu quả cao như phương pháp đo lường các hiện tượng vật lý kể trên, tuy nhiên nó có nhược điểm là sau một thời gian thì sẽ thấy con số được lặp lại (chu kỳ lặp lại).

    IV. Ví dụ về cách sinh thành số ngẫu nhiên giả

    Mọi con số ngẫu nhiên giả đều được sinh thành từ một số khởi đầu gọi là "chủng tử" (seed, hạt giống). Một ví dụ thường thấy trong game RPG: nhân vật A khi level up có 40% cơ hội tăng HP, 30% cơ hội tăng sức mạnh và ta có thuật toán đơn giản như sau:

    1. Lập sẵn một bảng (table) gồm những con số từ 0 tới 100.
    2. Lấy chủng tử là con số biểu diễn vị trí ngang/dọc của đường quét (scanline) trên màn hình. Đường quét của các thiết bị điện tử có chu kỳ lặp lại cố định nhưng tại một thời điểm, mắt người và não người gần như không thể phán đoán được nó đang ở vị trí nào.
    3. Giới hạn chủng tử trong phạm vi 0 ~ 200. Màn hình các thiết bị ngày nay có độ phân giải cao, lượng điểm ảnh lớn nên vị trí ngang/dọc của đường quét sẽ vượt khỏi giới hạn 200.
    4. Giá trị của chủng tử là chỉ số trong bảng trên. Chẳng hạn, đường quét ở vị trí điểm ảnh thứ 63 thì số ngẫu nhiên được tạo thành lúc này là 63.
    5. Chia đôi giá trị của chủng tử, chỉ lấy phần nguyên, ta được 63/2=31.
    6. Cộng giá trị của chủng tử với 1 nếu giá trị này khác zero. Kết quả ta được 31+1 = 32.
    7. So sánh số ngẫu nhiên vừa tạo thành với cơ hội tăng các chỉ số của nhân vật:
    - Nếu số ngẫu nhiên lớn hơn cơ hội thì sẽ không tăng.
    - Nếu số ngẫu nhiên nhỏ hơn hoặc bằng cơ hội thì nhân vật được tăng.
    Trong ví dụ trên, nhân vật có 40% cơ hội tăng HP, 30% cơ hội tăng sức mạnh thì khi so sánh với số ngẫu nhiên 32 vừa được tạo thành, ta thấy chỉ số HP được tăng còn chỉ số sức mạnh thì không.

    Đó cũng là cách mà máy tính đánh giá một cú đánh trong phạm vi 1% ~ 99% là trúng hay trật mục tiêu. Và rõ ràng phần trăm cơ hội càng cao thì càng dễ đánh trúng.
    Trên đây chỉ là một ví dụ đơn giản về cách lấy số ngẫu nhiên. Có những phương pháp phức tạp hơn để tăng độ ngẫu nhiên, chẳng hạn như đem chủng tử thực hiện các phép toán luận lý, rồi cộng trừ nhân chia với giá trị của một vùng bộ nhớ biến thiên. Có những game dùng chủng tử là hằng số cho trước, lại có game dùng chủng tử là thời gian hiện tại và có game dùng chính giá trị nút bấm mà người chơi nhấn để làm điểm bắt đầu tính toán số ngẫu nhiên.

    [​IMG]

    Hình ảnh trên lấy từ game Darkwing Duck, đối phương sẽ rơi một món đồ ngẫu nhiên khi ta bắn trúng hắn. Game này sử dụng chủng tử là giá trị thời gian người chơi nhấn nút để tính toán số ngẫu nhiên, từ đó phán đoán cho kẻ địch rơi món đồ gì. Trong hình này, thời gian nhấn nút thay đổi thì món đồ rơi ra cũng thay đổi.


    V. Quan điểm Phật giáo và góc nhìn nhất nguyên

    Máy tính là một cỗ máy làm theo các mệnh lệnh một cách tuần tự, phân nhánh khi gặp các điều kiện nên nói một cách nghiêm mật thì khái niệm "ngẫu nhiên" không hề tồn tại đối với máy tính. Tất cả những gì nó làm là tuân theo các chỉ thị một cách trung thực. Nếu điều kiện như thế này thì sẽ cho kết quả thế kia. Tất cả mọi kết quả do máy tính xử lý đều có thể hiểu được một cách rõ ràng, rành mạch theo tinh thần nhân quả: vì có nguyên nhân thế này nên mới có kết quả thế kia.

    Xét về điểm này thì nguyên tắc hoạt động của máy tính giống với quan điểm của Phật giáo. Theo góc nhìn của tôn giáo này thì cuộc đời là một siêu máy tính, nó cho ra mọi kết quả dựa vào luật nhân quả. Nhân là ăn mặn thì quả là khát nước, đây là một thuật toán hết sức đơn giản mà cỗ máy cuộc đời sử dụng. Nhưng lắm khi cỗ máy này lại sử dụng những thuật toán tinh vi hơn, cho ra kết quả ăn mặn nhưng không khát nước, hoặc không ăn mặn vẫn khát nước. Điều này khiến con người hoài nghi về tính đúng sai của nhân quả khi người ta không hiểu rõ thuật toán mà cỗ máy cuộc đời đang áp dụng.

    Bên trên có đề cập đến hai loại số ngẫu nhiên. Với con số được sinh thành từ những dữ kiện mà loài người chưa nắm được quy tắc thì được xem là số ngẫu nhiên thực. Nhưng đến khi con người hiểu biết đầy đủ về các dữ kiện này thì số ngẫu nhiên thực sẽ trở thành số ngẫu nhiên giả. Chẳng hạn, người xưa xem việc mưa nắng là chuyện trời đất không thể lường trước (số ngẫu nhiên thực) nhưng ngày nay con người đã hiểu biết gần như đầy đủ về cơ chế sinh ra mưa nắng, có thể dự đoán được trong tương lai gần nên chuyện mưa nắng đã trở thành số ngẫu nhiên giả (do thuật toán của thiên nhiên sinh thành).

    Xét trong một phạm vi không thời gian nhỏ hẹp thì cái ngẫu nhiên là có tồn tại, nhưng xét rộng khắp thì ngẫu nhiên không hề tồn tại. Với khả năng hiện nay, con người vẫn chưa đo lường được sự biến thiên của tia vũ trụ nhưng khi có trí tuệ đầy đủ thì dữ kiện này sẽ không còn được coi là ngẫu nhiên nữa. Khi tung đồng xu thì mặt rơi xuống đất là sấp hay ngửa? Kết quả này phụ thuộc vào quá nhiều yếu tố chung quanh tác động tới như lực tung, hướng tung, hướng gió,... và vô số yếu tố khác mà con người chưa nắm được hết. Trong tương lai, khi hiểu thấu được hết các yếu tố tác động này thì ta sẽ dự báo được mặt nào của đồng xu sẽ chạm đất, và cái ngẫu nhiên tuyệt đối sẽ không còn là ngẫu nhiên nữa.

    Như vậy, có thể nói "ngẫu nhiên" là một từ đại diện cho sự vô tri của con người. Còn khi có trí tuệ soi chiếu thì người ta sẽ không còn nói đến ngẫu nhiên vì lúc đó đã thấu hiểu mọi hiện tượng được sinh thành ra sao, do đâu mà có. Không có may mắn, không có xui xẻo, tất cả đều do nguyên nhân mà tạo thành kết quả. Điều này có nghĩa là cuộc đời là một chuỗi kết quả của những nguyên nhân trong quá khứ, hay nói cách khác, mọi thể sống trong đời đều được lập trình theo những hướng đã định sẵn. Đó là thứ mà người ta gọi là "định mệnh".

    Nhưng ai đã lập trình nên mọi thứ này? Phật giáo phủ nhận vai trò của một đấng tối cao trong việc lập trình này, tức phủ nhận vai trò của programmer. Và nếu là như vậy thì mọi sự nỗ lực hay sa đọa đều không có ý nghĩa, vì kết quả đã được định sẵn từ trước. Không phải như vậy, nếu đã chấp nhận nhân quả, chấp nhận hiện tại là kết quả của quá khứ thì sẽ hiểu được tương lai là kết quả của hiện tại, mọi sự nỗ lực hay sa đọa đều mang lại những kết quả khác nhau. Nói cách khác, mọi thể sống trên đời là kết quả của những nguyên nhân từ trước, và chính nó cũng là nguyên nhân cho chính nó ở ngay khoảnh khắc sau đó.

    Thể sống là một đoạn code đặc biệt của cỗ siêu máy tính cuộc đời. Trong đó, đoạn code này được sinh thành từ những yếu tố điều kiện khác và chính nó cũng tạo ra những đoạn code có thể xem là "chính nó sau này". Đây cũng là một mục tiêu của con người trong việc xây dựng trí tuệ nhân tạo.
    Và dù thuật toán có phức tạp đến đâu thì máy tính và cuộc đời cũng đều hoạt động trên một nguyên tắc đơn giản: nếu ABC thì XYZ.
     
    Chỉnh sửa cuối: 31/10/16
  2. crusher12345

    crusher12345 T.E.T.Я.I.S Lão Làng GVN

    Tham gia ngày:
    5/7/11
    Bài viết:
    688
    ...bài viết hay đấy nhưng có nhầm box không vậy ông già?
     
  3. iou84

    iou84 Youtube Master Race

    Tham gia ngày:
    31/7/09
    Bài viết:
    8
    Bác viết hay quá, sao ko đăng báo đê?
     
  4. dow40ksm

    dow40ksm C O N T R A

    Tham gia ngày:
    29/4/12
    Bài viết:
    1,565
    hay quá bác ơi :(
     
  5. Hoursea

    Hoursea Mayor of SimCity Lão Làng GVN

    Tham gia ngày:
    31/12/09
    Bài viết:
    4,315
    Hồi trước đã có thắc mắc: ngẫu nhiên mà máy tính sinh ra từ đâu? nếu là từ những thông số đặc trưng của máy như ngày sản xuất, số series,... rồi từ đó qua hàng loạt các phép tính phức tạp để có số "ngẫu nhiên" thì nó không hẳn là ngẫu nhiên vì nếu biết các thông số và các phép tính đó thì sẽ biết được chính xác số đó là gì trong lần chạy này.
    Thanks, bài viết rất bổ ích.
     
  6. pow

    pow Let Us Cling Together

    Tham gia ngày:
    17/9/05
    Bài viết:
    5,512
    Nơi ở:
    Valeria
    Nếu ai đã chơi FE4 dùng save state sẽ rất dễ nhận thấy nó thay đổi seed mỗi turn. Nếu bạn dùng A giết X, B giết Y, C giết Z thì bạn sẽ thấy nếu load state lại bao nhiêu lần mà bạn đi đúng theo lượt như thế sẽ thấy kết quả là y như nhau, nếu đánh trúng thì lần nào cũng trúng, nếu trượt thì lần nào cũng trượt. Nếu lên level thì chỉ số tăng lên là y hệt nhau. Để tránh điều này bắt buộc phải đổi thứ tự các action thành A giết Y, B giết X và C giết Z chẳng hạn, khi đó kết quả mới khác đi. Cái này khác hẳn với FE1,2, mỗi battle cái hit/crit là một số khác nhau, cái điểm khi lên level cũng khác nhau sau mỗi lần load state.
     
  7. asm65816

    asm65816 Mega Man

    Tham gia ngày:
    23/5/09
    Bài viết:
    3,320
    Nơi ở:
    El Sallia
    Đúng rồi. Ngoài FE4 thì một số game khác như SRW4 cũng dùng seed cố định kiểu này, đã đánh trật thì save load bao nhiêu lần cũng trật. Những game như FE3 thì seed lấy từ những nguồn động như vị trí scanline nên mỗi lần save load là kết quả khác nhau.
     
  8. longakka

    longakka Đầu gấu nhà quê

    Tham gia ngày:
    3/9/02
    Bài viết:
    3,011
    Nơi ở:
    Scumm Bar
    tụi nó dùng timetick làm seed nhưng các trình giả lập luôn lưu cả tick vào save thành ra seed không đổi
    chơi bằng máy chính hãng thì ko bị đâu
     
  9. dark_slayer_83

    dark_slayer_83 Long Phụng Hòa Minh Moderator Lão Làng GVN

    Tham gia ngày:
    19/4/02
    Bài viết:
    16,597
    Bậy. Chơi bằng máy console vẫn bị nhé. Nhưng chỉ cần thay đổi 1 nhân tố bất kỳ sẽ k bị nữa
     
  10. Chronos

    Chronos Chrono Trigger/Cross Lão Làng GVN

    Tham gia ngày:
    12/10/08
    Bài viết:
    6,953
    Cái này giống hiệu ứng cánh bướm nhỉ , chỉ cần thay đổi một nhân tố cực nhỏ cũng ảnh hưởng đến kết quả :))
     
  11. Moe~~~

    Moe~~~ You Must Construct Additional Pylons Lão Làng GVN

    Tham gia ngày:
    24/11/08
    Bài viết:
    8,507
    Chính vì máy tính không thể tạo được RNG do nó chỉ có thể hiểu đúng hoặc sai, nên các phần mềm tạo semi-RNG nó mới đắt giá.

    Game bây giờ đa phần cũng toàn xài các thuật toán này để làm RNG thôi (Phức tạp hay không tuỳ tiền/trình độ) chứ RNG theo kiểu seeding là chỉ có mấy game thời xưa mới hay có.
     
  12. hiepbg

    hiepbg Youtube Master Race

    Tham gia ngày:
    31/8/06
    Bài viết:
    74
    Nó có công thức toán học để tạo ra số ngẫu nhiên mà :D
     
  13. dark_slayer_83

    dark_slayer_83 Long Phụng Hòa Minh Moderator Lão Làng GVN

    Tham gia ngày:
    19/4/02
    Bài viết:
    16,597
    Đọc cái đoạn nhân quả thấy giống Vô hạn khủng bố quá
     
  14. asm65816

    asm65816 Mega Man

    Tham gia ngày:
    23/5/09
    Bài viết:
    3,320
    Nơi ở:
    El Sallia
    Ahihi không biết "vô hạn khủng bố" là cái gì luôn (*)
     
  15. Lindsaylohan

    Lindsaylohan Mr & Ms Pac-Man

    Tham gia ngày:
    16/7/05
    Bài viết:
    106
    Nơi ở:
    TP Hồ Chí Minh
    Mọi điều trên đời, đều có nhân quả..
    Hãy sống cho trọn tình trọn nghĩa với nhau :(
     
  16. SOZUOKA

    SOZUOKA The Pride of Hiigara Lão Làng GVN

    Tham gia ngày:
    11/11/04
    Bài viết:
    9,108
    Nơi ở:
    Neverland
    Như Dota 2 thì có khái niệm là Pseudo-RNG nữa, tức là VD một skill có tỉ lệ là 50% tung ra được thì ở lần đầu cast skill đó thì tỉ lệ ra chiêu thành công nhỏ hơn mức 50% (chẳng hạn như 20%), nếu như lần đầu không ra thành công thì lần sau sẽ tăng tỉ lệ lên (thành 45% chẳng hạn), cho tới khi nào ra chiêu thành công thì mới reset lại từ đầu. Cơ chế này đảm bảo là khi số lần cast skill đủ nhiều thì tỉ lệ ra ra skill thành công ở sát mức 50%, thay vì dùng kiểu True RNG (tức là mỗi lần dùng skill đều tính tỉ lệ riêng biệt) dễ gây ức chế vì có lúc liên tục ra thành công, có lúc thì mãi không ra được phát nào :)) Cái này có lẽ là khá quan trọng trong các tựa game mang tính đối kháng cao, vì việc quá phụ thuộc vào tính may rủi có thể làm giảm đi độ hào hứng khi chơi/trải nghiệm.
     
  17. dark_slayer_83

    dark_slayer_83 Long Phụng Hòa Minh Moderator Lão Làng GVN

    Tham gia ngày:
    19/4/02
    Bài viết:
    16,597
    1 truyện xuyên không hại não của lũ khựa thôi nhưng hay
     
  18. squall-leonheart

    squall-leonheart The Warrior of Light Lão Làng GVN

    Tham gia ngày:
    18/6/05
    Bài viết:
    2,299
    Nơi ở:
    WelcomeTo Ca Mau
    giả lập, chức năng quick save sẽ tính toán giúp bạn :D
     
  19. Moe~~~

    Moe~~~ You Must Construct Additional Pylons Lão Làng GVN

    Tham gia ngày:
    24/11/08
    Bài viết:
    8,507
    Mấy cái RNG mà là kết quả của "thuật toán" đều gọi chung là pseudo-RNG hết.

    Lão asm dịch xài chữ Hán nhiều nên hơi khó hiểu thôi.
     
  20. thmn1234

    thmn1234 Youtube Master Race Lão Làng GVN

    Tham gia ngày:
    15/7/10
    Bài viết:
    15
    Vậy rốt cuộc chưa bao giờ có ngẫu nhiên chân chính cả à :(game)
    Mà cho mình hỏi: "nghĩ tự loạn số" thì "nghĩ tự" có phải là "bắt chước cho giống" không?
     

Chia sẻ trang này