Merge remote-tracking branch 'remotes/amy/llfkj'
# Conflicts: # hexmap.py # main.py
This commit is contained in:
commit
a71edbe29b
|
@ -57,7 +57,7 @@
|
||||||
" size_hint: 1, .66\n",
|
" size_hint: 1, .66\n",
|
||||||
" DebugLabel:\n",
|
" DebugLabel:\n",
|
||||||
" text: 'mini-map'\n",
|
" text: 'mini-map'\n",
|
||||||
" size_hint: 1, .33\n"
|
" size_hint: 1, .33"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -82,7 +82,7 @@
|
||||||
" return StrategyGame()\n",
|
" return StrategyGame()\n",
|
||||||
"\n",
|
"\n",
|
||||||
"if __name__ == '__main__':\n",
|
"if __name__ == '__main__':\n",
|
||||||
" StrategyGameApp().run()\n"
|
" StrategyGameApp().run()"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -102,7 +102,7 @@
|
||||||
},
|
},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
"#!python main.py\n"
|
"#!python main.py"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -140,7 +140,7 @@
|
||||||
" size_hint: 1, .66\n",
|
" size_hint: 1, .66\n",
|
||||||
" DebugLabel:\n",
|
" DebugLabel:\n",
|
||||||
" text: 'mini-map'\n",
|
" text: 'mini-map'\n",
|
||||||
" size_hint: 1, .33\n"
|
" size_hint: 1, .33"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -199,7 +199,7 @@
|
||||||
" size_hint: 1, .66\n",
|
" size_hint: 1, .66\n",
|
||||||
" DebugLabel:\n",
|
" DebugLabel:\n",
|
||||||
" text: 'mini-map'\n",
|
" text: 'mini-map'\n",
|
||||||
" size_hint: 1, .33\n"
|
" size_hint: 1, .33"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -237,7 +237,7 @@
|
||||||
" return StrategyGame()\n",
|
" return StrategyGame()\n",
|
||||||
"\n",
|
"\n",
|
||||||
"if __name__ == '__main__':\n",
|
"if __name__ == '__main__':\n",
|
||||||
" StrategyGameApp().run()\n"
|
" StrategyGameApp().run()"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -290,7 +290,7 @@
|
||||||
" size_hint: 1, .66\n",
|
" size_hint: 1, .66\n",
|
||||||
" DebugLabel:\n",
|
" DebugLabel:\n",
|
||||||
" text: 'mini-map'\n",
|
" text: 'mini-map'\n",
|
||||||
" size_hint: 1, .33\n"
|
" size_hint: 1, .33"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -328,7 +328,7 @@
|
||||||
" return StrategyGame()\n",
|
" return StrategyGame()\n",
|
||||||
"\n",
|
"\n",
|
||||||
"if __name__ == '__main__':\n",
|
"if __name__ == '__main__':\n",
|
||||||
" StrategyGameApp().run()\n"
|
" StrategyGameApp().run()"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -431,7 +431,7 @@
|
||||||
" return StrategyGame()\n",
|
" return StrategyGame()\n",
|
||||||
"\n",
|
"\n",
|
||||||
"if __name__ == '__main__':\n",
|
"if __name__ == '__main__':\n",
|
||||||
" StrategyGameApp().run()\n"
|
" StrategyGameApp().run()"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -503,7 +503,7 @@
|
||||||
" return HelloWorld()\n",
|
" return HelloWorld()\n",
|
||||||
"\n",
|
"\n",
|
||||||
"if __name__ == '__main__':\n",
|
"if __name__ == '__main__':\n",
|
||||||
" HelloWorldApp().run()\n"
|
" HelloWorldApp().run()"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -538,7 +538,7 @@
|
||||||
" size_hint: 1, .66\n",
|
" size_hint: 1, .66\n",
|
||||||
" DebugLabel:\n",
|
" DebugLabel:\n",
|
||||||
" text: 'mini-map'\n",
|
" text: 'mini-map'\n",
|
||||||
" size_hint: 1, .33\n"
|
" size_hint: 1, .33"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -619,7 +619,7 @@
|
||||||
" rgba: (1,1,1,1)\n",
|
" rgba: (1,1,1,1)\n",
|
||||||
" Line:\n",
|
" Line:\n",
|
||||||
" points: (self.right, self.y, self.right, self.top)\n",
|
" points: (self.right, self.y, self.right, self.top)\n",
|
||||||
" width: 2\n"
|
" width: 2"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -700,7 +700,7 @@
|
||||||
" return StrategyGame()\n",
|
" return StrategyGame()\n",
|
||||||
"\n",
|
"\n",
|
||||||
"if __name__ == '__main__':\n",
|
"if __name__ == '__main__':\n",
|
||||||
" StrategyGameApp().run()\n"
|
" StrategyGameApp().run()"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -785,7 +785,7 @@
|
||||||
"\n",
|
"\n",
|
||||||
"<HexMapCell>:\n",
|
"<HexMapCell>:\n",
|
||||||
" size_hint: 1, None\n",
|
" size_hint: 1, None\n",
|
||||||
" height: self.width / math.sqrt(3)\n"
|
" height: self.width / math.sqrt(3)"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -895,7 +895,7 @@
|
||||||
" return StrategyGame()\n",
|
" return StrategyGame()\n",
|
||||||
"\n",
|
"\n",
|
||||||
"if __name__ == '__main__':\n",
|
"if __name__ == '__main__':\n",
|
||||||
" StrategyGameApp().run()\n"
|
" StrategyGameApp().run()"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -1100,7 +1100,7 @@
|
||||||
" return StrategyGame()\n",
|
" return StrategyGame()\n",
|
||||||
"\n",
|
"\n",
|
||||||
"if __name__ == '__main__':\n",
|
"if __name__ == '__main__':\n",
|
||||||
" StrategyGameApp().run()\n"
|
" StrategyGameApp().run()"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -1120,6 +1120,40 @@
|
||||||
"Cleaned some stuff up and added colours to the hexagons. "
|
"Cleaned some stuff up and added colours to the hexagons. "
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {
|
||||||
|
"collapsed": true
|
||||||
|
},
|
||||||
|
"source": [
|
||||||
|
"## Test out the hexmap conversion code"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 5,
|
||||||
|
"metadata": {
|
||||||
|
"collapsed": false
|
||||||
|
},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"ename": "TypeError",
|
||||||
|
"evalue": "must be type, not classobj",
|
||||||
|
"output_type": "error",
|
||||||
|
"traceback": [
|
||||||
|
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
||||||
|
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
|
||||||
|
"\u001b[0;32m<ipython-input-5-45811acccccf>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mfoo\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mHexMapCell\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mhex_cell\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mHexMapCell\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m9\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m4\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
|
||||||
|
"\u001b[0;32m/Users/amywooding/python-code/gamecamp/foo.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, row, col, **kwargs)\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;32mclass\u001b[0m \u001b[0mHexMapCell\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mObject\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrow\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcol\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 9\u001b[0;31m \u001b[0;31m#super(HexMapCell, self).__init__(**kwargs)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 10\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcoords\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mMapCoords\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcol\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[0;31m## set the cube coordinates of the hexagon\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
|
||||||
|
"\u001b[0;31mTypeError\u001b[0m: must be type, not classobj"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"from foo import HexMapCell\n",
|
||||||
|
"hex_cell = HexMapCell(9, 4)"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": null,
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
#:include debug.kv
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'horizontal'
|
||||||
|
Hex:
|
||||||
|
pos: self.pos
|
||||||
|
DebugLabel:
|
||||||
|
text: '1'
|
||||||
|
Hex:
|
||||||
|
pos: self.pos
|
||||||
|
DebugLabel:
|
||||||
|
text: '1'
|
||||||
|
<Hex@Label>:
|
||||||
|
pos_hint: {'center_x':.5, 'center_y':.5}
|
||||||
|
canvas.after:
|
||||||
|
Color:
|
||||||
|
rgba: 1,1,1,1
|
||||||
|
Ellipse:
|
||||||
|
segments: 6
|
||||||
|
pos: self.pos
|
||||||
|
size: min(self.width, self.height), min(self.width, self.height)
|
44
hexmap.py
44
hexmap.py
|
@ -1,11 +1,10 @@
|
||||||
import collections
|
import collections
|
||||||
|
from math import ceil
|
||||||
from kivy.graphics.context_instructions import Color
|
|
||||||
from kivy.graphics.vertex_instructions import Line
|
|
||||||
|
|
||||||
import kivy.utils
|
import kivy.utils
|
||||||
from kivy.logger import Logger
|
from kivy.logger import Logger
|
||||||
from kivy.uix.label import Label
|
from kivy.uix.label import Label
|
||||||
|
from kivy.graphics import Color, Ellipse, Line
|
||||||
from kivy.vector import Vector
|
from kivy.vector import Vector
|
||||||
|
|
||||||
MapCoords = collections.namedtuple('MapCoords', ['row', 'col'])
|
MapCoords = collections.namedtuple('MapCoords', ['row', 'col'])
|
||||||
|
@ -15,17 +14,46 @@ class HexMapCell(Label):
|
||||||
def __init__(self, row=0, col=0, **kwargs):
|
def __init__(self, row=0, col=0, **kwargs):
|
||||||
super(HexMapCell, self).__init__(**kwargs)
|
super(HexMapCell, self).__init__(**kwargs)
|
||||||
self.coords = MapCoords(row, col)
|
self.coords = MapCoords(row, col)
|
||||||
|
## set the cube coordinates of the hexagon
|
||||||
|
## as [x, y, z]
|
||||||
|
self.cube_coords = self.even_r_to_cube(self.coords.row / 3, self.coords.col / 2)
|
||||||
self.selected = False
|
self.selected = False
|
||||||
self.visible_on_map = False
|
self.visible_on_map = False
|
||||||
self.terrain_colour = Color(0, 0, 0, 1)
|
self.terrain_colour = Color(0, 0, 0, 1)
|
||||||
self.terrain = ''
|
self.terrain = ''
|
||||||
|
|
||||||
def map_coordinates(self):
|
def even_r_to_cube(self, row, col):
|
||||||
return self.coords.row / 3, self.coords.col / 2
|
'''compute cube coordinates from even-r hex coordinates'''
|
||||||
|
x = int(col - ceil(float(row)/2))
|
||||||
|
z = row
|
||||||
|
y = - x - z
|
||||||
|
return([x, y, z])
|
||||||
|
|
||||||
|
def cube_to_even_r(self, x, y, z):
|
||||||
|
row = int(x + ceil(z / 2))
|
||||||
|
col = z
|
||||||
|
return ([row, col])
|
||||||
|
|
||||||
|
@property
|
||||||
|
def even_r_coords(self):
|
||||||
|
'''return even-r coordinates of the hexagon.'''
|
||||||
|
return(self.cube_to_even_r(*self.cube_coords))
|
||||||
|
|
||||||
|
@even_r_coords.setter
|
||||||
|
def even_r_coords(self, value):
|
||||||
|
self.cube_coords = self.even_r_to_cube(*value)
|
||||||
|
|
||||||
|
def coordinate_text(self):
|
||||||
|
return '({}, {})'.format(self.coords.row, self.coords.col)
|
||||||
|
|
||||||
|
def even_r_coordinate_text(self):
|
||||||
|
return '{}'.format(self.even_r_coords)
|
||||||
|
|
||||||
|
def cube_coordinate_text(self):
|
||||||
|
return '{}\n{}\n{}'.format(*self.cube_coords)
|
||||||
|
|
||||||
def map_display_text(self):
|
def map_display_text(self):
|
||||||
map_x, map_y = self.map_coordinates()
|
return "{}\n{} \n {}".format(self.even_r_coordinate_text(), self.cube_coordinate_text(), terrain)
|
||||||
return "({}, {}) \n {}".format(map_x, map_y, self.terrain)
|
|
||||||
|
|
||||||
def update_pos(self, instance, value):
|
def update_pos(self, instance, value):
|
||||||
# Determine the location of the solid hexagon cell. Needs to be offset from the centre of the hex.
|
# Determine the location of the solid hexagon cell. Needs to be offset from the centre of the hex.
|
||||||
|
@ -37,7 +65,7 @@ class HexMapCell(Label):
|
||||||
# Resize the outline of the cell.
|
# Resize the outline of the cell.
|
||||||
self.ell.circle = (self.x, self.y, radius, 0, 360, 6)
|
self.ell.circle = (self.x, self.y, radius, 0, 360, 6)
|
||||||
|
|
||||||
# Resize the actual cell.f
|
# Resize the actual cell.
|
||||||
self.solid.pos = (solid_x, solid_y)
|
self.solid.pos = (solid_x, solid_y)
|
||||||
self.solid.size = solid_size
|
self.solid.size = solid_size
|
||||||
|
|
||||||
|
|
11
main.py
11
main.py
|
@ -1,10 +1,10 @@
|
||||||
|
|
||||||
|
from kivy import app, properties
|
||||||
|
from kivy.uix.label import Label
|
||||||
|
from kivy.uix.floatlayout import FloatLayout
|
||||||
|
from kivy.graphics import Color, Ellipse, Line
|
||||||
import kivy.utils
|
import kivy.utils
|
||||||
from hexmap import HexMapCell
|
from hexmap import HexMapCell
|
||||||
from kivy import app, properties
|
|
||||||
from kivy.graphics import Color, Ellipse, Line, Rectangle
|
|
||||||
from kivy.uix.floatlayout import FloatLayout
|
|
||||||
from kivy.uix.label import Label
|
|
||||||
from terrain import Terrains, choose_random_terrain
|
|
||||||
|
|
||||||
|
|
||||||
class StrategyGame(FloatLayout):
|
class StrategyGame(FloatLayout):
|
||||||
|
@ -59,6 +59,7 @@ class StrategyGame(FloatLayout):
|
||||||
# Bind the cell code so as to update its position and size when the parent widget resizes.
|
# Bind the cell code so as to update its position and size when the parent widget resizes.
|
||||||
hex_cell.bind(pos=hex_cell.update_pos, size=hex_cell.update_pos)
|
hex_cell.bind(pos=hex_cell.update_pos, size=hex_cell.update_pos)
|
||||||
|
|
||||||
|
|
||||||
def update_selected_cell(self, coords, terrain_colour, *args):
|
def update_selected_cell(self, coords, terrain_colour, *args):
|
||||||
self.status.text = 'Coords: ({}, {})'.format(coords[0], coords[1])
|
self.status.text = 'Coords: ({}, {})'.format(coords[0], coords[1])
|
||||||
with self.status.canvas.before:
|
with self.status.canvas.before:
|
||||||
|
|
Loading…
Reference in New Issue