Advertisement
zeroblitzt

Untitled

Feb 20th, 2013
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.44 KB | None | 0 0
  1. #pygame Test by KNovak
  2. import pygame, sys, os, math, random
  3. from pygame.locals import *
  4. pygame.init()
  5. pygame.key.set_repeat(1)
  6. fullscreen = False;
  7.  
  8. #startup settings
  9. for arg in sys.argv:
  10.     if arg == "-f":
  11.         fullscreen = True
  12.  
  13.  
  14. #Video Display information
  15. vidinfo = pygame.display.Info()
  16.  
  17. if fullscreen == True:
  18.     vidsize = (vidinfo.current_w, vidinfo.current_h)
  19.     window = pygame.display.set_mode(vidsize, pygame.FULLSCREEN)
  20. else:
  21.     vidsize = (640,480)
  22.     window = pygame.display.set_mode(vidsize)
  23. pygame.display.set_caption('KNova Test Window')
  24. screen = pygame.display.get_surface()
  25. background = pygame.Surface((screen.get_width(), screen.get_height()))
  26.  
  27. #colors
  28. WHITE = (255,255,255)
  29. BLUE = (0,0,150)
  30. GREEN = (0,150,0)
  31.  
  32. #text
  33. def drawText (text, color, xloc, yloc, size):
  34.     fontObj = pygame.font.Font('freesansbold.ttf', size)
  35.     textSurface = fontObj.render(text, True, color)
  36.     textRectObj = textSurface.get_rect()
  37.     textRectObj.center = (xloc, yloc)
  38.     return textSurface, textRectObj
  39.  
  40. ####################################################
  41. #Sprite Class for the Ship Image
  42.  
  43. class Ship(pygame.sprite.Sprite):
  44.     image = pygame.image.load("./resources/ship.png")
  45.     image = image.convert()
  46.    
  47.     #initialization function
  48.     def __init__(self, position=(100,100)):
  49.         pygame.sprite.Sprite.__init__(self,self.groups)
  50.         self.pos = position
  51.         self.orig_image = Ship.image
  52.         self.image = self.orig_image
  53.         self.rect = self.image.get_rect()
  54.         self.rect.center = self.pos
  55.         self.angle = 0
  56.         self.vx, self.vy, self.speed = 0, 0, 0
  57.         self.maxvel = 4
  58.         self.moving = 0
  59.        
  60.     #move function
  61.     def move(self, newpos):
  62.         oldx, oldy = self.pos
  63.         dx, dy = newpos
  64.         self.pos = (oldx - dx, oldy - dy)
  65.         self.rect.center = self.pos
  66.  
  67.     #new Move function
  68.     #def nMove(self
  69.        
  70.     #update function which will replace both move and rotate
  71.     def update(self):
  72.    
  73.         #handle rotations
  74.         if self.angle >= 360:
  75.             self.angle = 0
  76.         if self.angle <= -360:
  77.             self.angle = 0
  78.         loc = self.rect.center
  79.         self.image = pygame.transform.rotate(self.orig_image, self.angle)
  80.         self.rect = self.image.get_rect()
  81.         self.rect.center = loc
  82.        
  83.         #handle 2D movement
  84.         if self.moving: self.velocity(self.speed)
  85.         self.move((self.vx, self.vy))
  86.  
  87.        
  88.         #boundaries
  89.         if self.pos[0] > vidsize[0]:
  90.             #right
  91.             self.pos = (vidsize[0],self.pos[1])
  92.             self.vx = -self.vx
  93.            
  94.         if self.pos[0] < 0:
  95.             #left
  96.             self.pos = (0,self.pos[1])
  97.             self.vx = -self.vx
  98.         if self.pos[1] > vidsize[1]:
  99.             #bottom
  100.             self.pos = (self.pos[0],vidsize[1])
  101.             self.vy = -self.vy
  102.         if self.pos[1] < 0:
  103.             #top
  104.             self.pos = (self.pos[0],0)
  105.             self.vy = -self.vy
  106.    
  107.     #update velocity
  108.     def velocity(self, speed):
  109.         self.vx += math.sin(math.radians(self.angle)) * speed
  110.         self.vy += math.cos(math.radians(self.angle)) * speed
  111.        
  112.         magnitude = math.sqrt(self.vx*self.vx + self.vy*self.vy)
  113.         if magnitude > self.maxvel:
  114.             self.vx *= 4/magnitude
  115.             self.vy *= 4/magnitude
  116.         if self.speed >= self.maxvel:
  117.             self.speed = self.maxvel
  118.         if self.speed <= -self.maxvel:
  119.             self.speed = -self.maxvel
  120.  
  121. ####################################################
  122. #Asteroid Class
  123.  
  124. class Asteroid(pygame.sprite.Sprite):
  125.     image = pygame.image.load('./resources/asteroid.png')
  126.     image = image.convert()
  127.    
  128.     #initialize
  129.     def __init__(self, position):
  130.         pygame.sprite.Sprite.__init__(self,self.groups)
  131.         self.orig_image = Asteroid.image
  132.         self.image = self.orig_image
  133.         self.angle = random.randint(0,359)
  134.         self.speed = 1
  135.         self.pos = position
  136.         self.rect = self.image.get_rect()
  137.         self.rect.center = self.pos
  138.        
  139.     def move(self):
  140.         dx = math.cos(math.radians(self.angle)) * self.speed
  141.         dy = math.sin(math.radians(self.angle)) * self.speed
  142.         oldx,oldy = self.pos
  143.         self.pos = (oldx+dx, oldy+dy)
  144.         self.rect.center = self.pos
  145.        
  146.     def update(self):
  147.    
  148.         #handle rotations
  149.         if self.angle >= 360:
  150.             self.angle = 0
  151.         if self.angle <= -360:
  152.             self.angle = 0
  153.         loc = self.rect.center
  154.         self.image = pygame.transform.rotate(self.orig_image, self.angle)
  155.         self.rect = self.image.get_rect()
  156.         self.rect.center = loc
  157.        
  158.         #Move it
  159.         self.move()
  160.        
  161.        
  162. ####################################################
  163.  
  164. #sprite group update
  165. def spriteUpdate(group, screen, background):
  166.     group.clear(screen, background)
  167.     group.update()
  168.     group.draw(screen)
  169.  
  170.  
  171. #get keyboard events
  172. def pyin(events):
  173.     for event in events:
  174.         if event.type == QUIT:
  175.             sys.exit(0)
  176.         if event.type == KEYDOWN:
  177.             key = pygame.key.get_pressed()
  178.             if (key[pygame.K_ESCAPE]):
  179.                 sys.exit(0)
  180.                
  181.             if (key[K_UP]):
  182.                 newShip.speed += 1
  183.                 newShip.moving = 1
  184.  
  185.             if (key[K_DOWN]):
  186.                 newShip.speed -= 1
  187.                 newShip.moving = 1
  188.  
  189.             if (key[K_LEFT]):
  190.                 newShip.angle += 4
  191.                
  192.             if (key[K_RIGHT]):
  193.                 newShip.angle -= 4
  194.  
  195.         if event.type == KEYUP:
  196.             if event.key == pygame.K_UP:
  197.                 newShip.moving = 0
  198.             if event.key == pygame.K_DOWN:
  199.                 newShip.moving = 0
  200.  
  201.  
  202.        
  203. spriteGroup = pygame.sprite.Group()
  204. Ship.groups, Asteroid.groups = (spriteGroup,)*2
  205. newShip = Ship()
  206. newAsteroid = Asteroid((200,200))
  207. asteroids = {}
  208.  
  209. for z in range(3):
  210.     asteroids[z] = Asteroid((random.randint(0,400), random.randint(0,400)))
  211.  
  212. clock = pygame.time.Clock()
  213.  
  214.  
  215. while True:
  216.     #clock
  217.     clock.tick(60)
  218.    
  219.     #input detection / handling
  220.     pyin(pygame.event.get())
  221.    
  222.     #graphics update
  223.     pygame.display.update()
  224.     spriteUpdate(spriteGroup, screen, background)
  225.     #spriteUpdate(asteroidGroup, screen, background)
  226.  
  227.     for x in asteroids:
  228.         asteroids[x].move()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement