Ev Kişisel Finans Java Programlama Mücadelesi: Basit Tic-Tac-Toe Programına Array Ekleme

Java Programlama Mücadelesi: Basit Tic-Tac-Toe Programına Array Ekleme

Video: Coding Challenge #147: Chrome Dinosaur Game (with Speech Commands machine learning model!) 2025

Video: Coding Challenge #147: Chrome Dinosaur Game (with Speech Commands machine learning model!) 2025
Anonim

Bu Java programlama zorluğu, bu Tic-Tac-Toe serisindeki önceki zorluklara dayanır ve aslında dizilerden ikisini de kullanma becerilerini test eder.

Java Programlama Zorunluluğunda: Basit Bir Tic-Tac-Toe Oyunu ve Java Programlama Zorluğu: Basit Tic-Tac-Toe Programına Sınıf Ekleme özelliğini kullanarak Tic-Tac-Toe'nin basit oyununu oynamak için bir program yazmaya davet edildiniz.

Bir oyun olarak, Tic-Tac-Toe, oyunun durumunu temsil etmek için bir dizinin kullanılması için çığr atıyor. Diziler olmadan, yönetim kurulunun her bir karesini temsil etmek için ayrı bir değişken kullanmanız gerekir. Bir dizi ile dokuz karenin tamamını temsil etmek için tek bir değişken kullanabilirsiniz.

Bu programlama zorluğu basittir: Programın, dizileri kullanan gelişmiş bir sürümünü yazın. Çözümünüzde en az iki dizi kullanmanız gerekir:

  1. Tahtayı temsil etmek için bir dizi kullanmanız gerekir. Büyük olasılıkla, dokuz elemanlı tek boyutlu bir dizi kullanmak isteyeceksiniz:

    0 | 1 | 2 --- | --- | --- 3 | 4 | 5 --- | --- | --- 6 | 7 | 8
    

    Diğer bir deyişle, sol üstteki kare (A1) dizi öğesi 0'da, sağ alt kare (C3) ise dizi öğesi 8'de saklanır.

  2. Ayrıca sekiz olası üç ardışık vektörü temsil etmek için bir dizi kullanmalısınız.

    Sonra bu diziyi, iki oyuncu da oyunu kazanıp kazanmadığını belirlemek için kullanabilirsiniz. Büyük olasılıkla, bu görev için iki boyutlu bir dizi kullanmak isteyeceksiniz. Dizinin her biri, sırayla belirli bir üçlü vektörün üç dizinini temsil eden sekiz üç elemanlı diziler bulunur.

    Komple dizi aşağıdaki verileri içerecektir:

    0 1 2 3 4 5 6 7 8 0 3 6 1 4 7 2 5 8 0 4 8 2 4 6
    

Bu programın ek bir gereksinimi, sizin için yarattığınız TicTacToeBoard sınıfının bu meydan okuma bir önceki meydan okuma işlemi için oluşturduğunuz sınıfla tamamen uyumlu olmalıdır. Başka bir deyişle, aynı yöntemleri uygulamalıdır. Size kolaylık olması açısından, bu yöntemler aşağıdaki tabloda tekrarlanmıştır.

Bu yöntemler, A1 veya B2 gibi satır-sütun atamalarını kullanan tik-tac-toe board'un karelerine işaret ettiğinden, uygulamanızın bu atamaları dizin numaralarına eşlemesi gerekir. Örneğin, A1 dizesi playAt yöntemine geçirilirse, program dizindeki 0 dizinindeki oyunun işareti olmalı.

TicTacToeBoard Sınıfı
Oluşturucu Açıklama
TicTacToeBoard

Tüm kareler boşalan yeni bir TicTacToeBoard oluşturur.
Yöntem Açıklama
void reset () Her karenin durumunu boşa döndürür.
void playAt (String square, int player) Belirtilen oyuncunun belirtilen karesini (A1, A2, A3, B1, B2, B3, C1, C2 veya C3) işaretler (X için 1, O). Square, izin verilen değerlerden biri değilse, oyuncu 1 veya 2 değilse veya belirtilen kare boş değilse IllegalArgumentException atar.
int isGameOver () Oyunun bitip bitmediğini belirler. Oyun bitmediyse 0, oyun sırasında X, bir oyun kazandığında 2, oyun berabere kalırsa 3 döndürür. Oyun sonlandırma koşulları aşağıdaki gibidir:

1: Herhangi bir satır, sütun veya köşegen tüm X'leri içeriyorsa.

2: Herhangi bir satır, sütun veya köşegen tüm O'ları içeriyorsa.

3: Boş kareler yoksa ne X ne de O kazandı.

int getNextMove () Bilgisayar rakibinin bir sonraki hamlenini temsil eden bir tam sayı döndürür. Bu yöntem, aşağıdaki stratejiye uygun olarak iyi bir hamle seçmek için temel bir çaba göstermelidir:

* Merkez (B2 karesi) boşalırsa, merkez kareyi oynatın.

* Merkez boş değilse, dört köşeden herhangi biri (kareler A1, A3, C1 veya C3) boşsa, köşelerden birini kullanın (hangisi önemsizdir).

* Merkez boş değilse ve köşeler boş değilse kenarlardan birini oynatın (kareler A2, B1, B3 veya C2).

String toString () Tahtanın geçerli durumunu gösteren bir dize döndürür. Dize, bu örnekte olduğu gibi satırları ve ayrı çizgilerini ayrı konsol satırlarında görüntülemek için yeni satır karakterleri içerir:

O | | O

- | - | -

| X |

- | - | -

| X |

Başka bir zorluk olarak, TicTacToeBoard meydan okumasının bu sürümü için, bilgisayar çalar insan rakibe karşı daha akıllı bir strateji kullanmalıdır. Bilgisayarın oyununu aşağıdaki gibi belirleyin:

  1. Bilgisayarın bir sonraki oyuna girmesi mümkünse, bilgisayar kazanan alanda oynamalıdır.

  2. İnsan rakibinin bir sonraki oyununda kazanması mümkünse, bilgisayar, kazanmayı engellemek için insan rakibinin kazanan meydanında oynamalıdır.

  3. Orta kare kullanılabilirse, bilgisayar orta kareyi alacaktır.

  4. Herhangi bir köşe kare mevcutsa, bilgisayar mevcut köşelerden birinde oynamalıdır.

  5. Bilgisayar, kullanılabilen bir kenarlık oynamalıdır.

Bu stratejiyi uygulamak için, her iki oyuncunun da bir sonraki hamleyinde kazanabileceğini belirleyebilecek bir rutini geliştirmeniz gerektiğini unutmayın. Bunu yapmak için, vektörün bir boş kare içerip barındırıp tutmadığını ve diğer iki karenin her birinin aynı rakibe (diğer bir deyişle) karşı işaretler içerdiğini belirlemek için sıradaki üçü vektörlerden her birine bakmanız gerekir., iki X veya iki O'dır).

Bunu, boş bir kareyi temsil etmek için 0, bir X'i temsil etmek için 1 ve bir O'yu temsil etmek için 2'yi kullanarak yapabilirsiniz. Fakat bu oldukça karmaşık bir mantık gerektirir - buna benzer bir şey s1, s2, ve s3 sekiz, üç sıradaki vektörlerden birinin üç karesinin içeriğini içeren tamsayılardır:

if (s1 == 0 & s2 == 1 & s3 == 1) // X can (s2 == 0 & s1 == 1 & s3 == 1) // x s2'de oynayarak kazanabilirse (s3 == 0 & s1 == 1 & s2 == 1) // X, s3'de oynamakla kazanabilir

Yani bir ipucu var: Boş bir kare, bir X ve bir O temsil etmek için 0, 1 ve 2 kullanmak yerine bunun yerine asal sayı 2, 3 ve 5'i kullanın.Ardından, bir oyuncunun belirli bir vektörde kazanabileceğini belirlemek için o vektör için üç değeri çarpın. Sonuç 18 ise, X kazanabilir (233 = 18). Sonuç 50 ise, O kazanabilir (255 = 50).

Ayrıca, bu strateji programın önceki sürümleri için uygulanan strateji üzerinde bir iyileştirme olsa da, yine de mükemmel bir strateji değildir: Yine de doğru sırayla bilgisayarınızı yenebilirsiniz. İlave bir meydan okuma isterseniz, oyunu ekart edilemez yapmak için hangi ek stratejinin gerekli olacağını düşünün ve ardından yeni stratejiyi uygulamak için bir yol düşünün.

Bu zorluğun çözümünü, Java All-in-One Dummies, 4. Edition ürün sayfasındaki İndirilenler sekmesinde bulabilirsiniz.

İyi şanslar!

Java Programlama Mücadelesi: Basit Tic-Tac-Toe Programına Array Ekleme

Editörün Seçimi

Genişletme Bağlantılar ve Bina Robotları için Pinouts - mankenler

Genişletme Bağlantılar ve Bina Robotları için Pinouts - mankenler

Eğer bir robot inşa ediyorsanız, çok sayıda elektrik bağlantısı, bu yüzden çok sayıda iğne ile uğraşıyorsunuz. Aşağıdaki tabloda, genişleme konektörleri ve pim numaraları için sinyal gösterilmektedir. İstenmeyen çapraz bağlantıları önlemeye yardımcı olabilir. Genişletme Konnektörü Pin Numarası Sinyal Genleşmesi Konnektör Pin Numarası Sinyal 1, 2 Toprak 16 P11 Yeşil LED 3, 4 + 5 ...

Dizinler içeren Kablosuz Erişim Noktalarını bulma - mankenler

Dizinler içeren Kablosuz Erişim Noktalarını bulma - mankenler

Sıcak noktaları bulma konusunda çevrimiçi dizinler, gezinmek için mükemmel bir araçtır. ABD, Kanada ve dünyadaki artan sayıda sıcak nokta. Size kolaylık sağlamak için, bu dizinlerden bazıları. Dizin Notları JiWire WiFi Bulucu 144 ülkede ücretsiz ve ücretli Wi-Fi yerleri dizini sağlar. AT & T ...

Ham Radyoda genel Sınıf Frekans Ayrıcalıkları - mankenler

Ham Radyoda genel Sınıf Frekans Ayrıcalıkları - mankenler

Yakında yapmadıysanız, siz Yükseltmeyi düşünüyorum. Aşağıdaki tabloda gösterildiği gibi, yüksek frekanslı (HF) bantlarda kullanmak için daha fazla frekansa sahipsiniz. Tüm lisans sınıfları için ABD frekansı ve mod ayrıcalıklarının eksiksiz bir listesi, Amerikan Radyo Röle Ligi'nden (ARRL) edinilebilir. Bant Frekansları ...

Editörün Seçimi

Adobe Flash CS6'da Maske Katmanlarını Kullanma - mankenler

Adobe Flash CS6'da Maske Katmanlarını Kullanma - mankenler

Adobe Flash CS6'da maskeleme kavramı Bir parçanın bölümlerini gizlemek ya da ortaya çıkarmak için bir şekli (ya da şekilleri) kullanır - tıpkı evinizdeki küçük bir pencere aracılığıyla dışarıdan bakmak gibi. Pencere boyutu, içerideyken görebileceğiniz şeyi sınırlar. Flash, özel bir katman özelliklerine sahiptir ...

Flash CS5 3D Rotasyon Aletinin Kullanımı - mankenler

Flash CS5 3D Rotasyon Aletinin Kullanımı - mankenler

Adobe'nin kapsamlı çizim ve animasyon yetenekleri Flash Creative Suite 5, Flash'ın 3D Döndürme aracıyla büyük ölçüde geliştirilebilir. 3B Döndürme aracı, sembolü x, y ve z eksenleri etrafında döndürmek ve dönüştürmek için herhangi bir film klibi örneğinde kullanılabilir. Bir film klibi örneğini 3D olarak oluşturmak için bunları izleyin ...

Flash CS5 3D Çeviri Aletini Kullanma - aumlalar

Flash CS5 3D Çeviri Aletini Kullanma - aumlalar

In 3D Döndürme aracının aksine Flash CS5 film kliplerini bir eksen etrafında döndüren Adobe Flash Creative Suite 5, 3D Çeviri aracı, bir film klibini algılanan mesafeyi ve sahnedeki diğer nesnelere göre derinliğini değiştirmek için belirli bir eksende kaydırır. Bu kavramı üçlü düşünün ...

Editörün Seçimi

Pratik İlköğretim Sınavı-Grafik Çözümleri - mankenler

Pratik İlköğretim Sınavı-Grafik Çözümleri - mankenler

Praxis İlköğretim sınavının Matematik bölümü bir dizi çizgide bir eşitsizliğe çözüm bulmanızı gerektiren bir soru. Başlamak için, çözümdeki sayıya bir nokta koyarsınız. Sembolü> veya

Pratik İlk Öğretim Sınavı-Ölüm Şekilleri - mankenler

Pratik İlk Öğretim Sınavı-Ölüm Şekilleri - mankenler

Praxis İlköğretim Matematik ve Bilim bölümleri Eğitim sınavı, farklı ölçme şekillerine aşina olmanız gereken sorular içerir. Ölçümler, çeşitli tiplerde tanımlanabilir. Mesafe için İngilizce sistem birimleri inç, feet, metre ve mil içerir. Bunlar birbirine dayanır. Bir ayak 12 ...

Pratik İlk Öğretim Sınavı-Akıcılık - mankenler

Pratik İlk Öğretim Sınavı-Akıcılık - mankenler

Praxis İlköğretim sınavı, yardımcı stratejilerinizi test eden sorular içerir öğrenciler akıcılıklarını İngilizce olarak geliştirirler. Bu stratejiler, grafik düzenleyicileri kullanarak ve çıkarımlar yapmayı içerebilir. Akıcı bir okuyucu, sınıf düzeyinde bir metni doğruluk, çabukluk ve ifade ile okuyabilir.