From ee4e08b8d1bdb1a38e715adec8346012301f376f Mon Sep 17 00:00:00 2001 From: Julio Hermosa Date: Wed, 22 Apr 2020 19:11:44 -0400 Subject: [PATCH] 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 --- poker/poker/poker.xcodeproj/project.pbxproj | 4 ++++ poker/poker/poker.xcodeproj/project.xcworkspace/xcuserdata/roshka.xcuserdatad/UserInterfaceState.xcuserstate | Bin 71756 -> 0 bytes poker/poker/poker/Base.lproj/Main.storyboard | 120 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------- poker/poker/poker/Carta.swift | 51 ++++++++++++++++++++++++++++++++++++++++++--------- poker/poker/poker/Poker3ViewController.swift | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ poker/poker/poker/ViewController.swift | 9 +++++---- 6 files changed, 273 insertions(+), 32 deletions(-) create mode 100644 poker/poker/poker/Poker3ViewController.swift diff --git a/poker/poker/poker.xcodeproj/project.pbxproj b/poker/poker/poker.xcodeproj/project.pbxproj index 9dd50f5..6be968a 100644 --- a/poker/poker/poker.xcodeproj/project.pbxproj +++ b/poker/poker/poker.xcodeproj/project.pbxproj @@ -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 = ""; }; BBE636FB244519F8000E01F0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; BBE6370124451A41000E01F0 /* Carta.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Carta.swift; sourceTree = ""; }; + BBE63705244FDE1B000E01F0 /* Poker3ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Poker3ViewController.swift; sourceTree = ""; }; /* 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 = ""; @@ -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 */, ); diff --git a/poker/poker/poker.xcodeproj/project.xcworkspace/xcuserdata/roshka.xcuserdatad/UserInterfaceState.xcuserstate b/poker/poker/poker.xcodeproj/project.xcworkspace/xcuserdata/roshka.xcuserdatad/UserInterfaceState.xcuserstate index bb6eb10..10d4fd5 100644 Binary files a/poker/poker/poker.xcodeproj/project.xcworkspace/xcuserdata/roshka.xcuserdatad/UserInterfaceState.xcuserstate and b/poker/poker/poker.xcodeproj/project.xcworkspace/xcuserdata/roshka.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/poker/poker/poker/Base.lproj/Main.storyboard b/poker/poker/poker/Base.lproj/Main.storyboard index ff95eaf..934d068 100644 --- a/poker/poker/poker/Base.lproj/Main.storyboard +++ b/poker/poker/poker/Base.lproj/Main.storyboard @@ -1,5 +1,5 @@ - + @@ -7,7 +7,41 @@ - + + + + + + + + + + + + + + + + + + + + + @@ -15,14 +49,8 @@ - - + @@ -138,7 +166,7 @@ - + @@ -207,7 +235,7 @@ - + @@ -306,7 +334,7 @@ - + @@ -375,7 +403,7 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/poker/poker/poker/Carta.swift b/poker/poker/poker/Carta.swift index a338557..6e1d2b1 100644 --- a/poker/poker/poker/Carta.swift +++ b/poker/poker/poker/Carta.swift @@ -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..[(Int, String)]{ + baraja = cartasDisponibles + for _ in 0...4 { + let randomNumber = Int.random(in: 0..(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} diff --git a/poker/poker/poker/Poker3ViewController.swift b/poker/poker/poker/Poker3ViewController.swift new file mode 100644 index 0000000..1b32390 --- /dev/null +++ b/poker/poker/poker/Poker3ViewController.swift @@ -0,0 +1,121 @@ +// +// 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.. 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() + } +} diff --git a/poker/poker/poker/ViewController.swift b/poker/poker/poker/ViewController.swift index 6b5bd29..03e09e9 100644 --- a/poker/poker/poker/ViewController.swift +++ b/poker/poker/poker/ViewController.swift @@ -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 -- libgit2 0.26.0