Commit ee4e08b8 by Julio Hermosa

Se agrega al proyecto, la versión 3 del poker, se utilizó un nuevo…

Se agrega al proyecto, la versión 3 del poker, se utilizó un nuevo viewcontroller (Poker3ViewController), cuya implementación se encuentra en la clase con el mismo nombre

Obs: falta mejorar el algoritmo para desempatar en caso de que hayan manos iguales cuando hay más de 2 jugadores
parent 88f1ccf7
......@@ -14,6 +14,7 @@
BBE636F7244519F8000E01F0 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BBE636F6244519F8000E01F0 /* Assets.xcassets */; };
BBE636FA244519F8000E01F0 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BBE636F8244519F8000E01F0 /* LaunchScreen.storyboard */; };
BBE6370224451A41000E01F0 /* Carta.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE6370124451A41000E01F0 /* Carta.swift */; };
BBE63706244FDE1B000E01F0 /* Poker3ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE63705244FDE1B000E01F0 /* Poker3ViewController.swift */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
......@@ -26,6 +27,7 @@
BBE636F9244519F8000E01F0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
BBE636FB244519F8000E01F0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
BBE6370124451A41000E01F0 /* Carta.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Carta.swift; sourceTree = "<group>"; };
BBE63705244FDE1B000E01F0 /* Poker3ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Poker3ViewController.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
......@@ -66,6 +68,7 @@
BBE636F8244519F8000E01F0 /* LaunchScreen.storyboard */,
BBE636FB244519F8000E01F0 /* Info.plist */,
BBE6370124451A41000E01F0 /* Carta.swift */,
BBE63705244FDE1B000E01F0 /* Poker3ViewController.swift */,
);
path = poker;
sourceTree = "<group>";
......@@ -143,6 +146,7 @@
files = (
BBE636F2244519F2000E01F0 /* ViewController.swift in Sources */,
BBE6370224451A41000E01F0 /* Carta.swift in Sources */,
BBE63706244FDE1B000E01F0 /* Poker3ViewController.swift in Sources */,
BBE636EE244519F2000E01F0 /* AppDelegate.swift in Sources */,
BBE636F0244519F2000E01F0 /* SceneDelegate.swift in Sources */,
);
......
......@@ -44,26 +44,55 @@ class Baraja{
//se simula que se extraen 5 cartas de una baraja para cada jugador
class Manos{
var cartasEnMano: [(Int, String)] = []
var cartasEnMesa: [(Int, String)] = []
var baraja: Baraja = Baraja()
var valoresOrdenados = [Int]()
var palo = [String]()
var nombreCarta = [String]()
var nombreJugada:Jugada = Jugada(rawValue: 1)!
private let escaleraAlAs: [Int] = [1, 10, 11, 12, 13]
private let escaleraReal: [Int] = [1, 10, 11, 12, 13]
//función para extraer 2 cartas y guardar la información en arrays con los valores, el palo y el nombre de la carta en caso de ser A, J, Q y K
//la función recibe como parámetro las cartas que aun no se extrajeron para que no se repitan
func extraerCartasTexasHoldem(cartasDisponibles: Baraja)->[(Int, String)]{
baraja = cartasDisponibles
var randomNumber = Int.random(in: 0..<baraja.cartas!.count)
cartasEnMano.append((baraja.cartas?[randomNumber])!)
baraja.cartas?.remove(at: randomNumber)
randomNumber = Int.random(in: 0..<baraja.cartas!.count)
cartasEnMano.append((baraja.cartas?[randomNumber])!)
baraja.cartas?.remove(at: randomNumber)
nombrarCartas(cantidadCartas: 2)
return cartasEnMano
}
func enMesa(cartasDisponibles: Baraja)->[(Int, String)]{
baraja = cartasDisponibles
for _ in 0...4 {
let randomNumber = Int.random(in: 0..<baraja.cartas!.count)
cartasEnMesa.append((baraja.cartas?[randomNumber])!)
baraja.cartas?.remove(at: randomNumber)
}
return cartasEnMesa
}
//función para extraer 5 cartas y guardar la información en arrays con los valores, el palo y el nombre de la carta en caso de ser A, J, Q y K
//la función recibe como parámetro las cartas que aun no se extrajeron para que no se repitan
func extraerCartas(cartasDisponibles: Baraja){
baraja = cartasDisponibles
//cargamos las cartas a las manos y borramos de la baraja para que no se vuelvan a sacar
for _ in 0...4 {
let cantCartas = 5
for _ in 0..<cantCartas{
let randomNumber = Int.random(in: 0..<baraja.cartas!.count)
cartasEnMano.append((baraja.cartas?[randomNumber])!)
baraja.cartas?.remove(at: randomNumber)
}
nombrarCartas(cantidadCartas: cantCartas)
}
private func nombrarCartas(cantidadCartas: Int){
for index in 0...4{
for index in 0..<cantidadCartas{
//se carga en el array el nombre de la carta, 1: A, 11:J, 12:Q y 13:K
switch cartasEnMano[index].0 {
case 1:
......@@ -83,10 +112,14 @@ class Manos{
}
//ordenamos los valores, para determinar posteriormente si hay alguna combinación
valoresOrdenados.sort()
return
}
//devuelve el nombre de la jugada segun la combinación de cartas, el array con los valores ordenados y el mayor en caso de haber una combinación
func jugadas()->(Jugada, [Int], Int){
func jugadas(valoresEnMesa: [Int], palosEnMesa: [String])->(Jugada, [Int], Int){
valoresOrdenados += valoresEnMesa
palo += palosEnMesa
valoresOrdenados.sort()
var cartasOrdenadas = valoresOrdenados // copiamos su contenido para cambiar el orden en caso de tener ases, ya que los mismos tambien pueden valer 14 (se evalúa para cada caso)
var mayorCombinacion = 0 //se utiliza en caso de necesitar desempate entre pares, doblepares, tríos, full y poker
var contSecuencia = 1 //Para determinar si hay una escalera
......@@ -121,7 +154,7 @@ class Manos{
if contSecuencia == 5{
nombreJugada = .Escalera
}
if valoresOrdenados == escaleraReal{
if valoresOrdenados == escaleraAlAs{
nombreJugada = .Escalera
if valoresOrdenados.contains(1){
cartasOrdenadas = cartasOrdenadas.filter { $0 > 1}
......@@ -131,7 +164,7 @@ class Manos{
if nombreJugada == .Escalera && contPalosIguales == 5 {
nombreJugada = .EscaleraColor
}
if valoresOrdenados == escaleraReal && contPalosIguales == 5 {
if valoresOrdenados == escaleraAlAs && contPalosIguales == 5 {
nombreJugada = .EscaleraReal
if valoresOrdenados.contains(1){
cartasOrdenadas = cartasOrdenadas.filter { $0 > 1}
......
//
// Poker3ViewController.swift
// poker
//
// Created by Julio Hermosa on 4/21/20.
// Copyright © 2020 Mobile Roshka. All rights reserved.
//
import UIKit
class Poker3ViewController: UIViewController {
var baraja:Baraja = Baraja()
var cantidadJugadores = 3
var manos = [Manos]()
var mesa = Manos()
var enMesa: [(Int, String)] = []
var valoresEnMesa = [Int]()
var palosEnMesa = [String]()
var jugadas: [(Jugada, [Int], Int)] = []
var ganador = Int()
@IBAction func repartirBtn(_ sender: Any) {
repartir()
obtenerJugadas()
elegirGanador()
}
func repartir(){
baraja.crearBaraja()
for index in 0..<cantidadJugadores{
manos.append(Manos())
print( manos[index].extraerCartasTexasHoldem(cartasDisponibles: baraja))
}
enMesa = mesa.enMesa(cartasDisponibles: baraja)
valoresEnMesa = enMesa.map {$0.0}
palosEnMesa = enMesa.map{$0.1}
print (enMesa)
}
func obtenerJugadas(){
for index in 0..<cantidadJugadores{
jugadas.append((manos[index].jugadas(valoresEnMesa: valoresEnMesa, palosEnMesa: palosEnMesa)))
}
}
func elegirGanador(){
var valores = jugadas.map {$0.1}
var valoresCombinaciones = jugadas.map {$0.2}
var nombresJugadas = jugadas.map {$0.0}
ganador = 0
print (nombresJugadas)
for index in 1..<cantidadJugadores{
if nombresJugadas[index].rawValue > nombresJugadas[ganador].rawValue{
ganador = index
} else
if nombresJugadas[index].rawValue == nombresJugadas[ganador].rawValue {
if nombresJugadas[index] == .CartaAlta || nombresJugadas[index] == .Escalera || nombresJugadas[index] == .EscaleraColor || nombresJugadas[index] == .EscaleraReal ||
nombresJugadas[index] == .Color {
while valores[index].last! == valores[ganador].last!{
valores[index].removeLast()
valores[ganador].removeLast()
}
if valores[index].count > 0{
if valores[index].last! > valores[ganador].last!{
ganador = index
}
else{
ganador = -1
}
}
}
if nombresJugadas[index] == .Par || nombresJugadas[index] == .ParDoble || nombresJugadas[index] == .Trio || nombresJugadas[index] == .Full || nombresJugadas[index] == .Poker{
if valoresCombinaciones[index] > valoresCombinaciones[ganador]{
ganador = index
}
if valoresCombinaciones[index] == valoresCombinaciones[ganador]{
while valores[index].last! == valores[ganador].last!{
valores[index].removeLast()
valores[ganador].removeLast()
}
if valores[index].count > 0{
if valores[index].last! > valores[ganador].last!{
ganador = index
}
else{
ganador = -1
}
}
}
}
}
}
//se muestra en una alerta quien ganó o si es empate
if ganador == -1 {
mostrarGanador(mensaje: "Empate")
print("Empate")
}else{
mostrarGanador(mensaje: "El ganador es el jugador: \(ganador+1)")
print ("Ganó el jugador \(ganador+1)")
}
mesa.barajarCartas()
enMesa.removeAll()
manos.removeAll()
jugadas.removeAll()
ganador = 0
valores.removeAll()
valoresCombinaciones.removeAll()
nombresJugadas.removeAll()
}
private func mostrarGanador(mensaje: String){
let alerta = UIAlertController(title: "Resultado Final", message:mensaje, preferredStyle: .alert)
alerta.addAction(UIAlertAction(title: "Aceptar", style: .default, handler: nil))
present(alerta, animated:true, completion:nil)
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
......@@ -58,13 +58,14 @@ class ViewController: UIViewController {
//se envia el array con las cartas aún disponibles
mano2.extraerCartas(cartasDisponibles: baraja)
resultado1 = mano1.jugadas()
resultado1 = mano1.jugadas(valoresEnMesa: [Int](), palosEnMesa: [String]())
//se guardan los resultados obtenidos en variables resultadoN
resultado2 = mano2.jugadas()
resultado2 = mano2.jugadas(valoresEnMesa: [Int](), palosEnMesa: [String]())
resultadoObtenido1.text = "\(mano1.jugadas().0)"
resultadoObtenido1.text = "\(resultado1!.0)"
//se imprime en los labels el nombre de las jugadas para cada jugador
resultadoObtenido2.text = "\(mano2.jugadas().0)"
resultadoObtenido2.text = "\(resultado2!.0)"
//cargamos los valores del array en los labels de las cartas
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment