Agregada funcionalidad descartar carta
Agregados botones para Seq/Tri/Quad/Win
This commit is contained in:
parent
7b101da416
commit
9641f03cb3
@ -1,5 +1,5 @@
|
|||||||
<template lang="pug">
|
<template lang="pug">
|
||||||
div(style="display: inline-block")
|
div(@click="fnDescartar" style="display: inline-block")
|
||||||
div.c-carta(v-if="valor === 0")
|
div.c-carta(v-if="valor === 0")
|
||||||
div.c-carta-oculta(v-html="' '")
|
div.c-carta-oculta(v-html="' '")
|
||||||
div.c-carta(v-else-if="tipo === 2 || tipo === 3 || tipo === 4 || tipo === 5" :class="'carta-' + tipoCarta")
|
div.c-carta(v-else-if="tipo === 2 || tipo === 3 || tipo === 4 || tipo === 5" :class="'carta-' + tipoCarta")
|
||||||
@ -104,11 +104,16 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const fnDescartar = () => {
|
||||||
|
props.fnDescartar!!(props.valor);
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
tipo,
|
tipo,
|
||||||
tipoCarta,
|
tipoCarta,
|
||||||
valorC,
|
valorC,
|
||||||
colorDragon,
|
colorDragon,
|
||||||
|
fnDescartar,
|
||||||
pxesc
|
pxesc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -278,9 +278,13 @@ div
|
|||||||
grupo-cartas(:cartas="[2, 2, 3, 20, 20, 21, 34, 35, 52, 52, 53]")
|
grupo-cartas(:cartas="[2, 2, 3, 20, 20, 21, 34, 35, 52, 52, 53]")
|
||||||
|
|
||||||
div.yaku
|
div.yaku
|
||||||
p 3 triples de J, Q y K
|
p 3 triples o cuádruples de J, Q y K
|
||||||
grupo-cartas(:cartas="[192, 192, 192, 224, 224, 224, 256, 256, 256, 16, 16]")
|
grupo-cartas(:cartas="[192, 192, 192, 224, 224, 224, 256, 256, 256, 16, 16]")
|
||||||
|
|
||||||
|
div.yaku
|
||||||
|
p Solo dragones, J, K y Q
|
||||||
|
grupo-cartas(:cartas="[64, 64, 64, 128, 128, 128, 192, 192, 192, 224, 224]")
|
||||||
|
|
||||||
div.yaku
|
div.yaku
|
||||||
p 1 par del mismo número, mismo color y mismo símbolo (no disponible)
|
p 1 par del mismo número, mismo color y mismo símbolo (no disponible)
|
||||||
|
|
||||||
|
@ -7,10 +7,15 @@ div
|
|||||||
span(:style="{fontSize: `${pH * 10}px`}") {{ cartasRestantes }}
|
span(:style="{fontSize: `${pH * 10}px`}") {{ cartasRestantes }}
|
||||||
br
|
br
|
||||||
span(:style="{fontSize: `${pH * 2.5}px`}") Cartas restantes
|
span(:style="{fontSize: `${pH * 2.5}px`}") Cartas restantes
|
||||||
mano(:mano="mano2" :posicion="2" :esTurnoActual="turnoActual === obtClave(map, '2')")
|
mano(:mano="mano2" :posicion="2" :esTurnoActual="turnoActual === obtClaveMap('2')")
|
||||||
mano(:mano="mano3" :posicion="3" :esTurnoActual="turnoActual === obtClave(map, '3')")
|
mano(:mano="mano3" :posicion="3" :esTurnoActual="turnoActual === obtClaveMap('3')")
|
||||||
mano(:mano="mano4" :posicion="4" :esTurnoActual="turnoActual === obtClave(map, '4')")
|
mano(:mano="mano4" :posicion="4" :esTurnoActual="turnoActual === obtClaveMap('4')")
|
||||||
mano(:mano="mano1" :posicion="1" :esTurnoActual="turnoActual === obtClave(map, '1')")
|
mano(
|
||||||
|
:mano="mano1"
|
||||||
|
:posicion="1"
|
||||||
|
:esTurnoActual="turnoActual === obtClaveMap('1')"
|
||||||
|
:fnDescartarCarta="descartarCarta"
|
||||||
|
)
|
||||||
|
|
||||||
//
|
//
|
||||||
</template>
|
</template>
|
||||||
@ -187,6 +192,7 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const obtClaveMap = (s: string) => obtClave(map, s);
|
||||||
return {
|
return {
|
||||||
dora,
|
dora,
|
||||||
doraOculto,
|
doraOculto,
|
||||||
@ -197,7 +203,8 @@ export default defineComponent({
|
|||||||
mano3,
|
mano3,
|
||||||
mano4,
|
mano4,
|
||||||
turnoActual,
|
turnoActual,
|
||||||
obtClave,
|
obtClaveMap,
|
||||||
|
descartarCarta,
|
||||||
pH,
|
pH,
|
||||||
ph,
|
ph,
|
||||||
pw,
|
pw,
|
||||||
|
80
src/views/Juego/components/contenedor-descartes.vue
Normal file
80
src/views/Juego/components/contenedor-descartes.vue
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
<template lang="pug">
|
||||||
|
div.cont-cuadrante-descarte(:class="claseTurnoActual")
|
||||||
|
div(v-for="cartas in grupoCartas")
|
||||||
|
carta(v-for="(c, i) in cartas" :valor="c" :escala="escala" :key="i")
|
||||||
|
|
||||||
|
//
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import {defineComponent, computed} from "vue";
|
||||||
|
import { useDimensions } from "@/components/useDimensions";
|
||||||
|
import carta from "@/components/carta.vue";
|
||||||
|
|
||||||
|
const splitArray = (arr: number[], numElems: number) => {
|
||||||
|
const res = [];
|
||||||
|
let i = 0;
|
||||||
|
while (true) {
|
||||||
|
if (i >= arr.length) break;
|
||||||
|
const arrTemp = [];
|
||||||
|
for (let j = 0; j < numElems; i++, j++) {
|
||||||
|
if (i >= arr.length) break;
|
||||||
|
arrTemp.push(arr[i]);
|
||||||
|
}
|
||||||
|
res.push(arrTemp);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
name: "contenedor-descartes",
|
||||||
|
components: {carta},
|
||||||
|
props: {
|
||||||
|
cartas: {
|
||||||
|
type: Array,
|
||||||
|
default: []
|
||||||
|
},
|
||||||
|
escala: {
|
||||||
|
type: Number,
|
||||||
|
default: 0.75
|
||||||
|
},
|
||||||
|
esTurnoActual: {
|
||||||
|
type: Boolean,
|
||||||
|
required: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
setup(props) {
|
||||||
|
const {phx} = useDimensions();
|
||||||
|
|
||||||
|
const grupoCartas = computed(() => splitArray(props.cartas as number[], 6));
|
||||||
|
const claseTurnoActual = computed(() => props.esTurnoActual? "cont-cuadrante-descarte-turno-actual": "");
|
||||||
|
|
||||||
|
return {
|
||||||
|
grupoCartas,
|
||||||
|
claseTurnoActual,
|
||||||
|
phx
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="sass" vars="{phx, escala}">
|
||||||
|
|
||||||
|
.cont-cuadrante-descarte
|
||||||
|
position: absolute
|
||||||
|
width: 25%
|
||||||
|
height: 20%
|
||||||
|
bottom: 17%
|
||||||
|
right: 37.5%
|
||||||
|
text-align: left
|
||||||
|
border-radius: calc(var(--phx) * 1.5 * var(--escala))
|
||||||
|
border-top-style: solid
|
||||||
|
border-top-width: calc(var(--phx) * 1.25 * var(--escala))
|
||||||
|
border-top-color: #4CAF50
|
||||||
|
|
||||||
|
.cont-cuadrante-descarte-turno-actual
|
||||||
|
border-top-color: red
|
||||||
|
|
||||||
|
//
|
||||||
|
</style>
|
@ -1,7 +1,23 @@
|
|||||||
<template lang="pug">
|
<template lang="pug">
|
||||||
div.cont-cuadrante-2-mano
|
div.cont-cuadrante-2-mano
|
||||||
|
contenedor-descartes(:cartas="mano.descartes" :esTurnoActual="esTurnoActual")
|
||||||
|
div.cont-opciones-mano
|
||||||
|
div.opcion-mano(v-if="hayTri" :style="{backgroundColor: '#3F51B5'}")
|
||||||
|
| Tri
|
||||||
|
div.opcion-mano(v-if="haySeq" :style="{backgroundColor: '#009688'}")
|
||||||
|
| Seq
|
||||||
|
div.opcion-mano(v-if="hayQuad" :style="{backgroundColor: '#9C27B0'}")
|
||||||
|
| Quad
|
||||||
|
div.opcion-mano(v-if="hayWin" :style="{backgroundColor: '#f44336'}")
|
||||||
|
| Win
|
||||||
|
div.opcion-mano(:style="{backgroundColor: '#9E9E9E'}")
|
||||||
|
| Ignorar
|
||||||
div.cuadrante-mano
|
div.cuadrante-mano
|
||||||
carta(v-for="(c, i) in cartas" :valor="c" :movimiento="posiciones[i]" :fnDescartar="descartarCarta" :key="i")
|
carta(v-for="(c, i) in cartas" :valor="c" :movimiento="posiciones[i]" :fnDescartar="descartarCarta" :key="i")
|
||||||
|
carta(:valor="-1")
|
||||||
|
carta(:valor="mano.sigCarta" :fnDescartar="descartarCarta")
|
||||||
|
carta(:valor="-1")
|
||||||
|
carta(v-for="(c, i) in mano.cartasReveladas" :valor="c" :key="i")
|
||||||
|
|
||||||
//
|
//
|
||||||
</template>
|
</template>
|
||||||
@ -10,6 +26,9 @@ div.cont-cuadrante-2-mano
|
|||||||
import { computed, defineComponent, ref, watch } from "vue";
|
import { computed, defineComponent, ref, watch } from "vue";
|
||||||
import { useDimensions } from "@/components/useDimensions";
|
import { useDimensions } from "@/components/useDimensions";
|
||||||
import carta from "@/components/carta.vue";
|
import carta from "@/components/carta.vue";
|
||||||
|
import contenedorDescartes from "./contenedor-descartes.vue"
|
||||||
|
import { Mano } from "@/views/Juego/types/Mano";
|
||||||
|
import { Oportunidad } from "@/views/Juego/types/Oportunidad";
|
||||||
|
|
||||||
const estaOrdenado = (nums: number[]) => {
|
const estaOrdenado = (nums: number[]) => {
|
||||||
for (let i = 0, j = 1; j < nums.length ; i++, j++) {
|
for (let i = 0, j = 1; j < nums.length ; i++, j++) {
|
||||||
@ -22,7 +41,7 @@ const esperar = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)
|
|||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: "mano",
|
name: "mano",
|
||||||
components: {carta},
|
components: {carta, contenedorDescartes},
|
||||||
props: {
|
props: {
|
||||||
mano: Object,
|
mano: Object,
|
||||||
posicion: Number,
|
posicion: Number,
|
||||||
@ -33,11 +52,7 @@ export default defineComponent({
|
|||||||
setup(props) {
|
setup(props) {
|
||||||
const {pH, phx} = useDimensions();
|
const {pH, phx} = useDimensions();
|
||||||
const anchoCarta = computed(() => pH.value * 5 + 2 * (pH.value * 0.225))
|
const anchoCarta = computed(() => pH.value * 5 + 2 * (pH.value * 0.225))
|
||||||
const cartas = ref<number[]>(props.mano?.cartas);
|
const cartas = ref<number[]>((props.mano as Mano).cartas);
|
||||||
const entrada = props.mano?.sigCarta;
|
|
||||||
const gruposAbiertos = props.mano?.cartasReveladas;
|
|
||||||
const descartes = props.mano?.descartes;
|
|
||||||
const ultimaCartaDescartada = props.oportunidades?.cartaDescartada ?? 0;
|
|
||||||
const posicion = props.posicion;
|
const posicion = props.posicion;
|
||||||
const esTurnoActual = props.esTurnoActual;
|
const esTurnoActual = props.esTurnoActual;
|
||||||
const oportunidades = props.oportunidades;
|
const oportunidades = props.oportunidades;
|
||||||
@ -114,11 +129,42 @@ export default defineComponent({
|
|||||||
posiciones.value = new Array(n.length).fill("none");
|
posiciones.value = new Array(n.length).fill("none");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const hayTri = computed(() => {
|
||||||
|
for (const o of (props.mano!! as Mano).oportunidades) {
|
||||||
|
if (o.nombreOportunidad === "Tri") return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
const haySeq = computed(() => {
|
||||||
|
for (const o of props.mano!!.oportunidades) {
|
||||||
|
if ((o as unknown as Oportunidad).nombreOportunidad === "Seq") return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
const hayQuad = computed(() => {
|
||||||
|
for (const o of props.mano!!.oportunidades) {
|
||||||
|
if ((o as unknown as Oportunidad).nombreOportunidad === "Quad") return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
const hayWin = computed(() => {
|
||||||
|
for (const o of props.mano!!.oportunidades) {
|
||||||
|
if ((o as unknown as Oportunidad).nombreOportunidad === "Win") return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
cartas,
|
cartas,
|
||||||
posiciones,
|
posiciones,
|
||||||
descartarCarta,
|
descartarCarta,
|
||||||
|
hayTri,
|
||||||
|
haySeq,
|
||||||
|
hayQuad,
|
||||||
|
hayWin,
|
||||||
phx,
|
phx,
|
||||||
posicionW: computed(() => (90 * (5 - posicion!!)) + "deg")
|
posicionW: computed(() => (90 * (5 - posicion!!)) + "deg")
|
||||||
}
|
}
|
||||||
@ -129,6 +175,30 @@ export default defineComponent({
|
|||||||
|
|
||||||
<style scoped lang="sass" vars="{phx, posicionW}">
|
<style scoped lang="sass" vars="{phx, posicionW}">
|
||||||
|
|
||||||
|
.cont-opciones-mano
|
||||||
|
position: absolute
|
||||||
|
width: 65%
|
||||||
|
height: 7%
|
||||||
|
bottom: 11%
|
||||||
|
left: 13%
|
||||||
|
text-align: right
|
||||||
|
|
||||||
|
|
||||||
|
.opcion-mano
|
||||||
|
display: inline-block
|
||||||
|
min-width: 17%
|
||||||
|
font-size: calc(var(--phx) * 3)
|
||||||
|
text-align: center
|
||||||
|
cursor: pointer
|
||||||
|
margin-left: var(--phx)
|
||||||
|
padding: var(--phx) 0
|
||||||
|
color: white
|
||||||
|
font-weight: bold
|
||||||
|
border-radius: calc(var(--phx) * 0.5)
|
||||||
|
box-shadow: 0 0 10px 1px rgba(100, 100, 100, 0.5)
|
||||||
|
transition: transform 100ms
|
||||||
|
|
||||||
|
|
||||||
.cont-cuadrante-2-mano
|
.cont-cuadrante-2-mano
|
||||||
position: absolute
|
position: absolute
|
||||||
width: 100%
|
width: 100%
|
||||||
|
10
src/views/Juego/types/Mano.ts
Normal file
10
src/views/Juego/types/Mano.ts
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
import { Oportunidad } from "@/views/Juego/types/Oportunidad";
|
||||||
|
|
||||||
|
export declare class Mano {
|
||||||
|
cartas: number[]
|
||||||
|
cartasReveladas: number[][]
|
||||||
|
descartes: number[]
|
||||||
|
sigCarta: number
|
||||||
|
oportunidades: Oportunidad[]
|
||||||
|
}
|
||||||
|
|
15
src/views/Juego/types/Oportunidad.ts
Normal file
15
src/views/Juego/types/Oportunidad.ts
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
export declare interface Oportunidad {
|
||||||
|
cartaDescartada: number
|
||||||
|
nombreOportunidad: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export declare class OportunidadSeq implements Oportunidad {
|
||||||
|
cartaDescartada: number;
|
||||||
|
nombreOportunidad: string;
|
||||||
|
combinaciones: {first: number, second: number}[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export declare class OportunidadTri implements Oportunidad {
|
||||||
|
cartaDescartada: number;
|
||||||
|
nombreOportunidad: string;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user