# Dice 3
This is a famous game from China. Its is known world wide as Sic bo, but to
keep the naming similar with our other game, we call it `dice_3` internally.
[Check this link for the rule](http://www.casinomira.com/casino-help/casino-table/rules-sic-bo.html)
The's only one game play, but many type of bet.
## Code name
`dice_3`
## Rules
There are 10 sections on the board each slot of a section have different odds rate.
A user can place their money on one or many slots, which belong to one of following section
- Big (BIG)
- Small (SMALL)
- Odd (ODD)
- Even (EVEN)
- Specific Tripples (TRIPLE)
- Specific Doubles (DOUBLE)
- Any Tripple (ANYTRIPLE)
- Three Dice total (TOTAL)
- Two dice combinations (2DICE)
- Single dice bet (1DICE)
## Big
- The total score will be from 11 to 17 inclusive [11, 17], except triple (TP)
- odds: 1 to 1
- Example:
- (4, 5, 6) - 15 - win
- (5, 5, 5) - TP - lose
- (1, 2, 3) - 06 - lose
- (5, 6, 7) - 18 - lose
## Small
- The total score will be from 4 to 10 inclusive [4, 10], except triple
- odds: 1 to 1
- Example:
- (1, 2, 3) - 06 - win
- (5, 5, 5) - TP - lose
- (5, 6, 7) - 18 - lose
## Odd
- The total score will be an odd number, except triple
- odds: 1 to 1
- Example:
- (3, 4, 1) - 08 - win
- (2, 4, 3) - 09 - lose
- (2, 2, 2) - TP - lose
## Even
- The total score will be an even number, except triple
- odds: 1 to 1
- Example:
- (3, 4, 2) - 09 - win
- (3, 4, 3) - 10 - lose
- (3, 3, 3) - TP - lose
## Specific Triples
- A specific number will appear on all three dice
- odds: 180 to 1
- Example:
- (1, 1, 1) - TP - win
- (2, 2, 3) - 07 - lose
## Specific doubles (DB)
- A specific number will appear on at least two of the three dice
- odds: 10 to 1
- Example:
- (2, 2, 3) - DB - win
- (5, 1, 5) - DB - win
- (1, 6, 7) - 14 - lose
## Any triple
- Any of triples will appear
- odds:
## Three dice total
- Total score of 3 dice will fall in one of these number: 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
- 4 or 17
- odds: 60 to 1
- 5 or 16
- odds: 30 to 1
- 6 or 15
- oods: 18 to 1
- 7 or 14
- odds: 12 to 1
- 8 or 13
- odds: 8 to 1
- 9 or 12
- odds: 7 to 1
- 10 or 11
- odds: 6 to 1
## Dice combinations
- Two dice will show specific combination of two different numbers
- odds: 6 to 1
- combinations:
- 1 and 2, 3, 4, 5, or 6
- 2 and 3, 4, 5, or 6
- 3 and 4, 5, or 6
- 4 and 5, or 6
- 5 and 6
## Single dice bet
- The specific number 1, 2, 3, 4, 5, or 6 will appear on one, two, or all three dice
- appear on 1 dice
- odds: 1 to 1
- appear on 2 dice
- odds: 2 to 1
- appear on 3 dice
- odds: 3 to 1
## Request
POST api/game/dice_3
```json
{
"bets": [
{ "bet_amount": 10, "game_type": "SMALL" },
{ "bet_amount": 20, "game_type": "TOTAL_10" }
]
}
```
## Response
```json
{
"first_dice_num": 1,
"second_dice_num": 2,
"third_dice_num": 3,
"bet_records": [
{
"bet_amount": 10,
"game_type": "SMALL",
"game_result": 1,
"reward_amount": 20
},
{
"bet_amount": 20,
"game_type": "TOTAL_10",
"game_result": 2,
"reward_amount": 0
}
],
"winning_slots": ["BIG", "ODD", "..."],
"total_reward_amount": 20,
"total_bet_amount": 30
}
```
Values above are made up and don't reflect actual game logic.
## DB design
- dice_3_game_record
- id, ctime
- user_id
- total_bet_amount
- dice_1_num
- dice_2_num
- dice_3_num
- total_reward
- dice_3_bet_record
- id, ctime
- dice_3_game_record_id
- bet_amount
- section
- slot
- result_type
- reward
## Implementation
- A user enter dice 3 table and place their bets on one or many slots
- Card backend (CB) authorize user session. If session valid move to next step, otherwise return 401
- CB validate user's bets. If request valid move to next step, otherwise return 403
- validate whether section and slot are valid
- validate whether total bet amount exceed user's balance
- CB generate dice_1_num, dice_2_num, and dice_3_num
- CB compute each bet result, and reward if user win that bet
- CB create a dice_3_game_record
- CB create a dice_3_bet_record for each bet
- CB create a bet transaction
- CB update user wallet, that the balance is deducted by total amount of user's bets
- If the user win any bet, reward user
- CB create a reward transaction, with change equal to total reward amount
- CB update user wallet, that the balance is added up by total reward amount
- CB return back to user