Skip to content

Instantly share code, notes, and snippets.

@ssddi456
Created June 18, 2015 04:05
Show Gist options
  • Save ssddi456/6803a8a52f887b1837ee to your computer and use it in GitHub Desktop.
Save ssddi456/6803a8a52f887b1837ee to your computer and use it in GitHub Desktop.
# -*- coding: utf-8 -*-
from PIL import Image, ImageDraw, ImageFont
import unpack_img
import os
pkg_path = os.path.abspath(os.path.dirname(__file__)) + '/'
road_src = unpack_img.map_resoure( pkg_path + 'grass.png')
wall_src = unpack_img.map_resoure( pkg_path + 'rock.png')
pick = 32
g_font = ImageFont.truetype(pkg_path + 'msyhbd.ttf', 10)
def map_pos_to_img_pos(map_pos):
half = pick/2
return (map_pos[0] * pick + half + 10, map_pos[1] * pick + half + 10)
class map_drawer(object):
"""docstring for map_drawer"""
def __init__(self, infos):
super(map_drawer, self).__init__()
self.draw_map(infos)
def draw_tooltip(self, text, pos):
draw = self.draw
margin = 3
t_size = draw.textsize(text, font=g_font)
t_left = pos[0] - t_size[0]/2
b_left = t_left - margin
b_right= pos[0] + t_size[0]/2 + margin
t_top = pos[1] - t_size[1] - margin - 5
b_top = t_top - margin
b_bot = pos[1] - 5
draw.polygon([pos, (pos[0]+5,pos[1]-5), (pos[0]-5, pos[1]-5), pos], fill='#666')
draw.rectangle([(b_left,b_top),(b_right,b_bot)],fill='#666')
draw.text((t_left,t_top),text, font=g_font)
def draw_players( self, players ):
for player in players:
self.draw_tooltip(player['name'], map_pos_to_img_pos(player['pos']))
def draw_road(self, roads):
for road in roads:
self.canvas.paste(road_src.piece_1,(10+road[0]*pick, 10+road[1]*pick))
def draw_map(self, infos ):
size = infos['size']
canvas = self.canvas = Image.new('RGB', (size[0]*pick + 20, size[1]*pick + 20))
self.draw = ImageDraw.Draw(canvas)
for x in xrange(size[0]) :
for y in xrange(size[1]) :
canvas.paste(wall_src.piece_1,(10+x*pick, 10+y*pick))
self.draw_road(infos['roads'])
self.draw_players(infos['players'])
def save_to(self, name):
self.canvas.save(name)
import click
import urllib2
import json
@click.command()
@click.option('--infos', help='infos to gerate map')
@click.option('--out', prompt='output filename')
def draw_map( infos, out ):
'''
draw map for game
'''
map_drawer(json.loads(urllib2.unquote(infos).decode('utf8'))).save_to(out)
if __name__ == "__main__":
draw_map()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment