A library that can check foul rules of concave such as 3-3, 4-4

Contribute

This library is not yet complete. If you find a bug, please report it via PR.

Contributors to the budool Renju Rule library


omok-rule

A library that can check Renju rules of omok such as 3-3, 4-4, and longline(jangmok)

The x-axis is Col. The y-axis is Row. For example, In the picture above, the black stones are placed at (5, 5)(6, 6)(7, 7)(8, 8)(9, 9)(10, 10).


How to use

If you want to use the omok Renju rule, simply add the dependency below. If you prefer it, you can use the gradle dependency, you have to add these lines in your build.gradle.kts file:

repositories {
    ...
    maven { url = uri("https://jitpack.io") }
}

dependencies {
    val currentVersion = "v1.0.2-alpha"
    implementation("com.github.tmdgh1592:budool-omok-rule:$currentVersion")

Point.kt

Converts the current position rowcolumn to a Point object. Point object is used to check Renju rule.

data class Point(val row: Row, val col: Col)

OmokRule.kt

OmokRule has BlackRenjuRule.kt and WhiteRenjuRule.kt as subclasses.

constructor

boardWidth : the width of the game board. boardHeight : the height of the game board.

// default board size is 15 by 15.
val omokRule = BlackRenjuRule(15, 15) // Create 15x15 board

checkWin()

This method determines if you win when you place a stone. Returns True if there are 5 or more stones in a row without any fouling. otherwise return False.

val omokRule: OmokRule = BlackRenjuRule() // or WhiteRenjuRule()
val blackPoints: List<Point> = listOf(Point(3, 3), Point(4, 4), Point(5, 5), Point(6, 6))
val whitePoints: List<Point> = listOf(Point(3, 4), Point(4, 3))
val startPoint: Point = Point(row = 7, col = 7)

val result = omokRule.checkWin(blackPoints, whitePoints, startPoint)

checkAllFoulCondition()

This is a method to check all foul condition including double three (3-3)double four (4-4) and overline(jangmok). If any of the above rules are applicable, KoRule.KO_ALL is returned. Otherwise, it returns KoRule.NOT_KO.

val omokRule: OmokRule = BlackRenjuRule() // or WhiteRenjuRule()
val blackPoints: List<Point> = listOf(Point(3, 3), Point(4, 4))
val whitePoints: List<Point> = listOf(Point(3, 4), Point(4, 3))
val startPoint: Point = Point(row = 5, col = 5)

// Since none of the rules apply, KoRule.NOT_KO is returned.
// if omokRule type is WhiteRenjuRule, it returns always KoRule.NOT_KO.
val result = omokRule.checkAllFoulCondition(blackPoints, whitePoints, startPoint)

checkDoubleFoul()

This is a method to check double three (3-3) or double four (4-4). if it is a double foul, returns KoRule.KO_DOUBLE_THREE or KoRule.KO_DOUBLE_FOUR. Otherwise, if it is not a double foul, returns KoRule.NOT_KO.

val omokRule: OmokRule = BlackRenjuRule() // or WhiteRenjuRule()
val blackPoints: List<Point> = listOf(Point(3, 3), Point(4, 4))
val whitePoints: List<Point> = listOf(Point(3, 4), Point(4, 3))
val startPoint: Point = Point(row = 5, col = 5)

// double foul type you want to check
val foul: Foul = Foul.DOUBLE_THREE // or -> val foul: Foul = Foul.FOUR_THREE

// if omokRule type is WhiteRenjuRule, it returns always KoRule.NOT_KO.
val result = omokRule.checkDoubleFoul(blackPoints, whitePoints, startPoint, foul)

checkOverline()

This is a method to check if it is overline(jangmok). if if there are more than 6 stones on the board in a row, returns KoRule.KO_OVERLINE. Otherwise, if there are less than 6 stones, returns KoRule.NOT_KO.

val omokRule: OmokRule = BlackRenjuRule()
val stonesPoints: List<Point> = listOf(Point(1, 1), Point(2, 2), Point(3, 3), Point(5, 5), Point(6, 6))
val startPoint: Point = Point(4, 4)

// result is KoRule.KO_OVERLINE
// if omokRule is WhiteRenjuRule, it returns always KoRule.NOT_KO.
val result = omokRule.checkOverline(stonesPoints, startPoint)

GitHub

View Github

Leave a Reply

Your email address will not be published. Required fields are marked *