Example #1
0
class Game:

    def __init__(self):
        self.bump_audio = BUMP_AUDIO
        self.over_img = OVER_IMG
        self.init_game()

    def init_game(self):
        # 游戏结束
        self.over = False
        # 创建滚动地图对象
        self.bg = RollBackground()
        # 创建恐龙对象
        self.dinosaur = Dinosaur()
        # 创建障碍物组合
        self.obstacles = ObstacleGroup()

    def process_event(self):
        for event in pygame.event.get():
            if event.type == QUIT:
                sys.exit(0)
            elif event.type == KEYDOWN and event.key == K_SPACE:
                if self.over:
                    self.init_game()
                else:
                    self.dinosaur.jump()

    def start(self):
        while True:
            self.process_event()

            if not self.over:
                self.update_window()
                if self.dinosaur.collide(self.obstacles):
                    self.over = True
                    self.game_over()
            self.dinosaur.show_score()

            pygame.display.update()
            set_fps(30)

    def update_window(self):
        self.bg.update()
        self.dinosaur.update()
        self.obstacles.update()

    def game_over(self):
        self.bump_audio.play()
        x = (SCREEN_WIDTH - self.over_img.get_width()) // 2
        y = (SCREEN_HEIGHT - self.over_img.get_height()) // 2
        SCREEN.blit(self.over_img, (x, y))
Example #2
0
class Game(object):

    def __init__(self):
        self.score = 0
        self.cont_enemies_x_level = 0
        self.level = 0
        self.over = False
        self.pause = False
        self.messages = []
        self.sprites_list = pygame.sprite.Group()
        self.walls_list = pygame.sprite.Group()
        self.enemies_list = pygame.sprite.Group()
        self.define_borders()
        self.grown = Grown()
        self.sprites_list.add(self.grown.objects_list)
        self.dino = Dinosaur()
        self.dino.walls = self.walls_list
        self.sprites_list.add(self.dino)
        self.last_timestamp = time.time()
        self.next_level_timestamp = time.time()

    def define_borders(self):
        # BORDER LEFT
        wall = Wall(0, 0, 2, SCREEN_Y_GAME)
        self.walls_list.add(wall)
        self.sprites_list.add(wall)

        # BORDER TOP
        wall = Wall(2, 0, SCREEN_X_GAME, 2)
        self.walls_list.add(wall)
        self.sprites_list.add(wall)

        # BORDER RIGHT
        wall = Wall(SCREEN_X_GAME, 0, 2, SCREEN_Y_GAME)
        self.walls_list.add(wall)
        self.sprites_list.add(wall)

        # BORDER BOTTOM
        wall = Wall(0, SCREEN_Y_GAME - 2, SCREEN_X_GAME, 2)
        self.walls_list.add(wall)
        self.sprites_list.add(wall)

    def event_handler(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                return True

            if event.type == pygame.KEYDOWN:
                if self.over:
                    self.reset_game()
                if event.key == pygame.K_p:
                    self.pause = not self.pause
                if not self.pause:
                    if event.key == pygame.K_UP:
                        self.dino.jump()
                    if event.key == pygame.K_DOWN:
                        self.dino.stand_down()

            if event.type == pygame.KEYUP:
                if not self.pause:
                    if event.key == pygame.K_DOWN:
                        self.dino.stand_up()

        return False

    def run(self):
        if not self.over:
            self.sprites_list.update()
            self.check_level()
            if self.pause:
                self.scroll_scene(0)
            else:
                self.scroll_scene(SPEED[self.level])
                self.increment_score()
                self.calculate_next_enemy()
                self.check_dino_impacted()

    def pause_game(self, screen):
        font = pygame.font.SysFont("serif", 25)
        text = font.render("Pause", True, BLACK)
        center_x = (SCREEN_X_GAME // 2) - (text.get_width() // 2)
        center_y = (SCREEN_Y_GAME // 2) - (text.get_height() // 2)
        screen.blit(text, [center_x, center_y])

        self.last_timestamp = time.time()

    def reset_game(self):
        self.score = 0
        self.cont_enemies_x_level = 0
        self.over = False
        self.level = 0
        self.last_timestamp = time.time()
        self.enemies_list.empty()
        sprites_list_temp = pygame.sprite.Group()
        sprites_list_temp.add(enemy for enemy in self.sprites_list if enemy.__module__ != 'enemy' and enemy.__module__ != 'dinosaur')
        self.sprites_list = sprites_list_temp
        self.dino = Dinosaur()
        self.dino.walls = self.walls_list
        self.sprites_list.add(self.dino)

    def check_level_old(self):
        """ deprecated. Not used """
        next_level = int((self.score // SCORE_X_LEVEL))
        self.level = next_level if next_level <= len(SPEED) - 1 else len(SPEED) - 1

    def check_level(self):
        if self.cont_enemies_x_level > ENEMIES_X_LEVEL[self.level]:
            next_level = self.level + 1
            if next_level <= len(SPEED) - 1:
                self.level = next_level
                self.cont_enemies_x_level = 0
                self.next_level_timestamp = time.time()

    def check_dino_impacted(self):
        if self.dino.impacted:
            self.over = True

    def log(self, message):
        """ Only for development propose """
        self.messages.append(message)

    def increment_score(self):
        tot_enemies = len(self.enemies_list)
        tmp_enemies_list = pygame.sprite.Group()
        tmp_enemies_list.add(enemy for enemy in self.enemies_list if not enemy.removable)
        num_enemies = len(tmp_enemies_list)
        self.enemies_list = tmp_enemies_list
        self.score += (tot_enemies - num_enemies)
        self.cont_enemies_x_level += (tot_enemies - num_enemies)

    def add_enemy_to_lists(self, enemy):
        self.enemies_list.add(enemy)
        self.sprites_list.add(enemy)
        self.dino.enemies_list.add(enemy)
        self.grown.objects_list.add(enemy)

    def calculate_next_enemy(self):
        wait = random.uniform(RANGE_TIME_NEXT_ENEMY[self.level][0], RANGE_TIME_NEXT_ENEMY[self.level][1])
        if time.time() - self.last_timestamp > wait:
            self.last_timestamp = time.time()
            result = random.choices(range(len(TYPE_ENEMY)), WEIGHTS_ENEMY[self.level])
            self.create_enemy(TYPE_ENEMY[result[0]])

    def create_enemy(self, enemy_type):
        self.add_enemy_to_lists(Enemy(enemy_type['x'], enemy_type['y'], enemy_type['w'], enemy_type['h']))

    def scroll_scene(self, scroll_x):
        for element in self.grown.objects_list:
            element.scroll_x = scroll_x

    def display_frame(self, screen):
        screen.fill(WHITE)
        self.display_score(screen)
        self.display_log(screen)
        self.display_level(screen)

        if self.over:
            self.display_game_over(screen)

        if self.pause:
            self.pause_game(screen)

        self.sprites_list.draw(screen)
        pygame.display.flip()

    def display_game_over(self, screen):
        font = pygame.font.SysFont("serif", 25)
        text = font.render("Game Over", True, BLACK)
        center_x = (SCREEN_X_GAME // 2) - (text.get_width() // 2)
        center_y = (SCREEN_Y_GAME // 2) - (text.get_height() // 2)
        screen.blit(text, [center_x, center_y])

    def display_score(self, screen):
        font = pygame.font.SysFont("serif", 25)
        text = font.render("Score: " + str(int(self.score)), True, BLACK)
        x = SCREEN_X_GAME - text.get_width() - 20
        screen.blit(text, [x, 10])

    def display_changes(self, screen):
        """ Only for development purpose """
        font = pygame.font.SysFont("serif", 25)
        text1 = font.render("Change X: " + str(self.dino.change_x), True, BLACK)
        x = 10
        screen.blit(text1, [x, 10])
        text2 = font.render("Change Y: " + str(self.dino.change_y), True, BLACK)
        x = text1.get_width() + 20
        screen.blit(text2, [x, 10])

    def display_cords(self, screen):
        """ Only for development purpose """
        font = pygame.font.SysFont("serif", 25)
        text1 = font.render("RECT X: " + str(self.dino.rect.x), True, BLACK)
        x = 10
        screen.blit(text1, [x, 40])
        text2 = font.render("RECT Y: " + str(self.dino.rect.y), True, BLACK)
        x = text1.get_width() + 20
        screen.blit(text2, [x, 40])

    def display_level(self, screen):
        if time.time() - self.next_level_timestamp < 0.5 or (time.time() - self.next_level_timestamp > 1 and time.time() - self.next_level_timestamp < 1.5):
            color = WHITE
        else:
            color = BLACK
        font = pygame.font.SysFont("serif", 25)
        txt_level = font.render("Level: ", True, BLACK)
        num_level = font.render(str(self.level + 1), True, color)
        screen.blit(txt_level, [20, 10])
        screen.blit(num_level, [20 + txt_level.get_width(), 10])

    def display_log(self, screen):
        font = pygame.font.SysFont("serif", 10)
        y = 0
        for message in reversed(self.messages):
            text = font.render(message, True, BLACK)
            x = SCREEN_X_GAME + 10
            screen.blit(text, [x, y])
            y += 12
Example #3
0
def main():
    # 初始化
    pygame.init()
    screen = pygame.display.set_mode((WIDTH, HEIGHT))
    pygame.display.set_caption("Dinosaur Game Race")
    clock = pygame.time.Clock()
    # 得分
    score = 0
    # 加载一些素材
    ##	jump_sound = pygame.mixer.Sound("./music/jump.wav")
    ##	jump_sound.set_volume(6)
    ##	die_sound = pygame.mixer.Sound("./music/die.wav")
    ##	die_sound.set_volume(6)
    ##	pygame.mixer.init()
    ##	pygame.mixer.music.load("./music/bg_music.mp3")
    ##	pygame.mixer.music.set_volume(0.6)
    ##	pygame.mixer.music.play(-1)
    font = pygame.font.Font('/Users/wanyiyang/Desktop/pygame/simkai.ttf', 20)
    # 实例化
    dinosaur = Dinosaur(WIDTH, HEIGHT)
    scene = Scene(WIDTH, HEIGHT)
    plants = pygame.sprite.Group()
    pteras = pygame.sprite.Group()
    # 产生障碍物事件
    GenPlantEvent = pygame.constants.USEREVENT + 0
    pygame.time.set_timer(GenPlantEvent, 4500)
    GenPteraEvent = pygame.constants.USEREVENT + 1
    pygame.time.set_timer(GenPteraEvent, 15000)
    # 游戏是否结束了
    running = True
    # 是否可以产生障碍物flag
    flag_plant = False
    flag_ptera = False
    t0 = time.time()
    # 主循环
    while running:
        for event in pygame.event.get():
            if event.type == QUIT:
                sys.exit()
                pygame.quit()
            if event.type == GenPlantEvent:
                flag_plant = True
            if event.type == GenPteraEvent:
                if score > 50:
                    flag_ptera = True
        key_pressed = pygame.key.get_pressed()
        if key_pressed[pygame.K_SPACE]:
            dinosaur.is_jumping = True


##			jump_sound.play()
        screen.fill(BACKGROUND)
        time_passed = time.time() - t0
        t0 = time.time()
        # 场景
        scene.move()
        scene.draw(screen)
        # 小恐龙
        dinosaur.is_running = True
        if dinosaur.is_jumping:
            dinosaur.be_afraid()
            dinosaur.jump(time_passed)
        dinosaur.draw(screen)
        # 障碍物-植物
        if random.random() < sigmoid(score) and flag_plant:
            plant = Plant(WIDTH, HEIGHT)
            plants.add(plant)
            flag_plant = False
        for plant in plants:
            plant.move()
            if dinosaur.rect.left > plant.rect.right and not plant.added_score:
                score += 1
                plant.added_score = True
            if plant.rect.right < 0:
                plants.remove(plant)
                continue
            plant.draw(screen)
        # 障碍物-飞龙
        if random.random() < sigmoid(score) and flag_ptera:
            if len(pteras) > 1:
                continue
            ptera = Ptera(WIDTH, HEIGHT)
            pteras.add(ptera)
            flag_ptera = False
        for ptera in pteras:
            ptera.move()
            if dinosaur.rect.left > ptera.rect.right and not ptera.added_score:
                score += 5
                ptera.added_score = True
            if ptera.rect.right < 0:
                pteras.remove(ptera)
                continue
            ptera.draw(screen)
        # 碰撞检测
        if pygame.sprite.spritecollide(dinosaur, plants,
                                       False) or pygame.sprite.spritecollide(
                                           dinosaur, pteras, False):
            ##			die_sound.play()
            running = False
        # 显示得分
        score_text = font.render("Score: " + str(score), 1, (0, 0, 0))
        screen.blit(score_text, [10, 10])
        pygame.display.flip()
        clock.tick(60)
    res = show_gameover(screen)
    return res
Example #4
0


white = 255,255,255
while True: #gameLoop it draws the frames of the game 
    t = pygame.time.get_ticks() #Get current time
    deltaTime = (t-lastFrame)/1000.0 #Find difference in time and then convert it to seconds
    lastFrame = t #set lastFrame as the current time for next frame.

    for event in pygame.event.get(): #Check for events
        if event.type == pygame.QUIT:
            pygame.quit() #quits
            quit()
        if event.type == pygame.KEYDOWN: #If user uses the keyboard
            if event.key == pygame.K_SPACE: #If that key is space
                dinosaur.jump() #Make dinosaur jump


    gameDisplay.fill(black)

    dinosaur.update(deltaTime)
    dinosaur.draw(gameDisplay)

    for obs in obstacles:
        obs.update(deltaTime, VELOCITY)
        obs.draw(gameDisplay)
        if(obs.checkOver()):
            lastObstacle += MINGAP+(MAXGAP-MINGAP)*random.random()
            obs.x = lastObstacle

    lastObstacle -= VELOCITY*deltaTime
class Game:
    pygame.init()
    clock = pygame.time.Clock()
    width = 1024
    height = 500
    black = (0, 0, 0)
    white = (255, 255, 255)
    display = pygame.display.set_mode((width, height))
    gameExit = False
    cactus = pygame.image.load('img/cactus.png').convert_alpha()
    pygame.display.set_caption("Teachable Dinosaur")
    cactus_rect = cactus.get_rect()
    cactuses = []
    counter = 0
    camera = cv2.VideoCapture(0)
    exit = False
    score = 0
    cac = False

    def __init__(self):
        from dinosaur import Dinosaur
        self.dino = Dinosaur()
        self.model = train.load_model()
        self.model.load_weights('weights.h5')
        self.intro()

    def intro(self):
        intro = True
        while intro:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    quit()
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_SPACE:
                        self.gameloop()
            self.display.fill(self.white)
            largeText = pygame.font.Font('freesansbold.ttf', 100)
            textSurf = largeText.render("Press SPACE to play", True,
                                        self.black)
            textRect = textSurf.get_rect()
            textRect.center = ((self.width / 2), (self.height / 2))
            self.display.blit(textSurf, textRect)
            pygame.display.update()
            self.clock.tick(30)

    def gameloop(self):

        while not self.gameExit:
            self.display.fill(self.white)
            pygame.draw.line(self.display, self.black, (0, self.height - 50),
                             (self.width, self.height - 50))
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    self.gameExit = True
            if self.counter % (random.randrange(100, 110)) == 0:
                self.cac = True
                from cactus import Cactus
                self.cactuses.append(Cactus())
            for c in self.cactuses:
                c.showCactus()
                c.hitbox = [c.rect.x, c.rect.y + 5, 41, 45]
                c.rect.x -= 13
                if c.rect.x <= -c.rect.width:
                    self.cactuses = self.cactuses[1:]
            pic = self.take_photo()
            result = self.predict(pic)
            if result == 0:
                pass
            else:
                self.dino.jump()
            self.dino.updateVariables()
            self.score += 1
            text = pygame.font.Font('freesansbold.ttf', 20)
            textSurf = text.render("Score: " + str(self.score), True,
                                   self.black)
            self.display.blit(textSurf, [10, 10])
            self.dino.show()
            self.dinoHitbox = pygame.Rect(self.dino.hitbox)
            pygame.display.update()
            if self.dino.var > 50:
                self.dino.var -= 10
            if self.collision() and self.cac:
                self.gameExit = True
            self.clock.tick(30)
            self.counter += 1
        pygame.quit()
        self.camera.release()
        cv2.destroyAllWindows()
        quit()

    def take_photo(self):
        cv2.resizeWindow('image', 300, 350)
        return_value, image = self.camera.read()
        cv2.imshow('image', image)
        im = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
        im = Image.fromarray(im)
        im = im.resize((100, 100))
        im = np.array(im)
        im = np.resize(im, (1, 100, 100, 3))
        im = (im.astype(float) - 128) / 128
        return im

    def predict(self, pic):
        prob = self.model.predict(pic)
        result = np.argmax(prob)
        return result

    def collision(self):
        for cactus in self.cactuses:
            if self.dinoHitbox.colliderect(pygame.Rect(cactus.hitbox)):
                return True
            return False