Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pygame Test by KNovak
- import pygame, sys, os, math, random
- from pygame.locals import *
- pygame.init()
- pygame.key.set_repeat(1)
- fullscreen = False;
- #startup settings
- for arg in sys.argv:
- if arg == "-f":
- fullscreen = True
- #Video Display information
- vidinfo = pygame.display.Info()
- if fullscreen == True:
- vidsize = (vidinfo.current_w, vidinfo.current_h)
- window = pygame.display.set_mode(vidsize, pygame.FULLSCREEN)
- else:
- vidsize = (640,480)
- window = pygame.display.set_mode(vidsize)
- pygame.display.set_caption('KNova Test Window')
- screen = pygame.display.get_surface()
- background = pygame.Surface((screen.get_width(), screen.get_height()))
- #colors
- WHITE = (255,255,255)
- BLUE = (0,0,150)
- GREEN = (0,150,0)
- #text
- def drawText (text, color, xloc, yloc, size):
- fontObj = pygame.font.Font('freesansbold.ttf', size)
- textSurface = fontObj.render(text, True, color)
- textRectObj = textSurface.get_rect()
- textRectObj.center = (xloc, yloc)
- return textSurface, textRectObj
- ####################################################
- #Sprite Class for the Ship Image
- class Ship(pygame.sprite.Sprite):
- image = pygame.image.load("./resources/ship.png")
- image = image.convert()
- #initialization function
- def __init__(self, position=(100,100)):
- pygame.sprite.Sprite.__init__(self,self.groups)
- self.pos = position
- self.orig_image = Ship.image
- self.image = self.orig_image
- self.rect = self.image.get_rect()
- self.rect.center = self.pos
- self.angle = 0
- self.vx, self.vy, self.speed = 0, 0, 0
- self.maxvel = 4
- self.moving = 0
- #move function
- def move(self, newpos):
- oldx, oldy = self.pos
- dx, dy = newpos
- self.pos = (oldx - dx, oldy - dy)
- self.rect.center = self.pos
- #new Move function
- #def nMove(self
- #update function which will replace both move and rotate
- def update(self):
- #handle rotations
- if self.angle >= 360:
- self.angle = 0
- if self.angle <= -360:
- self.angle = 0
- loc = self.rect.center
- self.image = pygame.transform.rotate(self.orig_image, self.angle)
- self.rect = self.image.get_rect()
- self.rect.center = loc
- #handle 2D movement
- if self.moving: self.velocity(self.speed)
- self.move((self.vx, self.vy))
- #boundaries
- if self.pos[0] > vidsize[0]:
- #right
- self.pos = (vidsize[0],self.pos[1])
- self.vx = -self.vx
- if self.pos[0] < 0:
- #left
- self.pos = (0,self.pos[1])
- self.vx = -self.vx
- if self.pos[1] > vidsize[1]:
- #bottom
- self.pos = (self.pos[0],vidsize[1])
- self.vy = -self.vy
- if self.pos[1] < 0:
- #top
- self.pos = (self.pos[0],0)
- self.vy = -self.vy
- #update velocity
- def velocity(self, speed):
- self.vx += math.sin(math.radians(self.angle)) * speed
- self.vy += math.cos(math.radians(self.angle)) * speed
- magnitude = math.sqrt(self.vx*self.vx + self.vy*self.vy)
- if magnitude > self.maxvel:
- self.vx *= 4/magnitude
- self.vy *= 4/magnitude
- if self.speed >= self.maxvel:
- self.speed = self.maxvel
- if self.speed <= -self.maxvel:
- self.speed = -self.maxvel
- ####################################################
- #Asteroid Class
- class Asteroid(pygame.sprite.Sprite):
- image = pygame.image.load('./resources/asteroid.png')
- image = image.convert()
- #initialize
- def __init__(self, position):
- pygame.sprite.Sprite.__init__(self,self.groups)
- self.orig_image = Asteroid.image
- self.image = self.orig_image
- self.angle = random.randint(0,359)
- self.speed = 1
- self.pos = position
- self.rect = self.image.get_rect()
- self.rect.center = self.pos
- def move(self):
- dx = math.cos(math.radians(self.angle)) * self.speed
- dy = math.sin(math.radians(self.angle)) * self.speed
- oldx,oldy = self.pos
- self.pos = (oldx+dx, oldy+dy)
- self.rect.center = self.pos
- def update(self):
- #handle rotations
- if self.angle >= 360:
- self.angle = 0
- if self.angle <= -360:
- self.angle = 0
- loc = self.rect.center
- self.image = pygame.transform.rotate(self.orig_image, self.angle)
- self.rect = self.image.get_rect()
- self.rect.center = loc
- #Move it
- self.move()
- ####################################################
- #sprite group update
- def spriteUpdate(group, screen, background):
- group.clear(screen, background)
- group.update()
- group.draw(screen)
- #get keyboard events
- def pyin(events):
- for event in events:
- if event.type == QUIT:
- sys.exit(0)
- if event.type == KEYDOWN:
- key = pygame.key.get_pressed()
- if (key[pygame.K_ESCAPE]):
- sys.exit(0)
- if (key[K_UP]):
- newShip.speed += 1
- newShip.moving = 1
- if (key[K_DOWN]):
- newShip.speed -= 1
- newShip.moving = 1
- if (key[K_LEFT]):
- newShip.angle += 4
- if (key[K_RIGHT]):
- newShip.angle -= 4
- if event.type == KEYUP:
- if event.key == pygame.K_UP:
- newShip.moving = 0
- if event.key == pygame.K_DOWN:
- newShip.moving = 0
- spriteGroup = pygame.sprite.Group()
- Ship.groups, Asteroid.groups = (spriteGroup,)*2
- newShip = Ship()
- newAsteroid = Asteroid((200,200))
- asteroids = {}
- for z in range(3):
- asteroids[z] = Asteroid((random.randint(0,400), random.randint(0,400)))
- clock = pygame.time.Clock()
- while True:
- #clock
- clock.tick(60)
- #input detection / handling
- pyin(pygame.event.get())
- #graphics update
- pygame.display.update()
- spriteUpdate(spriteGroup, screen, background)
- #spriteUpdate(asteroidGroup, screen, background)
- for x in asteroids:
- asteroids[x].move()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement