Mini-proyek Bagian 4: Batu-Gunting-Kertas

Proyek kedua Bagian 4 adalah permainan klasik. Kamu mengetik rock, paper, atau scissors; komputer memilih secara acak; program menentukan siapa yang menang. Proyek ini menggabungkan angka acak, switch, rantai if, serta && dan ||. Ini program pertamamu yang bermain melawan komputer.

Apa yang harus dibuat

Sebuah program yang, saat dijalankan:

  1. Meminta pemain mengetik rock, paper, atau scissors.
  2. Memilih langkah komputer secara acak.
  3. Mencetak pilihan komputer.
  4. Mencetak hasilnya: seri, menang, kalah, atau catatan langkah tidak sah.

Aturan menangnya seperti biasa:

  • batu (rock) mengalahkan gunting (scissors),
  • kertas (paper) mengalahkan batu,
  • gunting mengalahkan kertas.

Contoh sesi:

Choose rock, paper, or scissors: rock
The computer chose scissors.
You win!

Hasil seri, dan langkah yang tidak dikenal program:

Choose rock, paper, or scissors: paper
The computer chose paper.
It is a tie!

Choose rock, paper, or scissors: banana
The computer chose rock.
That is not a valid choice.

File

Starter dan versi jadi ada di projects/rock-paper-scissors/:

  • starter.go — prompt sudah ditulis, dengan komentar TODO untuk ketiga langkah. File ini bisa langsung dijalankan, dan mencetak satu baris pengganti, yang harus kamu ganti.
  • finished.go — versi yang sudah berfungsi. Baca setelah kamu mencoba punyamu.

Jalankan dengan:

go run projects/rock-paper-scissors/starter.go

Petunjuk

  • Tambahkan "math/rand" ke import. rand.Intn(3) + 1 memberikan 1, 2, atau 3. Ubah menjadi kata dengan switch.
  • Deklarasikan katanya sebelum switch dengan var computer string, dan isi dengan = di dalam setiap case. Variabel yang dideklarasikan dengan := di dalam case akan hilang di akhir case itu, seperti yang ditunjukkan Bab 16.
  • Rapikan ketikan pemain dengan strings.TrimSpace, seperti biasa. Tanpa itu, akhiran baris tetap ada di player dan tidak ada langkah yang pernah cocok.
  • Periksa pilihan yang tidak sah lebih dulu: kalau kata yang diketik bukan salah satu dari ketiganya, katakan begitu. player != "rock" && player != "paper" && player != "scissors" hanya benar kalau tidak ada yang cocok.
  • Pemeriksaan menang adalah tiga kasus yang digabung dengan ||, masing-masing berupa && dari dua langkah, seperti player == "rock" && computer == "scissors". Barisnya jadi panjang, jadi pecah saja. Akhiri setiap baris dengan ||, karena Go mengakhiri pernyataan pada pindah baris yang bisa menyelesaikan pernyataan itu:
} else if (player == "rock" && computer == "scissors") ||
    (player == "paper" && computer == "rock") ||
    (player == "scissors" && computer == "paper") {

Apa yang belum boleh kamu gunakan

  • Slice (Bagian 5). Tiga baris case menggantikan daftar pilihan.
  • Fungsi buatanmu sendiri (Bagian 5). Seluruh game muat di dalam main.
  • Perulangan, kecuali kalau kamu menambahkan fitur main lagi pada tantangan di bawah.

Tantangan lebih besar (opsional)

  • Main lagi. Bungkus game dalam for kosong, dan berhenti dengan break ketika pemain mengetik quit, bukan sebuah langkah. Buat reader sekali, sebelum perulangan.
  • Catat skor. Lacak kemenangan dan kekalahan dalam dua variabel dan cetak hasilnya setelah setiap ronde.

Tidak ada yang wajib untuk menyelesaikan proyek ini.

Selesai?

Ketika game menerima langkahmu, memilih langkahnya sendiri, dan mengumumkan hasil yang benar untuk seri, menang, kalah, dan input yang tidak sah, kamu selesai. Lanjut ke Bab 21 — Fungsi dan error, awal dari Bagian 5.