diff --git a/supercat.py b/supercat.py deleted file mode 100644 index 50707ff..0000000 --- a/supercat.py +++ /dev/null @@ -1,483 +0,0 @@ -import os -import sys -import pygame -import random -from pygame import * - -pygame.init() - -screen_size_display = (width_screen, height_screen) = (600, 150) -FPS = 60 -gravity = 0.6 -bg_color = (119, 198, 225) -highest_scores = 0 - -screen_layout_display = pygame.display.set_mode(screen_size_display) -time_clock = pygame.time.Clock() -pygame.display.set_caption("Super Cat ") - -def load_image( - name, - sx=-1, - sy=-1, - colorkey=None, - ): - - fullname = os.path.join('resources', name) - img = pygame.image.load(fullname) - if colorkey is not None: - if colorkey == -1: - colorkey = img.get_at((0, 0)) - img.set_colorkey(colorkey, RLEACCEL) - - if sx != -1 or sy != -1: - img = pygame.transform.scale(img, (sx, sy)) - - return (img, img.get_rect()) - -def load_sprite_sheet( - s_name, - namex, - namey, - scx = -1, - scy = -1, - c_key = None, - ): - fullname = os.path.join('resources', s_name) - sh = pygame.image.load(fullname) - sh = sh.convert() - - sh_rect = sh.get_rect() - - sprites = [] - - sx = sh_rect.width/ namex - sy = sh_rect.height/ namey - - for i in range(0, namey): - for j in range(0, namex): - rect = pygame.Rect((j*sx,i*sy,sx,sy)) - img = pygame.Surface(rect.size) - img = img.convert() - img.blit(sh,(0,0),rect) - - if c_key is not None: - if c_key == -1: - c_key = img.get_at((0, 0)) - img.set_colorkey(c_key, RLEACCEL) - - if scx != -1 or scy != -1: - img = pygame.transform.scale(img, (scx, scy)) - - sprites.append(img) - - sprite_rect = sprites[0].get_rect() - - return sprites,sprite_rect - -def gameover_display_message(rbtn_image, gmo_image): - rbtn_rect = rbtn_image.get_rect() - rbtn_rect.centerx = width_screen / 2 - rbtn_rect.top = height_screen * 0.52 - - gmo_rect = gmo_image.get_rect() - gmo_rect.centerx = width_screen / 2 - gmo_rect.centery = height_screen * 0.35 - - screen_layout_display.blit(rbtn_image, rbtn_rect) - screen_layout_display.blit(gmo_image, gmo_rect) - -def extractDigits(num): - if num > -1: - d = [] - i = 0 - while(num / 10 != 0): - d.append(num % 10) - num = int(num / 10) - - d.append(num % 10) - for i in range(len(d),5): - d.append(0) - d.reverse() - return d - -class Cat(): - def __init__(self, sx=-1, sy=-1): - self.imgs, self.rect = load_sprite_sheet('cat.png', 5, 1, sx, sy, -1) - self.imgs1, self.rect1 = load_sprite_sheet('cat_ducking.png', 2, 1, 59, sy, -1) - self.rect.bottom = int(0.98 * height_screen) - self.rect.left = width_screen / 15 - self.image = self.imgs[0] - self.index = 0 - self.counter = 0 - self.score = 0 - self.jumping = False - self.dead = False - self.ducking = False - self.blinking = False - self.movement = [0,0] - self.jumpSpeed = 11.5 - - self.stand_position_width = self.rect.width - self.duck_position_width = self.rect1.width - - def draw(self): - screen_layout_display.blit(self.image, self.rect) - - def checkbounds(self): - if self.rect.bottom > int(0.98 * height_screen): - self.rect.bottom = int(0.98 * height_screen) - self.jumping = False - - def update(self): - if self.jumping: - self.movement[1] = self.movement[1] + gravity - - if self.jumping: - self.index = 0 - elif self.blinking: - if self.index == 0: - if self.counter % 400 == 399: - self.index = (self.index + 1)%2 - else: - if self.counter % 20 == 19: - self.index = (self.index + 1)%2 - - elif self.ducking: - if self.counter % 5 == 0: - self.index = (self.index + 1)%2 - else: - if self.counter % 5 == 0: - self.index = (self.index + 1)%2 + 2 - - if self.dead: - self.index = 4 - - if not self.ducking: - self.image = self.imgs[self.index] - self.rect.width = self.stand_position_width - else: - self.image = self.imgs1[(self.index) % 2] - self.rect.width = self.duck_position_width - - self.rect = self.rect.move(self.movement) - self.checkbounds() - - if not self.dead and self.counter % 7 == 6 and self.blinking == False: - self.score += 1 - - self.counter = (self.counter + 1) - -class Cactus(pygame.sprite.Sprite): - def __init__(self, speed=5, sx=-1, sy=-1): - pygame.sprite.Sprite.__init__(self,self.containers) - self.imgs, self.rect = load_sprite_sheet('cactus-small.png', 3, 1, sx, sy, -1) - self.rect.bottom = int(0.98 * height_screen) - self.rect.left = width_screen + self.rect.width - self.image = self.imgs[random.randrange(0, 3)] - self.movement = [-1*speed,0] - - def draw(self): - screen_layout_display.blit(self.image, self.rect) - - def update(self): - self.rect = self.rect.move(self.movement) - - if self.rect.right < 0: - self.kill() - -class birds(pygame.sprite.Sprite): - def __init__(self, speed=5, sx=-1, sy=-1): - pygame.sprite.Sprite.__init__(self,self.containers) - self.imgs, self.rect = load_sprite_sheet('birds.png', 2, 1, sx, sy, -1) - self.birds_height = [height_screen * 0.82, height_screen * 0.65] - self.rect.centery = self.birds_height[random.randrange(0, 2)] - self.rect.left = width_screen + self.rect.width - self.image = self.imgs[0] - self.movement = [-1*speed,0] - self.index = 0 - self.counter = 0 - - def draw(self): - screen_layout_display.blit(self.image, self.rect) - - def update(self): - if self.counter % 10 == 0: - self.index = (self.index+1)%2 - self.image = self.imgs[self.index] - self.rect = self.rect.move(self.movement) - self.counter = (self.counter + 1) - if self.rect.right < 0: - self.kill() - - -class Ground(): - def __init__(self,speed=-5): - self.image,self.rect = load_image('ground.png',-1,-1,-1) - self.image1,self.rect1 = load_image('ground.png',-1,-1,-1) - self.rect.bottom = height_screen - self.rect1.bottom = height_screen - self.rect1.left = self.rect.right - self.speed = speed - - def draw(self): - screen_layout_display.blit(self.image, self.rect) - screen_layout_display.blit(self.image1, self.rect1) - - def update(self): - self.rect.left += self.speed - self.rect1.left += self.speed - - if self.rect.right < 0: - self.rect.left = self.rect1.right - - if self.rect1.right < 0: - self.rect1.left = self.rect.right - -class Cloud(pygame.sprite.Sprite): - def __init__(self,x,y): - pygame.sprite.Sprite.__init__(self,self.containers) - self.image,self.rect = load_image('cloud.png',int(90*30/42),30,-1) - self.speed = 1 - self.rect.left = x - self.rect.top = y - self.movement = [-1*self.speed,0] - - def draw(self): - screen_layout_display.blit(self.image, self.rect) - - def update(self): - self.rect = self.rect.move(self.movement) - if self.rect.right < 0: - self.kill() - -class Scoreboard(): - def __init__(self,x=-1,y=-1): - self.score = 0 - self.scre_img, self.screrect = load_sprite_sheet('numbers.png', 12, 1, 11, int(11 * 6 / 5), -1) - self.image = pygame.Surface((55,int(11*6/5))) - self.rect = self.image.get_rect() - if x == -1: - self.rect.left = width_screen * 0.89 - else: - self.rect.left = x - if y == -1: - self.rect.top = height_screen * 0.1 - else: - self.rect.top = y - - def draw(self): - screen_layout_display.blit(self.image, self.rect) - - def update(self,score): - score_digits = extractDigits(score) - self.image.fill(bg_color) - for s in score_digits: - self.image.blit(self.scre_img[s], self.screrect) - self.screrect.left += self.screrect.width - self.screrect.left = 0 - - -def introduction_screen(): - ado_cat = Cat(44,47) - ado_cat.blinking = True - starting_game = False - - t_ground,t_ground_rect = load_sprite_sheet('ground.png',15,1,-1,-1,-1) - t_ground_rect.left = width_screen / 20 - t_ground_rect.bottom = height_screen - - logo,l_rect = load_image('logo.png',300,140,None) - l_rect.centerx = width_screen * 0.5 - l_rect.centery = height_screen * 0.5 - while not starting_game: - if pygame.display.get_surface() == None: - print("Couldn't load display surface") - return True - else: - for event in pygame.event.get(): - if event.type == pygame.QUIT: - return True - if event.type == pygame.KEYDOWN: - if event.key == pygame.K_SPACE or event.key == pygame.K_UP: - ado_cat.jumping = True - ado_cat.blinking = False - ado_cat.movement[1] = -1*ado_cat.jumpSpeed - - ado_cat.update() - - if pygame.display.get_surface() != None: - screen_layout_display.fill(bg_color) - screen_layout_display.blit(t_ground[0], t_ground_rect) - if ado_cat.blinking: - screen_layout_display.blit(logo, l_rect) - ado_cat.draw() - - pygame.display.update() - - time_clock.tick(FPS) - if ado_cat.jumping == False and ado_cat.blinking == False: - starting_game = True - -def gameplay(): - global highest_scores - gp = 4 - s_Menu = False - g_Over = False - g_exit = False - gamer_Cat = Cat(44,47) - new_grnd = Ground(-1*gp) - score_boards = Scoreboard() - highScore = Scoreboard(width_screen * 0.78) - counter = 0 - - cactusan = pygame.sprite.Group() - smallBird = pygame.sprite.Group() - skyClouds = pygame.sprite.Group() - last_end_obs = pygame.sprite.Group() - - Cactus.containers = cactusan - birds.containers = smallBird - Cloud.containers = skyClouds - - rbtn_image,rbtn_rect = load_image('replay_button.png',180,60,-1) - gmo_image,gmo_rect = load_image('game_over.png',190,25,-1) - - t_images,t_rect = load_sprite_sheet('numbers.png',12,1,11,int(11*6/5),-1) - ado_image = pygame.Surface((22,int(11*6/5))) - ado_rect = ado_image.get_rect() - ado_image.fill(bg_color) - ado_image.blit(t_images[10],t_rect) - t_rect.left += t_rect.width - ado_image.blit(t_images[11],t_rect) - ado_rect.top = height_screen * 0.1 - ado_rect.left = width_screen * 0.73 - - while not g_exit: - while s_Menu: - pass - while not g_Over: - if pygame.display.get_surface() == None: - print("Couldn't load display surface") - g_exit = True - g_Over = True - else: - for event in pygame.event.get(): - if event.type == pygame.QUIT: - g_exit = True - g_Over = True - - if event.type == pygame.KEYDOWN: - if event.key == pygame.K_SPACE or event.key == pygame.K_UP: - if gamer_Cat.rect.bottom == int(0.98 * height_screen): - gamer_Cat.jumping = True - gamer_Cat.movement[1] = -1*gamer_Cat.jumpSpeed - - if event.key == pygame.K_DOWN: - if not (gamer_Cat.jumping and gamer_Cat.dead): - gamer_Cat.ducking = True - - if event.type == pygame.KEYUP: - if event.key == pygame.K_DOWN: - gamer_Cat.ducking = False - for c in cactusan: - c.movement[0] = -1*gp - if pygame.sprite.collide_mask(gamer_Cat,c): - gamer_Cat.dead = True - - for p in smallBird: - p.movement[0] = -1*gp - if pygame.sprite.collide_mask(gamer_Cat,p): - gamer_Cat.dead = True - - if len(cactusan) < 2: - if len(cactusan) == 0: - last_end_obs.empty() - last_end_obs.add(Cactus(gp,40,40)) - else: - for l in last_end_obs: - if l.rect.right < width_screen*0.7 and random.randrange(0, 50) == 10: - last_end_obs.empty() - last_end_obs.add(Cactus(gp, 40, 40)) - - if len(smallBird) == 0 and random.randrange(0,200) == 10 and counter > 500: - for l in last_end_obs: - if l.rect.right < width_screen*0.8: - last_end_obs.empty() - last_end_obs.add(birds(gp, 46, 40)) - - if len(skyClouds) < 5 and random.randrange(0,300) == 10: - Cloud(width_screen, random.randrange(int(height_screen / 5), int(height_screen / 2))) - - gamer_Cat.update() - cactusan.update() - smallBird.update() - skyClouds.update() - new_grnd.update() - score_boards.update(gamer_Cat.score) - highScore.update(highest_scores) - - if pygame.display.get_surface() != None: - screen_layout_display.fill(bg_color) - new_grnd.draw() - skyClouds.draw(screen_layout_display) - score_boards.draw() - if highest_scores != 0: - highScore.draw() - screen_layout_display.blit(ado_image, ado_rect) - cactusan.draw(screen_layout_display) - smallBird.draw(screen_layout_display) - gamer_Cat.draw() - - pygame.display.update() - time_clock.tick(FPS) - - if gamer_Cat.dead: - g_Over = True - if gamer_Cat.score > highest_scores: - highest_scores = gamer_Cat.score - - if counter%700 == 699: - new_grnd.speed -= 1 - gp += 1 - - counter = (counter + 1) - - if g_exit: - break - - while g_Over: - if pygame.display.get_surface() == None: - print("Couldn't load display surface") - g_exit = True - else: - for event in pygame.event.get(): - if event.type == pygame.QUIT: - g_exit = True - g_Over = False - if event.type == pygame.KEYDOWN: - if event.key == pygame.K_ESCAPE: - g_exit = True - g_Over = False - - if event.key == pygame.K_RETURN or event.key == pygame.K_SPACE : - g_Over = False - gameplay() - highScore.update(highest_scores) - if pygame.display.get_surface() != None: - gameover_display_message(rbtn_image, gmo_image) - if highest_scores != 0: - highScore.draw() - screen_layout_display.blit(ado_image, ado_rect) - pygame.display.update() - time_clock.tick(FPS) - - pygame.quit() - quit() - -def main(): - isGameQuit = introduction_screen() - if not isGameQuit: - gameplay() - -main()