# Snippets¶

Except when explicit saying otherwise, use the following base code:

```import vindinium

class MyBot(vindinium.bots.BaseBot):
# stuff here
pass
```

## Random Bot¶

A random bot:

```import random
import vindinium

class RandomBot(vindinium.bots.RawBot):
moves = [
vindinium.STAY,
vindinium.NORTH,
vindinium.EAST,
vindinium.WEST,
vindinium.SOUTH
]
def move(self):
return random.choice(self.moves)
```

## Move to specific position¶

Uses A* to find a path to some specific location:

```def start(self):
self.search = vindinium.ai.AStar(self.game.map)

def move(self):
return self.go_to(3, 4)

def go_to(self, x_, y_):
x = self.hero.x
y = self.hero.y

# Compute path to the mine
path = self.search.find(x, y, x_, y_)

# Send command to follow that path
if len(path) > 0:
x_, y_ = path[0]

return vin.utils.path_to_command(x, y, x_, y_)
```

## Move to nearest tavern¶

Consider the `go_to` method:

```def go_to_nearest_tavern(self):
x = self.hero.x
y = self.hero.y

# Order taverns by distance
taverns = vin.utils.order_by_distance(x, y, self.game.taverns)
return self.go_to(taverns[0].x, taverns[1].y)
```

## Move to nearest enemy/neutral mine¶

Consider the `go_to` method:

```def go_to_nearest_mine(self):
x = self.hero.x
y = self.hero.y

# Order mines by distance
mines = vin.utils.order_by_distance(x, y, self.game.mines)

for mine in mines:
# Grab nearest mine that is not owned by this hero
if mine.owner != self.id:
return self.go_to(mine.x, mine.y)

return vindinium.STAY
```