JavaRush /Java Blog /Random-ID /Harvard CS50: Tugas Minggu 3 (Kuliah 7 dan 8), Bagian 2
Masha
Level 41

Harvard CS50: Tugas Minggu 3 (Kuliah 7 dan 8), Bagian 2

Dipublikasikan di grup Random-ID
Kuliah Dasar-dasar Pemrograman Harvard CS50 Materi tambahan: notasi asimtotik, algoritma pengurutan dan pencarian Tugas minggu ke-3, bagian 1. Penyortiran dan pencarian.

Permainan dimulai!

Harvard CS50: Tugas Minggu 3 (Kuliah 7 dan 8), Bagian 2 - 1 Saatnya bermain! Kebanyakan orang akrab dengan permainan puzzle "Tag". Untuk memformalkannya, “Tag” adalah bidang dua dimensi 4x4, pada bidang ini tidak ada 16, melainkan 15 kotak, yaitu satu slot tetap kosong. Masing-masing kotak diberi nomor dan dapat bergerak secara horizontal atau vertikal di dalam lapangan (jika, tentu saja, ada ruang untuk bergerak). Tujuannya adalah menyusun angka secara berurutan, dari 1 hingga 15 dari kiri ke kanan dari atas ke bawah. Maka ruang kosongnya akan berada di pojok kanan bawah. Pergerakan ubin apa pun (atau beberapa) adalah “langkah” dalam ruang permainan ini. Kombinasi yang ditunjukkan pada gambar di atas sudah ditumpuk, namun perhatikan bahwa 12 atau 15 ubin dapat didorong ke ruang kosong. Aturannya menyatakan bahwa ubin tidak dapat dipindahkan secara diagonal atau dikeluarkan dari papan permainan. Sebenarnya ada banyak konfigurasi untuk memulai permainan (Anda dapat menghitung berapa tepatnya), tetapi demi kesederhanaan, mari kita susun ubin dari yang terbesar ke terkecil dan sisakan ruang kosong di sudut kanan bawah papan. . Satu-satunya hal adalah, mari kita tukar 1 dan 2 agar teka-teki tersebut terpecahkan. Harvard CS50: Tugas Minggu 3 (Kuliah 7 dan 8), Bagian 2 - 2 Sekarang buka direktori ~/ meja kerja Anda , lalu /pset3/fifteen dan buka limabelas.c . Ini berisi kode untuk mesin permainan. Tugasnya adalah menambahkan kode ke dalam game. Tapi pertama-tama, mari kita kompilasi “mesin” kita (Anda mungkin sudah tahu cara melakukannya). Meskipun permainan belum selesai, Anda dapat meluncurkan aplikasinya. Akan lebih mudah untuk menjalankannya di jendela terminal yang lebih besar dari biasanya, yang dapat dibuka dengan mengklik tanda tambah hijau (+) di sebelah salah satu tab kode dan memilih Terminal Baru . Atau Anda dapat membuka jendela terminal dalam layar penuh dengan mengklik ikon Maksimalkan di sudut kanan atas konsol. Anda melihat bahwa beberapa hal berhasil. Namun faktanya, sebagian besar game tersebut belum ditulis. Dan di sini - bersiaplah - adalah jalan keluar Anda!
Belajar
Pelajari kode dan komentar dari lima belas.c lalu jawab pertanyaan di bawah ini:
  1. Selain papan 4x4, ukuran bidang apa yang diizinkan mesin kami?
  2. Apa struktur data bidang permainannya?
  3. Fungsi apa yang disebut untuk menyapa pemain di awal permainan?
  4. Fitur apa yang perlu Anda terapkan?
  5. Catatan: Jika Anda ingin pemeriksaan otomatis memberi tahu Anda apakah Anda menjawab pertanyaan dengan benar, di sebelah file lima belas.c, temukan file lima belas.txt dan tuliskan jawaban atas pertanyaan-pertanyaan ini di dalamnya.
Penerapan
Baiklah, mari kita mulai mengimplementasikan permainannya. Ingat, kita bergerak dalam langkah-langkah kecil, jangan mencoba melakukan semuanya sekaligus. Sebagai gantinya, mari kita terapkan fitur satu per satu dan pastikan fitur tersebut berfungsi sebelum melanjutkan. Secara khusus, kami menyarankan Anda mengimplementasikan fungsi permainan dalam urutan berikut: init (inisialisasi), draw (menggambar), move (mengambil langkah), won (menang). Keputusan desain (seperti berapa banyak ruang yang akan disisipkan di antara ubin nomor kami) ada di tangan Anda. Lapangan permainannya akan terlihat seperti ini: 15 14 13 12 11 10 9 8 7 6 5 4 3 1 2 _ Sekali lagi, harap dicatat bahwa di posisi awal, 1 dan 2 ditempatkan dalam urutan terbalik (ini berlaku untuk bidang 4x4 klasik jika jumlah ubinnya ganjil). Jika jumlah ubin genap dan bidangnya 3x3, tidak perlu menukar dua ubin “terendah”. 8 7 6 5 4 3 2 1 _ Untuk menguji implementasi “Tag” Anda, Anda perlu mencoba memainkannya (jangan lupa, Anda dapat keluar dari program sebelum program selesai secara alami dengan menekan kombinasi tombol crtl+c). Pastikan program akan berfungsi jika nomor yang dimasukkan salah. Dan ingat bahwa sama seperti Anda mengotomatiskan masukan ke dalam pencarian, Anda dapat mengotomatiskan “panduan” permainan. Faktanya, di dalam folder ~cs50/pset3 terdapat file 3x3.txt dan 4x4.txt , yang berisi semua rangkaian langkah untuk menang di bidang 3x3 dan 4x4. Untuk menguji program, misalnya, menggunakan file pertama, jalankan perintah berikut: ./fifteen 3 < ~cs50/pset3/3x3.txt Siapkan argumen yang Anda perlukan untuk mempercepat animasi. Dan secara umum, jika Anda mau, Anda selalu dapat mengubah permainan. Untuk bersenang-senang dengan "urutan escape ANSI" termasuk warna. Lihatlah implementasi kami yang jelas dan lihat http://isthe.com/chongo/tech/comp/ansi_escapes.html untuk mempelajari trik baru. Jika diinginkan, tulis fungsi Anda sendiri atau ubah prototipe fungsi yang kami tulis. Satu-satunya batasan adalah Anda tidak mengubah logika fungsi utama, jika tidak, kami tidak akan dapat menerapkan beberapa pengujian otomatis untuk mengonfirmasi bahwa program Anda berfungsi dengan benar. Secara khusus, main harus mengembalikan 0 jika dan hanya jika pengguna memecahkan teka-teki tersebut. Nilai bukan nol harus dikembalikan untuk semua opsi kesalahan. Jika terjadi kesalahan, kirimkan surat kepada kami. Nah, jika Anda ingin bermain-main dengan implementasi aplikasi yang disiapkan oleh asisten CS50, jalankan perintah berikut: ~cs50/pset3/fifteen Jika Anda tertarik melihat implementasi yang lebih keren, dengan pemecahan teka-teki otomatis, lihat program versi “Hacker”: ~cs50/hacker3/fifteen Daripada memasukkan angka di jendela permainan, ketikkan kata GOD. Hebat, bukan? Jika Anda ingin memeriksa kebenaran program Anda secara resmi dengan check50, perhatikan bahwa check50 mengasumsikan bahwa ruang kosong di playfield diisi dengan 0; jika Anda memilih nilai yang berbeda, gantilah dengan nol untuk verifikasi yang benar. Selain itu, check50 mengasumsikan bahwa Anda mengindeks bidang papan dalam urutan [baris] [kolom], bukan papan [kolom] [baris]. check50 2015.fall.pset3.fifteen fifteen.c
Pelajari lebih lanjut tentang penerapan Lima belas fungsi game
  • init (inisialisasi)
  • menggambar
  • bergerak (mengambil langkah)
  • menang (menang)
inisiasi
Dalam fungsi ini kami memperkenalkan arena bermain. Untuk melakukan ini, kita menggunakan array bilangan bulat dua dimensi. Dimensi array adalah MAX x MAX, dengan MAX adalah konstanta yang menunjukkan jumlah maksimum petak yang dapat ditampung dalam satu baris atau kolom suatu bidang. Oleh karena itu, kita perlu mendefinisikan variabel int board[MAX][MAX] Namun, ingatlah bahwa ukuran lapangan permainan ditentukan oleh pengguna. Oleh karena itu, kita perlu mendefinisikan variabel yang menunjukkan ukuran papan yang harus dimasukkan pengguna. Ini ke dalam d . dimana d adalah dimensi papan, d <= MAX. Namun, di C Anda tidak bisa mengubah ukuran array, jadi Anda harus puas dengan ukuran maksimumnya. Di init Anda perlu memasukkan nilai-nilai di papan. Harvard CS50: Tugas Minggu 3 (Kuliah 7 dan 8), Bagian 2 - 3 Baca selengkapnya tentang array dua dimensi jika Anda belum pernah menggunakannya. Singkatnya, mereka memiliki dua indeks, yang pertama menunjukkan nomor baris, yang kedua menunjukkan nomor kolom. Untuk soal kita, kita mulai dengan angka maksimum dan diakhiri dalam kasus d = 3 (“Delapan”) dengan satu dan sudut kosong. Jika kita masih memiliki “Tag”, maka kita tukar 1 dan 2. Apa yang harus dilakukan dengan ruang kosong? Array kita terdiri dari bilangan bulat, jadi kekosongan harus diisi dengan bilangan bulat. Oleh karena itu, Anda harus memilih bilangan bulat untuk menginisialisasi ubin yang kosong (atau, dalam kasus permainan fisik, tidak adanya ubin). Loop dapat digunakan untuk menginisialisasi papan permainan dan mengisinya dengan set ubin awal. Kita mengulang indeks i dan j, di mana board[i][j] adalah ubin yang terletak di baris nomor i dan kolom nomor j. Kami mengisi papan dalam urutan menurun. Jika jumlah ubin (tanpa yang kosong) ganjil, tukar 1 dan 2.
menggambar
Fungsi ini harus mencetak keadaan playfield saat ini. Ingatlah bahwa kita dapat memiliki nilai dengan satu atau dua digit, jadi untuk pemformatan yang indah setelah angka 1-9, fungsinya harus mencetak spasi ( #s ). Ini dapat dilakukan dengan menggunakan placeholder %2d . printf (“%2d”, board[i][j]); Juga jangan lupa tentang sel kosong. Pilih karakter yang akan mewakilinya (dalam contoh kita, ini adalah garis bawah). Fungsi draw akan menggambar karakter ini segera setelah Anda menekan sel kosong. Jadi perulangan kita akan menjadi seperti ini: for каждой строки for каждого element строки print meaning и пробел print новую строку Ingatlah bahwa urutan fungsi draw yang menarik ubin ke layar harus mencerminkan urutan penempatannya dalam larik yang ditentukan dalam fungsi init .
bergerak
Setelah Anda menginisialisasi lapangan permainan dan menggambar posisi ubin awal, Anda perlu mengizinkan pengguna untuk mengedit posisi ubin, yaitu membuat gerakan. Jadi di Fifteen.c program mengambil keluaran dari pengguna, membuat papan permainan dan kemudian memanggil fungsi pindah dan memberi tahu ubin mana yang ingin dia pindahkan. Hati-hati: Anda menerapkan fungsi secara khusus pada nomor di ubin, dan bukan pada posisinya di papan (dalam larik). Jadi, Anda perlu mencari posisi ubin sebenarnya. Selain itu, Anda hanya boleh mengizinkan pengguna untuk memindahkan ubin jika memungkinkan. Harvard CS50: Tugas Minggu 3 (Kuliah 7 dan 8), Bagian 2 - 4 Pada gambar di atas, kita hanya dapat memindahkan ubin nomor 2, 5, dan 8. Bagaimana cara menentukannya? Dengan nilai ubin kosong. Jadi fungsi move bekerja seperti ini:
  • Menerima nomor ubin yang ingin dipindahkan pengguna
  • Mencari posisi dalam larik (di lapangan permainan) ubin ini
  • Mengingat posisi ubin kosong
  • Jika ubin kosong bersebelahan dengan ubin yang ingin dipindahkan pengguna, ubin tersebut akan ditukar dalam larik.
won
Fungsi ini memeriksa apakah permainan telah berakhir setelah setiap langkah pengguna. Ini mengembalikan nilai benar jika ubin berada dalam urutan yang benar (termasuk posisi ubin kosong di sudut kanan bawah). Dalam hal ini, program dapat dihentikan. Jika ubin masih tersebar, fungsi akan mengembalikan false dan meneruskan kendali ke fungsi move . Bagaimana cara mengatur inspeksi? Seperti dalam kasus menginisialisasi dan menggambar papan - menggunakan dua loop for yang bersarang. Misalnya, Anda dapat menetapkan ketentuan bahwa setiap angka berikutnya dalam larik harus lebih besar dari angka sebelumnya. Perhatikan nilai apa yang tertulis di ubin kosong. Atau cara lain - gunakan penghitung untuk memastikan semua ubin berada di tempatnya, jika Anda bisa mengatasinya dan tulis rumus untuk mendapatkannya. Semoga Anda beruntung dalam eksperimen Anda!

Cara memvalidasi kode Anda dan mendapatkan nilai

Perhatian! Jika penting bagi Anda untuk hanya memeriksa kebenaran tugas, gunakan cs50check. Jika Anda ingin mendapatkan nilai di platform edx, ikuti prosedur yang dijelaskan di bawah ini. Perlu diingat, prosedur ini menggunakan cs50check yang sama untuk memeriksa tugas. Satu-satunya perbedaan adalah ia mengingat hasil dan menghitung skor keseluruhan.
  1. Masuk ke IDE CS50
  2. Di dekat sudut kiri atas IDE CS50 , tempat browser file-nya berada (bukan di jendela terminal), klik kanan pada direktori pset3 Anda dan klik Unduh . Anda akan melihat bahwa browser telah mengunduh arsip pset3.tar.gz .
  3. Di jendela atau tab terpisah, masuk ke CS50 Submit
  4. Klik ikon Kirim di sudut kiri atas layar
  5. Pada daftar folder di sebelah kiri, klik direktori Kumpulan Masalah 3 , lalu klik tombol Unggah Pengajuan Baru. Ada di kanan.
  6. Pada layar yang muncul, klik tombol Tambahkan file .... Sebuah jendela untuk memilih file dari komputer Anda akan terbuka.
  7. Arahkan ke folder tempat Anda menyimpan pset3.tar.gz. Kemungkinan besar terletak di folder Unduhan Anda atau di mana pun browser Anda meletakkan file secara default. Saat Anda menemukan pset3.tar.gz , klik sekali untuk memilihnya, lalu klik Buka .
  8. Klik Mulai unggah . File Anda akan diunggah ke server CS50 .
  9. Pada layar yang muncul, Anda akan melihat jendela No File Selected . Jika Anda menggerakkan kursor mouse ke kiri, Anda akan melihat daftar file yang diunduh. Untuk mengonfirmasi, klik masing-masingnya. Jika Anda tidak yakin tentang sesuatu, Anda dapat mengunggah ulang file tersebut dengan mengulangi langkah yang sama. Anda dapat melakukan ini sebanyak yang Anda suka hingga akhir tahun 2016.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION