diff --git a/.DS_Store b/.DS_Store index e5ef6eb..6543f45 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/game.py b/game.py index f4c8bb2..6a2ad16 100644 --- a/game.py +++ b/game.py @@ -1,6 +1,7 @@ import pygame import enum import random +import sys pygame.init() @@ -11,11 +12,19 @@ ROAD_RECT = (235,0,563,800) gameDisplay = pygame.display.set_mode((display_width, display_height)) -pygame.display.set_caption('A bit Racey') +pygame.display.set_caption('Race The 90s') # load images. carImage = pygame.image.load('images/car.png') +opponentCarImage = pygame.image.load("images/opp.png") bgImage = pygame.image.load("images/road.png") +start_menu = pygame.image.load('images/start_menu.png') +game_over = pygame.image.load('images/game_over.png') +pause_menu = pygame.image.load('images/pause_menu.png') + +# load music +menu_select = pygame.mixer.Sound('sounds/menu_select.wav') +collide_sound = pygame.mixer.Sound('sounds/col.wav') class Player(pygame.sprite.Sprite): def __init__(self): @@ -28,29 +37,35 @@ def __init__(self): self.rect = self.image.get_rect() self.rect.x = self.x self.rect.y = self.y + self.boost = 2 def carPosition(self): gameDisplay.blit(carImage, (self.x, self.y)) + def collision(self): + pygame.mixer.Sound.play(collide_sound) + self.x_change = 0 + self.y_change = 0 + def press(self,key): if key == pygame.K_LEFT: - self.x_change = -10 + self.x_change = -self.boost elif key == pygame.K_RIGHT: - self.x_change = 10 + self.x_change = self.boost elif key == pygame.K_UP: - self.y_change = -10 + self.y_change = -self.boost elif key == pygame.K_DOWN: - self.y_change = 10 + self.y_change = self.boost def update(self): - if self.rect.x <= 234.5 and self.x_change == -10: + if self.rect.x <= 234.5 and self.x_change == -self.boost: self.x_change = 0 - elif self.rect.x >= 556 - car_width and self.x_change == 10: + elif self.rect.x >= 556 - car_width and self.x_change == self.boost: self.x_change = 0 - if self.rect.y <= 0 and self.y_change == -10: + if self.rect.y <= 0 and self.y_change == -self.boost: self.y_change = 0 - elif self.rect.y > display_height - car_height and self.y_change == 10: + elif self.rect.y > display_height - car_height and self.y_change == self.boost: self.y_change = 0 self.rect.x += self.x_change @@ -62,13 +77,49 @@ def reset(self,key): elif key == pygame.K_UP or key == pygame.K_DOWN: self.y_change =0 +class Health(pygame.sprite.Sprite): + def __init__(self): + pygame.font.init() + pygame.sprite.Sprite.__init__(self) + self.health = 100 + self.myfont = pygame.font.SysFont('Comic Sans MS', 30) + self.image = self.myfont.render("End Game", 1, (255,0,0)) + self.rect = self.image.get_rect() + self.rect.x = 50 + self.rect.y = 10 + + def dec_health(self): + self.health -= 1 + if self.health == 0: + return True + return False + + def update(self): + self.image = self.myfont.render('Health: ' + str(self.health), 1, (255,0,0)) + +class Score(pygame.sprite.Sprite): + def __init__(self): + pygame.font.init() + pygame.sprite.Sprite.__init__(self) + self.score = 0 + self.myfont = pygame.font.SysFont('Comic Sans MS', 30) + self.image = self.myfont.render("Score: 0", 1, (255,0,0)) + self.rect = self.image.get_rect() + self.rect.x = 650 + self.rect.y = 10 + + def inc_score(self): + self.score += 1 + + def update(self): + self.image = self.myfont.render('Score: ' + str(self.score), 1, (255,0,0)) + class OpponentCar(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.x = random.choice((300,400,500)) self.y = (-100) - self.image = carImage - #self.frame = 0 + self.image = opponentCarImage self.rect = self.image.get_rect() self.rect.x = self.x self.rect.y = self.y @@ -79,27 +130,101 @@ def update(self): self.rect.move_ip(0,self.speed) #self.frame = self.frame + 1 -def game_loop(): +def start_screen(): + pygame.event.clear() + gameDisplay.blit(start_menu, (0, 0)) + pygame.display.update() + pygame.mixer.music.load('sounds/excite_music.wav') + pygame.mixer.music.play(-1) - + while True: + event = pygame.event.wait() + if event.type == pygame.QUIT: + pygame.quit() + sys.exit() + elif event.type == pygame.KEYDOWN: + if event.key == pygame.K_RETURN: + pygame.mixer.music.stop() + pygame.mixer.Sound.play(menu_select) + game_loop() + elif event.key == pygame.K_ESCAPE: + pygame.quit() + sys.exit() + else: + continue +def gameover(score): + pygame.event.clear() + + myfont = pygame.font.SysFont('Comic Sans MS', 100) + img= myfont.render("Score "+str(score), 1, (255,238,41)) + rect = img.get_rect() + + gameDisplay.blit(game_over, (0, 0)) + gameDisplay.blit(img, (230, 300)) + pygame.display.update() + pygame.mixer.music.load('sounds/excite_music.wav') + pygame.mixer.music.play(-1) + + while True: + event = pygame.event.wait() + if event.type == pygame.QUIT: + pygame.quit() + sys.exit() + elif event.type == pygame.KEYDOWN: + if event.key == pygame.K_RETURN: + pygame.mixer.music.stop() + pygame.mixer.Sound.play(menu_select) + game_loop() + elif event.key == pygame.K_ESCAPE: + pygame.quit() + sys.exit() + else: + continue + + +def game_loop(): + pygame.mixer.music.load('sounds/game_music.wav') + pygame.mixer.music.play(-1) sprites = pygame.sprite.Group() player = Player() sprites.add(player) + health = Health() + sprites.add(health) + + score = Score() + sprites.add(score) + # Background scrolling variables. bgImage_y = display_height - bgImage.get_rect().height bgImage_dy = 10 + odd_dy = 500 clock = pygame.time.Clock() gameExit = False - + odds = 60 + + opps = pygame.sprite.Group() - for i in range(4): - opp = OpponentCar() - sprites.add(opp) - opps.add(opp) - while not gameExit: + + if odds == 0: + opp = OpponentCar() + sprites.add(opp) + opps.add(opp) + odds = 60 + else: + odds-=1 + + collide_opponent = pygame.sprite.spritecollideany(player, opps) + score.inc_score() + + if collide_opponent: + killed = health.dec_health() + if killed: + gameover(score.score) + player.collision() + for event in pygame.event.get(): # print(event) if event.type == pygame.QUIT: @@ -109,13 +234,16 @@ def game_loop(): if event.type == pygame.KEYUP: player.reset(event.key) - - # Scroll the background gameDisplay.fill((255,255,255)) - if bgImage_y == 0: - bgImage_y = display_height - bgImage.get_rect().height - bgImage_y = bgImage_y + bgImage_dy + if odd_dy > 0: + if bgImage_y == 0: + bgImage_y = display_height - bgImage.get_rect().height + bgImage_y = bgImage_y + bgImage_dy + odd_dy-=1 + else: + odd_dy = 500 + bgImage_dy+=3 #print(bgImage_y) bgImage_y = bgImage_y % (display_height- bgImage.get_rect().height) @@ -128,6 +256,6 @@ def game_loop(): pygame.display.update() clock.tick(60) -game_loop() +start_screen() pygame.quit() -quit() +quit() \ No newline at end of file diff --git a/images/city.jpg b/images/city.jpg new file mode 100755 index 0000000..d16daed Binary files /dev/null and b/images/city.jpg differ diff --git a/images/game_over.png b/images/game_over.png new file mode 100644 index 0000000..560b964 Binary files /dev/null and b/images/game_over.png differ diff --git a/images/opp.png b/images/opp.png new file mode 100644 index 0000000..21e257b Binary files /dev/null and b/images/opp.png differ diff --git a/images/pause_menu.png b/images/pause_menu.png new file mode 100755 index 0000000..036d711 Binary files /dev/null and b/images/pause_menu.png differ diff --git a/images/start_menu.png b/images/start_menu.png new file mode 100755 index 0000000..e6f94f9 Binary files /dev/null and b/images/start_menu.png differ diff --git a/sounds/col.wav b/sounds/col.wav new file mode 100644 index 0000000..54f5eb1 Binary files /dev/null and b/sounds/col.wav differ diff --git a/sounds/excite_music.wav b/sounds/excite_music.wav new file mode 100755 index 0000000..8c5b070 Binary files /dev/null and b/sounds/excite_music.wav differ diff --git a/sounds/game_music.wav b/sounds/game_music.wav new file mode 100755 index 0000000..f59f302 Binary files /dev/null and b/sounds/game_music.wav differ diff --git a/sounds/menu_select.wav b/sounds/menu_select.wav new file mode 100755 index 0000000..0ae70b6 Binary files /dev/null and b/sounds/menu_select.wav differ diff --git a/sounds/start_music.wav b/sounds/start_music.wav new file mode 100755 index 0000000..f2d5a15 Binary files /dev/null and b/sounds/start_music.wav differ diff --git a/sounds/ting.wav b/sounds/ting.wav new file mode 100755 index 0000000..556de63 Binary files /dev/null and b/sounds/ting.wav differ