diff --git a/generala/generala.xcodeproj/project.xcworkspace/xcuserdata/roshka.xcuserdatad/UserInterfaceState.xcuserstate b/generala/generala.xcodeproj/project.xcworkspace/xcuserdata/roshka.xcuserdatad/UserInterfaceState.xcuserstate
index 94376b0..1be1b93 100644
Binary files a/generala/generala.xcodeproj/project.xcworkspace/xcuserdata/roshka.xcuserdatad/UserInterfaceState.xcuserstate and b/generala/generala.xcodeproj/project.xcworkspace/xcuserdata/roshka.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/poker.zip b/poker.zip
new file mode 100644
index 0000000..179a049
Binary files /dev/null and b/poker.zip differ
diff --git a/poker/20200416_212700.pdf b/poker/20200416_212700.pdf
new file mode 100644
index 0000000..6ad3a05
Binary files /dev/null and b/poker/20200416_212700.pdf differ
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 ad37da7..bb6eb10 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 c2cc1b0..ff95eaf 100644
--- a/poker/poker/poker/Base.lproj/Main.storyboard
+++ b/poker/poker/poker/Base.lproj/Main.storyboard
@@ -1,6 +1,6 @@
-
+
@@ -12,26 +12,26 @@
-
+
-
-
+
diff --git a/poker/poker/poker/Carta.swift b/poker/poker/poker/Carta.swift
index d51e10a..a338557 100644
--- a/poker/poker/poker/Carta.swift
+++ b/poker/poker/poker/Carta.swift
@@ -2,86 +2,98 @@
// Carta.swift
// poker
//
-// Created by Mobile Roshka on 4/13/20.
+// Created by Julio Hermosa on 4/13/20.
// Copyright © 2020 Mobile Roshka. All rights reserved.
//
import Foundation
+enum Palo: Int{
+ //se crean los palos posibles en poker (el valor de los mismos no tienen significancia en el juego)
+ case E = 1//espadas
+ case T = 2//tréboles
+ case C = 3//corazones
+ case D = 4//diamantes
+}
+enum Jugada: Int{
+ //se crean las combinaciones posibles con un valor que sirve para saber cual es la mejor jugada
+ case EscaleraReal = 10
+ case EscaleraColor = 9
+ case Poker = 8
+ case Full = 7
+ case Color = 6
+ case Escalera = 5
+ case Trio = 4
+ case ParDoble = 3
+ case Par = 2
+ case CartaAlta = 1
+}
-struct Carta{
- var valor = Int()
- //var nombre = String()
- var palo = Palo.self
- //var palo = String()
- enum Palo: Int{
- case E = 1
- case T = 2
- case C = 3
- case D = 4
+
+//se simula una baraja, que contiene hasta 52 cartas francesas
+class Baraja{
+ var cartas: [(Int, String)]? = []
+ func crearBaraja(){
+ for index1 in 1...13{
+ for index2 in 1...4{ cartas!.append((index1,"\(Palo.init(rawValue: index2)!)"))
+ }
+
+ }
}
-
}
-class Baraja{
- // var enMesa = [String]()
- var valor = [Int]()
+//se simula que se extraen 5 cartas de una baraja para cada jugador
+class Manos{
+ var cartasEnMano: [(Int, String)] = []
+ var baraja: Baraja = Baraja()
var valoresOrdenados = [Int]()
var palo = [String]()
var nombreCarta = [String]()
- var nombreJugada = "Carta alta"
- private let escalera: [Int] = [1, 10, 11, 12, 13]
+ var nombreJugada:Jugada = Jugada(rawValue: 1)!
+
+ private let escaleraReal: [Int] = [1, 10, 11, 12, 13]
//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
- func extraerCartas()/*->[String]*/{
- let carta = Carta.init()
-
- //recorremos un array de 5 elementos (cada una de las cartas extraídas)
- for index in 0...4{
- //se elige al azar el palo segun el enum de palo
- var paloCarta = carta.palo.init(rawValue: .random(in: 1...4))
-
- //se guarda en el array los valores de la carta y el palo
- valor.append(Int.random(in: 1...13))
- palo.append("\(paloCarta!)")
-
- //se recorre por los elementos anteriores para determinar si se repitió la carta y si es así escojemos otra
- for i in 0..String{
+ //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){
+ 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
+ var contPalosIguales = 1 // para determinar si hay color
+ var cantidad: [(Int, Int)] = [(1,0),(2,0),(3,0),(4,0),(5,0),(6,0),(7,0),(8,0),(9,0),(10,0),(11,0),(12,0),(13,0)] //se guarda el número de apariciones de cada valor, para determinar si hay pares, tríos o poker
- var contSecuencia = 1
- var contPalosIguales = 1
- var diccionarioCantidad: [Int: Int] = [1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0]
- diccionarioCantidad[valoresOrdenados[0]]! += 1
+ cantidad[valoresOrdenados[0]].1 += 1
for index in 1...4{
if valoresOrdenados[index] == valoresOrdenados[index-1]+1{
contSecuencia += 1
@@ -89,54 +101,89 @@ class Baraja{
if palo[index] == palo[index-1]{
contPalosIguales += 1
}
- if diccionarioCantidad[valoresOrdenados[index]] == 0{
- diccionarioCantidad[valoresOrdenados[index]]! += 1
+ if cantidad[valoresOrdenados[index]-1].1 == 0{
+ cantidad[valoresOrdenados[index]-1].1 += 1
}
+
if valoresOrdenados[index] == valoresOrdenados[index - 1]{
- diccionarioCantidad[valoresOrdenados[index]]! += 1
+ cantidad[valoresOrdenados[index]-1].1 += 1
}
+
}
if contPalosIguales == 5{
- nombreJugada = "Color"
+ nombreJugada = .Color
+ if valoresOrdenados.contains(1){
+ cartasOrdenadas = cartasOrdenadas.filter { $0 > 1}
+ cartasOrdenadas.append(14)
+ }
+
}
if contSecuencia == 5{
- nombreJugada = "Escalera"
+ nombreJugada = .Escalera
}
- if valoresOrdenados == escalera{
- nombreJugada = "Escalera"
+ if valoresOrdenados == escaleraReal{
+ nombreJugada = .Escalera
+ if valoresOrdenados.contains(1){
+ cartasOrdenadas = cartasOrdenadas.filter { $0 > 1}
+ cartasOrdenadas.append(14)
+ }
+ }
+ if nombreJugada == .Escalera && contPalosIguales == 5 {
+ nombreJugada = .EscaleraColor
}
- if nombreJugada == "Escalera" && contPalosIguales == 5 {
- nombreJugada = "Escalera Color"
+ if valoresOrdenados == escaleraReal && contPalosIguales == 5 {
+ nombreJugada = .EscaleraReal
+ if valoresOrdenados.contains(1){
+ cartasOrdenadas = cartasOrdenadas.filter { $0 > 1}
+ cartasOrdenadas.append(14)
+ }
}
- let poker = diccionarioCantidad.filter{ $0.value == 4}
- let trio = diccionarioCantidad.filter{ $0.value == 3}
- let par = diccionarioCantidad.filter{ $0.value == 2}
+ let poker = cantidad.filter{ $0.1 == 4}
+ let trio = cantidad.filter{ $0.1 == 3}
+ let par = cantidad.filter{ $0.1 == 2}
if par.count == 1{
- nombreJugada = "Par"
+ nombreJugada = .Par
+ mayorCombinacion = par[0].0
}
if par.count == 2{
- nombreJugada = "Par doble"
+ nombreJugada = .ParDoble
+ mayorCombinacion = par[1].0
}
if trio.count == 1{
- nombreJugada = "Trio"
+ nombreJugada = .Trio
+ mayorCombinacion = trio[0].0
}
if par.count == 1 && trio.count == 1{
- nombreJugada = "Full"
+ nombreJugada = .Full
+ mayorCombinacion = trio[0].0
}
if poker.count == 1 {
- nombreJugada = "Poker"
+ nombreJugada = .Poker
+ mayorCombinacion = poker[0].0
+ }
+ if mayorCombinacion == 1{
+ mayorCombinacion = 14
}
- return nombreJugada
+ if nombreJugada == .CartaAlta{
+ if valoresOrdenados.contains(1){
+ cartasOrdenadas = cartasOrdenadas.filter { $0 > 1}
+ cartasOrdenadas.append(14)
+ }
+ }
+
+ return (nombreJugada, cartasOrdenadas, mayorCombinacion)
}
+
//eliminamos todas las modificaciones para empezar de nuevo el juego
func barajarCartas(){
- valor.removeAll()
+ baraja.cartas?.removeAll()
+ cartasEnMano.removeAll()
palo.removeAll()
valoresOrdenados.removeAll()
nombreCarta.removeAll()
- nombreJugada = "Carta alta"
+ nombreJugada = .CartaAlta
}
diff --git a/poker/poker/poker/ViewController.swift b/poker/poker/poker/ViewController.swift
index 2b2100d..6b5bd29 100644
--- a/poker/poker/poker/ViewController.swift
+++ b/poker/poker/poker/ViewController.swift
@@ -11,21 +11,38 @@ import UIKit
class ViewController: UIViewController {
//var carta:Carta = Carta.init()
var baraja:Baraja = Baraja()
+ var mano1:Manos = Manos()
+ var mano2:Manos = Manos()
+ var resultado1: (Jugada, [Int], Int)? = nil
+ var resultado2: (Jugada, [Int], Int)? = nil
+ var ganador = String()
- @IBOutlet weak var resultadoObtenido: UILabel!
+ @IBOutlet weak var resultadoObtenido1: UILabel!
+
+ @IBOutlet weak var resultadoObtenido2: UILabel!
@IBOutlet weak var valorCarta1: UILabel!
@IBOutlet weak var valorCarta2: UILabel!
@IBOutlet weak var valorCarta3: UILabel!
@IBOutlet weak var valorCarta4: UILabel!
@IBOutlet weak var valorCarta5: UILabel!
+ @IBOutlet weak var valorCarta6: UILabel!
+ @IBOutlet weak var valorCarta7: UILabel!
+ @IBOutlet weak var valorCarta8: UILabel!
+ @IBOutlet weak var valorCarta9: UILabel!
+ @IBOutlet weak var valorCarta10: UILabel!
@IBOutlet weak var imagenCarta1: UIImageView!
@IBOutlet weak var imagenCarta2: UIImageView!
@IBOutlet weak var imagenCarta3: UIImageView!
@IBOutlet weak var imagenCarta4: UIImageView!
-
@IBOutlet weak var imagenCarta5: UIImageView!
+ @IBOutlet weak var imagenCarta6: UIImageView!
+ @IBOutlet weak var imagenCarta7: UIImageView!
+ @IBOutlet weak var imagenCarta8: UIImageView!
+ @IBOutlet weak var imagenCarta9: UIImageView!
+ @IBOutlet weak var imagenCarta10: UIImageView!
+
@IBOutlet weak var jugarBtn: UIButton!
@@ -33,29 +50,132 @@ class ViewController: UIViewController {
jugar()
}
- //llamamos a las funciones relativas al juego de la clase baraja (extraer cartas, obtener la jugada y volver a barajar las cartas)
+ //llamamos a las funciones relativas al juego de la clase Manos (extraer cartas, obtener la jugada y volver a barajar las cartas)
func jugar(){
- baraja.extraerCartas()
- resultadoObtenido.text = baraja.jugadas()
+ baraja.crearBaraja()//creamos un mazo completo de 52 cartas
+
+ mano1.extraerCartas(cartasDisponibles: baraja)
+ //se envia el array con las cartas aún disponibles
+ mano2.extraerCartas(cartasDisponibles: baraja)
+
+ resultado1 = mano1.jugadas()
+ //se guardan los resultados obtenidos en variables resultadoN
+ resultado2 = mano2.jugadas()
+
+ resultadoObtenido1.text = "\(mano1.jugadas().0)"
+ //se imprime en los labels el nombre de las jugadas para cada jugador
+ resultadoObtenido2.text = "\(mano2.jugadas().0)"
+
//cargamos los valores del array en los labels de las cartas
- valorCarta1.text = baraja.nombreCarta[0]
- valorCarta2.text = baraja.nombreCarta[1]
- valorCarta3.text = baraja.nombreCarta[2]
- valorCarta4.text = baraja.nombreCarta[3]
- valorCarta5.text = baraja.nombreCarta[4]
+ valorCarta1.text = mano1.nombreCarta[0]
+ valorCarta2.text = mano1.nombreCarta[1]
+ valorCarta3.text = mano1.nombreCarta[2]
+ valorCarta4.text = mano1.nombreCarta[3]
+ valorCarta5.text = mano1.nombreCarta[4]
+
+ valorCarta6.text = mano2.nombreCarta[0]
+ valorCarta7.text = mano2.nombreCarta[1]
+ valorCarta8.text = mano2.nombreCarta[2]
+ valorCarta9.text = mano2.nombreCarta[3]
+ valorCarta10.text = mano2.nombreCarta[4]
//segun el nombre de la imagen mostramos su palo
- imagenCarta1.image = UIImage(named: "poker-\(baraja.palo[0])")
- imagenCarta2.image = UIImage(named: "poker-\(baraja.palo[1])")
- imagenCarta3.image = UIImage(named: "poker-\(baraja.palo[2])")
- imagenCarta4.image = UIImage(named: "poker-\(baraja.palo[3])")
- imagenCarta5.image = UIImage(named: "poker-\(baraja.palo[4])")
+ imagenCarta1.image = UIImage(named: "poker-\(mano1.palo[0])")
+ imagenCarta2.image = UIImage(named: "poker-\(mano1.palo[1])")
+ imagenCarta3.image = UIImage(named: "poker-\(mano1.palo[2])")
+ imagenCarta4.image = UIImage(named: "poker-\(mano1.palo[3])")
+ imagenCarta5.image = UIImage(named: "poker-\(mano1.palo[4])")
+ imagenCarta6.image = UIImage(named: "poker-\(mano2.palo[0])")
+ imagenCarta7.image = UIImage(named: "poker-\(mano2.palo[1])")
+ imagenCarta8.image = UIImage(named: "poker-\(mano2.palo[2])")
+ imagenCarta9.image = UIImage(named: "poker-\(mano2.palo[3])")
+ imagenCarta10.image = UIImage(named: "poker-\(mano2.palo[4])")
+
+ //llamamos a la función que se encarga de elegir al ganador
+ elegirGanador()
+
+ mano1.barajarCartas()
+ //devolvemos las cartas al mazo
+ mano2.barajarCartas()
+ }
+
+ func elegirGanador(){
+ var valores1 = resultado1!.1
+ var valores2 = resultado2!.1
+ //comparamos las jugadas segun su ranking para elegir al ganador
+ if resultado1!.0.rawValue > resultado2!.0.rawValue {
+ ganador = "Jugador1"
+ }
+ if resultado2!.0.rawValue > resultado1!.0.rawValue{
+ ganador = "Jugador2"
+ }
+ //si ambas jugadas son iguales, se procede al desempate
+ if resultado1!.0 == resultado2!.0 {
+ //como se aplican métodos de desempate similares para las escaleras, color y carta alta, se procede a comparar los valores de mayor a menor
+ if resultado1!.0 == .CartaAlta || resultado1!.0 == .Escalera || resultado1!.0 == .EscaleraColor || resultado1!.0 == .EscaleraReal || resultado1!.0 == .Color {
+ while valores1.last! == valores2.last!{
+ valores1.removeLast()
+ valores2.removeLast()
+ }
+ if valores1.count > 0{
+ if valores1.last! > valores2.last!{
+ ganador = "Jugador1"
+ } else
+ if valores2.last! > valores1.last!{
+ ganador = "Jugador2"
+ }
+ else{
+ ganador = "Empate"
+ }
+ }
+ }
+ //para desempatar se elige la combinación mayor, en caso de haber empate se comparan con las cartas que no forman parte de la combinación
+ if resultado1!.0 == .Par || resultado1!.0 == .ParDoble || resultado1!.0 == .Trio || resultado1!.0 == .Full || resultado1!.0 == .Poker{
+
+ if resultado1!.2 > resultado2!.2{
+ ganador = "Jugador1"
+ }
+ if resultado2!.2 > resultado1!.2{
+ ganador = "Jugador2"
+ }
+ if resultado2!.2 == resultado1!.2{
+ while valores1.last! == valores2.last!{
+ valores1.removeLast()
+ valores2.removeLast()
+ }
+ if valores1.count > 0{
+ if valores1.last! > valores2.last!{
+ ganador = "Jugador1"
+ } else
+ if valores2.last! > valores1.last!{
+ ganador = "Jugador2"
+ }
+ else{
+ ganador = "Empate"
+ }
+ }
+
+ }
+
+ }
+ }
- baraja.barajarCartas()
+ //se muestra en una alerta quien ganó o si es empate
+ if ganador == "Empate" {
+ mostrarGanador(mensaje: "\(ganador)")
+ }else{
+ mostrarGanador(mensaje: "El ganador es: \(ganador)")
+ }
}
+ //se crea la alerta, que muestra quien ganó o si es empate
+ 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()