合計 昨日 今日

アバター
Tatu
 
記事: 440
登録日時: 2010年11月25日(木) 18:06
お住まい: 北海道
日記: 日記を見る (199)
日記
- 7月 2015
+ 6月 2015
+ 3月 2015
+ 1月 2015
+ 12月 2014
+ 11月 2014
+ 10月 2014
+ 9月 2014
+ 8月 2014
+ 7月 2014
+ 6月 2014
+ 5月 2014
+ 4月 2014
+ 3月 2014
+ 2月 2014
+ 1月 2014
+ 12月 2013
+ 11月 2013
+ 10月 2013
+ 9月 2013
+ 8月 2013
+ 7月 2013
+ 6月 2013
+ 5月 2013
+ 4月 2013
+ 3月 2013
+ 2月 2013
+ 1月 2013
+ 12月 2012
+ 11月 2012
+ 10月 2012
+ 9月 2012
+ 8月 2012
+ 7月 2012
+ 6月 2012
+ 5月 2012
+ 4月 2012
+ 3月 2012
+ 2月 2012
+ 12月 2011
+ 11月 2011
+ 10月 2011
+ 9月 2011
+ 8月 2011
+ 7月 2011
+ 6月 2011
+ 5月 2011
+ 4月 2011
+ 3月 2011
+ 2月 2011
+ 1月 2011
+ 12月 2010
カテゴリー
日誌
1 記事
フィード
次へ

RPG等の会話についてのトピックをみてコードを書いてみました

パーマリンクby Tatu on 2015年7月21日(火) 16:22

「RPG等の会話をスムーズにするためにはどうすればよいか。」で
viewtopic.php?f=3&t=16845

質問者が投稿したコードを見て書き直してみました。

しかし、優れた見本を写すのが一番良いと思うので
私が書いたコードはトピックではなく、ここに置いておきます。
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include "DxLib.h"
 
//KeyおよびgpUpdateKey()については新ゲームプログラミングの館2.9を見てください
//このようにすることでAキーを押しっぱなしにしていても勝手に進みません。
int Key[256]; // キーが押されているフレーム数を格納する
 
// キーの入力状態を更新する
int gpUpdateKey(){
        char tmpKey[256]; // 現在のキーの入力状態を格納する
        GetHitKeyStateAll( tmpKey ); // 全てのキーの入力状態を得る
        for( int i=0; i<256; i++ ){
                if( tmpKey[i] != 0 ){ // i番のキーコードに対応するキーが押されていたら
                        Key[i]++;     // 加算
                } else {              // 押されていなければ
                        Key[i] = 0;   // 0にする
                }
        }
        return 0;
}
 
//会話制御(描画は分けたほうがいいと思う)
void conversation_control(){
 
    //controlとaの意味が分からないのでstate(状態)としました。
    //0:会話なし 1:会話1 2:会話2(選択肢付) 3:会話3(はい選択時) 4:会話4(いいえ選択時)
    static int state=0;
    //bはおそらく選択肢の事だと思われるのでselectに置き換えた
    static int select=0;
 
    //色はint型の変数に格納する
    //この関数の中ならどこでも使えるようにここに書いた
    //黒はbrackではなく、black
    int black = GetColor(0, 0, 0);//黒色
    //コメントが赤ではなく黒になっていました
    int red = GetColor(255, 0, 0);//赤色
    int white = GetColor(255, 255, 255);//白色
 
    //状態によって制御を変える
    //ScreenFlipはメインループの1回の繰り返しで1回だけ使うようにしましょう
    //WaitTimer,WaitKeyで無理やり止めるのは避けたほうがよいと思います。
    //選択肢のついたウィンドウは別の場所に描画するようにしました(同じ場所の方が良ければstateを分ければいいと思います)
    switch(state){
    //Aキーを押したら会話開始。
    case 0:
        if(Key[KEY_INPUT_A] == 1){
            state=1;
            select=0;
        }
        DrawFormatString(62, 350, white, "Aキーで会話が始まります");
        break;
    //会話1
    case 1:
        DrawBox(50, 330, 320, 444, white, TRUE);
        DrawFormatString(62, 350, black, "今あなたは元気ですか?");
 
        //選択肢
        DrawBox(250,186,320,300,white,TRUE);
        //DrawBox(50, 330, 320, 444, white, TRUE);
 
        //上下キーで選択
        if (CheckHitKey(KEY_INPUT_UP) == 1)
            select = 0;
        if (CheckHitKey(KEY_INPUT_DOWN) == 1)
            select = 1;
        //選択肢の文字描画
        if (select == 0){
            DrawFormatString(262, 216, red, "はい");
            DrawFormatString(262, 248, black, "いいえ");
            //DrawFormatString(62, 350, red, "はい");
            //DrawFormatString(62, 382, black, "いいえ");
        }
        if (select == 1){
            DrawFormatString(262, 216, black, "はい");
            DrawFormatString(262, 248, red, "いいえ");
            //DrawFormatString(62, 350, black, "はい");
            //DrawFormatString(62, 382, red, "いいえ");
        }
        //決定
        if(Key[KEY_INPUT_A] == 1){
            if(select==0) state=2;
            if(select==1) state=3;
        }
        break;
    case 2:
        DrawBox(50, 330, 320, 444, white, TRUE);
        DrawFormatString(62, 350, black, "そうですか!");
        DrawFormatString(62, 370, black, "それはよかったです!");
        if(Key[KEY_INPUT_A] == 1){
            state=0;
        }
        break;
    case 3:
        DrawBox(50, 330, 320, 444, white, TRUE);
        DrawFormatString(62, 350, black, "元気ないのですか・・・。");
        DrawFormatString(62, 370, black, "体調には気を付けてくださいね。");
        if(Key[KEY_INPUT_A] == 1){
            state=0;
        }
        break;
    }
}
 
 
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){
    ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK); //ウィンドウモード変更と初期化と裏画面設定
    while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && gpUpdateKey()==0){
        conversation_control();
    }
 
    DxLib_End(); // DXライブラリ終了処理
    return 0;
}
最後に編集したユーザー Tatu [ 2015年7月23日(木) 11:45 ], 累計 2 回

コメント数: 0 閲覧数: 12765

マッチ3ゲームを作成しました

パーマリンクby Tatu on 2015年6月29日(月) 22:00

Bejeweledなどのようなマッチ3ゲームを作成しました。

最近解決チェックについての指摘が目立つような気がしますが副管理人になりたいのでしょうか?
最後に編集したユーザー Tatu [ 2015年6月30日(火) 21:52 ], 累計 2 回

コメント数: 0 閲覧数: 13825

「ボール壊し」を作成しました

パーマリンクby Tatu on 2015年6月22日(月) 22:30

ダウンロード:
BallBreaker.zip
(1.32 MB) ダウンロード数: 69 回


初めてゲームというものを作成中。
blog.php?u=77&b=5372

という日記のコメントを見て作成しました。
添付ファイル

コメント数: 4 閲覧数: 14887

mixC++の掲示板の順番について

パーマリンクby Tatu on 2015年3月02日(月) 01:37

現在、mixC++の掲示板の順番は

1.C言語何でも質問掲示板
2.四聖龍神録Plus掲示板
3.AerobeatPlus掲示板
4.作品お披露目掲示板
5.コミュニティフォーラム
6.登録ユーザー掲示板
7.mixC++更新・仕様変更履歴

という順番になっていますが

1.C言語何でも質問掲示板
2.登録ユーザー掲示板
3.作品お披露目掲示板
4.コミュニティフォーラム
5.四聖龍神録Plus掲示板
6.AerobeatPlus掲示板
7.mixC++更新・仕様変更履歴

という順番の方がよいのではないかと思うことがあります。


理由

1.C言語何でも質問掲示板
mixC++のメイン。よってこれを1番からずらすことは考えられない。

2.登録ユーザー掲示板
要望などを書き込みやすくするため、見やすい位置に動かした方がよいのではないでしょうか。
現在は管理人が確認しているのか不明な状態です。

3.作品お披露目掲示板
個人的にはこれが2番の方がよいのですが
作品の投稿がほとんどなくなっている状態であり、
mixC++への要望などのほうがより優先されるべきだと思われるので3番。

4.コミュニティフォーラム
沈黙状態。よって後でいいのですが一応mixC++の機能なので4番。

5.四聖龍神録Plus掲示板
6.AerobeatPlus掲示板
どちらも更新がとっくの昔に停止したゲームであり、
またそれぞれのページから飛んでくることができるので
わざわざ前の方に表示する意味がないと考えたため。
新着記事の確認がしたい場合はフォーラムをウォッチするようにするとよいでしょう。

7.mixC++更新・仕様変更履歴
ほとんどのユーザーにとっては無意味なコンテンツであり、
何があったかを確認したい人にとっては中途半端な位置にあるよりは
一番後ろの方が確認しやすいだろうということで最後。


長々と書いてみたけど順番は変わらなさそうですね。



龍神録プログラミングの館のファイルの拡張子の誤字が修正されてない。
「些細だからいいだろ」ということなのだろうか。

あと、22章で画面を揺らす処理を扱っていますが今までの描画関数のx座標とy座標に
それぞれdn.x,dn.yを足すようにするということが書かれていません。

画面揺らし
viewtopic.php?f=3&t=16332

あと1月で4月。
プログラマー(初心者大歓迎)のためのmixC++は
本日をもって初音ミクファンのための「ミクプラネット」になりましたとかいうネタでもやるのだろうか。


Dixqさん
Androidアプリの完成おめでとうございます。
モべリオマーケットへの公開申請はダメだったそうですね。

コメント数: 0 閲覧数: 15381

ソリティアを作ってみました

パーマリンクby Tatu on 2015年1月12日(月) 07:50

「ソリティアをプログラムについて」
viewtopic.php?f=3&t=16230

というトピックを見てソリティアを作ってみました。
solitaire.zip
(1.3 MB) ダウンロード数: 166 回


操作方法
マウス左ボタン:カード選択、山札をめくる
カードを選択するとそのカードの周りに赤い枠が付きます
さらにその状態で移動できる場所を選択することでカードを移動できます。

マウス右ボタン:カード選択解除

Rキー:リセット



「ソリティア」という言葉は
盤上遊戯やカードゲームなどのうち、一人だけで遊ぶことのできるゲームの総称で
Windowsについているソリティアの正式名称はクロンダイクというそうです。
添付ファイル

コメント数: 5 閲覧数: 17401

オンラインデータ

登録ユーザー: みけCAT