- 締切済み
DXRubyのプログラムの書き方を教えてください
プログラム初心者です(VBAしかかまったことありません) タイピングゲームなるものを作ろうと思っていますが以下の処理の表現(書き方)が分かりません。 リファレンスなどいろいろなサイトを見ましたがうまくいかないことが多かったので... 以下、温かい目で読んでください。 メニュー画面で難易度を選択する(SPACEでスタート) ゲーム開始(決まった問題数をこなすと終了、時間:カウントアップ) リザルト画面(かかった時間を出力、SPACEでメニューへ戻る) くらいできればいいと思っています。 全くわからないので全部教えてもらいたいくらいなのですが部分的に質問させてくださいm(_ _)m ・あらかじめ配列に格納した日本語(かな)をランダムで表示する (アルファベットの表示はできたのですが...) ランダムで整数を取得するのがうまくいきませんでした。 ・キーボードから入力する キーボードで打ったものを取得し、問題と比較するのに使います ・Window.loop do以前にfont = Font.new(100)と宣言したが、違うフォントサイズも使いたい ・画面の移り変わりの処理 SPACEでゲーム画面へ→条件を満たすまでその画面をキープ 「別に転がってるタイピングゲーム使えばいいいじゃん」 などの回答はご遠慮ください。 注文が多いようですが、具体的な文法を提示していただけると助かります。 ご協力お願いします
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- msgbox_pro
- ベストアンサー率0% (0/0)
どうも。DXRuby使いです。大体2~3年使っています。 VBAも学んでいるので、なんとなくですが状況は分かります。 4点のご質問に順にお答えします。 ・予め配列に格納した日本語をランダムで表示する Rubyは配列も高機能なので、実は「ランダムに1つ取り出す」というメソッドが有ります。`sample`メソッドです。 ------------------------------ ary = ["あ", "い", "う"] #こんな感じの配列から str = ary.sample #これだけでランダムに要素を取り出せる p str p ary.index(str) #勿論、あとからインデックスを取得できる ------------------------------ 文字列の描画は大丈夫ですよね。 ・キーボードから入力する どうやら、平仮名を受け取る必要があるようですね。 Input.keyPush?などでキーボードの押下を判定すれば理論上は可能です。難しいとは思いますが…。 もう一つだけ方法が有ります。 「DXRuby Wiki」の「ファイル置き場」(http://dxruby.sourceforge.jp/cgi-bin/hiki.cgi?%A5%D5%A5%A1%A5%A4%A5%EB%C3%D6%A4%AD%BE%EC)にDXRubyの開発版(1.5.17)が有ります(Ruby2.1用のみです)。 この開発版では、Input::IMEというモジュールが有り、IMEからの文字入力を扱うことが可能となっています。添付されているreadme.txtに説明が有ります。 しかし、こちらも簡単ではないようです。 ############################## こちらは「方法」とは少し違いますが、Input::IMEを使ったコードの例としてDXRubyWSというのが有ります。 https://github.com/mirichi/dxrubyws DXRubyの作者さんが作っている物です。 右側にある「Download ZIP」でzipファイルとしてダウンロードし、好きな場所に展開した後、sample/minsample.rbを起動すると、テキストボックスが有るはずです。 ############################## つまりは、全角文字の入力は簡単ではありません。しかし不可能でもありませんので、挑戦する価値はあると思います。 詳しい事で質問したければ、別に質問を投稿した方が良いと思われます。 ・Window.loop以前に宣言しなかったフォントを使用したい 様々な解決方法が有りますが、ここではハッシュ(連想配列;Hash)を用います。 配列が連番をキー(index)に情報を格納するのに対し、ハッシュはキーの制限が有りません。 こんな感じです。 ------------------------------ hash = {} #中括弧を使う hash[5] = "五" #キーは連番じゃなくていい hash["8"] = "八" #文字でもいい hash2 = {6 => "六", "9" => "九"} #こう定義もできる ------------------------------ ハッシュはデフォルト値をブロックで設定できます。 ------------------------------ h = Hash.new{|hash, key| #登録していないキーが呼び出されると、 #第一引数(hash)に自分自身を、 #第二引数(key)に呼び出されたキーを渡して実行される #例えばこうすると、キーを文字列に変換した値が自動で登録される。 hash[key] = key.to_s } ------------------------------ これを応用すると、 ------------------------------ MyFont = Hash.new{|hash, key| #キーをフォントサイズとするFontを自動で作る hash[key] = Font.new(key) } MyFont[100] #自動でFont.new(100)をしてくれる MyFont[100] #2回目以降は同じものをくれる MyFont[50] #別のサイズも自動で作れる ------------------------------ MyFontという定数に、サイズを渡すとFontを返してくれるハッシュを代入できました。 ・画面の移り変わりの処理 Window.loopの前に、画面の管理用の変数を作っておきます。 ------------------------------ flag = false Window.loop do if flag #ゲーム画面の処理 else flag = Input.keyPush?(K_SPACE) #SPACEが押されたらflagがtrueになる end end ------------------------------ 以上です。いかがでしょうか?
お礼
ご丁寧な説明、アドバイス感謝いたします。 本当に全くわからない状態だったので助かりました。 アドバイスを生かして何とか完成を目指そうと思います。 ありがとうございました。