[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()