from __future__ import division from pygame import * from math import * init() WIDTH = 1024 HEIGHT = 700 screen = display.set_mode((WIDTH,HEIGHT)) thrust = 2 def sind(degrees): return sin(degrees / (180/pi)) def cosd(degrees): return cos(degrees / (180/pi)) class Player: def __init__(self): self.sprite = image.load("tank.png") self.upimage = self.sprite self.rect = self.sprite.get_rect() self.rect.centerx = WIDTH/2 self.rect.centery = HEIGHT/2 self.vx = 0 self.vy = 0 self.angle = 0 self.turn = 0 def apply_force(self): fy = sind(self.angle) * thrust self.vy -= fy fx = cosd(self.angle) * thrust self.vx += fx def update_and_display(self): self.rect.centerx += self.vx self.rect.centery += self.vy self.angle += self.turn # Screen wrap, shorter way self.rect.centerx = self.rect.centerx % WIDTH self.rect.centery = self.rect.centery % HEIGHT self.sprite = transform.rotate(self.upimage, self.angle - 90) screen.blit(self.sprite, self.rect) class rock: def __init__(self, px, py): self.sprite = image.load("rock.jpg") self.rect = self.sprite.get_rect() self.rect.centerx = px self.rect.centery = py def display(self): screen.blit(self.sprite, self.rect) p = Player() #rocks = [rock(x, y) for x,y in [(300, 300), (100, 500), (600, 100)]] # Main Loop while True: # Event processing (keys) for e in event.get(): if e.type == KEYDOWN: if e.key == K_RIGHT or e.key == K_d: # Start turning p.turn = -1 if e.key == K_LEFT or e.key == K_a: # Start turning the other direction p.turn = 1 if e.key == K_UP or e.key == K_w: p.apply_force() if e.type == KEYUP: if e.key in [K_RIGHT, K_LEFT, K_d, K_a]: # Stop turning p.turn = 0 if e.type == QUIT: from sys import exit exit() # Update positions and display screen.fill((255, 255, 255)) # for r in rocks: # r.display() p.update_and_display() display.flip()