Skip to content

Instantly share code, notes, and snippets.

@vitor-diego-s
Created May 23, 2019 03:37
Show Gist options
  • Save vitor-diego-s/fb3491a1d097ce9801ca7a302e4dcd8d to your computer and use it in GitHub Desktop.
Save vitor-diego-s/fb3491a1d097ce9801ca7a302e4dcd8d to your computer and use it in GitHub Desktop.
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