def update(self): """ update main game loop """ camera.rotation_y += mouse.velocity[0] * 40 camera.rotation_x -= mouse.velocity[1] * 40 camera.rotation_x = clamp(camera.rotation_x, -90, 90) # snake eats snack if distance(self.snake.head.position, self.snack.position) < 0.1: # make_sound(1) self.score[-1] += 1 msg = 'Your score is {0}'.format(self.score[-1]) print_on_screen(msg, position=(-0.85, 0.45), scale=2, duration=1) self.snake.add_block() while True: self.snack.random_position() snack_pos = self.snack.position if not (snack_pos in list( map(lambda x: x.position, self.snake.body))): break # snake eats its tail if self.snake.self_eat(): # make_sound(3) self.score.append(len(self.snake.body)) msg = 'You lost!\nYour score is {0}\n[record is {1}]'.format( self.score[-1], max(self.score)) print_on_screen(msg, position=(-0.7, 0.15), scale=5, duration=2) self.snake.isPause = True invoke(self.start_new_game, delay=3)
def late_init(self): self.center_on_screen() if not application.development_mode: self.fullscreen = True self.color = color.dark_gray self.render_modes = ('default', 'wireframe', 'colliders', 'normals') self.render_mode = 'default' self.editor_ui = None from ursina import invoke invoke(base.accept, 'aspectRatioChanged', self.update_aspect_ratio, delay=1/60)
def check_win(self): check = ''.join( [p[1] for p in list(sorted(self.phoneme_store.test_positions))]) test = ''.join(self.phoneme_store.original_phonemes) if check == test and not self.parent_game.correct: self.parent_game.help_text.text = 'CORRECT!' PhonemeEngine.sounds.get('win').play() self.parent_game.correct = True self.parent_game.score += len(self.phoneme_store.original_phonemes ) + self.parent_game.difficulty invoke(self.phoneme_store.full_audio_dict[ self.phoneme_store.word].play, delay=1) invoke(self.parent_game.build, delay=4) elif not self.parent_game.correct and check != test: logger.debug(check + ' ' + test) print(check + ' ' + test) PhonemeEngine.sounds.get('lose').play()
def input(self, key): if self.hovered: if key == 'left mouse down': if not self.parent_game.started: self.parent_game.started = True if len(self.phoneme_store.phonemes): if self.position[2] == ARENA_DEPTH: if not self.text: phoneme = self.phoneme_store.phonemes.pop(-1) voxel = Voxel( self.phoneme_store, self.parent_game, position=self.position + mouse.normal, texture=self.phoneme_store.textures.get( phoneme, 'white_cube'), text=phoneme, highlight_color=color.white) self.parent_game.voxels.append(voxel) self.parent_game.score -= 1 self.phoneme_store.test_positions.append( (self.position[0], phoneme)) self.play_sound(phoneme) logger.debug(phoneme) if not len(self.phoneme_store.phonemes): invoke(self.check_win, delay=.5) else: self.play_sound(self.text) else: self.play_sound(self.text) if key == 'right mouse down': if self.text: if not self.parent_game.correct: self.phoneme_store.phonemes.append(self.text) self.parent_game.voxels.remove(self) if (self.position[0], self.text ) in self.phoneme_store.test_positions: self.phoneme_store.test_positions.remove( (self.position[0], self.text)) destroy(self) else: self.play_sound(self.text)
def build(self): self.started = True word = self.phoneme_store.get_new_word() self.update_counter = 0 if self.give_up_button.enabled: self.give_up_button.disable() if self.reset_text.enabled: self.reset_text.disable() if word is not None: if self.phoneme_store.pron() is not None: self.help_text.text = f'The word is: "{self.phoneme_store.word}"\nLeft click in the green area to lay a phoneme,\nright click to pick one up.' self.help_text.enable() self.score_text.text = f'Score: {self.score}' self.score_text.enable() if self.voxels: self.destroy_all() self.help_text.text = self.phoneme_store.word self.correct = False for z in range(ARENA_DEPTH + 1): voxel_side_wall = Voxel(self.phoneme_store, self, position=(-1, 1, z)) voxel_other_side_wall = Voxel(self.phoneme_store, self, position=(len(self.phoneme_store.phonemes), 1, z)) self.voxels.append(voxel_side_wall) self.voxels.append(voxel_other_side_wall) for x in range(len(self.phoneme_store.phonemes)): voxel = Voxel(self.phoneme_store, self, position=(x, 0, z)) voxel_wall = Voxel(self.phoneme_store, self, position=(x, 1, -1)) self.voxels.append(voxel) self.voxels.append(voxel_wall) if voxel.position[2] == ARENA_DEPTH: voxel.color = color.lime voxel.texture = 'white_cube' invoke(self.create_clouds, delay=0.1) if self.player: self.player.y = 0 self.player.x = len(self.phoneme_store.phonemes) // 2 self.player.z = 1 else: self.generate_player() else: return self.build() else: self.end_game()
def quit(): from ursina import invoke invoke(sys.exit, delay=.01)