8
Pemrosesan String
String adalah serangkaian karakter yang diperlakukan sebagai satu kesatuan. Anda dapat menulis program untuk menggabungkan, membandingkan, mengurutkan, mengenkripsi, dan memanipulasi string.
Berikut yang akan Anda pelajari dalam bab ini:
• Bagaimana Scratch menyimpan string
• Cara menggunakan blok manipulasi string yang tersedia di Scratch
• Beberapa teknik pemrosesan string
• Cara menulis program menarik yang memproses string
Kita akan mulai dengan melihat secara detail tipe data string, dan kemudian kita akan menulis prosedur untuk mengelola dan memanipulasi string. Prosedur tersebut akan menghapus dan mengganti karakter, menyisipkan dan mengekstrak substring, dan mengacak urutan karakter. Setelah itu, kita akan menggunakan prosedur ini dan menerapkan teknik ini untuk menulis beberapa aplikasi yang menyenangkan dan praktis.
Mengulas Kembali Tipe Data String
Seperti yang saya sebutkan di Bab 5, Scratch memiliki tiga tipe data: Boolean, angka, dan string. Pada dasarnya, string hanyalah urutan karakter yang teratur.
Karakter-karakter ini dapat mencakup huruf (baik huruf besar maupun kecil), angka, dan simbol lain yang dapat Anda ketik di keyboard Anda (+, -, &, @, dan seterusnya).
Anda dapat menggunakan string dalam program Anda untuk menyimpan nama, alamat, nomor telepon, judul buku, dan banyak lagi.
Di Scratch, karakter-karakter dalam sebuah string disimpan secara berurutan. Misalnya, jika Anda memiliki variabel bernama name, menjalankan perintah set name to Karen akan menyimpan karakter-karakter seperti yang diilustrasikan pada Gambar 8-1.
Gambar 8-1: Sebuah string disimpan sebagai urutan karakter.
Anda dapat mengakses karakter individual dari sebuah string dengan operator letter of.
Misalnya, blok letter 1 dari name mengembalikan huruf K, dan letter 5 dari name mengembalikan huruf n. Scratch juga menyediakan operator length of, yang mengembalikan jumlah karakter dalam sebuah string. Jika Anda menggunakan kedua operator ini dengan blok repeat, Anda dapat menghitung karakter, memeriksa beberapa karakter, dan melakukan banyak hal berguna lainnya, seperti yang akan saya demonstrasikan di subbagian berikut.
Menghitung Karakter Khusus dalam Sebuah String
Contoh skrip pertama kami, yang ditunjukkan pada Gambar 8-2, menghitung berapa banyak huruf vokal yang ada dalam sebuah string masukan. Skrip ini meminta pengguna untuk memasukkan sebuah string, kemudian menghitung dan menampilkan jumlah huruf vokal dalam string tersebut.
Gambar 8-2: Program penghitung huruf vokal
Program ini memeriksa setiap huruf dalam string input satu per satu dan mencari huruf vokal. Setiap kali menemukan huruf vokal, variabel bernama vowelCount akan bertambah 1. Skrip menggunakan variabel bernama pos (singkatan dari position) untuk melacak posisi karakter yang sedang diperiksa. Mari kita jelajahi skrip ini lebih detail.
Pertama, skrip meminta pengguna untuk memasukkan kalimat u. Scratch harus menyimpan string pengguna secara otomatis dalam variabel jawaban bawaan. Kemudian, ia mengatur vowelCount menjadi 0 (karena belum menemukan huruf vokal) dan mengatur pos menjadi 1 untuk mengakses huruf pertama dari string input.
Selanjutnya, loop pengulangan v memeriksa setiap huruf dalam string input. Operator length melaporkan jumlah karakter dalam string input, yaitu berapa kali loop harus diulang. Pada setiap putaran, loop menggunakan ch (singkatan dari character) untuk memeriksa satu karakter dari string input w. Pada iterasi pertama loop, ch diatur ke huruf pertama dari jawaban. Iterasi kedua menetapkan ch ke huruf kedua, dan dan seterusnya, hingga loop mencapai akhir string. Variabel pos digunakan untuk mengakses karakter yang diinginkan. Blok if kemudian memeriksa apakah karakter yang diperiksa adalah huruf vokal x. Jika karakter tersebut adalah huruf vokal, baik huruf besar maupun kecil, vowelCount akan ditambah 1. Setelah memeriksa satu karakter, loop menambah pos sebesar 1 y dan dimulai kembali untuk membaca karakter berikutnya. Ketika semua huruf dalam string input telah diperiksa, loop berakhir, dan program menampilkan jumlah huruf vokal yang dihitung menggunakan blok say.
Teknik yang digunakan dalam contoh ini akan diterapkan berkali-kali di sisa bab ini. Muat skrip VowelCount.sb2, jalankan beberapa kali, dan pastikan Anda memahaminya secara menyeluruh. Membandingkan Karakter String Contoh kedua kita memeriksa apakah bilangan bulat yang dimasukkan oleh pengguna adalah palindrom. Palindrom adalah angka (atau string teks) yang dibaca sama dari depan dan belakang. Misalnya, 1234321 dan 1122332211 adalah angka palindrom. Demikian pula, Racecar, Hannah, dan Bob adalah beberapa angka palindrom. Untuk mengilustrasikan algoritma pengujian palindrom kita, misalkan angka masukannya adalah 12344321, seperti yang diilustrasikan pada Gambar 8-3.
Gambar 8-3: Menggunakan dua variabel untuk memeriksa apakah suatu angka adalah palindrom atau bukan
Untuk memeriksa apakah suatu angka adalah palindrom, kita perlu membandingkan digit pertama dan kedelapan, digit kedua dan ketujuh, digit ketiga dan keenam, dan seterusnya. Jika ada perbandingan yang menghasilkan hasil yang salah (artinya kedua digit tersebut tidak sama), maka angka tersebut bukan palindrom. Sebuah program yang mengimplementasikan algoritma pengujian palindrom ini ditunjukkan pada Gambar 8-4.
Gambar 8-4: Program ini menguji apakah bilangan bulat yang dimasukkan oleh pengguna adalah palindrom.
Skrip mengakses angka-angka yang akan dibandingkan dengan dua variabel (pos1 dan pos2 pada Gambar 8-3) yang bergerak berlawanan arah. Variabel pertama (pos1) dimulai dari angka pertama dan bergerak maju, sedangkan variabel kedua (pos2) dimulai dari angka terakhir dan bergerak mundur. Jumlah perbandingan yang dibutuhkan paling banyak setengah dari jumlah angka dalam angka masukan. Dengan masukan 12344321, kita membutuhkan paling banyak empat perbandingan karena angka masukan memiliki delapan angka. (Logika yang sama berlaku jika bilangan bulat masukan memiliki jumlah angka ganjil, karena angka di tengah bilangan tidak perlu dibandingkan.) Setelah program menentukan apakah angka pengguna merupakan palindrom atau bukan, program akan menampilkan pesan dengan hasilnya.
Cobalah 8-1
Muat Palindrome.sb2 dan jalankan untuk memahami cara kerjanya. Karena cara Scratch menangani jumlah pengulangan desimal, jika angka masukan memiliki jumlah digit ganjil, skrip akan melakukan satu perbandingan tambahan dari dua digit yang mengelilingi digit tengah. Cobalah untuk memperbaiki program agar melakukan jumlah pengulangan yang benar ketika angka masukan memiliki jumlah digit ganjil.Program ini memeriksa setiap huruf dalam string input satu per satu dan mencari huruf vokal. Setiap kali menemukan huruf vokal, variabel bernama vowelCount akan bertambah 1. Skrip menggunakan variabel bernama pos (singkatan dari position) untuk melacak posisi karakter yang sedang diperiksa. Mari kita jelajahi skrip ini lebih detail.
Pertama, skrip meminta pengguna untuk memasukkan kalimat u. Scratch harus menyimpan string pengguna secara otomatis dalam variabel jawaban bawaan. Kemudian, ia mengatur vowelCount menjadi 0 (karena belum menemukan huruf vokal) dan mengatur pos menjadi 1 untuk mengakses huruf pertama dari string input.
Selanjutnya, loop pengulangan v memeriksa setiap huruf dalam string input. Operator length melaporkan jumlah karakter dalam string input, yaitu berapa kali loop harus diulang. Pada setiap putaran, loop menggunakan ch (singkatan dari character) untuk memeriksa satu karakter dari string input w. Pada iterasi pertama loop, ch diatur ke huruf pertama dari jawaban. Iterasi kedua menetapkan ch ke huruf kedua, dan dan seterusnya, hingga loop mencapai akhir string. Variabel pos digunakan untuk mengakses karakter yang diinginkan. Blok if kemudian memeriksa apakah karakter yang diperiksa adalah huruf vokal x. Jika karakter tersebut adalah huruf vokal, baik huruf besar maupun kecil, vowelCount akan ditambah 1. Setelah memeriksa satu karakter, loop menambah pos sebesar 1 y dan dimulai kembali untuk membaca karakter berikutnya. Ketika semua huruf dalam string input telah diperiksa, loop berakhir, dan program menampilkan jumlah huruf vokal yang dihitung menggunakan blok say.
Teknik yang digunakan dalam contoh ini akan diterapkan berkali-kali di sisa bab ini. Muat skrip VowelCount.sb2, jalankan beberapa kali, dan pastikan Anda memahaminya secara menyeluruh. Membandingkan Karakter String Contoh kedua kita memeriksa apakah bilangan bulat yang dimasukkan oleh pengguna adalah palindrom. Palindrom adalah angka (atau string teks) yang dibaca sama dari depan dan belakang. Misalnya, 1234321 dan 1122332211 adalah angka palindrom. Demikian pula, Racecar, Hannah, dan Bob adalah beberapa angka palindrom. Untuk mengilustrasikan algoritma pengujian palindrom kita, misalkan angka masukannya adalah 12344321, seperti yang diilustrasikan pada Gambar 8-3.
Gambar 8-3: Menggunakan dua variabel untuk memeriksa apakah suatu angka adalah palindrom atau bukan
Untuk memeriksa apakah suatu angka adalah palindrom, kita perlu membandingkan digit pertama dan kedelapan, digit kedua dan ketujuh, digit ketiga dan keenam, dan seterusnya. Jika ada perbandingan yang menghasilkan hasil yang salah (artinya kedua digit tersebut tidak sama), maka angka tersebut bukan palindrom. Sebuah program yang mengimplementasikan algoritma pengujian palindrom ini ditunjukkan pada Gambar 8-4.
Gambar 8-4: Program ini menguji apakah bilangan bulat yang dimasukkan oleh pengguna adalah palindrom.
Skrip mengakses angka-angka yang akan dibandingkan dengan dua variabel (pos1 dan pos2 pada Gambar 8-3) yang bergerak berlawanan arah. Variabel pertama (pos1) dimulai dari angka pertama dan bergerak maju, sedangkan variabel kedua (pos2) dimulai dari angka terakhir dan bergerak mundur. Jumlah perbandingan yang dibutuhkan paling banyak setengah dari jumlah angka dalam angka masukan. Dengan masukan 12344321, kita membutuhkan paling banyak empat perbandingan karena angka masukan memiliki delapan angka. (Logika yang sama berlaku jika bilangan bulat masukan memiliki jumlah angka ganjil, karena angka di tengah bilangan tidak perlu dibandingkan.) Setelah program menentukan apakah angka pengguna merupakan palindrom atau bukan, program akan menampilkan pesan dengan hasilnya.
Cobalah 8-1
Muat Palindrome.sb2 dan jalankan untuk memahami cara kerjanya. Karena cara Scratch menangani jumlah pengulangan desimal, jika angka masukan memiliki jumlah digit ganjil, skrip akan melakukan satu perbandingan tambahan dari dua digit yang mengelilingi digit tengah. Cobalah untuk memperbaiki program agar melakukan jumlah pengulangan yang benar ketika angka masukan memiliki jumlah digit ganjil.
Di bagian selanjutnya, kita akan menjelajahi beberapa operasi yang paling umum pada string dan melihat beberapa strategi untuk menulis prosedur manipulasi string di Scratch.
Contoh Manipulasi String
Operator 'letter of' hanya memungkinkan Anda membaca karakter individual dari sebuah string. Jika Anda ingin memasukkan karakter ke dalam (atau menghapus karakter dari) sebuah string, Anda harus melakukan semua pekerjaan sendiri. Di Scratch, Anda tidak dapat mengubah karakter dalam sebuah string, jadi satu-satunya cara untuk mengubah sebuah string adalah dengan membuat string baru. Misalnya, jika Anda ingin mengubah huruf pertama dalam string "jack" menjadi huruf kapital, Anda perlu membuat string baru yang berisi huruf J diikuti oleh huruf-huruf lainnya, ack. Idenya adalah menggunakan operator 'letter of' untuk membaca huruf-huruf dari string asli dan menambahkan huruf-huruf ini ke string baru, sesuai kebutuhan, menggunakan operator 'join'. Di bagian ini, kita akan mengembangkan beberapa aplikasi sederhana yang menunjukkan teknik manipulasi string umum.
Igpay Atinlay
Bagaimana jika sprite kita dapat berbicara dalam bahasa rahasia? Di bagian ini, kita akan mengajari mereka bahasa kode yang disebut pig latin. Aturan kita untuk membuat kata pig latin akan sederhana. Untuk mengubah sebuah kata menjadi pig latin, pindahkan huruf pertama ke akhir dan tambahkan huruf ay. Jadi, kata talk menjadi alktay, fun menjadi unfay, dan seterusnya. Sekarang setelah Anda mengetahui aturannya, dapatkah Anda menebak apa yang judul bagian ini awalnya katakan?
Strategi yang akan kita gunakan untuk mengubah sebuah kata menjadi pig latin diilustrasikan pada Gambar 8-5, menggunakan kata scratch.
Gambar 8-5: Cara menerjemahkan kata bahasa Inggris ke dalam pig latin
Pertama-tama kita akan menambahkan semua huruf (kecuali huruf pertama), satu per satu, dari kata masukan ke kata keluaran u. Kemudian kita menambahkan huruf pertama dalam kata masukan ke kata keluaran v, diikuti oleh ay w. Prosedur PigLatin kita yang menerapkan
langkah-langkah ini ditunjukkan pada Gambar 8-6.
Prosedur ini menggunakan tiga variabel untuk membuat kata-kata berkode kita. Variabel `outWord` menyimpan string keluaran sebagaimana telah dirakit. Sebuah penghitung bernama `pos` (untuk posisi) memberi tahu skrip karakter mana dari string asli yang akan ditambahkan ke `outWord`. Terakhir, sebuah variabel bernama `ch` menyimpan satu karakter dari string masukan. Prosedur ini mengambil kata yang ingin Anda terjemahkan ke dalam bahasa Pig Latin sebagai parameter, bernama `word`.
Gambar 8-6: Prosedur PigLatin
Pertama, prosedur ini membuat string kosong untuk `outWord` dan mengatur `pos` menjadi 2u. (String kosong adalah string yang tidak berisi karakter apa pun; panjangnya adalah 0.) Prosedur ini kemudian menggunakan blok pengulangan untuk menambahkan semua huruf kecuali huruf pertama dari string masukan (`word`) ke string keluaran (`outWord`) `v`.
Kami melewatkan karakter pertama, sehingga jumlah pengulangan kurang dari panjang string masukan. Untuk setiap iterasi loop, satu karakter dari `word` ditambahkan ke `outWord`. Di akhir loop, huruf pertama dari kata ditambahkan ke outWord w, bersama dengan huruf a dan x. Gambar 8-6: Prosedur PigLatin
Pertama, prosedur membuat string kosong untuk outWord dan mengatur pos menjadi 2u. (String kosong adalah string yang tidak berisi karakter apa pun; panjangnya adalah 0.) Prosedur kemudian menggunakan blok pengulangan untuk menambahkan semua huruf kecuali huruf pertama dari string input (word) ke string output (outWord) v.
Kami melewatkan karakter pertama, sehingga jumlah pengulangan kurang dari panjang string input. Untuk setiap iterasi loop, satu karakter dari kata ditambahkan ke outWord. Di akhir loop, huruf pertama dari kata ditambahkan ke outWord w, bersama dengan huruf a dan x.
Cobalah 8-2
Muat PigLatin.sb2 dan jalankan untuk menguji prosedur ini. Aplikasi meminta input kata dan kemudian mengucapkan terjemahan Pig Latinnya. Ubahlah untuk menerjemahkan sebuah frasa, seperti “Apakah Anda ingin jus?” ke dalam bahasa Pig Latin. (Petunjuk: Panggil PigLatin untuk setiap kata untuk merakit frasa keluaran.) Sebagai tantangan lain, tulis prosedur yang mengambil kata Pig Latin sebagai masukan dan menampilkan kata bahasa Inggris aslinya.
Perbaiki Ejaan Saya
Di bagian ini, kita akan mengembangkan permainan sederhana yang menghasilkan kata-kata yang salah eja dan meminta pemain untuk memasukkan ejaan yang benar. Permainan akan membuat kata-kata yang salah eja dengan memasukkan huruf acak pada posisi acak dalam sebuah kata bahasa Inggris. Tentu saja, mungkin ada lebih dari satu ejaan yang benar untuk kata-kata sederhana yang salah eja. Misalnya, jika kata aslinya adalah wall dan permainan menghasilkan mwall, maka mall atau wall akan benar. Untuk menjaga agar permainan kita tetap sederhana, kita akan mengabaikan kemungkinan itu dan bersikeras pada ejaan tertentu untuk jawaban yang benar.
Pertama, mari kita buat prosedur umum untuk menyisipkan karakter pada posisi tertentu dalam sebuah string. Prosedur ini, yang disebut Insert, mengambil tiga parameter: kata masukan (strIn), string (atau karakter) yang akan disisipkan (strAdd), dan posisi di mana Anda menginginkan karakter baru tersebut (charPos). Prosedur inimenghasilkan string baru (strOut) dengan strAdd yang disisipkan ke dalam strIn pada posisi yang benar,seperti yang diilustrasikan dalam contoh Gambar 8-7.
Gambar 8-7: Mengilustrasikan prosedur Insert
Kita akan menambahkan karakter dari strIn, satu per satu, ke dalam strOut. Ketika kita mencapai charPos, kita hanya akan menambahkan karakter dari strAdd ke strOut sebelum menambahkan huruf pada charPos dari strIn. Prosedur lengkapnya ditunjukkan pada Gambar 8-8.
Gambar 8-8: Prosedur Insert
Pertama, prosedur ini menginisialisasi strOut ke string kosong dan mengatur pos ke 1 untuk mengakses huruf pertama dari string masukan u. Kemudian, ia memulai perulangan loop untuk menambahkan huruf-huruf strIn, satu per satu, ke strOut v. Setiap iterasi mengambil huruf strIn berikutnya dan menempatkannya dalam variabel ch w. Jika posisi karakter saat ini cocok dengan charPos, prosedur menambahkan strAdd ke strOut x. Dalam semua kasus, ch ditambahkan ke strOut y, dan pos ditambah untuk mengakses huruf strIn z berikutnya.
Sekarang kita memiliki prosedur Insert, mari kita lihat skrip utama permainan, yang ditunjukkan pada Gambar 8-9.
Gambar 8-9: Skrip utama untuk permainan Fix My Spelling
String alpha berisi semua huruf alfabet. Ini akan memberikan huruf acak untuk dimasukkan ke dalam kata yang ingin kita salah eja u. Skrip secara acak memilih kata dari daftar yang sudah dibuat dan menyimpan kata itu sebagai inWord v. Anda akan mempelajari lebih lanjut tentang daftar di bab berikutnya; untuk saat ini, anggap saja daftar ini sebagai bank kata. Skrip kemudian memilih huruf acak (randChar) dari alpha w dan posisi acak (randPos) untuk menempatkan huruf ini ke dalam inWord x.
Skrip kemudian memanggil prosedur Insert kita untuk membuat kata yang salah eja (strOut) y. Setelah itu, skrip memulai perulangan untuk mendapatkan jawaban pemain z.
Di dalam perulangan, skrip meminta pemain untuk memasukkan ejaan yang benar {, dan menggunakan blok if/else untuk memeriksa jawaban |. Jika jawaban pemain cocok dengan kata asli (inWord), permainan berakhir; jika tidak, pemain harus mencoba lagi.
Cobalah 8-3
Muat FixMySpelling.sb2 dan mainkan beberapa kali untuk memahami cara kerjanya. Bisakah Anda memodifikasi permainan sehingga kata yang salah eja berisi dua huruf tambahan bukan hanya satu?
Menguraikan
Contoh terakhir kita menyajikan permainan kata lain yang sedikit lebih menantang untuk dimainkan. Kita akan mulai dengan sebuah kata bahasa Inggris, mengacak huruf-hurufnya, dan meminta pemain untuk menebak kata aslinya.
Mari kita mulai dengan membuat prosedur yang menyusun ulang karakter dari sebuah string yang diberikan secara acak. Pemanggil menetapkan string input (strIn), dan prosedur, yang bernama Randomize, memodifikasinya sehingga karakter-karakternya diacak, seperti yang diilustrasikan pada Gambar 8-10.
Gambar 8-10: Mengilustrasikan prosedur Randomize
Kita akan memilih huruf acak dari strIn dan menambahkan huruf itu ke string sementara, str1. (String sementara ini, yang awalnya kosong, adalah tempat kita akan menyimpan kata yang diacak saat kita membuatnya.) Kemudian kita akan menghapus huruf itu dari strIn agar tidak digunakan kembali dan mengulangi seluruh proses hingga strIn kosong.
Prosedur Randomize mengimplementasikan langkah-langkah ini seperti yang ditunjukkan pada Gambar 8-11.
Gambar 8-11: Prosedur Randomize
Pertama, Randomize mengatur len ke panjang string input, strIn, dan mengosongkan string sementara, str1 u. Prosedur kemudian memulai loop pengulangan untuk menyusun kata acak v. Jumlah pengulangan sama dengan panjang string input. Untuk setiap iterasi loop, kita memilih posisi acak di strIn w dan menambahkan huruf itu ke str1 x. Perhatikan bahwa kita menggunakan panjang pada langkah w karena strIn dan panjangnya akan berubah di dalam loop. Setelah itu, kita memanggil prosedur bernama Remove untuk menghapus karakter yang baru saja kita gunakan dari strIn y. Ketika loop selesai mengacak huruf, strIn diatur ke kata acak (str1) z.
Prosedur Remove, yang memungkinkan kita menghindari penambahan huruf yang sama ke kata acak kita dua kali, ditunjukkan pada Gambar 8-12. Prosedur ini menghapus karakter dari strIn pada posisi yang Anda tentukan dengan parameter charPos.
Gambar 8-12: Prosedur Hapus
Prosedur ini menggunakan string sementara lain, bernama str2, untuk membangun string baru yang ingin kita buat. Prosedur ini dimulai dengan mengosongkan str2 dan mengatur penghitung loop, n, menjadi 1 untuk mengakses karakter pertama dari strIn u. Prosedur kemudian memulai loop berulang untuk menyusun string keluaran v. Jika kita tidak ingin menghapus karakter saat ini, kita menambahkannya ke str2 w. Penghitung loop kemudian ditambah untuk mengakses huruf berikutnya dari strIn x. Ketika prosedur selesai, strIn diatur ke kata baru (str2) y.
Sekarang kita siap untuk menjelajahi skrip utama permainan, yang ditunjukkan pada Gambar 8-13.
Gambar 8-13: Skrip utama permainan Unscramble.
Skrip memilih sebuah kata secara acak dari sebuah daftar dan menyimpan kata tersebut
dalam inWord u. Kemudian, skrip mengatur strIn sama dengan inWord v dan memanggil Randomize untuk
mengacak karakter strIn w. Setelah itu, skrip memulai sebuah loop untuk mendapatkan
jawaban pemain x. Di dalam loop, skrip meminta pemain untuk memasukkan
kata yang telah diacak y dan menggunakan blok if/else untuk memeriksa jawaban z. Bagian ini
identik dengan apa yang telah kita lakukan dalam permainan Fix My Spelling di bagian sebelumnya.
Contoh-contoh sebelumnya hanyalah sebagian kecil dari berbagai operasi
yang dapat Anda lakukan pada string. Cobalah menggunakan teknik yang sama untuk mengubah string dalam
proyek Anda sendiri!
Di sisa bab ini, kita akan menjelajahi beberapa program yang menggunakan string
untuk memecahkan masalah yang menarik.
Proyek Scratch
Prosedur yang baru saja Anda lihat menunjukkan dasar-dasar pemrosesan string.
Di bagian ini, kita akan menerapkan apa yang telah kita pelajari untuk menulis beberapa aplikasi praktis.
Sepanjang permainan, Anda akan mempelajari beberapa trik pemrograman baru yang dapat Anda gunakan dalam kreasi Anda sendiri.
Permainan Tembak
Permainan ini bertujuan untuk mengajarkan konsep gerak relatif dengan cara yang menyenangkan dan menarik. Tujuan permainan ini adalah untuk memperkirakan sudut belok dan jarak tempuh antara dua objek di Panggung. Antarmuka pengguna untuk permainan ini diilustrasikan pada Gambar 8-14.
Gambar 8-14: Antarmuka pengguna permainan Tembak
Saat permainan dimulai, ia menempatkan sprite Pemain dan Target di lokasi acak di Panggung. Selanjutnya, ia meminta pemain untuk memperkirakan sudut belok dan jarak yang perlu ditempuh sprite Pemain untuk mengenai Target. Sprite Pemain kemudian digerakkan sesuai dengan angka yang dimasukkan oleh pemain. Jika sprite berhenti dalam radius tertentu dari Target, pemain memenangkan permainan. Jika tidak, sprite Pemain kembali ke posisi awalnya, dan pemain dapat mencoba lagi. Saat ikon bendera hijau diklik untuk memulai permainan, sprite Pemain menjalankan skrip yang ditunjukkan pada Gambar 8-15. Gambar 8-15: Skrip sprite Pemain yang berjalan saat ikon bendera hijau diklik
Skrip tersebut menyiarkan NewGame untuk menginstruksikan sprite Pembantu untuk menetapkan lokasi baru untuk sprite Pemain dan Target u. Sprite Pembantu menjalankan prosedur sederhana (tidak ditampilkan) yang memperbarui lima variabel berikut dengan angka acak yang akan membuat Pemain dan Target tetap terlihat (dan terpisah dengan jarak tertentu) di Panggung:
XPlayer dan YPlayer Koordinat x dan y dari sprite Pemain
XTarget dan YTarget Koordinat x dan y dari sprite Target
initAngle Arah awal sprite Pemain
Setelah skrip memiliki posisi baru untuk Pemain dan Target, ia menyiarkan StartGame untuk memindahkan sprite Target ke lokasi barunya v. (Skrip untuk sprite Target tidak ditampilkan di sini.) Kemudian skrip memasuki loop tak terbatas untuk memberi pemain beberapa kesempatan untuk mengenai target w. Perulangan akan dihentikan dengan perintah stop all (dalam prosedur CheckAnswers) ketika pemain mengenai target.
Setiap iterasi perulangan menetapkan posisi dan arah awal sprite Pemain dan menghapus semua tanda pena dari Stage x untuk menghapus jejak yang tertinggal dari tebakan sebelumnya. Skrip kemudian menyiarkan GetAnswers y, dan sebagai respons, sprite Pembantu meminta pemain untuk memasukkan jawaban, seperti yang ditunjukkan pada Gambar 8-16. Sprite Pembantu kemudian membagi jawaban menjadi dua bagian (sebelum dan sesudah koma) dan memperbarui sudut dan jarak sesuai dengan itu.
Ikuti komentar pada Gambar 8-16 untuk melihat cara kerja skrip ini. Sprite Pemain kemudian digerakkan, dengan pena diturunkan, seperti yang diarahkan oleh pemain z. Ini meninggalkan jejak visual dari rute pergerakan yang dapat digunakan pemain untuk menyempurnakan perkiraannya untuk putaran berikutnya.
Gambar 8-16: Skrip GetAnswers
Terakhir, sprite Pemain menjalankan prosedur CheckAnswers untuk melihat apakah ia cukup dekat dengan target.
Permainan berakhir hanya jika sprite Pemain berada dalam jarak yang sangat dekat dengan target. Gambar 8-17 menunjukkan bagaimana sprite Pemain memeriksa jaraknya dari target.
Sprite Pemain menggunakan jarak ke blok untuk memeriksa seberapa dekat ia dengan sprite Target. Jika jaraknya kurang dari 20 langkah, permainan menganggap ini sebagai tembakan yang mengenai sasaran dan mengatakan, “Anda menang!” Jika tidak, percobaan menembak dianggap meleset, loop selamanya dimulai lagi, dan pemain mendapat kesempatan lain.
Gambar 8-17: Prosedur CheckAnswers dari sprite Pemain.
coba 8-4
Modifikasi permainan Tembak untuk melacak jumlah kali pemain perlu mengenai sasaran dan memberikan skor kepada pemain sesuai dengan itu.
Konverter Biner ke Desimal
Bilangan biner (basis-2) hanya memiliki dua digit yang mungkin: 0 dan 1. Sebagian besar komputer beroperasi dan berkomunikasi dengan bilangan biner. Namun, manusia lebih suka bekerja dengan bilangan dalam sistem desimal (basis-10). Di bagian ini, Anda akan mengembangkan aplikasi yang mengkonversi bilangan biner ke ekuivalen desimalnya. Nantinya, Anda dapat menggunakannya sebagai permainan untuk menguji kemampuan Anda untuk melakukan konversi tersebut.
Mari kita bahas terlebih dahulu cara mengkonversi dari biner ke desimal. Gambar 8-18 menunjukkan contoh menggunakan bilangan biner 10011011.
Gambar 8-18: Mengonversi bilangan biner ke bilangan desimal
Yang harus kita lakukan adalah mengalikan setiap digit biner dengan nilai posisinya yang sesuai dan menambahkan hasil perkaliannya. Nilai posisi sesuai dengan pangkat basis yang meningkat dari kanan ke kiri, dengan posisi pertama memiliki pangkat 0. Karena biner berbasis 2, digit paling kanan memiliki nilai posisi 20 = 1, jadi Anda akan mengalikan digit tersebut dengan 1. Anda akan mengalikan digit berikutnya dengan 21 = 2, digit berikutnya dengan 22 = 4, dan seterusnya.
Gambar 8-19 mengilustrasikan antarmuka pengguna aplikasi konversi biner ke desimal. Program meminta pengguna untuk memasukkan angka biner 8-bit. Kemudian program menampilkan angka masukan di Panggung dengan sprite Bit, yang menggunakan dua kostum untuk mewakili 0 dan 1. Program juga menghitung angka desimal yang setara, dan sprite Driver, yang memiliki kostum komputer, menampilkan nilai tersebut kepada pengguna.
Gambar 8-19: Program konversi biner ke desimal
Cobalah 8-5
Untuk memeriksa pemahaman Anda, praktikkan konversi biner ke desimal berikut: (a) 1010100, (b) 1101001, dan (c) 1100001. Program dimulai ketika ikon bendera hijau diklik. Kejadian ini ditangkap oleh sprite Driver, yang menjalankan skrip yang ditunjukkan dan dijelaskan pada Gambar 8-20.
Gambar 8-20: Skrip untuk sprite Driver
Skrip ini mempersiapkan Stage dan meminta pengguna untuk memasukkan angka biner agar sprite Bit dapat memulai putaran konversi baru. Ketika sprite Bit menyelesaikan pekerjaannya, sprite Driver menunjukkan kepada pengguna nilai desimal, yang dihitung dan disimpan oleh sprite Bit dalam variabel bersama bernama decimal. Skrip yang dijalankan sprite Bit sebagai respons terhadap pesan Initialize diilustrasikan pada Gambar 8-21.
Gambar 8-21: Skrip Inisialisasi untuk sprite Bit
Skrip ini menggambar pola bit yang mewakili delapan angka nol pada Stage. Seperti yang akan Anda lihat sebentar lagi, di mana pun angka biner 1 muncul dalam string input pengguna, skrip harus memberi tanda berupa angka 1 di atas bit yang sesuai. Ketika pengguna memasukkan angka biner yang akan dikonversi, sprite Bit harus menerima pesan BinaryToDecimal dan menjalankan skrip yang ditunjukkan pada Gambar 8-22.
Gambar 8-22: Skrip BinaryToDecimal untuk sprite Bit
Pertama, prosedur konversi menginisialisasi semua variabel yang akan digunakannya:
- length adalah jumlah bit dalam angka biner pengguna.
- pos menunjuk ke digit paling kanan dari angka input.
- weight dimulai pada nilai posisi digit biner paling kanan.
- decimal diatur ke 0 tetapi akan menyimpan hasil konversi pada akhirnya.
- xPos dimulai pada koordinat x dari gambar digit biner paling kanan.
Di dalam loop pengulangan v, prosedur memeriksa setiap digit untuk melihat apakah itu adalah 1 atau 0. Jika loop menemukan 1 w, ia menambahkan nilai bobot saat ini ke desimal dan mencetak kostum digit-1 di atas gambar digit-0. Di akhir loop, skrip memperbarui beberapa variabel sebelum beralih ke iterasi berikutnya:
- pos diperbarui untuk menunjuk ke digit di sebelah kiri digit yang baru saja kita proses.
- xPos disejajarkan dengan pusat gambar digit berikutnya, untuk berjaga-jaga jika kita perlu mencetak gambar baru.
- bobot dikalikan dengan 2, yang berarti akan mengambil nilai 1, 2, 4, 8, 16, dan seterusnya saat loop berulang.