Daftar Isi:

Tautan Dari Variabel dalam Benang Dengan Sugarcube: 10 Langkah
Tautan Dari Variabel dalam Benang Dengan Sugarcube: 10 Langkah

Video: Tautan Dari Variabel dalam Benang Dengan Sugarcube: 10 Langkah

Video: Tautan Dari Variabel dalam Benang Dengan Sugarcube: 10 Langkah
Video: Twine 2.2: Learning Twine: Passage Links 2024, November
Anonim
Tautan Dari Variabel dalam Benang Dengan Sugarcube
Tautan Dari Variabel dalam Benang Dengan Sugarcube

Saya sangat senang Anda bergabung dengan saya lagi! Ini berarti Wumpus belum memakanmu. Bagus!

Bagi Anda yang tidak terbiasa, ini adalah serangkaian tutorial yang saya buat untuk membantu sepupu widdle oochy-skootchy yang menggemaskan dengan proyek seniornya. Tutorial ini dimaksudkan sebagai referensi untuk apa yang dapat Anda lakukan dengan beberapa fitur pemrograman Twine dan Sugarcube. Jika Anda ingin mengikuti, Anda dapat menemukan tutorial pertama di sini.

Dalam tutorial terakhir, saya membuat satu set kecil ruangan yang dapat dijelajahi oleh pemain. Saya menambahkan objek Wumpus, dan membuat beberapa kode ruangan umum untuk mengubah apa yang ditampilkan di setiap ruangan tergantung di mana Wumpus berada.

Langkah 1: Buat Pemain Anda

Buat Pemain Anda
Buat Pemain Anda

Langkah ini sangat sederhana. Pada dasarnya saya hanya menggunakan kode yang sama dengan $wumpus saya, tetapi dengan variabel $player sebagai gantinya.

Langkah 2: Kode Kamar Baru

Kode Kamar Baru
Kode Kamar Baru

Mengubah kode kamar generik Anda sehingga nilai $player adalah kamar saat ini. Kemudian bandingkan $wumpus dengan $player alih-alih ruangan saat ini.

Ini adalah perubahan kecil, dan tidak sepenuhnya diperlukan, tetapi saya ingin menjaga kode saya tetap teratur.

Langkah 3: Membuat Tautan Dari Variabel

Membuat Tautan Dari Variabel
Membuat Tautan Dari Variabel

Terakhir, ingin mengganti tautan di ruang awal saya menjadi tautan yang berubah berdasarkan nilai $player. Ini dapat dilakukan dengan fungsi "" di Sugarcube. Anda dapat membaca lebih lanjut tentang itu di halaman dokumentasi Sugarcube.

String pertama setelah perintah kami adalah frasa yang akan muncul di bagian kami. Yang kedua adalah nama bagian yang ingin kita tautkan. Saya menggunakan "Berburu Wumpus!" sebagai ungkapan saya, tetapi kita bisa menggunakan variabel kita di sana sebagai gantinya jika kita ingin pemain tahu ke mana mereka pergi sebelumnya, seperti ini:

Langkah 4: Uji

Tes
Tes
Tes
Tes

Ketika Anda menguji kode Anda, Anda akan menemukan bahwa tautan Anda telah diganti dengan frasa apa pun yang Anda tulis sebelumnya. Mengkliknya akan membawa Anda ke ruang acak di gim Anda.

Sayangnya, ini juga bisa membawa Anda langsung ke ruang Wumpus! Itu tidak terlalu penting sekarang, tetapi dalam permainan nyata itu akan menjadi permainan instan. Kita perlu memperbaikinya.

Langkah 5: Tambahkan Daftar Kamar

Tambahkan Daftar Kamar
Tambahkan Daftar Kamar

Pertama, kita akan membuat daftar ruangan, untuk mempermudah pengelolaan ruangan. Dengan mendeklarasikan array ini, kita dapat menggunakannya untuk mengatur nilai $player dan $wumpus tanpa mengulang kode. Ini juga memiliki keuntungan lain yang akan kita jelajahi selanjutnya.

Pengujian dengan kode ini harus berperilaku seperti sebelumnya.

Langkah 6: Menghilangkan Kamar

Menghilangkan Kamar
Menghilangkan Kamar

Saya telah menambahkan satu baris kode ke kode dari sebelumnya (disorot).

Array di Sugarcube memiliki fungsi bawaan yang memungkinkan Anda menghapus elemen darinya berdasarkan nama. Dalam hal ini, setelah kita menetapkan $wumpus sebuah ruangan, kita dapat menghapus ruangan itu dari $roomlist kita. Namun, fungsi ini rewel. Ini tidak akan berfungsi kecuali jika output dari fungsi tersebut ditetapkan atau digunakan dalam beberapa cara. Untuk mengatasinya, saya telah membuat variabel sementara _temp.

Di Sugarcube, variabel sementara dimulai dengan garis bawah (_) alih-alih satu dolar ($). Mereka berguna karena mereka dihapus setelah bagian dijalankan, jadi Anda tidak perlu khawatir tentang nama variabel yang tumpang tindih.

Saya juga menghapus $player room dari $roomlist, sebagai hal yang biasa.

Langkah 7: Pengujian

Pengujian
Pengujian
Pengujian
Pengujian

Meskipun kami dapat menjalankan kode seperti sekarang, itu tidak akan menjadi tes yang sangat menyeluruh. Jika kami menjalankan kode dan menemukan bahwa $player dan $wumpus ditempatkan ke ruangan yang berbeda, kami tidak tahu apakah itu karena kode tersebut berfungsi, atau hanya kebetulan. Tentu, kita bisa menjalankan kode berkali-kali, dan berasumsi bahwa jika tidak pernah memberi mereka berdua ruangan yang sama, itu tidak akan pernah terjadi, tapi itu akan memakan waktu lama dan itu masih bukan jaminan 100% bahwa itu tidak akan pernah terjadi.

Sebaliknya, kita perlu cara untuk memeriksa.

Saya telah menambahkan tiga baris ke atas bagian intro kita yang akan membiarkan kita melihat nilai variabel $wumpus, $player, dan $roomlist kita. Karena cara kita mengatur kode kita, kita tahu bahwa $wumpus room dan $player room harus dihilangkan dari $roomlist.

Ketika kami menjalankan kode ini, kami dapat memeriksa untuk memastikan bahwa itu masalahnya.

Langkah 8: Keanehan Dengan Sugarcube dan Objek

Keanehan Dengan Sugarcube dan Objek
Keanehan Dengan Sugarcube dan Objek
Keanehan Dengan Sugarcube dan Objek
Keanehan Dengan Sugarcube dan Objek
Keanehan Dengan Sugarcube dan Objek
Keanehan Dengan Sugarcube dan Objek

Objek Sugarcube sedikit aneh. Biarkan saya menunjukkan ini.

Ketika saya membangun proyek ini pada awalnya, saya ingin menyimpan $roomlist saya ke variabel $saveroom sebelum saya mulai menghapus kamar darinya. Saya pikir itu akan berguna nanti.

Ketika saya mendapatkan beberapa perilaku aneh dari kode ini, saya menambahkan baris lain ke halaman intro saya untuk membiarkan saya melihat variabel $saveroom saya (gambar kedua).

Saya terkejut menemukan bahwa elemen yang telah saya hapus dari $roomlist juga telah dihapus dari daftar yang saya simpan! Anda dapat melihat ini beraksi di gambar ketiga.

Ini karena ketika Anda menyalin array seperti ini, Anda sebenarnya tidak menyuruh Twine untuk menyalin array, Anda memberi tahu Twine bahwa kedua variabel ini adalah array yang sama. Ketika Anda melakukan sesuatu pada array menggunakan satu variabel, itu mengubah array yang sama dengan yang dilihat oleh variabel lain!

Kita dapat memperbaikinya dengan fungsi clone().

Langkah 9: Fungsi Klon()

Fungsi Klon ()
Fungsi Klon ()
Fungsi Klon ()
Fungsi Klon ()

Anda dapat membaca tentang fungsi clone() di halaman dokumentasi Sugarcube.

Salinan "dangkal" adalah apa yang kami lakukan sebelumnya. Alih-alih membuat salinan lengkap dari seluruh array, itu hanya mengasumsikan bahwa variabel Anda bekerja dengan array yang sama. Alih-alih salinan dangkal, clone() melakukan salinan "dalam", yang berperilaku seperti yang Anda harapkan. Setiap elemen larik disalin ke larik baru, dan benar-benar terpisah dari aslinya.

Jika kami menguji kode baru ini, kami menemukan itu berfungsi seperti yang diharapkan.

Tentu saja, tidak masalah apakah Anda menyimpan $roomlist atau tidak. Untuk keperluan proyek saya, saya tidak akan melakukannya. Ini semua hanya untuk mendemonstrasikan salinan yang dalam vs. dangkal.

Langkah 10: Itu Saja untuk Sekarang

Itu saja untuk Sekarang!
Itu saja untuk Sekarang!

Kami telah menambahkan kode yang memungkinkan pemain kami memulai di ruang acak. Selain itu, kami telah menghilangkan bug di mana pemain akan memulai di ruangan yang sama dengan Wumpus.

Kami belajar tentang cara membuat tautan dari variabel, dan bagaimana penyalinan array diperlakukan oleh Sugarcube.

Hal-hal meningkat, tetapi kami baru saja memulai!

Selamat berburu!

Direkomendasikan: