おおー。はじめて配信みたよ! おもしろい!
#knzklive_3
私はベーマガで育ったクチで、MSXファンの人もいると思う。
ファミコンのハードウェアとかマシン語は、すべて断空我さんの連載記事のおかげで覚えたモノ。
プログラムを投稿して採用されると、たぶん10%ぐらい源泉徴収されて9,000円とか7,000円とかもらえたと思う。ああいうのに投稿するのも楽しみの一つだったよね。
勢い余って、ベーマガ投稿者が集まっていたサークルの門を叩いたこともある。主催していた人が連絡とれなくなっちゃって解散するんだけど、会誌が発行されていたりして交流があって楽しかった。あの頃のやりとりは、要するに文通だったね。
テクノポリスのおにたまさんの記事があって、同人ソフトの世界が開けたりもした。めちゃくちゃ勉強になった。
音美ちゃんとか同人ハードも栄えていた。パソケットに買いに行った気がする。
DTP鯖管
さんがブースト
DTP鯖管
さんがブースト
DTP鯖管
さんがブースト
DTP鯖管
さんがブースト
DTP鯖管
さんがブースト
ケダマの好きなブロック崩し、貼っときますね。
ファミコンって、Memory-maped I/Oって言って、指定したアドレスに書き込んだり読み出したりすると、ハードウェアに指示ができたり、状態を取得したりできたのね。
https://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%A2%E3%83%AA%E3%83%9E%E3%83%83%E3%83%97%E3%83%89I/O
だから、メモリを、アドレスを指定してアクセスするっていうのを覚えるのは早かった。ベーシックの段階でそれを使っていた。
ベーシックでできることに限界を感じた頃、マシン語に手を出すんだけど、これも少ないCPUのレジスタをやりくりしながら、メモリから読み出して、計算したり判定して、メモリに書き込むっていうロジックを延々と書くモノだった。
ゼロページを駆使して、そこにインデックスでアクセスする。
そういうのをやってから、C言語を覚えたので、MASMをさらに高性能にした、簡単にマシン語が書ける凄い言語という認識で、構造体とか配列とかポインタというのも、シンタックスシュガーだという認識だった。
いまは、こういう順序でC言語に触れるのは無理だと思うので、自分達の世代の優位点だな、と思っている。
DTP鯖管
さんがブースト
あるとき、弾のスピードをあげるために、ループ毎に足す値を大きくしたんだけど、今度は敵をすり抜けちゃうようになったw
さあ、どうやったら交差して場所が入れ替わる敵と弾が衝突した判定ができるんだ?
という感じで延々と続くんですが、こういうことを無我夢中で考えていた。
これを、よくわからないけど、面白そうって思うかどうか。
ファミリーベーシックでのプログラミングは、まず、ノートに実現したいことをスケッチして、変数の値がループ毎にどう移り変わるか、罫線を引いて表を作って数字を埋めて、頭の中で動かしてみて、最後にBASICで書いた。
これは、今でも通用するやり方だと思う。
さっきの斜めの動きなんかは、担任の先生に聞いたりしたけど、あまり有意なヒントは得られなかった。大人にも難しいことはあるのかと思った。それで、自力で頑張ることにした。
当時、何にも知識は無かったけど、最強のパラメータが一つあった。それは、時間を忘れて熱中できること。今は、もうあそこまでの熱意と集中力を発揮することは難しい。(短時間なら多少はできる)
パワーアップシューティングって格好良かったよね。シングルだった自機の弾が、ダブルになったり、3Wayになったり。
あと、連射できると嬉しい。
そういうのがやりたかったので、そういう動きをするプログラムを必死で書いた。
ファミコンのスプライト(キャラクターを描画する機能)は、画面端にいくと反対側から出てきちゃうので、どこまでいったら画面から消すか。
連射ってことは、画面上に自機の弾が沢山でてこなくちゃいけない。どうやって複数の弾のデータを管理すればいいのか。
画面に3発まで撃てるようにしたんんだけど、チュン!チュン!チュン!………………チュン!チュン!チュン!…………というリズムになる。画面上に貼り付くとすごい連射できるけど、下の方にいると、消えるまで続きが撃てないw
データ構造とアルゴリズム。予想外の動きと、開き直って仕様にしちゃう。バグったらそれはバグ技w
ファミリーベーシック、整数演算しかできないのね。
2Dシューティングゲームつくろうとして、敵が自機に向かって弾を撃ってくるようにしたいんだけど、その計算がわからない! どうやって斜めに移動させればいいの?
そこで、縦と横のより大きい方を1ずつ動かして、小さい方は、条件を満たしたら1動かすことにした。
弾の初期位置はEX=0, EY=0
自機はMX=100, MY=150
その差、XX=100, YY=150
EYは、ループ毎に1ずつ増やす。EXは、カウンターにXXを足し続けて、条件を満たすまで増やさない。
合計がYYを超えたらEXを1増やしてカウンターからYYを引く。
そうやって、斜めの軌跡を計算することにした。
これで、ちゃんと弾が斜めに飛んでくる。速度がおかしいんだけど、そこはご愛敬w
そうやって、問題を解決する仕組みを考えるということを学習した。アルゴリズムは楽しい。三角関数とかはまだ知らない。小学4年生の頃の話。
DTP鯖管
さんがブースト
DTP鯖管
さんがブースト
DTP・デザイン・印刷のテーマサーバ DTP-Mstdn.jpやってます。
#Illustrator #スクリーン印刷 #インクジェット #カラーマネジメント #運営
#searchable_by_all_users