JavaRush /Blog Java /Random-MS /Harvard CS50: Tugasan Minggu 3 (Kuliah 7 dan 8), Bahagian...
Masha
Tahap

Harvard CS50: Tugasan Minggu 3 (Kuliah 7 dan 8), Bahagian 2

Diterbitkan dalam kumpulan
Kuliah Asas Pengaturcaraan Harvard CS50 Bahan tambahan: notasi asimptotik, algoritma pengisihan dan carian Tugasan Minggu 3, bahagian 1. Menyusun dan mencari.

Permainan bermula!

Harvard CS50: Tugasan Minggu 3 (Kuliah 7 dan 8), Bahagian 2 - 1 Sudah tiba masanya untuk bermain! Kebanyakan orang biasa dengan permainan teka-teki "Tag". Untuk memformalkannya, "Tag" ialah medan 4x4 dua dimensi, dalam medan ini tidak ada 16, tetapi 15 petak, iaitu, satu slot kekal kosong. Setiap petak bernombor dan boleh bergerak secara mendatar atau menegak dalam medan (jika, sudah tentu, ada ruang untuk bergerak). Matlamatnya adalah untuk meletakkan nombor dalam susunan, dari 1 hingga 15 dari kiri ke kanan dari atas ke bawah. Kemudian ruang kosong akan berada di sudut kanan bawah. Pergerakan mana-mana jubin (atau beberapa) ialah "langkah" dalam ruang permainan ini. Gabungan yang ditunjukkan dalam gambar di atas sudah disusun, tetapi ambil perhatian bahawa 12 atau 15 jubin boleh ditolak ke dalam ruang kosong. Peraturan menyatakan bahawa jubin tidak boleh digerakkan secara menyerong atau dikeluarkan dari papan permainan. Sebenarnya terdapat banyak konfigurasi untuk memulakan permainan (anda boleh mengira berapa banyak betul-betul), tetapi demi kesederhanaan, mari kita susun jubin mengikut tertib daripada yang terbesar kepada yang terkecil dan biarkan ruang kosong di sudut kanan bawah papan. . Satu-satunya perkara ialah, mari kita tukar 1 dan 2 supaya teka-teki itu boleh diselesaikan. Harvard CS50: Tugasan Minggu 3 (Kuliah 7 dan 8), Bahagian 2 - 2 Sekarang pergi ke direktori ~/ meja kerja anda , kemudian /pset3/fifteen dan buka fifteen.c . Ia mengandungi kod untuk enjin permainan. Tugasnya adalah untuk menambah kod pada permainan. Tetapi pertama-tama, mari kita kumpulkan "enjin" kami (anda mungkin sudah tahu cara melakukannya). Walaupun permainan belum selesai, anda boleh melancarkan aplikasi. Ia akan menjadi lebih mudah untuk menjalankannya dalam tetingkap terminal yang lebih besar daripada biasa, yang boleh dibuka dengan mengklik pada tambah hijau (+) di sebelah salah satu tab kod dan memilih Terminal Baharu . Atau anda boleh membuka tetingkap terminal dalam skrin penuh dengan mengklik pada ikon Maksimumkan di sudut kanan atas konsol. Anda melihat bahawa beberapa perkara berfungsi entah bagaimana. Tetapi sebenarnya, kebanyakan permainan masih belum ditulis. Dan di sini - bersedia - adalah jalan keluar anda!
Belajar
Kaji kod dan ulasan fifteen.c dan kemudian jawab soalan di bawah:
  1. Selain daripada papan 4x4, apakah saiz medan yang dibenarkan oleh enjin kita?
  2. Apakah struktur data medan permainan?
  3. Apakah fungsi yang dipanggil untuk menyambut pemain pada permulaan permainan?
  4. Apakah ciri yang perlu anda laksanakan?
  5. Nota: Jika anda mahu semak automatik memberitahu anda jika anda menjawab soalan dengan betul, di sebelah fail fifteen.c, cari fail fifteen.txt dan tulis jawapan kepada soalan ini di dalamnya.
Perlaksanaan
Baiklah, mari kita mula melaksanakan permainan. Ingat, kita bergerak dalam langkah kecil, jangan cuba lakukan semuanya sekaligus. Sebaliknya, mari kita laksanakan ciri satu demi satu dan pastikan ia berfungsi sebelum bergerak ke hadapan. Khususnya, kami mencadangkan agar anda melaksanakan fungsi permainan dalam susunan berikut: init (permulaan), seri (lukisan), bergerak (mengambil langkah), menang (menang). Keputusan reka bentuk (seperti berapa banyak ruang untuk dimasukkan antara jubin nombor kami) adalah milik anda. Padang permainan sepatutnya kelihatan seperti ini: 15 14 13 12 11 10 9 8 7 6 5 4 3 1 2 _ Sekali lagi, sila ambil perhatian bahawa dalam kedudukan permulaan, 1 dan 2 terletak dalam susunan terbalik (ini digunakan untuk medan 4x4 klasik jika bilangan jubin adalah ganjil). Jika bilangan jubin genap dan medan adalah 3x3, tidak perlu menukar dua jubin "terendah". 8 7 6 5 4 3 2 1 _ Untuk menguji pelaksanaan "Tag" anda, anda perlu mencuba memainkannya (jangan lupa, anda boleh keluar dari program sebelum selesai semula jadi dengan menekan kombinasi kekunci crtl+c). Pastikan program akan berfungsi jika nombor yang dimasukkan salah. Dan ingat bahawa sama seperti anda mengautomasikan input untuk mencari, anda boleh mengautomasikan "panduan" permainan. Malah, dalam folder ~cs50/pset3 terdapat fail 3x3.txt dan 4x4.txt , yang mengandungi semua urutan langkah untuk menang pada medan 3x3 dan 4x4. Untuk menguji program, contohnya, menggunakan fail pertama, jalankan arahan berikut: ./fifteen 3 < ~cs50/pset3/3x3.txt Sediakan hujah yang anda perlukan untuk mempercepatkan animasi. Dan secara umum, jika anda mahu, anda sentiasa boleh menukar permainan. Untuk berseronok dengan "urutan melarikan diri ANSI" termasuk warna. Lihatlah pelaksanaan clear dan lihat http://isthe.com/chongo/tech/comp/ansi_escapes.html untuk mempelajari helah baharu. Jika anda mahu, tulis fungsi anda sendiri atau tukar prototaip fungsi yang kami tulis. Satu-satunya had ialah anda tidak mengubah logik fungsi utama, jika tidak, kami tidak akan dapat menggunakan beberapa ujian automatik padanya untuk mengesahkan bahawa program anda berfungsi dengan betul. Khususnya, main mesti mengembalikan 0 jika dan hanya jika pengguna menyelesaikan teka-teki. Nilai bukan sifar mesti dikembalikan untuk semua pilihan ralat. Jika berlaku sebarang ralat, tulis kepada kami. Nah, jika anda ingin bermain dengan pelaksanaan aplikasi yang disediakan oleh pembantu CS50, jalankan arahan berikut: ~cs50/pset3/fifteen Jika anda berminat untuk melihat pelaksanaan yang lebih sejuk, dengan penyelesaian teka-teki automatik, lihat versi "Penggodam" program: ~cs50/hacker3/fifteen Daripada memasukkan nombor dalam tetingkap permainan, taip perkataan GOD. Hebat, bukan? Jika anda ingin menyemak ketepatan program anda secara rasmi dengan check50, ambil perhatian bahawa check50 menganggap bahawa ruang kosong padang permainan diisi dengan 0; jika anda memilih nilai yang berbeza, gantikannya dengan sifar untuk pengesahan yang betul. Selain itu, check50 mengandaikan bahawa anda mengindeks medan papan dalam susunan [baris] [lajur], bukan papan [lajur] [baris]. check50 2015.fall.pset3.fifteen fifteen.c
Ketahui lebih lanjut tentang pelaksanaan Lima Belas fungsi permainan
  • init (permulaan)
  • melukis
  • bergerak (bergerak)
  • menang (menang)
di dalamnya
Dalam fungsi ini kami memperkenalkan padang permainan. Untuk melakukan ini, kami menggunakan tatasusunan dua dimensi integer. Dimensi tatasusunan ialah MAX x MAX, dengan MAX ialah pemalar yang menunjukkan bilangan maksimum jubin yang boleh dimuatkan dalam baris atau lajur medan. Oleh itu, kita perlu mentakrifkan papan int pembolehubah[MAX][MAX] Walau bagaimanapun, ingat bahawa saiz padang permainan ditentukan oleh pengguna. Oleh itu, kita perlu menentukan pembolehubah yang akan menunjukkan saiz papan yang pengguna mesti masukkan. Ini adalah int d . di mana d ialah dimensi papan, d <= MAX. Walau bagaimanapun, dalam C anda tidak boleh menukar saiz tatasusunan, jadi anda perlu menyelesaikan saiz maksimum. Dalam init anda perlu meletakkan nilai di papan. Harvard CS50: Tugasan Minggu 3 (Kuliah 7 dan 8), Bahagian 2 - 3 Baca lebih lanjut mengenai tatasusunan dua dimensi jika anda belum bekerja dengannya lagi. Ringkasnya, mereka mempunyai dua indeks, yang pertama menandakan nombor baris, yang kedua nombor lajur. Untuk masalah kita, kita mulakan dengan nombor maksimum dan berakhir dalam kes d = 3 (“Lapan”) dengan satu dan sudut kosong. Jika kita masih mempunyai "Tag", maka kita menukar 1 dan 2. Apa yang perlu dilakukan dengan ruang kosong? Tatasusunan kami terdiri daripada integer, jadi kekosongan mesti diisi dengan beberapa integer. Oleh itu, anda mesti memilih beberapa integer untuk memulakan jubin kosong (atau, dalam kes permainan fizikal, ketiadaan jubin). Gelung boleh digunakan untuk memulakan papan permainan dan mengisinya dengan set permulaan jubin. Kami menggelungkan melalui indeks i dan j, dengan papan[i][j] ialah jubin yang terletak dalam nombor baris i dan nombor lajur j. Kami mengisi papan dalam susunan menurun. Jika bilangan jubin (tanpa jubin kosong) adalah ganjil, tukar 1 dan 2.
melukis
Fungsi ini harus mencetak keadaan semasa padang permainan. Ingat bahawa kita boleh mempunyai nilai dengan satu atau dua digit, jadi untuk pemformatan yang cantik selepas nombor 1-9 fungsi harus mencetak ruang ( #s ). Ini boleh dilakukan menggunakan ruang letak %2d . printf (“%2d”, board[i][j]); Juga jangan lupa tentang sel kosong. Pilih watak yang akan mewakilinya (dalam contoh kami, ini adalah garis bawah). Fungsi draw harus melukis aksara ini sebaik sahaja anda menekan sel kosong. Jadi gelung kami adalah seperti ini: for каждой строки for каждого element строки print meaning и пробел print новую строку Ingat bahawa susunan fungsi draw menarik jubin ke skrin harus mencerminkan susunan ia berada dalam tatasusunan yang ditakrifkan dalam fungsi init .
bergerak
Sebaik sahaja anda telah memulakan medan permainan dan melukis kedudukan jubin awal, anda perlu membenarkan pengguna mengedit kedudukan jubin, iaitu, membuat pergerakan. Jadi dalam Fifteen.c program mengambil output daripada pengguna, membina papan permainan dan kemudian memanggil fungsi bergerak dan memberitahu jubin mana yang dia mahu alihkan. Berhati-hati: anda menggunakan fungsi secara khusus pada nombor pada jubin, dan bukan pada kedudukannya pada papan (dalam tatasusunan). Oleh itu, anda perlu mencari kedudukan sebenar jubin. Selain itu, anda hanya perlu membenarkan pengguna mengalihkan jubin apabila boleh. Harvard CS50: Tugasan Minggu 3 (Kuliah 7 dan 8), Bahagian 2 - 4 Dalam gambar di atas, kita hanya boleh memindahkan jubin nombor 2, 5 dan 8. Bagaimana untuk menentukan ini? Dengan nilai jubin kosong. Jadi fungsi bergerak berfungsi seperti ini:
  • Menerima nombor jubin yang pengguna mahu alihkan
  • Mencari kedudukan dalam tatasusunan (di padang permainan) jubin ini
  • Mengingati kedudukan jubin kosong
  • Jika jubin kosong bersebelahan dengan jubin yang ingin dialihkan oleh pengguna, jubin itu ditukar dalam tatasusunan.
menang
Fungsi ini menyemak sama ada permainan telah tamat selepas setiap langkah pengguna. Ia kembali benar jika jubin berada dalam susunan yang betul (termasuk kedudukan jubin kosong di sudut kanan bawah). Dalam kes ini, program boleh ditamatkan. Jika jubin masih bertaburan, fungsi mengembalikan palsu dan menyerahkan tampuk kepada fungsi alih . Bagaimana untuk mengatur pemeriksaan? Seperti dalam kes memulakan dan melukis papan - menggunakan dua gelung bersarang. Sebagai contoh, anda boleh menetapkan syarat bahawa setiap nombor berikutnya dalam tatasusunan mestilah lebih besar daripada yang sebelumnya. Perhatikan nilai yang ditulis dalam jubin kosong. Atau cara lain - gunakan kaunter untuk memastikan semua jubin berada di tempatnya, jika anda boleh mengendalikannya dan tulis formula untuk mendapatkannya. Kami mengucapkan selamat maju jaya dalam percubaan anda!

Bagaimana untuk mengesahkan kod anda dan mendapatkan markah

Perhatian! Jika penting untuk anda menyemak hanya ketepatan tugasan, kemudian gunakan cs50check. Jika anda ingin mendapatkan gred pada platform edx, ikut prosedur yang diterangkan di bawah. Perlu diingat, prosedur ini menggunakan cs50check yang sama untuk menyemak tugas. Satu-satunya perbezaan ialah ia mengingati keputusan dan mengira skor keseluruhan.
  1. Log masuk ke CS50 IDE
  2. Berhampiran sudut kiri atas IDE CS50 , di mana pelayar failnya terletak (bukan dalam tetingkap terminal), klik kanan pada direktori pset3 anda dan klik Muat turun . Anda harus melihat bahawa penyemak imbas telah memuat turun arkib pset3.tar.gz .
  3. Dalam tetingkap atau tab yang berasingan, log masuk ke CS50 Submit
  4. Klik pada ikon Hantar di sudut kiri atas skrin
  5. Dalam senarai folder di sebelah kiri, klik pada direktori Set Masalah 3 , kemudian klik pada butang Muat Naik Penyerahan Baharu. Ia di sebelah kanan.
  6. Pada skrin yang muncul, klik pada butang Tambah fail .... Tetingkap untuk memilih fail dari komputer anda akan dibuka.
  7. Navigasi ke folder tempat anda menyimpan pset3.tar.gz. Ia berkemungkinan besar terletak dalam folder Muat Turun anda atau di mana-mana pelayar anda meletakkan fail secara lalai. Apabila anda menemui pset3.tar.gz , klik padanya sekali untuk memilihnya, kemudian klik Buka .
  8. Klik Mula muat naik . Fail anda akan dimuat naik ke pelayan CS50 .
  9. Pada skrin yang muncul, anda sepatutnya melihat tetingkap Tiada Fail Dipilih . Jika anda menggerakkan kursor tetikus anda ke kiri, anda akan melihat senarai fail yang dimuat turun. Untuk mengesahkan, klik pada setiap satu daripadanya. Jika anda tidak pasti tentang sesuatu, anda boleh memuat naik semula fail dengan mengulangi langkah yang sama. Anda boleh melakukan ini seberapa banyak kali yang anda suka sehingga penghujung tahun 2016.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION