Skip to content

Instantly share code, notes, and snippets.

@webserveis
Created August 31, 2022 12:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save webserveis/81d250c8470d3a17166b0c4c846ab45d to your computer and use it in GitHub Desktop.
Save webserveis/81d250c8470d3a17166b0c4c846ab45d to your computer and use it in GitHub Desktop.
Pokemon Battle Swift
import Foundation
enum PokemonType : Int {
case Water = 0
case Fire
case Plant
case Electro
static var count: Int { return PokemonType.Electro.rawValue + 1}
}
class Pokemon {
var type : PokemonType
var atack : Double
var defence : Double
init(type:PokemonType,atack:Double,defence:Double) {
self.type = type
self.atack = atack
self.defence = defence
}
}
func getEfficiency(type1 : PokemonType, type2 : PokemonType) -> Double {
let effQTable : [[Double]] = [
[0.5,2,0.5,1], //Water
[0.5,0.5,2,1], //Fire
[2,0.5,0.5,1], //Plant
[2,1,0.5,0.5] //Electro
]
let x = type1.rawValue
let y = type2.rawValue
let efficiency = effQTable[x][y]
//print("\(type1) vs \(type2) = \(efficiency)")
return efficiency
}
func getDamage(pk1 : Pokemon, pk2 : Pokemon) -> Double {
let effinciency = getEfficiency(type1 : pk1.type, type2 : pk2.type)
let damage = 50 * (pk1.atack / pk2.defence ) * effinciency
return damage
}
func startBattle(pk1 : Pokemon, pk2 : Pokemon) {
print("\(pk1.type) vs \(pk2.type)")
print("\(pk1.type) 🗡️ \(pk1.atack) \\ 🛡️ \(pk1.defence)")
print("\(pk2.type) 🗡️ \(pk2.atack) \\ 🛡️ \(pk2.defence)")
let damage1over2 = getDamage(pk1 : pk1, pk2 : pk2)
let damage2over1 = getDamage(pk1 : pk2, pk2 : pk1)
print("\(pk1.type) 🤺 \(damage1over2)" )
print("\(pk2.type) 🤺 \(damage2over1)" )
if (damage1over2 == damage2over1) {
print("draw fight")
} else if (damage1over2 > damage2over1) {
print("\(pk1.type) winner")
} else {
print("\(pk2.type) winner")
}
print("----------------------")
}
//Battle
let pokemon1 = Pokemon(type :.Water, atack : 20, defence : 30 )
let pokemon2 = Pokemon(type :.Fire, atack : 20, defence : 30 )
let pokemon3 = Pokemon(type :.Plant, atack : 20, defence : 30 )
let pokemon4 = Pokemon(type :.Electro, atack : 20, defence : 30 )
//startBattle(pk1 : pokemon1, pk2 : pokemon1)
//startBattle(pk1 : pokemon1, pk2 : pokemon2)
//startBattle(pk1 : pokemon1, pk2 : pokemon3)
//startBattle(pk1 : pokemon1, pk2 : pokemon4)
//startBattle(pk1 : pokemon2, pk2 : pokemon1)
//startBattle(pk1 : pokemon2, pk2 : pokemon2)
//startBattle(pk1 : pokemon2, pk2 : pokemon3)
//startBattle(pk1 : pokemon2, pk2 : pokemon4)
//startBattle(pk1 : pokemon3, pk2 : pokemon1)
//startBattle(pk1 : pokemon3, pk2 : pokemon2)
//startBattle(pk1 : pokemon3, pk2 : pokemon3)
//startBattle(pk1 : pokemon3, pk2 : pokemon4)
//startBattle(pk1 : pokemon4, pk2 : pokemon1)
//startBattle(pk1 : pokemon4, pk2 : pokemon2)
//startBattle(pk1 : pokemon4, pk2 : pokemon3)
//startBattle(pk1 : pokemon4, pk2 : pokemon4)
let pokemon5 = Pokemon(type :PokemonType(rawValue:Int.random(in: 0..<PokemonType.count))!, atack : Double(Int.random(in: 10..<100)), defence : Double(Int.random(in: 10..<100)) )
let pokemon6 = Pokemon(type :PokemonType(rawValue:Int.random(in: 0..<PokemonType.count))!, atack : Double(Int.random(in: 10..<100)), defence : Double(Int.random(in: 10..<100)) )
startBattle(pk1 : pokemon5, pk2 : pokemon6)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment