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 ove xile 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 dtekrar 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, odikey olarak 1 puan alır ( 1d 2d 3d 4d).
a b c d e f g
6 | | | | | | | |
5 | | | | | | | |
4 | | | | | | | |
3 | | | | | | | |
2 | | |#|#|#|#| |
1 |_|_|~|~|~|~|~|
Bu durumda oyatay olarak 2 puan alır ( 1c 1d 1e 1f 1g) ve xyatay olarak 1 puan alır ( 2c 2d 2e 2f).
a b c d e f g
6 | | |#| | | | |
5 | | |#| | | | |
4 | | |#| | | | |
3 | | |#| | |~| |
2 |~| |#| | |#|~|
1 |~|_|#|~| |~|~|
Bu kez xarka 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 intbir 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 Playersınıfı genişletmelisiniz . Playersoyuttur ve uygulamak için bir yöntemi vardır int makeMove(void). İçinde makeMovehangi 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 Playersı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
Playersınıfa bakın. EMPTY_CELL: Boş bir hücrenin değeri
Bu çok iş parçacıklı olacağından, randomihtiyacı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.CustomGamesı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 PlayerFactorystatik 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_GAMESiç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
================================
Playermevcut tüm yöntemleri görmek için sınıfı kontrol et .
ensureValidMove(stratejiniz bu dönüşü geçmek değilse).