[Beginner-Intermediate] Random number
+2
Kevin Blaze Coolerz
zebrakelabu
6 posters
Halaman 1 dari 1
[Beginner-Intermediate] Random number
DISCUSSION MOVED TO NEW FORUM:
http://gmindo.web.id/forum/showthread.php?tid=118
Bilangan acak atau random dibutuhkan sekali dalam pembuatan game, untuk memberikan variasi dst. Dan di GML ada beberapa fungsinya. Let's check some of these random functions out
Fungsi random();
Hasilnya adalah bilangan random antara 0 dan 10 tapi TIDAK PERNAH 10, sehingga range nya adalah antara 0 sampai 9.9999999 tidak terbatas.
Satu lagi adalah hasil aktualnya adalah bilangan real, lengkap dengan beberapa digit dibelakang koma. Untuk benar2 mendapatkan angka bulat atau sering disebut integer kita harus menggunakan fungsi irandom() atau membulatkannya.
Tentang pembulatan, ada 2 fungsi utama yaitu floor() dan ceil()
sedangkan kalau pake ceil(), atau pembulatan keatas
Tidak seperti floor() yang konsisten dengan hasil random , tidak demikian dengan ceil(). Fungsi ceil() di code diatas akan mengikutsertakan hasil 10. Jadi hasilnya beda yah, dan kecuali memang maunya begini, menurutku lebih baik kita hanya menggunakan floor() karena lebih konsisten dengan tujuan awal random . ingat fungsi random di contoh tidak pernah menghasilkan angka bulat 10, jadi penggunaan ceil() akan memberikan hasil beda dengan tujuan awal random.
random_get_seed(), random_set_seed(), dan randomize()
Algoritma bilangan acak di GML (dan di semua bahasa pemrograman) menggunakan suatu acuan untuk bisa menghasilkan bilangan yang "kelihatannya" acak. Acuan ini disebut sebagai "seed" atau benih. Nah yang unik adalah bilangan "benih" ini bisa kita ambil dengan menggunakan fungsi random_get_seed(). Dan bila kita menginginkan suatu kondisi acak dengan kondisi yang konsisten antar komputer, kita bisa set benihnya dengan perintah random_set_seed(). Hasilnya adalah suatu kondisi acak yang konsisten antar komputer. Acak tapi konsisten GML men set initial seed yang sama di setiap awal game, gunanya adalah untuk kemudahan proses debugging.
Tapi mungkin bukan ini yang kita inginkan, kita mau bener2 acak tanpa bisa terlacak lagi? Disinilah fungsi randomize() berguna. Taruhlah fungsi randomize() di awal, maka bisa dipastikan fungsi2 random akan memberi hasil yang acak antar komputer.
Aku pernah baca di GMC kalau ada user yang bisa membongkar algoritma bilangan acak GML. Hmmm jadi ngga acak dong? Memang ngga, dan mungkin kondisi true random system memang tidak akan pernah bisa tercapai.
Tanggapan ato tambahan silakan
http://gmindo.web.id/forum/showthread.php?tid=118
Bilangan acak atau random dibutuhkan sekali dalam pembuatan game, untuk memberikan variasi dst. Dan di GML ada beberapa fungsinya. Let's check some of these random functions out
Fungsi random();
- Code:
var i;
i=random(10)
Hasilnya adalah bilangan random antara 0 dan 10 tapi TIDAK PERNAH 10, sehingga range nya adalah antara 0 sampai 9.9999999 tidak terbatas.
Satu lagi adalah hasil aktualnya adalah bilangan real, lengkap dengan beberapa digit dibelakang koma. Untuk benar2 mendapatkan angka bulat atau sering disebut integer kita harus menggunakan fungsi irandom() atau membulatkannya.
Tentang pembulatan, ada 2 fungsi utama yaitu floor() dan ceil()
- Code:
i=floor(random(10));
// hasil adalah 0 - 9
sedangkan kalau pake ceil(), atau pembulatan keatas
- Code:
i=ceil(random(10));
// hasilnya adalah 0 - 10
Tidak seperti floor() yang konsisten dengan hasil random , tidak demikian dengan ceil(). Fungsi ceil() di code diatas akan mengikutsertakan hasil 10. Jadi hasilnya beda yah, dan kecuali memang maunya begini, menurutku lebih baik kita hanya menggunakan floor() karena lebih konsisten dengan tujuan awal random . ingat fungsi random di contoh tidak pernah menghasilkan angka bulat 10, jadi penggunaan ceil() akan memberikan hasil beda dengan tujuan awal random.
random_get_seed(), random_set_seed(), dan randomize()
Algoritma bilangan acak di GML (dan di semua bahasa pemrograman) menggunakan suatu acuan untuk bisa menghasilkan bilangan yang "kelihatannya" acak. Acuan ini disebut sebagai "seed" atau benih. Nah yang unik adalah bilangan "benih" ini bisa kita ambil dengan menggunakan fungsi random_get_seed(). Dan bila kita menginginkan suatu kondisi acak dengan kondisi yang konsisten antar komputer, kita bisa set benihnya dengan perintah random_set_seed(). Hasilnya adalah suatu kondisi acak yang konsisten antar komputer. Acak tapi konsisten GML men set initial seed yang sama di setiap awal game, gunanya adalah untuk kemudahan proses debugging.
Tapi mungkin bukan ini yang kita inginkan, kita mau bener2 acak tanpa bisa terlacak lagi? Disinilah fungsi randomize() berguna. Taruhlah fungsi randomize() di awal, maka bisa dipastikan fungsi2 random akan memberi hasil yang acak antar komputer.
Aku pernah baca di GMC kalau ada user yang bisa membongkar algoritma bilangan acak GML. Hmmm jadi ngga acak dong? Memang ngga, dan mungkin kondisi true random system memang tidak akan pernah bisa tercapai.
Tanggapan ato tambahan silakan
Terakhir diubah oleh zebrakelabu tanggal Fri 16 May 2014, 22:48, total 1 kali diubah
Re: [Beginner-Intermediate] Random number
skedar tambahan untuk floor() dan ceil()
floor = ambil bilangan bulat ke bawah (3.5 jadi 3)
ceil = ambil bilangan bulat ke atas (3.5 jadi 4)
mudah kok menbedakan floor & ceil, ingat aja kalo floor itu kan artinya lantai, & lantai ada di bawah (kcuali loteng )
utk trit ny ak acungi jempol
floor = ambil bilangan bulat ke bawah (3.5 jadi 3)
ceil = ambil bilangan bulat ke atas (3.5 jadi 4)
mudah kok menbedakan floor & ceil, ingat aja kalo floor itu kan artinya lantai, & lantai ada di bawah (kcuali loteng )
utk trit ny ak acungi jempol
Re: [Beginner-Intermediate] Random number
nice share
btw aku pengen ngeshare artikel tentang algoritma pembangkit bilangan acak,
[Edit] udah dibikin tritnya: https://gmindo.forumid.net/t294-pseudo-random-number-generator
sekedar pengetahuan, algoritma pembangkit bilangan acak yang sering dipakai dalam game dan simulasi disebut Linear Congruential Generator (LCG). itu termasuk algoritma yang paling lemah karena lebih mudah dibobol dibandingkan jenis lain
btw aku pengen ngeshare artikel tentang algoritma pembangkit bilangan acak,
[Edit] udah dibikin tritnya: https://gmindo.forumid.net/t294-pseudo-random-number-generator
sekedar pengetahuan, algoritma pembangkit bilangan acak yang sering dipakai dalam game dan simulasi disebut Linear Congruential Generator (LCG). itu termasuk algoritma yang paling lemah karena lebih mudah dibobol dibandingkan jenis lain
Asuna- Global Moderator
-
Jumlah posting : 1711
Points : 1901
Join date : 10.01.13
Re: [Beginner-Intermediate] Random number
@asuna
weh mantap sip sip
@kevin
iya lupa aku nambahin. fungsi floor() itu pembulatan ke bawah, ceil() itu pembulatan ke atas thanks udah nambahin yah
weh mantap sip sip
@kevin
iya lupa aku nambahin. fungsi floor() itu pembulatan ke bawah, ceil() itu pembulatan ke atas thanks udah nambahin yah
RE:
Bro, gw kurang ngerti maksudnya random_set_seed, bisa jelasin lagi ga? Kalo bisa kasih contoh dan hasilnya, tapi jangan pake spoiler, biar keliatan lewat hp
Terakhir diubah oleh Zihad Rizky Edwin Fikri tanggal Mon 14 Oct 2013, 21:40, total 1 kali diubah (Reason for editing : tambahin)
Zihad Rizky Edwin Fikri- GM Beginner
-
Jumlah posting : 409
Points : 431
Join date : 12.05.13
Age : 26
Lokasi : jaktim
Re: [Beginner-Intermediate] Random number
Create event:
- Code:
random_set_seed(12345678)
show_message(random(10))
show_message(random(10))
show_message(random(10))
show_message(random(10))
show_message(random(10))
Re: [Beginner-Intermediate] Random number
Oh gitu ternyata, ywd makasih bro
Zihad Rizky Edwin Fikri- GM Beginner
-
Jumlah posting : 409
Points : 431
Join date : 12.05.13
Age : 26
Lokasi : jaktim
Re: [Beginner-Intermediate] Random number
Kalau mau random dari 7-10 gimana ya?
kalau ceil ama floor kan jadinya 1-10?
kalau ceil ama floor kan jadinya 1-10?
adityaandar- Newbie
-
Jumlah posting : 17
Points : 18
Join date : 19.02.13
Re: [Beginner-Intermediate] Random number
^
random_range(7,10)
random_range(7,10)
Asuna- Global Moderator
-
Jumlah posting : 1711
Points : 1901
Join date : 10.01.13
Re: [Beginner-Intermediate] Random number
@zebrakelabu
bisa juga irandom_range(7,10) untuk integer, tapi untuk floating point as I said before...
hmm mungkin gara2 pertanyaannya adityaandar agak fuzzy sih, ane kira random bilangan floating point (secara umum)
bisa juga irandom_range(7,10) untuk integer, tapi untuk floating point as I said before...
hmm mungkin gara2 pertanyaannya adityaandar agak fuzzy sih, ane kira random bilangan floating point (secara umum)
Asuna- Global Moderator
-
Jumlah posting : 1711
Points : 1901
Join date : 10.01.13
Similar topics
» [Beginner-Intermediate] Object dan instance
» [Beginner-Intermediate] String
» [Beginner-Intermediate] file_find()
» [Beginner-Intermediate] GMS Array Function
» [Beginner - Intermediate] Script + Argument
» [Beginner-Intermediate] String
» [Beginner-Intermediate] file_find()
» [Beginner-Intermediate] GMS Array Function
» [Beginner - Intermediate] Script + Argument
Halaman 1 dari 1
Permissions in this forum:
Anda tidak dapat menjawab topik