import sys, pygame
from pygame import *

sirka, vyska = 12, 12
size = sirka * 64, vyska * 64

zdi = [[0 for x in range(vyska)] for y in range(sirka)]
znacky = [[0 for x in range(vyska)] for y in range(sirka)]

pygame.init()
screen = display.set_mode(size)

black = 0, 0, 0

data = image.load("data.png")

robot_smer = 0;
robot_x, robot_y = 0, vyska - 1;

editovaci_mod = 0;
kurzor_x, kurzor_y = 0, vyska - 1;

data_rect = data.get_rect()
rect = data.get_rect()

clock = pygame.time.Clock()

soubor = "save"

def kresli():
	for i in range((1-editovaci_mod)*3 + 1):
		screen.fill(black)

		for x in range(sirka):
			for y in range(vyska):
				rect.x = x * 64;
				rect.y = y * 64;

				if zdi[x][y]: data_rect.x = 5 * 64;
				else: data_rect.x = 6 * 64;
				data_rect.y = 0;
				data_rect.w = data_rect.h = 64;
				screen.blit(data, rect, data_rect)

				if znacky[x][y]:
					data_rect.x = (znacky[x][y] + 7) * 64;
					screen.blit(data, rect, data_rect)

		if editovaci_mod:
			data_rect.x = 7 * 64;
			data_rect.y = 0;
			data_rect.w = data_rect.h = 64;
			
			kurzor_rect = data.get_rect()
			kurzor_rect.move_ip(kurzor_x * 64, kurzor_y * 64)
			
			screen.blit(data, kurzor_rect, data_rect)
		
		data_rect.x = robot_smer * 64;
		data_rect.y = 0;
		data_rect.w = data_rect.h = 64;
		
		robot_rect = data.get_rect()
		robot_rect.move_ip(robot_x * 64, robot_y * 64)
		
		screen.blit(data, robot_rect, data_rect)

		pygame.display.flip()
		clock.tick(25)
		
		for event in pygame.event.get():
			if event.type == QUIT:
				pygame.quit()
				sys.exit(0)
			elif event.type == KEYDOWN:
				if event.key in [K_ESCAPE, K_q]:
					pygame.quit()
					sys.exit(0)

def chyba():
	screen.fill(black)
	pygame.display.flip()
	clock.tick(3)
	kresli()
	clock.tick(3)
	
		
def vlevovbok():
	global robot_smer
	
	robot_smer = robot_smer + 1;
	if robot_smer == 4: robot_smer = 0;

	kresli()

def vpravovbok():
	global robot_smer
	
	robot_smer = robot_smer - 1;
	if robot_smer == -1: robot_smer = 3;

	kresli()

def krok():
	global robot_smer, robot_x, robot_y
	
	if robot_smer == 0:
		if robot_x < sirka - 1 and zdi[robot_x + 1][robot_y] == 0: robot_x = robot_x + 1
		else: chyba()
	if robot_smer == 1:
		if robot_y > 0 and zdi[robot_x][robot_y - 1] == 0: robot_y = robot_y - 1
		else: chyba()
	if robot_smer == 2:
		if robot_x > 0 and zdi[robot_x - 1][robot_y] == 0: robot_x = robot_x - 1
		else: chyba()
	if robot_smer == 3:
		if robot_y < vyska - 1 and zdi[robot_x][robot_y + 1] == 0: robot_y = robot_y + 1
		else: chyba()

	kresli()

def poloz():
	global robot_x, robot_y
	
	if znacky[robot_x][robot_y] < 8: znacky[robot_x][robot_y] = znacky[robot_x][robot_y] + 1

	kresli()

def zvedni():
	global robot_x, robot_y
	
	if znacky[robot_x][robot_y] > 0: znacky[robot_x][robot_y] = znacky[robot_x][robot_y] - 1

	kresli()

def znacka():
	global robot_x, robot_y
	
	if znacky[robot_x][robot_y] > 0: return 1
	else: return 0

def zed():
	global robot_x, robot_y
	
	if robot_smer == 0 and robot_x < sirka - 1 and zdi[robot_x + 1][robot_y] == 0: return 0
	if robot_smer == 1 and robot_y > 0 and zdi[robot_x][robot_y - 1] == 0: return 0
	if robot_smer == 2 and robot_x > 0 and zdi[robot_x - 1][robot_y] == 0: return 0
	if robot_smer == 3 and robot_y < vyska - 1 and zdi[robot_x][robot_y + 1] == 0: return 0

	return 1

def cekej():
	global kurzor_x, kurzor_y, editovaci_mod
	
	while 1:
		kresli()

def uloz(filename):
	f = open(filename, 'w')
	
	f.write(str(robot_smer) + "\n")
	f.write(str(robot_x) + "\n")
	f.write(str(robot_y) + "\n")
	
	for y in range(sirka):
		for x in range(vyska):
			f.write(str(znacky[x][y]))
			if zdi[x][y]: f.write("1")
			else: f.write("0")	
	f.close()
	
def nacti(filename):
	global robot_smer, robot_x, robot_y
	
	f = open(filename, 'r')
	
	robot_smer = int(string.replace(f.readline(), "\n", ""))
	robot_x = int(string.replace(f.readline(), "\n", ""))
	robot_y = int(string.replace(f.readline(), "\n", ""))
	
	for y in range(sirka):
		for x in range(vyska):
			znacky[x][y] = int(f.read(1))
			zdi[x][y] = int(f.read(1))	
	f.close()
	
def nastav_soubor(filename):
	global soubor
	soubor = filename
	
def editor():
	global kurzor_x, kurzor_y, editovaci_mod, robot_x, robot_y
	editovaci_mod = 1
	kresli()
	
	while 1:
		for event in pygame.event.get():
			if event.type == QUIT:
				pygame.quit()
				sys.exit(0)
			elif event.type == KEYDOWN:
				if event.key in [K_ESCAPE]:
					pygame.quit()
					sys.exit(0)
				elif event.key in [K_LEFT]:
					if kurzor_x > 0: kurzor_x -= 1
					kresli()
				elif event.key in [K_RIGHT]:
					if kurzor_x < sirka-1: kurzor_x += 1
					kresli()
				elif event.key in [K_UP]:
					if kurzor_y > 0: kurzor_y -= 1
					kresli()
				elif event.key in [K_DOWN]:
					if kurzor_y < vyska-1: kurzor_y += 1
					kresli()
				elif event.key in [K_SPACE]:
					zdi[kurzor_x][kurzor_y] = not zdi[kurzor_x][kurzor_y]
					kresli()
				elif event.key in [K_KP0]:
					znacky[kurzor_x][kurzor_y] = 0
					kresli()
				elif event.key in [K_KP1]:
					znacky[kurzor_x][kurzor_y] = 1
					kresli()
				elif event.key in [K_KP2]:
					znacky[kurzor_x][kurzor_y] = 2
					kresli()
				elif event.key in [K_KP3]:
					znacky[kurzor_x][kurzor_y] = 3
					kresli()
				elif event.key in [K_KP4]:
					znacky[kurzor_x][kurzor_y] = 4
					kresli()
				elif event.key in [K_KP5]:
					znacky[kurzor_x][kurzor_y] = 5
					kresli()
				elif event.key in [K_KP6]:
					znacky[kurzor_x][kurzor_y] = 6
					kresli()
				elif event.key in [K_KP7]:
					znacky[kurzor_x][kurzor_y] = 7
					kresli()
				elif event.key in [K_KP8]:
					znacky[kurzor_x][kurzor_y] = 8
					kresli()
				elif event.key in [K_KP_PLUS]:
					if znacky[kurzor_x][kurzor_y] < 8: znacky[kurzor_x][kurzor_y] += 1
					kresli()
				elif event.key in [K_KP_MINUS]:
					if znacky[kurzor_x][kurzor_y] > 0: znacky[kurzor_x][kurzor_y] -= 1
					kresli()
				elif event.key in [K_r]:
					robot_x = kurzor_x
					robot_y = kurzor_y
					kresli()
				elif event.key in [K_s]:
					uloz(soubor)
				elif event.key in [K_e]:
					editovaci_mod = 0
					kresli()
					return 0
		clock.tick(25)
