またオセロプログラム書いてるんだけど

Posted on

こんな本かって来ました.

とりあえず今の状態を確認してみたところ,家にあった昔のVAIO-C1MRX(クルーソー0.7GHz)で動かしても,今のメインマシンのテトラ君2号(Pen4 3.0GHz)でも大して速度が変わらないんですよ.

CPUが違うとはいえ,クロックがこんなにも違うのに実行速度が同じってことは,別の部分に足を引っ張られて思考ルーチンが遅くなっているということ.

で,真っ先に思い浮かぶのがメモリアクセス.かなり無茶してます.盤面を元に戻すために配列のコピーをしたりとか普通です.

ぱっと本を読んだところ,メモリアクセスを最低にするためのテクなんかも載っているようです.

オリジナリティを無くさないためにほどほどにしつつ,参考にしたいと思います.

修飾キー設定用のJButton拡張クラス・キーリスナを設計しよう

Posted on

タイトルのとおりです.私が色々やった結果を乗っけてます.

ソースは汚いのであまり乗せたくない・・・.

キーリスナに関して

KeyEvent#getModifiers()やKeyEvent#getKeyCode()を使って判断していきます.

何のキーを押しているかどうかを判断するには,KeyTypedかKeyReleasedを使うしかありません.

また,KeyReleasedを使うと,ユーザが

  • 修飾キーを押す
  • 別の普通のキーを押す
  • 修飾キーを離す
  • 別の普通のキーを離す

という順番で入力した場合,修飾キーしか判断されません.

(離す順番が逆なら大丈夫.)

というわけでKeyPressedを使って判断します.

しかし,KeyPressedを使ってもユーザが修飾キーを押せば修飾キーのみを,普通のキーを押せば普通のキーしか判断されません.

というわけで修飾キーの時は無視します.

最終的にKeyPressedのソースはこんな感じ.

public void keyPressed(KeyEvent e){
if(e.getKeyCode() == e.VK_SHIFT ||
e.getKeyCode() == e.VK_CONTROL ||
e.getKeyCode() == e.VK_META ||
e.getKeyCode() == e.VK_ALT){}else{//修飾キーの場合は無反応
/*キーの検出*/
/*ボタンテキストにキーのテキストを設定*/
/*キーの設定*/
/*リスナ(自分)の削除*/
}
}

KeyEvent#getSource()を使うとソースが省略できるかも.

Java:ショートカットをつけよう

Posted on

Frame.addKeyListener(KeyListener e)では取得できない!

とりあえず真っ先に思いつく方法としてキーイベントを使ってみる方法があると思うんですが・・・.

ここを見る限り,フレーム上にキーリスナを取得しそうなコンポーネントがあると,もうだめ.

JFrame#processKeyEventをオーバーライドしてみるが・・・しかし・・・駄目.

このメソッドでキー入力は全て処理しているはずですから,これをオーバーライドすれば良いに違いない!

というわけで,オーバーライドしてショートカット処理をしてみたのですが,どうも呼ばれません.

デバッガで確認済み.ここに通知が来ないということなんですね・・・.

InputMapを使え!

こちらを見てください.これのとおり,InputMapとActionMapを組み合わせて使えば,出来るのではないかな・・・と.

とりあえず実装してみました.

・・・お,出来る!カンペキです.

ただし,問題点があって,ShiftやAltなどの修飾キーだけでは使えません・・・.

これは仕方が無いですね・・・.逆に修飾キーが無くても使えるので,まあ十分でしょう.

ショートカットキーに必ず修飾キーをつけなくちゃいけないというのも面倒ですから.

Google凄いよGoogle

Posted on

Google のサービス

知ってる人は知ってるんですが,やっぱり凄い.

個人的にはMAPに大感動です.Webでここまでするとは.

地図にGoogleロゴが入ってたり芸が細かい.

あと近くの店を検索してMAPに表示できるのも便利ですね.

距離とかが出るのも(・∀・)イイ!

毎日食べるものに困ってるサラリーマンとか便利じゃないんですかね.

GoogleがYahoo!みたいに妙に動き出してきましたけど,うまくいくだろうか.

まあY!とはすこしセンスが違いますけど.

Googleがインターネットの「悪の帝国」*1と呼ばれる日も来るのでしょうか.

*1:※マイクロソフトとかと対比してます

なに!Javaからネイティブコード使えるの?

Posted on

Javaからネイティブコードを使ったプログラムが書けるらしい!

これなら妄想が実現できるかも!?

ここを参考にBorland C++ Compilerで組んでみますか・・・.

あと問題になるのは,プラグイン方式をどうやって実装するか.

サブクラスの検出とか出来るのかな・・・?

教えてえろいひと.

理想の全自動操縦ソフト

Posted on

どうせ技術から言って出来るわけが無いんですが,とりあえずアイデアぐらいなら出せるわけで.

エミュレータからメモリの値を取得できることが必須条件と思われます.

それによって,

・現在の主人公の場所

・パソコンを開いてるときは今どのポケモンを指しているのか

・個々のポケモンの個体値

・タマゴは生まれているのか,いないのか・・・

などなど様々な情報を読み込んでその情報をもとに操作できるわけです.

とりあえず誰かファイヤーリーフ以降の解析対策について教えて下さい・・・_| ̄|○

個々のゲームごとの解析対策に関しては,プラグイン方式で簡単に対応できると良いですね.

で,メモリを取得してそれを使ってうまくやれば

  1. そろそろ寝る時間だ
  2. エミュレータをおもむろに開き必須の個体値をセットする(めざパゴースト威力 == 70 && 攻撃とすばやさ == 31 など)
  3. 寝る
  4. うわーい良個体値ゲットだぜー

という凄い電気代の無駄使いが出来るわけですw

正直そこまでやるなら改造使ったほうが・・・いや,なんでもない.

規約とか気にせずにいられるから良いんだよ!

もしも電気代を無駄使いしたくなければ喜虎さんがやろうとしてるGBAに専用のハードウェアをつける,という方法が考えられますが,もしもメモリの中身を見たければPARをハックして自由に使えるようにしなければならない訳です.かなり,大変.

またPARはフックと呼ばれる動作を行うためにメモリをほんの一部使うようなのですが,もしかしてゲームが使うメモリ空間と被ってんじゃないの?

などなど結構不安要因は残ります.

あ,いいこと思いついた.

PARでフックを行ったときに飛ばすプログラムをうまく書き換えればPARのみで自動操縦できない?

出来るなら一番気楽ですよね.

それは普通の改造コードとして書き換えられるのかな?持ってないから分からないんですけど>PAR

メモリに手をつけてる点でもう改造になっちゃうから大会には出れない上に*1,メモリ上にそこまでの結構大きなプログラムを書くほどの容量が残ってるとは思いませんけど.

*1:PARで自動操縦したかったら,フックを行って飛ばした先のプログラムでキー入力を保存している所を書き換えなくちゃいけない

Phlogiston for GBA:ショートカットつけたお

Posted on

基本的にキーボードやジョイパッドを用いてエミュレータを操作しているので,マウスを使って一々起動したり停止したりするのがめんどくさい,といううことでショートカットキーつけました.

ショートカットはスペースがオススメですが,そうするとチェックボタンやなんやらにフォーカスが移っているときにショートカットできません・・・.

その際はボタンで自動操縦を開始すればボタンにフォーカスが映るので後は普通にショーカットが使えます.

その多起動時にサーナの可愛い起動画面が現れますw

ソフト自体がかなり重いので,遅いマシンだと起動にかなり掛かるんですよね.

で起動してるかどうかよく分からないし,寂しいので入れてみました.

ダウンロードはこちらから.

傷害:名古屋の路上生活男 初公判で「私はほとけ」

Posted on

傷害:名古屋の路上生活男 初公判で「私はほとけ」

  巡回に来た名古屋市職員にけがを負わせたとして、傷害などの罪に問われた路上生活者の男の初公判が1日、名古屋地裁であった。男は逮捕時から一貫して「ほとけ」と名乗り、氏名や年齢などは明らかにしておらず、公判の人定でも名を聞かれ、「こじきのほとけです」と述べた。また、男は起訴事実を否認した。

( ゜д゜)

(つд⊂)ゴシゴシ

「こじきのほとけです」

(;゜д゜)

(つд⊂)ゴシゴシ

「こじきのほとけです」

  _, ._

(;゜ Д゜)

Phlogiston for GBA 改良中

Posted on

宿題やれ>自分

それはさておき.

ショートカットキーが付くと楽だなぁ,ということでやっています.

とりあえずキーの入力を検知したいのですが,どうもうまくいかない・・・.

JFrameにaddKeyListenerをしてもフォーカスの問題からどうもうまくいかず.

(他のKeyListenerを持っているクラスの方にしか通知されない・・・.)

enableEvents(AWTEvent.KEY_EVENT_MASK);

としてJFrameを拡張したクラスで

protected void processKeyEvent(KeyEvent e)

をオーバーライドしても検出できず.

誰かいい方法教えてください・・・.これができないと折角の数時間の意味が・・・.

さらなるエミュレータ高速化をめざして

Posted on

こんな事聞いたことがあるんです.

処理の中身として,

描写以外の処理:2割

描写     :8割

ということは,不要なレイヤを表示させないようにすればスピードは上がるのでは!?

まともに冒険するならともかくタマゴ孵化するだけならおじさんが見えればそれで良いわけでw

レイヤを設定しOBJレイヤだけを表示させました.

するとスプレイトで表現されている人物しか表示されません.

速度は350-370%ぐらいだったのが370-400%が出るようになりました.

が,しかしやっぱりまともに操作できません.やっぱり普通にやります・・・.