NEW  |  HOME  |  OLD

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

NEW  |  HOME  |  OLD

1つの変数で複数の回数カウント

9/4
02:13 (Momizi) 1つの変数で複数の回数カウントってどうやったらいいかなぁ・・・
02:13 (Oracle) うにゃ?
02:14 (Momizi) 1と2と3というフラグがあって、そのフラグが立つごとに回数を+1するんだけど
02:14 (Momizi) それを1つの変数でやるとしたらどうしたらいいかなぁと
02:15 (Oracle) それって何回までカウントするの?
02:15 (Momizi) 多くても10くらい
02:15 (Oracle) んじゃ余裕だな
02:15 (Momizi) ふむ
02:15 (Oracle) ビット演算使いましょう
02:15 (Momizi) bit演算なー、私フラグ以外で使うの苦手なのよね(
02:15 (Oracle) がんばれ
02:15 (Oracle) 使えると凄い便利だぞ
02:16 (Oracle) 余ったビットの領域でカウンタにも使えるからな
02:16 (Oracle) しかもビットでやるとな、変数いじられてもカウンタは一定範囲で止まってくれるから
02:16 (Oracle) 無限ループも防止してくれるんじゃ
02:17 (Momizi) 確か((var(X)&Y)/Z)みたいな方式だっけか
02:18 (Oracle) うむ
02:18 (Oracle) var(0)
02:18 (Oracle) 0 - 511 画像回転角度 (360)
02:18 (Oracle) 512 - 65535 イントロカウンタ (120)
02:18 (Oracle) 65536 - 8388607 回転停止時間 (120)
02:18 (Oracle) 8388608 - 134217727 回転停止ディレイ (15)
02:18 (Oracle) 134217728 - 2147483647 回転停止ディレイカウント (15)
02:18 (Momizi) うむ。わけわからぬ
02:19 (Oracle) 変数一個でコレだけの役割を持たせられるようになる
02:19 (Momizi) あー
02:19 (Momizi) *2でbitが増えるなら/2でbitが減るって事かな
02:19 (Momizi) bitというか、桁
02:20 (Oracle) そうね
02:20 (Oracle) 一例とすると
02:21 (Oracle) 512が1カウント扱いとすると
02:21 (Oracle) これを127カウントまで使えるようにしたい
02:21 (Oracle) (var(X)&512*127)/512
02:22 (Oracle) こんな感じになる
02:22 (Momizi) ほー
02:22 (Oracle) 実際に1~127の数字を割り当てると正しく出てこないかい?
02:23 (Oracle) 512なら1って帰ってくるし、1024なら2って帰ってくる
02:23 (Momizi) せやな
02:23 (Oracle) んで、512*127のおかげで127カウント以上にはならない
02:24 (Momizi) ふむふむ
02:24 (Oracle) というのをオススメします
02:25 (Oracle) 絶対できたほうがいい・・・変数が浮く。
02:25 (Momizi) せやなぁ・・・
02:27 (Momizi) んーっと・・・
02:28 (Momizi) 0-31(20) :1 32-2023(20):2 1024-32767(20):3って感じでいいのかね
02:28 (Momizi) 一応最大を20とした場合だけど
02:29 (Oracle) 2023の下記間違いはあるけどOK
02:29 (Oracle) ばっちりだよ
02:29 (Momizi) 2047か(
02:29 (Momizi) んで
02:30 (Oracle) ちゃう1023や
02:30 (Momizi) あれ
02:30 (Oracle) 32*20は640だから512で足りず1023まであればいける
02:30 (Momizi) 640だから、確かにw
02:30 (Oracle) にゃにゃ、こういう計算は慎重にしないとね
02:30 (Momizi) せやね
02:31 (Oracle) デバッグとかでお試しに作ってみるのがいいねー
02:31 (Momizi) 1:(var(X)&1*20)/1 2:(var(X)&32*20)/32 3:(var(X)&1024*20)/1024
02:31 (Momizi) かな
02:31 (Oracle) ほ、ほげ・・・?
02:31 (Oracle) 一個ずれてる・・・
02:32 (Momizi) ほんまや(
02:32 (Oracle) 1:(var(X)&31)
02:32 (Momizi) せやね
02:33 (Oracle) 2と3も間違ってるからよく考え直す
02:34 (Oracle) おおう・・・
02:34 (Oracle) そうだ、私の方式とは違うんだ
02:35 (Momizi) ぬ?
02:37 (Oracle) えーと・・・(var(X)&31)、(var(X)&1023)/32、(var(X)&32767)/1024
02:37 (Oracle) 私はこうやって書くんだよねぇ
02:37 (Momizi) あー、なるほど
02:37 (Oracle) 普通にそれで合ってる。ごめんち
02:37 (Oracle) 増える可能性を考慮して、使える領域全部使えるようにしてるのよね
02:38 (Momizi) 元から()内を限界値で見てるってことでいいのかな
02:38 (Oracle) そそ
02:38 (Momizi) そっちのがいいかもねー
02:38 (Momizi) ただ、越えたら困る場合は前のが確実なのかな
02:38 (Oracle) いんや
02:38 (Oracle) あれでも無意味
02:38 (Oracle) 超えたらまた0になるもの
02:38 (Momizi) ふむ
02:39 (Momizi) あぁ、そっか
02:39 (Oracle) だから(var(X)&31)<20とかで防ぐ
02:39 (Momizi) なるなる
02:39 (Oracle) これで完璧だよ
02:39 (Momizi) やった!また1つ賢くなったよ!
02:39 (Oracle) 絶対メモしておかないといけないからねこれ
02:39 (Oracle) 忘れると悲惨だよ
02:40 (Oracle) 使い方慣れるとこれが便利で便利でね・・・
02:40 (Momizi) よし、ログ保存完了(
02:41 (Oracle) あ、ログも大事だけど変数よ(
02:41 (Oracle) 変数に使ってる範囲、これこういうものってメモ
02:41 (Momizi) 確かにこれメモ忘れたらひさんやな
02:41 (Oracle) うむ
02:42 (Momizi) bit演算のフラグですらないと困るのに(
02:42 (Oracle) これでもみじの記述がまた一つ洗練される
02:42 (Momizi) おうよ
02:42 (Momizi) だんだん私の記述ぽくなくなってきたよ(
02:42 (Oracle) ある範囲内って決まってればそれは全部ビット演算に取り込める
02:42 (Momizi) ヘルパー数なんかはこれで十分やね
02:43 (Oracle) そそ
02:43 (Momizi) 絶対にその範囲でしか変動しないものだし
02:43 (Oracle) 56まで記録するのに64まであればいいから7bitあれば記録できる
02:43 (Momizi) 32bitもいらんかったんや!
02:44 (Oracle) まだ25bit分も使える
02:44 (Oracle) と考えると素晴らしい
02:45 (Momizi) 実際20もいらんから15にして圧縮しよう
02:45 (Oracle) 分かると楽しいよね
02:46 (Momizi) うむうむ
02:46 (Oracle) 今まで変数無駄にしてきたーって悲しい気持ちになったけど(
02:46 (Momizi) 全部書き換えたいけどそんな余力はなかった(
02:46 (Oracle) しゃーね
02:46 (Oracle) これは後からやるもんじゃない
02:46 (Momizi) 流石にシステム変数は弄るかな
02:46 (Momizi) ライフとパワーを1つで管理してやる・・・!
02:47 (Oracle) パワーはそうね
02:48 (Oracle) 1023+1023で20bit。まだ12bitある
02:48 (Momizi) ついでにヘルパー数ですね。
02:48 (Oracle) 24bit、残り8bit、255までいける
02:48 (Momizi) お、おそろしや・・・
02:50 (Momizi) あ、ちなみにカウントするだけならvalue=var(X)+32とかでいいのかな
02:50 (Oracle) そうねー
02:50 (Oracle) var(X):=var(X)+32
02:51 (Oracle) 大体はこれを使うことになるかなー
02:51 (Momizi) 初期化は・・・var(X):=var(X)-(var(X)&1023)かな?
02:51 (Oracle) そうね
02:51 (Momizi) ふむ
02:51 (Momizi) 完璧じゃなイカ!
02:52 (Momizi) 早速仮実装してみるお
02:52 (Oracle) あ、ちょっとまった
02:52 (Momizi) うぇい
02:53 (Oracle) それだと下の領域を巻き込む
02:53 (Momizi) ・・・・ほんとだ(
02:54 (Oracle) だから32*15・・・かな
02:54 (Oracle) カウント1に値するもの*限界量
02:54 (Momizi) var(X):=var(X)-(var(X)&32*15)
02:54 (Momizi) ってことかな
02:54 (Oracle) そそ
02:55 (Oracle) var(X):=var(X)-(var(X)&1024*15)
02:55 (Momizi) カウント値が1の時だけvar(X):=var(X)-(var(X)&15)にすればいいのか
02:55 (Oracle) そそ
02:55 (Momizi) 15じゃねぇ、31や(
02:56 (Oracle) ん・・・15はヘルパー数か(
02:56 (Oracle) いや違うごめん忘れてくれ(
02:56 (Momizi) くるちゃんあなた疲れてるのよ・・・
02:56 (Momizi) 15はさっき言った通り20から15にする予定だからだよ(
02:57 (Oracle) うん
02:57 (Oracle) まあそんな感じでOK
02:57 (Momizi) んじゃ一回実験してみるぜ!
03:02 (Momizi) ふむ
03:02 (Momizi) 流石に5bit目までの計算は問題ないか
03:02 (Oracle) ん、どこミスった?
03:03 (Momizi) ん?
03:03 (Oracle) どこか(
03:03 (Momizi) あぁ、いやまだ&31までしかしてないよw
03:03 (Oracle) そか(
03:03 (Momizi) だから流石にここでミスることはなかったって意味でw
03:03 (Oracle) 先走る人なんですごめんち
03:03 (Momizi) ドジっ子くるちゃん
03:03 (Oracle) もう少し待てる広いこころ、がんばる
03:11 (Momizi) おおぉ・・・・
03:11 (Momizi) できてる・・・・
03:12 (Oracle) おめおめ
03:13 (Momizi) これは感動ものですね
03:13 (Oracle) 感動ものだよ
03:13 (Oracle) 夢が広がる
03:14 (Momizi) ほわぁ・・・ってなった(
03:14 (Momizi) きちんと03:23 (Oracle) うにゅ
03:23 (Momizi) とりあえず6個のカウントを行えるようになった
03:24 (Momizi) そういえば
03:24 (Momizi) 試合時間カウントしてる変数も使おうと思えば他と一緒に使えるのかな。最大50万とかに設定して(
03:25 (Oracle) うん
03:25 (Oracle) 50万だったら
03:25 (Oracle) 524288以降だから
03:26 (Oracle) まだ13bitも余ってる
03:26 (Momizi) うへー・・・
03:26 (Oracle) 50万も使うか?
03:26 (Momizi) いや、あくまで保険として
03:26 (Oracle) 5万あっても5万くらいで十分だと思うが・・・
03:26 (Oracle) 日本語がおかしい
03:26 (Momizi) 例えばだけどさ
03:27 (Momizi) とおりすがる氏の大会とかだと1時間戦わせることがあるじゃんか
03:27 (Momizi) このときの最大フレームって大体21万だから、大目に見て50万(
03:27 (Oracle) んで50万まで動作を設定するのかい?
03:28 (Oracle) それなら、5万までにして、5万になったら数値減らしてループの構造を作ればよくないかな
03:28 (Momizi) そ れ だ
03:28 (Oracle) だろ?
03:28 (Momizi) 賢く生きないとダメね
03:28 (Oracle) こうすると65536までで済むから
03:28 (Oracle) 16bitも扱える
03:29 (Momizi) うへー・・・ってことは、これ変数1つでRoundState=[0,4]のカウント全部扱えそうだな
03:29 (Oracle) 便利じゃろ
03:29 (Momizi) 便利すぎます
03:29 (Oracle) イントロカウンタやtimeや試合後カウンタなんか全部まとめれるぞ
03:29 (Momizi) ちょっと変更するの手間だけど変えてみるかなぁ・・・
03:30 (Momizi) これにはそれだけの価値がある
03:30 (Momizi) とりあえず一番大きくなる上に使用頻度が高いroundstate=2のカウント値を1にすればいいかな
03:31 (Oracle) どこでも自由よ
03:31 (Oracle) 自分の扱いやすいように
03:31 (Oracle) 私も大きいものを1にするね。
03:31 (Momizi) いや、あんまり大きい値でroundstate=2カウントすると1行あたりの文字数の問題が(
03:32 (Oracle) うん、考えたら多分文字数だと思った(
03:32 (Oracle) 直で取り出せるからね
03:32 (Momizi) だねー
03:33 (Momizi) うわー・・一気にやることが増えた・・・w
03:33 (Oracle) それだけやれることがあるってことなのさ
03:34 (Oracle) 知ればしるほどやることは増えるが、豊かにはなる
03:34 (Momizi) 後、この使い方ならフラグで用意してる変数であまりまくってるところを有効活用できるのか
03:34 (Oracle) そうそう
03:34 (Momizi) 変数が圧縮されていく(

NEW  |  HOME  |  OLD

Comment

コメントの投稿


管理者にだけ表示を許可する

Trackback

http://kyoakumugenirc.blog61.fc2.com/tb.php/2761-ba5fdb83

NEW  |  HOME  |  OLD

 検索フォーム


 全記事表示リンク

 全記事表示(500件ずつ)


 プロフィール

vesper

Author:vesper

IRCチャンネルの
#凶悪MUGEN
#凶悪MUGEN_雑談
のログからMUGENに関するものを編集・公開しています。
修正した方が良い箇所があった場合は知らせてもらえると助かります。
MUGEN界隈からはリンクフリーです。
その他からのリンクはご遠慮ください。
このブログをリンクに追加

IRCへの入り方などは
IRCに関する記事
をご覧ください。

簡易凶悪MUGEN IRC情報
・ホスト名
 [irc.friend-chat.jp]
・ポート番号
 [6664]
・チャンネル名
 [#凶悪MUGEN]
 [#凶悪MUGEN_雑談]
 (以下はお好みで)
 [#凶悪MUGEN_艦これ]
 [#凶悪MUGEN_スマブラ]
 [#凶悪MUGEN_麻雀]
 [#凶悪MUGEN_緋想天]
 [#凶悪MUGEN_アカツキ]
 [#凶悪MUGEN_小説]
 [#凶悪MUGEN_絵チャ]

・推奨IRCクライアント
 LimeChat2


 カテゴリ

記述の子カテゴリは目安程度に考えてください。

 最新コメント


 最新記事


 カウンター

累計の閲覧者数:

現在の閲覧者数:

 RSSリンクの表示


他ブログ更新情報(最新70件)

仕様上、下記のリンク一覧でサイトリンクにあるサイトはこの一覧に出ません。

Twitter


基礎リンク集


リンク

サイトに断り書きがない限りリンクさせてもらっています。
リンクしてほしくない場合はお気軽におっしゃってください。

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。