C++'da Tic-Tac-Toe Oyunu Oluşturma

C Da Tic Tac Toe Oyunu Olusturma



Tic-tac-toe nesilleri eğlendiren ilginç, eski ve klasik bir oyundur. Tic-tac-toe'da iki oyuncu, karma desenle işaretlenmiş 9 karelik bir ızgara üzerinde yarışır. Her oyuncu sırasını alır ve sembolü (O veya X) boş karelerden birine yerleştirir. Bu makalede, C++ programlama dilinde nasıl tic-tac-toe oyunu oluşturulacağını keşfedeceğiz. Aşağıdaki örnek, basit ama ilgi çekici bir tic-tac-toe oyunu oluşturma konusunda size rehberlik edecek, temel kavramları, kod dökümlerini ve etkileşimli bir oyun deneyimi oluşturmaya yönelik hususları kapsayacaktır.

C++'da Tic-Tac-Toe Oyunu Oluşturma

Aşağıdaki örnek, bu etkileşimli iki oyunculu tic-tac-toe oyununu yapmanın temellerini sağlar. C++ ile programlamaya basit ve kolay bir yaklaşım sergiliyor ve çocuklukta yaşanan zorlukları arkadaşlarınızla yeni, dijital bir formatta yeniden yaşamak için iyi belgelenmiş bir kaynak kodu sağlıyor. Aşağıdaki kodu görelim.

Örnek: 2D Diziyi Kullanmadan Temel Konsol Tabanlı Tic-Tac-Toe

Bu örnekte, C++'da tic-tac-toe oyununu yapmak için 2 boyutlu bir dizi, işlevler ve if-else koşullarını kullanacağız. Bu oyunda, iki oyuncunun sırayla hamlelerini girmesine izin verilir ve bu, kazanan veya beraberlik olup olmadığını kontrol ederek oyunun durumunu belirler. Aşağıdaki verilen koda bakın:







#include

ad alanı std'sini kullanma ;

geçersiz Çizim Tahtası ( karakter pano [ 3 ] [ 3 ] ) ;

bool isMoveValid ( karakter pano [ 3 ] [ 3 ] , int sıra , int sütun ) ;

bool isBoardFull ( karakter pano [ 3 ] [ 3 ] ) ;

karakter kontrolKazanan ( karakter pano [ 3 ] [ 3 ] ) ;

int ana ( ) {

karakter pano [ 3 ] [ 3 ] = { { '' , '' , '' } , { '' , '' , '' } , { '' , '' , '' } } ;

int sıra , sütun ;

karakter akımOyuncu = 'X' ;

sırasında ( doğru ) {

Çizim Tahtası ( pano ) ;

cout << 'Oyuncu ' << akımOyuncu << ' sıra. Satır (1-3) ve sütunu (1-3) girin: ' ;

yemek yiyor >> sıra >> sütun ;

sıra --;

sütun --;

eğer ( isMoveValid ( pano , sıra , sütun ) ) {

pano [ sıra ] [ sütun ] = akımOyuncu ;

karakter kazanan = kontrolKazanan ( pano ) ;

eğer ( kazanan != '' ) {

Çizim Tahtası ( pano ) ;

cout << 'Oyuncu ' << kazanan << 'kazanan oldu! \N ' ;

kırmak ;

}

eğer ( isBoardFull ( pano ) ) {

Çizim Tahtası ( pano ) ;

cout << 'Bir kravat! \N ' ;

kırmak ;

}

akımOyuncu = ( akımOyuncu == 'X' ) ? 'Ö' : 'X' ;

} başka {

cout << 'Geçersiz hamle. Diğer hücreyi seçin. \N ' ;

} }

geri dönmek 0 ;

}

geçersiz Çizim Tahtası ( karakter pano [ 3 ] [ 3 ] ) {

cout << 'b| \T 1 \T | \T 2 \T | \T 3 \T | \N ' ;

cout << ' ______________________ \N ' ;

için ( int M = 0 ; M < 3 ; M ++ ) {

cout << M + 1 << '| ' ;

için ( int T = 0 ; T < 3 ; T ++ ) {

cout << '' << pano [ M ] [ T ] ;

eğer ( T < 2 ) cout << ' \T | \T ' ;

}

cout << ' \T | \N ' ;

eğer ( M < 2 ) cout << ' ______________________ \N ' ;

}

cout << ' \N ' ; }

bool isMoveValid ( karakter pano [ 3 ] [ 3 ] , int sıra , int sütun ) {

geri dönmek ( sıra >= 0 && sıra < 3 && sütun >= 0 && sütun < 3 && pano [ sıra ] [ sütun ] == '' ) ;

}

bool isBoardFull ( karakter pano [ 3 ] [ 3 ] ) {

için ( int M = 0 ; M < 3 ; M ++ ) {

için ( int T = 0 ; T < 3 ; T ++ ) {

eğer ( pano [ M ] [ T ] == '' ) {

geri dönmek YANLIŞ ;

} } }

geri dönmek doğru ; }

karakter kontrolKazanan ( karakter pano [ 3 ] [ 3 ] ) {

için ( int M = 0 ; M < 3 ; M ++ ) {

eğer ( pano [ M ] [ 0 ] == pano [ M ] [ 1 ] && pano [ M ] [ 1 ] == pano [ M ] [ 2 ] && pano [ M ] [ 0 ] != '' ) {

geri dönmek pano [ M ] [ 0 ] ;

}

eğer ( pano [ 0 ] [ M ] == pano [ 1 ] [ M ] && pano [ 1 ] [ M ] == pano [ 2 ] [ M ] && pano [ 0 ] [ M ] != '' ) {

geri dönmek pano [ 0 ] [ M ] ;

} }

eğer ( pano [ 0 ] [ 0 ] == pano [ 1 ] [ 1 ] && pano [ 1 ] [ 1 ] == pano [ 2 ] [ 2 ] && pano [ 0 ] [ 0 ] != '' ) {

geri dönmek pano [ 0 ] [ 0 ] ;

}

eğer ( pano [ 0 ] [ 2 ] == pano [ 1 ] [ 1 ] && pano [ 1 ] [ 1 ] == pano [ 2 ] [ 0 ] && pano [ 0 ] [ 2 ] != '' ) {

geri dönmek pano [ 0 ] [ 2 ] ;

}

geri dönmek '' ;

}

İşte işlevselliğinin bir dökümü:



“#include ”, giriş/çıkış işlemleri için G/Ç akış kitaplığını içeren bir önişlemci yönergesidir. 'Ad alanı std'sinin kullanılması, bir C++ programında 'std:: öneki' gerektirmeden cout, cin vb. fonksiyonların doğrudan kullanılmasına olanak tanır.



Bu programda dört fonksiyon prototipi vardır; bunlar, DrawBoard(), isMoveValid(), isBoardFull() ve checkWinner()'dır. İşlev bildirimi, işlev prototipi olarak bilinir. Programda main fonksiyonundan sonra gelse de kullanılacaktır. Ana işlev, oyuncuların dönüşlerini ve hareketlerini yönetmek için oyun döngüsünü ve mantığını içerir. Ana fonksiyon içerisinde oyun tahtası boşluklarla başlatılır.





karakter pano [ 3 ] [ 3 ] = { { '' , '' , '' } , { '' , '' , '' } , { '' , '' , '' } } ;

Bundan sonra oyuncunun hamle girdisini saklayacak iki satır ve sütun değişkeni tanımlanır. 'Char currentPlayer = 'X';' “X” oyuncusunun ilk önce gideceğini tanımlar.

Şimdi while (gerçek) oyun döngüsü başlıyor ve kazanan ya da beraberlik olana kadar devam ediyor. Bu 'while' döngüsü 'drawBoard();' işlevini çağırır. Tahtayı görüntülemek için. Panoyu konsolda görüntüledikten sonra, aşağıdaki kod ifadesinde kullanıcıdan işaretlenecek hücreyi seçmesi istenir:



cout << 'Oyuncu ' << akımOyuncu << ' sıra. Satır ve sütunu girin (1-3): ' ;

Oyuncu hamlesini “cin >> satır >> sütun;” şeklinde girer.

İşaretleme için bir hücre seçildiğinde, program ilk olarak girişin geçerliliğini doğrulayacak ve isMoveValid() işlevini çağırarak hücrenin önceden doldurulmadığından emin olacaktır.

pano [ sıra ] [ sütun ] = akımOyuncu ;

Bu ifade oyuncunun işaretini tahtaya yerleştirir.

karakter kazanan = kontrolKazanan ( pano ) ;

eğer ( kazanan != '' ) {

Çizim Tahtası ( pano ) ;

cout << 'Oyuncu ' << kazanan << 'kazanır! \N ' ;

Bu ifadeler, bir oyuncunun tahtaya bir girişi işaretlediği her seferde kazananı kontrol eder. Kazanan olması durumunda kazananın adı duyurulacak ve program oyun döngüsünden çıkacaktır.

eğer ( isBoardFull ( pano ) ) {

Bu ifade beraberliği kontrol eder. Beraberlik durumu, tahtanın dolu olması ve kazananın olmaması durumunda ortaya çıkar. Bu durumda, 'Beraberlik!' ekrana yazdırılır.

akımOyuncu = ( akımOyuncu == 'X' ) ? 'Ö' : 'X' ;

Bu açıklama, oyuncuları her oyuncuya sırasını oynama şansı verecek şekilde değiştirir.

cout << 'Geçersiz hamle. Diğer hücreyi seçin. \N ' ;

Taşıma geçerli değilse kullanıcıdan tekrar giriş yapması ve başka bir hücreyi seçmesi istenir.

“Main” fonksiyonundan sonra daha önce bildirilmiş olan fonksiyon prototiplerinin fonksiyon tanımları başlayacaktır. Burada tanımlanan ilk işlev, tic-tac-toe tahtasını konsola çizmek için kullanılan DrawBoard() işlevidir. DrawBoard() işlevi, ızgara çizgileri de dahil olmak üzere panonun mevcut durumunu yazdırır.

Burada tanımlanan bir sonraki işlev isMoveValid() işlevidir. Bu işlev, hem tahtanın içinde hem de boş bir hücrede bir harekete izin verilip verilmediğini belirlemek için kullanılır. isBoardFull() işlevi, kartın henüz dolu olup olmadığını kontrol etmek için kullanılır. Bu, kazananın olmadığı bir beraberlik durumu için bir koşuldur. isBoardFull(), tahtadaki tüm pozisyonların dolu olup olmadığını kontrol eder; bu, kazanan yoksa beraberlik olduğunu gösterir. Kazanan varsa checkWinner() işlevi kullanılarak belirlenebilir. checkWinner(), aynı oyuncunun işareti (“X” veya “O”) için tüm potansiyel kazanma satırlarını kontrol eder ve bulunursa kazanan oyuncunun işaretini veya henüz kazanan yoksa bir boşluk karakterini “ “ döndürür. Aşağıdaki programın çıktısıdır. Her oyuncunun her dönüşünü gösterir.

Öncelikle yönetim kurulu net; “X” oyuncusunun işaretlenecek hücreyi seçmesi istenir. Burada “X” oyuncusu 2 ve 2'ye girer. 2. satır ve 2. sütundaki hücreler işaretlenir. Aşağıdaki işaretli panoya bakın:

Şimdi sıra O oyuncusunda. Oyuncunun işaretlenecek hücreyi seçmesi istenir. Oyuncu “O” satır için 1'i, sütun için 1'i seçer. Seçilen hücre, aşağıdaki çıktı parçacığında gösterildiği gibi 'O' oynatıcısı için işaretlenir:

Her oyuncunun tüm sıraları aynı düzeni izleyecektir. Sıra X oyuncusundadır ve oyuncu satır için 1'i, sütun için 2'yi seçer. Aşağıda verilen çıktı anlık görüntülerine bakın:

Şimdi sıra “O” oyuncusunda. Oyuncu satır için 1'i, sütun için 3'ü seçer.

Bir sonraki sıra yine “X” oyuncusunda. Oyuncu satır için 3'ü, sütun için 1'i seçer.

Oyuncu “O” satır için 3'ü, sütun için 2'yi seçer.

Oyuncu “X” ikinci satırı ve üçüncü sütunu seçer.

Oyuncu “O” şimdi ikinci satırı ve ilk sütunu seçiyor.

Oyuncu “X” bu sefer üçüncü sırayı ve üçüncü sütunu seçer.

Hiçbir oyuncu yatay, dikey veya çapraz olarak herhangi bir çizgi çizemez, dolayısıyla beraberlik olur. Seçilen girdi dizisinin kazananı yok.

Genel olarak kod, oyun durumunu ve kullanıcı girişini yönetmekten sorumlu bir ana oyun döngüsünün yanı sıra tahtayı çizmek, hareketleri doğrulamak, tam tahtayı kontrol etmek ve bir kazanan olup olmadığını belirlemek için kullanılan çeşitli yardımcı işlevlerden oluşur. .

Çözüm

C++ kullanarak bir tic-tac-toe oyunu geliştirmek, programlama becerilerinizi güçlendirmek için mükemmel bir pratik egzersizdir. Makale, C++'da tic-tac-toe'nun nasıl oluşturulacağını doğru bir şekilde açıklıyor. Bu makalede sağlanan adım adım rehberlik, okuyucuların oyun mekaniğini, kullanıcı etkileşimlerini ve verimli kod yapılandırmasını anlaması için 2 boyutlu bir diziyi, işlevleri ve if-else koşullarını kapsıyordu. Kodun detaylı anlatımı ve temel oynanış için önemli olan fonksiyonların açıklaması, okuyuculara hem C++ programlama uygulamalarına hem de basit bir oyun geliştirmenin inceliklerine dair paha biçilmez bilgiler sağlar.