確率のシミュレーション
2025.08.17
中学生の頃に一時ハマったのは、確率のシミュレーション
サイコロを転がして、ある目が出る確率というもので、何の仕込みもない正常なサイコロならどの目でも同じはず。
相対度数って言ったっけ。0.1666・・・になる。(1/6)
サイコロを振る回数が増えるほど、1/6に近づいていく、ということをシミュレーションしました。
MSXの乱数で1~6を発生させ、1から6の目それぞれ何回出たか集計させる単純なプログラムです。
最初は、いまでも自分で賢くないと思うけど、
IF X=1 THEN K1=K1+1
IF X=2 THEN K2=K2+1
IF X=3 THEN K3=K3+1
IF X=4 THEN K4=K4+1
IF X=5 THEN K5=K5+1
IF X=6 THEN K6=K6+1
・・・と、バカ正直にIFを並べていました。
もしIFで処理するとしても、最後にGOTOで以後のIFをとばしてやれば少しは速くなったでしょう。K1=K1+1:GOTO 200 とか。
あとで気づいて、IF文を並べるんじゃなくて
K(X)=K(X)+1
とすれば1行で済むじゃないかと。
最初は、こんなものでした。
あとから、中間結果を表示(印刷)するようにしました。
たとえば1000回ごとの結果を見たり記録に残したいわけです。
メインループの処理にできるだけ影響しないように、単純に判定する必要がありました。
MODを使ったのか\を使ったのかもう忘れました。
カウントの変数を別に回して1000回で0に戻すついでに印刷じゃなくて、
上記のXの値を1000で割って、割り切れるかどうかで判断したと思います。どっちが速いかわからないけど、まあ、放置しておけばそのうち終わる。
いま動いているのか、いまは何回サイコロをふったか、という表示もする必要がありました。そうでないと進捗がわからない。
サイコロを転がして、ある目が出る確率というもので、何の仕込みもない正常なサイコロならどの目でも同じはず。
相対度数って言ったっけ。0.1666・・・になる。(1/6)
サイコロを振る回数が増えるほど、1/6に近づいていく、ということをシミュレーションしました。
MSXの乱数で1~6を発生させ、1から6の目それぞれ何回出たか集計させる単純なプログラムです。
最初は、いまでも自分で賢くないと思うけど、
IF X=1 THEN K1=K1+1
IF X=2 THEN K2=K2+1
IF X=3 THEN K3=K3+1
IF X=4 THEN K4=K4+1
IF X=5 THEN K5=K5+1
IF X=6 THEN K6=K6+1
・・・と、バカ正直にIFを並べていました。
もしIFで処理するとしても、最後にGOTOで以後のIFをとばしてやれば少しは速くなったでしょう。K1=K1+1:GOTO 200 とか。
あとで気づいて、IF文を並べるんじゃなくて
K(X)=K(X)+1
とすれば1行で済むじゃないかと。
最初は、こんなものでした。
あとから、中間結果を表示(印刷)するようにしました。
たとえば1000回ごとの結果を見たり記録に残したいわけです。
メインループの処理にできるだけ影響しないように、単純に判定する必要がありました。
MODを使ったのか\を使ったのかもう忘れました。
カウントの変数を別に回して1000回で0に戻すついでに印刷じゃなくて、
上記のXの値を1000で割って、割り切れるかどうかで判断したと思います。どっちが速いかわからないけど、まあ、放置しておけばそのうち終わる。
いま動いているのか、いまは何回サイコロをふったか、という表示もする必要がありました。そうでないと進捗がわからない。
プログラミング(ゲーム作りとか)
2025.08.17
とうとうゲームを作れるようにはならなくて、そっち方面の才能もなかったのかなと思う。
そもそもゲームは苦手であまり興味なかった。とくに反射神経がダメ。だから仕方なかったかも。
最後にチャレンジしたのは学生の頃で、テトリスを作るとか言って、なかなかできませんでした。
ゲームの作り方を知らなかったんですね。「作り方」の意味ですけど、敵機と自機を同時に動かさないといけないじゃないですか。そんな処理の作り方の基本から知らなかった。
入力を待ってそこで止まるような作り方では、ゲームにならんわけです。それを知るきっかけもなかったから、基本も知らなかった。
さっき、同時とか書いたけど厳密に同時ではなくて、見た目には同時に動いているように見えるという意味です。
作り方としては、入力をとにかく取り込んで(待たないで)、自機の動きを変化させて、もし範囲外だったら変化させないで、
敵機の動きを計算して動かして、もしミサイルが発射されたらその動きを計算して表示を動かして、
当たったかどうか判定させて、もし当たったらスコアを計算して表示を更新する。
このサイクルを繰り返すわけです。こうすると、見た目には全て同時に動いているように見えます。
処理に時間がかかってしまうと遅くなるのは当然として動きが鈍くなるから、できるだけ詰めたり、整数型の変数を使うのは勿論、マシン語で処理したり・・・
敵を動かすのも、毎回1サイクルごとに動いていたら動きが細かすぎてダメだから、何サイクルごとに一コマ動かすとか、あるいはレベルによってスピードを可変させたりとか、そんな工夫も入れるのでしょう。
最初の頃はベーマガ等に載っているリストを打ち込んで試すことを繰り返すだけで、中身までは理解できませんでした。遊んでも(私がドンくさくて)すぐ終わってしまうから、打ち込んで満足しただけで終わった。
むしろ、グラフィックに興味を持ち始めて、あのMZ-2000の広告にあるような帽子みたいな形とか不思議な模様を描くのが楽しかったものです。一時期、かなり夢中になりました。
なんだっけ、パソコン・グラフィックスといった本を買ってきて試していました。もともとPC98用だから解像度をMSXのSCREEN2に合わせて縮小しなければなりません。荒いけど、まあそれなりにできた。
どうして関数だけで花束のような模様が描けるのか、不思議で仕方ありませんでしたけど、それを深く追究していけば数学の天才になったかも。
円を少しずつ変形させて描き、コマ送りすると回っているように見える、というのも自分なりに考えてやってみました。
今のPCだったらリアルタイムに描くなんて普通ですけど、MSXだから1枚描くのも大変。ビデオに録画しておき、あとで早送り再生すれば、円がくるくる回っているように見えました。
きっかけは高校で見た、オシロスコープのリサージュ波形がくるくる回るのが格好よくて、なんとか再現してみたかったのでした。
2つの発振器を用意して、オシロのX-Y軸それぞれに接続して、適当にレベル調整します。周波数を変えていくと、円がくるくる回ったりゆっくりになったり、不思議な模様を描いたりします。見ているだけで飽きません。
雑誌の文通欄で知り合った人とプログラムを交換する、ってのもやりました。
自分なりに変なプログラムを作って相手に送り、相手からもカセットが送られてきたので試したら・・・まるで市販ソフトのようなクオリティ。
まさかそんなすごい物が送られてくるなんて。そのレベルの違いに、私はとっても恥ずかしくなりました。私のは、とても人に見せられるようなものではありませんでした。
当時はプログラムの交換手段が無く、モデムと電話回線を使う人だって周囲にはいませんでした。したがって雑誌から打ち込むか、付録のソノシートを苦労してLOADするか、サークルに入って交換するか。やっぱり会報に載っているリストを打ち込むのです。
そもそもゲームは苦手であまり興味なかった。とくに反射神経がダメ。だから仕方なかったかも。
最後にチャレンジしたのは学生の頃で、テトリスを作るとか言って、なかなかできませんでした。
ゲームの作り方を知らなかったんですね。「作り方」の意味ですけど、敵機と自機を同時に動かさないといけないじゃないですか。そんな処理の作り方の基本から知らなかった。
入力を待ってそこで止まるような作り方では、ゲームにならんわけです。それを知るきっかけもなかったから、基本も知らなかった。
さっき、同時とか書いたけど厳密に同時ではなくて、見た目には同時に動いているように見えるという意味です。
作り方としては、入力をとにかく取り込んで(待たないで)、自機の動きを変化させて、もし範囲外だったら変化させないで、
敵機の動きを計算して動かして、もしミサイルが発射されたらその動きを計算して表示を動かして、
当たったかどうか判定させて、もし当たったらスコアを計算して表示を更新する。
このサイクルを繰り返すわけです。こうすると、見た目には全て同時に動いているように見えます。
処理に時間がかかってしまうと遅くなるのは当然として動きが鈍くなるから、できるだけ詰めたり、整数型の変数を使うのは勿論、マシン語で処理したり・・・
敵を動かすのも、毎回1サイクルごとに動いていたら動きが細かすぎてダメだから、何サイクルごとに一コマ動かすとか、あるいはレベルによってスピードを可変させたりとか、そんな工夫も入れるのでしょう。
最初の頃はベーマガ等に載っているリストを打ち込んで試すことを繰り返すだけで、中身までは理解できませんでした。遊んでも(私がドンくさくて)すぐ終わってしまうから、打ち込んで満足しただけで終わった。
むしろ、グラフィックに興味を持ち始めて、あのMZ-2000の広告にあるような帽子みたいな形とか不思議な模様を描くのが楽しかったものです。一時期、かなり夢中になりました。
なんだっけ、パソコン・グラフィックスといった本を買ってきて試していました。もともとPC98用だから解像度をMSXのSCREEN2に合わせて縮小しなければなりません。荒いけど、まあそれなりにできた。
どうして関数だけで花束のような模様が描けるのか、不思議で仕方ありませんでしたけど、それを深く追究していけば数学の天才になったかも。
円を少しずつ変形させて描き、コマ送りすると回っているように見える、というのも自分なりに考えてやってみました。
今のPCだったらリアルタイムに描くなんて普通ですけど、MSXだから1枚描くのも大変。ビデオに録画しておき、あとで早送り再生すれば、円がくるくる回っているように見えました。
きっかけは高校で見た、オシロスコープのリサージュ波形がくるくる回るのが格好よくて、なんとか再現してみたかったのでした。
2つの発振器を用意して、オシロのX-Y軸それぞれに接続して、適当にレベル調整します。周波数を変えていくと、円がくるくる回ったりゆっくりになったり、不思議な模様を描いたりします。見ているだけで飽きません。
雑誌の文通欄で知り合った人とプログラムを交換する、ってのもやりました。
自分なりに変なプログラムを作って相手に送り、相手からもカセットが送られてきたので試したら・・・まるで市販ソフトのようなクオリティ。
まさかそんなすごい物が送られてくるなんて。そのレベルの違いに、私はとっても恥ずかしくなりました。私のは、とても人に見せられるようなものではありませんでした。
当時はプログラムの交換手段が無く、モデムと電話回線を使う人だって周囲にはいませんでした。したがって雑誌から打ち込むか、付録のソノシートを苦労してLOADするか、サークルに入って交換するか。やっぱり会報に載っているリストを打ち込むのです。
MSXのSOUND文 (音作り編)
2025.08.17
あとで思いついた事、いや、普通に誰でも思いつくでしょうけど、
PSGの各レジスタ、設定値を画面に一覧表示して、自由に選んで操作できるようなプログラムを作ったら良かったのか。
すでに有ったのかもしれないけど知らない。
画面上だと操作しづらいので、ボリュームを並べたものを作り、ジョイスティックポートから読み込ませる物だったら使いやすそう。
ジョイスティックポートはボリュームのアナログ入力もできますからね。外付のIC回路は必要ですよ。実際、CDS等をつないで遊んだりした事がある。
ちょっとボリュームを回して、ボタンを押すと音が出て、もうちょっとこっちかなと回して、また音を鳴らしてみて・・・最終的な値を記録して使う。ゲームなどの効果音として。
もう今となってはどうでも良くなってしまいましたが・・・当時そんなのを思いついて作っていたら、今とは違う未来になっていたかも?
PSGの各レジスタ、設定値を画面に一覧表示して、自由に選んで操作できるようなプログラムを作ったら良かったのか。
すでに有ったのかもしれないけど知らない。
画面上だと操作しづらいので、ボリュームを並べたものを作り、ジョイスティックポートから読み込ませる物だったら使いやすそう。
ジョイスティックポートはボリュームのアナログ入力もできますからね。外付のIC回路は必要ですよ。実際、CDS等をつないで遊んだりした事がある。
ちょっとボリュームを回して、ボタンを押すと音が出て、もうちょっとこっちかなと回して、また音を鳴らしてみて・・・最終的な値を記録して使う。ゲームなどの効果音として。
もう今となってはどうでも良くなってしまいましたが・・・当時そんなのを思いついて作っていたら、今とは違う未来になっていたかも?
2025.08.17 18:37
|
