https://en.wikipedia.org/wiki/Connect_Four
2 oyuncu oyunu 4 bağlamak bağ hatırlayan var mı? Yapmayanlar için, bir yüzeyde dikey duran 6x7 bir tahta vardı. 4 bağlantı hedefi, iyi 4 bağlantı! Bağlantı yatay, çapraz veya dikey ise sayılır. Bir sütunun üst kısmına o sütunun altına düşecek bir parça takarak parçalarınızı tahtaya yerleştirirsiniz. Kurallarımız bağlantı 4'te 3 şeyi değiştirir.
- Değişim # 1 Kazanma en çok puanı alan oyuncu olarak tanımlanır. Kurallarda olduğu gibi 4'ü bağlayarak puan alırsınız - daha sonra daha fazla.
- Değişim # 2 Her turda 3 oyuncunuz var.
- Değişiklik # 3 Pano boyutu 9x9'dur.
puanlama:
Puan, arka arkaya kaç tane aldığınıza bağlıdır. Bir satır grubunda 4'ünüz varsa 1 puan alırsınız. Eğer bir satır grubunda 5 varsa, 2 puan alırsınız, 6 satır 3'te vb.
Örnekler:
Daha iyi kontrast için not edin ve sırasıyla o
ve x
ile değiştirilir#
~
Boş tahta örneği: (tüm örnekler 2 oyuncu standart boyutlu tahtadır)
a b c d e f g
6 | | | | | | | |
5 | | | | | | | |
4 | | | | | | | |
3 | | | | | | | |
2 | | | | | | | |
1 |_|_|_|_|_|_|_|
Bir parçayı kol halinde bırakırsak d
, yere inecektir 1d
.
a b c d e f g
6 | | | | | | | |
5 | | | | | | | |
4 | | | | | | | |
3 | | | | | | | |
2 | | | | | | | |
1 |_|_|_|#|_|_|_|
Şimdi d
tekrar bir parçaya kol halinde bırakırsak , yere inecektir 2d
. Aşağıda sıra konumlarında 4 örnek verilmiştir:
a b c d e f g
6 | | | | | | | |
5 | | | | | | | |
4 | | | |~| | | |
3 | | |~|#| | | |
2 | |~|#|~| |#| |
1 |~|#|~|#|_|#|_|
Bu durumda x
çapraz olarak 1 puan alır ( 1a 2b 3c 4d
).
a b c d e f g
6 | | | | | | | |
5 | | | | | | | |
4 | | | |#| | | |
3 | | | |#| | | |
2 | | | |#| | | |
1 |_|~|_|#|~|_|~|
Bu durumda, o
dikey olarak 1 puan alır ( 1d 2d 3d 4d
).
a b c d e f g
6 | | | | | | | |
5 | | | | | | | |
4 | | | | | | | |
3 | | | | | | | |
2 | | |#|#|#|#| |
1 |_|_|~|~|~|~|~|
Bu durumda o
yatay olarak 2 puan alır ( 1c 1d 1e 1f 1g
) ve x
yatay olarak 1 puan alır ( 2c 2d 2e 2f
).
a b c d e f g
6 | | |#| | | | |
5 | | |#| | | | |
4 | | |#| | | | |
3 | | |#| | |~| |
2 |~| |#| | |#|~|
1 |~|_|#|~| |~|~|
Bu kez x
arka arkaya 6 için 3 puan kazanılır ( 1c 2c 3c 4c 5c 6c
).
Giriş çıkış
2d dizisi üzerinden panoya erişebileceksiniz. Her konum int
bir oyuncu kimliğini temsil edecek şekilde temsil edilecektir . Ayrıca oyuncu kimliğinizin işlevinize geçmesini sağlayabilirsiniz. Taşınızı hangi parçayı bırakmak istediğinizi döndürerek yaparsınız. Her turda 3 oyuncu seçilecek. Oyunun sonunda, tüm oyuncular eşit miktarda oyun oynamış olacaklar.
Şu an 100 bin mermi gerçekleştirilecek (bunun uzun sürdüğünü unutmayın , hızlı geri dönüş testi için azaltmak isteyebilirsiniz). Genel olarak kazanan en çok kazanan oyuncu.
Denetleyiciyi burada bulabilirsiniz: https://github.com/JJ-Atkinson/Connect-n/tree/master .
Bot yazmak:
Bir bot yazmak için Player
sınıfı genişletmelisiniz . Player
soyuttur ve uygulamak için bir yöntemi vardır int makeMove(void)
. İçinde makeMove
hangi kolunu parçanıza bırakmak istediğinize karar vereceksiniz. Geçersiz bir koleksiyon seçtiyseniz (ör. Coll mevcut değil, coll zaten doldurulmuş), sıralamanız atlanacaktır . In Player
sınıfında birçok kullanışlı yardımcı yöntemler var. En önemlilerinin listesi aşağıdaki gibidir:
boolean ensureValidMove(int coll)
: Coll tahtada ise ve coll henüz doldurulmamışsa true değerini döndürün .int[] getBoardSize()
:[0]
Sütun[1]
sayısı ve satır sayısı olan bir int dizisi döndürür .int[][] getBoard()
: Kartın bir kopyasını iade edin. Böyle erişmek olmalıdır:[coll number][row number from bottom]
.- Gerisini bulmak için
Player
sınıfa bakın. EMPTY_CELL
: Boş bir hücrenin değeri
Bu çok iş parçacıklı olacağından, random
ihtiyacınız varsa bir işlev de ekledim .
Botunuzda hata ayıklama:
Bir botta hata ayıklamayı kolaylaştırmak için denetleyiciye bazı şeyler ekledim. İlki Runner#SHOW_STATISTICS
. Bu etkinleştirilirse, bir dizi kazanma da dahil olmak üzere, oynatılan oyuncu gruplarının bir çıktısını göreceksiniz. Misal:
OnePlayBot, PackingBot, BuggyBot,
OnePlayBot -> 6
PackingBot -> 5
BuggyBot -> 3
Draw -> 1
Ayrıca connectn.game.CustomGame
sınıf ile özel bir oyun yapabilir, her turun puanlarını ve kazananını görebilirsiniz. Kendinizi ile karışıma bile ekleyebilirsiniz UserBot
.
Botunuzu ekleme:
Botunuzu dizilişe eklemek için PlayerFactory
statik bloğa gidin ve aşağıdaki satırı ekleyin:
playerCreator.put(MyBot.class, MyBot::new);
Dikkat edilmesi gereken diğer şeyler:
- Simülasyonlar çok iş parçacıklı. Bunu kapatmak istiyorsanız,
Runner#runGames()
bu satıra (.parallel()
) gidin ve yorum yapın . - Oyun sayısını değiştirmek
Runner#MINIMUM_NUMBER_OF_GAMES
için isteğinize göre ayarlayın .
Daha sonra eklendi:
- Botlar arasındaki iletişime izin verilmez.
İlgili: Play Connect 4!
================================
Skorbord: (100 000 oyun)
MaxGayne -> 22662
RowBot -> 17884
OnePlayBot -> 10354
JealousBot -> 10140
Progressive -> 7965
Draw -> 7553
StraightForwardBot -> 7542
RandomBot -> 6700
PackingBot -> 5317
BasicBlockBot -> 1282
BuggyBot -> 1114
FairDiceRoll -> 853
Steve -> 634
================================
Player
mevcut tüm yöntemleri görmek için sınıfı kontrol et .
ensureValidMove
(stratejiniz bu dönüşü geçmek değilse).