Created
May 23, 2019 03:37
-
-
Save vitor-diego-s/fb3491a1d097ce9801ca7a302e4dcd8d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
"time" | |
) | |
//This is a simple example of Go routines | |
//Our program executes some calculus using concurrency | |
//We're calculating the points of each player in the final turn | |
// Characters -> Witch, Orc, Warrior | |
// Features -> Strength, Speed, Magic | |
// Actions -> Attack, Defense, Run | |
//Action -> commons actions | |
type Action struct { | |
attack int16 | |
defense int16 | |
speed int16 | |
} | |
//Witch -> represents a Witch | |
type Witch struct { | |
id string | |
name string | |
magic int16 | |
actions Action | |
} | |
//Orc -> represents an Orc | |
type Orc struct { | |
id string | |
name string | |
strength int16 | |
actions Action | |
} | |
//Warrior -> represents a Warrior | |
type Warrior struct { | |
id string | |
name string | |
speed int16 | |
tatics int16 | |
actions Action | |
} | |
//Ranking -> represents the ranking | |
type Ranking struct { | |
total int16 | |
timestamp int64 | |
players []RankingPosition | |
} | |
//RankingPosition -> represents a position | |
type RankingPosition struct { | |
name string | |
id string | |
points int16 | |
position int16 | |
} | |
func executeRandomTurn() []RankingPosition { | |
warrior := Warrior{ | |
id: "warrior_id", | |
name: "San Patrick", | |
tatics: 20, | |
actions: Action{attack: 12, defense: 12, speed: 23}} | |
witch := Witch{ | |
id: "witch_id", | |
name: "Zechyn Magus", | |
magic: 34, | |
actions: Action{attack: 12, defense: 8, speed: 23}} | |
orc := Orc{ | |
id: "orc_id", | |
name: "Swargeen", | |
strength: 44, | |
actions: Action{attack: 25, defense: 18, speed: 6}} | |
var positions []RankingPosition | |
positions = append(positions, RankingPosition{name: warrior.name, id: warrior.id, points: (warrior.tatics * warrior.actions.attack), position: 0}) | |
positions = append(positions, RankingPosition{name: witch.name, id: witch.id, points: (witch.magic * witch.actions.defense), position: 0}) | |
positions = append(positions, RankingPosition{name: orc.name, id: orc.id, points: (orc.strength * orc.actions.speed), position: 0}) | |
return positions | |
} | |
func getRanking(positions []RankingPosition) Ranking { | |
var t int16 | |
for i, s := range positions { | |
fmt.Println(i, s) | |
t += s.points | |
} | |
ranking := Ranking{timestamp: (time.Now().UnixNano() / 1000000), players: positions, total: t} | |
return ranking | |
} | |
func main() { | |
positions := executeRandomTurn() | |
ranking := getRanking(positions) | |
fmt.Println("Ranking", ranking) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment