ファルの怪文書保管庫

読者になるとファル謹製の怪文書が無料で読み放題!

<?
num=1
t = obj.frame
x0_init=180.5
x0_interval = 70.5
x0 = x0_init - (num-1)*x0_interval
y0 = -404.95
vx0 = 2.62
vy0 = 0.072
g = 0.033
e = 0.9257
A = 356.59
L = 214.86

x = x0 + vx0 * t
while math.abs(x) > L do
    if x > L then
        x = 2*L-x
    else
        x = -2*L-x
    end
end

vy1 = math.sqrt(vy0^2 + 2 * g * (A-y0))
T1 = ( vy1-vy0) / g
if t<T1 then
    y=y0+vy0*t+g*t^2/2
else
    y = A - e * vy1 * (t - T1) + g * (t - T1)^2 / 2
end
obj.load("figure", "円", 0xffff00, 70, 4)
obj.draw(x-obj.x, y-obj.y)
?>

イカ日記20230724

久々のイカ日記。

Lv.5での2s処理について

2sに限らず1sでも言えるのだが、最初の中央2w1→右で2w1r+2w2処理の際に2w3を倒してはならないことが分かった。

このタイミングで2w3を倒すと2w3rが倒せない位置に来てしまう。

その他

3ボス残80秒もそろそろマスターしたいので練習を再開した。最初のLは例の白のやや上寄りにして上隣の黒にダメージを入れるのが正解のようだ

イカプロ セーブデータの形式案

yamlで必要な情報だけ抜き出すと多分こんな感じ

Player:
    bw_state: 
    x:
    y: 
PlayerShot:
    - bw:
      x:
      y:
    - bw:
      x:
      y:
    - bw:
      x:
      y:

Meta:
    t:
    wave:
    last_spawn:

Enemy:
    - hp:
      bw:
      wave:
      id:
      gen:
      pos:
      x:
      y:
      vx:
      vy:
      canbound:
      invincible: 
    - hp:
      bw:
      wave:
      id:
      gen:
      pos:
      x:
      y:
      vx:
      vy:
      canbound:
      invincible: 

イカプログラム軽量化

import numpy as np
import matplotlib.pyplot as plt

# 定数
A = 360 # 床の座標
g = 0.033 # 重力加速度
e = 0.92 # 反発係数
A0 = 50 # 床と退場ラインの間隔

y0 = 0 # 初期y座標
vy0 = 0 # y初速度

a = vy0**2 + 2 * g * (A - y0)

T = (-vy0 + np.sqrt(a)) / g # バウンド時刻
vy01 = -e * np.sqrt(a) # バウンド直後の初速度y
Tout = T + (-vy01 + np.sqrt(e**2 * a + 2 * g * A0)) / g # 退場時刻


def calc_y(t): # y座標計算
    if t <= T:
        return y0 + vy0 * t + g * t**2 / 2
    elif t <= Tout:
        return A + vy01 * (t - T) + g * (t - T)**2 / 2
    else:
        return np.nan

# 可視化
t_plot = np.arange(1000)
y_plot = [calc_y(ti) for ti in t_plot]

fig, ax = plt.subplots()

ax.plot(t_plot, y_plot)
ax.invert_yaxis()
fig.show()

必要な情報を生成時に計算しておけば大幅に軽量化できる説が浮上したため、pythonで書いてみる。

x軸方向、分裂後の挙動も含めた構成は検討中。

イカ日記20230212

  • 予約自体は問題なし
    • 0.5~0.9なら1b1から補充、0.0~0.4なら1b1と1b1r&1b2から補充でOK。それより多ければ一旦吐けばよい
  • 所感として、Lv.5→Lv.5は十分可能。ただし撃つタイミングに制約が多く、1sのb処理に対する深い理解を要する
    • 現状ではコインを投げるよりそちらの理解に回す方が効率的かと思われる
  • Lv.4→w全滅を確認。これと同じ動きでLv.4で回しつつ全滅を取ることは可能。
    • その場合予約が1本でなくなる恐れがある。(2本になる)
    • 加えて、Lv.4に固定するやり方を考えないといけない。参考動画を漁ろう。
    • でも理想を言えばLv.5なんだよなぁ
  • 予約が2本でも上手く行きそうか?→未検証だが多分問題なし?

イカ3ラスト考察

2sのLv.について

仮にLv.5かつ高高度処理が可能だとしても、1w6と2w6の処理開始がほぼ同時になるから2sでLv.5は厳しいか?

予約パターンについて

1s終わり際に(1w1L予約)→1b5rlS破壊→1w1L着弾は可能であることを確認した。

その後左に行き1w2→1w3&1w2lS破壊までは確定。(1w3は2b1と軌道が重なる)

今左端にいる。

この時点で判明している制約は

  • 2w1を中央で撃つ前に倒さねばならない敵
    • 1w4(2b2と軌道が重なるため)
    • 1w1l(終盤まで撃つ機会が訪れない)
  • 要注意
    • 1w6(中央後の右辺での左薙に巻き込めないと漏らしそう)