Java'da Taş, Kağıt, Makas Oyunu Nasıl Yapılır (Resimlerle)

İçindekiler:

Java'da Taş, Kağıt, Makas Oyunu Nasıl Yapılır (Resimlerle)
Java'da Taş, Kağıt, Makas Oyunu Nasıl Yapılır (Resimlerle)

Video: Java'da Taş, Kağıt, Makas Oyunu Nasıl Yapılır (Resimlerle)

Video: Java'da Taş, Kağıt, Makas Oyunu Nasıl Yapılır (Resimlerle)
Video: ASHRAE Standard 183 SketchUp / OpenStudio Kullanarak Bina Yükü Hesaplamaları. (Türkçe Altyazı) 2024, Mayıs
Anonim

Taş, Kağıt, Makas, iki kişi tarafından oynanan bir el oyunudur. Her iki kişi de "taş, kağıt, makas" der ve sonra aynı anda elini uzatarak üç nesneden (taş, kağıt veya makas) birini oluştururdu. Kazanan el formasyonları tarafından belirlenir. Makas kağıdı yener, kağıt taşı yener ve taş makası yener. Her iki oyuncu da aynı el dizilişini oynarsa, beraberlik olarak kabul edilir. Bir oyuncunun kullanıcı, diğer oyuncunun bilgisayar olduğu Rock, Paper, Scissors simülasyonu için Java'da basit bir oyun yazacağız.

adımlar

1585279 1 1
1585279 1 1

Adım 1. Ana sınıfı oluşturun ve çağırın

Taş kağıt makas

.

Bu oyunu yazacağımız sınıf olacak. gibi başka bir ad vermeyi seçebilirsiniz.

oyun

veya

Ana

. Yapıcı ve ana yöntem için yöntem bildirimlerini yazın.

public class RockPaperScissors { public RockPaperScissors() { } public static void main(String args) { } }

1585279 2 1
1585279 2 1

Adım 2. El hareketleri (taş, kağıt veya makas) için bir numaralandırma oluşturun

Taş, kağıt veya makası temsil etmek için dizeleri kullanabiliriz, ancak bir numaralandırma, sabitlerimizi önceden tanımlamamıza izin verir; bu, numaralandırmayı kullanmanın daha iyi bir tasarım olduğu anlamına gelir. enum türümüzü arayacağız

Hareket

değerlerle

KAYNAK

KAĞIT

ve

MAKAS

private enum Move { ROCK, PAPER, SCISSORS }

1585279 3 1
1585279 3 1

Adım 3. İki özel sınıf oluşturun

kullanıcı

ve

Bilgisayar

.

Bu sınıflar oyundaki oyuncularımızı temsil edecek. Bu sınıfları herkese açık hale getirmeyi seçebilirsiniz. NS

kullanıcı

sınıf, kullanıcıdan taş, kağıt veya makas isteyen sınıf olacaktır, bu yüzden bir yazmamız gerekecek.

getMove()

yöntem. NS

Bilgisayar

sınıfın da olması gerekecek

getMove()

yöntemi, böylece bilgisayar da bir hamle yapabilir. Bu yöntemlere yer tutucular koyacağız ve daha sonra uygulayacağız. NS

kullanıcı

sınıfını ayarlayan bir kurucu gerektirecektir.

Tarayıcı

Kullanıcı girdisini alacak nesne. biz koyacağız

Tarayıcı

kullanıcı için özel bir alan olarak seçin ve ardından yapıcıda başlatın. kullandığımızdan beri

Tarayıcı

class, bunun için kodumuzun en üstüne bir import ifadesi yazmamız gerekiyor. NS

Bilgisayar

sınıf bir kurucu gerektirmez, bu yüzden bir tane yazmamız gerekmez; başlattığımızda

Bilgisayar

nesne, biz sadece varsayılan kurucuyu çağıracağız. İşte bizim

Taş kağıt makas

sınıf şimdi benziyor:

java.util. Scanner'ı içe aktarın; public class RockPaperScissors { private enum Move { ROCK, PAPER, SCISSORS } private class Kullanıcı { private Scanner inputScanner; public User() { inputScanner = new Scanner(System.in); } public Move getMove() { // YAPILACAKLAR: Bu yöntemi uygulayın return null; } } özel sınıf Bilgisayar { public Move getMove() { // YAPILACAKLAR: Bu yöntemi uygulayın return null; } } public RockPaperScissors() { } public static void main(String args) { } }

1585279 4 1
1585279 4 1

Adım 4.

getMove()

için yöntem

Bilgisayar

sınıf.

Bu yöntem rastgele

Hareket

. bir dizi alabiliriz

Hareket

arayarak numaralandırma

değerler()

yöntem:

Taşı.değerler()

. rastgele seçmek için

Hareket

Bu değerler dizisinde numaralandırma için 0 ile değerler dizimizin uzunluğu arasında bir tam sayı olan rastgele bir dizin oluşturmamız gerekiyor. Bunu yapmak için, kullanabiliriz

sonrakiInt()

yöntemi

Rastgele

içe aktarmamız gereken sınıf

java.util

. Rastgele dizini aldıktan sonra, geri dönebiliriz.

Hareket

değerler dizimizden bu dizinin.

public Move getMove() { Move move = Move.values(); Rastgele rastgele = yeni Rastgele(); int dizin = random.nextInt(hareket.uzunluk); dönüş hareketleri[indeks]; }

1585279 5 1
1585279 5 1

Adım 5.

getMove()

için yöntem

kullanıcı

sınıf.

Bu yöntem, bir

Hareket

kullanıcının girdisine karşılık gelen. Kullanıcının "taş", "kağıt" veya "makas" yazmasını bekliyoruz. İlk olarak, kullanıcıdan bir girdi istememiz gerekiyor:

System.out.print("Taş, kağıt veya makas? ")

. Sonra kullanın

Sonraki satır()

yöntemi

Tarayıcı

Kullanıcı girdisini bir dize olarak almak için nesne. Şimdi kullanıcının geçerli bir hamle yapıp yapmadığını kontrol etmemiz gerekiyor, ancak kullanıcı bir kelimeyi yanlış yazmışsa hoşgörülü olabiliriz. Bu nedenle, yalnızca kullanıcı girişinin ilk harfinin "R" (taş için), "P" (kağıt için) veya "S" (makas için) olup olmadığını kontrol edeceğiz ve bu durumla ilgilenmeyeceğiz çünkü ilk önce kullanacağız

toUpperCase()

yöntemi

Sicim

kullanıcı giriş dizesini tamamen büyük harf yapmak için sınıf. Kullanıcı uzaktan doğru bir giriş girmediyse, kullanıcıya tekrar soracağız. Ardından, kullanıcının ne koyduğuna bağlı olarak, karşılık gelen bir hamle döndürürüz.

public Move getMove() { // Kullanıcıya sor System.out.print("Taş, kağıt veya makas? "); // Kullanıcı girdisini al String userInput = inputScanner.nextLine(); userInput = userInput.toUpperCase(); char firstLetter = userInput.charAt(0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') { // Kullanıcı geçerli bir giriş anahtarı girdi (firstLetter) { case 'R': return Move. ROCK; durum 'P': dönüş Move. PAPER; durum 'S': dönüş Move. SCISSORS; } } // Kullanıcı geçerli bir giriş girmedi. Tekrar sor. getMove() döndür; }

1585279 6
1585279 6

Adım 6. Bir

tekrar oyna()

için yöntem

kullanıcı

sınıf.

Kullanıcı oyunu tekrar tekrar oynayabilmelidir. Kullanıcının tekrar oynamak isteyip istemediğini belirlemek için bir yazı yazmamız gerekiyor.

tekrar oyna()

oyuna kullanıcının tekrar oynamaya karar verip vermediğini söyleyen bir boole döndüren yöntem. Bu yöntemde kullandığımız

Tarayıcı

kullanıcıdan "Evet" veya "Hayır" almak için daha önce yapıcıda başlattığımız. Kullanıcının tekrar oynamak isteyip istemediğini belirlemek için sadece ilk harfin 'Y' olup olmadığını kontrol edeceğiz. Başka herhangi bir giriş, kullanıcının tekrar oynamak istemediği anlamına gelir.

public boolean playAgain() { System.out.print("Tekrar oynamak ister misiniz?"); String userInput = inputScanner.nextLine(); userInput = userInput.toUpperCase(); dön userInput.charAt(0) == 'Y'; }

1585279 7
1585279 7

Adım 7.

kullanıcı

ve

Bilgisayar

sınıflarda birlikte

Taş kağıt makas

sınıf.

Şimdi yazmayı bitirdiğimize göre

kullanıcı

ve

Bilgisayar

sınıflar, asıl oyunumuz üzerinde çalışmaya odaklanabiliriz. için özel alanlar oluşturun.

kullanıcı

ve

Bilgisayar

sınıflar

Taş kağıt makas

sınıf. Erişmek için bu alanlara erişmemiz gerekecek.

getMove()

oyunu oynarken kullandığımız yöntemler. için yapıcıda

Taş kağıt makas

class, bu alanları başlatın. Ayrıca skoru da takip etmemiz gerekecek.

kullanıcıScore

ve

bilgisayarSkoru

yapıcıda 0 olarak başlatmamız gereken alanlar. 0 olarak başlatılan bir alan olacak olan oyun sayısını da takip etmemiz gerekiyor.

özel Kullanıcı kullanıcı; özel Bilgisayar bilgisayarı; özel int userScore; özel int computerScore; özel intOyunların sayısı; public RockPaperScissors() { kullanıcı = yeni Kullanıcı(); bilgisayar = yeni Bilgisayar(); kullanıcıSkoru = 0; bilgisayarSkoru = 0; Oyun Sayısı = 0; }

1585279 8
1585279 8

Adım 8. Genişletin

Hareket

enum bize her durumda hangi hareketin kazandığını söyleyen bir yöntem eklemek için.

bir yazmamız gerekiyor

karşılaştırmakMoves()

hamleler aynıysa 0, mevcut hamle diğer hamleyi yenerse 1 ve mevcut hamle diğer hamleye kaybederse -1 döndüren yöntem. Bu, oyunda kazananı belirlemek için faydalı olacaktır. Bu yöntemi uygulamak için hamleler aynıysa ve dolayısıyla bir beraberliğimiz varsa önce 0 döndüreceğiz. Ardından 1 veya -1 döndürmek için bir switch ifadesi yazın.

private enum Move { TAŞ, KAĞIT, MAKAS; /** * Bu hamleyi, beraberlik, galibiyet veya * mağlubiyet belirlemek için başka bir hamleyle karşılaştırır. * * @param otherMove * ile karşılaştırmak için hareket * @return 1 bu hamle diğer hamleyi yenerse, -1 bu hamle diğer hamleye kaybederse *, bu hamleler kravatsa 0 */ public int karşılaştırmaMoves(Move otherMove) { / / Tie if (this == otherMove) 0 döndürür; switch (bu) { case ROCK: return (otherMove == SCISSORS ? 1: -1); case PAPER: return (otherMove == ROCK ? 1: -1); case SCISSORS: return (otherMove == PAPER ? 1: -1); } // Buraya asla ulaşmamalı, return 0; } }

1585279 9
1585279 9

Adım 9.

Oyunu başlatmak()

yöntemde

Taş kağıt makas

sınıf.

Bu yöntem oyunun oynanması olacaktır. Basit bir koyarak başlayın

System.out.println

yöntemde.

public void startGame() { System.out.println("TAŞ, KAĞIT, MAKAS!"); }

1585279 10
1585279 10

Adım 10. Kullanıcıdan ve bilgisayardan hamle alın

İçinde

Oyunu başlatmak()

yöntemini kullanın,

getMove()

gelen yöntemler

kullanıcı

sınıf ve

Bilgisayar

kullanıcıyı ve bilgisayarın hareketlerini almak için sınıf.

userMove = user.getMove(); Bilgisayarı Taşı = computer.getMove(); System.out.println("\n" + userMove + "oynadınız."); System.out.println("Bilgisayarda oynatıldı" + computerMove + ".\n");

1585279 11
1585279 11

Adım 11. İki hareketi karşılaştırın ve kullanıcının mı yoksa bilgisayarın mı kazandığını belirleyin

Kullan

karşılaştırmakMoves()

yöntemden

Hareket

enum kullanıcının kazanıp kazanmadığını belirlemek için. Kullanıcı kazanırsa, kullanıcı puanını 1 artırın. Kullanıcı kaybederse, bilgisayar puanını 1 artırın. Beraberlik varsa, puanların hiçbirini artırmayın. Ardından, bir tarafından oynanan oyun sayısını artırın.

int karşılaştırmaMoves = userMove.compareMoves(computerMove); switch (compareMoves) { case 0: // Tie System.out.println("Tie!"); kırmak; durum 1: // Kullanıcı System.out.println(userMove + " beats " + computerMove + ". Kazandınız!"); kullanıcıSkor++; kırmak; case -1: // Bilgisayar System.out.println(computerMove + " yener " + userMove + " kazanır. Kaybettiniz."); bilgisayarSkoru++; kırmak; } sayıOfGames++;

1585279 12
1585279 12

Adım 12. Kullanıcının tekrar oynamak isteyip istemediğini sorun

Kullanıcı tekrar oynamak isterse, arayın

Oyunu başlatmak()

Yeniden. Aksi takdirde, arayın

printOyun İstatistikleri()

hangi oyunun istatistiklerini yazdıracak. Bu yöntemi bir sonraki adımda yazacağız.

if (user.playAgain()) { System.out.println(); Oyunu başlatmak(); } başka { printGameStats(); }

1585279 13
1585279 13

Adım 13.

printOyun İstatistikleri()

yöntem.

Bu yöntem oyunun istatistiklerini görüntüler: galibiyet sayısı, mağlubiyet sayısı, beraberlik sayısı, oynanan oyun sayısı ve kullanıcı tarafından kazanılan oyunların yüzdesi. Kazanılan oyunların yüzdesi (# galibiyet + (# beraberlik/2))/(# oyun oynandı) ile hesaplanır. Bu yöntem kullanır

System.out.printf

biçimlendirilmiş metni yazdırmak için

private void printGameStats() { int wins = userScore; int kayıplar = computerScore; int bağları = sayıOfGames - userScore - computerScore; double yüzdeKazandı = (galibiyet + ((çift) beraberlik) / 2) /Oyunların sayısı; // Satır System.out.print("+"); tireler(68); System.out.println("+"); // Başlıkları yazdır System.out.printf("| %6s | %6s | %6s | %12s | %14s |\n", "KAZANÇ", "KAYIPLAR", "BAĞIŞLAR", "OYUNLAR OYNADI", "YÜZDE KAZANMAK"); // Satır System.out.print("|"); tireler(10); System.out.print("+"); tireler(10); System.out.print("+"); tireler(10); System.out.print("+"); tireler(16); System.out.print("+"); tireler(18); System.out.println("|"); // Değerleri yazdır System.out.printf("| %6d | %6d | %6d | %12d | %13.2f%% |\n", galibiyetler, mağlubiyetler, beraberlik, sayıOfGames, yüzde Kazanılan * 100); // Satır System.out.print("+"); tireler(68); System.out.println("+"); }

1585279 14
1585279 14

Adım 14. Oyunu ana sınıfta başlatın

Ana sınıfta, bir örneğini başlatın

Taş kağıt makas

sınıf ve ara

Oyunu başlatmak()

yöntem.

public static void main(String args) { RockPaperScissors oyunu = new RockPaperScissors(); oyun.startGame(); }

1585279 15
1585279 15

Adım 15. Oyununuzu test edin

Rock, Paper, Scissors oyununu yazmak için tüm çabayı harcadığımıza göre, şimdi her şeyi derleme ve test etme zamanı!

Örnek Program

java.util. Random'u içe aktar; java.util. Scanner'ı içe aktarın; public class RockPaperScissors { private User user; özel Bilgisayar bilgisayarı; özel int userScore; özel int computerScore; özel intOyunların sayısı; private enum Move { TAŞ, KAĞIT, MAKAS; /** * Bu hamleyi, beraberlik, galibiyet veya * mağlubiyet belirlemek için başka bir hamleyle karşılaştırır. * * @param otherMove * ile karşılaştırmak için hareket * @return 1 bu hamle diğer hamleyi yenerse, -1 bu hamle diğer hamleye kaybederse *, bu hamleler kravatsa 0 */ public int karşılaştırmaMoves(Move otherMove) { / / Tie if (this == otherMove) 0 döndürür; switch (bu) { case ROCK: return (otherMove == SCISSORS ? 1: -1); case PAPER: return (otherMove == ROCK ? 1: -1); case SCISSORS: return (otherMove == PAPER ? 1: -1); } // Buraya asla ulaşmamalı, return 0; } } özel sınıf Kullanıcı { özel Tarayıcı girişiScanner; public User() { inputScanner = new Scanner(System.in); } public Move getMove() { // Kullanıcıya sor System.out.print("Taş mı, kağıt mı, yoksa makas mı?"); // Kullanıcı girdisini al String userInput = inputScanner.nextLine(); userInput = userInput.toUpperCase(); char firstLetter = userInput.charAt(0); if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') { // Kullanıcı geçerli bir giriş anahtarı girdi (firstLetter) { case 'R': return Move. ROCK; durum 'P': dönüş Move. PAPER; durum 'S': dönüş Move. SCISSORS; } } // Kullanıcı geçerli bir giriş girmedi. Tekrar sor. getMove() döndür; } public boolean playAgain() { System.out.print("Tekrar oynamak ister misiniz?"); String userInput = inputScanner.nextLine(); userInput = userInput.toUpperCase(); dön userInput.charAt(0) == 'Y'; } } özel sınıf Bilgisayar { public Move getMove() { Move moves = Move.values(); Rastgele rastgele = yeni Rastgele(); int dizin = random.nextInt(hareket.uzunluk); dönüş hareketleri[indeks]; } } genel RockPaperScissors() { kullanıcı = yeni Kullanıcı(); bilgisayar = yeni Bilgisayar(); kullanıcıSkoru = 0; bilgisayarSkoru = 0; Oyun Sayısı = 0; } public void startGame() { System.out.println("TAŞ, KAĞIT, MAKAS!"); // Hareketleri al Move userMove = user.getMove(); Bilgisayarı Taşı = computer.getMove(); System.out.println("\n" + userMove + "oynadınız."); System.out.println("Bilgisayarda oynatıldı" + computerMove + ".\n"); // Hareketleri karşılaştır ve kazananı belirle int karşılaştırmaMoves = userMove.compareMoves(computerMove); switch (compareMoves) { case 0: // Tie System.out.println("Tie!"); kırmak; durum 1: // Kullanıcı System.out.println(userMove + " beats " + computerMove + ". Kazandınız!"); kullanıcıSkor++; kırmak; case -1: // Bilgisayar System.out.println(computerMove + " yener " + userMove + " kazanır. Kaybettiniz."); bilgisayarSkoru++; kırmak; } sayıOfGames++; // Kullanıcıdan tekrar oynamasını isteyin if (user.playAgain()) { System.out.println(); Oyunu başlatmak(); } başka { printGameStats(); } } /** * Oyunun istatistiklerini yazdırır. Kazanılan yüzde * cinsinden galibiyetin 1/2'si olarak bağları hesaplar. */ private void printGameStats() { int wins = userScore; int kayıplar = computerScore; int bağları = sayıOfGames - userScore - computerScore; double yüzdeKazandı = (galibiyet + ((çift) beraberlik) / 2) /Oyunların sayısı; // Satır System.out.print("+"); tireler(68); System.out.println("+"); // Başlıkları yazdır System.out.printf("| %6s | %6s | %6s | %12s | %14s |\n", "KAZANÇ", "KAYIPLAR", "BAĞIŞLAR", "OYUNLAR OYNADI", "YÜZDE KAZANMAK"); // Satır System.out.print("|"); tireler(10); System.out.print("+"); tireler(10); System.out.print("+"); tireler(10); System.out.print("+"); tireler(16); System.out.print("+"); tireler(18); System.out.println("|"); // Değerleri yazdır System.out.printf("| %6d | %6d | %6d | %12d | %13.2f%% |\n", galibiyetler, mağlubiyetler, beraberlik, sayıOfGames, yüzde Kazanılan * 100); // Satır System.out.print("+"); tireler(68); System.out.println("+"); } private void printDashes(int numberOfDashes) { for (int i = 0; i < numberOfDashes; i++) { System.out.print("-"); } } public static void main(String args) { RockPaperScissors oyunu = new RockPaperScissors(); oyun.startGame(); } }

Önerilen: