ページ 11

C#のコンソールアプリケーションとDXLibでノベルゲームを作ってますが

Posted: 2014年8月04日(月) 16:57
by サジール
私は今中2で最近プログラミングを始めました
ノベルゲームを作っていて
文章を流す際に必要となる キーの押した瞬間だけ反応する関数 を作ろうとしてます
このサイトを参考にしましたが、C++を扱ったことがなくまたC#歴も浅いためC#風に書き換えることができませんでした…
どなたか教えてください…

Re: C#のコンソールアプリケーションとDXLibでノベルゲームを作ってますが

Posted: 2014年8月05日(火) 10:40
by ソーン
ほとんどの人はタイトルがよくわからないと思います。
DxLibは基本的にC++用のライブラリですし、コンソールアプリケーションならば文字だけなので描画用のライブラリはいらないはずですし...
そもそもキーの押した瞬間だけ反応する関数は抜きにして基本的な形は出来ているのでしょうか。

Re: C#のコンソールアプリケーションとDXLibでノベルゲームを作ってますが

Posted: 2014年8月05日(火) 13:03
by Hiragi(GKUTH)
DxLibには一応C#版が存在します(機械的に中身を変換しているだけのようですが。)
私はまだC#版DxLibを見ていないので分かりませんが、
質問者様がやりたいのはコンソールアプリケーションで、キーボード入力だけDxLibのモノを使いたいという事ではないでしょうか?
(ノベルゲーならば勿論画像の表示や音楽の再生が必要なのでコンソールで出来るとは思いませんが、)
そうでないとしてもキー入力された瞬間だけを判定するソースコードはこちらのサイトのモノからほんの少し変えるだけでいいと思いますが。

Re: C#のコンソールアプリケーションとDXLibでノベルゲームを作ってますが

Posted: 2014年8月05日(火) 20:45
by Bull
ノベルゲームなら、Console.KeyAvailable と Console.ReadKey() で間にあうような気もしますが、
DxLib 風のキー入力関数って、こういうことでしょうか?

コード:

using System;
using System.Threading;
using System.Runtime.InteropServices;

class prog
{
    [DllImport("user32.dll")]
    public static extern short GetAsyncKeyState(int key);

    static void GetHitKeyStateAll(int[] key)
    {
        for (int i = 0; i < 256; ++i)
        {
            if ((GetAsyncKeyState(i) & 0x8000) != 0)
                key[i] = 1;
            else
                key[i] = 0;
        }
    }

    static void Main(string[] args)
    {
        int[]   key = new int[256];
        do
        {
            GetHitKeyStateAll(key);
            if (key[0x20] == 1)
            {
                Console.WriteLine("スペースキー入力");
                Thread.Sleep(500);
                continue;
            }
            if (key[0x58] == 1)
            {
                Console.WriteLine("X キー入力");
                Thread.Sleep(500);
                continue;
            }
            if (key[0x5A] == 1)
            {
                Console.WriteLine("Z キー入力");
                Thread.Sleep(500);
                continue;
            }

            Thread.Sleep(10);

        } while (key[0x1b] == 0);
    }
}