Sejarah algoritma pengacakan Tetris

gambar
Pada tahun 1985, Alexey Pajitnov dan Vadim Gerasimov merilis Tetris. Gim yang menarik dan sangat adiktif ini mengharuskan pemain untuk menyambung bagian yang muncul secara acak . Sejak itu, lebih dari 150 versi Tetris berlisensi telah dirilis. Berbeda dalam mode permainan, aturan, dan implementasi, mereka semua bermain sedikit (atau sangat) berbeda. Tetris randomizer adalah fungsi yang mengembalikan bentuk yang dipilih secara acak. Selama bertahun-tahun, aturan untuk memilih bentuk telah berevolusi, memengaruhi permainan dan keacakan itu sendiri. Beberapa algoritma ini telah direkayasa balik dan didokumentasikan. Saya telah menyusun daftar pengacak yang saya anggap penting, dan saya akan menunjukkan dalam artikel bagaimana struktur internal Tetris telah berubah selama bertahun-tahun.

Tetris (c. 1985)


Versi Tetris pertama dan asli memiliki pengacak tanpa bias. Tidak ada yang mempengaruhi pilihan figur berikutnya, itu hanya dipilih dan ditunjukkan kepada pemain.

Ketika menggunakan pengacak tanpa perpindahan, muncul situasi di mana pemain menerima urutan satu sosok (disebut "banjir", banjir) atau urutan di mana tidak ada sosok tertentu (disebut "kekeringan", kekeringan). Kita akan melihat bagaimana perancang versi Tetris yang berbeda mencoba sedikit merapikan masalah ini.

Meskipun pengacak tanpa bias menciptakan kompleksitas puzzle terbesar untuk pemain, itu tidak stabil dan dapat menyebabkan urutan yang tak terkalahkan (PDF) . Namun, ini tidak terjadi dalam permainan nyata, karena komputer tidak memiliki generator nomor acak yang sebenarnya. Pseudorandom number generator (PRNGs) mencoba mensimulasikan keacakan yang sebenarnya, tetapi tidak memiliki properti yang dapat menghasilkan dalam 70 ribu baris bentuk Z.

Keacakan semu yang benar


function* random() { const pieces = ['I', 'J', 'L', 'O', 'S', 'T', 'Z']; while (true) { yield pieces[Math.floor(Math.random() * pieces.length)]; } } 

Kesulitan puzzle: 4/5

Pencegahan Banjir: 0/5

Pencegahan Kekeringan: 0/5

Tetris , Nintendo (1989)


Empat tahun kemudian, versi Tetris for NES yang sangat populer dirilis .

Untuk mengurangi jumlah banjir (pengulangan) angka, pemeriksaan riwayat telah ditambahkan ke pengacak. Pemeriksaan sederhana ini melakukan hal berikut:

  1. pilih gambar
  2. memeriksa apakah angkanya cocok dengan yang sebelumnya,
  3. jika demikian, maka algoritme memilih bentuk baru, tetapi hanya sekali,
  4. dan apa pun hasilnya, angka itu diberikan kepada pemain.

Meskipun kemungkinan mendapatkan satu bagian berturut-turut menurun, tidak ada yang mencegah permainan mengeluarkan dua bolak-balik. Selain itu, dalam versi ini, kekeringan lebih dari 30 angka adalah situasi yang sering terjadi. Kekeringan dapat terjadi untuk semua jenis tetramino, tetapi figur I penting untuk mencetak gol dalam permainan ini, dan kekeringan hebatnya dapat secara signifikan mempengaruhi skor akhir.

Menghafal cerita 1 angka secara mendalam dan dengan 1 lemparan


 function* historyRandomizer() { const pieces = ['I', 'J', 'L', 'O', 'S', 'T', 'Z']; let history; while (true) { // First "roll" piece = pieces[Math.floor(Math.random() * pieces.length)]; // Roll is checked against the history if (piece === history) { piece = pieces[Math.floor(Math.random() * pieces.length)]; } history = piece; yield piece; } } 

Kesulitan puzzle: 5/5

Pencegahan Banjir: 2/5

Pencegahan Kekeringan: 0/5

Tetris: The Grand Master (1998)


Meskipun Tetris untuk NES meningkatkan algoritma dibandingkan dengan pengacakan tanpa bias, kekeringan di dalamnya masih sering terjadi. Tetris: Grand Master ( TGM ) pada dasarnya menggunakan sistem yang sama, tetapi dengan sejarah yang lebih panjang dan lebih banyak lemparan.

Karena peningkatan nilai-nilai ini, tidak hanya jumlah banjir berkurang, tetapi situasi dengan kekeringan juga membaik. Empat tokoh dilestarikan dalam sejarah, dan ini berarti bahwa probabilitas untuk memperoleh sosok yang sudah tidak ada sejak lama meningkat. Meskipun demikian, permainan masih tidak memiliki aturan ketat untuk mencegah kekeringan dan mereka masih terjadi, meskipun jauh lebih jarang daripada di Tetris untuk NES .

Menghafal sebuah cerita dengan 4 buah dan 4 lemparan


 function* historyRandomizer() { const pieces = ['I', 'J', 'L', 'O', 'S', 'T', 'Z']; // First piece special conditions let piece = ['I', 'J', 'L', 'T'][Math.floor(Math.random() * 4)]; yield piece; let history = ['S', 'Z', 'S', piece]; while (true) { for (let roll = 0; roll < 4; ++roll) { piece = pieces[Math.floor(Math.random() * 7)]; if (history.includes(piece) === false) break; } history.shift(); history.push(piece); yield piece; } } 

Kesulitan puzzle: 4/5

Pencegahan Banjir: 4/5

Pencegahan Kekeringan: 2/5

Tetris Worlds et on (2001)



Tetris Worlds memperkenalkan massa ke generator acak. Dia sekarang menjadi pengacak resmi, dalam sebagian besar versi resmi game setelah Tetris Worlds, dan hingga hari ini dia digunakan.

Pengacak berbasis sejarah membantu menyingkirkan banjir (atau setidaknya menguranginya), tetapi tidak menghentikan kekeringan. Dalam kondisi tertentu, masih ada kemungkinan mendapatkan urutan angka yang mematikan.

Generator acak (Random Generator) memecahkan masalah ini melalui penggunaan sistem baru "tas" (tas). Dalam sistem ini, daftar gambar ditempatkan dalam "tas", setelah itu angka-angka diekstraksi secara acak satu demi satu sampai "tas" kosong. Ketika kosong, potongan kembali ke sana dan proses berulang. Generator Acak memiliki "tas" ukuran 7 (7-tas), yaitu, "kantong" diisi dengan masing-masing 7 tetraminos. Jenis "tas" lain dimungkinkan, misalnya 14 tas, di mana dua potong setiap jenis tetramino ditempatkan.

Karena kurangnya sejarah "tas", banjir dari 2 angka dan "ular" dari 4 angka dapat terjadi di persimpangan mereka ( , dll.) Artinya, dalam arti tertentu, ini adalah langkah mundur dibandingkan dengan Tetris tradisional untuk SEN .

Potongan-potongan keluar dari 7-tas secara stabil, yang membuatnya lebih mudah diprediksi. Sangat mudah untuk memahami bagian "tas" tempat Anda berada, dan kapan sosok yang Anda butuhkan bisa muncul. Karena prediktabilitas generator keacakan ini, permainan sebenarnya dapat dimainkan tanpa akhir . Secara umum, ini adalah sistem yang sangat bodoh, dan tidak jelas bagaimana umumnya menjadi pengacak resmi.

7-tas


 function* randomGenerator() { let bag = []; while (true) { if (bag.length === 0) { bag = ['I', 'J', 'L', 'O', 'S', 'T', 'Z']; bag = shuffle(bag); } yield bag.pop(); } } 

Kesulitan puzzle: 3/5

Pencegahan Banjir: 3/5

Pencegahan Kekeringan: 4/5

Tetris: The Grand Master 3 - Terror-Instinct (2005)


TGM3 telah sangat maju gagasan menghasilkan keacakan. Ini adalah sistem unik yang tidak ditemukan dalam versi lain.

Alih-alih tas atau cerita, TGM3 menggunakan kumpulan bentuk. Awalnya, ia memiliki 5 angka dari setiap jenis, yaitu total 35 angka. Ketika sebuah figur ditarik, itu tidak dikeluarkan dari kolam, tetapi digantikan oleh figur dengan kekeringan terbesar (yang belum dihapus untuk waktu yang lama). Berangsur-angsur, kolam semakin dipenuhi dengan sosok ini sampai akhirnya ditarik keluar. Ini memecahkan masalah sistem "tas", serta sistem dengan sejarah; dia mengambil yang terbaik dari kedua jenis pengacakan.

Kelompok 35 angka dengan 6 lemparan


 function* tgm3Randomizer() { let pieces = ['I', 'J', 'L', 'O', 'S', 'T', 'Z']; let order = []; // Create 35 pool. let pool = pieces.concat(pieces, pieces, pieces, pieces); // First piece special conditions const firstPiece = ['I', 'J', 'L', 'T'][Math.floor(Math.random() * 4)]; yield firstPiece; let history = ['S', 'Z', 'S', firstPiece]; while (true) { let roll; let i; let piece; // Roll For piece for (roll = 0; roll < 6; ++roll) { i = Math.floor(Math.random() * 35); piece = pool[i]; if (history.includes(piece) === false || roll === 5) { break; } if (order.length) pool[i] = order[0]; } // Update piece order if (order.includes(piece)) { order.splice(order.indexOf(piece), 1); } order.push(piece); pool[i] = order[0]; // Update history history.shift(); history[3] = piece; yield piece; } } 

Kesulitan puzzle: 4/5

Pencegahan Banjir: 4/5

Pencegahan Kekeringan: 4/5

Kesimpulan


Sulit untuk menarik hasil yang pasti. Pengacak TGM3 tampaknya lebih mudah diprediksi dan kurang kompleks untuk pemain. 7-bag canggung terasa tidak alami, tetapi memungkinkan Anda untuk membuat banyak strategi membangun yang stabil. Pengacak yang tidak ramah, seperti di Tetris for NES, dapat merusak permainan Anda, atau, lebih mungkin, suasana hati Anda untuk bermain.

Bisakah kita memperbaiki sistem ini dengan membuatnya tampak lebih acak, dan dengan menempatkan pembatasan parah pada kekeringan dan banjir? Atau apakah pembatasan ketat seperti itu hanya membuat game lebih mudah diprediksi?

Source: https://habr.com/ru/post/id466579/


All Articles