全体表示

[ リスト | 詳細 ]

記事検索
検索
イメージ 1
イメージ 2

【プチコン1画面ソフトvol.36】

その奇妙な容姿から、人々の笑いものとされ、見世物小屋で出会った旗本に寵愛され、福を呼ぶ男として自身を模した「福助人形」が大流行となった福助。

幸せな生涯だったと言われるその裏、人々に笑いものにされた恨みつらみが暗い怨念となり福助人形に乗り移り、フクスケとして現代によみがえり人々の幸せを奪う!

フクスケの怨念を浄化し、奪われた人々の幸せを取り返せ!



先日のフクスケ祭りで作成した「フクスケの逆襲」です
【プチコン】フクスケの流血 - Togetter http://togetter.com/li/268411

見た目そのまま、先日のGOKIVADER http://blogs.yahoo.co.jp/pman4416/62889678.html
の改造ですが、6レーン化、速度上昇などの機能追加を行いました

左、上、右、Y、X、A各ボタンが6レーンに対応します。

イメージ 1
イメージ 2

【プチコン1画面ソフトvol.35】

画面上部から突進してくるゴキブリ型侵略者「ゴキベーダー」達を
防御装置「ゴキストッパー」で次々と撃退するのだ!

地球の平和は君にかかっている!

※マイコンBASICマガジン1988年11月号掲載 PC-6001用 GOKIVADER の移植です


左、上、右 or Y、X、A で「ゴキストッパー」を操って襲い来るゴキベーダーたちを撃退してください。
防衛ラインを突破されるとゲームオーバーです

ボタン定義についてはいろいろ迷ったんですが今の形に落ち着きました。
18行目〜20行目でボタン配置が決定されています。1行に押し込むためにわりと無理していますw


開く トラックバック(2)

プチコンの乱数生成関数であるRND()について、どれくらいの偏りがあるのか、可視化して確認した。

プログラムリスト
イメージ 1
実行結果がこちら

【プチコン】乱数テスト

解説


X座標をランダムに選び、下から1ピクセルずつグラフを描く。
ランダムで多く選ばれれば選ばれるほど、その座標は伸びる。

この伸び方で、一部が他より高かったり、低すぎたりなどの偏りがあると、それは乱数が偏るという。
難度か試した限りでは、プチコンのRND()関数は出る数字に偏りはあまり無い様子。

#本当は、出る数値が偏らないだけでなく、その順番も問題になるのだけれど今回はスルー。一画面だし

〜 参考リンク 〜

レトロゲームにおける確率論

番外編 (1)完全確率論の完全ではない理論 2部

NetHack Portal Forum 〜 NetHackの乱数の偏り問題 〜 

番外

数列の規則性 〜 出る数値が偏ってないだけではダメ

カルドセプト サーガ - Wikipedia (バグ問題の項参照)

次回はコレを検証する

開く トラックバック(1)

イメージ 1

イメージ 2

Lボタンを押すたびに処理落ちが!


プチコンでは通常下画面にキーボードが表示される。
で、このキーボードはLボタンでSHIFT切り替えができるのだが、当然プログラム実行中もこの切り替えは有効で、キートップの表記が切り替わる。

で、問題はこの切り替えにも当然ながらDSiのパワーを持っていかれるわけで、Lボタンをゲームに使用していると場合によっては押したり離したりする度に処理が重くなり、フレーム落ちが発生したり…

PNLTYPE"OFF"ならOKじゃん?と思って確認したところ、ムシロ常時重くなる状況で…

VISIBLE でパネルを非表示にしても変わらず。
Lボタンを押さない操作、もしくはLボタンを押しっぱなしのゲームデザインにするしか、手段はないかも…


検証用のコードを貼っておきます。
最下行右側に表示されるの数字が1だと期待通りの60fps、そのほかのときは処理落ち。

PNLTYPE"OFF"のほうが処理が重い、というのはひょっとするとコンソール表示メインだから、というのもあるかも。
ただし、VISIBLE でBG/SPR/GRP非表示にしても状況は変わらなかった

VBScript はイヤ!(我侭)


Windows でデバイス情報にアクセスする必要があったので、「WSHでいいや」と調べると、デバイス情報にアクセスするためのWMI - Windows Management Instrumentationにアクセスすればよいことがわかった

サンプルを検索すると出てくるのは VBScript のものばかり。別に VBScript でもいいけれど、VB精通してないし、覚える気もさらさらない。



WMIを使うスクリプトを簡単に作成する − @IT
http://www.atmarkit.co.jp/fwin2k/win2ktips/756wmicreator/wmicreator.html



WSH/JScript ≒ javascript


WSH は JScript という、MS独自の javascript を拡張した言語(純粋な拡張ではないかも)でも利用可能なので、これを使うことにした。javascript ならまだ文法わかるし、覚えて損は無いだろうと。

#やっぱ文字列処理とか、覚えるの大変だし…
#perlやruby (IronPerlやIronRuby) という選択肢もあるらしいけど、今回は余計なインストールせずにできる方法で



WMI から取得するコレクションを扱う



WMI には WQL というクエリーを発行して問い合わせを行うのだが、この返り値は javascript の Array としては扱えない。
# for (... in ..) も NG だった

さて困った、class 指定すればいいのか?けどコレクションってどうやって定義するの?などと悶々として、あきらめてVBScript 軍門に下ろうかとも思っていたところ、javascript ではなく JScript に機能がありました。



これで、VBScriptに勝つる!



今回作ったもの


接続されているドライブの各パーティションの開始セクタアドレスを調べる WSH/JScript。

/* Win32_DiskPartition.DeviceID="Disk #0, Partition #0"
 * 形式から、DeviceID="XXX" を取り出し、返す
 * 
 */
function get_device_id(path) {
  var devid = "Unknown Device";
  if (path.match(/Win32_DiskPartition.DeviceID="(.*)"/)) {
    devid = RegExp.$1;
  }
  return(devid);
}

/* Win32_LogicalDisk.DeviceID="C:"
 * 形式から、DeviceID="XXX" を取り出し、返す
 * 
 */
function get_drive_id(path) {
  var devid = "?:";
  if (path.match(/Win32_LogicalDisk.DeviceID="(.:)"/)) {
    devid = RegExp.$1;
  }
  return(devid);
}

var comname = ".";
var wmi = GetObject("winmgmts:{impersonationLevel=impersonate}!//" + comname + "/root/cimv2");
var col = wmi.ExecQuery("Select * From CIM_LogicalDiskBasedOnPartition");
var it = new Enumerator(col);
var result = "";

while (! it.atEnd()) {
  var item = it.item();
  var offset = item.StartingAddress;
  result = result + get_device_id(item.Antecedent) + " (" + get_drive_id(item.Dependent) + "):\t" + item.StartingAddress;
  if ((offset % 4096) == 0) {
    result = result + "\t(OK)\n";
  }
  else {
    result = result + "\t(NG)\n";
  }
  it.moveNext();
}

WScript.echo(result);


コマンドラインから
> cscript /nologo partaddr.js

のようにすれば

Disk #0, Partition #0 (C:):     4096    (OK)
Disk #0, Partition #2 (D:):     37008445440     (OK)

てな感じで各ドライブのパーティション開始アドレスの表示と、それが 4KiBアラインメントされているかどうかを表示。
#直接クリックして起動するとダイアログで表示。まあ、便利!

.


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事