feature/api-admin-policies #78
@@ -63,9 +63,80 @@ export const useBiscaStore = defineStore('bisca', () => {
|
|||||||
|
|
||||||
await dealInitialCards()
|
await dealInitialCards()
|
||||||
|
|
||||||
|
if (currentTurn.value === 'opponent') {
|
||||||
|
setTimeout(botPlayCard, 1000)
|
||||||
|
}
|
||||||
|
|
||||||
isDealing.value = false
|
isDealing.value = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const playerPlayCard = (card) => {
|
||||||
|
if (!isGameRunning.value || currentTurn.value !== 'player') return
|
||||||
|
if (table.value.playerCard) return
|
||||||
|
|
||||||
|
playerHand.value = playerHand.value.filter((c) => c.id !== card.id)
|
||||||
|
table.value.playerCard = card
|
||||||
|
|
||||||
|
if (!table.value.firstToPlay) table.value.firstToPlay = 'player'
|
||||||
|
|
||||||
|
checkEndOfTrick()
|
||||||
|
}
|
||||||
|
|
||||||
|
const botPlayCard = () => {
|
||||||
|
if (!isGameRunning.value) return
|
||||||
|
if (opponentHand.value.length === 0) return
|
||||||
|
|
||||||
|
let cardToPlay = null
|
||||||
|
|
||||||
|
if (table.value.playerCard) {
|
||||||
|
const pCard = table.value.playerCard
|
||||||
|
const trump = trumpCard.value.suit
|
||||||
|
|
||||||
|
const winningCards = opponentHand.value.filter((botCard) =>
|
||||||
|
doesCardWin(botCard, pCard, trump),
|
||||||
|
)
|
||||||
|
|
||||||
|
if (winningCards.length > 0) {
|
||||||
|
winningCards.sort((a, b) => a.strength - b.strength)
|
||||||
|
cardToPlay = winningCards[0]
|
||||||
|
} else {
|
||||||
|
const sortedHand = [...opponentHand.value].sort((a, b) => {
|
||||||
|
if (a.points === b.points) return a.strength - b.strength
|
||||||
|
return a.points - b.points
|
||||||
|
})
|
||||||
|
cardToPlay = sortedHand[0]
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const sortedHand = [...opponentHand.value].sort((a, b) => {
|
||||||
|
if (a.suit === trumpCard.value.suit && b.suit !== trumpCard.value.suit) return 1
|
||||||
|
if (a.suit !== trumpCard.value.suit && b.suit === trumpCard.value.suit) return -1
|
||||||
|
|
||||||
|
return a.strength - b.strength
|
||||||
|
})
|
||||||
|
cardToPlay = sortedHand[0]
|
||||||
|
table.value.firstToPlay = 'opponent'
|
||||||
|
}
|
||||||
|
|
||||||
|
opponentHand.value = opponentHand.value.filter((c) => c.id !== cardToPlay.id)
|
||||||
|
table.value.opponentCard = cardToPlay
|
||||||
|
|
||||||
|
checkEndOfTrick()
|
||||||
|
}
|
||||||
|
|
||||||
|
const checkEndOfTrick = () => {
|
||||||
|
if (table.value.playerCard && table.value.opponentCard) {
|
||||||
|
currentTurn.value = 'resolving'
|
||||||
|
setTimeout(resolveTrick, 1500)
|
||||||
|
} else {
|
||||||
|
if (table.value.playerCard) {
|
||||||
|
currentTurn.value = 'opponent'
|
||||||
|
setTimeout(botPlayCard, 1000)
|
||||||
|
} else {
|
||||||
|
currentTurn.value = 'player'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const resolveTrick = () => {
|
const resolveTrick = () => {
|
||||||
const pCard = table.value.playerCard
|
const pCard = table.value.playerCard
|
||||||
const oCard = table.value.opponentCard
|
const oCard = table.value.opponentCard
|
||||||
@@ -117,6 +188,18 @@ export const useBiscaStore = defineStore('bisca', () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const doesCardWin = (attacker, defender, trumpSuit) => {
|
||||||
|
if (attacker.suit === trumpSuit && defender.suit !== trumpSuit) return true
|
||||||
|
|
||||||
|
if (defender.suit === trumpSuit && attacker.suit !== trumpSuit) return false
|
||||||
|
|
||||||
|
if (attacker.suit === defender.suit) {
|
||||||
|
return attacker.strength > defender.strength
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
const endGame = () => {
|
const endGame = () => {
|
||||||
isGameRunning.value = false
|
isGameRunning.value = false
|
||||||
isGameOver.value = true
|
isGameOver.value = true
|
||||||
@@ -211,5 +294,6 @@ export const useBiscaStore = defineStore('bisca', () => {
|
|||||||
startGame,
|
startGame,
|
||||||
quitGame,
|
quitGame,
|
||||||
resolveTrick,
|
resolveTrick,
|
||||||
|
playerPlayCard,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user