BeamNG.Earth
BeamNG.drive용 1:1 비율 실시간 지구, 실제 고도·위성 이미지·부동 원점·보조 서버에서 LOD 스트리밍
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗小学校低学年向けの計算練習 WEB アプリです。たしざん・ひきざん・かけざん・百マスたしざんを解いて、ドロップを集めます。
画像などを /img/... のように「サイトのいちばん上から」の場所で読み込んでいるので、ファイルを直接開くのではなく、かんたんなサーバーで開きます。
python3 -m http.server 8765
# ブラウザで http://localhost:8765/ を開く
index.html 1枚のアプリです。URL の # のうしろで画面が切り替わります(js/app.js)。
| URL | 画面 |
|---|---|
#/ | さいしょの画面 |
#/add #/sub #/multi #/hundredgrid | そのモードのレベル選択 → 問題 |
#/records #/records/add など | タマのきろく(ドロップびん・カレンダー・タイムのうつりかわり・にがてマップ) |
#/music | おんがくのへや(ためしているあいだは /music on のときだけ。下の「おんがくのへや」) |
#/keys | けんばんの レベル選択 → レッスン(/music on のときだけ) |
#/black | くろいけんばんの レベル選択 → レッスン(/music on で、けんばんの Lv6 を クリアしたあと) |
#/notes | おんぷよみの レベル選択 → レッスン(/music on のときだけ) |
#/rhythm | リズムの レベル選択 → レッスン(/music on のときだけ) |
#/piano | じゆうにひこう(/music on のときだけ) |
以前の URL(tamaadddrops.html など)のページはなくなりました(開くと 404 になります)。
/music on と入れると、さいしょの画面に「おんがくのへや」のボタンが出ます(/music off で かくれます)。入力欄は、さいしょの画面にも 計算の画面にもあります。/rescue /delete /master on は、計算・けんばんの画面でだけ使えます。js/sound.js でつくります(ピアノふうの音を その場でつくるので、音のファイルは いりません)。けんばんは さわった しゅんかん(pointerdown)に鳴り、何本の指でも おせます。おんがくの画面に いるあいだは、iPhone のマナーモードでも 音が出るようにしています(navigator.audioSession。使えないブラウザでは いままでどおり)。js/notes.js)は、「どの けんばんか(MIDI の番号。60 が まんなかのド)」と「どんな名前か(ド〜シ と ♯♭)」を べつに持ちます。黒いけんばんには 名前が2つ(ド♯/レ♭)あります。docs/handoff-music.md に あります。js/modes/keys.js)| レベル | 内容 | けんばんの名前 |
|---|---|---|
| おとあそび | すきな けんばんを 10かい鳴らす(ドロップは いつも水色。黒いけんばんは「ド♯/レ♭」のように 2つの名前の ふきだし) | あり |
| Lv1 ドレミ | ド・レ・ミ を 4かいずつ(12もん) | あり |
| Lv2 ド〜ソ | ド〜ソ を 3かいずつ(15もん) | あり |
| Lv3 まほう | はじめに ド と ソ の名前が まほうで きえる | 一部 |
| Lv4 ド〜ソ | ド〜ソ | なし |
| Lv5 ファ〜ド | ファ〜たかいド | あり |
| Lv6 ド〜ド | ド〜たかいド を 2かいずつ(16もん) | なし |
| Lv7 メロディ | 3〜4おんの メロディを 左から じゅんばんに(8もん)。和音の じゅんばん C → F → G(G7)→ C で出し、C にもどるときは ドで おわる | なし |
| Lvオニ | Lv1〜7 を ぜんぶ まぜる(1おん12もん+メロディ4もん)。見せる けんばんの はしが 毎回かわる(ファ〜ミ・ミ〜ミ・ファ〜ファ・シ〜シ。どれも 黒いけんばん 10こ) | なし |
tamadoro.stats.v1 の keys。キーは「ド」「たかいド」「ドレミ」など)と、1回ごとの きろく(tamadoro.log.v1)を のこします。ドロップは びん・カレンダーに入りますが、「タマのきろく」の けんばんの タブ・「にがてちょうせん」は まだありません。KEYS_PILE_SIZE)。画面の はしまで ならんだら、2だんめは 1だんめの ドロップと ドロップの あいだに はまって つもります(keysPileSlot)。つもりつづけると 問題も 見えなくなりますが、それで かまいません。つもった ドロップは 指で うごかせます。レベル選択へ もどると とびちります。js/modes/black.js。問題の進め方は けんばんと同じ js/engines/keys.js)keys_coins_7)。それまでは、おんがくのへやの ボタンに カギがかかり、「しろい けんばんの Lv6 を クリアすると ひらくよ」と出ます。ためすときは、けんばんの画面で /rescue → Lv7 まで ひらくと、ここも ひらきます。| レベル | 内容 | ガイド |
|---|---|---|
| Lv1 ♯ | ド♯・レ♯・ファ♯・ソ♯・ラ♯ を 3かいずつ(15もん) | もとの音を 光らせて「→」・白いけんばんの名前 |
| Lv2 ♭ | レ♭・ミ♭・ソ♭・ラ♭・シ♭ を 3かいずつ(15もん) | もとの音を 光らせて「←」・白いけんばんの名前 |
| Lv3 ♯と♭ | まぜて 16もん | なし |
| Lv4 2つの名前 | 「ド♯ = ?♭」の ?を、ド♭〜シ♭ の ボタンで こたえる(10もん)。けんばんは 鳴るだけ。正解すると その けんばんが 鳴って「ド♯ = レ♭」 | なし |
| Lvオニ | ♯♭ 8もん・2つの名前 4もん・ひっかけ 4もん。ひっかけは ミ♯(=ファ)・シ♯(=たかいド)・ファ♭(=ミ)・ド♭(=ひくいシ)で、正解すると「ミ♯は ファ!」 | なし |
js/modes/notes.js。五線の絵は js/staff.js、問題の進め方は けんばんと同じ js/engines/keys.js)display: 'staff' で、名前の カードの かわりに 五線)。TamaStaff。音符は ぜんぶ 4ぶおんぷ。シより上は ぼうが 下むき。ド・上のラ には みじかい せん=加線)。js/sing.js の「どー・れー・みー」)。
dataVersion。tamadoro.notes.dataVersion に 版を おぼえる)。| レベル | 内容 | けんばんの名前 |
|---|---|---|
| しくみ | せんは 5ほん・ドの ばしょ・のぼる・くだる・つづけて 読む(8もん) | あり |
| Lv1 せんの おだんご | ド・ミ・ソ(13もん:お手本 + 1おん 9もん + おだんご 3もん。ヒント:せんに ささった おだんご) | あり |
| Lv2 あいだの おだんご | レ・ファ・ラ(13もん。ヒント:せんの あいだの おだんご。レは ドの せんと 1ぽんめの あいだ) | あり |
| Lv3 おだんご まぜ | ド・ミ・ソ と レ・ファ・ラ を まぜる(16もん:1おん 12 + 2しゅるいの おだんご 4。お手本なし) | あり |
| Lv4 おだんごの つづき | せんの おだんごに シ、あいだの おだんごに たかいド を たした 4つだまの おだんご(和音は Cmaj7・Dm7)で ド〜ド(18もん:お手本 2 + 1おん 12(シ・たかいドは 多め)+ おだんご 4) | あり |
| Lv5 ド〜ド | ド〜たかいド(16もん。右上の「けんばんの よみかた」スイッチを ON に すると けんばんに 名前が 出る。はじめは いつも OFF) | なし(スイッチで あり) |
| Lv6 うえの おと | けんばんは シ〜たかいシ を 見せて、あかるい ところ(シ〜たかいソ)は 右がわ(左に まんなかの ドの あたりが くらく 見え、たかい音だと わかる)。うえの おだんご:せんに シ・たかいレ・たかいファ(G7)、あいだに たかいド・たかいミ・たかいソ(C。たかいソは 5ほんめの すぐ上)(18もん:お手本 2 + 1おん 12 + おだんご 4) | あり |
| Lv7 メロディ | 3〜4おんの がくふ(8もん)。けんばんの Lv7 より とびはねる メロディ(どの メロディにも 3度より 大きい とび。4度・5度・6度・オクターブも)。和音は C → F → G → C の くりかえしで、C の つぎの C(同じ 和音が つづく ところ)は Am か C7 に、G の ところは ときどき Fm(F → Fm → C の 借用和音。メロディは ファ と ド だけ)。メロディは 白いけんばんだけ | なし |
| Lv8 きょくふう | 曲調を 1つ えらんで(「ポップス風(おうどう しんこう)」など)、その 8つの 和音の フレーズを 1つずつ れんしゅう → さいごに ぜんぶの がくふで とおし えんそう(下の「きょくふう メロディ」) | なし(スイッチで あり) |
| Lvオニ | ド〜たかいソ の 1おん12もん+メロディ4もん(メロディは Lv7 と 同じ とびはねる メロディ。けんばんの オニと ちがって、けんばんの場所は かわらない) | なし |
js/songs.js)weight と、系統ごとの weight(FAMILIES)。0 で 出なくなり、2 で 2ばい 出やすく なります(ふえすぎたら ここで しぼる)。/song 曲調の id か 系統 と 入れて Enter で、その 曲調・系統だけに なります(ためすとき用。例 /song jazz・/song komuro)。/song off で もとに もどります(tamadoro.notes.song に おぼえる)。dataVersion 2)の オニの ドロップ・タイム・きろくは、レベル9 から 10 へ うつします(消しません。upgradeData)。js/modes/rhythm.js・js/engines/rhythm.js)setTimeout では ずれるので)。たたいた 時刻は「そのとき スピーカーから 出ていた 音」の 時刻に なおして くらべます(TamaSound.heardTime。getOutputTimestamp を つかう)。tamadoro.rhythm.offset、±0.3びょう まで)、ほかの レベルでは その ぶんを ひいて はんていします。ブルートゥースの イヤホンなど、音が おくれて 聞こえる 端末のため。5かい いじょう たたかないと、もういちど。| レベル | ことば | テンポ・しょうせつ |
|---|---|---|
| ちょうせい | タン 8はく | 90・2 |
| Lv1 タン | タン | 80・4 |
| Lv2 ウン | タン・ウン | 80・4 |
| Lv3 タタ | タン・タタ | 76・4 |
| Lv4 ターアー | タン・ターアー・ウン | 84・4 |
| Lv5 ぜんぶ | ぜんぶ | 84・6 |
| Lvオニ | ぜんぶ(はんてい きびしめ) | 100・8 |
js/piano.js・js/sing.js)js/sing.js のフォルマント合成)。のどの音を けんばんの 高さで つくり、「口の形」のフィルターに 通して 声に します。のばしている ところの 音程は ピアノと 同じです。けんばんごとの 大きさは、のばしている ところで そろえます。js/sing.js には、ドを ひくと「どー」、レなら「れー」…と うたう 声(ドレミ)も 入っています(ためしに つくって とっておいたもの。いまは 画面から えらべません)。1問ごとに「苦手HP」(0〜30)を記録しています(js/history.js)。
| できごと | 苦手HP |
|---|---|
| まちがえた | +10 |
| 正解したけれど 4.5秒以上かかった(かくれにがて) | +3 |
| 3.5秒以内に正解した | −2 |
🔥3、なければ ✨)が出ます。にがてな問題がないレベル(まだ一度もあそんでいないレベルもふくむ)は、にがてちょうせん中は押せません。weakChallenge: true がつきます)。js/engines/drill.js の WEAK_DECK_STYLE で変えられます('intensive':いまの12問 / 'blend':苦手3問×3回+まぜる問題6問の15問)。1つの段に3つずつ(「n のだん」「n:さかさ」「n:バラバラ」)で Lv1〜27。そのあとに、Lv28 子オニ(青)(1〜5の段のバラバラ)、Lv29 子オニ(赤)(6〜9の段のバラバラ)、Lv30 オニ(黒)(すべての段)があります。オニの3つは、すべての段の「バラバラ」でドロップを1こ以上とると出てきます。ノーミスクリアで金のドロップ20こがもらえるのは Lv30 だけです。
js/records.js の buildJarShape で決めていて、当たり判定(collideWithJar)と描画(jarPath)の両方がこれを使います。js/records.js の DropJar.FX(100玉・500玉・1000玉それぞれ)で変えられます。MAX_VISUAL_BALLS。たとえば3589こなら、1つぶが約10こ分)。
100玉・500玉・1000玉は合体すると正確な数になります。100こに満たない のこりの粒は、合体のたびに少しずつ(のこりの数 ÷ のこりの合体の回数)さりげなく「ほどけ」、さいごの合体で ちょうど ほんとうの数(3589こなら89こ)になります(unpackSome)。stepLid、LID_...)。js/drop-table.js の DropTable)。
css/records.css の .drop-table-bg)。GAP)を あけます。POUR_PULL)。口から出た粒は テーブルの大きさに ふくらみ、おうぎ形に とびだします。遠くまで とぶ粒から先に出して、しばらくは ほかの粒の上を はねて こえる(HOP_FRAMES)ので、まんなかに かたまりません。AREA)を おおう数まで(多いときは へらして出す)。見えていた粒より多いときは、のこりを 口から つづけて出します。粒は びんの中より少し大きく(SIZE_UP)します。bench。テーブルと同じ ぶつかりの計算を ためしに うごかす)、「BENCH_BUDGET ÷ はかった時間」こまでに します。ぶちまけている あいだも 1こまの計算時間を 見はり、SLOW_FRAME(ms)を こえる こまが 3つ つづいたら、のこりを 口から 出しません(watchSpeed)。出なかった分は、おかたづけで 口から 入ってきて、いつもの びんに もどります。
かげは、指で つまんでいる粒にだけ つけます(ぜんぶの粒に かげの まるを 塗ると、描く時間の 7わりくらいが かげに なって 重い)。
目安(ぶちまけてから止まるまで、1こまの平均。画面の こまかさ 2倍):ふつうの パソコンで 1000こ 約4ms。CPU が 4倍 おそいと 600こで 約13ms・1000こで 約18ms なので、そういう端末では 400〜600こくらいに へらします。
軽くするための くふう(うごきは かえない):ガラスの当たり判定は、とどかない ガラスの線や 胴の まんなかの粒を しらべない。粒どうしの ぶつかりは、マスわけを 数の ならび(Int32Array)で つかいまわす。速い粒が なく 指も ふれていないときは、1こまを わけずに すすめる(SLOW_SPEED)。
おそい端末で 描くのが まにあわないときは、たった時間の ぶんだけ うごきを すすめてから 描くので、スローモーションに なりません(1回に CATCH_UP こままで)。
(粒の絵を 画面に出す大きさで 写しておく くふうも ためしましたが、大きさが かわっていく粒が 多く、写しなおしが ふえて かえって 少し おそくなったので、やめました)index.html 画面(さいしょ・レベル選択・問題・きろく・モーダル)
css/
base.css 計算の画面に共通のスタイル
home.css さいしょの画面
addition.css など モードごとの違い(<html data-mode="add"> のときだけ効く)
records.css タマのきろく
music.css おんがくのへや・けんばん
js/
modes/ ★ モードの定義(レベル・問題のつくり方・ドロップの色・解放の条件)
engines/drill.js たしざん・ひきざん・かけざんの問題の進め方
engines/grid.js 百マスの問題の進め方
engines/keys.js けんばんレッスンの進め方
state.js いまのモードと問題の状態
storage.js 保存(localStorage)の読み書き
history.js プレイの記録(きろく画面のため)・苦手HP
records.js タマのきろく画面
drops.js ドロップを投げる・ごほうび・メニューへの表示
keypad.js テンキー
menu.js レベル選択 ⇔ 問題 の切り替え、レベルの解放、rescue
level-select.js レベルボタンと rescue モーダルを、モードの定義からつくる。にがてちょうせん・特訓コースの切り替え
data-modal.js セーブ/ロード、おとな用コマンド(/music on /rescue /delete /master on)
sound.js 音(テンキー・百マス・けんばん)。おと あり/なし
notes.js 音のデータ(けんばんの番号・ド〜シ・♯♭の名前)
keyboard.js 画面のけんばん(さわると すぐ鳴る)
music.js おんがくのへや(/music on のときだけ出る)
piano.js じゆうにひこう
sing.js うたう けんばん(ネコの「ニャー」・とっておいた「どー れー みー」。フォルマント合成)
songs.js きょくふう メロディの 曲調の 表(ノブ)と メロディづくり(おんぷよみ Lv8)
staff.js 五線(ト音記号)と 音符の絵(おんぷよみ)
engines/rhythm.js リズムの進め方(流れる がくふ・メトロノーム・はんてい・ちょうせい)
tama-talk.js タマのおしゃべり(tashizan_message.json)。タマを左右に5往復なでるとしゃべる
timer.js ストップウォッチ、ベストタイム
home.js さいしょの画面
app.js 画面の切り替え
js/glyphs.js 数字・記号・ひらがなの字形(tools/make_glyphs.py でつくる)
img/drops/ ドロップ(ガラス玉にねこのもようの SVG)
img/drops/small/ レベル選択・カレンダー用の小さいドロップ(PNG。SVG をたくさん並べると重いので)
img/bg_space.svg さいしょの画面のうしろ(宇宙)
img/board_water.svg さいしょ・レベル選択の画面の水色のわく
img/tama_and_logo.svg タマとタイトルロゴ
img/ogp.jpg リンクを貼ったときのカードの画像(1200×630。さいしょの画面から、歯車・おしらせ・フッターを消して撮ったもの)
sitemap.xml・robots.txt 検索エンジン(Google Search Console など)むけ
tools/make_glyphs.py 数字・記号・ひらがなの字形をつくるスクリプト(形を直したいときに)
tools/make_drops.py 前のドロップ(かんたんな球)の SVG をつくるスクリプト。実行すると、いまのドロップが上書きされるので注意
tools/make_drop_pngs.js 小さいドロップの PNG(img/drops/small/)を img/drops/*.svg からつくるスクリプト
js/modes/addition.js などの levels に1行足します。ボタンは自動でできます。
{ label: 'Lv12もんだい', comment: 'こたえが20まで', drop: 'L',
patterns: () => P.pairs(1, 9, 1, 9, (a, b) => a + b <= 20) },
img/drops/*.svg の色(グラデーションの stop-color など)を直接書きかえます。
(tools/make_drops.py は前のかんたんな球をつくるスクリプトなので、実行するといまのドロップが上書きされます)
書きかえたら node tools/make_drop_pngs.js で、小さいドロップの PNG(img/drops/small/)もつくりなおします。tools/make_glyphs.py の BASE(線の通り道)を変えて python3 tools/make_glyphs.py。
字形は、教科書体の書き方のきまりに合わせて、タマドロのために一から描いたものです(フォントをなぞったものではありません)。
あとで最終調整する点は、スクリプトの先頭に覚え書きがあります。tashizan_message.json。| キー | 中身 |
|---|---|
add_coins_3 など | レベルごとのドロップ(最新10こ)。画像名は以前のまま /img/Lmaru.png で記録し、表示のときに img/drops/L.svg にする |
addition_level_3_best_time など | ベストタイム(百マスは秒、ほかはミリ秒) |
hundredgrid_level_3_records など | 百マスのタイム(上位5件)・累積正答数 |
tamadoro.log.v1 | 1回あそぶごとの記録(いつ・レベル・時間・まちがい・ドロップ) |
tamadoro.stats.v1 | 1問ごとのできぐあい(回数・まちがい・時間・苦手HP hp。にがてマップ・にがてちょうせん用) |
tamadoro.schema | 以前のドロップを記録に取りこんだしるし |
keys_coins_3・keys_level_3_best_time など | けんばんの ドロップ・ベストタイム(レベル1 が おとあそび) |
black_coins_3・black_level_3_best_time など | くろいけんばんの ドロップ・ベストタイム |
notes_coins_3・notes_level_3_best_time など | おんぷよみの ドロップ・ベストタイム(レベル1 が しくみ) |
tamadoro.notes.song | /song で きめた きょくふう(曲調の id か 系統。ないときは ノブの わりあいで えらぶ) |
tamadoro.notes.dataVersion | おんぷよみの データの 版(js/modes/notes.js の dataVersion と ちがうと、まえの データを 消す) |
rhythm_coins_3 など | リズムの ドロップ(レベル1 が ちょうせい) |
tamadoro.rhythm.offset | リズムの ちょうせいで はかった ずれ(秒。プラスは おそめに たたく) |
tamadoro.music.enabled | /music on にしたか(true で「おんがくのへや」が出る) |
tamadoro.sound.muted | 「おと なし」にしたか(true で ぜんぶの音を鳴らさない) |
tamadoro.piano.names | じゆうにひこうの「音名かくにん」を ON にしたか |
tamadoro.piano.keyWidth | じゆうにひこうの「けんばんの はば」(px。ないときは 画面の はばに合わせた めやす) |
「データをセーブ」は localStorage をまるごと tamadoro_月日時分.txt に書き出します。
「データをロード」は、読みこみかたを2つから選べます。
どちらも、読みこんだあとに tamadoro.schema がなければ(むかしのアプリのセーブファイルなど)、ドロップを記録に取りこみます。
tests/ に、ブラウザを自動で動かして確かめるテストがあります(Node.js と Playwright が必要)。
cd tests
npm install
npx playwright install chromium
npm test
hitWall)。onDown)。ALL_IN_FRAMES こまの あいだ びんの中に いつづけたら はじめます(口から ころがり出たら かぞえなおし。テーブルの粒を 1つも 入れていないときは しない。watchAllIn)。flyAt)。粒は つもった山の上に 落ちてから、斜面を ころがって 止まり、上の面は なだらかな山に なります。さいごに コルクが とんできて ふたをします。
びんは、たおす前の中身に もどります(saveJar・restoreJar)。合体した玉(100玉・500玉・1000玉)は ほどけず、玉のまま もどり、合体の つづき(のこりの合体)も そのままです。合体の とちゅうで たおしたときは、その合体は とりけして、つぎに タップしたときに やりなおします。
テーブルの粒は、もとになった びんの粒の場所へ もどります。びんの おくに あった分(見えていなかった粒)は、テーブルに 出なかった びんの粒の かわりになり、あまったら 口で すいこまれて 見えなくなります。たりない分は 口の上から 入ってきます(テーブルに出る数が びんに見えている数より 少ない、小さい画面の ときだけ)。
つもる場所は、びんが おきあがる あいだに 少しずつ 計算して 先に 決めておきます(packWork。いちどに 計算すると スマホで 一瞬 かたまるので)。
① 1つぶずつ 口の下から 落として、下の粒の まわりを ころがし、2つの粒(か かべ)の あいだの くぼみに はまった所に おく(pourer。くぼみが 急な 坂に あるときや、高い所から 落ちて いきおいが あるときは、こえて ころがりつづける。坂の けわしさ REPOSE・落ちる はば POUR_SPREAD)
→ ② 重力で ならす(SETTLE_STEPS。とがった山や すきまが くずれる。大きい玉ほど 重い)→ ③ 重なりを なくす(RELAX_MAX)→ ④ 下の粒から じゅんばんに、まっすぐ 落ちられるだけ 落とす(sinkDown。かべや となりに よりかかって できた すきまを うめる)。
まわりの粒に そって 止まるので、100玉・500玉・1000玉の まわりにも すきまが できません。粒どうしで おしあう計算は 見せている あいだには しないので、つもった粒は ぴたっと 止まり、ふたが しまったあとの びんは、つもった ならびと まったく同じです(あつまってくる時間 FILL_FRAMES)。
ほかの画面へ行ったり 読みこみなおしたりすると、いつもどおり びんは つくりなおされます(合体は ほどける)。js/records.js の DropJar の上のほう(BOUNCE_...)にまとめてあります。BOUNCE_ENABLED: false にすると、跳ね返りがなくなります(びんの形は いまのまま)。anchor/dropjar-stable-6.3.6 に残してあります。git checkout anchor/dropjar-stable-6.3.6 -- js/records.js index.html css/records.css で、びんを元に戻せます。tests/dropjar.test.js で、跳ねること・ずっと動きつづけないこと・びんの外や宙に浮いたまま止まらないこと を確かめています。