def update(self, delta): if core.Gameobj.hero.health == 0 and self.end_message is None: self.end_message = core.widgets.MessageInput(core.Var.str_gameover[core.Var.language_id]) core.Gameobj.guns[core.Gameobj.hero.current_gun].reload_bool = False if self.end_message is None: current_time = time() # Do things when start the wave if self.next_wave_started and current_time - self.time_wave_end >= self.wave_cooldown: self.start_next_wave() self.next_wave_started = False self.wave = True self.end_wave = False # If there is need for more monsters, then spawn elif self.wave and len(core.Gameobj.monsters) < self.max_zombies and self.n_spawn_this_wave > 0: self.n_spawn_this_wave -= (self.max_zombies - len(core.Gameobj.monsters)) Survivalmode.spawn_zombie(self.max_zombies - len(core.Gameobj.monsters)) # Check if wave has ended elif not self.end_wave and len(core.Gameobj.monsters) == 0: core.Var.survival_wave += 1 self.end_wave = True self.time_wave_end = time() self.next_wave_started = True if core.Var.counter % 2 == 0: core.Gameobj.check_collision_between_monsters() for i in core.Gameobj.monsters: i.update(delta) core.Gameobj.hero.update(delta) for i in core.Gameobj.items: i.check_collision(core.Gameobj.hero.x, core.Gameobj.hero.y, core.Gameobj.hero.size*2) for i in core.Gameobj.particles_below: i.update(delta) for i in core.Gameobj.particles_over: i.update(delta) core.offset() else: self.end_message.update(delta) if self.end_message.value is not None: core.Var.scoreboard_data.append([str(len(core.Var.scoreboard_data) + 1), self.end_message.value, str(core.Var.score), str(core.Var.survival_wave), str(core.Var.bullets_shot), str(core.Var.bullets_hit), str(core.Var.monsters_killed)]) templist = [] for i in core.Var.scoreboard_data: templist.append(int(i[2])) sortedlist = [x for y, x in sorted(zip(templist, core.Var.scoreboard_data))] core.Var.scoreboard_data = list(reversed(sortedlist)) for i in range(len(core.Var.scoreboard_data)): core.Var.scoreboard_data[i][0] = str(i+1) if len(core.Var.scoreboard_data) > 15: core.Var.scoreboard_data.pop() core.Var.start_screen = True core.Var.stop_screen = True core.Var.new_screen = 5 core.Var.current_game = [False, 0] self.end_message = None
def vortex_index(high, low, close, window=20): true_range = np.maximum.reduce( [high[1:] - low[1:], high[1:] - close[:-1], low[1:] - close[:-1]]) true_range = offset(rolling_func(true_range, window, [np.sum])[0], 1) uptrend = offset(np.abs(high[1:] - low[:-1]), 1) downtrend = offset(np.abs(low[1:] - high[:-1]), 1) vi_plus = divide(rolling_func(uptrend, window, [np.sum])[0], true_range) vi_minus = divide(rolling_func(downtrend, window, [np.sum])[0], true_range) vi_plus[:window] = np.nan vi_minus[:window] = np.nan return replace_nan(vi_plus), replace_nan(vi_minus)
def rsi(price, window=20): gain = rolling_change(price) - 1 gain[np.isnan(gain)] = 0 loss = -gain.copy() gain[gain <= 0] = 0 loss[loss <= 0] = 0 alpha = 1 / float(window) avg_gain = offset(_ema(gain[2:], gain[1], alpha), 2) avg_loss = offset(_ema(loss[2:], loss[1], alpha), 2) rs = divide(avg_gain, avg_loss) rsi = 100 - divide(100, 1 + rs) rsi[:window] = np.nan return replace_nan(rsi)
def macd(price, macd_fast=12, macd_slow=26, signal_period=9): ema_fast = ema(price, window=macd_fast) ema_slow = ema(price, window=macd_slow) macd = ema_fast - ema_slow signal_line = offset(ema(macd[macd_slow:], window=signal_period), macd_slow) histogram = macd - signal_line return macd, signal_line, histogram
def rolling_diff(series, window=1): return offset(series[window:] / series[:-window], window)
def roc(series, widnow=20): return offset( rolling_diff(series, window)[widnow:] / series[:-widnow], window)
def rolling_change(price, window=1): return offset(price[window:] / price[:-window], window)
def ema(series, window=20): start = np.mean(series[:window]) alpha = 2 / (window + 1.0) out = _ema(series[window:], start, alpha) return offset(out, window)