Kによる改造のヒント集

  • (by K, 2006.09.27)
  • 発展課題のページ(全部読む前にここを読むのは混乱するのでおすすめじゃないです)
  • 思いつくままに適当に書いています。

ヒント集

  • ゲームなどを作ると毎回違う乱数がほしくなります。乱数のパターンを変えるためには srand() という関数を使うのですが、パターンを変えるための番号(乱数の種といいます)も毎回同じだと結局変わりません。
    • それで一般的なOSでは時刻取得APIを使って、そのときの時刻を乱数の種にします。
    • ちなみにOSASKでは、乱数の種を得るための専用APIがあって、それを使うと「はりぼてOS」でいうところの timerctl.count の値(をもとに計算した値)が得られます。これだと秒よりも速い速度で変わるので、乱数の種には向いていると思います。
      • 将来はこのAPIが返す値を設定可能にして(timerctl.countの値モードと固定値モード)、ゲームのデバッグをやりやすくしようと考えています(ゲームのデバッグ時に乱数のパターンを毎回同じにできるようにすると確認しやすい)。

  • 今まで自分が書いてきた「はりぼてOS」用アプリを見渡してみたのですが、
    api_cmdline(s, 30);
    for (p = s; *p > ' '; p++) { } /* スペースが来るまで読み飛ばす */
    for (; *p == ' '; p++) { }     /* スペースを読み飛ばす */
    というのが一種の決まり文句になっているようです。このようによく使う機能をまとめて、
    p = api_cmdline2(s, 30);
    みたいに書けたらアプリを作るのがラクですよね。こういうAPIを上手に揃えると、使いやすくてコンパクトなアプリが作りやすいOSになれると思います。
  • こういう工夫を思いつけるのはアプリをいくつも作ってきたからですが、つまりアプリをほとんど作らない人はいいOSなんて作れないのです。CPUはOSを作る人のことをよく考えて命令が揃えられているなーと感じたかもしれませんが、それはまさにインテルのおじさんたちがOS開発のことをよく知っているおかげです。

こめんと欄

  • srandの宣言てどうなっているのですか?starsで毎回違った星空をだしたいと思っていまして。 -- Triangle_Ld. 2009-05-25 (月) 20:16:04
  • ↑関数を自作したら解決しました。すいません。 -- Triangle_Ld. 2009-05-25 (月) 21:03:34
  • 「srandは関数」と書くと初心者は「srandは関数なのか!じゃあ宣言しないとな。でもどう宣言するんだ〜」と、混乱してしまいます。「srandは関数だけど宣言する必要はありません」と書けば初心者も混乱しないと思います。 -- 名無しさん 2009-06-24 (水) 16:23:47

コメントお名前NameLink

リロード   新規 編集 差分 添付   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
Last-modified: 2009-06-24 (水) 16:25:05 (4383d)