Mini-proyek Bagian 4: Game Tebak Angka

Proyek ini menggabungkan semua ide dari Bagian 3 dan 4: variabel, input, perbandingan, percabangan, perulangan. Hasilnya adalah game kecil yang benar-benar interaktif. Ini juga program yang diagram alirnya kamu lihat di mini-proyek Bagian 1, dan kodenya mengikuti diagram alir itu langkah demi langkah.

Apa yang harus dibuat

Sebuah program yang, saat dijalankan:

  1. Memilih bilangan bulat acak dari 1 sampai 100 (target), tersembunyi dari pengguna.
  2. Berulang kali:
    • Meminta tebakan dari pengguna.
    • Membaca tebakan.
    • Menghitung percobaan.
    • Mencetak Too low., Too high., atau Correct! berdasarkan perbandingan tebakan dengan target.
  3. Ketika tebakan cocok, mencetak berapa percobaan yang dibutuhkan, lalu berhenti.

Contoh sesi:

I am thinking of a number between 1 and 100.
Guess: 50
Too high.
Guess: 25
Too low.
Guess: 37
Too high.
Guess: 31
Too low.
Guess: 34
Correct! You got it in 5 attempts.

File

Starter dan versi jadi ada di projects/03-number-guess/:

  • starter.go — kerangka dengan komentar TODO. File ini bisa langsung dijalankan: file ini membaca satu tebakan dan mencetak satu baris pengganti, yang harus kamu ganti.
  • finished.go — versi yang sudah berfungsi. Bandingkan dengan punyamu sesudahnya.

Jalankan dengan:

go run projects/03-number-guess/starter.go

Petunjuk

  • Tambahkan "math/rand" ke import, lalu rand.Intn(100) + 1 memilih target. Panggil sekali, sebelum perulangan. Di dalam perulangan, targetnya tetap sama.
  • for kosong dengan break cocok di sini: isi perulangan bertanya sekali, lalu rantai if keluar ketika pemain menang. Mini-proyek Bagian 1 menunjukkan bentuk yang persis seperti ini.
  • Gunakan if, else if, else untuk ketiga jawaban, bukan switch. Di dalam switch, break hanya keluar dari switch, seperti peringatan Bab 18, dan game tidak akan pernah berakhir.
  • Penghitung percobaan adalah variabel yang diisi 0 sebelum perulangan dan dinaikkan dengan attempts++ di dalam isi perulangan.
  • readGuess() di mini-proyek Bagian 1 mewakili baris-baris pembacaan dari Bab 15. Kamu belum punya fungsi buatanmu sendiri, jadi tulis baris-baris itu di dalam perulangan: fmt.Print, reader.ReadString, strings.TrimSpace, dan strconv.Atoi. Buat reader sekali, sebelum perulangan.

Bagaimana dengan input yang salah?

strconv.Atoi memberikan 0 untuk teks yang bukan angka, seperti kata Bab 15, dan 0 berada di bawah semua target. Jadi abc dihitung sebagai percobaan dan mendapat Too low.:

I am thinking of a number between 1 and 100.
Guess: abc
Too low.
Guess: 34
Correct! You got it in 2 attempts.

Untuk sekarang itu bisa diterima. Tantangan pertama di bawah menanganinya dengan memeriksa rentang, dan Bab 21 menunjukkan pemeriksaan error yang sebenarnya.

Apa yang belum boleh kamu gunakan

  • Slice. Tidak perlu menyimpan riwayat tebakan.
  • Fungsi buatanmu sendiri. Game ini muat di dalam main.

Tantangan lebih besar (opsional)

Kalau versi dasarnya sudah berjalan, coba salah satu ini:

  • Periksa bahwa setiap tebakan berada dari 1 sampai 100. Kalau tidak, cetak pesan dan pakai continue, sebelum attempts++, supaya tebakan yang salah tidak dihitung.
  • Setelah tiga tebakan salah, cetak petunjuk apakah targetnya genap atau ganjil.
  • Lacak tebakan tertinggi dan terendah sejauh ini, dan cetak rentangnya setiap putaran, seperti (known range: 32 to 49).
  • Cetak 1 attempt, bukan 1 attempts, untuk tebakan pertama yang benar.

Tidak ada yang wajib supaya proyek ini dianggap selesai.

Selesai?

Ketika game berjalan lancar dari awal sampai akhir (memilih target, menerima tebakan, memberi tanggapan, dan berakhir dengan jumlah percobaan), lanjut ke proyek kedua Bagian 4, Batu-Gunting-Kertas.