[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[pygame] pygame refesh.. what else ?
hello,
I am new to the list and newbie to python and pygame.
For my children, i would like to develop a little map maker, quite easy.
you chose a tile set with F3,
- it load the tileset in a sprite, draw lines on it
- it create an empty tilset for seeing the map construction whit lines
drowned
when ou click on the tileset, it show on a sprite (upper left corner)
the tile chosen. that part do not work...
what do i don't understand ?
here is the code
==============================
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# herve_map.py
#
# File created by herve
import sys, os, pygame
from pygame.locals import *
import pygame.rect
from Tkinter import *
import tkFileDialog
#margin betwen elements
t_marge=10
#numbers of tiles on the map
t_map_x=20
t_map_y=10
#sizes of tiles
t_tuiles_x=32
t_tuiles_y=32
class interaction():
def envoi(self):
global t_tuiles_x
global t_tuiles_y
t_tuiles_x=int(self.x.get())
t_tuiles_y=int(self.y.get())
self.racine.destroy()
def taille(self):
print "taille"
self.racine=Tk()
self.racine.geometry("200x100")
w=Label(self.racine,text="taille des tuiles")
w.pack()
self.x=Entry(self.racine,width=5)
self.x.pack(side=LEFT)
self.x.insert(0, t_tuiles_x)
self.y=Entry(self.racine,width=5)
self.y.pack(side=LEFT)
self.y.insert(0, t_tuiles_y)
b = Button(self.racine, text="OK", command=self.envoi)
b.pack(side=LEFT)
self.racine.mainloop()
class aide():
def general(self):
print "aide générale"
class tuiles(pygame.sprite.Sprite):
""" the tile map on the screen"""
def __init__(self,fichier_tuile):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(fichier_tuile)
self.rect=self.image.get_rect()
self.rect.topleft=[t_marge,2*t_marge+t_tuiles_y]
self.size_x=self.image.get_size()[0]
self.size_y=self.image.get_size()[1]
self.pos_x=t_marge
self.pos_y=2*t_marge+t_tuiles_y
def active_tuile(self,x,y,screen):
#that part do not work
self.a_tuile=self.image.subsurface(x*t_tuiles_x,y*t_tuiles_y,t_tuiles_x,t_tuiles_y)
self.a_rect=self.a_tuile.get_rect()
self.a_rect.topleft=[t_marge,t_marge]
def presente_active(self,screen):
#that part do not work
screen.blit(self.a_tuile,self.a_rect)
def get_click(self,x,y,screen):
#that part do not work
if self.rect.collidepoint(x,y):
nbr_x= int((x-self.pos_x)/t_tuiles_x)
nbr_y= int((y-self.pos_y)/t_tuiles_y)
self.active_tuile(nbr_x,nbr_y,screen)
self.presente_active(screen)
def grid(self,image):
x=0
y=0
while (x <= self.size_x):
pygame.draw.line(image,(255,255,255),(x,0),(x,self.size_y),1)
x+=t_tuiles_x
while (y <= self.size_y):
pygame.draw.line(image,(255,255,255),(0,y),(self.size_x,y),1)
y+=t_tuiles_y
def affiche(self,screen):
if self.image != None:
self.grid(self.image)
screen.blit(self.image,self.rect)
class map_draw(pygame.sprite.Sprite):
""" the map on the screen """
def __init__(self,tuiles):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface([t_map_x*t_tuiles_x,t_map_y*t_tuiles_y])
#self.image = pygame.Surface([640,320])
self.rect=self.image.get_rect()
self.size_tuiles_x=tuiles.size_x
self.size_tuiles_y=tuiles.size_x
self.rect.topleft=self.pos()
def clear(self,screen):
print "cleanning"
self.image.fill([0,0,0])
screen.blit(self.image,self.rect)
def size(self):
return self.image.get_size()
def pos(self):
return ((2*t_marge)+ self.size_tuiles_x ,2*t_marge+t_tuiles_y)
def grid(self,screen):
size_x,size_y=self.size()
pos_x,pos_y=self.pos()
x=0
y=0
while (x <= size_x):
pygame.draw.line(screen,(255,255,255),(x,0),(x,size_y),1)
x+=t_tuiles_x
while (y <= size_y):
pygame.draw.line(screen,(255,255,255),(0,y),(size_x,y),1)
y+=t_tuiles_y
def affiche(self,screen):
self.grid(self.image)
screen.blit(self.image,self.rect)
class map():
def __init__(self):
pygame.init()
self.window = pygame.display.set_mode((1200,600), RESIZABLE)
pygame.display.set_caption('Hervé map - V 0.01')
self.screen = pygame.display.get_surface()
self.mon_aide= aide()
self.interaction=interaction()
self.game()
def fichier_tuile(self):
tk_root = Tk()
tk_root.withdraw()
filetype=[('supported', ('*.hmp', '*.png', '*.jpg', '*.bmp')), ('map
files', '*.hmp'), ('tilesets', ('*.png', '*.jpg', '*.bmp'))]
self.fichier=tkFileDialog.askopenfilename( title = 'File
Select',filetypes=filetype)
if self.fichier.endswith(".bmp"):
try :
self.tuiles.clear(self.screen)
except AttributeError:
pass
finally:
self.tuiles=tuiles(self.fichier)
self.tuiles.affiche(self.screen)
try :
self.mymap.clear(self.screen)
except AttributeError:
pass
finally:
self.mymap=map_draw(self.tuiles)
self.mymap.affiche(self.screen)
def gere_click(self):
left, top = pygame.mouse.get_pos()
if self.tuiles.get_click(left,top,self.screen) != None:
x,y=self.tuiles.get_click(left,top,self.screen)
self.tuiles.active_tuile(x,y,self.screen)
self.tuiles.presente_active(self.screen)
def input(self, events):
for event in events:
if event.type == KEYUP and event.key == K_ESCAPE or event.type ==
QUIT:
sys.exit(0)
if event.type == MOUSEBUTTONDOWN:
left, top = pygame.mouse.get_pos()
if self.tuiles.get_click(left,top,self.screen) != None:
x,y=self.tuiles.get_click(left,top,self.screen)
self.tuiles.active_tuile(x,y,self.screen)
self.tuiles.presente_active(self.screen)
if event.type==KEYUP and event.key == K_F1:
self.mon_aide.general()
if event.type==KEYUP and event.key == K_F2:
self.interaction.taille()
print " new ",t_tuiles_x
if event.type==KEYUP and event.key == K_F3:
fichier=self.fichier_tuile()
if event.type==KEYUP and event.key == K_F5:
pass
def game(self):
while True:
self.input(pygame.event.get())
pygame.time.wait(100)
if __name__ == '__main__':
map()