C言語何でも質問掲示板


Total hit  今日  昨日  

必ずお読み下さい → 規約と注意事項  アンケートはこちら  エラーで投稿できない方はこちら  過去ログ検索はこちら

 
   22.キャラを4方向に歩 ....   
     ・[45102] fatens 
     ・[45103] kazuoni 
     ・[45108] sizuma 
     ・[45186] たこ 
   シングルトンクラスの ....   
     ・[45158] Justy 
     ・[45165] ぽこ 
     ・[45167] たかぎ 
     ・[45170] kazuoni 
     ・[45171] ぽこ 
     ・[45172] Justy 
     ・[45174] たかぎ 
     ・[45185] kazuoni 
   FPSについて   
     ・[45180] たこやき 
   このサイトにあるDX ....   
     ・[45145] Justy 
     ・[45160] ヒガモリ 
   あるクラスのメンバ関 ....   
     ・[45123] たかぎ 
     ・[45139] 3T 
     ・[45144] sizuma 
     ・[45149] 3T 
     ・[45157] sizuma 
   画像や音楽を実行ファ ....   
     ・[45146] SooA 
     ・[45152] Justy 
     ・[45153] タック 
     ・[45154] タック 
     ・[45155] SooA 
   シーンごとのソース管 ....   
     ・[45107] Justy 
     ・[45110] おむすび 
     ・[45112] Justy 
     ・[45117] おむすび 
     ・[45119] Justy 
     ・[45121] おむすび 
     ・[45127] おむすび 
     ・[45128] おむすび 
     ・[45131] Justy 
     ・[45132] おむすび 
     ・[45138] おむすび 
   ボムのカットインにつ ....   
     ・[45058] あ〜る 
     ・[45125] yrao 
     ・[45126] yrao 
     ・[45129] yrao 
     ・[45133] あ〜る 
     ・[45136] yrao 
   弾を残像させる方法2   
     ・[44436] softya 
     ・[44491] yrao 
     ・[44506] softya 
     ・[44520] yrao 
     ・[44523] softya 
     ・[44525] yrao 
     ・[44526] softya 
     ・[44528] yrao 
     ・[44529] softya 
     ・[44530] yrao 
     ・[44533] softya 
     ・[44545] yrao 
     ・[44549] softya 
     ・[44551] yrao 
     ・[44552] softya 
     ・[44697] yrao 
     ・[44700] softya 
     ・[44723] yrao 
     ・[44730] softya 
     ・[44765] yrao 
     ・[44829] yrao 
     ・[44839] softya 
     ・[44877] yrao 
     ・[44882] softya 
     ・[44886] yrao 
     ・[44892] ひよこ 
     ・[44975] yrao 
     ・[44983] swing 
     ・[44984] wing 
     ・[44988] ひよこ 
     ・[44993] softya 
     ・[45007] wing 
     ・[45055] yrao 
     ・[45071] ひよこ 
     ・[45130] yrao 
   どんな文字列も必ず中 ....   
     ・[45085] kazuoni 
     ・[45086] 研究生 
     ・[45089] kazuoni 
     ・[45091] 研究生 
     ・[45094] kazuoni 
     ・[45098] 研究生 
   まずは実行させてみよ ....   
     ・[45084] fatens 
     ・[45088] ZIKI 
     ・[45092] fatens 
     ・[45096] ZIKI 
   キーの反応について   
     ・[44799] y 
     ・[44800] DVDM 
     ・[44906] situmon 
     ・[44910] DVDM 
     ・[44936] situmon 
     ・[44981] DVDM 
     ・[44998] Dixq (管理人) 
     ・[45053] situmon 
     ・[45077] DVDM 
     ・[45081] situmon 
   エフェクトについて   
     ・[44938] たかぎ 
     ・[44941] softya 
     ・[44943] ヒガモリ 
     ・[44944] ヒガモリ 
     ・[44945] Dixq (管理人) 
     ・[44946] softya 
     ・[44947] ヒガモリ 
     ・[44948] ヒガモリ 
     ・[44949] softya 
     ・[44955] ヒガモリ 
     ・[44959] softya 
     ・[44960] ヒガモリ 
     ・[44961] softya 
     ・[44992] ヒガモリ 
     ・[44995] Dixq (管理人) 
     ・[45002] softya 
     ・[45010] Justy 
     ・[45011] softya 
     ・[45015] ヒガモリ 
     ・[45017] ヒガモリ 
     ・[45018] ヒガモリ 
     ・[45020] ヒガモリ 
     ・[45051] Dixq (管理人) 
     ・[45080] ヒガモリ 
   21. キャラを一区間歩 ....   
     ・[45062] wing 
     ・[45065] shilfia 
     ・[45076] sizuma 
     ・[45079] たこ 
   32. 乱数の初期化の仕 ....   
     ・[45019] Justy 
     ・[45049] Dixq (管理人) 
     ・[45078] たこ 
   任意の入力を受けたら ....   
     ・[45067] pooka 
     ・[45068] kerotan0820 
     ・[45069] Naohiro19 
     ・[45075] えーや 
   続ソースコードの行数   
     ・[44511] mii 
     ・[44512] ドラ 
     ・[44518] mii 
     ・[44522] mii 
     ・[44559] mii 
     ・[44560] たいちう 
     ・[44562] dic 
     ・[44563] mii 
     ・[44630] mii 
     ・[44632] たいちう 
     ・[44634] mii 
     ・[44643] ねこ 
     ・[44650] mii 
     ・[44659] dic 
     ・[44660] mii 
     ・[44661] dic 
     ・[44662] mii 
     ・[44664] mii 
     ・[44809] mii 
     ・[44814] Mist 
     ・[44815] たかぎ 
     ・[44818] mii 
     ・[44821] バグ 
     ・[44822] たいちう 
     ・[44837] mii 
     ・[44843] ねこ 
     ・[44846] mii 
     ・[44858] ねこ 
     ・[44859] mii 
     ・[44867] mii 
     ・[44873] mii 
     ・[44898] たいちう 
     ・[44987] mii 
     ・[45022] mii 
     ・[45073] Tororo 
     ・[45074] mii 
   ゲーム画面の遷移   
     ・[44965] kms 
     ・[44966] kms 
     ・[44967] kms 
     ・[44968] softya 
     ・[44969] softya 
     ・[44970] kms 
     ・[44971] softya 
     ・[44972] kms 
     ・[44976] softya 
     ・[44986] kms 
     ・[44997] Dixq (管理人) 
     ・[45004] softya 
     ・[45005] kms 
     ・[45013] softya 
     ・[45024] kms 
     ・[45030] softya 
     ・[45044] kms 
     ・[45045] softya 
     ・[45072] kms 
   ■Aerobeatを大幅バー ....   
     ・[42044] はね 
     ・[42047] こめかみ 
     ・[42051] Dixq (管理人) 
     ・[42054] Dixq (管理人) 
     ・[42060] kazuoni 
     ・[42061] Dixq (管理人) 
     ・[42104] こめかみ 
     ・[42108] ひよこ 
     ・[42112] Dixq (管理人) 
     ・[42113] Tatu 
     ・[42119] Dixq (管理人) 
     ・[42120] あ〜る 
     ・[42125] Tatu 
     ・[42126] Dixq (管理人) 
     ・[42129] Ma 
     ・[42131] こめかみ 
     ・[42170] Tatu 
     ・[42175] やっくん 
     ・[42181] lbfuvab 
     ・[42186] Dixq (管理人) 
     ・[42187] Dixq (管理人) 
     ・[42189] Tatu 
     ・[42192] Dixq (管理人) 
     ・[42274] ROM 
     ・[42278] Dixq (管理人) 
     ・[42342] Tatu 
     ・[42418] Tatu 
     ・[42469] Dixq (管理人) 
     ・[42503] Tatu 
     ・[42532] Tatu 
     ・[42533] ROM 
     ・[42563] Dixq (管理人) 
     ・[42564] ひよこ 
     ・[42567] ROM 
     ・[42648] Tatu 
     ・[42658] Dixq (管理人) 
     ・[42665] ROM 
     ・[42668] Tatu 
     ・[42703] Dixq (管理人) 
     ・[42777] Tatu 
     ・[42787] Dixq (管理人) 
     ・[42812] Tatu 
     ・[42824] Dixq (管理人) 
     ・[42830] ひよこ 
     ・[42832] Dixq (管理人) 
     ・[42840] ひよこ 
     ・[42849] Dixq (管理人) 
     ・[42882] ひよこ 
     ・[42900] ROM 
     ・[42902] Dixq (管理人) 
     ・[42984] Tatu 
     ・[42986] Dixq (管理人) 
     ・[42992] やっぽん 
     ・[43014] Dixq (管理人) 
     ・[43212] Tatu 
     ・[43232] Dixq (管理人) 
     ・[43417] Tatu 
     ・[43462] Dixq (管理人) 
     ・[43474] Dixq (管理人) 
     ・[43526] Tatu 
     ・[43533] Dixq (管理人) 
     ・[43669] Tatu 
     ・[43764] Dixq (管理人) 
     ・[43826] Tatu 
     ・[43886] Dixq (管理人) 
     ・[43952] Tatu 
     ・[43965] Dixq (管理人) 
     ・[43992] Tatu 
     ・[43997] Dixq (管理人) 
     ・[44003] Tatu 
     ・[44008] Dixq (管理人) 
     ・[44101] Tatu 
     ・[44189] やっぽん 
     ・[44205] Dixq (管理人) 
     ・[44364] Tatu 
     ・[44449] Dixq (管理人) 
     ・[44508] Tatu 
     ・[44543] Dixq (管理人) 
     ・[44612] Tatu 
     ・[44614] Dixq (管理人) 
     ・[44615] Dixq (管理人) 
     ・[44766] Tatu 
     ・[44788] Dixq (管理人) 
     ・[44932] Tatu 
     ・[45012] Dixq (管理人) 
     ・[45046] ひよこ 
     ・[45048] Dixq (管理人) 
     ・[45070] ひよこ 
   GetHitKeyStateAllに構 ....   
     ・[45060] circle 
     ・[45061] 道 
     ・[45064] circle 
     ・[45066] 道 
   画像表示について   
     ・[45026] ひよこ 
     ・[45047] Dixq (管理人) 
     ・[45054] no 
   C初心者   
     ・[45028] sizuma 
     ・[45050] Dixq (管理人) 
   質問です   
     ・[45032] sizuma 
     ・[45034] 858 
     ・[45035] softya 
     ・[45037] 858 
     ・[45038] sizuma 
     ・[45039] sizuma 
     ・[45040] softya 
     ・[45041] 858  
     ・[45042] softya 
     ・[45043] 858 
   初投稿です。   
     ・[44636] もぐりん 
     ・[44637] softya 
     ・[44639] tika 
     ・[44640] softya 
     ・[44642] Dixq (管理人) 
     ・[44644] tika 
     ・[44645] Dixq (管理人) 
     ・[44646] Dixq (管理人) 
     ・[44647] softya 
     ・[44648] tika 
     ・[44649] Naohiro19 
     ・[44651] softya 
     ・[44652] tika 
     ・[44653] tika 
     ・[44654] softya 
     ・[44656] tika 
     ・[44658] softya 
     ・[44681] むん 
     ・[44688] Dixq (管理人) 
     ・[44695] Dixq (管理人) 
     ・[44706] Ma 
     ・[44752] Dixq (管理人) 
     ・[44952] tika 
     ・[45014] Dixq (管理人) 
     ・[45029] sizuma 
     ・[45036] non 
   オプションの位置につ ....   
     ・[45025] チルチル 
     ・[45033] ミジンコ 
   カレントディレクトリ ....   
     ・[44990] たいちう 
     ・[44991] 天和 
     ・[44994] たいちう 
     ・[44996] 天和 
     ・[45001] たいちう 
     ・[45023] 天和 
   宿題なのですが・・・   
     ・[44861] たかぎ 
     ・[44862] Mist 
     ・[44863] てら 
     ・[44864] たかぎ 
     ・[44865] たかぎ 
     ・[44866] てら 
     ・[44868] たかぎ 
     ・[44869] Mist 
     ・[44870] たかぎ 
     ・[44871] Mist 
     ・[44872] たかぎ 
     ・[45006] Dixq (管理人) 
   一定時間経過したら表 ....   
     ・[44985] DVDM 
   配列について   
     ・[44942] non 
     ・[44977] メア 
     ・[44980] sizuma 
   プロセスが終了せずビ ....   
     ・[44953] Justy 
     ・[44958] 餅男 
     ・[44962] Justy 
   ゲームを作りました「 ....   
     ・[44890] kazuoni 
     ・[44891] ひよこ 
     ・[44893] Tatu 
     ・[44894] ひよこ 
     ・[44896] ようすけ 
     ・[44897] ひよこ 
     ・[44907] situmon 
     ・[44909] ひよこ 
     ・[44923] ひよこ 
     ・[44935] situmon 
     ・[44939] ひよこ 
     ・[44951] situmon 
     ・[44956] ひよこ 
   elライブラリの件なの ....   
     ・[44934] たかぎ 
   続 バックスペースに ....   
     ・[44768] バグ 
     ・[44806] バグ 
     ・[44816] dic 
     ・[44819] バグ 
     ・[44823] dic 
     ・[44825] バグ 
     ・[44826] Mist 
     ・[44841] lbfuvab 
     ・[44883] dic 
     ・[44884] Mist 
     ・[44911] dic 
     ・[44916] バグ 
     ・[44917] dic 
     ・[44920] Q 
     ・[44930] Tororo 
     ・[44931] dic 
     ・[44933] バグ 
   キャラを4方向に歩か ....   
     ・[44777] softya 
     ・[44779] kms 
     ・[44784] softya 
     ・[44791] kms 
     ・[44794] softya 
     ・[44796] kms 
     ・[44803] softya 
     ・[44874] kms 
     ・[44876] softya 
     ・[44879] kms 
     ・[44880] softya 
     ・[44912] kms 
     ・[44919] softya 
     ・[44921] kms 
     ・[44922] softya 
     ・[44924] kms 
     ・[44925] softya 
     ・[44926] kms 
     ・[44927] softya 
     ・[44929] kms 
   getlineについて   
     ・[44901] たかぎ 
     ・[44902] toto 
     ・[44903] たいちう 
     ・[44904] たかぎ 
     ・[44905] toto 
     ・[44914] toto 
     ・[44915] pooka 
     ・[44928] toto 

Name: たこ  ..ぴよぴよ(322ポイント)   Date: 2009/12/29(火) 16:32   No:45100       
Title: 22.キャラを4方向に歩かせる。    
こんにちは。すみませんがまた質問させてもらいます^^;
「ch.img=image[(ch.x%32+ch.y%32)/8 + ch.muki*4]; 」の部分の
ch.mukiに4をかける意味がよくわからないです…
試しにはずしてやってみるとおかしい動きになりましたけど…
向きが4方向あるからでしょうか?  


130ポイント を手に入れた。


Name: fatens  ..入門者(3,479ポイント)   Date: 2009/12/29(火) 16:44   No:45102     
Title: Re:22.キャラを4方向に歩かせる。    
各方向のアニメのコマ数が4だからだと思います。
ようするに縦軸の決定です。
「17. 画像を分割して読み込む」を見て考えると分かりやすいかと。


12ポイント を手に入れた。

Name: kazuoni [URL]  ..ハッカー(121,625ポイント)   Date: 2009/12/29(火) 16:44   No:45103     
Title: Re:22.キャラを4方向に歩かせる。    
情報が不足しているので、補足をお願いします。

・環境は何か
・どのような画像か
・読み込みはどのように行っているか

> ch.mukiに4をかける意味がよくわからないです…
ゲームプログラミングの館では画像を数字で書くと
 0  1  2  3  …(a)
 4  5  6  7  …(b)
 8  9 10 11  …(c)
12 13 14 15  …(d)

のようになっているので、


muki=0のときは(a)の向き0*4+x=x(0≦x≦3)
muki=1のときは(b)の向き1*4+x=4+x(0≦x≦3)

...


のようになっています。
これを言い換えると、
muki=0のとき画像0〜3
muki=1のとき画像4〜7

...

のようになります。


189ポイント を手に入れた。

Name: sizuma [URL]  ..上級者(22,644ポイント)   Date: 2009/12/29(火) 17:09   No:45108     
Title: Re:22.キャラを4方向に歩かせる。    
同じようなトピックがちょっと前にあったので、こちらも参考になるでしょう。
http://www.play21.jp/board/formz.cgi?action=res&resno=44775&page=30&lognum=&id=dixq&rln=44929
まぁfatensさんとkazuoniさんの書いてあるとおりなんで、それで分かればスルーしてください。 編集済み


72ポイント を手に入れた。

Name: たこ  ..ぴよぴよ(224ポイント)   Date: 2009/12/30(水) 13:38   No:45186 解決!     
Title: Re:22.キャラを4方向に歩かせる。    
返事送れて申し訳ございません><
縦軸のせっていだったのですね。
わかりました。ありがとうございます。
--------環境--------
コンパイラ Microsoft Visual C++ 2008 Express Edition
OS Windows7
です。


98ポイント を落としてしまった。



Name: kazuoni [URL]  ..ハッカー(122,077ポイント)   Date: 2009/12/29(火) 22:04   No:45148       
Title: シングルトンクラスのテンプレート化    
お邪魔します。

現在、シングルトンクラスのテンプレート化で悩んでいます。
今自分は添付ファイルSingleton.txtのようにシングルトンクラスを管理しています。

ただ、シングルトンクラスのたびに
GetInstance
DeleteInstance
Order
メソッドを定義しなければいけないので、
これを今の呼び出し方と同様かつ、上記の関数をテンプレート化できないかと考えています。

個人的には、添付ファイルVirtualClass.txt
のような感じでテンプレートクラスを用意し、
シングルトンクラスにしたいクラスを
このTemplateForSingletonクラスから派生させることができたら
なんて思っていますが、このままだと派生クラス(Class A)のコンストラクタをどうするのか
という問題もあり、実現できそうにありません。

どのように実現することが一番好ましいでしょうか?
(今までのとおり、そのまま3つのメソッドは書いたほうがいいのか・・・)

よろしくお願いします。

#追記
環境はVC++ 2008 EEです。 編集済み


247ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(486,956ポイント)   Date: 2009/12/29(火) 22:56   No:45158     
Title: Re:シングルトンクラスのテンプレート化    
 一番手っ取り早そうなのは

    template <typename P1>
    static bool GetInstance(P1 p1)
    {
        if (m_Instance == NULL)
        {
            m_Instance = new T(p1);
            return true;
        }
        else
            return false;
    }
    template <typename P1, typename P2>
    static bool GetInstance(P1 p1, P2 p2)
    {
        if (m_Instance == NULL)
        {
            m_Instance = new T(p1, p2);
            return true;
        }
        else
            return false;
    }
    template <typename P1, typename P2, typename P3>
    static bool GetInstance(P1 p1, P2 p2, P3 p3)
    {
        if (m_Instance == NULL)
        {
            m_Instance = new T(p1, p2, p3);
            return true;
        }
        else
            return false;
    }

とかをメンバに加えるとか。


561ポイント を手に入れた。

Name: ぽこ  ..入門者(2,818ポイント)   Date: 2009/12/30(水) 00:04   No:45165     
Title: Re:シングルトンクラスのテンプレート化    
Game Programming Gemsにあった、シングルトンのテンプレート版の
ソースを載せておきます。

template< typename T >
class Singleton
{
public:
    Singleton()
    {
        assert( ! singleton_ );
        int offset = (int)(T*)1 - (int)(Singleton<T>*)(T*)1;
        singleton_ = (T*)((int)this + offset);
    }

    ~Singleton()
    {
        assert( singleton_ );
        singleton_ = 0;
    }

    static T& getInstance(void)
    {
        assert( singleton_ );
        return *singleton_;
    }

private:
    static T * singleton_;
};

template< typename T > T* Singleton<T>::singleton_ = 0;

後は、
class A : public Singleton<A>{};
として、派生クラスAに好きなコンストラクタを定義できるようになると思います。


229ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(146,062ポイント)   Date: 2009/12/30(水) 00:13   No:45167     
Title: Re:シングルトンクラスのテンプレート化    
> ぽこさん
これだと、コピーコンストラクタを殺していないので、シングルトンを保証できませんね。
あと、コンストラクタでやっているオフセット計算も変で、こんなことをしなくても、普通にダウンキャストするだけでよいと思うのですが...


68ポイント を手に入れた。

Name: kazuoni [URL]  ..ハッカー(122,253ポイント)   Date: 2009/12/30(水) 00:23   No:45170     
Title: Re:シングルトンクラスのテンプレート化    
ご回答ありがとうございます。

すみません。。テンプレート化というと、そちらもあるんですね。。
自分がやろうとしていたのはJustyさんの方ではなく、
ぽこさんの提示してくださったような、テンプレートでした。
ソースコードまで挙げていただいたのに、大変申し訳ありませんでした。

実際、自分のものにぽこさんのあげていただいたものをどのように組み込んだらいいかよくわかりません。


176ポイント を手に入れた。

Name: ぽこ  ..入門者(3,353ポイント)   Date: 2009/12/30(水) 01:18   No:45171     
Title: Re:シングルトンクラスのテンプレート化    
たかぎさん:

指摘ありがとうございます。
指摘された点を修正したものと、動作確認プログラムを載せます。
#include <iostream>
#include <cassert>

template< typename T >
class Singleton
{
public:
    Singleton()
    {
        assert( ! singleton_ );
        singleton_ = reinterpret_cast< T* > (this);
        //singleton_ = dynamic_cast< T* > (this); // dynamic_castだと直下のアサーションに引っかかる。Why?
        assert( singleton_ );
    }

    virtual ~Singleton()
    {
        assert( singleton_ );
        singleton_ = 0;
    }

    static T& getInstance(void)
    {
        assert( singleton_ );
        return *singleton_;
    }

private:
    static T * singleton_;
    Singleton( const Singleton& s ); // コピーコンストラクタは呼び出し禁止
};

template< typename T > T* Singleton<T>::singleton_ = 0;

//////動作確認用のクラス
class A : public Singleton<A>
{
public:
    A(){}
    void test() {
        std::cout << "It's test" << std::endl;
    }
};

class B : public Singleton<B>
{
public:
    B(){}
};

////// シングルトンオブジェクト作成
A a;
// A a2; // NG:Singleton<A>は2つ生成できない
B b;

int main()
{
    // A a2(a);  // NG:コピーコンストラクタは呼び出せない
    // B b2 = b; // NG:コピーコンストラクタは呼び出せない

    A& a3 = A::getInstance();
    a3.test();
    
    return 0;
}



535ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(487,153ポイント)   Date: 2009/12/30(水) 01:18   No:45172     
Title: Re:シングルトンクラスのテンプレート化    
 gemsのこのシングルトンクラスはインスタンスの生成と破棄を別管理として
アクセスの為だけに存在するわけですね。


□ たかぎさん
>こんなことをしなくても、普通にダウンキャストするだけでよいと思うのですが

 gemsによるとこのシングルトンクラスを別のクラスと合わせて多重継承した際に
シングルトンクラスの thisと派生したクラス(T)の thisが異なることについて言及しています。

 その対策の為らしいのですが、ダウンキャストで何故ダメなのかはよくわかりません……。


197ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(146,067ポイント)   Date: 2009/12/30(水) 01:37   No:45174     
Title: Re:シングルトンクラスのテンプレート化    
>  その対策の為らしいのですが、ダウンキャストで何故ダメなのかはよくわかりません……。

意味不明ですね。


5ポイント を手に入れた。

Name: kazuoni [URL]  ..ハッカー(122,383ポイント)   Date: 2009/12/30(水) 10:34   No:45185 解決!     
Title: Re:シングルトンクラスのテンプレート化    
ご回答ありがとうございます!

ぽこさんの提示していただいたソースコードをちょっと変えるだけで
自分のやりたいことが実現できました。
ダウンキャストなんて頭の片隅ぐらいにしかなかったので、
見直す機会になり、大変参考になりました。
ありがとうございました。

次回もよろしくお願いします。


130ポイント を手に入れた。



Name: たこやき  ..初心者(6,869ポイント)   Date: 2009/12/30(水) 02:14   No:45179       
Title: FPSについて    
一つ質問なのですが、FPSの計測したいのですが、以下のソースでやるとFPSが30前後になってしまうのですが。
どうしたらFPSを60前後にすることが出来るのでしょうか?どこか間違っているのでしょうか?
ソースです。
多分ここら辺だろうなというところを載せます。
void FPSCount(void){


    static DWORD before_time = timeGetTime(); // 以前の時間
    DWORD        now_time    = timeGetTime(); // 現在の時間
    static DWORD fps_ctr = 0;
    TCHAR buff[80];                  // 文字列表示用バッファ

    
    if(now_time - before_time >= 1000){
        // 初期化
        before_time = now_time;
 
       *fps = fps_ctr;
    wsprintf(buff,_T("%d\n"),fps_ctr);
    OutputDebugString(buff);
    fps_ctr = 0;
    }     fps_ctr++;      } // エントリポイント int APIENTRY WinMain(HINSTANCE hInstance,         HINSTANCE hPrevInstance,         LPSTR lpCmdLine,         int nCmdShow ) {
     ・
     ・
     ・
    // メッセージループ
    while(true)
    {
        if (PeekMessage(&msg, NULL, 0,0,PM_REMOVE))
        {
            if (msg.message == WM_QUIT) break;
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        else
        {
            fps++;
            // 同期処理
            if (timeGetTime() - dwStart >= 1000/FPS+0.5)
            {
                    FPSCount();
    
                // 時間更新
                dwStart = timeGetTime();
                
                fps=0;
                // 描画処理
                Draw();
            }
        }
        Sleep(1);
    }
    timeEndPeriod(1);
    // 終了処理
    Cleanup();
    // 戻り値を返します。
    return (int)msg.wParam;

}

}
です。よろしくお願いします。


873ポイント を手に入れた。


Name: たこやき  ..初心者(6,900ポイント)   Date: 2009/12/30(水) 02:19   No:45180     
Title: Re:FPSについて    
何とか、FPSが60にすることが出来たのですが、FPSが57止まりで60になりません。これはこれでいいのでしょうか?

31ポイント を手に入れた。



Name: ヒガモリ  ..かけだし(1,404ポイント)   Date: 2009/12/29(火) 21:21   No:45143       
Title: このサイトにあるDXライブラリについて    
検索してもなかったので質問します。
このサイトでDXライブラリをダウンロードして手順どおりしていたんですが
入門編の0番で、DxLib_VC2008_and_2005用.slnというファイルを開くところがあるんですが、
ちゃんと手順どおりやったはずなのにこのファイルがありません。
どうしたらいいですか?


87ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(486,825ポイント)   Date: 2009/12/29(火) 21:55   No:45145     
Title: Re:このサイトにあるDXライブラリについて    
 使っている  VisualStudioのバージョンと同じ数字が書いてある同じ拡張子のものを開いてみて下さい。

例) VisualStudio 2008 → DxLib_VC2008用.sln


57ポイント を手に入れた。

Name: ヒガモリ  ..かけだし(1,426ポイント)   Date: 2009/12/29(火) 23:09   No:45160 解決!     
Title: Re:このサイトにあるDXライブラリについて    
Justyさんへ
質問に答えてくださっありがとうございます。
はいわかりました。
やってみます。


22ポイント を手に入れた。



Name: 3T  ..かけだし(2,080ポイント)   Date: 2009/12/29(火) 18:30   No:45120       
Title: あるクラスのメンバ関数を、そのクラスのメンバ変数で保持したい    
お世話になります。
また質問させてください。

http://www.geocities.jp/ky_webid/cpp/language/034.html
このサイトを参考に、メンバ関数をメンバポインタ変数で保持・実行をしたいのですが、上手くいきません。
どのように改善したらいいのでしょうか。

#include <iostream>

class CSample
{
public:
    void    (CSample::*p)();

    void    func()
    {
        printf("func\n");
    }
};

int main()
{
    CSample    obj;
    obj.p        =    &CSample::func;
    (obj.*p)();// error C2065: 'p' : 定義されていない識別子です。

    return 0;
}


上のソースですと、コメント部分にエラーが発生してしまいます。
これをどうにか出来ないか、という相談です。

よろしくお願いします。


242ポイント を手に入れた。


Name: たかぎ [URL]  ..ハッカー(145,930ポイント)   Date: 2009/12/29(火) 18:37   No:45123     
Title: Re:あるクラスのメンバ関数を、そのクラスのメンバ変数で保持したい    
これではダメです。
設計の善し悪しは別として...
(obj.*obj.p)();

とする必要があります。


60ポイント を手に入れた。

Name: 3T  ..かけだし(2,222ポイント)   Date: 2009/12/29(火) 20:46   No:45139     
Title: Re:あるクラスのメンバ関数を、そのクラスのメンバ変数で保持したい    
うええ……もう訳が分からない状態です;
確かに、そうすると動作しますが……何でそういう記述になるのかとかが分かりません;;
勉強不足ですね。

また、設計の善し悪しは〜ということからして、別の方法を取った方が良いということですかね。
色々勉強してみます。。。

ありがとうございます。


142ポイント を手に入れた。

Name: sizuma [URL]  ..上級者(22,946ポイント)   Date: 2009/12/29(火) 21:50   No:45144     
Title: Re:あるクラスのメンバ関数を、そのクラスのメンバ変数で保持したい    
>メンバ関数ポインタ pFunc を定義したとき、どのインスタンスのものかを指定しないため、「pFunc()」と書くだけでは、どのインスタンスのメンバ関数を呼び出すのか分かりません。そのため、インスタンス名と上記の2つの演算子のいずれかを使ってアクセスすることになります。 

参考にされてるサイトにこう書いてありますね。
つまり、
「*obj.pだけだと、ここにCSampleのfunc関数ポインタがあるのはわかるんだけど、どのインスタンスのポインタなのかが分からない。objかな?obj2かな(生成すれば)?」
ということなのでしょう。

staticメソッドだとクラス固有だから指定はいりません。
Javaだと確か指定しても指定しなくてもアクセス出来た気が・・・・(staticメソッドに)
オーバーライドされてなきゃ(virtualついてなきゃ)問題ない気もしますけどねー

例えば普通にmainから関数ポインタ呼び出すことを考えてみると、インスタンスを生成してないのにメンバ関数を呼び出しちゃいけないですよね?
クラスはただの鋳型で、実体(インスタンス)はそれぞれ別の物だから、指定するのが当然なわけです。



と、分かってる風に書いてるけど、C++入門者です
間違ってたらたかぎさんが訂正してくれるはず^^;
 編集済み


302ポイント を手に入れた。

Name: 3T  ..かけだし(2,295ポイント)   Date: 2009/12/29(火) 22:10   No:45149     
Title: Re:あるクラスのメンバ関数を、そのクラスのメンバ変数で保持したい    
なるほど、そういうことは考えられますね……。
それで、こんな変な(といったら失礼ですが)書き方してるわけですね。

ありがとうございます。


73ポイント を手に入れた。

Name: sizuma [URL]  ..上級者(23,136ポイント)   Date: 2009/12/29(火) 22:53   No:45157     
Title: Re:あるクラスのメンバ関数を、そのクラスのメンバ変数で保持したい    
>それで、こんな変な(といったら失礼ですが)書き方してるわけですね。
ごく自然な表現だと思いますよ?
まぁ感じ方は人それぞれでしょうけど・・・

>メンバ関数をメンバポインタ変数で保持・実行をしたい
なにを実装したいのか分からないので、はっきりとはいえませんが。
とりあえず、変数はprivateにして、メソッドからアクセスさせたほうがいいと思います。
そうすれば、obj.*obj.pみたいな表現はなくなりますから。
せっかくオブジェクト指向の機能があるので、基本的に変数は隠蔽ですね。


190ポイント を手に入れた。



Name: タック  ..ぴよぴよ(312ポイント)   Date: 2009/12/29(火) 19:56   No:45135       
Title: 画像や音楽を実行ファイルに埋め込むには?    
初書き込みです。

作ったゲームを配布しようと考えているのですが、画像や音楽が存在しているディレクトリ内では
上手く動くものの、実行ファイルだけ取り出してディレクトリを移してしまうと上手く動きません。

そこで、画像や音楽を実行ファイルに埋め込もうと考えたのですが、DirectXで使われているwin32リソース
については検索してもあまりヒットしませんでした。

そこで質問ですが、Visual C++ 2008を使い、win32プロジェクトで画像や音楽を実行ファイルに埋め込むには
どうすれば良いのですか?

もし掲示板内で既出でしたら、お手数ですがリンクを張って頂けると恐縮です。
初歩的な質問ですが、どうかよろしくお願いします。


312ポイント を手に入れた。


Name: SooA [URL]  ..上級者(20,714ポイント)   Date: 2009/12/29(火) 21:58   No:45146     
Title: Re:画像や音楽を実行ファイルに埋め込むには?    
実行ファイルへデータを組み込むのであれば
リソースへ組み込む事になると思いますが、
それは一旦スルーさせて頂きまして
DXライブラリは使用されていますか?

使用しているのであればDXアーカイブでデータ類を
一纏めにする方法があるので本家で確認してみて下さい。
現行プログラムをほとんど修正する必要がないので
配布という最終的な結果に対しての処置としては
こちらの方が望ましいかと思います。

DXライブラリ
http://homepage2.nifty.com/natupaji/DxLib/


189ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(486,395ポイント)   Date: 2009/12/29(火) 22:17   No:45152     
Title: Re:画像や音楽を実行ファイルに埋め込むには?    
 
 何らかの方法で複数のファイルをパックして1つのファイルに纏め、実行ファイルと
そのデータファイルだけを配布し、実行時にそのデータファイルの存在を確認し、
ファイルが無ければエラーメッセージを出す、という方法では代用できないでしょうか?


> 実行ファイルだけ取り出してディレクトリを移してしまうと上手く動きません

 そんなことしてしまう人が悪い、と言えなくもないですが、過去のスレだとこんなところです。

C言語何でも質問掲示板 : 画像データを実行ファイルに同梱する
http://www.play21.jp/board/formz.cgi?action=res&resno=22069&page=&lognum=70&id=dixq&rln=22084

C言語何でも質問掲示板 : リソースファイルも一緒に実行ファイル化 
http://www.play21.jp/board/formz.cgi?action=res&resno=37968&page=&lognum=116&id=dixq&rln=37973


 開発時のことを考えると、何度もデータを更新したり追加したりが発生するので実行ファイル内に
埋め込むのはあまりお勧めできませんが、もしそうする必要性が充分にあるのでしたら
開発時はファイルからロードし、配布時は実行ファイル内の埋め込まれたデータを参照するように、
状況に応じて切り替えられるような仕組みを作っておくといいでしょう。


503ポイント を落としてしまった。

Name: タック  ..ぴよぴよ(477ポイント)   Date: 2009/12/29(火) 22:20   No:45153     
Title: Re:画像や音楽を実行ファイルに埋め込むには?    
>>SooAさん
返答ありがとうございます。
お察しの通りDXライブラリを使用しているのですが、すみません、
DXライブラリ本家に方法がはっきりと書かれていたのですね。
初心者には取っ付きやすいので、この方法でやってみようかと思います。


ところで、『配布目的の場合、アーカイブファイルを作成する方が望ましい』というのは何故なんですか?
タイトルとは少し質問内容がずれてしまいましたが、どうかよろしくお願いします。


165ポイント を手に入れた。

Name: タック  ..ぴよぴよ(638ポイント)   Date: 2009/12/29(火) 22:32   No:45154 解決!     
Title: Re:画像や音楽を実行ファイルに埋め込むには?    
すみません、被りました…。

>>Justyさん
返信ありがとうございます。
なるほど、ファイルのバージョンアップ等について失念しておりました。
掲示板の過去ログの検索不足についても申し訳ありません。有り難く拝見させて頂きます。

素人考えですが、ファイルを一まとめにできた方が煩わしくないと思っておりましたが、
あまり一般的なやり方ではない様ですね。
データファイルをまとめるやり方でやってみようかと思います。

SooAさん、Justyさん、本当にありがとうございました。


161ポイント を手に入れた。

Name: SooA [URL]  ..上級者(20,823ポイント)   Date: 2009/12/29(火) 22:34   No:45155     
Title: Re:画像や音楽を実行ファイルに埋め込むには?    
>何故なんですか?
タックさんの目的が
配布する=データを見られない形で添付したい
と勝手に解釈させてもらい、
そうであればリソースに組み込んでDXライブラリで使用できるように
プログラムを書き直すよりも、
DXアーカイブを使用した後者の方が良いという意味で書きました。


109ポイント を手に入れた。



Name: おむすび  ..入門者(2,567ポイント)   Date: 2009/12/29(火) 16:51   No:45104       
Title: シーンごとのソース管理    
以前こちらで質問させて頂きました者です。

http://www.play21.jp/board/formz.cgi?action=res&resno=38690&page=&lognum=118&id=dixq&rln=38727

上記のソースを使いシーンの管理をしております。
ただシーンのチェンジのやりかたがわかりません。
どのようにすればよいのでしょうか・・・。


115ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(486,450ポイント)   Date: 2009/12/29(火) 17:07   No:45107     
Title: Re:シーンごとのソース管理    
 GetSceneFuncに渡す引数[シーンID]を変えれば実行されるシーン関数が変わります。
 シーンIDは変数としてどこかに保持しておいて、シーンを変えたくなったら別のIDを代入するといいでしょう。


96ポイント を手に入れた。

Name: おむすび  ..入門者(2,642ポイント)   Date: 2009/12/29(火) 17:24   No:45110     
Title: Re:シーンごとのソース管理    
回答ありがとうございます。

// スタート時のシーン SCENE_START
// ゲームシーン SCENE_GAME

whileの中にGetSceneFunc(SCENE_GAME);
と書いてあるのですがシーンが変わってくれません・・。
使い方が違うのでしょうか・・・。


75ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(486,504ポイント)   Date: 2009/12/29(火) 17:35   No:45112     
Title: Re:シーンごとのソース管理    
 そのソースを見ないとなんともよくわからないところがありますが、
GetSceneFunc関数の中で、IDに応じて返すシーン関数情報はそれぞれ正しく IDに対応したものを
返していますか?


54ポイント を手に入れた。

Name: おむすび  ..入門者(3,904ポイント)   Date: 2009/12/29(火) 18:22   No:45117     
Title: Re:シーンごとのソース管理    
game_sceneとstart_sceneは用意してあります。
お互いにDrawにお互い違うメッセージを表示するようにしております。

#include "DxLib.h"
#include "MyLib.h"
#include "main.h"
#include "start_scene.h"
#include "game_scene.h"
#include <time.h>

//////////////////////////////////////////////////

// キー用
typedef struct{
    bool Flg;
    char Key;
    char pulKey;
    char trgKey;
}KEY;

KEY Key[256];

//////////////////////////////////////////////////

void SetKey(void);

//////////////////////////////////////////////////

// シーンIDの管理
typedef enum SceneID{ 
    SCENE_NONE,
    SCENE_START, 
    SCENE_GAME, 
    SCENE_MAX 
}SceneID;

// シーンIDから呼び出す関数の情報を取得 
const SceneFunc *GetSceneFunc(SceneID id) 
{ 
    const SceneFunc *sceneFunc; 
    switch(id){ 
        case SCENE_START: 
            sceneFunc = GetSceneFunc_Start(); 
            break; 
        case SCENE_GAME:
            sceneFunc = GetSceneFunc_Game(); 
            break; 
        default: 
         //   sceneFunc = NULL; 
            break; 
    }
    System.SceneNum = id;
    return sceneFunc; 
}

//////////////////////////////////////////////////

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){

    ChangeWindowMode(true);                        //  ウインドウの変更 フルスクリーン・ウインドウ
    SetDrawScreen( DX_SCREEN_BACK ) ;           // 描画先を裏画面に設定
    SetWaitVSyncFlag( FALSE ); 

    // DXライブラリ初期化処理
    if( DxLib_Init() == -1 ){
         return -1;                // エラーが起きたら直ちに終了
    }

    const SceneFunc *sceneFunc = GetSceneFunc(SCENE_START); 

    //  システム
    System.InitFlg = true;
    
    //  フォント
    SetFontSize(FONT_SIZE);
//    ChangeFont("HGPゴシックM");

    //  乱数の初期化
    SRand((unsigned) time(NULL));

    //  処理
    while(1){
        // メッセージループに代わる処理をする
        if(Key[KEY_INPUT_ESCAPE].Key || ProcessMessage() == -1 ){
            break ;        // エラーが起きたらループを抜ける
        }
        if(System.InitFlg){
            if(sceneFunc->init)        sceneFunc->init();
        }


        SetKey();
        if(sceneFunc->loop)        sceneFunc->loop(); 

        if(Key[KEY_INPUT_F3].trgKey){
            GetSceneFunc(SCENE_GAME);
        }
        // BMP画像の表示
        ClearDrawScreen();
        if(sceneFunc->draw)    sceneFunc->draw();
        ScreenFlip();

        if(System.FinishFlg){
            if(sceneFunc->finish)    sceneFunc->finish();
        }
        System.InitFlg = false;
        System.FinishFlg = false;
    }

    // 描画が終ったのでグラフィックをメモリ上から削除する
//    DeleteGraph( H_Chr ) ;

    DxLib_End() ;                // DXライブラリ使用の終了処理
    
    return 0 ;                    // ソフトの終了
}


//  キーの情報の取得
void SetKey(void){
    
    static char key[256];
    
    //  キー入力の取得
    GetHitKeyStateAll(key);

    for(int i=0; i<256; i++){        
        Key[i].Key = key[i];    
        if(Key[i].Key){
            if(Key[i].Flg == false){
                Key[i].trgKey = true;
                Key[i].Flg = true;
            }else{
                Key[i].trgKey = false;
            }
        }else{
            Key[i].trgKey = 0;
            Key[i].Flg = false;
        }
    }
}



1,262ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(486,668ポイント)   Date: 2009/12/29(火) 18:30   No:45119     
Title: Re:シーンごとのソース管理    
 実際にシーケンスを実行するための情報を持っているのが WinMain関数のローカル変数 sceneFuncなわけですが、
これが最初に GetSceneFunc(SCENE_START) でポインタを受け取って以来、変更されていません。

  GetSceneFunc(SCENE_GAME) を呼んだ際に sceneFuncを更新してみて下さい。
 それでシーンは変化するはずです。


164ポイント を手に入れた。

Name: おむすび  ..入門者(3,998ポイント)   Date: 2009/12/29(火) 18:31   No:45121     
Title: Re:シーンごとのソース管理    
なんどもすみません。
変わっておりました。

if(Key[KEY_INPUT_F3].trgKey){
}
のコメントを外してidの数値が変動することも確認しております。

原因は前のシーンで表示していた画像が消えないということにありました。
そうすればよいのでしょうか・・・。


94ポイント を手に入れた。

Name: おむすび  ..入門者(4,023ポイント)   Date: 2009/12/29(火) 19:04   No:45127     
Title: Re:シーンごとのソース管理    
連レスすみません。

画像の削除ついては切り替えのときに
InitGraph();
InitFontToHandle();
を書いてできました。
しかしゲームシーンのDrawで書いてあるDrawFormatString()を表示してくれません。

シーンのidは変わっております。


25ポイント を手に入れた。

Name: おむすび  ..入門者(4,164ポイント)   Date: 2009/12/29(火) 19:07   No:45128     
Title: Re:シーンごとのソース管理    
何度も回答してすみません。
ご指摘いただけましたので下記のように変更したのですが
idしか変わりませんでした・・・。

        if(Key[KEY_INPUT_F2].trgKey){
            const SceneFunc *sceneFunc = GetSceneFunc(SCENE_GAME); 
            System.InitFlg = true;
            System.FinishFlg = true;
        }


141ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(486,768ポイント)   Date: 2009/12/29(火) 19:20   No:45131     
Title: Re:シーンごとのソース管理    

> const SceneFunc *sceneFunc = GetSceneFunc(SCENE_GAME); 

 これは新しい変数として代入していますよね?
 既にある既存の sceneFuncを変更しないと意味がないです。


100ポイント を手に入れた。

Name: おむすび  ..入門者(4,189ポイント)   Date: 2009/12/29(火) 19:26   No:45132     
Title: Re:シーンごとのソース管理    
すみません。出来ました。
ありがとうございます><


25ポイント を手に入れた。

Name: おむすび  ..入門者(4,202ポイント)   Date: 2009/12/29(火) 20:22   No:45138 解決!     
Title: Re:シーンごとのソース管理    
すみません。解決マークつけます。

13ポイント を手に入れた。



Name: yrao  ..中級者(11,981ポイント)   Date: 2009/12/29(火) 00:16   No:45057       
Title: ボムのカットインについて    
こんばんは、お世話になってます。 
 
質問の前にお聞きしたいことがあります。
現在、他に質問中のスレがあるのですが、複数の質問を並行してするのは問題ないでしょうか?
 
 
少し前に、利用規約に関する問題がでていたため少し気になりまして・・・
 
 
もし、並行質問をしてはいけないのであれば、質問中のことを解決してから再度質問させてもらおうと思います。
 
 
----------------------------------------------------


 
ボムを打つときに入る、キャラクターのカットインエフェクトについての質問です。 
 
 
カットインの方向、速度を変えたいと思い、以下のように変更したのですが、


------------------------------------------------

//キャラ
    if((k=search_effect())!=-1){
        effect[k].m_cnt=0;//←構造体に新たに追加しました
    effect[k].flag=1;
        effect[k].cnt=0;
        effect[k].knd=2;//ボムのキャラ・線のエフェクト
        effect[k].brt=0;
        effect[k].ang=0;
        effect[k].mvang=PI;
        effect[k].spd=0;
        effect[k].r=1;
        effect[k].eff=2;
        effect[k].img=img_eff_bom[2];
        effect[k].x=500;
        effect[k].y=320;
        effect[k].m_cnt++;

        if(effect[k].m_cnt>=0 && effect[k].m_cnt<=5){effect[k].spd=20;}
        if(effect[k].m_cnt>5 && effect[k].m_cnt<=50){effect[k].spd=2;}
        if(effect[k].m_cnt>50){effect[k].spd+=5;}
    
    }


 
------------------------------------------------
画像が左に流れる速度が変わりません(effect[k].spd=20のままです)
 
 
・・・どこが問題なのでしょうか?
わかる方いましたらよろしくお願いします。


576ポイント を手に入れた。


Name: あ〜る  ..中級者(14,693ポイント)   Date: 2009/12/29(火) 00:42   No:45058     
Title: Re:ボムのカットインについて    
処理を書いてるところがボムの登録部なので一回しか呼ばれてないんだと思います
calc_effect関数のcase2の処理を弄れば期待通りの動作になると思います
あと、既にeffect構造体にはcnt変数があるので、新たにm_cntを作る必要は無いんじゃないでしょうか?


82ポイント を手に入れた。

Name: yrao  ..中級者(12,013ポイント)   Date: 2009/12/29(火) 18:56   No:45125     
Title: Re:ボムのカットインについて    
あ〜るさん、ありがとうございます。
 
 
エフェクトの計算は、calc_effect()の方だったのですねf^_^;
 
おかげさまでちゃんと動きました。
 
 
 
あと、並行質問は大丈夫だったのでしょうか?


32ポイント を手に入れた。

Name: yrao  ..中級者(12,041ポイント)   Date: 2009/12/29(火) 18:58   No:45126     
Title: Re:ボムのカットインについて    
すみません追伸です、
 
effect.m_cnt利用→effect.cnt利用にもしました


28ポイント を手に入れた。

Name: yrao  ..中級者(12,127ポイント)   Date: 2009/12/29(火) 19:08   No:45129     
Title: Re:ボムのカットインについて    
あ〜るさん、ありがとうございます。
 
 
エフェクトの計算は、calc_effect()の方だったのですねf^_^;
 
おかげさまでちゃんと動きました。
 
 
 
あと、並行質問は大丈夫だったのでしょうか?


86ポイント を手に入れた。

Name: あ〜る  ..中級者(14,835ポイント)   Date: 2009/12/29(火) 19:36   No:45133     
Title: Re:ボムのカットインについて    
並行質問については良くわかりません
掲示板なんで返答にも時間が掛かるし、その間に別の疑問が出て来るかもしれないんで別に良いんじゃないかな、と僕は思いますが(^^)

ただ、プログラム的には二つの事を同時に進めると何か予測外のエラーが出た時に、中途半端になってる部分が影響してたりして自分で何がエラーの元になってるのかわからなってしまうかもしれないです
というか僕はなります…(-.-;)


142ポイント を手に入れた。

Name: yrao  ..中級者(12,271ポイント)   Date: 2009/12/29(火) 20:04   No:45136 解決!     
Title: Re:ボムのカットインについて    

分かりました(^-^)
 

頻繁に質問させてもらうことになるやもですが、その時はよろしくお願いします…<(__)>


2倍のポイントを手に入れた! 98ポイント を手に入れた。



Name: yrao  ..初心者(8,043ポイント)   Date: 2009/12/17(木) 22:46   No:44427       
Title: 弾を残像させる方法2    
先日のスレが過去ログに入ってしまったので、改めて質問させていただきます。

 
softyaさん遅れてしまいすみません;
 
 
 
>弾を生成する場所
これはshot.cppのshot_main()関数で良いのでしょうか?


61ポイント を手に入れた。


Name: softya  ..比類無きプログラマー(70,127ポイント)   Date: 2009/12/17(木) 23:31   No:44436     
Title: Re:弾を残像させる方法2    
過去ログは、これですね。
http://www.play21.jp/board/formz.cgi?action=res&resno=43825&page=&lognum=135&id=dixq&rln=438251261004873

>弾を生成する場所 
>>これはshot.cppのshot_main()関数で良いのでしょうか?
違いますね。
ヒントとして、弾(bullet)のどのパラメータを変えると弾が生成され移動や表示されるか考えてみればわかりますよ。


132ポイント を手に入れた。

Name: yrao  ..初心者(8,086ポイント)   Date: 2009/12/18(金) 15:39   No:44491     
Title: Re:弾を残像させる方法2    
boss.shot.bullet[i].flagですか?

もしそうであれば、
search_boss_shot()
ではないかと考えているのですが…


43ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(70,430ポイント)   Date: 2009/12/19(土) 00:22   No:44506     
Title: Re:弾を残像させる方法2    
じゃぁ、そう仮定して何処を直せばよいか分かりますか?

24ポイント を手に入れた。

Name: yrao  ..初心者(8,276ポイント)   Date: 2009/12/19(土) 12:13   No:44520     
Title: Re:弾を残像させる方法2    
よく分からないです…
 
先日の穴埋め問題の、

1、配列を画面外で初期化する
 
この手順の¨配列を初期化する¨という事がよく分からない(方法が分からない)のです。

もし、龍神録のプロジェクトのなかで、他にこの配列の初期化をしている箇所があれば参考にしたいのですが、ありますでしょうか? 
 
ちなみに初期化をする配列は、
・bx[10]
・by[10]
でいいんですよね?


190ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(70,521ポイント)   Date: 2009/12/19(土) 13:25   No:44523     
Title: Re:弾を残像させる方法2    
>この手順の¨配列を初期化する¨という事がよく分からない(方法が分からない)のです。 

forループで回して同じ値を入れるだけですよ。

>・bx[10]
>・by[10] 

bangleも同時に初期化してくださいね。


91ポイント を手に入れた。

Name: yrao  ..初心者(8,285ポイント)   Date: 2009/12/19(土) 18:36   No:44525     
Title: Re:弾を残像させる方法2    
for( int b=9 ; b>0 ; b-- ) {boss_shot[n].bullet[k].bx[b] = -50;
・・・・・・
 
 
こういうことですか?


9ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(70,605ポイント)   Date: 2009/12/19(土) 18:50   No:44526     
Title: Re:弾を残像させる方法2    
>for( int b=9 ; b>0 ; b-- ) {

このfor文をここで使うのは間違っています。
bが9から始まって、bが1で終わるためです。
ごく普通にループを回せば良いだけですよ。

もし、本当にこれが分からないのであれば流石にC言語の基本的な勉強を1ヶ月で良いのでされた方が良いと思います。例えば0から100までの数値をprintfするプログラムは即時に作れますよね?
出来るのであれば難しく考えすぎだと思います。


84ポイント を手に入れた。

Name: yrao  ..初心者(8,340ポイント)   Date: 2009/12/19(土) 21:25   No:44528     
Title: Re:弾を残像させる方法2    
0〜100を表示する
…というと
 
int i
for(i=0; i<=100; i++){
    printf("%d\n",i);
}
ですよね?
(間違ってたらどうしよう…)
 

そうすると、
for(int b=0; b<=9; b++)
 
でしょうか


55ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(70,685ポイント)   Date: 2009/12/19(土) 22:47   No:44529     
Title: Re:弾を残像させる方法2    
>for(int b=0; b<=9; b++) 
そうですね。これでOKです!

ただ、
for(int b=0; b<10; b++) 
こう書くほうが一般的で、かつ配列の宣言時と同じ数値が出てくる方が後で直すときとかに便利ですね。


80ポイント を手に入れた。

Name: yrao  ..初心者(8,424ポイント)   Date: 2009/12/19(土) 23:34   No:44530     
Title: Re:弾を残像させる方法2    
分かりました。
 

後分からないのは、弾を発生させている場所ですね。これがどうにも…


確認したいのですが、
弾を生成するためのフラグは、

boss_shot[i].bullet.flag
ですよね?


84ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(70,731ポイント)   Date: 2009/12/20(日) 00:33   No:44533     
Title: Re:弾を残像させる方法2    
boss_shot[i].bullet[j].flag
が弾の存在有無を決めますね。
値が0なら存在しなくて、1なら存在です。 


46ポイント を手に入れた。

Name: yrao  ..初心者(8,464ポイント)   Date: 2009/12/20(日) 20:39   No:44545     
Title: Re:弾を残像させる方法2    
boss_shot.bullet.flag
が1にされているのは、boss_shotH.cpp内のような気がするのですが、あってますか?


40ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(70,819ポイント)   Date: 2009/12/20(日) 21:45   No:44549     
Title: Re:弾を残像させる方法2    
>boss_shotH.cpp内のような気がするのですが、あってますか?
合ってますよ。
そもそも、全部のボスショットに残像を付けるんじゃなくて、特定のボスショットだけに残像を付けるつもりなんですよね?それとも全部ですか?


88ポイント を手に入れた。

Name: yrao  ..初心者(8,641ポイント)   Date: 2009/12/20(日) 22:31   No:44551     
Title: Re:弾を残像させる方法2    
ここまで話を進めておいて、質問の仕方が悪かったようです…


例えば、

『ケロちゃん風雨に負けず』
を作ってみよう

の章で、
boss_shot.bullet[k].eff_detail
を1にすると弾がピカピカ光るようになりますよね。あれと同じ仕組みで、
eff_detailを2にすると弾が尾を引く、という風にできないでしょうか?
 
という事だったのですが…明らかな質問不足でしたね。本当にすいません;


177ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(70,868ポイント)   Date: 2009/12/20(日) 23:08   No:44552     
Title: Re:弾を残像させる方法2    
であれば、そのショットの初期化時にeff_detailを2にして、弾残像の値もセットしてやれば良いだけですね。
で、残像の計算や表示処理もeff_detailが2の場合だけ行えばよいのです。



49ポイント を手に入れた。

Name: yrao  ..初心者(8,648ポイント)   Date: 2009/12/23(水) 01:20   No:44697     
Title: Re:弾を残像させる方法2    

また頭がこんがらがって来てしまいました;
次の二つのことについて確認させて下さい。



一つ目

>そのショットの初期化時にeff_detailを2にして、

…これは、段幕関数内で、boss_shot[i].bullet.x=□□□;
boss_shot[i].bullet.y=□□□;



のように書いているところで、
boss_shot[i].bullet.eff_detail=2;
と書いてやる
ということでしょうか?


二つ目

>弾残像の値もセットしてやれば良い

…この処理はどこに書くのでしょうか?
弾幕関数内ではないですよね?







7ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(72,637ポイント)   Date: 2009/12/23(水) 02:06   No:44700     
Title: Re:弾を残像させる方法2    
>>一つ目 
その通りですね。
弾幕関数内で、弾を生成していますのでそこでeff_detail=2;を設定してやれば良いです。

>>二つ目 
同じ場所ですよ。
弾のbx,byは一度でも使われると画面内の値が入っているんで画面外に再設定してやる必要があります。
まぁ、初回かどうか判定する必要も無く無条件に画面外座標の設定で良いでしょう。


13ポイント を手に入れた。

Name: yrao  ..初心者(8,701ポイント)   Date: 2009/12/23(水) 11:55   No:44723     
Title: Re:弾を残像させる方法2    
なるほど
 
つまり、
bx[10]
by[10]
bangle[10]
の初期化は、毎回、各弾幕関数内で行う、ということですか?


53ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(72,865ポイント)   Date: 2009/12/23(水) 12:09   No:44730     
Title: Re:弾を残像させる方法2    
>の初期化は、毎回、各弾幕関数内で行う、ということですか?
それでOKです。
私の趣味としては、それとは別にini関数で初期化しておきたいですけどね。
これは、長年の経験から初期化してない変数はバグの元って意識があるからです。


33ポイント を手に入れた。

Name: yrao  ..初心者(8,764ポイント)   Date: 2009/12/23(水) 15:01   No:44765     
Title: Re:弾を残像させる方法2    
了解です。
そうですね、ini関数内でも初期化することにします。
 
 
 
おかげさまで、ようやく弾を残像させる方法がわかってきました。
今から処理を書いていってみようと思います。
もしまた、プログラムの書き方で分からない所が出てたら質問させてくださいm(__)m


63ポイント を手に入れた。

Name: yrao  ..初心者(8,789ポイント)   Date: 2009/12/24(木) 19:47   No:44829     
Title: Re:弾を残像させる方法2    
出ました、エラーが;
 
 
error C2665: 'DrawRotaGraphF' : オーバーロードのどれも、すべての引数の型を変換できませんでした
 
というエラーです。
恐らく問題になっている箇所は、graph.cppのgraph_bullet()内の

 
if(boss_shot.bullet[j].eff_detail==2){
   for(int b=9; b>0; b--){
      double blend = 0.8;
      SetDrawBlendMode(DX_BLENDMODE_ALPHA,blend);
      DrawRotaGraphF(
      boss_shot.bullet[j].bx+FX+dn.x , boss_shot.bullet[j].by+FY+dn.y , 1.3 , disp_angle,
      img_bullet[boss_shot.bullet[j].knd][boss_shot.bullet[j].col],TRUE);  
      blend-=0.07; 
   }
}
 

 
…だと思うのですが…


25ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(73,486ポイント)   Date: 2009/12/25(金) 01:25   No:44839     
Title: Re:弾を残像させる方法2    
少なくとも
>for(int b=9; b>0; b--){
は間違っています。
このループだけ取り出してbをprintfしてみて下さい。意味が分かります。
前のスレッドで、このループは特殊な使い方だと説明したはずですが・・・。

>SetDrawBlendMode(DX_BLENDMODE_ALPHA,blend);
だけして、
SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0) ;
していないのも問題です。

エラーを見る限りDrawRotaGraphF()で間違いがあります。
まず、bx[]は配列のはずなのに添字がありません。
disp_angleと言う変数も何処で宣言したのか分かりませんし、bangle[]はどこで使われたのでしょうか?

その他にもエラーが出ているはずなんですが?出てませんか?


77ポイント を落としてしまった。

Name: yrao  ..中級者(9,103ポイント)   Date: 2009/12/25(金) 17:37   No:44877     
Title: Re:弾を残像させる方法2    
いろいろと間違っていましたね(汗

とりあえず…
  
if(boss_shot.bullet[j].eff_detail==2){
    for(int b=0; b>10; b++){
       double blend = 0;
       SetDrawBlendModeDX_BLENDMODE_ALPHA,blend);
       DrawRotaGraphF(
       boss_shot.bullet[j].bx[b]+FX+dn.x , boss_shot.bullet[j].by[b]+FY+dn.y , 1.3 ,boss_shot.bullet[j].bangle[b] ,
       img_bullet[boss_shot.bullet[j].knd][boss_shot.bullet[j].col],TRUE);  
       SetDrawBlendMode(DX_BLENDMODE_NOBLEND,0);
       blend+=0.07; 
    }
 }
  

  
に変更しました。
エラーは出なくなり、実行は出来るようになったのですが

・残像しない
・fpsがガタ落ち(29位まで落ちました)


…という現象が…
 
 


後、bx,by,bangleの三つの配列の初期化なのですが、弾幕作成に、龍神録の支館様の弾幕簡略化関数を用いているため、簡略化関数を作成している場所でまとめて初期化してしまっています。

不具合に関係があるかもしれないので一応…


314ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(73,586ポイント)   Date: 2009/12/25(金) 18:49   No:44882     
Title: Re:弾を残像させる方法2    
やたら、eff_detail==2にしてない限りは処理落ちしないはずです。
それと、if(boss_shot.bullet[j].eff_detail==2)の条件の前に、boss_shot.bullet[j].flagが1か確認してますよね?無効な弾の残像表示していたら遅くなりますよ。

あれ?
残像の位置の計算の話が出ませんが組み込まれたのでしょうか?
そちらのソースも処理する条件を見直してみて下さい。


99ポイント を手に入れた。

Name: yrao  ..中級者(10,871ポイント)   Date: 2009/12/25(金) 23:31   No:44886     
Title: Re:弾を残像させる方法2    
やっとインターネットにつなげたので、追加した部分とその周辺を載せますね。
(今まで携帯からの質問だったので)

・配列初期化
//  bullet_way(発射座標 X, 発射座標 Y, 分割(n道弾), ベース角度, 分割角度幅, 速度, 種類, 色, 状態,きらきら);
int bullet_way(double x, double y, int way, double angle, double angle2, double spd, int knd, int col, int state , int brt){
    int k,i;

    for(i=0;i<way;i++){
        if((k=search_boss_shot())!=-1){
            boss_shot.bullet[k].flag  = 1;
            boss_shot.bullet[k].cnt   = 0;
            boss_shot.bullet[k].x     = x;
            boss_shot.bullet[k].y     = y;
            boss_shot.bullet[k].angle = angle-angle2*(way/2)+angle2*i;
            boss_shot.bullet[k].knd   = knd;
            boss_shot.bullet[k].spd   = spd;
            boss_shot.bullet[k].col   = col;
            boss_shot.bullet[k].state = state;
            boss_shot.bullet[k].eff_detail = brt;
            
        }
    }
    for(int b=0; b<10; b++){//←ココ
        boss_shot.bullet[k].bx[b] = -50;
        boss_shot.bullet[k].by[b] = -50;
        boss_shot.bullet[k].bangle[b] = 0;
    }
    se_flag[0]=1;

    return k;
}
・残像計算
void boss_shot_calc(){
    int i;
    boss.endtime--;
    if(boss.endtime<0)
        boss.hp=0;
    for(i=0;i<BOSS_BULLET_MAX;i++){
        if(boss_shot.bullet[i].flag>0){
            boss_shot.bullet[i].x+=cos(boss_shot.bullet[i].angle)*boss_shot.bullet[i].spd;
            boss_shot.bullet[i].y+=sin(boss_shot.bullet[i].angle)*boss_shot.bullet[i].spd;
            boss_shot.bullet[i].cnt++;
            if(boss_shot.bullet[i].flag!=0){//←ここから
                if(boss_shot.bullet[i].eff_detail==2){
                    for(int b=9; b>0; b--){
                        boss_shot.bullet[i].bangle[b]=boss_shot.bullet[i].bangle[b-1];
                        boss_shot.bullet[i].bx[b]=boss_shot.bullet[i].bx[b-1];
                        boss_shot.bullet[i].by[b]=boss_shot.bullet[i].by[b-1];
                    
                        boss_shot.bullet[i].bangle[0]=boss_shot.bullet[i].angle;
                        boss_shot.bullet[i].bx[0]=boss_shot.bullet[i].x;
                        boss_shot.bullet[i].by[0]=boss_shot.bullet[i].y;
                    }
                }//←ここまで
            }
            if(boss_shot.bullet[i].cnt>boss_shot.bullet[i].till){
                if(boss_shot.bullet[i].x<-150 || boss_shot.bullet[i].x>FMX+150 ||
                    boss_shot.bullet[i].y<-150 || boss_shot.bullet[i].y>FMY+150)
                    boss_shot.bullet[i].flag=0;
            }
        }
    }
    
}
・残像描画
//弾丸の描画
void graph_bullet(){
    int i,j,eff;
    double disp_angle;
    SetDrawMode( DX_DRAWMODE_BILINEAR ) ;//線形補完描画
    for(i=0;i<SHOT_MAX;i++){//敵の弾幕数分ループ
        if(shot[i].flag>0){//弾幕データがオンなら
            for(j=0;j<SHOT_BULLET_MAX;j++){//その弾幕が持つ弾の最大数分ループ
                if(shot[i].bullet[j].flag!=0){//弾データがオンなら
                    if(shot[i].bullet[j].eff==1)
                        SetDrawBlendMode( DX_BLENDMODE_ADD, 255) ;
                    if(bullet_info[shot[i].bullet[j].knd].kaiten==1)
                        disp_angle=PI2*(shot[i].bullet[j].cnt%120)/120;
                    else
                        disp_angle=shot[i].bullet[j].angle+PI/2;

                    DrawRotaGraphF(
                        shot[i].bullet[j].x+FX+dn.x, shot[i].bullet[j].y+FY+dn.y,
                        1.0, disp_angle,
                        img_bullet[shot[i].bullet[j].knd][shot[i].bullet[j].col],TRUE);

                    if(shot[i].bullet[j].eff==1)
                        SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0) ;
                }
            }
        }
    }
    void boss_assist_img();
    //ボス
    if(boss_shot.flag>0){//弾幕データがオンなら
        for(j=0;j<BOSS_BULLET_MAX;j++){//その弾幕が持つ弾の最大数分ループ
            if(boss_shot.bullet[j].flag!=0){//弾データがオンなら
                eff=0;
                if(boss_shot.bullet[j].kaiten==1)
                    disp_angle=PI2*(boss_shot.bullet[j].cnt%120)/120;
                else
                    disp_angle=boss_shot.bullet[j].angle+PI/2;
                if(boss_shot.bullet[j].eff_detail==1){//風雨にも負けず用弾エフェクト
                    SetDrawBlendMode( DX_BLENDMODE_ADD, 100+GetRand(155)),eff=1 ;
                    DrawRotaGraphF(
                        boss_shot.bullet[j].x+FX+dn.x, boss_shot.bullet[j].y+FY+dn.y,
                        1.3, disp_angle,
                        img_bullet[boss_shot.bullet[j].knd][boss_shot.bullet[j].col],TRUE);
                }
                if(boss_shot.bullet[j].eff_detail==2){//残像
                    for(int b=0 ; b<10; b++){
                        double blend =0;
                        SetDrawBlendMode( DX_BLENDMODE_ALPHA, blend);
                        DrawRotaGraphF(
                            boss_shot.bullet[j].bx[b]+FX+dn.x, boss_shot.bullet[j].by[b]+FY+dn.y,
                            1.3,boss_shot.bullet[j].bangle[b],
                            img_bullet[boss_shot.bullet[j].knd][boss_shot.bullet[j].col],TRUE);
                        SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0);
                        blend+=0.07;
                    }
                }
                if(boss_shot.bullet[j].eff==1)
                    SetDrawBlendMode( DX_BLENDMODE_ADD, 255),eff=1 ;
                if(boss_shot.bullet[j].eff==2)
                    SetDrawBlendMode( DX_BLENDMODE_ADD, 255+GetRand(100)),eff=1 ;
                DrawRotaGraphF(
                    boss_shot.bullet[j].x+FX+dn.x, boss_shot.bullet[j].y+FY+dn.y,
                    1.0, disp_angle,
                    img_bullet[boss_shot.bullet[j].knd][boss_shot.bullet[j].col],TRUE);

                if(eff==1)
                    SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0) ;
            }
        }
//アシスト
・・・字数の都合上省略させていただきます。・・・    
    

       }
    SetDrawMode(DX_DRAWMODE_NEAREST);//描画形式を戻す
}


こんなところでしょうか。
ini関数内での初期化はまだ書いていません。
 
処理落ちは、いまだ改善されていない状況です;



1,768ポイント を手に入れた。

Name: ひよこ  ..比類無きプログラマー(76,442ポイント)   Date: 2009/12/26(土) 07:48   No:44892     
Title: Re:弾を残像させる方法2    
残像しないというのは、この部分が原因ではないのでしょうか?
boss_shot.bullet[i].bx[b]=boss_shot.bullet[i].bx[b-1];                    
boss_shot.bullet[i].by[b]=boss_shot.bullet[i].by[b-1];
どんどん新しくするときに弾の座標が入っていないのではないのでしょうか。
あと、残像のブレンドなのですが、ループごとに宣言しているように見えるので
色も変わらない気がします。



96ポイント を手に入れた。

Name: yrao  ..中級者(11,078ポイント)   Date: 2009/12/28(月) 00:35   No:44975     
Title: Re:弾を残像させる方法2    
ひよこさんありがとうございますm(__)m

返信がおくれてしまってすみませんでした。
 
>boss_shot.bullet[i].bx[b]=boss_shot.bullet[i].bx[b-1]; 
>boss_shot.bullet[i].by[b]=boss_shot.bullet[i].by[b-1]; 
>どんどん新しくするときに弾の座標が入っていないのではないのでしょうか。 
>あと、残像のブレンドなのですが、ループごとに宣言しているように見えるので 
>色も変わらない気がします。

下のように変更してみたところ、残像させることはできました。 

 
 
if(boss_shot.bullet[j].eff_detail==2){//残像
                            
                    
                    for(int b=0 ; b<10; b++){
                        SetDrawBlendMode( DX_BLENDMODE_ALPHA, 225-b*30);
                        DrawRotaGraphF(
                            boss_shot.bullet[j].bx[b]+FX+dn.x, boss_shot.bullet[j].by[b]+FY+dn.y,
                            1.3,boss_shot.bullet[j].bangle[b],
                            img_bullet[boss_shot.bullet[j].knd][boss_shot.bullet[j].col],TRUE);
                        SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0);
                        
                    }
                    
                }




(弾の座標計算の箇所は特にいじらなくても、残像は一応しました・・・)



残像させること自体はできたのですが、

・残像の弾の向きが、元の弾の向きと明らかに違う(bangle関係で、どこかがまちがっているのでしょうか・・・)

・(x,y)=(0,0)の場所に、残像するように設定した弾が描画されている。

・相変わらずfpsが28〜30台
 

という不具合が・・・

これは何が問題になっているのでしょうか


207ポイント を手に入れた。

Name: swing  ..ぴよぴよ(76ポイント)   Date: 2009/12/28(月) 02:07   No:44983     
Title: Re:弾を残像させる方法2    
ひとつ気になったこと。
for(int b=0 ; b<10; b++){
  SetDrawBlendMode( DX_BLENDMODE_ALPHA, 225-b*30);
  DrawRotaGraphF(

225-b*30は0〜255以内でないといけないと思うんですが。


76ポイント を手に入れた。

Name: wing  ..入門者(2,973ポイント)   Date: 2009/12/28(月) 02:09   No:44984     
Title: Re:弾を残像させる方法2    
自分の名前、間違えました。
swingではなくwingです。
失礼しました。


15ポイント を手に入れた。

Name: ひよこ  ..比類無きプログラマー(77,185ポイント)   Date: 2009/12/28(月) 09:14   No:44988     
Title: Re:弾を残像させる方法2    
元の弾の向きと明らかに違う
>>これは角度が違います。普通の弾の描画にはdisp_angleが使われています。
>>disp_angleは回転のフラグが立っていなかったらdisp_angle=boss_shot.bullet[j].angle+PI/2;
>>と弾に角度を足して描いているのでそのままじゃおかしくなります。
しかし、私も作ってみましたがfpsが低くなってしまいますね。


100ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(75,657ポイント)   Date: 2009/12/28(月) 10:57   No:44993     
Title: Re:弾を残像させる方法2    
出遅れましたが、純粋に残像の描画負荷が重いのかも知れませんね。
時間ができたら試してみますね。


33ポイント を手に入れた。

Name: wing  ..入門者(3,212ポイント)   Date: 2009/12/28(月) 12:25   No:45007     
Title: Re:弾を残像させる方法2    
もうひとつ気になったところが
    if(boss_shot.bullet[j].eff==1)
      SetDrawBlendMode( DX_BLENDMODE_ADD, 255),eff=1 ;
    if(boss_shot.bullet[j].eff==2)
      SetDrawBlendMode( DX_BLENDMODE_ADD, 255+GetRand(100)),eff=1 ;
    DrawRotaGraphF(
      boss_shot.bullet[j].x+FX+dn.x, boss_shot.bullet[j].y+FY+dn.y,
      1.0, disp_angle,img_bullet[boss_shot.bullet[j].knd][boss_shot.bullet[j].col],TRUE);

    if(eff==1)
      SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0) ;

のところで、
SetDrawBlendMode( DX_BLENDMODE_ADD, 255+GetRand(100)),eff=1 ;は
SetDrawBlendMode( DX_BLENDMODE_ADD, 155+GetRand(100)),eff=1 ;ではないでしょうか。


239ポイント を手に入れた。

Name: yrao  ..中級者(11,405ポイント)   Date: 2009/12/29(火) 00:04   No:45055     
Title: Re:弾を残像させる方法2    
皆さんありがとうございます。
 
 
>>wingさん
 
>for(int b=0 ; b<10; b++){
>  SetDrawBlendMode( DX_BLENDMODE_ALPHA, 225-b*30);
>  DrawRotaGraphF(
>225-b*30は0〜255以内でないといけないと思うんですが。

・・・確かにそうですね、

SetDrawBlendMode( DX_BLENDMODE_ALPHA, 150-b*15);

に修正しました。
ご指摘どうもです。

>SetDrawBlendMode( DX_BLENDMODE_ADD, 155+GetRand(100)),eff=1 ;
 
これも修正しておきました。
 
 
 
 
>>ひよこさん
 
disp_angleに変更したところ、角度の問題は解決しました!
ありがとうございます。
 
 
 
>>softyaさん

 
お手数をおかけしてしまってすみません、
よろしくおねがいしますm(__)m

描画数が10倍以上になってしまうわけですし、
残像処理はやはり負荷が大きいのでしょうか・・・
 
せっかくここまでやってきたので、なんとか実装したいのですが・・・
配列の数を減らせば、処理も軽くなるでしょうか?
 
 
 
 
 
 
それと、あとひとつ、
 
玉が連続的に x=0,y=0 に描画されていく
 
この不具合の原因がわからないです;
 
 




327ポイント を手に入れた。

Name: ひよこ  ..比類無きプログラマー(77,426ポイント)   Date: 2009/12/29(火) 09:08   No:45071     
Title: Re:弾を残像させる方法2    
disp_angleじゃなくて
boss_shot.bullet[j].bangle[b]+PI/2
としてくださいと言ったわけです。


7ポイント を手に入れた。

Name: yrao  ..中級者(12,173ポイント)   Date: 2009/12/29(火) 19:10   No:45130     
Title: Re:弾を残像させる方法2    
>>ひよこさん
 
意味を取り違えていました(+_+)

ありがとうございます、修正しました。


46ポイント を手に入れた。



Name: 研究生  ..ぴよぴよ(57ポイント)   Date: 2009/12/29(火) 15:05   No:45083       
Title: どんな文字列も必ず中央に表示する    
どんな長い文字列でも中央に表示できるように
文字数とFONT_SIZEから表示位置xを求めたいです。

FONT_SIZEはSetFontSize(FONT_SIZE);で指定した値です。

int x =(640-strlen(mess)/2*FONT_SIZE-FONT_SIZE)/2;
DrawFormatString(x,420,GetColor(255,255,255),"%s",mess);//disp配列の文字データを表示

どのようにすればよいのでしょうか・・・・。


57ポイント を手に入れた。


Name: kazuoni [URL]  ..ハッカー(121,048ポイント)   Date: 2009/12/29(火) 15:18   No:45085     
Title: Re:どんな文字列も必ず中央に表示する    
関数DrawFormatStringを使っているので、DXライブラリと決め打ちして・・・

int CalcCenterX(int x1,int x2,const char *str)
{
    int StrLen,StrWidth;
    StrLen=(int)strlen(str);
    StrWidth= GetDrawStringWidth(str,StrLen);
    return (int)((x1+((x2-x1)/2))-(StrWidth/2));
}

<引数>
x1=描写枠の左端のx座標
x2=描写枠の右端のx座標
str=文字列

<戻り値>
描写するx座標

自分はこんな感じで使っていました。
同じようにy座標の中心も計算できますね。


186ポイント を手に入れた。

Name: 研究生  ..ぴよぴよ(147ポイント)   Date: 2009/12/29(火) 15:24   No:45086     
Title: Re:どんな文字列も必ず中央に表示する    
ご回答ありがとうございます。
すみません。使っているのはDXライブラリであっております。

上記の場合
x1=描写枠の左端のx座標 
x2=描写枠の右端のx座標 
がわかってないと出来なくはないでしょうか。

出来れば文字列を渡すだけで中心に表示したいです。


90ポイント を手に入れた。

Name: kazuoni [URL]  ..ハッカー(121,094ポイント)   Date: 2009/12/29(火) 15:41   No:45089     
Title: Re:どんな文字列も必ず中央に表示する    
> 出来れば文字列を渡すだけで中心に表示したいです。

中心とはどこからどこの中心でしょうか?
もし一定範囲の中心ならば、関数内でconst int型で範囲を定義すればよいと思いますが・・・


46ポイント を手に入れた。

Name: 研究生  ..ぴよぴよ(347ポイント)   Date: 2009/12/29(火) 15:47   No:45091     
Title: Re:どんな文字列も必ず中央に表示する    
画面のx軸(MAX640)の中心にしたいです。

例えば
「あ」という文字なら320-FONT_SIZE/2に表示といった感じです。
わかりにくくて申し訳ないです。
どんな文字の長さでも左右の中心に表示したいです。


2倍のポイントを手に入れた! 200ポイント を手に入れた。

Name: kazuoni [URL]  ..ハッカー(121,381ポイント)   Date: 2009/12/29(火) 15:55   No:45094     
Title: Re:どんな文字列も必ず中央に表示する    
maxという意味がよくわからないのですが・・・
サイズは可変ではなく、WindowMode時の
クライアント領域のデフォルトサイズであるwidth=640の中心に
文字列を描写したいということでよろしいでしょうか?
int CalcCenterX(const char *str)
{
    const int x1=0;
    const int x2=640;
    int StrLen,StrWidth;

    StrLen=(int)strlen(str);
    StrWidth= GetDrawStringWidth(str,StrLen);
    return (int)((x1+((x2-x1)/2))-(StrWidth/2));
}


220ポイント を手に入れた。

Name: 研究生  ..ぴよぴよ(360ポイント)   Date: 2009/12/29(火) 16:06   No:45098 解決!     
Title: Re:どんな文字列も必ず中央に表示する    
ご回答ありがとうございます。
出来ました。助かりました。
ここの方は皆様親切ですね。


13ポイント を手に入れた。



Name: ZIKITETRY  ..ぴよぴよ(7ポイント)   Date: 2009/12/29(火) 15:02   No:45082       
Title: まずは実行させてみようで・・・    
ゲームに関しては初心者なのでバカです。
コンパイル、実行
とあったので、下のプログラムをコピペして
デバック→デバック開始を押しました。
しかし黒い画面しか出ません。
これって間違えてますか?


7ポイント を手に入れた。


Name: fatens  ..入門者(3,191ポイント)   Date: 2009/12/29(火) 15:14   No:45084     
Title: Re:まずは実行させてみようで・・・    
ESCキーを押して終了すればあってます。


13ポイント を手に入れた。

Name: ZIKI  ..ぴよぴよ(14ポイント)   Date: 2009/12/29(火) 15:28   No:45088     
Title: Re:まずは実行させてみようで・・・    
ありがとうございます!
すみませんが、もう一つ答えてくれたら幸いなのですが、
「コンパイル、実行」=「デバック、デバック実行」
と言うことなのでしょうか?


14ポイント を手に入れた。

Name: fatens  ..入門者(3,467ポイント)   Date: 2009/12/29(火) 15:47   No:45092     
Title: Re:まずは実行させてみようで・・・    
イコールではないです。
簡単に言うと、
コンパイルはソースコードの変換です。
デバッグ(×デバック)とは、プログラムのバグを取り除くことです。

また、ビルド(コンパイルその他)せずにデバッグ開始を選択した場合、
ビルドするかどうかのダイアログが出て、「はい」を選択するとビルド、実行されます。


2倍のポイントを手に入れた! 276ポイント を手に入れた。

Name: ZIKI  ..ぴよぴよ(23ポイント)   Date: 2009/12/29(火) 16:01   No:45096 解決!     
Title: Re:まずは実行させてみようで・・・    
ありがとうございます!!!

9ポイント を手に入れた。



Name: situmon  ..熟練のプログラマー(47,040ポイント)   Date: 2009/12/24(木) 01:58   No:44797       
Title: キーの反応について    
東方はタイトル画面でZキーを押しっぱなしでもどんどん前に行きません。
というのはZキーが押されたら次の画面へ・・・という判定を作ると
押しっぱなしでも反応してしまうので、タイトル画面→難易度選択画面→1ステージといきたいのが、
タイトル画面で決定キーを押しっぱなしにすると難易度選択画面が飛ばされてしまうのです。(というよりは難易度選択画面でも押しっぱなしの決定キーが反応し即座に次の画面へいってしまいます。
どうすればいいのでしょうか?
説明が下手なのでわからなければいってください。
お願いします。

今までの方法では画面に移るごとにカウントをして、カウントが60になるまで操作はできないようにするという方法をとっていましたが、不便ですごく微妙でした。


43ポイント を手に入れた。


Name: y  ..入門者(4,250ポイント)   Date: 2009/12/24(木) 03:32   No:44799     
Title: Re:キーの反応について    
今のフレームで取得した入力の状態と、
前のフレームで取得した入力の状態をどこかに保存しておくと可能ですよ。

例えばよく使うのは、
「今が押されていて、なおかつ前は押されていない」場合は、たった今押された、
「今が押されていなくて、なおかつ前は押されていた」場合は、たった今離された、
「今も前も押されている」場合は、押され続けている、
など。

ただこの方法は、押され続けていることは判定出来ますが、
押され続けている長さをカウントすることは出来ません。
どうしても必要があるのならば、別にカウンタを用意するか、
龍神録プログラミングの「キーコンフィグに対応させてみよう」を参考にされると良いですよ。


179ポイント を手に入れた。

Name: DVDM [URL]  ..熟練のプログラマー(46,124ポイント)   Date: 2009/12/24(木) 04:02   No:44800     
Title: Re:キーの反応について    
>>situmonさん
DxLibでサンプルを作成してみました。
Zキーを押すたびに文字が切り替わるようになっています。
押しっぱなしには反応していませんのでご確認くださいませ。



#include "DxLib.h"

char NowKey[256];        // 今現在のキー情報
char OldKey[256];        // 1フレーム前のキー情報
bool CheckFlag = FALSE;    // キーが押されたかどうかのチェック用


int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{

    ChangeWindowMode(TRUE);//ウィンドウモード

    if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK ) != 0)
        return -1;

 
    while(ProcessMessage()==0 && ClearDrawScreen()==0 && NowKey[KEY_INPUT_ESCAPE]==0)
    {
        memcpy(OldKey, NowKey, sizeof(NowKey));        // 今のキー情報を1フレーム前のキー情報にコピー
        memset(NowKey, 0, sizeof(NowKey));            // 今のキー情報をクリア
        GetHitKeyStateAll(NowKey);                // キー情報の更新


        // 「今のキー情報」Zが押されていて、「1フレーム前のキー情報」Zが押されていない
        if((NowKey[KEY_INPUT_Z] == 1) &&  !(OldKey[KEY_INPUT_Z] == 1))
        {
            CheckFlag ^= 1;            
        }

        if(CheckFlag)
            DrawString(10, 50, "サンプル文字列A", GetColor(255, 255, 255));
        else
            DrawString(10, 50, "サンプル文字列B", GetColor(255, 255, 255));


        ScreenFlip();

    }


    DxLib_End();

    return 0;

}




使い方合ってるんですかね・・・。
リファレンスを見ながらやってみたので、もし期待の動作でなかったら御免なさい;


642ポイント を手に入れた。

Name: situmon  ..熟練のプログラマー(47,260ポイント)   Date: 2009/12/26(土) 13:31   No:44906     
Title: Re:キーの反応について    
お答えいただきありがとうございます。確認はしてませんので一度確認してみます。(すいません)
しかしみていて、その手があったか!と思いました。
oldkeyとnewkeyに分ける方法を龍神録のプログラムに当てはめて考えて見ます。
yさんDVDMさんありがとうございました。
もしまたわからないときは手助けお願いします。

これは関係ない話なのですが、DVDMさんは曲も作られるのですか?
それとサイトで(DVDMさんの)絵を見たのですが、とてもうまいですね!!
線画もphotoshopでしょうか?


220ポイント を手に入れた。

Name: DVDM [URL]  ..熟練のプログラマー(46,230ポイント)   Date: 2009/12/26(土) 16:19   No:44910     
Title: Re:キーの反応について    
>>situmonさん
>これは関係ない話なのですが、DVDMさんは曲も作られるのですか?
何年か前にちょこっと作ったことがあるくらいで今はもう曲作りはできないですね;


>それとサイトで(DVDMさんの)絵を見たのですが、とてもうまいですね!!
>線画もphotoshopでしょうか?

お褒め頂きましてありがとうございます^^
そうですね・・・基本的に絵はPhotoShop上で全て作成していますので線画もPhotoShopです〜


106ポイント を手に入れた。

Name: situmon  ..熟練のプログラマー(47,611ポイント)   Date: 2009/12/27(日) 14:16   No:44936     
Title: Re:キーの反応について    
もしよければ新しい絵を見せてください。
まえにファイル形式で霊夢などの絵を見せてもらいましたが・・・


2倍のポイントを手に入れた! 100ポイント を手に入れた。

Name: DVDM [URL]  ..熟練のプログラマー(46,395ポイント)   Date: 2009/12/28(月) 01:28   No:44981     
Title: Re:キーの反応について    
>>situmonさん
>まえにファイル形式で霊夢などの絵を見せてもらいましたが・・・
ん〜、霊夢の絵ってあげてましたっけ・・・記憶にないです;
龍神録のキャラ二名をアップした記憶はあるんですけどね;


>もしよければ新しい絵を見せてください。
う・・・新しい・・・絵ですか・・・。
そうですね・・・学校の課題で描いたラフと、現在作ってるSTGで使う予定の絵を入れてみました。

こちらも全てPhotoShop上で作成したものでございます。
クリックでDL出来ない場合は下記のURLをコピーしてアドレスバーに貼ってみて下さい><
こ、こんなんで宜しいですか?
http://www.geocities.jp/dvdmvoid/SampleImage.zip


165ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,125,430ポイント)   Date: 2009/12/28(月) 11:28   No:44998     
Title: Re:キーの反応について    
> situmonさん

龍神録のプログラムをご覧になっているのなら
龍神録の館の8章
http://dixq.net/rp/8.html
はご覧になっていないでしょうか?
ここに入力関連の関数の作り方が書いてあります。
その基礎についてはゲームプログラミングの館の
40a章
http://dixq.net/g/41.html
に書いてありますのでご覧下さい。


86ポイント を手に入れた。

Name: situmon  ..熟練のプログラマー(47,640ポイント)   Date: 2009/12/28(月) 22:17   No:45053     
Title: Re:キーの反応について    
Dixqさん
ありがとうございます。そのとおりやった上でです。(しかし龍神録のプロジェクトを丸ごと使っているわけではないのでわかりませんが・・・)
いちおうゲームパッドには対応です。(対応できるコードまでは書いてます。)
DVDMさん
ありがとうございます。
うまいですね。
シューティングはできましたか?


5ポイント を手に入れた。

Name: DVDM [URL]  ..熟練のプログラマー(46,662ポイント)   Date: 2009/12/29(火) 13:27   No:45077     
Title: Re:キーの反応について    
>>situmonさん
>シューティングはできましたか?
ゲーム作るためのクラス作り(前準備)の段階ですね。
ある程度ゲームのシステムについては終わったので、クラスの見直しと絵を補おうとしているところですね。
なので、ゲームとしてはまだ遊べない段階です;


75ポイント を手に入れた。

Name: situmon  ..熟練のプログラマー(47,648ポイント)   Date: 2009/12/29(火) 14:29   No:45081 解決!     
Title: Re:キーの反応について    
そうですか。こちらもがんばらなければ・・・
回答してくれた皆様どうもありがとうございました。
もしまた何かわからないことがありましたら是非お願いします。


8ポイント を手に入れた。



Name: ヒガモリ  ..ぴよぴよ(418ポイント)   Date: 2009/12/27(日) 14:45   No:44937       
Title: エフェクトについて    
[1] 質問文
ゲームプログラマーを目指す専門学校1年です。
学校では詳しくエフェクトの使い方を教えてもらえませんでした。
今ゲームを作っていてチーム名をエフェクトでカッコよく表示
させたいんですが、どうやっていいのかわかりません。
 
[1.1] 自分が今行いたい事は何か
今ゲームを作っていてチーム名をエフェクトでカッコよく表示
させたいです。
 
[1.2] どのように取り組んだか(プログラムコードがある場合記載)
まだどうやっていいのかわからないのでプログラムは組んでいません。

[1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載)
プログラムを組んでいないのでエラーも出ていません。

[1.4] 今何がわからないのか、知りたいのか
エフェクトの中でもホワイトイン・ホワイトアウトを
どうやって作ればいいのかわかりません。
      
[2] 環境  
 [2.1] OS : Windows
 [2.2] コンパイラ名 : Visual Studio 2008 コマンド プロンプト

[3] その他 
 ・どの程度C言語を理解しているか
  ぎりぎりforがわかる程度です。

 ・ライブラリを使っている場合は何を使っているか
  ・dglib.h…ヘッダファイル(関数宣言)
  ・dglib.obj…ライブラリ本体
    ・cl2.bat…コンパイル用バッチファイル


418ポイント を手に入れた。


Name: たかぎ [URL]  ..ハッカー(145,666ポイント)   Date: 2009/12/27(日) 15:12   No:44938     
Title: Re:エフェクトについて    
勘違いかもしれませんが、dglibということから学校名がわかるような...
独自ライブラリの場合は、学校の先生に聞いた方がよいと思います。


63ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(74,340ポイント)   Date: 2009/12/27(日) 17:46   No:44941     
Title: Re:エフェクトについて    
dglibが分からないので、どこで公開されているか教えてください。
dxlibなら、このサイトでも取り上げられているので分かるのですが。

>今ゲームを作っていてチーム名をエフェクトでカッコよく表示させたいです。 

ホワイトイン・ホワイトアウトだけだとカッコ良くとは言えないと思いますが、その他に考えているエフェクトがあれば教えてください。
例えば、チーム名の輪郭が光るとか、半透明で残像を残しながら拡大縮小するとか。


136ポイント を手に入れた。

Name: ヒガモリ  ..ぴよぴよ(499ポイント)   Date: 2009/12/27(日) 19:07   No:44943     
Title: softyaさんへ    
質問に答えてくださってありがとうございます。
dglibは学校の先生が作ったライブラリです。
特にほかに考えているエフェクトないです。
でも、もしチーム名の輪郭が光るとか、半透明で残像を残しながら拡大縮小するなども
教えてもらえるなら教えてほしいです。


81ポイント を手に入れた。

Name: ヒガモリ  ..ぴよぴよ(564ポイント)   Date: 2009/12/27(日) 19:10   No:44944     
Title: たかぎさんへ    
質問に答えてくださってありがとうございます。
その通りです。
学校の先生が作ったライブラリです。
学校の先生に聞いたんですが、答えを教えたら
考えない生徒が増えるから答えは教えてくれなかったんです。


65ポイント を手に入れた。

Name: Dixq (管理人)  ..ウィザード(1,125,001ポイント)   Date: 2009/12/27(日) 19:28   No:44945     
Title: Re:エフェクトについて    
おっしゃるエフェクトはちょっと簡単過ぎるのでせっかくならもっとこだわってみませんか?
私もロゴの表示とかはこだわりたい派です。
私が作ったエフェクトでよければ公開しているゲームをみてみて下さい。

後、独自のライブラリなら考え方位しか回答かけないですね。dxlibは使ってはダメですか?


2倍のポイントを手に入れた! 246ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(74,375ポイント)   Date: 2009/12/27(日) 19:28   No:44946     
Title: Re:エフェクトについて    
公開されていないライブラリでは例は示せないですね。
dxlibで良ければ書けると思いますよ。 編集済み


35ポイント を手に入れた。

Name: ヒガモリ  ..ぴよぴよ(619ポイント)   Date: 2009/12/27(日) 19:47   No:44947     
Title: Dixqさんへ    
質問に答えてくださってありがとうございます。
dxlibはダイレクトエックスことですか?
dxlibでも大丈夫です。
Dixqさんのゲームをプレイしてみます。


55ポイント を手に入れた。

Name: ヒガモリ  ..ぴよぴよ(751ポイント)   Date: 2009/12/27(日) 19:50   No:44948     
Title: たかぎさんへ    
質問に答えてくださってありがとうございます。
dxlibはダイレクトエックスのことですか?
dxlibでもいいので教えてください。


2倍のポイントを手に入れた! 132ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(74,468ポイント)   Date: 2009/12/27(日) 20:25   No:44949     
Title: Re:エフェクトについて    
>dxlibはダイレクトエックスのことですか? 
DXライブラリのことです。
http://homepage2.nifty.com/natupaji/DxLib/index.html

まず、このサイトの「ゲームプログラミングの館」を見てください。
http://dixq.net/g
分かりそうですかね?
 編集済み


93ポイント を手に入れた。

Name: ヒガモリ  ..ぴよぴよ(819ポイント)   Date: 2009/12/27(日) 21:31   No:44955     
Title: softya さんへ    
質問に答えてくださってありがとうございます。
ゲームプログラミングの館を見ました。
自分が持っているダイレクトエックスとアイコンが違うんですけど
ここに書いてあるのをダウンロードしたほうがいいんですか?


68ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(74,651ポイント)   Date: 2009/12/27(日) 22:16   No:44959     
Title: Re:softya さんへ    
>自分が持っているダイレクトエックスとアイコンが違うんですけど 
DXライブラリは、DirectXを隠蔽して使いやすくしたライブラリです。
もし、dglibを使わない生のDirectXでのプログラムが分かるならDirectXの情報を出しますけど。

こちらのコードとか意味が分かりますか?
http://www.interq.or.jp/black/minami-m/sample/sample_2d.htm

理解できないコードを示してもしょうが無いので色々聞いておりますが、ご了承ください。


183ポイント を手に入れた。

Name: ヒガモリ  ..ぴよぴよ(854ポイント)   Date: 2009/12/27(日) 22:30   No:44960     
Title: softya さんへ    
質問に答えてくださってありがとうございます。
とりあえずsample1を見たんですが、コードの意味は分かりません。


35ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(74,780ポイント)   Date: 2009/12/27(日) 22:36   No:44961     
Title: Re:softya さんへ    
>とりあえずsample1を見たんですが、コードの意味は分かりません。 
じゃあ、生のDirectXは使ったことが無いんですね。
うーーん。それでは方向性を変えてですね。

(1)半透明のスプライトの表示方法は分かりますか?
(2)半透明スプライトの透明度を変更するプログラムは作れますか?
(3)半透明スプライトを加算合成するプログラムは作れますか?


129ポイント を手に入れた。

Name: ヒガモリ  ..ぴよぴよ(902ポイント)   Date: 2009/12/28(月) 10:33   No:44992     
Title: Re:softya さんへ    
質問に答えてくださってありがとうございます。
使ったことないです。
すいません。どれもわかりません。


48ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,125,255ポイント)   Date: 2009/12/28(月) 11:17   No:44995     
Title: Re:softya さんへ    
>>ヒガモリさん

> すいません。どれもわかりません。

ではどういったプログラムなら作れますか?
今ゲームを作っているということですが、どのようなゲームでしょう?

ロゴの表示について、まずは簡単なところからやってみてはいかがでしょうか。
画像をアルファブレンドや加算ブレンドをして重ね合わせることは出来ますか?


2倍のポイントを手に入れた! 254ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(77,008ポイント)   Date: 2009/12/28(月) 11:47   No:45002     
Title: Re:エフェクトについて    
>すいません。どれもわかりません。 

困りましたね。dglibにその機能があるかどうかも分からないんですよね。
で、dglibを公開している人を見つけてしまったので、ヘッダは合ってますかね?
#include <windows.h>
#include <stdio.h>

int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int nCmdShow);
LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
void ML(void);
int Main(void);
void dg_pset(HDC hdc,int x,int y,short color);
void dg_box(HDC hdc,int x,int y,int width,int height,int paintflg,short color);
void dg_line(HDC hdc,int x1,int y1,int x2,int y2,short color);
HDC  dg_loadbmp(char *pfilename);
void dg_drawbmp(HDC hdc,int x,int y,int width,int height,HDC hMemdc);
void dg_drawbmp2(HDC hdc,int x,int y,int width,int height,HDC hMemdc,int sx,int sy);
void dg_drawbmp3(HDC hdc,int x,int y,int width,int height,HDC hMemdc,int sx,int sy,COLORREF toumei);
void dg_drawbmp4(HDC hdc,int x,int y,int width,int height,
                 HDC hMemdc,int sx,int sy,int swidth,int sheight,COLORREF toumei);
void dg_deletebmp(HDC hMemdc);
COLORREF dg_pget(HDC hdc,int x,int y);
void dg_circle(HDC hdc,int cx,int cy,int r,short color);
int getch(void);
int kbhit(void);
void dg_setfont(char fname[],int fw,int fh);
void dg_printf(int x,int y,short color,char *format, ...);
void dg_printf2(HDC hdc,int x,int y,short color,char *format, ...);
void wait(long wcnt);
HDC dg_createBB(void);
void dg_flip(HDC hdc,HDC hMemdc);
void dg_deleteBB(HDC hMemdc);
void dg_gcls(HDC hdc,short color);
void dg_setvideomode(int mode);
void dg_setscreen(int lx,int ly,int lwidth,int lheight,int lbai,char ltb[]);

typedef HDC char_far;
#define main Main
古いバージョンかも知れませんが、同じ機能があると仮定しますね。

ヘッダーから推測すると、dg_drawbmp3()関数でホワイトアウトとホワイトインは実現出来そうです。
加算半透明は出来なさそうなので、少し華々しさには欠けますけどね。
方法としては、まず真っ白なbmpを用意します。大きさは32x32程度で良いです。この画像を画面いっぱいまで拡大してタイトルの上に表示することでタイトルを隠してしまいます。これでホワイトアウト状態は出来ました。
あとはこの画像の透明度を調整することでホワイトインやアウトを制御します。

(1)32x32の画像をdg_drawbmp3()で画面いっぱいまで拡大して表示します。そのとき一番最前面になるように描画順番を工夫して下さい。これでホワイトアウト後の画面は表示出来ました。
(2)透明度を制御します。
ホワイトアウトとホワイトインの制御は、COLORREF toumeiパラメータで行います。
ただ、このパラメータの指定例が見つからないので、ここも勘ですが
COLORREF toumei = (COLORREF)(a << 6);
としてみてください。
aは半透明の度合いで、0から255です。255だと元のまま、0だと透明です。

以上なんですが、このdg_drawbmp3()の使い方だけは先生に聞いた方が良いと思いますけどね。そのぐらいは答えてくれるでしょう。
全部勘で書いているので、関数の使い方は間違っている可能性があります。ご了承ください。


1,351ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(486,303ポイント)   Date: 2009/12/28(月) 12:48   No:45010     
Title: Re:エフェクトについて    
□ ----- ヒガモリさん
> ぎりぎりforがわかる程度です

 専門の1年とはいえ12月になって for文がぎりぎりという状態ではなかなか厳しいですね。


> ホワイトイン・ホワイトアウト

 既にご存じかもしれませんが、念の為に。

 原理的にホワイトイン・ホワイトアウトは画面全体を白で塗りつぶす際の透明度の変化で
実現します。
 この塗りつぶす白の透明度を 100%(完全に透明)から少しずつ変化させ 0%(完全に不透明)に
なるようするとホワイトアウト、反対に 0%から 100%にするとホワイトインになります。



> チーム名をエフェクトでカッコよく表示させたいです

 そういうかっこいいアニメーションをしている複数枚のテクスチャを用意して、順次切り替えて
表示していくのが、現状手っ取り早いでしょう。

 デザイナ担当がいるのであれば頼んでみては?


> dglib

 softyaさんがDLしたものと多分同じものDLしましたが、学習用なのか
それほど高機能なものではないようですので、このライブラリで高度なことを
行うにはいろいろ書き足さないとだめなようです。

 DXライブラリ/DirectX/OpenGLなどのまともなライブラリを使用することを
検討した方がいいかと思います。




□ ----- softyaさん
> dg_drawbmp3の引数 toumei

 なんとなく、抜き色指定な気もしますね。


611ポイント を落としてしまった。

Name: softya  ..比類無きプログラマー(78,255ポイント)   Date: 2009/12/28(月) 12:58   No:45011     
Title: Re:エフェクトについて    
>なんとなく、抜き色指定な気もしますね。

あぁ、その可能性の方が高いですね。
だとするとムリかな。

gdlibをやめて全部DXライブラリに移った方が良いかも知れませんね。


51ポイント を落としてしまった。

Name: ヒガモリ  ..ぴよぴよ(987ポイント)   Date: 2009/12/28(月) 13:40   No:45015     
Title: Dixq (管理人)さんへ    
質問に答えてくださってありがとうございます。

> ではどういったプログラムなら作れますか?
複雑な処理はまだできないので2Dのシューティングゲームなら学校で
やったので作れます。

> 今ゲームを作っているということですが、どのようなゲームでしょう?
チームを組んで擬似3Dアクションゲームを作っています。 

> ロゴの表示について、まずは簡単なところからやってみてはいかがでしょうか。
アドバイスありがとうございます。

> 画像をアルファブレンドや加算ブレンドをして重ね合わせることは出来ますか?
すいません。できません。


85ポイント を手に入れた。

Name: ヒガモリ  ..かけだし(1,056ポイント)   Date: 2009/12/28(月) 13:45   No:45017     
Title: softyaさんへ    
質問に答えてくださってありがとうございます。
たぶんあっていると思います。
丁寧に教えてくださってありがとうございます。
がんばってみます。
 


69ポイント を手に入れた。

Name: ヒガモリ  ..かけだし(1,139ポイント)   Date: 2009/12/28(月) 13:49   No:45018     
Title: Justyさんへ    
質問に答えてくださってありがとうございます。
やっぱり今の時期でfor文がぎりぎりわかるぐらいは厳しい状態ですよね。
ホワイトインとホワイトアウトの原理すらわかっていなかったので
解説やアドバイスありがとうございます。



83ポイント を手に入れた。

Name: ヒガモリ  ..かけだし(1,199ポイント)   Date: 2009/12/28(月) 13:54   No:45020     
Title: softya さんへ    
質問に答えてくださってありがとうございます。
コツコツDXライブラリの勉強をしたほうがいいかもしれないですよね。
アドバイスありがとうございます。



60ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,128,071ポイント)   Date: 2009/12/28(月) 20:42   No:45051     
Title: Re:softya さんへ    
dglibがどんなライブラリかよくみていませんが、
dglibを使いなさいという制限は無いのでしょうか?

もしDXライブラリでも良いのなら、是非DXライブラリをお使いになることをおすすめします。
また、

> コツコツDXライブラリの勉強をしたほうがいいかもしれないですよね。

という記述から「大変そうだな」と思っていらっしゃる感じが伝わってきますが、
全然難しくないですよ。
うちのサイトでもDXライブラリの使い方解説しています。

http://dixq.net/g/

DXライブラリを使った本格的なゲーム制作の解説もしています。

http://dixq.net/rp/

また、ここにはDXライブラリを良くご存じの方が多いので、
誰も知らないライブラリの話をするより、DXライブラリで話をした方が参考になる意見が沢山聞けると思います。
サンプルなんかも書いて見せてあげるのも楽だと思いますし。


44ポイント を手に入れた。

Name: ヒガモリ  ..かけだし(1,317ポイント)   Date: 2009/12/29(火) 14:02   No:45080 解決!     
Title: Dixq (管理人) さんへ    
質問に答えてくださってありがとうございます。
お返事遅くなってすいません。
みんなが知らないライブラリの話をしても確かに
あんまり意味がないですね。
dglibはとりあえず置いといて今日からDXライブラリを
勉強しょうと思います。
dglibは学校の先生が作ったライブラリなのでまた学校の先生に
聞いてみます。そして、DXライブラリを勉強するということで
問題解決にしたいと思います。
今までたくさん書き込みをしてくださった方々ありがとうございました。


118ポイント を手に入れた。



Name: たこ  ..ぴよぴよ(159ポイント)   Date: 2009/12/29(火) 01:00   No:45059       
Title: 21. キャラを一区間歩かせる。について    
誰か教えてください。
「現在32ピクセルで1区間にしています。これを4つに分けたいんです。と言う事は、32を8で割ればいい事がわかります。」
この部分を何回読み直しても理解できません><
四つに分けたいんだから4で割っちゃいけないですか?
なぜ8で割るのか理由を教えてくれませんか?


123ポイント を手に入れた。


Name: wing  ..入門者(3,276ポイント)   Date: 2009/12/29(火) 01:48   No:45062     
Title: Re:21. キャラを一区間歩かせる。について    
32進む間に32回描画します。
4枚の画像でアニメーションさせるには
同じ画像を8回ずつ描画すれば、4枚で32回描画することができます。

(ch.x%32)/8は、
ch.x の初期座標は必ず32の倍数にします。
すると、仮にch.xが32から640まで進んだとしても
ch.x%32 は0から31を何度も繰り返します。

小数点以下は切り捨てられるので
0/8=0 1/8=0 2/8=0 3/8=0.....
8/8=1 9/8=1......
16/8=2 17/8=2....
.....31/8=3 となり
(ch.x%32)/8 は 0 1 2 3 を繰り返します。


2倍のポイントを手に入れた! 64ポイント を手に入れた。

Name: shilfia  ..かけだし(1,472ポイント)   Date: 2009/12/29(火) 02:47   No:45065     
Title: Re:21. キャラを一区間歩かせる。について    
すごく簡単なことしか言えませんが、32歩進む間に4枚の絵を表示さるわけですから、

一枚目の絵は0〜8ピクセルまで表示
二枚目の絵は9〜16ピクセルまで表示
三枚目の絵は17〜24ピクセルまで表示
四枚目の絵は25〜32ピクセルまで表示

できればいいわけですよね。
8のかたまりが4つあるわけですから、8で割れば当然4枚の絵を上手いこと表示させられますね。

4で割ると、8枚の絵が必要になってしまいます。


2倍のポイントを手に入れた! 54ポイント を手に入れた。

Name: sizuma [URL]  ..上級者(22,572ポイント)   Date: 2009/12/29(火) 13:17   No:45076     
Title: Re:21. キャラを一区間歩かせる。について    
http://www.play21.jp/board/formz.cgi?action=res&resno=45016&page=&id=dixq&rln=45049
こちらは解決したのでしょう?
解決マークをつけてください。


73ポイント を手に入れた。

Name: たこ  ..ぴよぴよ(192ポイント)   Date: 2009/12/29(火) 13:38   No:45079 解決!     
Title: Re:21. キャラを一区間歩かせる。について    
あ〜なるほど…
一枚のピクセル数で割るって意味だったのですね。
理解しました。
ありがとうございます。


41ポイント を手に入れた。



Name: たこ  ..ぴよぴよ(36ポイント)   Date: 2009/12/28(月) 13:44   No:45016       
Title: 32. 乱数の初期化の仕方    
ゲームプログラミングの館の32.乱数の初期化の仕方だけにリンクできないのですが…
私だけでしょうか?
他は問題なく開くのですけど…


36ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(486,354ポイント)   Date: 2009/12/28(月) 13:50   No:45019     
Title: Re:32. 乱数の初期化の仕方    
 たしかにリンクが飛ばないですね。
 こちらが正しいアドレスだと思います。
http://dixq.net/g/35.html


51ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,127,875ポイント)   Date: 2009/12/28(月) 20:31   No:45049     
Title: Re:32. 乱数の初期化の仕方    
ご報告ありがとうございます。
う、確かにリンクまちがってますね^^;

以前、ゲームプログラミングの館の内容は1ページに全部書いてあったのですが、
重いからページを分けてほしいというリクエストがあり、わけました。

修正したてで、いくつかミスがあると思いますので、
また何かあればご報告お願いします^^

ページ上に棒線があったりなかったり、2本あったりするのは修正しないといけないですね;
このHPデータは自動的に前のデータから変換するプログラムを作って変換したので、あちこちおかしいかもしれません;


183ポイント を手に入れた。

Name: たこ  ..ぴよぴよ(151ポイント)   Date: 2009/12/29(火) 13:37   No:45078 解決!     
Title: Re:32. 乱数の初期化の仕方    
すみません。
解決マーク付け忘れていました^^;


8ポイント を落としてしまった。



Name: kerotan0820  ..上級者(20,818ポイント)   Date: 2009/12/29(火) 01:58   No:45063       
Title: 任意の入力を受けたらプログラムの最初に戻らせる方法    
タイトルが大変分かりにくくて申し訳ありません

今分かるC言語の範囲で出来るだけの計算ソフトを作ってみているのですが、任意の処理をした後にソフトが終了してしまうのを止めさせ、一番最初の状態に初期化する方法が分かりません

プログラムは添付しておきました


プログラムを見ていただければ分かると思うのですが、
1を入力したら○○ 2を入力したら○○ 3を入力したら○○
と最初にif文を使って分岐させ、こちらからの入力にしたがってその数値を計算して結果を表示するだけのプログラムです。

このプログラムの場合、最終的に結果が表示されてそのまま何か入力するとソフトが強制終了されてしまいます。


そうではなく、何かの入力をしたら最初の中間なのか期末なのかなどの選択画面に戻るようにしたいのです。

それは可能なのでしょうか


今一番最近で知ったのがfor文というものなのですが、これを使っても出来る気がしないし…

if文を用いれば○○という入力を受けたら○○というプログラムを実行。それ以外の場合○○を実行という指示を最後に付け加えることが可能ですが、その場合性格には最初に戻るのではなく新しいプログラムを実行しているような形になってしまいます。

説明がしにくいのですが、お分かりいただけるでしょうか;

1〜5の作業を行ったのちに6〜11の作業(1〜5と6〜11は同じ内容)を行うのではなく
1〜5の作業を行ったら1に戻りまた同じ処理を行うということがしたいです。


回答のほうよろしくお願いします^^


563ポイント を手に入れた。


Name: pooka [URL]  ..上級者(20,662ポイント)   Date: 2009/12/29(火) 03:51   No:45067     
Title: Re:任意の入力を受けたらプログラムの最初に戻らせる方法    
while文は知っているでしょうか?
知らない場合は
http://homepage3.nifty.com/mmgames/c_guide/10-01.html
などを参考に調べてみてください。



#include <stdio.h>

int main(void)
{
    int flag = 1;
    int state = 0;

    while(flag)
    {
        if(state == 0)
        {
            printf("数値を入力してください\n");
            printf("中間:1\t期末:2\t終了:3\n\n");
            scanf("%d", &state);
        }
        else if(state == 1)
        {
            printf("\n中間の処理\n\n");
            state = 0;
        }
        else if(state == 2)
        {
            printf("\n期末の処理\n\n");
            state = 0;
        }
        else if(state == 3)
        {
            printf("\n終了します\n");
            flag = 0;
        }
        else
        {
            printf("\n入力エラーです\n\n");
            state = 0;
        }
    }
    return 0;
}


上記ではflagという変数を用いてwhile文から抜けるかどうかを判定しています。
これで3と入力しないかぎり繰り返されます。
あと処理をわかりやすくするために、実際の計算やエラー処理などは書いていません。

またswitch文を使ったり、中間、期末などのそれぞれの処理を関数化したりすることで、
各処理を追いやすくなるかなぁと思います。


847ポイント を手に入れた。

Name: kerotan0820  ..上級者(20,901ポイント)   Date: 2009/12/29(火) 04:05   No:45068 解決!     
Title: Re:任意の入力を受けたらプログラムの最初に戻らせる方法    
■pooka様
While文というものを聞いたことはありましたがまだ習得はしていません;

説明を読んでこの単元を使えば僕の目的が果たせることが分かりましたので、時期にWhile文を覚えてチャレンジしたいと思います

詳しい解説ありがとうございました^^


83ポイント を手に入れた。

Name: Naohiro19  ..かけだし(2,442ポイント)   Date: 2009/12/29(火) 08:20   No:45069     
Title: Re:任意の入力を受けたらプログラムの最初に戻らせる方法    
pookaさん>
else if(state == 3) 
        { 
            printf("\n終了します\n"); 
            flag = 0; 
        } 

の文だと無限ループになっちゃいますね。


42ポイント を手に入れた。

Name: えーや  ..ぴよぴよ(455ポイント)   Date: 2009/12/29(火) 12:06   No:45075     
Title: Re:任意の入力を受けたらプログラムの最初に戻らせる方法    
>Naohiro19さん

else if(state == 3) 
        { 
           printf("\n終了します\n"); 
            flag = 0; 
        } 

では無限ループにならないですね。
while(flag) が条件ですので、おそらく flag = 0 を state = 0 と勘違いなされたのかな?
揚げ足をとるようで申し訳ないのですが質問者さんが混乱しないようにここに書かせてもらいました。


103ポイント を手に入れた。



Name: mii  ..中級者(11,018ポイント)   Date: 2009/12/19(土) 02:16   No:44510       
Title: 続ソースコードの行数    
またお世話になります。
プログラムの方を整理してみました。
以下テストファイルでテストしています。
総ステップ数 = 48, 実ステップ数 = 29, 処理ステップ数 = 18
になる予定ですが、
総ステップ数 = 48, 実ステップ数 = 31, 処理ステップ数 = 20
になってしまいます。

どの部分のコメント行がコメントとして認識されていないのか分かりません。
デバッグで追い切れなくて困っています。

お力を貸していただけないでしょうか?
よろしくお願いいたします。

/**/#include <stdio.h>#include <stdlib.h>/* --- */int a;
#define LOKI 123
#define IKOL 123
#
/**/#define AA 123/***/
//#define BB 456
#define CC 789 /*
#define DD 741
*/
    void main()
{ //ask
int a,b ;/* bbb */
a=0;/* ccc */ /*
a\n
a */
    /* ddd */ /* ooo
a\n
a */
a=0 ;/* eee */ /* */ /* */
//aaa
b=a ;//
b=a ; /* b */b=b;
printf( "\" " ) ;
b=1 ;
while(a!=b)
{ a=b ;
}

// printf( "%d\n",LOKI ) ;
/*/
int g;
*/

}

int main2()
{ int j;/*
*/ int i;/***//**//*
int bb;
*/
// int cc;
for (i = 9; i< 10; i++) {
/**/{/**/ printf("%d\n", i);
printf("#");
printf("}");
printf("{");
}} // aaaa
/**/}} 


427ポイント を手に入れた。


Name: mii  ..中級者(11,116ポイント)   Date: 2009/12/19(土) 02:28   No:44511     
Title: Re:続ソースコードの行数    
以下のようなテストファイルでもテストしたのですが
総ステップ数 = 10, 実ステップ数 = 3, 処理ステップ数 = 2
というふうに予定通り出るので違いがわかりません(泣

int a;
/* // komen
kome
meok
*/
int// dddddddddddddddddddint/*komu*/
/*komy
*/
//dse /*iny*/
}


98ポイント を手に入れた。

Name: ドラ  ..初心者(5,175ポイント)   Date: 2009/12/19(土) 04:18   No:44512     
Title: Re:続ソースコードの行数    
printfデバッグしましょうと言っているのにやってくれない・・(泣
まあ、何をどうすればよいか分かっていなさそうなので代わりにやってみました。
1行の内容が表示された後、その時の総行数が表示されます。
また、その行がコメント又は空白行、プリプロセッサ行、中括弧だけの行のいずれかに
該当する場合はそれも出力されます。

アルゴリズム自体には手を入れていませんが、未初期化のallStepをいきなり
使用していたので0で初期化しておきました。

問題があるのは赤字の部分のようですね。
その前の行で間違って1行コメントと判断してしまっているような予感がします。

int main2() 
{ int j;/* 
*/ int i;/***//**//* 
int bb; 
*/
 
// int cc;


付け足したデバッグ用の出力(Dというマクロ)は「#define DEBUG」の行を
コメントアウトするとコンパイル時に消滅します。
デバッグが終わって、いらなければDという文字で検索して消して下さい。



266ポイント を手に入れた。

Name: mii  ..中級者(11,253ポイント)   Date: 2009/12/19(土) 11:02   No:44518     
Title: Re:続ソースコードの行数    
ありがとうございます。

>printfデバッグしましょうと言っているのにやってくれない・・(泣
すいません。いろいろやってみたんですが、わからなくて消してしまいました。。
これは取っておいた方が良いのでしょうか?

>何をどうすればよいか分かっていなさそうなので
そうですね(汗
どうすればいいかすぐ浮かんでこないです(T_T)
訓練しないと駄目ですよね。。

今からコンパイルして確認してみます!


137ポイント を手に入れた。

Name: mii  ..中級者(11,402ポイント)   Date: 2009/12/19(土) 12:44   No:44522     
Title: Re:続ソースコードの行数    
こういうデバッグ方法もあるのですね。
ありがとうございます!

        // 非コメント状態で1行コメントの開始文字が来た場合
        if (commentFlg == 0 && currentChar == '/' && backChar == '/') {
            commentFlg = 1;
        }
                // ココを追加
        if (commentFlg == -1 && currentChar == '*' && backChar == '/') {
            commentFlg = 2;
        }
        // 非コメント状態で複数行コメントの開始文字が来た場合
        else if (commentFlg == 0 && currentChar == '*' && backChar == '/') {
            commentFlg = 2;
            skipOneCharFlg = 2;
        }
        // /*から1文字読み飛ばした後で複数行コメントの終了文字が来た場合
        else if (commentFlg == 2 && skipOneCharFlg == 0 && currentChar == '/' && backChar == '*') {
            commentFlg = -1;
            skipTwoCharFlg = 2;
        }


やはり1行コメントとして扱われていたので、上記文を入れてみて上手くはいったのですが、
動いちゃった感が満載です。。。他のファイルでテストしてみても上手くいったのですが、
どうも心配です(泣

これでいいのでしょうか?


149ポイント を手に入れた。

Name: mii  ..中級者(11,484ポイント)   Date: 2009/12/21(月) 11:35   No:44559     
Title: Re:続ソースコードの行数    
今日の4時までなので何とかしたいです。。。(泣
お願いします(T_T)

上記コードだとどこがいけないでしょうか?




2倍のポイントを手に入れた! 82ポイント を手に入れた。

Name: たいちう  ..熟練のプログラマー(40,729ポイント)   Date: 2009/12/21(月) 12:45   No:44560     
Title: Re:続ソースコードの行数    
今日の4時が何なのか分かりませんが(前スレをよく読めば分かるのかな?)、
何が目的なのでしょうか?

4時がレポートの提出期限だとしたら、
一応動くプログラムなら及第点は取れるでしょう。
完璧なものが欲しいならば、締め切りなど意識せずに、
好きなだけテストして、自分で解決できない不具合を発見したら
あらためて質問すればよいでしょう。


146ポイント を手に入れた。

Name: dic  ..熟練のプログラマー(41,857ポイント)   Date: 2009/12/21(月) 13:53   No:44562     
Title: Re:続ソースコードの行数    
自分でも処理の流れがわかりにくくなりそうだなぁと感じ出したら
フローチャートを使ってプログラムを組むのも手です
http://homepage1.nifty.com/Iruka/nifty/cgi/mailcheckCGI/page2.html

って、4時までだったら無理ですね


96ポイント を手に入れた。

Name: mii  ..中級者(11,534ポイント)   Date: 2009/12/21(月) 14:04   No:44563     
Title: Re:続ソースコードの行数    
たいちろうさんdicさんありがとうございました。



2倍のポイントを手に入れた! 50ポイント を手に入れた。

Name: mii  ..中級者(11,146ポイント)   Date: 2009/12/22(火) 10:01   No:44630     
Title: Re:続ソースコードの行数    
取りあえず提出は終えました。皆様ありがとうございました。
しかしバグがあるので直したいと思います!

/**/#include <stdio.h>#include <stdlib.h>/* --- */int a;
#define LOKI 123
#define IKOL 123
#
/**/#define AA 123/***/
//#define BB 456
#define CC 789 /*
#define DD 741
*/
void main()
{ //ask
    int a,b ;/* bbb */
    a=0;/* ccc */    /*
    a\n
    a */
    /* ddd */    /* ooo
    a\n
    a */
    a=0 ;/* eee */    /* */    /* */
    //aaa
    b=a ;//
    b=a ; /* b */b=b;
    printf( "\" " ) ;
    b=1 ;
    while(a!=b)
    { a=b ;
    }
//    printf( "%d\n",LOKI ) ;
/*/
    int g;
    */

}

int main2()
{    int j;/*
*/    int i;/***//**//*
    int bb;
    */
    // int cc;
    for (i = 9; i< 10; i++) {
        /**/{/**/ printf("%d\n", i);
    }}    // aaaa
/**/}}

以上のファイルの37行目が1行コメントとみなされてしまっています。
これはどうやってなおせばいいのでしょうか?




388ポイント を落としてしまった。

Name: たいちう  ..熟練のプログラマー(40,992ポイント)   Date: 2009/12/22(火) 11:12   No:44632     
Title: Re:続ソースコードの行数    
> これはどうやってなおせばいいのでしょうか?

1.質問の仕方

まず回答者に自分の抱えている問題を説明しましょう。

「プログラムがデータを処理して結果を得る」が期待と違う。

実行したプログラム・処理したデータ・得られた結果・期待する結果を
伝えなくてはいけません。



2.デバッグの方法(1)

44行のデータを処理してバグを検出できる。

もっと小さいデータでバグを検出できるようにする。

テストデータの内でバグ発生と関連なさそうな部分を削除して、
バグが再現するかどうかを確認しましょう。
最終的には1〜2行のデータでバグを発生させられるかもしれません。
これだけでも大きな進展です。


3.デバッグの方法(2)

データを小さくした次は、プログラムを小さくします。
コメントの行数にバグがあるならば、それと関係ない部分を
削除します。前スレも含めたやり取りを流し読みしただけですが、
コメント行数と関係ない機能もあると思います。
今回はコメント行数のバグさえ再現すればよいので、
それ以外のフラグなども削除してしまいましょう。
削除しすぎてバグが発生しなくなってしまったら、
元に戻します。


データとプログラムが小さくなれば、それだけデバッグは楽になります。


263ポイント を手に入れた。

Name: mii  ..中級者(11,256ポイント)   Date: 2009/12/22(火) 11:32   No:44634     
Title: Re:続ソースコードの行数    
int i;/***//**//*
    int bb;
    */

取りあえず
/***//**//*の部分が1行コメントとして扱われています。

ただ修正方法がわからないため困っています。

プログラムを小さくですか。。。難しいです(T_T)


110ポイント を手に入れた。

Name: ねこ  ..熟練のプログラマー(51,116ポイント)   Date: 2009/12/22(火) 12:32   No:44643     
Title: Re:続ソースコードの行数    
ぱっと見ただけだから間違ってるかもしれないけど
「/*」「*/」を判定した後囲みコメントの最後の「/」と次の「/」があるせいで以降が「//」扱いになってるんじゃない?
「*/」の後はbackCharにダミーの文字でも詰めておくと上手くいくかもね。


40ポイント を手に入れた。

Name: mii  ..中級者(11,174ポイント)   Date: 2009/12/22(火) 13:08   No:44650     
Title: Re:続ソースコードの行数    
「/*」「*/」を判定した後囲みコメントの最後の「/」と次の「/」があるせいで以降が「//」扱いになってるんじゃない?

その通りなんですよね。
ただダミーに詰めるというのはもう一度fgetcを使うということでしょうか?


82ポイント を落としてしまった。

Name: dic  ..熟練のプログラマー(41,953ポイント)   Date: 2009/12/22(火) 14:58   No:44659     
Title: Re:続ソースコードの行数    
何の本からかは忘れましたが
私のメモによると



プログラムを作成するにあたって

@ 正しい問題を考えよ
A いろいろな解法を比較検討せよ
B データをよく見よ
C 封筒の裏の計算を使え
D 「対称性」を利用せよ
E コンポーネント(部品)を考えてデザインせよ
F 試作品を作れ
G 必要なら妥協せよ
H プログラムを複雑にしてはいけない
I エレガントに

ということです


80ポイント を手に入れた。

Name: mii  ..中級者(11,228ポイント)   Date: 2009/12/22(火) 15:36   No:44660     
Title: Re:続ソースコードの行数    
>「*/」の後はbackCharにダミーの文字でも詰めておくと上手くいくかもね。
入れてみたんですが結果は変わらずでした。

難しいですね。。。
方法が思いつかないんですよね(泣)


54ポイント を手に入れた。

Name: dic  ..熟練のプログラマー(42,902ポイント)   Date: 2009/12/22(火) 15:46   No:44661     
Title: Re:続ソースコードの行数    
この問題を解くにはオートマン記法で解いた方がわかりやすいですね
オートマン記法に関する情報です
http://f29.aaa.livedoor.jp/~snaka/PukiWiki/PukiWiki.php?%A5%BD%A5%D5%A5%C8%A5%A6%A5%A7%A5%A2%B3%AB%C8%AF%B5%BB%BD%D1%BC%D4%2F1.i.d.%A5%AA%A1%BC%A5%C8%A5%DE%A5%C8%A5%F3%A4%C8BNF


時間あったので解いてみました
#include    <stdio.h>
#include    <stdlib.h>
#include    <string.h>


static    char    g_szText[256][1024];
static    int        g_iMode = 0;
static    int        g_iComment = 0;    //    一行コメントの数
static    int        g_iComment2 = 0;    //    複数行コメントの数
static    int        g_iStep = 0;        //    ステップ(?)行数の数

//---------------------------------------------
void    Step3()
{
    printf( "g_iComment: %d\n", g_iComment );
    printf( "g_iComment2:%d\n", g_iComment2);
    printf( "g_iStep:    %d\n", g_iStep );
}



//---------------------------------------------
void    Step2()
{
    int    i;
    for( i=0; strlen(g_szText[i])>0; i++ )
    {
        int    j;
        for( j=0; j<strlen(g_szText[i]); j++ )
        {
            if( g_szText[i][j] == '\n' )
                g_iStep++;

            switch( g_iMode )
            {
            case 0:
                if( g_szText[i][j] == '/' )
                {
                    g_iMode = 1;
                }
                break;
            case 1:
                if( g_szText[i][j] == '/' )
                {
                    g_iMode = 2;
                    //    //一行コメントの開始
                }
                if( g_szText[i][j] == '*' )
                {
                    g_iMode = 3;
                    //    /* の開始
                }
                break;
            case 2:
                if( g_szText[i][j] == '\n' )
                {
                    g_iMode = 0;
                    g_iComment++;
                }
                break;
            case 3:
                if( g_szText[i][j] == '*' )
                {
                    g_iMode = 4;
                }
                break;
            case 4:
                if( g_szText[i][j] == '/' )
                {
                    g_iMode = 0;
                    g_iComment2++;
                }
                break;
            }
        }
    }

}


//---------------------------------------------
//    hoge.cpp の読み込み
void    Step1()
{
    //    hoge.cpp で埋め込み込み
    FILE    *file = fopen( "hoge.cpp", "rt" );
    if( file == NULL ) {
        printf( "hoge.cpp が見つからない\n" );
        return;
    }

    char    buf[1024];
    memset( g_szText, 0, sizeof(g_szText) );
    int        p = 0;
    while( !feof(file) )
    {
        memset( buf, 0, sizeof(buf) );
        fgets( buf, sizeof(buf), file );
        strcpy( g_szText[p++], buf );
    }
    fclose( file );
    file = 0;
}


//---------------------------------------------
int        main()
{
    Step1();
    Step2();
    Step3();

    return 0;
}



ただ、ステップというのが 何を意味しているのか分からないので
コメントの数しか数えれてないです


949ポイント を手に入れた。

Name: mii  ..中級者(11,278ポイント)   Date: 2009/12/22(火) 16:03   No:44662     
Title: Re:続ソースコードの行数    
ありがとうございます。
何か基本情報の試験で聞いたことがあるくらいです(笑
何やら難しそうですね(汗

違う方法として後で見てみます。
ご提示ありがとうございました!

ただ今はとりあえず提示している
ソースでやりたいと思います。


50ポイント を手に入れた。

Name: mii  ..中級者(11,407ポイント)   Date: 2009/12/22(火) 17:21   No:44664     
Title: Re:続ソースコードの行数    
何やら添削された後返ってきたんですがバグを指摘されてしまいました。

<test1.c>
               /*/*/ 
a[EOF]

<test2.c>
{
}[EOF]

<test3.c>
{
/*/*/}

<test4.c>
/**//**//**/[EOF]

          AllStep  RealStep  LogicStep
test1.c      2        0         0
test2.c      2        1         0
test3.c      2        1         0
test4.c      1        1         1

となりますが、正しくは

          AllStep  RealStep  LogicStep
test1.c      2        1         1
test2.c      2        2         0
test3.c      2        2         0
test4.c      1        0         0

以上のようにならないといけない部分を指摘されました(泣

フラグ等の絡みが多すぎて、
デバッグして原因がわかっても直せる自信が無いです。。。(泣

何処をどう直せばいいのでしょうか?

ご教授お願い致します。


129ポイント を手に入れた。

Name: mii  ..中級者(11,541ポイント)   Date: 2009/12/24(木) 10:30   No:44809     
Title: Re:続ソースコードの行数    
う〜ん。。。中々できずに、元のソースに戻ってにらめっこばかりです(泣
どうすればよいのでしょうか?

よろしくお願いいたします(T_T)


2倍のポイントを手に入れた! 134ポイント を手に入れた。

Name: Mist  ..比類無きプログラマー(79,425ポイント)   Date: 2009/12/24(木) 14:50   No:44814     
Title: Re:続ソースコードの行数    
> 元のソースに戻ってにらめっこばかりです

私の経験上、あまり経験が無い人がソースを眺めてバグを見つけるのは難しいです。
修正→実行→修正を繰り返すほうがよっぽど早いと思います。
printfデバッグを行えばどの段階で、期待した結果が得られていないかはすぐにわかるはずです。
その上で、どこが間違っているか(推測でもいいです)を考えてみてください。
あと、一度自分がCPUになったつもりで手作業で実行トレースしてみるのもいいかもしれませんね。


> 何処をどう直せばいいのでしょうか? 
> どうすればよいのでしょうか?

努力はしているのでしょうけどこちらには結果が見えませんから、これでは丸投げしているの大して変わらないですよ。
ここがおかしいと思ってこう直してみたけどダメだった、とか書いてるならもっと答えも付きやすいと思いますよ。


173ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(144,632ポイント)   Date: 2009/12/24(木) 14:59   No:44815     
Title: Re:続ソースコードの行数    
> 私の経験上、あまり経験が無い人がソースを眺めてバグを見つけるのは難しいです。

これができるのは、一字一句にいたるまで、自分が理解できないコードを書いていない場合だけですね。


33ポイント を手に入れた。

Name: mii  ..中級者(11,647ポイント)   Date: 2009/12/24(木) 17:02   No:44818     
Title: Re:続ソースコードの行数    
う〜ん。このプログラムだと、EOF行に1文字しか存在しない場合
必ずspaceFlgが0のままなので、空白行と判断されてしまいます。

それを修正しようとしたのですが、方法が分からず適当にやっていたら
コードが動かなくなり、最初に戻るという永久パターンに(泣

上記テストファイルで行った結果を適正な結果にするためには
根本的に見直さないといけないんでしょうか?




106ポイント を手に入れた。

Name: バグ  ..ハッカー(181,610ポイント)   Date: 2009/12/24(木) 17:55   No:44821     
Title: Re:続ソースコードの行数    
途中から入ってきたので、全部は読んでませんが、原因が分かっているのならばそれを解決する方法を継ぎ足せばよいだけではないでしょうか?

>>EOF行に1文字しか存在しない場合

不具合の原因は突き止めているんですよね?


104ポイント を手に入れた。

Name: たいちう  ..熟練のプログラマー(41,925ポイント)   Date: 2009/12/24(木) 17:56   No:44822     
Title: Re:続ソースコードの行数    
> AllStep RealStep LogicStep 

時間ができたらデバッグしてみるから、これらの定義を書いてちょうだい。
それとNo.44664のtest1.c〜test4.cの他にファイルがあるなら、
ファイルの内容と期待される結果も。

私はいつまでにできるという約束はできないので、年明けになるかもしれないけど、
必要な事を書いておいたら、他の回答者がもっと早く答えてくれるかもしれない。
前スレまで丁寧に読み直して、仕様を読み取るよう努力をする回答者は少ないと思うよ。
前スレでも、後から後から機能が追加されたような気がするので、
最終的な仕様をまとめてみて下さい。
もしかしてmiiさんも把握できてないんじゃない?


203ポイント を手に入れた。

Name: mii  ..中級者(12,471ポイント)   Date: 2009/12/24(木) 23:41   No:44837     
Title: Re:続ソースコードの行数    
バグさん初めまして
>>EOF行に1文字しか存在しない場合 
そうなんですが、どうやったらいいのか思いつきません(泣
皆さんどうしてそんなに早く思いつくんでしょうか?

たいちうさん
レスありがとうございます。
期限が月曜の午前中までとなってしまったので取りあえず頑張ります(T_T)
他のファイルについては手元にないので明日研究室につき次第添付します!

仕様としましては、
    file_path で指定された複数のファイルに対して、ステップ数の算出を行う。
    file_path が指定されない場合、エラーメッセージ1を表示し、プログラムを終了する。
    file_path が存在しない場合、エラーメッセージ2を出力し、次のファイルの処理
    に進む。
    各ファイルごとにステップ数を算出し、結果を表示する(結果例参照)。
    算出するステップ数は、以下のとおりである。

        1.総ステップ数        (すべての行数)
        2.実ステップ数        (コメント行および空白行を除いた行数)
        3.ロジックステップ数    (実ステップ数のうち、プリプロセッサ行・
                                  中カッコのみの行を除いたステップ数)
という風になっています。

総ステップはEOFまでの行です。EOFだけの場合は総ステップに含めず、何か1文字でもあれば総ステップとします。

実ステップはコメントと空白行を除いた数になります。今回はコメント行と空白行を一緒にカウントして総ステップから
引くことで実ステップを算出するようにしています。コメントについてはネスト有りの場合でも正確にカウントできるように
しなければなりません。尚、出来ればダブルコーテーション内の文字列についてはカウントしないといったこともするんですが、
それは次の課題になりそうです。

ロジックステップのプリプロセッサ行はシャープが来たらカウントするようにします。
中カッコのみの行は}}など2個続いても中カッコだけならカウントします(中カッコ以外にスペース以外の文字があった場合はカウントしない)

後は、コンパイルが通るファイルというのが条件のようです。
たとえば
int a;
とあれば本来int main(void) {}
の中に書かれなけばいけないですが、それが書かれていると見なして上記テストファイルのようにint a;だけでカウント出来るようにしなければなりません。

ただ例として##defineなどはコンパイル不可なので動きは不定で構わないことなります。

不明点などありましたらこちらから連絡していただければありがたいです。
よろしくお願いします。




824ポイント を手に入れた。

Name: ねこ  ..熟練のプログラマー(51,338ポイント)   Date: 2009/12/25(金) 08:30   No:44843     
Title: Re:続ソースコードの行数    
バグ解析なんて慣れです。ここ居る人達は少なくとも数年プログラムに携わってるから色々な手法でバグの原因を見つける術を見つけ、実行しています。

現在の状況はバグ原因の解析難ではなく修正対応が分からないという事なので、
もし現状で「自分でもワケが分からない」というのなら一度設計を再考してみてはどうでしょうか?
確認ですが、現在は「提出は終わったが、出来れば自分の納得出来る精度まで上げたい」という意思で取り組んでいるのですよね?

そうだとした前提として、提案ですがごちゃごちゃする原因はコメント等によるフラグ管理だと思うので
まずはコメント等をはずした文字列バッファをカウント処理前に作成するようにしてみてはどうでしょうか?
また、総ステップは実質ひたすら「\n」を調べるという力技でも出せますので別途計算する等

「一度に全部しようとして出来ないのであれば処理を小分けする」というのはどうでしょう。




222ポイント を手に入れた。

Name: mii  ..中級者(12,915ポイント)   Date: 2009/12/25(金) 09:16   No:44846     
Title: Re:続ソースコードの行数    
ねこさんレスありがとうございます。

>バグ解析なんて慣れです。ここ居る人達は少なくとも数年プログラムに携わってるから
色々な手法でバグの原因を見つける術を見つけ、実行しています。
皆さん凄いです。。。自分はこれまでまともにプログラミングしなかったツケが。。。(汗

>現在は「提出は終わったが、出来れば自分の納得出来る精度まで上げたい」
一度提出した後上記バグを指摘されまして、それを直して提出する期限が
月曜の午前中になってしまいました。。。orz

ですので、設計を見直すのはそれを提出した後、どんな方法がいいのか考えてみたいと思います。

取りあえず提出日が近いので今のコードを元にやりたいと思っています。

>提案ですがごちゃごちゃする原因はコメント等によるフラグ管理だと思うので
これはnonさんに教えていただいたこともあり、こちらの方法で取りあえず完成させたいと思います。

というかプログラムって設計が大事なことに気付きました^^;
コーディングはやりたいことをコードにしてるだけですもんね。。。
来年はもっと頑張らないと(笑


444ポイント を手に入れた。

Name: ねこ  ..熟練のプログラマー(51,945ポイント)   Date: 2009/12/25(金) 12:34   No:44858     
Title: Re:続ソースコードの行数    
なるほどあんまり改修すると再提出後にもバグると。

じゃあwhile直後に総ステップカウント、及びコメント関連をスキップする処理を加えるとか
※デバッグはしてません。

int imode    = 0; // 現在の処理モード。0:通常モード 1:単行コメント処理中 2:範囲コメント処理中
int kaigyo    = 0; // 改行数( 総ステップ数。1文字取得後にチェックして「\n」だったら1加算
int moji    = 0; // 改行間の文字数。EOFが有効行の後ろに付いていたら改行数が1少なくなるのでwhile抜けた後「moji>0」ならkaigyoを1加算する
int enmark    = 0; // 単行コメントの半角「¥」対応用

while( ( currentChar = fgetc( fp ) ) != EOF )
{
    // 総ステップ数
    if( currentChar == '\n' )
    {
        kaigyo++;
        moji = 0;
    }
    else
    {
        moji++;
    }

    switch( imode )
    {
    case 0:
        // 1行コメントの開始文字が来た場合
        if( currentChar == '/' && backChar == '/' )
        {
            // 1行コメントモードへ
            imode = 1;

            // 前回文字を保持して次ループ処理へ
            backChar = currentChar;
            continue;
        }
        // 範囲コメントの開始文字が来た場合
        if( currentChar == '*' && backChar == '/' )
        {
            // 範囲コメントモードへ
            imode = 2;

            // 前回文字を保持して次ループ処理へ
            backChar = currentChar;
            continue;
        }
        break;
    case 1:
        if( currentChar == '\n' )
        {
            if( enmark == 0)
                imode = 0;
            else
                enmark--;
        }
        else if( currentChar == '\\' )
            enmark++;

        // 前回文字を保持して次ループ処理へ
        backChar = currentChar;
        continue;
        break;
    case 2:
        if( backChar == '*' && CurrentChar == '/' )
        {
            imode = 0;
            backChar = 0; // 次のループ処理で「//」や「/*」の判定にならないようにbackCharをクリア
            continue;
        }

        // 前回文字を保持して次ループ処理へ
        backChar = currentChar;
        continue;
        break;
    }

    // 既存処理( 色々調整は必要だと思う )
}


こんな風にしてコメント系をステップ処理からは無視して、既存処理って書いてるところからコメント関係以外の処理を記述していくと混乱しなくて済むかもしれません。
完全にコメント系を上部に集約する分直す手間は楽になると思います。使う使わないはご自由に。

nonさんが最初に提示してた3の処理をwhile内で無理矢理作っただけなので
その後の経緯でこれじゃまずいって事があるなら
もう1ループごとにフラグ全部printfして紙に書いてアルゴリズムフロー書いて直すしかないですね。


607ポイント を手に入れた。

Name: mii  ..中級者(12,924ポイント)   Date: 2009/12/25(金) 13:00   No:44859     
Title: Re:続ソースコードの行数    
細かくコメントいただきありがとうございます。

ちょっと動かして追ってみることにします!


9ポイント を手に入れた。

Name: mii  ..中級者(13,189ポイント)   Date: 2009/12/25(金) 14:21   No:44867     
Title: Re:続ソースコードの行数    
    case 1:
        if( currentChar == '\n' )
        {
            if( enmark == 0)
                imode = 0;
            else
                enmark--;
        }
        else if( currentChar == '\\' )
            enmark++;

        // 前回文字を保持して次ループ処理へ
        backChar = currentChar;
        continue;
        break;

    case 2:
        if( backChar == '*' && CurrentChar == '/' )
        {
            imode = 0;
            backChar = 0; // 次のループ処理で「//」や「/*」の判定にならないようbackCharをクリア
            continue;
        }

        // 前回文字を保持して次ループ処理へ
        backChar = currentChar;
        continue;
        break;


ここのcontinue文以下なんですが、これだとbreakが実行されないと思います。
これはbreak文の上の分をelse句にいれてやればいいんでしょうか?


265ポイント を手に入れた。

Name: mii  ..中級者(13,231ポイント)   Date: 2009/12/25(金) 16:11   No:44873     
Title: Re:続ソースコードの行数    
組み込んでみたんですが、希望通り動かずグダグダです(T_T)
自分の応用力とセンスのなさにガッカリです。。。

せっかく教えていただいたのにすみません。


42ポイント を手に入れた。

Name: たいちう  ..熟練のプログラマー(42,193ポイント)   Date: 2009/12/26(土) 10:26   No:44898     
Title: Re:続ソースコードの行数    
miiさんの望む形とは違うと思うけど、
直接関係ない部分は遠慮なく削除して、
test1.c〜test4.cをパスするようにはしました。
No:44632で私が書いた、プログラムを小さくする方法の例です。

説明を2つ。

ステップ数のカウントのタイミングは、改行とEOFの2つある。
カウントの処理は関数にするべき。

元のプログラムは、backChar == '\n'等の判定が多く無理があったため
currentCharを全ての判定の基準とした。
これによってskipOneCharFlgとskipTwoCharFlgも不要に。


プリプロセッサ行や文字列をカウントできないのは当然として、
コメントの処理についてもバグはまだあるかもしれない。ていうかありそう。
積極的にテストをするつもりは全くないので、
miiさんに取れないバグがあったら、再現できる最小限のデータファイルを
載せてください。いつまで、という約束はできないけど。


268ポイント を手に入れた。

Name: mii  ..中級者(13,278ポイント)   Date: 2009/12/28(月) 09:13   No:44987     
Title: Re:続ソースコードの行数    
たいちうさん返信遅れてすみません。
2日間寝込んでました(T_T)

教授に相談したら年始でもいいよということなんで少しホッとしました。
今から動きを検証してみます!


47ポイント を手に入れた。

Name: mii  ..中級者(14,020ポイント)   Date: 2009/12/28(月) 14:16   No:45022     
Title: Re:続ソースコードの行数    
難しいですね^^;

え〜っと具体的に修正する部分なんですが、
何処に書いていいのかわからず。。。(汗

取りあえずいろいろいじってみたんですが、
当然バグりまくりですw

テストファイルは以下ファイルで試しました。
<test1>
/*+*/#include <stdio.h>#include <stdlib.h>/* -++*/
#define LOKI 123 / 1
#define IKOL 123
#
void main()
{ //ask
    int a,b ;/* bbb */
    a=0;/* ccc */    /*
    a\n____________________123____________________0123456789*9876543210
    a */
    /* ddd */    /* ooo
    a\n
    a */
    a=0 ;/* eee */    /* */    /* */
//1aaaaaaaaaaaaaaaaaaaaaaaaa123aaaaaaaaaaaaaaaaaaaa0123456789*bb
    b=a ;//
    b=a ; /* b */b=b;
    printf( "\ " ) ;
    b=1            ;
    while(a!=b)
/**/{ a=b ;
( abs
                    );
    /**/}/* */
//    printf( "%d\n",LOKI ) ;
/*  */  /*/  abc;*/
    /*     このようになればOKです!:31 実:20 ロジ:13    */  //a
    //int g;
;

                       }        
<test2>
/**/#include <stdio.h>#include <stdlib.h>/* --- */
#define LOKI 123
#define IKOL 123
#
/**/#define AA 123/***/
//#define BB 456
#define CC 789 /*
#define DD 741
*/
void func2();

void main()
{ //ask
    int a,b ;/* bbb */
    a=0;/* ccc */    /*
    a\n
    a */
    /* ddd */    /* ooo
    a\n
    a */
    a=0 ;/* eee */    /* */    /* */
    //aaa
    b=a ;//
    b=a ; /* b */b=b;
    printf( " " ) ;
    b=1 ;
    while(a!=b)
    { a=b ;
    }
//    printf( "%d\n",LOKI ) ;
/*/
    int g;
    */
func2();
}

void func2()
{    int j;/*
*/    int i;/***//**//*
    int bb;
int *k;
    */char c = 'A';
    // int cc;
    for (i = 9
    ;
     i < 10
     ;
      i++) 
    /**/{/**/
    /**/for (j = 0; j < 5; j++)
    /**/{/**///123 /*
            printf("AAAAA");
            printf("/  *   *   /");
            *k = 1;
        }//aaaaaaaaaa */
//}
/*######################*/
//###########
/******************結果はこのようになればOKですAll:64 / Real:40 / Logic:26*************************/
//************************************************************************//*

         printf("%d\n", i);
    }    // aaaa
/**/}

とりあえずもう少しいじったら(あまり変わってないですが)
ソースのほう載せるのでアドバイス等いただけたらと思います。


742ポイント を手に入れた。

Name: Tororo  ..かけだし(1,047ポイント)   Date: 2009/12/29(火) 10:56   No:45073     
Title: Re:続ソースコードの行数    
とりあえず、プレタグは使いましょう♪

16ポイント を手に入れた。

Name: mii  ..中級者(14,071ポイント)   Date: 2009/12/29(火) 11:33   No:45074     
Title: Re:続ソースコードの行数    
あっテストファイルをそのまま使えるようにプレタグ使ってませんでした。
わかりにくくてすみません。


51ポイント を手に入れた。



Name: kms  ..入門者(4,528ポイント)   Date: 2009/12/27(日) 22:57   No:44964       
Title: ゲーム画面の遷移    
質問させて頂きます。

画面の遷移処理を勉強しているのですが、色々とgoogleで検索したところ、
列挙型なるものを見つけ、フィールド画面から戦闘画面への遷移をこころみているのですが、
うまくいきません。。

ランダムエンカウント風に、乱数を取得して、Battle関数を呼び出したいのですが、
以下の処理を実行すると、キャラが止まってしまいます。

画像は、サンプルのものではなく、3×4のpngを使用しています。
なので、ch.mukiやimageは変更してあります。
元のソースコードは、22章の、「キャラを四方に歩かせる」です。

ソースコードが長い為、レスを分割します。ご容赦ください。。 編集済み


48ポイント を手に入れた。


Name: kms  ..入門者(4,630ポイント)   Date: 2009/12/27(日) 22:58   No:44965     
Title: Re:ゲーム画面の遷移    
#include "DxLib.h"

enum GameState{
        GAME_Battle = 1,
};
GameState g_gamestate;

int Battle();

int Battle( void )
{
    ClearDrawScreen() ;
    if( DxLib_Init() == -1 )    // DXライブラリ初期化処理
    {
         return -1;                // エラーが起きたら直ちに終了
    }


    // ループ
    while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
    {

        printfDx( "戦闘画面\n" ) ;

    }


    DxLib_End() ;                // DXライブラリ使用の終了処理

    return 0 ;                    // ソフトの終了
}
 編集済み


102ポイント を手に入れた。

Name: kms  ..初心者(5,563ポイント)   Date: 2009/12/27(日) 23:00   No:44966     
Title: Re:ゲーム画面の遷移    
typedef struct{
        int x,y,img,muki,walking_flag;
}ch_t;
 
int hantei[15][20] = {
        { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
        { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
        { 1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 },
        { 1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 },
        { 1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 },
        { 1,1,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,1 },
        { 1,1,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,1 },
        { 1,1,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,1 },
        { 1,1,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,1 },
        { 1,1,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,1 },
        { 1,1,1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,1 },
        { 1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 },
        { 1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 },
        { 1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1 },
        { 1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1 },
};

int can_or_cannot(int x,int y,int muki){//進めるかを判定する
        if(muki==3)//上向きなら
                if(hantei[y/32-1][x/32]==1)//進めるか判定
                        return 1;//エラー
        if(muki==1)//左向きなら
                if(hantei[y/32][x/32-1]==1)
                        return 1;
        if(muki==0)//下向きなら
                if(hantei[y/32+1][x/32]==1)
                        return 1;
        if(muki==2)//右向きなら
                if(hantei[y/32][x/32+1]==1)
                        return 1;
        return 0;//正常
}
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        
    int image[12],i,j;
    char Key[256];
    ch_t ch;
 
    if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
 
    ch.x    =320;
    ch.y    =160;
    ch.walking_flag=0;
    ch.muki=0;
 
    SetDrawScreen( DX_SCREEN_BACK ) ;                                                 //描画先を裏画面に設定
    LoadDivGraph( "image_2.png" , 12 , 3 , 4 , 32 , 32 , image ) ;//画像を分割してimage配列に保存


933ポイント を手に入れた。

Name: kms  ..初心者(6,271ポイント)   Date: 2009/12/27(日) 23:02   No:44967     
Title: Re:ゲーム画面の遷移    
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
            //↑メッセージ処理        ↑画面をクリア         ↑キーボード入力状態取得       ↑ESCが押されると終了
 
                /*白い壁を描画*/

                for(i=0;i<15;i++)
                        for(j=0;j<20;j++)
                                if(hantei[i][j]==1)
                                        DrawBox(j*32,i*32,(j+1)*32,(i+1)*32,GetColor(255,255,255),TRUE);
 
                if(ch.x%32==0 && ch.y%32==0){         //座標が32で割り切れたら入力可能
            ch.walking_flag=1;         //歩くフラグを立てる。
            if     ( Key[ KEY_INPUT_UP   ]  == 1 )  //上ボタンが押されたら
                    ch.muki=3;         //上向きフラグを立てる
            else if( Key[ KEY_INPUT_LEFT ]  == 1 )  //左ボタンが押されたら
                    ch.muki=1;         //左向きフラグを立てる
            else if( Key[ KEY_INPUT_DOWN ]  == 1 )  //下ボタンが押されたら
                    ch.muki=0;         //下向きフラグを立てる
            else if( Key[ KEY_INPUT_RIGHT]  == 1 )  //右ボタンが押されたら
                    ch.muki=2;         //右向きフラグを立てる
            else                                    //何のボタンも押されてなかったら
                    ch.walking_flag=0; //歩かないフラグを立てる
            if(ch.walking_flag==1)    //もし歩くなら
                if(can_or_cannot(ch.x,ch.y,ch.muki)==1)//行き先が歩けないなら
                    ch.walking_flag=0;                  //歩かないフラグを立てる。
            if(ch.walking_flag==1) //歩くフラグ
                if(GetRand(4)==0){ //乱数の取得
                    static int g_gamestate = GetRand(4);
                    switch( g_gamestate == GetRand(4)){ //switch文
                        case GAME_Battle: 
                                Battle(); //戦闘用画面関数を呼び出す。
                                break;
                        default :
                                printfDx("テスト\n");
                                break;

                    }
                    
            }

        }
 
        
        if(ch.walking_flag==1){        //歩くフラグが立っていたら
            if     (ch.muki==3)        //上向きならch.y座標を減らす
                    ch.y--;
            else if(ch.muki==1)        //左向きならch.x座標を減らす
                    ch.x--;
            else if(ch.muki==0)        //下向きならch.y座標を増やす
                    ch.y++;
            else if(ch.muki==2)        //右向きならch.x座標を増やす
                    ch.x++;
        }
 
        
        ch.img=image[(ch.x%32+ch.y%32)/11 + ch.muki*3];     //画像をセット

        DrawGraph( ch.x , ch.y , ch.img , TRUE ) ;//画像を描画
 
        ScreenFlip();
    }
 
    DxLib_End();
    return 0;
}


上記のコードはすべて、同一のcppファイルに記述してあります。
レスを使いすぎて、申し訳ないです。。
不適切でしたら削除致します。

画面の遷移について、ご意見を聞かせて頂けたら幸いです。


708ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(75,057ポイント)   Date: 2009/12/27(日) 23:06   No:44968     
Title: Re:ゲーム画面の遷移    
長いですね〜。
これなら拡張子をtxtにして添付するか、zip圧縮での添付をお願いしても良いですか。

ざっと見たところ、乱数で状態遷移が毎回変わるのは状態遷移とは言えないとおもうんですよね。


53ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(75,074ポイント)   Date: 2009/12/27(日) 23:09   No:44969     
Title: Re:ゲーム画面の遷移    
それともう一つ、メインループを2つ作るのはお行儀の良いプログラムとは言えません。

17ポイント を手に入れた。

Name: kms  ..初心者(6,383ポイント)   Date: 2009/12/27(日) 23:13   No:44970     
Title: Re:ゲーム画面の遷移    
>長いですね〜。 
これなら拡張子をtxtにして添付するか、zip圧縮での添付をお願いしても良いですか。

申し訳ありません。txtにして添付します。上記のソースコードのレスは、削除したほうが宜しいでしょうか?

>ざっと見たところ、乱数で状態遷移が毎回変わるのは状態遷移とは言えないとおもうんですよね。

すみません。。ちょっとまだ理解できていないみたいです。。

>それともう一つ、メインループを2つ作るのはお行儀の良いプログラムとは言えません。

申し訳ないです。。善処します。 編集済み


112ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(74,996ポイント)   Date: 2009/12/27(日) 23:25   No:44971     
Title: Re:ゲーム画面の遷移    
基本的な状態遷移の見本は、ゲームプログラミングの館の34章にありますが、ごらんになりました?
http://dixq.net/g/37.html

ソースを見るとRPGのエンカウントを作っていると考えて良いですか?

>>上記のソースコードのレスは、削除したほうが宜しいでしょうか? 
そうですね。ややこしいので、その方が良いでしょう。


78ポイント を落としてしまった。

Name: kms  ..初心者(6,421ポイント)   Date: 2009/12/27(日) 23:32   No:44972     
Title: Re:ゲーム画面の遷移    
>基本的な状態遷移の見本は、ゲームプログラミングの館の34章にありますが、ごらんになりました?

はい。これは、つまりcppファイルを分割する、という意味なのでしょうか?
そうすると、ヘッダファイルもいじらないといけないのでしょうか?
それとも新規作成なのでしょうか?

>ソースを見るとRPGのエンカウントを作っていると考えて良いですか?

はい。ランダムエンカウントで、戦闘画面(実験的なものです)を表示させたいのですが。。

(記事の削除を実行したのですが、削除は管理者のみということなので、ご連絡しておきますね) 編集済み


38ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(75,624ポイント)   Date: 2009/12/28(月) 00:37   No:44976     
Title: Re:ゲーム画面の遷移    
>はい。これは、つまりcppファイルを分割する、という意味なのでしょうか? 
本質はそこでは無いです。
34章は、1つのメインループで状態に応じて呼び出す関数を変えるところにあります。それが状態遷移に対応したプログラムの書き方なのですよ。34章の場合だとfunction_statusの値を書き換えることで状態を遷移していますね。

RPGなら次のような状態遷移が必要だと思います。

1.フィールドの初期化。初期化が終わったら状態2へ。
2.フィールドの処理。エンカウントしたら状態3へ。
3.バトルの初期化。初期化が終わったら状態4へ。
4.バトルの処理。戦闘が終了したら状態1へ。ゲームオーバーなら状態5へ。
5.ゲームオーバー処理。

バトルの処理自体も、内部でボトル専用の状態遷移が必要なりますね。
ドラクエ的なものとして考えると。
B1.コマンドの入力。コマンド入力が完了したら状態B2へ。
B2.戦闘処理。素早い者から順番に攻撃を行う。攻撃キャラが決まったら状態B3へ。
B3.攻撃処理。ダメージとか計算する。ステータスにも反映。表示するメッセージを決めて状態B4へ。
B4.メッセージを順番に1フレームごとに決まった単位で表示。全部は一度に表示しない。表示が終わったら状態B5へ。
B5.敵が生きているか、自分が生きていたら状態B1へ。敵が死んだら経験値の処理をして状態B6へ。自分が死んだら状態B7へ。
B6.メッセージを順番に1フレームごとに決まった単位で表示。全部は一度に表示しない。表示が終わったら状態1へ。
B7.ゲームオーバーに移行するので、状態5へ。

だいたいこんな感じですかね。
ヌケがあるかもしれませんが。


628ポイント を手に入れた。

Name: kms  ..初心者(6,838ポイント)   Date: 2009/12/28(月) 05:34   No:44986     
Title: Re:ゲーム画面の遷移    
ありがとうございます。
関数を変えることにより、処理が可能なのですね。

ちなみに、以前ヘッダファイルを作成し、リビルドやビルドを実行していたときの話なのですが、

LINK : fatal error LNK1104: ファイル 
'C:\Users\名前\Desktop\VS_4\kaihatsu\DxLib_VC\サンプルプログラム実行用フォルダ
\Debug\DxLib_VC2005用.exe' を開くことができません。

DxLib_VC2005用 : error PRJ0008 : ファイル 
'c:\Users\名前Desktop\VS_4\kaihatsu\DxLib_VC\サンプルプログラム実行用フォルダ
\Debug\DxLib_VC2005用.exe' を削除できませんでした。
1>このファイルが他のプロセスによって使用されていないこと、
また書込み禁止になっていないことを確認してください。

上記のようなエラーメッセージが表示されたのですが、
(VC++2008 EE)
これはファイルにアクセス許可が無いのが原因なのでしょうか?
困った記憶があります。
これに関しては、別のスレッドを立てたほうが良いのでしょうか。。。


417ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,125,344ポイント)   Date: 2009/12/28(月) 11:20   No:44997     
Title: Re:ゲーム画面の遷移    
前に実行した実行ファイルが、実行しっぱなしになっているということはないでしょうか?

一見どこにもいないように見えてもプロセスをみると残っている場合があります。
タスクマネージャーのプロセスを開き、自分が作っている名前の実行ファイルが実行中ではないか確認してみてください。
PCを再起動してなお起こるならこれが原因ではないと思いますが。


89ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(77,438ポイント)   Date: 2009/12/28(月) 11:59   No:45004     
Title: Re:ゲーム画面の遷移    
>ありがとうございます。
>関数を変えることにより、処理が可能なのですね。 

これも微妙に意味が違います。関数である必要はありません。
本質は、状態変数で処理の流れを変えてるって事ですね。
動作状態を状態変数で管理しつつ、条件を満たすことで状態変数を書き換えて状態を遷移させる事にあります。
状態遷移の参考サイト。
http://web.hc.keio.ac.jp/~fujimura/2002/lang/lec-n15.html

>これはファイルにアクセス許可が無いのが原因なのでしょうか?困った記憶があります。 
こちらの件に付いては、Dixq (管理人)さんと同意見です。
プログラムが動いたままじゃないでしょうか?


2倍のポイントを手に入れた! 430ポイント を手に入れた。

Name: kms  ..初心者(7,061ポイント)   Date: 2009/12/28(月) 12:14   No:45005     
Title: Re:ゲーム画面の遷移    
>管理人様、softya様

お返事ありがとうございます。
再起動してもだめでしたね。。
おそらくソースコードに誤りがあるのだと思いますが、
他の可能性も考え、過去ログを検索したり、ヘルプを読み、
色々と試したのですがだめでした。
すみません。タスクマネージャーのプロセスとは何でしょうか?


>softya様

>1つのメインループで状態に応じて呼び出す関数を変えるところにあります

これを考慮し、添付したソースコードを実行してみたのですが、
エラーはないものの、画面に何も出力されず、マウスカーソルも消えてしまいました。。

戦闘画面処理はまだ作ってはおらず、実験的に文字を表示するだけのものですが。。

ゲームプログラミングの館の34章を参考にさせて頂いたのですが、
でもこれでは、ランダムエンカウントどころではないですね。。

34章と25章aを混同しちゃってます。。
焦ってます。

今は、「DxLib.h」、「test.cpp」ファイルのみを活用させて頂いています。
うえのレスのヘッダファイルの件は、以前に作成していたものです。 編集済み


223ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(78,355ポイント)   Date: 2009/12/28(月) 13:10   No:45013     
Title: Re:ゲーム画面の遷移    
とりあえず、Field()とBattle()の中にDxLib_Init()とかDxLib_End()があってはいけません。
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
より内側の内容だけを書いて下さい。
基本的に、元の22章に合わせて下さいね。



100ポイント を手に入れた。

Name: kms  ..初心者(7,303ポイント)   Date: 2009/12/28(月) 14:42   No:45024     
Title: Re:ゲーム画面の遷移    
お返事ありがとうございます。

とりあえず、ソースを簡略化して、
「フィールド画面」→「戦闘画面」への移行を目的として本来のサンプルプログラムにしました。

softya様の助言でキャラクターが動くようになりました。
本当にありがとうございます。

フィールドの処理を、「Field関数」から「WinMain関数」に戻したら動くようになりました。

そして、乱数の取得は一旦保留にし、
「フィールド画面(WinMain関数)」から、
Zキーを押すことで、「戦闘画面(Battle関数)」に移行するようにしました。

これでBattle関数は無事呼び出されるようになったのですが、
「画面が切り替わる(フィールド画面が消え、戦闘画面が現れる)」
という処理の記述方法はまだ模索中です。

残っている課題は、「ランダムエンカウント」と、「画面の切り替え」なんです。

「画面が切り替わる(フィールド画面が消え、戦闘画面が現れる)」
という処理の記述は、どういった形式を取るのでしょうか? 編集済み


242ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(78,377ポイント)   Date: 2009/12/28(月) 16:46   No:45030     
Title: Re:ゲーム画面の遷移    
とりあえず、フィールド・バトル切り替えを付けました。
Bでバトル、Fでフィールドに切り替わります。
なにか歩く処理の当たり判定が私の環境ではバグってるんですが、お任せします。


22ポイント を手に入れた。

Name: kms  ..初心者(7,627ポイント)   Date: 2009/12/28(月) 19:02   No:45044     
Title: Re:ゲーム画面の遷移    
ソースコードを実行して純粋に驚きました。。

凄いです。切り替わっています。

自分が作っていたソースと見比べてみると、勉強になりますね。

case STATE_BATTLE:
            //    戦闘画面
            Battle();
            if(Key[KEY_INPUT_F]==1) { //Fキーが押されたら、
                function_status = STATE_FIELD;    //フィールドへ移行。
            }
            break;


等、細かい部分の違いで、なるほど!と唸りました。

でも何故、こう画面が(二つあるかのように)切り替わるのでしょうか。

色々といじったところ、clsDx()関数ではないようですし、
ただの僕のソースコードの打ち間違いだったのでしょうか?

>歩く処理の当たり判定が私の環境ではバグってるんですが

あ、これは自作の画像を用いている為なので、大丈夫です。


324ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(78,676ポイント)   Date: 2009/12/28(月) 19:19   No:45045     
Title: Re:ゲーム画面の遷移    
>ただの僕のソースコードの打ち間違いだったのでしょうか? 

それはですね。
STATE_FIELDの時とSTATE_BATTLEでプログラムがどう流れているか違いをデバッガでステップ実行してみて下さい。それとkmsさんのプログラムの流れの違いを調べてみれば分かります。
こればかりは私が色々書くより、プログラムを追いかけてみた方が理解出来ると思います。


122ポイント を手に入れた。

Name: kms  ..初心者(7,776ポイント)   Date: 2009/12/29(火) 10:43   No:45072 解決!     
Title: Re:ゲーム画面の遷移    
お返事遅れてしまい、すみません。。

わかりました。ありがとうございます。

ゲーム画面の遷移については、softya様の助力もあり、
一応の解決をみたので、あとは、プログラムの流れを把握し、
当初の目的のランダムエンカウントですね。

本当にありがとうございます。
模索してみます。

「ゲーム画面の遷移」ということで、
解決マークをチェックさせて頂きたいと思います。


149ポイント を手に入れた。



Name: Dixq (管理人) [URL]  ..ウィザード(1,082,152ポイント)   Date: 2009/11/15(日) 00:07   No:42032       
Title: ■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
■空間をビートする、新感覚音ゲー、AerobeatをAerobeatPlusとして再リリースしました!■

ver3.90 : リプレイ機能実装!


http://aerobeat.huu.cc/

今回は誰でも曲が追加出来、譜面データも作成出来る。
既に譜面データが用意されているものは、ニコニコから動画をDLするだけで遊べる曲が増える!

詳しいことは動画でご覧下さい☆


http://www.nicovideo.jp/watch/sm8808750

今回は音楽同期などについても根底からアルゴリズムを見直して、
どんな環境でも音飛びしにくいよう考えたつもりです。
よかったら遊んでみてください☆

また、よろしければ感想・ご意見など下さいませ^^


358ポイント を手に入れた。


Name: はね  ..中級者(14,274ポイント)   Date: 2009/11/15(日) 01:06   No:42044     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
制作お疲れ様です。
マウスでやれたらいいなぁ〜とか前回話していたら
いつの間にか本当にマウスで出来るようになっていたので驚きました。
ちょっと気になったことがあるんですが
やはり上の絵はキューさんが全部作成したものなんですか?
画力と美的センスが素晴らしくていつも関心してしまいます。
これからも頑張ってください。


102ポイント を手に入れた。

Name: こめかみ  ..熟練のプログラマー(51,999ポイント)   Date: 2009/11/15(日) 01:10   No:42047     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
回線混んでてアクセスできないw。

このクオリティでフリーなら当然ですよね^^;
今日はのところはダウンロード諦めます。


2倍のポイントを手に入れた! 104ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,082,464ポイント)   Date: 2009/11/15(日) 02:03   No:42051     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
>こめかみさん

>回線混んでてアクセスできないw。

う、マジですか;
アップローダならそんなことないと思ったのに・・。
急きょ4つに増やしました^^;
これでどうですかね・・?

>はねさん

コメントありがとうございます^^
いやはや正直疲れました〜^^;
今日は朝飯から何も食べずに午前0時まで作ってました;
でも無事完成してよかったです!
疲れたけど、自己満足で充実してます(笑

>やはり上の絵はキューさんが全部作成したものなんですか?

あ、書いとくの忘れた^^;
絵はリア友が書いてくれています。龍神録の絵を書いてくれたファンタG君です。
一応Creditには入ってます。
ファンタG君が書いてるのは2枚の絵とはちゅねみくのこのキャラバージョンの絵の3枚です。
それ以外の素材は一応私が用意しましたが、まぁゲーセンに通いながら盗んで来たようなものなので、
私が作ったとは言えないですね^^;


312ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,082,912ポイント)   Date: 2009/11/15(日) 02:12   No:42054     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
※前のトピのお返事

>ひよこさん
>ボタン制御かマウス操作か選べるほうがいいと思います。 

ボタン制御・・?って何ですかね・・?
--
ありがとうございます。頂いたご意見を元に制作頑張ってみますね。


>Tatuさん
>私は添付画像のようなものを想像していました。

なるほど、もろビーマニっぽくした方がわかりやすいですね。
ゲームは最近メイン路線は確立してきましたし、一番良いものに自然となっているんでしょうね。
パクリというと悪いですが、参考にしてみたいと思います。

>真ん中の譜面 ここをマウスでクリックすると音符が配置される。 
・・・
>消去は右ボタンを押したままカーソルを音符の上に置くことでもできる。 

ふむふむ、そうすると操作性がよさそうですね。

>00:25:25と書かれているところ 赤い太い線がいつ重なるかを表す。 
>160bpmと書かれているところ 曲のテンポを表示する。 
・・・
>ENDボタン 譜面の作成を終了する。

すごく詳しい説明ありがとうございます!
完成図が頭の中で思い描けました。

何か以前似たようなものをおつくりになったことがあるのでしょうか?

頂いたご意見を元に制作に活かしたいと思います^^
ただしっかりした譜面データ作成ツールを作りたいですが、
作り込むとそれだけで結構な時間がかかりそうです^^;

う〜む、本当に社会人になると時間が欲しいですねぇ・・。


448ポイント を手に入れた。

Name: kazuoni [URL]  ..ハッカー(114,204ポイント)   Date: 2009/11/15(日) 03:48   No:42060     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
なんですか、このクオリティww
素晴らしいの一言でしかないです^^;
そして、絵師さんの実力も相変わらず、すごいですね!
こんな絵があったら、やる気が俄然でそうです。

やはり、著作権の壁は厳しいですね^^;
そのおかげで、若干ユーザーは戸惑うかもしれませんね。
まぁ、ここは仕方がないことですが。

内容は、相変わらず、素晴らしいと思います。
ただ、一つ物言いがあるのですが・・・
ターゲットとポイントが重なった時の音なんですが、
もう少しバリエーションがほしかったです。
ピンポイントでシンバルになったり、ドラム音になったり。
そうしたら、もっと音を鳴らす爽快感が伴ったかなって思います。
まぁ、現在のままでも全然爽快感はあるのですけどね^^;

制作お疲れ様です!
これからバグ、不具合の報告がちょくちょく来るかもしれませんが・・・
がんばってください!



255ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,083,432ポイント)   Date: 2009/11/15(日) 03:57   No:42061     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
>kazuoniさん

御覧くださりありがとうございます〜!
このようにお褒めの言葉が頂けると毎日制作に励んだ甲斐があります^^

著作権の壁は厳しいですねぇ・・。
全部同梱したいところですが、ニコニコって誰が投稿したかわからない場合もあったり、
アップロード者とコンタクト取れない場合が多いですしね・・。

今回のことで、やはり「歌」に勝るものはないと思いました^^;
しかし歌ってフリーで有名な曲なかなかないんですよね・・。

>音のバリエーション

おぉなるほど!もうこういうご意見超大歓迎です!
確かにBooでもマーベラスでも同じ音ってのは好ましくないですね。
その辺調整してみようと思います^^


2倍のポイントを手に入れた! 520ポイント を手に入れた。

Name: こめかみ  ..熟練のプログラマー(52,128ポイント)   Date: 2009/11/15(日) 18:19   No:42104     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
プレイしましたー

やっとまともにクリアできた。一回だけ

リズムゲー以前に反射神経が問われますね。
パワポケ1にあったミニゲーム"あっちむいてバキッ!"
の恐怖が甦りましたw
(ちなみにコノ動画の最初のミニゲームです:http://www.youtube.com/watch?v=oCijiqCDWbI&feature=player_embedded


あー楽しい。

コレメニューの選択もマウスで出来ませんか?
キーボードとマウス操作の往復で熱中が冷めてしまいます。


129ポイント を手に入れた。

Name: ひよこ  ..比類無きプログラマー(73,361ポイント)   Date: 2009/11/15(日) 18:43   No:42108     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
やってみました。ナイト オブ ナイツで、曲が早いので、
たまにgoodでコンボが落ちるのがなんかいやなので、goodでもコンボ増やしてほしいです。
ゲーム自体はよくできてて、ここまで完成度が高いと勝てっこないなぁと思ってしまいました。(勝負する気なんてないですが。
ゲームと同梱でヘルプみたいなものを作ってほしいです。ホームページに行くのも大変ですから。


146ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,083,695ポイント)   Date: 2009/11/15(日) 22:21   No:42112     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
>こめかみさん

プレイして頂きありがとうございます^^

な、、懐かしい・・これ結構前ですよね?
私もやったような覚えがあります^^;

ゲームって案外本編よりミニゲームの方にはまったりしますよねw

メニューの選択についてですが、既に出来ると思いますが、できませんか?


>ひよこさん

goodでコンボをつなげてしまうと、簡単になってしまい、
コンボが繋がった時の価値が下がってしまうので、goodではコンボにしていないです。
やはりコンボは難しいから意味があり、フルコンボの価値が上がると思うんですよね。

後ヘルプについてですが、何を書いたらよいでしょう?操作説明でしょうか?


263ポイント を手に入れた。

Name: Tatu  ..上級者(17,515ポイント)   Date: 2009/11/15(日) 22:23   No:42113     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
さっそくプレイしてみました。

ニコニコ動画からダウンロードした動画はすべて問題なく動きました。

コンボについて
コンボはMarvelous!!、Perfect、Greatのどれかをとればつながりますが、
フルコンボはMarvelous、Perfectのみでなければとったことになりません。
そのため、フルコンボは満点を取ることと同じことになり、
前のバージョンに比べ、達成がかなり難しくなっています。

遊び方の説明に
「ベストタイミングであるMarvelous、Perfect、Greatのどれかで
連続してヒットすると、「コンボ」が繋がります。」
とありますが、Greatはベストタイミング(得点が最高)ではありませんよね?

>譜面データ作成ツール
>何か以前似たようなものをおつくりになったことがあるのでしょうか? 

作ったことがあるデータ作成ツールは、
前に公開したアクションゲームのマップエディターだけです。

追記

ナイト・オブ・ナイツのイージーを
Great以上のみでクリアしたのでその画像を添付します。
Goodではコンボをつなげないということですが、
それならばなぜ「良い」のでしょうか?


2倍のポイントを手に入れた! 14ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,084,096ポイント)   Date: 2009/11/15(日) 23:23   No:42119     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
ちょ・・、
そ、そのスコアは・・^^;
そんなにもやり込んでいただけ本当に感謝です><

>バグ

こ、これか〜!
tatuさん、ホント感謝です><
「フルコンボ取ってもフルコンボにならない」という報告を何件も頂いているのですが、
過去にフルコンボバグのトラウマがある私には「またか・・」とデバッグが嫌になりかけていたのですが、
Tatuさんのご報告で一瞬で解決しました^^;
フルコンボ条件を指定し間違っていました。
しかしよくそこまで具体的にわかりましたね;
ありがとうございます、即効直しますね。

>Goodではコンボをつなげないということですが、 
>それならばなぜ「良い」のでしょうか?

良いというと・・?
簡単にフルコンボが出せてしまうとフルコンボの価値が下がってしまうので、
フルコンボの位置づけとしては、Great以上がベストじゃないかな?
と勝手に解釈してます。
しかし皆様のご意見を元に修正していこうと思います。


401ポイント を手に入れた。

Name: あ〜る  ..中級者(14,288ポイント)   Date: 2009/11/15(日) 23:53   No:42120     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
早速やらせていただきましたぁ
それにしても…相変わらずのクオリティですねww
僕も早くこんなゲームが作れるようになりたいものです…

前のバージョンでは処理落ちしたので後ろの動画の表示を諦めてたんですけど、こっちだと処理落ちしませんでした。何か魔法でも使ったんでしょうか?

あと、IevanPolkkaで曲が終わる前(?)に終了してしまいます。後ろに魔法陣がまだ出て来てるみたいなんですけど……


168ポイント を落としてしまった。

Name: Tatu  ..上級者(17,858ポイント)   Date: 2009/11/16(月) 00:21   No:42125     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
>フルコンボのバグの理由がわかったわけ
死体飛行でSSS(満点)をとったときにフルコンボとでたことと、
遊び方のページの表記で「連続でベストタイミングだとコンボになる。」
とかかれていたことからそう推測しました。

>「good」とは?

ジーニアス英和辞典をみると
good
1.(質・量・程度などの点で)よい、上等な、申し分ない、すぐれた
2.〜に適した、望ましい


広辞苑では
グッド 「良い」の意。

goodは以上のような意味を持っており、この評価でコンボがつながらないのに
違和感を覚えるので「つまらない」「平凡な」などの意味を持つ
単語に変えたほうがよいのではないかということです。

ゲームの難易度をみたとき、
「『good』のタイミングではコンボがつながらない」
ということはそのままでよいと思っています。


343ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,084,786ポイント)   Date: 2009/11/16(月) 00:33   No:42126     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
>あ〜るさん

遊んで頂きありがとうございます^^

>何か魔法でも使ったんでしょうか? 

アルゴリズムを全面的に変えました。
フレーム基準の計算から時間基準の計算にしました。

前までは「処理落ちしたらその時間だけ音楽を止める」だったので、処理落ちすると音が飛んでたんですよね。
それを「処理落ちしたらその分フレームを飛ばす(=ゲーム計算を速く行う)」また「万一狂ったら人間に解らない単位で少しずつ修正する」というように変えました。
こうすることで、不快な音飛びが少なくなったと思います。
しかしそれでも環境によってはうまく同期しないようなので、ちょっと考えています・・。

今週は転出、引っ越し、配属・・と色々忙しく、ネットにつながらない環境に行くこともあり、
バージョンアップが遅くなるかもしれませんが、
これからもがんばりますのでよろしくです☆


>Tatuさん

SSSとか・・^^;
Tatuさんなら音ゲーとかお詳しいのかもしれませんが、
Good表記に関してはDDRからまんま引用しているからです。

スコア計算についても、マーベラスとパーフェクトは同じ、
Greatはその半分、ここまではコンボが繋がり、Good以下はつながらないという仕様です。
音ゲー好きにとっては表記が統一されている方がわかりやすいと思ってそうしました。

しかしそう言われてみると確かにGoodで「悪い」意味になるのは変ですね。
「まぁまぁ」的な単語の方が良いですねw
ただ私的には、あまりにも支障が無い限りこのままにさせていただきたいと思っています。
ご意見ありがとうございます。


690ポイント を手に入れた。

Name: Ma  ..上級者(20,855ポイント)   Date: 2009/11/16(月) 01:24   No:42129     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
Aerobeat では、デバイスが反応したのに、Aerobeat Plus では、反応しなくなりました。
なお、デバイス番号は1から4まですべて試してみましたが反応しませんでした。

一応報告まで。

しばらくはマウスで遊ぶことにしますw

追記
>「まぁまぁ」的な単語の方が良いですねw 
もしかえるならばですが、 fine とか。


97ポイント を手に入れた。

Name: こめかみ  ..熟練のプログラマー(52,446ポイント)   Date: 2009/11/16(月) 02:51   No:42131     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
明日があるというのにこんな時間にこんばんわー。起きれるかな。。。

>メニューの選択についてですが、既に出来ると思いますが、できませんか?

えと、曲の選択は出来ます。
起動してすぐのメニューのコトを言いたかったのですがよく考えたら連続で遊ぶ分には関係ありませんね。

キーボードと往復が必要なのは得点画面から曲選択メニューに戻るときでした。

加えて細かい希望を言いますが、
曲の難易度を選択してクリックしたらそのままゲームをスタートして欲しいです。
遊ぶために難易度を選択してから曲のタイトルをクリックしようとすると
曲メニュー遷移の反応が良くてクルクル動いてしまうので。。。


>な、、懐かしい・・これ結構前ですよね? 
qさんパワポケ知ってたw懐かしい?確かに十年位前のゲームかなw
シリーズは続々でてるみたいですけど、私は野球の細かいルールに明るくなくて、
プレーヤの操作できる自由度が高くなってきた3あたりからついていけなくなりましたw

>ゲームって案外本編よりミニゲームの方にはまったりしますよねw
ありますねーw

あーもう時間が危ない。おやすみなさい。


318ポイント を手に入れた。

Name: Tatu  ..上級者(18,025ポイント)   Date: 2009/11/16(月) 19:21   No:42170     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
>SSSとか…
Dixqさんのブログ(満点取ったが何の曲かわからん)で
出されていた曲と同じはずです。

>音ゲーの知識
いえ、ほとんど無いに等しいです。
自分が持っている音楽ゲームは太鼓の達人(5まで)だけで、
ゲームセンターでは見るだけで自分でプレイすることはありません。
もしはまってたらどれぐらいお金を使っていたのかおそろしいです。

>表記の統一
有名な前例があり、それにならっているということですね。わかりました。

>Maさん「fineとかどうですか。」

fineの意味にはこのようなものがありました。

広辞苑より
ファイン fine
美しく立派なさま。見事なさま。
->ファインプレー(fine play)

ジーニアス英和辞典より
fine
(並以上に)立派な、すばらしい、みごとな、
 (粒などが) 細かい
 晴れた


goodをfineに変えるのでは意味がない気がします。


また、和英辞典で「まあまあ」を調べてみると
以下のものが出てきました。

not bad
so-so
neither good nor bad
(fair to) middling
more or less all right



167ポイント を手に入れた。

Name: やっくん  ..中級者(12,870ポイント)   Date: 2009/11/16(月) 21:09   No:42175     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
ダウンロードし、マウスでプレイさせてもらいました。
これほどの質のゲームを作られるとはさすがです!

まだ1時間ほどしかやってないせいか簡単な曲でブーがでてばかりのへたれな自分><
動画を見ていると簡単そうに見えたけど以外にリズムを取るの難しいですね。
でも、ばっちり合えばちゃんとマーベラスも出ていたので、慣れでしょうか。
マウスでやっているとカメラが欲しくなってきました。


190ポイント を手に入れた。

Name: lbfuvab  ..上級者(23,186ポイント)   Date: 2009/11/16(月) 22:04   No:42181     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
>> Tatuさん
「まぁまぁ」ならordinaryなんか良さげですね。


22ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,085,226ポイント)   Date: 2009/11/16(月) 23:49   No:42186     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
先ほどver3.3リリースしてきました。
あ〜木曜日引っ越しなのに何やってるんだろう!!


>Maさん

う、マジですか;
それはカメラが認識しなくなったということですよね?
その辺よく調べてみますね。


>コメカミさん

あぁ・・・さっきのverUPでその機能追加しようと思っていたのに忘れてました;
次回実装しますね。


>Tatuさん

それでいてそれだけの腕をお持ちとは・・^^;
私はDDRに結構はまりましたね〜。
反対にビーマニのスキンを参考にしているわりには、DDRほどビーマニはやってないです。
一時期手でも足でも全曲AAを目指してましたけどMAXだけは無理なんで諦めました^^;


>やっくんさん

プレイして下さりありがとうございます^^
これは結構慣れ要素が強いですね^^;
私もカメラでしか最初やってなかったのでマウスはかなり抵抗がありましたが、
慣れてみると逆にこっちの方がいいスコア出るようになりました。
毎日アップしてるので、お楽しみ下さいな〜☆


440ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,085,307ポイント)   Date: 2009/11/16(月) 23:50   No:42187     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
> lbfuvabさん

なるほど、ありがとうございます。
ただ今現状goodで特に致命的な支障があるわけではないので、このままにさせていただこうと思っています。
ご意見ありがとうございます。



81ポイント を手に入れた。

Name: Tatu  ..上級者(18,146ポイント)   Date: 2009/11/17(火) 00:21   No:42189     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
追加曲を一通りやって、
Great以上でフルコンボになるようになったことを確認しました。

そしてFloating Point (Normal Easy)で満点を達成しました。

> lbfuvabさん
確かに「通常の」「ありふれた」という意味をもつordinaryはよさそうな感じです。
ただ、今のところ、評価がよいほど文字列が長くなっているので
8文字あるorginaryをgoodと取り換えると見た目が悪くなるのではないかという気もします。


121ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,085,394ポイント)   Date: 2009/11/17(火) 01:18   No:42192     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
>Tatuさん

SSSキター!
このSSS作ったとき3色って案外色の取り合わせ悪いなと思ったんですが、
まぁ見る人ほとんどいないだろうと思ってこのままにしました・・
まさか早々にご覧になるとは・・・w

しかも、それまでのスコアが全てすごい・・^^;
これだけやっていただけると追加リリース出す甲斐があります。
引き続き頑張ります☆


87ポイント を手に入れた。

Name: ROM  ..ぴよぴよ(188ポイント)   Date: 2009/11/18(水) 20:23   No:42274     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
基本ROM専ですが気になることがあるんで書き込みます
特設サイトで公開されている譜面作成ツールがありますが6分20秒以上の曲は再生されません
これは
SetCreateSoundDataType( DX_SOUNDDATATYPE_MEMPRESS );
もしくは
SetCreateSoundDataType( DX_SOUNDDATATYPE_FILE );
を入れれば解決します
ですがストリーム再生なんで(wav以外は?)重くなります
ご存知でわざとそうされているのだったら申し訳ありません



185ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,086,043ポイント)   Date: 2009/11/18(水) 21:00   No:42278     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
>>ROMさん

ご意見ありがとうございます。
そうですね、6分20秒というのは存じませんでしたが、龍神録は、
SetCreateSoundDataType( DX_SOUNDDATATYPE_MEMPRESS ); 
で再生しています。

メモリを食うが、処理が軽い

メモリは食わないが、処理が重い

このどちらを取るかということは龍神録の時考えましたが、
今回の音ゲーに関しては全く考慮しませんでした。

というのも、動画を背面で再生させるだけでもかなりCPUに負荷がかかり、
それでいて、音ゲーというシステム上少したりとも処理落ちが発生してはいけないという条件が入るため、
メモリを食ってでも仰る指定はしませんでした。

現在は現状でかなり重い為、重くなる修正は避けようと思います。
後、曲はなるべく90秒〜100秒で作ろうとしており、2分を超えるとかなり「長い」と感じてしまうので、
6分以上については考慮しなくてもいいかなと考えています。

6分20秒という制限があることについては、新たに勉強になりました。ご意見ありがとうございます。


258ポイント を手に入れた。

Name: Tatu  ..上級者(18,518ポイント)   Date: 2009/11/19(木) 21:49   No:42342     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
曲を最後までプレイした回数が200回をこえました。
ver3.30での全曲ノーマルイージーでフルコンボを達成。
「ナイト・オブ・ナイツ」と「初めての恋が終わる時」でフルコンボを達成したら
GREATがあるにもかかわらず、満点になりました。

要望をまとめてみました。

ソートの種類を記憶して次回の起動時にもそのままになるようにしてほしい。

音楽の大きさとヒット音の大きさの比を変えられるようにしてほしい。

Normalのヒットボックスの色を変えられるようにしてほしい。
「Ievan Polkka」のような背景が緑色のときは
ヒットボックスが見にくいです。

曲を選ぶとき、真ん中から少しだけずれた所では勝手に動かないようにして
表示されている曲のタイトルをクリックしたらその場所にいくようにする。
そして、上下端にポインタがある場合は今まで通りスライドするという風にしたらどうでしょうか。


372ポイント を手に入れた。

Name: Tatu  ..上級者(18,563ポイント)   Date: 2009/11/21(土) 10:25   No:42418     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
フルコンボをしたときGREATがあるのに満点となる現象が
死体旅行(double easy)
FF10 ラスボス戦闘曲(normal hard)でもみられました。

また3.40で追加された曲のフォルダ名が
「evor snow」となっています。

11/21追記

MARVELOUS、PERFECT以外があっても満点になる現象は
フルコンボでなくても発生するようです。
ナイト・オブ・ナイツ(normal easy)をやったら
MISSがあるのに満点になりました。

ネイティブフェイス(normal hard)でも
フルコンボをしたらGREATが25個ぐらいあったのに
満点になりました。

裏桜華-桜樺-(double easy)でもGREAT有りフルコンボで満点になりました。



45ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,087,296ポイント)   Date: 2009/11/22(日) 11:12   No:42469     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
>Tatuさん

引き続きプレイして下さりありがとうございます^^

>曲を最後までプレイした回数が200回をこえました。 
>ver3.30での全曲ノーマルイージーでフルコンボを達成。

すごい・・どこまで行くんでしょう・・^^;
制作者でありながら、私には無理な気がします・・;

>ソートの種類を記憶して次回の起動時にもそのままになるようにしてほしい。 

了解です。
ver3.41で実装しました。

>音楽の大きさとヒット音の大きさの比を変えられるようにしてほしい。 

了解です、今後のアップデートで対応します。

>Normalのヒットボックスの色を変えられるようにしてほしい。 

なるほど、ただ設定がどうなりますかね・・。
その曲ごとに変えたいってことですよね。
ということは、設定.exeではダメですね。
曲が始まった時に決めるんでしょうか・・?

>マウス操作

改善しましたので、試してみてください。

>フルコンボをしたときGREATがあるのに満点となる現象

これは直したのですが、

>MISSがあるのに満点になりました。 

これは・・・、わかりません。
もしかしたら今回の修正で直っているかもしれませんのでご確認ください。

>evor snow

う、、間違ったorz
フォルダ名を間違うと修正した時同じ曲が2曲になっちゃうんですよね・・。
セーブデータ名はフォルダ名になるので、フォルダ名を変えると実質消えてしまうし・・。
注意書きで対応したいと思います^^;

色々とご意見、ご報告ありがとうございます!
感謝いたします><


383ポイント を手に入れた。

Name: Tatu  ..上級者(18,608ポイント)   Date: 2009/11/22(日) 18:42   No:42503     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
>どこまで行くのでしょうか
プレイ回数は500をこえました。
「狂気の瞳」と「ナイト・オブ・ナイツ」はGage lv:0でクリアし、
他のものはGage lv:3でクリアしました。

>ソートの種類の記憶
ver3.42をダウンロードしましたが記憶していないようです。

>ヒットボックスの色
色を変えたいときに色を変えられれば良いので、
各曲ごとに変えられなければいけないということではありません。
ですので、設定.exeに追加するだけでも十分だと思っています。
doubleのヒットボックスの色(反応する色)はコンフィグで変更可能なので
コンフィグに追加してもよいのではないでしょうか。

>マウス操作
勝手にずれることがなくなり、一つずつ動かしやすくなってよくなったと思います。
しかし、やりたい曲が今選んでいる曲から離れていたとき、
ずっとボタンをおしつづけなければならないのが気になります。

>曲のセーブデータ
死体旅行の誤字のときは名前変更で引き継ぐことができました。

曲はWing Girlsがよいと思いました。

「☆ゲッダン☆」が追加されたら鬼畜になるかもしれないと思いましたが
動画をみてみたら41秒しかありませんでした。
「ぽっぴっぽー」はいいかもしれません。
ニコニコ大百科によればどちらの動画もラマーズPと呼ばれる人がつくったそうです。

みなさんはAerobeatの曲ではどの曲が好きですか。
また、追加してほしい(したい)曲は何でしょうか。


45ポイント を手に入れた。

Name: Tatu  ..上級者(18,693ポイント)   Date: 2009/11/23(月) 00:05   No:42532     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
ぽっぴっぽーの譜面を作ってみました。

動画 【初音ミク】ぽっぴっぽー【本店だよ!!】
http://www.nicovideo.jp/watch/sm5508956

注:背景画像.pngはサイズがおおきいためはずしているので
他のフォルダから入れてください。

曲の長さ1:39
normal hardのみ
後半が鬼畜。一応gage lv:0でクリア確認しています。


85ポイント を手に入れた。

Name: ROM  ..ぴよぴよ(426ポイント)   Date: 2009/11/23(月) 00:52   No:42533     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
便乗してゲッダンの譜面を作ってみました
動画☆ゲッダン☆
http://www.nicovideo.jp/watch/sm4946055
たった40秒で
normal Hardのみです

実はクリアできていません……
譜面作ってばかりなんでプレイの方はまだまだです
ぽっぴっぽーにも挑戦させていただきましたがクリアできませんでした

精進してきます


159ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,087,676ポイント)   Date: 2009/11/23(月) 22:53   No:42563     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
>Tatuさん

ご指摘ありがとうございます。
修正しました。
・・したつもりですが、出来ていなかったらごめんなさい^^;
先ほどver3.50リリースしてきました。
今まで使い勝手が悪かった部分も色々と修正したつもりです。

>プレイ回数は500をこえました。 

すごい・・
作った私自身そこまで回数行ってないのではないだろうか^^;

evor snowの誤記については、インストーラを作ってから修正しようと思います。

>ぽっぴっぽー

お〜、リズムがはっきりしている曲は譜面にしやすいですね。
歌なんかは間奏があると難しかったりしますが、これはビートしやすそうです。
後半が確かに鬼畜ですね、と言いたいところですが・・ROMさんの・・・


>>ROMさん

何その鬼畜譜面!!
オートプレイオフで挑んだら一瞬で死にました^^;
この曲はイントロからすでに危険臭がしてましたが、本当に難しいですね^^;
私も何回かやりましたが、クリアは出来ましたが、D以上出ません・・
しかし何故難易度が7w


2倍のポイントを手に入れた! 380ポイント を手に入れた。

Name: ひよこ  ..比類無きプログラマー(73,936ポイント)   Date: 2009/11/23(月) 23:12   No:42564     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
Dixqさん、
そういえば、なんでフルスクリーンではないのでしょうか?画面いっぱいで遊びたいのですが。


46ポイント を手に入れた。

Name: ROM  ..ぴよぴよ(513ポイント)   Date: 2009/11/24(火) 00:21   No:42567     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
>>難易度7
すいませんw
難易度変更してませんでしたw

http://u1.getuploader.com/hattenmin/
よければここにいろいろ譜面置いているんで暇があればやってみてください
難易度設定はよく考えてしてませんが


87ポイント を手に入れた。

Name: Tatu  ..上級者(19,094ポイント)   Date: 2009/11/25(水) 17:53   No:42648     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
>ROMさん

プレイしてみました。

プレイ結果
☆ゲッダン☆                    D
Tag                      SS(full) / A
ほおずきみたいに紅い魂          S / C
最終鬼畜一部声           SS(full) / D(-3)
sweets time              SS(full) / S
sweet_little_sister      SS(full)
緋色のDance              SS(full)


>Dixqさん

動画の名前は形式さえあっていれば背景動画.***と書かなくてもよくなったのですが、
音楽の名前も形式があっていれば音楽.***とかかなくてもよいようにしてくれませんか?

ソートはちゃんと記憶するようになっていました。

音量調節時に曲タイトルをクリックするとそのまま始まってしまいます。

追加された5曲はイージーは全曲フルコンボ。
ハードも「チカラ」はフルコンボできました。
他の曲もクリアはできました。


386ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,088,041ポイント)   Date: 2009/11/25(水) 21:42   No:42658     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
>>ひよこさん

フルスクリーンになると、何故か時間同期関数が正常どうさしないというバグがあるので、出来ないのです。
どうしてかなぁ・・。

>>ROMさん

おぉ!!すばらしい!
選曲だけでなく、譜面もかなり正確ですね^^
これは是非同梱させていただきt・・(ボソ
最終鬼畜は本当に鬼畜だ・・^^;

>>Tatuさん

ってさっそくクリアされてる人がいらっしゃるし^^;
しかもイージーがほぼSSFULLってw
本当にすごいな〜^^;

音楽の件は、イントロも音楽ファイルなので難しいんですよねぇ・・。
イントロというキーワードが入らない音楽ファイルうなら音楽.wavと同じ扱いみたいな感じでもいいなら。。

>追加された5曲はイージーは全曲フルコンボ。

すごすぎる^^;
「フルコンボ」って簡単な曲でも難しいんですよね〜;
一度でもミス出来ないと思うと後半緊張してしまいますw


209ポイント を手に入れた。

Name: ROM  ..ぴよぴよ(651ポイント)   Date: 2009/11/25(水) 22:47   No:42665     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
>>Tatuさん
easyはことごとくフルコンボですねw
最終鬼畜のハードがクリアできるとは……
http://ux.getuploader.com/kokokaragahontonojigokuda/
ここに一応かなり難しい譜面がおいてあります
難しすぎて面白くないと思いますが挑戦してみてくださいw
ただ、この中のPhantasm Brigadeは譜面がずれてるんでやらない方がいいかと思います;

>>Dixqさん
譜面にずれがあるところもありますが、それでも良いなら
ぜひ、同梱してくださいw


138ポイント を手に入れた。

Name: Tatu  ..上級者(19,428ポイント)   Date: 2009/11/26(木) 02:33   No:42668     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
注:実際のプレイ回数は添付画像のプレイ回数の数倍以上です。

>ROMさん
さっそくプレイしてみました。
Phantasm Brigage        SS(full)
#Grip & Break down !!#  D(-3)
マイムマイム               D(-3)


Gage lvを最低まで下げて、
途中で追いつかなくなり、
どうしようもない場面になったら
ポインタをぐるぐるまわし、
つながるところでゲージを回復というやり方で
Gはまぬがれることができました。

>Dixqさん
音楽の件はイントロ用の音楽ファイルは「イントロ.***」で
プレイ用のファイルは「イントロ.***」を除くどんな名前でもよいという風にしてよいと思います。

これならば、もらった譜面をすぐにプレイしたい人はダウンロードした音楽ファイルを
そのまま曲のフォルダに入れるだけで遊べるようになります。

イントロを用意する人にとってはその音楽ファイルをツールで編集し、
保存するときに名前を変えるのは今までと変わらず問題ないと思います。


334ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,088,305ポイント)   Date: 2009/11/26(木) 19:42   No:42703     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
こんなとてつもない動画を見つけました・・・。

http://www.nicovideo.jp/watch/sm8897565
(ナイトオブナイツハード、SS-フルコンボ)

天才と言わざるを得ない。
こりゃレベル20位の作るしかないか・・w
しかもゲッダンが入っている^^;

>ROMさん

お〜ありがとうございます!では早速準備します!^^

>Tatuさん

やりこみようが半端無い・・^^;
音楽ファイルについては了解です!


123ポイント を手に入れた。

Name: Tatu  ..上級者(20,956ポイント)   Date: 2009/11/28(土) 09:34   No:42777     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
動画を見て「ナイトオブナイツ」(ハード)のフルコンボに挑戦してみました。

現在SSは取れましたがフルコンボはまだ達成できていません。


63ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,088,377ポイント)   Date: 2009/11/28(土) 16:27   No:42787     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
うは〜、Tatuさんまで^^;
ナイトオブナイツが鬼譜面という言葉が似合わなくなってきましたね・・w
(しかもプレイ回数が半端無い^^;

ということで今回のverUPで鬼譜面2曲追加しました!
今度は新譜面作成ツールで作っているので、リズム感の違いによる不快な音ずれも無くなったと思います。
・・が、なんというか物理的な限界を突破させるような譜面になってしまっております・・^^;


72ポイント を手に入れた。

Name: Tatu  ..上級者(21,067ポイント)   Date: 2009/11/29(日) 00:49   No:42812     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
MAX300は Gage lv:-3でEランクでした。
タイトル画像が(仮)じゃなく(激危)って。

最終鬼畜一部声(Hard)は前の投稿のときは
Gage lv:-3でDでしたが
Gage lv:0でCが取れるようになりました。
この曲のタイトル画像も(危)にかわってますね。

華爛漫-Flowers-
両難易度でフルコンボを達成しました。
あと、ダウンロードしたとき、セーブデータのフォルダに
この曲でランクAをとったデータが入ってました。


111ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,089,470ポイント)   Date: 2009/11/29(日) 11:28   No:42824     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
作った本人が言うのもなんですが、私も似たような感じです^^; Gage lv:-3です。
マーベラスの取得率が高いですね〜素晴らしい・・。
物理的に不可能な気もする譜面ではありますが、譜面データはかなりしっかりしたもののはずなので
お許しをということで^^;


>華爛漫のデータ

う、ホントだ;
急いでver3.61リリースしました。
ついでにメニュー画面で難易度選択時に挙動がおかしくなるバグも直しました。


156ポイント を手に入れた。

Name: ひよこ  ..比類無きプログラマー(73,847ポイント)   Date: 2009/11/29(日) 13:26   No:42830     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
最終鬼畜一部声(Normal)でやってみましたがDしかとれません。マウスでやっているからですね。
マウスだと手が追いつかないです。
まさか、TatuさんもDixqさんもマウスでやっているんですか?


89ポイント を落としてしまった。

Name: Dixq (管理人) [URL]  ..ウィザード(1,089,793ポイント)   Date: 2009/11/29(日) 13:35   No:42832     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
>>ひよこさん

>まさか、TatuさんもDixqさんもマウスでやっているんですか?

それはペンタブか何かだということでしょうか?
もしカメラかということでしたら、
逆にマウスじゃないとカメラじゃ無理だと思います。
FPSもそこまで高くないですし、マウスの移動量とカメラ時のターゲットの移動量は
完全に後者の方が多いと思います。

カメラでやっているかマウスでやっているかは、私たちがアップしているSSを見たらわかります。
取得したスコアはカメラなのかマウスなのか隣に表示されています。

>最終鬼畜一部声(Normal)でやってみましたが

最終鬼畜一部声はNormalしか無く、doubleは無いと思いますが、EasyかHardかどちらかという意味でしょうか?
Hardは中盤の高速移動がかなりキツイですね〜・・。
譜面はROMさん作成です。


>>ROMさん

エアロビートのトップページ下にROMさんのお名前書かせて頂きましたm(_ _)m


323ポイント を手に入れた。

Name: ひよこ  ..比類無きプログラマー(73,999ポイント)   Date: 2009/11/29(日) 16:12   No:42840     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
Dixqさんってペンタブでやっているんですか?

曲のところ見てきましたら、Easyでした。Easyでも難しいです。
DixqさんとTatuさんの絵を見てきたら、両方マウスでやっていて、すごすぎます。
自分には無理です。
DixqさんとTatuさんなどのうまい人のプレイしている映像が簡単に見れるようにリプレイ機能がほしいです。


152ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,089,964ポイント)   Date: 2009/11/29(日) 16:41   No:42849     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
>>ひよこさん

いえ、私はペンタブではなく普通のマウスです。
エアロビート掲示板によく投稿されているやっぽんさんはペンタブでプレイされているようですが、
ペンタブは案外やりやすいそうです。
私はペンタブ持ってないので・・。


リプレイ機能ですか〜・・何人かに言われましたが、やはり需要があるようですね;
リプレイ機能を実装するとメニュー画面を作らないといけないんですよね〜^^;
う〜む、平日に実装は無理そうなので、今度の休日にでも実装検討してみます。


171ポイント を手に入れた。

Name: ひよこ  ..比類無きプログラマー(74,068ポイント)   Date: 2009/11/29(日) 18:31   No:42882     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
Dixqさんってマウスでやっているんですか。
すごすぎます。自分にはそんな早く動かせません。早く動かしたら判定に怒られて、goodになってしまいます。
リプレイの検討ありがとうございます。楽しみにしてます。


69ポイント を手に入れた。

Name: ROM  ..ぴよぴよ(738ポイント)   Date: 2009/11/29(日) 19:40   No:42900     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
>>Dixqさん
名前掲載把握しました
あとアップローダとか借りないんでしょうか?
譜面を気軽に上げられる場所があれば結構譜面が集まるんじゃないかと思うんですが……


87ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,090,140ポイント)   Date: 2009/11/29(日) 19:51   No:42902     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
>>ひよこさん

マウスの性能にもよるでしょうね。
例えばコロコロのマウスだと高速に移動するのは辛いかもしれません^^;

>>ROMさん

う〜ん、一応Aerobeat用に新しくサーバーを借りたものの、
ここのサーバー極端に遅いんですよね〜・・。
dixq.net側は少しでもアクセスが増えると落ちてしまいますし;
今現在ゲーム本体のアップに利用しているアップローダに投稿していただくしかなさそうです。
掲示板にアップローダ機能があればいいんですけどね;

「譜面うp板」みたいな掲示板欲しいですね。


176ポイント を手に入れた。

Name: Tatu  ..上級者(21,240ポイント)   Date: 2009/11/30(月) 23:33   No:42984     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
総プレイ回数は900をこえました。

>ひよこ さん
>マウスですか?
私もペンタブではなく、マウスでプレイしています。

>手が追いつかない
コントロールパネルでポインタの速度を調整してはいかがでしょうか。
>速く動かしたら早すぎて
ボックスが表示されてからベストタイミングになるまでの時間を短くしたらどうでしょう。
私は30フレームに設定しています。

>Dixq さん
リプレイ機能の実装、期待します。


173ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,090,864ポイント)   Date: 2009/11/30(月) 23:36   No:42986     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
き・・九百・・^^;
そろそろ称号が最終段階へと突入しそうだ・・w

リプレイ機能はやはり需要がありそうですね。
先日からいくつもニコニコにアップして下さっている人がいらっしゃいますが、
きっと常に録画してるんでしょうね・・。
HDDが悲鳴を上げていそうだ^^;


122ポイント を手に入れた。

Name: やっぽん  ..ぴよぴよ(59ポイント)   Date: 2009/12/01(火) 00:44   No:42992     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
3.70リリース乙です。WinterAgain良いねー
天体観測も譜面が面白くていい感じです

MAX300は Gage lv:-3で、時々マウスぐるぐるでやっとDランク…
まだまだやり込みが足りないです。修行せねば。
しかしニコニコの人、最終鬼畜一部声を初見Aとかどんだけ凄いんですか


59ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,090,965ポイント)   Date: 2009/12/01(火) 22:43   No:43014     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
>>やっぽんさん

おぉ、D!!
素晴らしいw
せっかくの高いペンタブ削れてしまいますよ(笑
いや〜しかし光栄なことでございます〜^^
WinterAgainいいですね!冗談抜きで目をウルウルさせながら作りましたよw

そしてニコニコの人すごいですよね〜。尊敬します・・。

で、今日もまたバージョンアップしました!
下ひとけたの数字がなくなってきたぞ〜!w


101ポイント を手に入れた。

Name: Tatu  ..上級者(21,335ポイント)   Date: 2009/12/03(木) 19:58   No:43212     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
ついにプレイ回数が1000をこえました。
称号はこれで最終段階だそうですが、
まだ上の称号がありそうな名前ですね。

>いくつもの動画
見てみました。特に、MAX300の動画はすごいプレイでした。


95ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,093,091ポイント)   Date: 2009/12/03(木) 21:09   No:43232     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
おぉ〜、おめでとうございます!
まぁ頂点こそシンプルってことで。
あんまり上を上を名前を探してるとうちの掲示板ランクの称号みたいになりますし^^;
(プログラマーが一番上だったのに今じゃ中間^^;)
というか1000回もプレイして下さる方がいらっしゃるとは思いませんでした(嬉涙)
名もなきイメージキャラもお茶を振りながら喜んでいることでしょう(ぇ

FirstLoveは一発SSフルコンボですか、さすがですw


20ポイント を手に入れた。

Name: Tatu  ..上級者(21,335ポイント)   Date: 2009/12/05(土) 10:18   No:43417     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
ver 3.80までの
難度 9の全曲フルコンボを達成しました。


Name: Dixq (管理人) [URL]  ..ウィザード(1,096,492ポイント)   Date: 2009/12/05(土) 21:56   No:43462     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
おぉ〜どこまで行くんでしょう・・、素晴らしいw

・・ってTatuさんのカキコ見て思い出しました。
そういえばメニューのスコア画面でフルコンボのマークが表示されないバグがあるんでした><
ん〜今日のリリースの分は無理だから、明日以降修正したいと思います。

後、来週の土曜日位にちと変わったリリースしますのでお楽しみに♪


162ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,096,614ポイント)   Date: 2009/12/06(日) 02:04   No:43474     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
リプレイ機能実装しました〜!
いや〜途中原因不明のバグに見舞われて苦労しました〜;
無事実装出来ました^^
ver3.90リリースしました☆


35ポイント を手に入れた。

Name: Tatu  ..上級者(21,438ポイント)   Date: 2009/12/06(日) 15:53   No:43526     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
メルトでフルコンボを達成しました。


また、リプレイの録画・再生が正常に行われていることを確認しました。

再生中にW+左右キー押しても異常はありませんでした。

しかし、リプレイの成績表示でそのリプレイのスコアがランキングに入るときに
それがまるで記録されているかのように見えるのがきになりました。


103ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,096,889ポイント)   Date: 2009/12/06(日) 18:46   No:43533     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
おぉ〜すごい!
レベル10以上の曲はなかなかフルコンボ出来ないですよね〜!

そして今まで作ったリプレイ機能はバグが多かったので、
なんか人からもらったリプレイがちゃんと動いて嬉し涙が出そう(T_T

今回はバグが出たり不具合修正が困難になったりするのと恐れて圧縮も効率化もなんもしてないんで、
zipにすると容量が1/10位になります^^;

あ、そうそう、スコア画面でFullが表示されるようになりましたので、よければそちらもご確認下さい^^


122ポイント を手に入れた。

Name: Tatu  ..上級者(21,518ポイント)   Date: 2009/12/08(火) 23:28   No:43669     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
スコアモードでフルコンボの表示がされていることと、
タイトル画像がなくても曲名がわかるようになっていることを確認しました。

添付したリプレイファイルの番号は上書き予防のため、大きなものにしてあります。


80ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,098,587ポイント)   Date: 2009/12/10(木) 22:40   No:43764     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
リプレイ一通り拝見させて頂きました〜!
いや〜素晴らしい^^

そういえば、MAX300の動画アップされていらっしゃる方から連絡があって、
あの方もTatuさんのリプレイご覧になっているようですよ^^

さて、ver3.D0リリースしました。
最近は曲追加よりも機能改善、機能追加に力を入れました。
平日は帰ってからの少ない時間で作業しているので限られた機能ですが^^;

色々機能追加してみたので良ければご覧ください^^


曲は52曲になりました。いや〜よく作ったもんだ・・。
そして段々今から始める人が始めにくくなってきたぞ^^;
何十曲も動画入れるの面倒だな・・・。


207ポイント を手に入れた。

Name: Tatu  ..上級者(21,580ポイント)   Date: 2009/12/11(金) 15:11   No:43826     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
プレイ回数は1200をこえました。
東方虚偽樂でフルコンボを達成しました。

>>プレイ画面の右上の早送りと曲同期
通常プレイ時には押せないと思います。
リプレイ時のみ表示するようにしてはどうでしょうか。
それに今までに比べて、画面が狭くなったような感じがします。

>>リプレイ保存ボタン
Rキーでもボタンのクリックでもリプレイを保存できることを確認しました。
しかし、ボタンとずれた場所でクリックして保存に失敗するのは嫌なので、
Rキーで保存するようにしています。

>>タイミングエフェクト
もしこのエフェクトが付くとしたら、ずれたフレーム数を表示するだろうと思ってました。

>>曲終了時の扉
前よりもいい感じになっていますね。


62ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,100,763ポイント)   Date: 2009/12/12(土) 01:53   No:43886     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
リプレイ拝見しました。
東方虚偽樂は確か私はフルコンボ出していない気が^^;
何気にこの曲難しいですよね。

>>画面が狭くなった

一応マーカーにはさしかからないようにはなっているのですが、窮屈ですかね?

>>フレーム数表示

一瞬なので、あまり詳しい情報を沢山出してもみにくいかなと思いまして。
それにだいたいのフレーム数は表示される判定でわかりますし、前後が解ればいいかなと。


155ポイント を手に入れた。

Name: Tatu  ..上級者(21,825ポイント)   Date: 2009/12/12(土) 20:04   No:43952     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
「星の器」のフルコンボを達成しました。

19ポイント を落としてしまった。

Name: Dixq (管理人) [URL]  ..ウィザード(1,106,447ポイント)   Date: 2009/12/13(日) 03:25   No:43965     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
おぉ!
星の器はSがなかなか出せないと思っていたのに、フルコンボでしかもSSですか^^;
うぬ〜、制作者でありながら勝てませぬw

それから、ver3.E0リリースしました。
今度は動画の途中再生機能付けたので、
前奏が長い曲をカットしたり、素材に合わない曲を合うようにすることが出来るようになりました。
これで使用できる動画が増えました。

後、メニューでもさびが聞けるようになりました。

そして、今回かなり沢山J-POP追加しました^^
朝8時からず〜っと作り続けてさっき出来たので、今回のverUPは結構時間かかってます^^;


205ポイント を手に入れた。

Name: Tatu  ..上級者(20,082ポイント)   Date: 2009/12/13(日) 21:43   No:43992     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
「Bad Apple!!」のフルコンボを達成しました。
Kalasさん(ニコニコ動画でフルコンボ動画を上げている方)は
すでに達成していました。

>>「星の器」
タイミングさえ分かれば
「Bad Apple!!」や「東方虚偽樂」より
簡単な曲でした。


90ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,107,401ポイント)   Date: 2009/12/13(日) 23:23   No:43997     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
拝見しました〜!
実は私はまだ取れてません^^;
長いとフルコンボは難しくなりますよね;

所で、ver3.E0は何件か不具合が報告されているのですが・・。
プレイ中突然フリーズするようなことありますか?


80ポイント を手に入れた。

Name: Tatu  ..上級者(20,160ポイント)   Date: 2009/12/14(月) 01:03   No:44003     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
>曲選択でフリーズ
バグがあるということを聞いて試してみました。
それまでは停止することはありませんでした。
たぶん、プレイしたい曲がくるまでキーを押しっぱなしにしていたため、
その間は動画関連の処理が行われず、発生しにくかったのだと思います。
「However」
「First Love」
「ロマンス」(二回なりました)
「Tag」
「東方虚偽樂」
を選んでいるときに下キーを押した瞬間、停止しました。
下にあった曲はそれぞれ、
「Heaven's Drive」
「FF10 ラスボス戦闘曲」
「Wing Girls」
「Enjoy Aerobeat!!」
「桜 -RevenG-」
でした。
Aerobeat掲示板のメルキスさんの投稿をみるとリストが下にずれてから
停止しているように見えますが、私の場合は、全てリストが動く前に停止しました。


78ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,107,716ポイント)   Date: 2009/12/14(月) 08:01   No:44008     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
詳しい情報提供ありがとうございます。

そんなにですか;

何故私の環境では一度も起きない・・。
私の環境で起きて皆さんの環境で起きない原因の一つとしては、
もしかして「曲の情報.txt」のバージョンが違うとかでしょうか?
このフォーマットは少し変わっており、
全ての曲において更新しました。
古いフォーマットでもエラーは起きないようにはなっているはずですが、
もしかしたらそれ関連かも・・。

ちなみに、エラーが起きるのは、押したその瞬間です?
私が予想していたのは、
下キーを押して、項目が次の曲に移るモーションが0.2秒位あって、
項目が完全に次に移ってから、動画が表示されるまでの間なのですが、
そうではなく、下に項目が移るモーションのある前ですか?

となると原因が違いそうですね・・。
動画の読み込みは項目が完全に移ってからなので;

また、バージョンアップはパッチでされました?


315ポイント を手に入れた。

Name: Tatu  ..上級者(20,250ポイント)   Date: 2009/12/15(火) 15:55   No:44101     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
「たいせつなもの」フルコンボと
「夏祭り」(easy)の満点を達成しました。

バージョンアップはパッチでしました。

フリーズが起きるのは、押したその瞬間で、
動画がまだ表示されている状態です。


90ポイント を手に入れた。

Name: やっぽん [URL]  ..ぴよぴよ(172ポイント)   Date: 2009/12/16(水) 00:11   No:44189     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
Heaven's Drive  Hardのフルコン先を越された…っっっ くやしいのうくやしいのう or2
Tatu様の歪み無い動きにはまるで及びませぬがリプレイデータをうpります

しかし、3E0の再生開始位置設定とHeaven's Driveは本当にその、何だ…。
ごちそうさまでしたァアッッッ!!

こちらではバグ出ていません(別件として、音量関連で気になる現象があるので報告します)
基本的にXPHomeでやってます。7でも起こるのか見てみますね


113ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,112,025ポイント)   Date: 2009/12/16(水) 07:36   No:44205     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
ちょっと色んな環境で動作させてみましたが、
オートプレイで見ると若干タイミングが狂ってくる現象がありますね・・。
う〜ん、直さなくては・・。

>>Tatuさん

おぉ〜、フルコンボもすごいですが、満点とか更に上を行かれますね^^;
フリーズの現象何度も試しましたけど、こちらの環境では起きず、どう直していいか解らずにいます(T_T

>>やっぽんさん

やっぽんさんリクエストの曲やっと実装出来ましたw
何故今まで出来なかったかというと、途中再生機能が実装出来ないとこの曲実装出来なかったからなんですよね^^;
音量は対数で管理されているものを一次関数で制御しているので、おかしいのです^^;
修正しますね!

後、やっぽんさんの環境ではバグは起きないようで、やはり、環境によるのですね;


134ポイント を手に入れた。

Name: Tatu  ..上級者(20,490ポイント)   Date: 2009/12/17(木) 09:07   No:44364     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
「嫉妬」「Vanilla」「夏恋」のフルコンボを達成しました。

前に自分で譜面を作った「ぽっぴっぽー」のSランクのリプレイもつけています。

doubleのフルコンボも投稿しようかと思いましたが、
リプレイを見たところ、片方の色にしか反応せず、すぐに終了してしまいました。


2倍のポイントを手に入れた! 240ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,115,319ポイント)   Date: 2009/12/18(金) 00:17   No:44449     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
>> Tatuさん

ご投稿ありがとうございます^^
段々自分のリプレイじゃなく、tatuさんのリプレイで埋まってきましたw
自分のリプレイがtatuさんのよりへちょいので、保存せずに終了しています・・w

doubleの件、そういえば実装していなかったかも知れません。確認してみます。
(なんかdoubleはあまり人気がないので、もういいや的な気持ちであったりもします^^;


164ポイント を手に入れた。

Name: Tatu  ..上級者(20,558ポイント)   Date: 2009/12/19(土) 01:13   No:44508     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
「Love Shine」「桜」「ナイト・オブ・ナイツ」のフルコンボを達成しました。

今度のリリースでどんなスペックのパソコンでも曲と処理のずれが±9ms以内になるそうですね。


68ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,116,934ポイント)   Date: 2009/12/20(日) 19:57   No:44543     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
う・・、それが原因不明のバグに現在悩まされております;

どうもライブラリのバグのようで、どうも同期出来ないからと
ここ一週間悩み続けた結果、
ライブライの関数で取得する数値が正しくない事が解りました。

こればっかりはライブラリが修正され次第ということになってしまいます;

下準備は全部出来ているので、修正され次第更新します。
なので次回更新は曲同期関数はそのままです;

ちなみに、訂正。
「ある程度のスペックがあれば」0.001秒〜-0.008秒に収まります^^;
何故振れ幅がプラス方向だけ少ないかなどの話はまた。


>> フルコンボ

おぉ、ナイトオブナイツまで?!
Kalasさんに引き続き、Tatuさんも成し遂げてしまったのですね^^;
そのうち鬼譜面以外コンプリートされてしまうのではないでしょうかw
私は桜がなかなかうまく取れません;

(ちなみに、次回修正でMAX300の譜面が少し変わりますので宣伝。)


209ポイント を手に入れた。

Name: Tatu  ..上級者(20,586ポイント)   Date: 2009/12/21(月) 23:43   No:44612     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
「おもいではおっくせんまん」のフルコンボと
ver3.E0までの「MAX300」のCランクのリプレイです。

リザルト画面から曲選択に戻り、そのままXキーでタイトルに戻ると、
動画の音楽が消えないままになることがたまにあります。


28ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,118,521ポイント)   Date: 2009/12/22(火) 00:02   No:44614     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
おぉ!素晴らしい!
思い出はおくせんまんはSが出せず、MAX300はDしか出せません^^;

バグ報告ありがとうございます!確認します。

なかなか曲同期モジュールが正常どうさしないので、次バージョンが上げられずにいます;
MAX300はあまりにも鬼過ぎるので次のバージョンで19に変更します。
新譜面になると、リプレイは正常動作しませんが、旧譜面もフォルダに残るようになっています。

もし新譜面よろしければどうぞ


167ポイント を落としてしまった。

Name: Dixq (管理人) [URL]  ..ウィザード(1,118,543ポイント)   Date: 2009/12/22(火) 00:03   No:44615     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
何故csvファイルをアップすると自然にxlsファイルになる;

22ポイント を手に入れた。

Name: Tatu  ..上級者(21,064ポイント)   Date: 2009/12/23(水) 15:07   No:44766     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
「炉心融解」のフルコンボ、
「死体旅行」、「FF10 ラスボス戦闘曲」(easy)の満点のリプレイです。

また、Normal_Easy.csvと名前変更した「MAX300」 新譜面でのBランクを達成しました。

ところで、センサー1の分しか記録されていなかった
doubleのリプレイはどうなりましたか?


32ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,123,974ポイント)   Date: 2009/12/24(木) 00:06   No:44788     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
おぉ・・!なんかすごい事になっている・・!
MAX300でBとか・・^^;

スコア一覧をもっとみやすくしてみてみたいものですね!
スコア一覧は一覧といえるほど表示出来ないのでもちっと仕様改善の余地が・・。


で、verUPの件ですが、う〜、年末忙しくてなかなか・・;
次はもし出来ても28日以降になりそうです、ごめんなさい><


122ポイント を落としてしまった。

Name: Tatu  ..上級者(21,631ポイント)   Date: 2009/12/27(日) 10:15   No:44932     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
「FloatingPoint」
「ネイティブフェイス」
「裏桜華-桜樺-」
のnormal easyの満点リプレイです。


43ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,126,437ポイント)   Date: 2009/12/28(月) 13:00   No:45012     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
>> Tatuさん

おぉ、満点とは^^;
段々うちのReplayフォルダはtatuさんのリプレイコレクションになりつつありますw

昨日北海道→広島の実家に帰ってきたところなので、また、次ver作り頑張ります。


2倍のポイントを手に入れた! 102ポイント を手に入れた。

Name: ひよこ  ..比類無きプログラマー(77,372ポイント)   Date: 2009/12/28(月) 19:37   No:45046     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
処理落ちした場合、今回、電気笛の動画が全部再生されませんでした。

Dixqさんみたいに、いいパソコンでは起きないと思います。(すいません。

おそらく、プログラムは、
終了させる時間(何分か)を1秒間60フレームで計算し、それが過ぎたら
終わるみたいな感じでしょうけど、
今の再生位置を見ながら、制御すればこのようなことは起きないと思います。(しかし音が・・・
こういうアドバイス失礼ですよね、すいません。


131ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,127,692ポイント)   Date: 2009/12/28(月) 20:22   No:45048     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
処理落ちして音楽と同期していなかったということでしょうか?

終了させる時間をフレームから計算せずに音楽の再生位置を確認して調べると処理落ちした場合、動画が全部再生されないと言うことがないと言うことですが、
処理落ちをすると、音楽が先に進むのでむしろゲームより早く音楽が先に終了すると思います。

ですので、処理落ち以外の問題かと思います。

また、もちろん現在の再生位置は確認しています。
ただし、DXライブラリの仕様として音がずれてしまうことは致し方ない事のようなので、
新しいアルゴリズムで音楽同期するよう改良したバージョンを今作っています。

音楽同期がこんなに難しいとは思いませんでした。
どんな環境でも誤差0.005秒以内にするのは案外難しいことのようです・・。
次回リリースで修正出来ればいいんですが・・。


350ポイント を手に入れた。

Name: ひよこ  ..比類無きプログラマー(77,419ポイント)   Date: 2009/12/29(火) 09:03   No:45070     
Title: Re:■Aerobeatを大幅バージョンアップさせて再リリースしました!■    
早く音楽が終了されてしまったのです。
0.005秒すごい数値ですね。こだわりがよくわかります。
がんばってください。


47ポイント を手に入れた。



Name:  ..ぴよぴよ(209ポイント)   Date: 2009/12/29(火) 00:08   No:45056       
Title: GetHitKeyStateAllに構造体の配列を渡す。    
GetHitKeyStateAllに構造体で作った配列を渡したいのですが上手くいきません。

// キー用
typedef struct{
    char Key;
    char pulKey;
    char trgKey;
}KEY;

KEY Key[256];

GetHitKeyStateAll(&Key.Key);


上記だとエラーが出ます。
下記だとエラーは出ないのですがうまくいってないみたいです。

構造体を渡すことはできないのでしょうか。
GetHitKeyStateAll(Key[0].Key);


209ポイント を手に入れた。


Name: circle  ..ぴよぴよ(109ポイント)   Date: 2009/12/29(火) 01:03   No:45060     
Title: Re:GetHitKeyStateAllに構造体の配列を渡す。    
GetHitKeyStateAll関数の引数には、char型のポインタしか渡せません。

もしその構造体の配列を渡すなら、自作でKEY構造体の配列を受け取れるGetHitKeyStateAll関数を、
つくるしかないでしょう。

ここの管理人Dixq様の作った GetHitKeyStateAll_2関数 を参考にされてはいかがでしょうか?

「キーがどれ位押されたか」を判定する関数
    ↓
http://dixq.net/g/41.html


109ポイント を手に入れた。

Name:  ..ぴよぴよ(689ポイント)   Date: 2009/12/29(火) 01:42   No:45061     
Title: Re:GetHitKeyStateAllに構造体の配列を渡す。    
ご回答ありがとう御座います。
そうなんですか・・・。
上記の関数でも作りましたが自分用に変換しております。

キーが押された瞬間だけをとるtrgに値を入れたいのですが
下記がソースではずっと1が入ってしまいます。
なぜなのでしょうか・・・。


typedef struct{
         bool Flg;
    char Key;
    char pulKey;
    char trgKey;
}KEY;

Key Key[256];
char key[256];

//  キーの情報の取得
void SetKey(void){
    
    static char key[256];
    
    //  キー入力の取得
    GetHitKeyStateAll(key);
    
    for(int i=0; i<256; i++){
        
        Key[i].Key = key[i];
    
        if(Key[i].Key){
            if(Key[i].Flg == false) Key[i].trgKey = !Key[i].trgKey;
            Key[i].Flg = true;
        }else{
            Key[i].trgKey = 0;
            Key[i].Flg = false;
        }
    }

}





2倍のポイントを手に入れた! 480ポイント を手に入れた。

Name: circle  ..ぴよぴよ(265ポイント)   Date: 2009/12/29(火) 02:41   No:45064     
Title: Re:GetHitKeyStateAllに構造体の配列を渡す。    
とりあえず
押したフレームだけ反応する様にいじってみた。

void SetKey(void){
    
    static char key[256];
    
    //  キー入力の取得
    GetHitKeyStateAll(key);
    
    for(int i=0; i<256; i++){
        
        Key[i].Key = key[i];
    
        if(Key[i].Key){
            if(Key[i].Flg == false){
                Key[i].trgKey = true;
                Key[i].Flg = true;
            } else {
                Key[i].trgKey = false;
            }
            
        }else{
            Key[i].trgKey = 0;
            Key[i].Flg = false;
        }
    }

}


なんかスマートじゃないけど・・・


156ポイント を手に入れた。

Name:  ..ぴよぴよ(659ポイント)   Date: 2009/12/29(火) 03:07   No:45066 解決!     
Title: Re:GetHitKeyStateAllに構造体の配列を渡す。    
できました。
深夜でしたのに回答ありがとうございます。
本当に助かりました。


30ポイント を落としてしまった。



Name: no  ..ぴよぴよ(63ポイント)   Date: 2009/12/28(月) 14:06   No:45021       
Title: 画像表示について    
#include "DxLib.h"

int im;
char KeyBuf[256];

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
                
    if( /*ChangeWindowMode(TRUE) !=*/ DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; 
 
    im=LoadGraph("img/a.png");
 
    SetDrawScreen( DX_SCREEN_BACK ) ; 
 
    while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( KeyBuf ) && !KeyBuf[KEY_INPUT_ESCAPE]){

                DrawGraph(0,0,im,TRUE);

        ScreenFlip();
    }
 
    DxLib_End();
    return 0;
}


上記のプログラムでa.pngを表示させようとしているのですが、フルスクリーン状態ではうまく表示されません。
ウィンドウモードなら期待通りの結果になるのですが、どういったことが原因として考えられますか?
期待通りとは、(0,0)にa.pngを表示させるという意味です。
管理人様の龍神録50章のソースコードはウィンドウ、フルスクリーンともにきちんと表示されます。

OSはウィンドウズXP、コンパイラはVC++2008です。


63ポイント を手に入れた。


Name: ひよこ  ..比類無きプログラマー(77,241ポイント)   Date: 2009/12/28(月) 15:17   No:45026     
Title: Re:画像表示について    
よくわかりませんが、 /*ChangeWindowMode(TRUE) !=*/ DX_CHANGESCREEN_OKの
DX_CHANGESCREEN_OKだけがあるのが原因かもしれません


56ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,127,342ポイント)   Date: 2009/12/28(月) 20:16   No:45047     
Title: Re:画像表示について    
DX_CHANGESCREEN_OKが何と定義されているのか知りませんが、
DX_CHANGESCREEN_OKが0ならDx_Initは通り、DX_CHANGESCREEN_OKが0以外ならDx_Initは通りません。

if文の中にわかりにくい注釈を入れるのは良くないと思うので、
関数を呼ぶごとにif文を書いて分けた方がいいと思います。
ちゃんと初期化関数が呼ばれているか確認してみてください。


102ポイント を手に入れた。

Name: no  ..ぴよぴよ(83ポイント)   Date: 2009/12/28(月) 23:10   No:45054 解決!     
Title: Re:画像表示について    
if( /*ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || */ DxLib_Init() == -1 ) return -1;

上記の用にしたところ問題なく動作しました。ありがとうございました。

 


20ポイント を手に入れた。



Name: わかりません  ..ぴよぴよ(45ポイント)   Date: 2009/12/28(月) 16:00   No:45027       
Title: C初心者    
X=(double)rand()/RAND_MAX; というのは、0〜1の間で乱数を発生させますよね。
これを、−1以上1以下の乱数で与えたい場合はどうようにしたら良いのでしょうか?


45ポイント を手に入れた。


Name: sizuma [URL]  ..上級者(21,766ポイント)   Date: 2009/12/28(月) 16:27   No:45028     
Title: Re:C初心者    
0〜2までの範囲で乱数を発生させて、それから1引けばいいのではないでしょうか?

25ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,128,027ポイント)   Date: 2009/12/28(月) 20:36   No:45050     
Title: Re:C初心者    
題名が「C初心者」、お名前が「わかりません」というのはちょっとわかりにくいのではないでしょうか・・。
トピック名は後から人が見てもわかりやすい名前に、
お名前は今後お使いになる中でふさわしい名前にしてください。

ところで、質問の内容を実現する方法は沢山あるでしょうけど、
分母(RAND_MAX)を小さくするか、生成した0〜1の数に増やしたい数をかければいいのではないでしょうか。
0〜2の数にしたいなら、分母を1/2にすればいいわけで、
生成した0〜1を0〜2にするには2をかければいいわけです。

後はsizumaさんの仰るとおりです。


152ポイント を手に入れた。



Name: 858  ..ぴよぴよ(102ポイント)   Date: 2009/12/28(月) 17:01   No:45031       
Title: 質問です    
@Dxライブラリで音楽を鳴らしてるんですか、音量ってどうやって調整するのでしょうか?
Aint aでプログラムを書いたとします。この変数aをすべて構造体bの中の変数にしたいです。
例えばdefineとか使ってするような簡単な方法ってありますか?

よろしくお願いします。


102ポイント を手に入れた。


Name: sizuma [URL]  ..上級者(22,379ポイント)   Date: 2009/12/28(月) 17:27   No:45032     
Title: Re:質問です    
@
DXライブラリ使ったことないですけど、ChangeVolumeSoundMemを使えば出来そうですね。
http://homepage2.nifty.com/natupaji/DxLib/dxfunc.html
リファレンスを見れば分かると。

A
出来ないと思います。
状況があんまりわからないです。
int aを消して、全部構造体のaとして書き換えればいいのでは?
VC#とかeclipseだとリファクタリングで名前変更できるんですが、VC++だとできないのかな?
VC++2005Expressだとないみたいですが。
仮に、aじゃなかったらマクロで置き換えられるでしょうけど、わざわざそんな分かりにくいことする必要はないと思います。


206ポイント を手に入れた。

Name: 858  ..ぴよぴよ(288ポイント)   Date: 2009/12/28(月) 17:47   No:45034     
Title: Re:質問です    
ありがとうございます。やはり無理ですよね
int aをしたのようにしたいということです。
    struct {
       int a;
    } b;

結構長いプログラムなのでいちいち直すのも面倒だから聞きました。

あのついでないんですが、ここのサイトで

#ifdef GLOBAL_INSTANCE

#define GLOBAL

#else

#define GLOBAL extern 

#endif

GLOBAL int img;

ってあります。このGLOBLってなにを定義してるんですか? よくわからないんですか・・・


186ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(78,535ポイント)   Date: 2009/12/28(月) 17:53   No:45035     
Title: Re:質問です    
>結構長いプログラムなのでいちいち直すのも面倒だから聞きました。 

そこは、バグを考えると手を抜かない方が身のためです。
エディタなら一発置き換えできると思いますから。

>GLOBAL

GLOBAL_INSTANCEでグローバル変数の実態の有無を制御しています。
#define GLOBAL extern ならグローバル変数の参照です。
#define GLOBAL ならグローバル変数の実体定義です。


158ポイント を手に入れた。

Name: 858  ..ぴよぴよ(824ポイント)   Date: 2009/12/28(月) 18:18   No:45037     
Title: Re:質問です    
理解力がなくてすいません。

「GLOBAL_INSTANCEが定義されていればGLOBALという文字は空白に置き換えられる」
「GLOBAL_INSTANCEが定義されていなければGLOBALという文字はexternに置き換えられる」
と書いてあります仮に
define GLOBAL_INSTANCEと定義されていないとGLOBALは空白になるんですよね。

私はやったことがないんですが
例えば
普通 define a 10;

int b=a;
とかしますよね

これを
define a //aの後は空白
とかくと
 
a a a int b;
と書いてもaは空白と定義されるので実行できるのですか?
根本的にわからないのはここです。最後によろしくお願いします。


2倍のポイントを手に入れた! 536ポイント を手に入れた。

Name: sizuma [URL]  ..上級者(22,411ポイント)   Date: 2009/12/28(月) 18:20   No:45038     
Title: Re:質問です    
softyaさんの書いてるとおりだと。
http://dixq.net/rp/5.html
ここですよね?
今見てきました。

ところで、この部分がどう分岐してるかは分かりますか?
#ifdef GLOBAL_INSTANCE

#define GLOBAL

#else

#define GLOBAL extern

#endif 


普通の文風にで書くと
if(GLOBAL_INSTANCEが定義されてるか){
  GLOBALは空白に代える;
}else{
  GLOBALはexternに代える
}
ですね。

ちゃんと読んでないんで、よくわからないですが、ところどころexternを使わない管理をしよう、ってことだと思います。
とりあえずグローバル変数は全部GLOBALって書いといてGLOBAL_INSTANCEがdefineされてたらGLOBALって修飾は消す(空白に置き換える)。他で定義されてるのであれば、GLOBALをexternに置き換える。
ってことでしょうかね。
間違えてたらごめんなさい^^;


32ポイント を手に入れた。

Name: sizuma [URL]  ..上級者(22,499ポイント)   Date: 2009/12/28(月) 18:23   No:45039     
Title: Re:質問です    
a a a int b;
自分で実行してみれば分かると思いますよ。
意地悪とかじゃなくて、そうした方がためになります。

#difine a = 1;

int hoge = a+a+a+a+a+a+a+a;
char piyo = 'a';

で表示してみてください。 


88ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(78,399ポイント)   Date: 2009/12/28(月) 18:27   No:45040     
Title: Re:質問です    
>define a //aの後は空白 
>a a a int b;
>と書いてもaは空白と定義されるので実行できるのですか?

#define a //aの後は空白 
と書かれていればaは削除なので、int b;とみなされて正常にコンパイル出きますね。

#defineなどの処理はC言語で本格的にコンパイルに入る前に行われる前処理です。
これをプリプロセスと言います。
#defineのやることは単純に単語の置き換えですので、#define aなどと言った書き方も許されます。


136ポイント を落としてしまった。

Name: 858  ..ぴよぴよ(162ポイント)   Date: 2009/12/28(月) 18:31   No:45041     
Title: Re:質問です    
ありがとうございます。今コンパイル環境にいないので後で試して見ます。

#ifdef GLOBAL_INSTANCE 

#define GLOBAL 

#else 

#define GLOBAL extern 

#endif 

つまり、分岐なのはわかりますが。上の部分はdefine GLOBAL_INSTANCEって記述があるにせよ、
ないにせよ、GLOBALの記述がある場合、ヘッダーかメイン関数の前に書かなきゃいけないんですよね?
そう理解してあってます?。この質問で終わりにします。


162ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(78,554ポイント)   Date: 2009/12/28(月) 18:40   No:45042     
Title: Re:質問です    
GLOBALが参照される前に
#ifdef GLOBAL_INSTANCE
#define GLOBAL
#else
#define GLOBAL extern
#endif 
が書かれていないとまずいです。
なので、一番先頭に書くか、一番先頭にインクルードされるヘッダファイルに書くのが安全策です。
メイン関数の中にGLOBALを記述することはまず無いはずですので、メイン関数の直前は意味が無いと思いますよ。


155ポイント を手に入れた。

Name: 858  ..ぴよぴよ(856ポイント)   Date: 2009/12/28(月) 18:43   No:45043 解決!     
Title: Re:質問です    
ありがとうございます。
疑問は解決しました。また、勉強してきます。


32ポイント を手に入れた。



Name: tika  ..ぴよぴよ(160ポイント)   Date: 2009/12/22(火) 11:40   No:44635       
Title: 初投稿です。    

初めまして、色々検索して見つけました。
もう何をやっても自分で解決できないので、相談しにきました><

キーボードから入力した数値を、カンマ編集(3桁ごとにカンマで区切って表示)するプログラムを作成。
ただし、以下の条件を満たすものとする。
@中心となるロジックは関数として作成すること。
  main関数でキーボード入力を受け取り、その値を関数に渡す。
A2種類(以上)のロジックを作成すること。
  キーボード入力は1回のみでOK。
[実行例]
<カンマ編集>数値を入力してください:12345[Enter]
12,345
12,345

というものです。
よろしくおねがいします><!


160ポイント を手に入れた。


Name: もぐりん  ..ぴよぴよ(710ポイント)   Date: 2009/12/22(火) 11:48   No:44636     
Title: Re:初投稿です。    
規約は読んでいますか?
開発環境が書かれていませんし、自分で作ったソースは添付してないしでは、
丸投げの質問ですよね?


56ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(71,821ポイント)   Date: 2009/12/22(火) 11:59   No:44637     
Title: Re:初投稿です。    
質問に答えるために幾つかお願いがあります。スムーズに回答するために必要な事柄ですのでぜひお願いします。
 ・ 使用している環境やコンパイラ(VisualC++2008ExpressEdition等)、自分が習っている言語の規格(CにもC89やC99など幾つか規格があります)を教えて下さい。
 ・ 自分はどこまで理解しているのか、学校ではどこまで習ったのか明確にして下さい。特に使って良い関数の制限などが分かると答えやすいです。無制限なら無制限と書いて下さいね。
 ・ 自分で書いたソースプログラムがあるなら提示をお願いします。
 ・ ソースが有る場合は、自分が書いたソースプログラムはどこからどこまでなのか教えて下さい。
 ・ ソースコードは< pre>と< /pre>のタグで囲んで下さい。※preを使うときは空白は削除してお使い下さい。ここでは表示の都合で空白を入れています。
 詳しくはこの掲示板の使い方をご覧ください→ http://dixq.net/board/board.html


331ポイント を手に入れた。

Name: tika  ..ぴよぴよ(416ポイント)   Date: 2009/12/22(火) 12:16   No:44639     
Title: Re:初投稿です。    
丸投げな書き方をしてすいません、何も読まずに投稿したことを謝ります。

今ちゃんと読んできました。
C言語については9月ごろから授業で始めました。
けど、先生の説明も教科書読んでいても理解は何も出来ずなんとなくでやっている感じで課題を出されても何も出来ずって感じな状態です。
なので、softyaさんが言っていることもよく分かっていません;
なんとなくで分かっていることは、−1も答えに出すと先ほど先生が言っていました。
簡単な方法でitoa関数を使用して文字列に変換するとも言われました。
また、ソース・プログラムはまだ作成してません。


256ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(72,020ポイント)   Date: 2009/12/22(火) 12:24   No:44640     
Title: Re:初投稿です。    
じゃあまず、コンパイル環境を自宅で用意しましょう。
学校の環境に合わせた方が良いで、どうやってコンパイルしているか具体例を書いてみて下さい。
学校で使っているOSも分かるなら書いて下さい。


61ポイント を手に入れた。

Name: Dixq (管理人)  ..ウィザード(1,119,109ポイント)   Date: 2009/12/22(火) 12:32   No:44642     
Title: Re:初投稿です。    
tikaさん

こんにちは^^
昼は携帯からしか書き込めないので簡潔に書きます;

まずsoftyaさんがおっしゃってるコンパイラってわかりませんか?VC++だとか。
今OS何使ってますか?授業ならリナックスとか?

また、作れることから書いてみましょう。
答えを教わるにしても突然長いコードを見てもわかりにくいと思います。

後、キーボードから入力するのは数値なんですか?文字列なんですか?

まずは、こんなとこからやってみましょう

1、キーボードから入力した数値を表示するだけ

2、その数値を100で割った数と100で割ったあまりにわけて表示

これくらいなら出来ますか?
2番は何型で受け取るかで処理がかわりそうです。
2種類以上で作れと書いてあるので、数値、文字列、両方期待されてるのかもしれませんね。
(数値の場合上限がありますが。


2倍のポイントを手に入れた! 458ポイント を手に入れた。

Name: tika  ..ぴよぴよ(516ポイント)   Date: 2009/12/22(火) 12:38   No:44644     
Title: Re:初投稿です。    
親切に本当にありがとうございます。

→softさん
コンパイルというものが分かりません;
初心者でももっと分かっていないほうに分類をされているので‥。
OSはVistaです。

→管理人さん
携帯からわざわざすいません、ありがとうございます。
キーボードから入力するのは数値となっています。
んっと・・分からないです;

本当にすいません><


100ポイント を手に入れた。

Name: Dixq (管理人)  ..ウィザード(1,119,154ポイント)   Date: 2009/12/22(火) 12:41   No:44645     
Title: Re:初投稿です。    
1番わからないですか?
じゃ画面に「helloworld」と表示させるプログラムならかけますか?


45ポイント を手に入れた。

Name: Dixq (管理人)  ..ウィザード(1,119,208ポイント)   Date: 2009/12/22(火) 12:44   No:44646     
Title: Re:初投稿です。    
どうやってコンパイルしてるんだろうf^_^;

コンパイルっていうのは機械語に翻訳することで‥

って昼休憩オワター‥。
どなたかバトンタッチ(>_<)


54ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(72,122ポイント)   Date: 2009/12/22(火) 12:52   No:44647     
Title: Re:初投稿です。    
>コンパイルというものが分かりません;
>初心者でももっと分かっていないほうに分類をされているので‥。
>OSはVistaです。 

学校もVistaなんでしょうか?
じゃあ、質問を変えて学校ではプログラムを打ち込んで動かすときにどうしてますか?


102ポイント を手に入れた。

Name: tika  ..ぴよぴよ(608ポイント)   Date: 2009/12/22(火) 12:58   No:44648     
Title: Re:初投稿です。    
#include<stdio.h>

int main(void)
{
 printf("helloworld"\n");

 return 0;
}

であっているでしょうか・・?

学校でもvistaで使っています。
学校ではメモで作成しています。




92ポイント を手に入れた。

Name: Naohiro19  ..かけだし(2,122ポイント)   Date: 2009/12/22(火) 13:01   No:44649     
Title: Re:初投稿です。    
tikaさん>
コンパイルについては以下のページに詳しく載っています。
http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB


69ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(72,166ポイント)   Date: 2009/12/22(火) 13:17   No:44651     
Title: Re:初投稿です。    
>学校ではメモで作成しています。
メモで作成した後は、何かしませんか?
やっていることを全て書いて下さいね。


44ポイント を手に入れた。

Name: tika  ..ぴよぴよ(637ポイント)   Date: 2009/12/22(火) 13:59   No:44652     
Title: Re:初投稿です。    
メモで作成してそれをファイル保存しています。
そのあとに添付のとこで実行しています。


29ポイント を手に入れた。

Name: tika  ..ぴよぴよ(643ポイント)   Date: 2009/12/22(火) 14:00   No:44653     
Title: Re:初投稿です。    

添付できませんでした;

%SystemRoot%\system32\cmd.exe


6ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(72,199ポイント)   Date: 2009/12/22(火) 14:05   No:44654     
Title: Re:初投稿です。    
>そのあとに添付のとこで実行しています。
>%SystemRoot%\system32\cmd.exe
これは、コマンドプロンプト(黒い画面のウィンドウ)を起動するやつですね。
この後の実行の手順も教えてください。
実行の結果が出てくる処まで、残さず全部を願いします。




33ポイント を手に入れた。

Name: tika  ..ぴよぴよ(678ポイント)   Date: 2009/12/22(火) 14:25   No:44656     
Title: Re:初投稿です。    

はい、黒いところです。
そこで
bcc32 ファイル名
ファイル名
とやると結果が出てくるようになっています。


35ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(72,236ポイント)   Date: 2009/12/22(火) 14:48   No:44658     
Title: Re:初投稿です。    
>bcc32 ファイル名 
やっと分かりました。これがコンパイラですね。
bcc32は、「Borland C++ Compiler」と言います。

じゃあ、下記の手順まずコンパイラを自宅に導入して下さい。
http://natural-high.at.webry.info/200811/article_6.html
インストールに成功したら、まずhello worldが動くこと確認して下さいね。
ここまでで、何か分からなかったら聞いてください。


37ポイント を手に入れた。

Name: むん  ..かけだし(1,115ポイント)   Date: 2009/12/22(火) 21:05   No:44681     
Title: Re:初投稿です。    
tikaさん微妙に間違ってますが、おそらくタイプミスでしょう。
#include<stdio.h> 

int main(void) 
{ 
    printf("helloworld"\n"); 

    return 0; 
} 


↑printf("");と書くので " が一つ多いですね。

tikaさんは文字列に文字を加えるということはできますか?
文字列の配列の中身がどうなっているのかわかりますか?


113ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,120,546ポイント)   Date: 2009/12/22(火) 22:46   No:44688     
Title: Re:初投稿です。    
ふ〜やっと帰ってきました。年末は忙しいですねぇ。

>もう何をやっても自分で解決できないので、相談しにきました><

と書いてありますが、(厳しい事を言いますが)
hello worldがちゃんと書けないレベルは
「もう自分が出来る事は全てやった!」というレベルではないです。
hello worldはプログラムの参考書の1ページ目に書いてあるようなことなので、
しっかし参考書を読み返し、復習しましょう。

「参考書は持ってない。授業中先生が言ってるのを聞くだけだ」ということであれば、
ネットで勉強するのもありです。
・・というか、最近はほとんどネットで勉強出来ます。
むしろネットの方が欲しい情報を早く見つけやすいので、本を手に取らなくなるほどです。

http://www5c.biglobe.ne.jp/~ecb/c/c00.html

この辺を読めばいくらでも勉強出来ると思います。
私たちが答えを教えるのは簡単ですが、それでは自分の力になりませんし、
この段階で答えを聞いていると次のステップの問題は全く解けなくなってしまうと思います。
ですので、なんとか自力でやってみましょう。
まずは私が最初に言った
「キーボードで入力した数値をそのまま描画する」
ここまではやってみませんか?
上のサイトにも書いてありますし、ググればいくらでも答えは見つかります。


488ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,121,287ポイント)   Date: 2009/12/23(水) 00:47   No:44695     
Title: Re:初投稿です。    
コンパイラをお持ちではない場合まず、自分のPCにコンパイラを入れましょう。
・・といっても解り難いでしょうから、説明を書いたページを用意しました。
よければご覧ください。

http://dixq.net/vcpp.html

こちらのコンパイラは学校で使っているものとは違うと思いますが、
こちらの方がずっと便利なんですよね。

もしtikaさんが、
「単位が取れたらそれでいい。プログラムには興味無い」
という場合なら学校で使っているコンパイラでいいかもしれません。
せっかく導入してももう使う事が無いのなら無駄ですし・・。
しかし、もしプログラムに興味があり、勉強したいのなら是非VisualC++をお勧めします。

tikaさんの気持ちとしてはどちらなのでしょう?


94ポイント を手に入れた。

Name: Ma  ..プログラマー(25,531ポイント)   Date: 2009/12/23(水) 06:56   No:44706     
Title: Re:初投稿です。    
とりあえず、ひとつだけ提供します。
ただし、std::string 使っています。


#include <string>
using namespace std;

void logic1(char* in){
    string text = in;//std::string に変換
    for(int i = text.size()-3;i > 0; i -= 3){
        text.insert(i,",");//挿入
    }
    printf("%s",text.c_str());//表示
}

int main(void)
{
    char input[256] = "";
    scanf("%s",input);//入力
    logic1(input);//関数に渡す
    //logic2(input);
    return 0;
}




答え丸投げではためにならない、とか思われるかもしれませんが、
なんだか質問していたのに環境導入の話に変わってしまって、解答得るまで苦戦しそうな気がするので
まずひとつだけでも解法をのせました。

(家で環境を整えればテストもできますので、当然私もVC++等のコンパイラの導入をおすすめします。)

ここから、考え方だけでも習得していただけると幸いです。
二つ目は、これを参考にがんばってください。



名前全角にしてミスったので編集しました。
うおー新機能すごいです、Dixqさん! ⇒ 編集済み


366ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,122,791ポイント)   Date: 2009/12/23(水) 13:00   No:44752     
Title: Re:初投稿です。    
編集したかどうかが解るようにしてみました^^
最初は[編]だったのですが、味気ないのでちゃちゃっと画像作りましたw
自作cgiじゃないので、出来る事は少ないですが、、、。


86ポイント を手に入れた。

Name: tika  ..ぴよぴよ(224ポイント)   Date: 2009/12/27(日) 21:10   No:44952     
Title: Re:初投稿です。    

遅くなってすいません。
みなさんにこんな細かく教えてもらって本当に嬉しい限りです、本当にありがとうございます。

まずコンパイラ導入なんですが、順調に進んでましたが途中で電源が落ち出来ず、再挑戦しようとしましたが友達に学校のとごちゃ混ぜになるからやめといたほうがいいよと言われ諦めてしまいました、ごめんなさい。

また文字列に文字を加えることは、なんとなくですが理解出来ていて出来ます。
ですが、中身についてはよく分かっていません;

C言語プログラミングに関しては、専攻科目として修得しなくてはいけなくてただやっている感じです。
周りにも真面目にやっている友達は1人もおらず、男子生徒の1人答えがスラスラ分かる人にみんな頼って答えを見てやっている感じです;
あたしはそういうのが苦手で先生に聞いたり参考書を図書館などで探してやったりとしていましたが、授業でもただ先生が喋り言っていることを黒板に書かれるだけで、先生がパソコン使ってスクリーンで教えるという形もなく、また一人一人教えてくれることもほぼありません。
今回の課題に関しては自力でと言われ質問も聞いてくれませんでした。
前期のころは興味ありましたが、進むペースが早く次第にやる気もなくなってしまい、ただ単位が取れればいいという気持ちだけです;

提供本当にありがとうございます。
少しずつそれを参考し頑張ってみようと思います。

親切に本当にありがとうございます。


454ポイント を落としてしまった。

Name: Dixq (管理人) [URL]  ..ウィザード(1,127,240ポイント)   Date: 2009/12/28(月) 13:19   No:45014     
Title: Re:初投稿です。    
> 前期のころは興味ありましたが、進むペースが早く次第にやる気もなくなってしまい、ただ単位が取れればいいという気持ちだけです;

なるほど。
察するに「わからないから面白くない」ようなので、わかれば面白くなるんじゃないかと思いますが・・。
それに、真っ黒のコンソール画面にbcc32とかよくわからないコマンド入れたりややこしいことしないといけないから、
「勉強するにも億劫だし」という状況が拍車をかけているように思います。

簡単にコンパイルできる環境を用意して、自分が思いついたらすぐ実行できるような環境があれば、
勉強もスムーズに進むのではないかと思います。

・・というか、勉強だと思うから進まないのではないかと思います。

実は学生時代私もtikaさんと同じ気持ちだったんです。
真っ黒のコンソール画面によくわからないコマンド入力して、
面白くもない計算結果が出るだけのC言語なんか何が面白いんだろうと思っていました。
授業も難しいし、やりたいことはスムーズに出来ないし、わからないことだらけで嫌になっていました。
プログラムの授業は必修だったのに、もう嫌になっていたので、単位落としました。

しかし、ある時、C言語でゲームが作れることを知り、
ゲームを作っているうちにC言語がとても面白くなり、C言語を勉強しました。
・・いや、勉強という意識は無かったです。
tikaさんの趣味が何かはわかりませんが、
例えばある料理が作りたかったとすると、そのレシピを本屋やサイトで見て回ったりして情報得ようとしますよね。

私もゲームが作りたかったので、ゲームが作れる為の情報収集しました。
その中にC言語があったというだけで勉強したという気持ちはありませんでした。
やらされているCの勉強と自分から意欲的に学ぶCは全く違うものでした。

最初は「Cって結局何が出来るの?」そういうことが明確になってないから
学ぼうという気持ちも薄れてしまうのではないかと思います。

Cがあれば何でも作れますよ。
今tikaさんがお使いになっているVistaもC(C++)で出来ています。
ワードやエクセルなんかのソフトもCで作れますし、
プレステみたいな3Dゲームだって作れます。
うちのサイトで公開しているようなゲーム

http://dixq.net/sr/

http://aerobeat.huu.cc/

程度なら浅い知識のまま作る事も出来るほど簡単に出来てしまいます。

学校の授業が面白くないなら、少し自分で学んでみませんか?
きっとわかれば面白くなると思いますよ。

せっかくCを学ぼうと思っている人が日本中大勢いるのに、
大学や専門学校のしょうもない授業のせいでその人たちの意欲がそがれているのが残念でなりません・・。


803ポイント を手に入れた。

Name: sizuma [URL]  ..上級者(22,173ポイント)   Date: 2009/12/28(月) 16:38   No:45029     
Title: Re:初投稿です。    
教授の授業はカッスカスが多いですよね。
正直、黒板に書くだけだったら、全部ノートに書いたやつをコピーして配ってくれるだけでいいです。
写すの疲れるだけだし。
まぁ教育者ってわけじゃないし、東大出とかだとわかりやすく授業する気がなかったりするんでしょう。
分からないやつが悪い、みたいな感じですかね。
大学ってそういう所だといえばそうですけど・・・・


>カンマ区切り
printfのフォーマット指定とかマニピュレータ使えば一発で出来るんじゃないかな?って思ったんですけど、ないみたいですねー。
・・・めんどくさ!!


#include <stdio.h>
#include<string.h>
int main(void)
{
    char input[] = "123456789";
    int i;
    int length = strlen(input);
    for(i=0;i<length;i++){
        if((i != 0) && (length-i)%3 == 0)
            printf(",");
        printf("%c",input[i]);
    }
    return 0;
} 

一応動きますけど、合ってるかは分かりません。
Cは独学なので。 編集済み


407ポイント を手に入れた。

Name: non  ..比類無きプログラマー(84,825ポイント)   Date: 2009/12/28(月) 18:11   No:45036     
Title: Re:初投稿です。    
>キーボードから入力した数値を、カンマ編集(3桁ごとにカンマで区切って表示)するプログラムを作成。 
入力する数値が何桁までなのかわからないので、どの型で受ければ良いのか、また
関数への引数は何の型で渡せばよいのかわかりません。
>簡単な方法でitoa関数を使用して文字列に変換するとも言われました。
ということなので、int型なのかもしれませんが。
2種類以上のロジックで作れということですので、一例を添付します。
#include <stdio.h>
void kanma(long n)
{
    static int count=0;
    int c;
    if(n==0)
        return;
    c=count++;
    kanma(n / 10);
    printf("%d",n % 10);
    if(c % 3 == 0 && c>0)
        printf(",");
}
int main(void)
{
    long n;
    printf("数値=");
    scanf("%ld",&n);
    kanma(n);
    return 0;
} 


>なんとなくで分かっていることは、−1も答えに出すと先ほど先生が言っていました。
この意味がよくわからないのですが、負数も出力できることというのでしょうか?
添付のプログラムは負数では使えません。



404ポイント を手に入れた。



Name: ミジンコ  ..ぴよぴよ(164ポイント)   Date: 2009/12/28(月) 11:34   No:45000       
Title: オプションの位置について    
こんにちは、このサイトを利用しながら東方風のゲームを作ってるものです。

今オプションの配置を地霊殿の霊夢・紫装備のようにパワーに応じた数のオプションが自機の周りを回転するのを再現したいのですが、どうもうまくいきません。

int op_num(int n){
    if(n>=100 && n<200){
        return 1;
    }
    if(n>=200 && n<300){
        return 2;
    }
    if(n>=300 && n<400){
        return 3;
    }
    if(n>=400){
        return 4;
    }
    return 0;
}

//オプションのぼんぼん計算
void calc_option_bb(){
  int num=op_num(ch.power);
        if(ch.power>=100){//パワー100以上ならオプションをつける
                for(int i=0;i<num;i++){
                        if(CheckStatePad(configpad.slow)==0){//低速移動中じゃないなら
                            option_bb[i].x=ch.x+cos(PI2/num*i+PI2/80*option_bb[i].cnt)*50;
                            option_bb[i].y=ch.y+sin(PI2/num*i+PI2/80*option_bb[i].cnt)*50;
                        }
                        else{
                            option_bb[i].x=ch.x+cos(PI2/num*i+PI2/80*option_bb[i].cnt)*25;
                            option_bb[i].y=ch.y+sin(PI2/num*i+PI2/80*option_bb[i].cnt)*25;
                        }
                        option_bb[i].cnt++;
                }
        for(int i=0;i<num;i++){
            if(option_bb[i].flag==0)
                option_bb[i].flag = 1;
        }
        }
        else{
        if(option_bb[0].flag==1)
                for(int i=0;i<num;i++){
                    option_bb[i].flag = 0;
        }
        }
}

のようにしてop_num()で出てきた値を使ってPI2を分割してみましたが、毎回位置がずれてしまいます;

開発環境は
Windows xp
VC++ 2008
です


164ポイント を手に入れた。


Name: チルチル  ..比類無きプログラマー(87,369ポイント)   Date: 2009/12/28(月) 14:43   No:45025     
Title: Re:オプションの位置について    
龍神録のコードが理解できていないので実行して確認はしていませんが

毎回位置がずれるというのはオプションが等間隔に並ばなくて
なおかつ間隔が毎回バラバラに変化すると言う事でしょうか?

だとすると怪しいのは

option_bb[i].x=ch.x+cos(PI2/num*i+PI2/80*option_bb[i].cnt)*50;

これと他3ヵ所ですね

option_bb[i].cntは同じ値にならないと思うので
せめてch.cntにしてみてください

まあ被弾した時にずれるのですが不変なカウンタが見当たらないので・・

あと今回の問題とは関係無いと思いますけど
for(int i=0;i<num;i++){
    if(option_bb[i].flag==0)
        option_bb[i].flag = 1;
}
これってオプションが減った時に対応できなくないですか? それから
if(option_bb[0].flag==1)
        for(int i=0;i<num;i++){
            option_bb[i].flag = 0;
    }
}
このfor文は実行されるんでしょうか?


273ポイント を手に入れた。

Name: ミジンコ  ..ぴよぴよ(587ポイント)   Date: 2009/12/28(月) 17:27   No:45033 解決!     
Title: Re:オプションの位置について    
回答ありがとうございます!
症状はチルチルさんがおっしゃる通りです

>>option_bb[i].cntは同じ値にならないと思うので 
なるほど、それぞれが出現するタイミングがずれると足す角度も等しくならないということですか
・・・・・・ch.cntでちゃんとできました、ありがとうございます!!
四つともで同じカウントを使う必要があったのですね

>>これってオプションが減った時に対応できなくないですか
確かにそうですね
見た目にはちゃんと減っていたので気にしてませんでした;;
これだと例えばオプション数が4から3になった時4つめが1つめにかぶってるんですね
for(int i=num;i<4;i++){
    if(option_bb[i].flag==1)
        option_bb[i].flag = 0;
}

を追加して余分なものを消すようにしてみました

>>このfor文は実行されるんでしょうか?
あ、ホントですね・・・
ch.powerが100未満の時にすべてのフラグを初期化するところなのでこの場合numではなく4で大丈夫そうですね

チルチルさん、おかげで助かりました
自分が気づいてない所もご指摘いただき感謝の極みですm(_ _)m


423ポイント を手に入れた。



Name: 天和  ..中級者(10,962ポイント)   Date: 2009/12/28(月) 09:29   No:44989       
Title: カレントディレクトリ内の検索    
perl言語で書かれた次のスクリプトmygrep.plと同等以上のコマンドをC言語として書きなさい
# grep for perl version
# Usage: mygrep pattern file1 file2 ...
#

if (@ARGV < 1) {
    die "Usage: mygrep pattern [file..]\n";
}

$pattern = shift;
foreach $file (@ARGV) {
    open(FILE, $file);
    $line = 1;
    while (<FILE>) {
    print "$file $line: $_" if /$pattern/o;
    $line++;
    }
    close(FILE);
}
つまり.cファイル内にある例えばprintfと検索かけたらカレントディレクトリ内にあるファイルの中にある printfと書いてある文字列を全部書き出しなさいということです 使用環境はVISUALC++ GCC(基本あとでGCCに書き直します) 使用技術レベルは・・・ファイルの入出力の基本ぐらいです。 また まずはカレントディレクトリ内にある.cファイルを全部ファイル名とファイル内を出力させるところから始めようと思いますので http://www5c.biglobe.ne.jp/~ecb/c/c00.htmlというところで ファイルの検索のやり方が書いてあったので(理解できてませんが)

#include <stdio.h>
#include <io.h>
#include <time.h>

void main( void ){
    struct _finddata_t c_file;
    long   hFile;

    // カレント ディレクトリ内の最初のファイルを探します。
    if( (hFile = _findfirst( "*.*", &c_file )) == -1L )
       printf( "カレント ディレクトリにはファイルは存在しません。\n" );
    else{
        printf( "ファイルのリスト\n\n" );
        printf( "RDO HID SYS ARC  FILE         DATE %25c SIZE\n", ' ' );
        printf( "--- --- --- ---  ----         ---- %25c ----\n", ' ' );
        printf( ( c_file.attrib & _A_RDONLY ) ? " Y  " : " N  " );
        printf( ( c_file.attrib & _A_SYSTEM ) ? " Y  " : " N  " );
        printf( ( c_file.attrib & _A_HIDDEN ) ? " Y  " : " N  " );
        printf( ( c_file.attrib & _A_ARCH )   ? " Y  " : " N  " );
        printf( " %-12s %.24s  %9ld\n", c_file.name, ctime( &( c_file.time_write ) ), c_file.size );

        // 残りのファイルを探します
        while( _findnext( hFile, &c_file ) == 0 ){
            printf( ( c_file.attrib & _A_RDONLY ) ? " Y  " : " N  " );
            printf( ( c_file.attrib & _A_SYSTEM ) ? " Y  " : " N  " );
            printf( ( c_file.attrib & _A_HIDDEN ) ? " Y  " : " N  " );
            printf( ( c_file.attrib & _A_ARCH )   ? " Y  " : " N  " );
            printf( " %-12s %.24s  %9ld\n", c_file.name, ctime( &( c_file.time_write ) ), c_file.size );
        }

       _findclose( hFile );
    }
}

を改造して
#include <stdio.h>
#include <io.h>

void main( void ){
    struct _finddata_t c_file;
    long   hFile;

    // カレント ディレクトリ内の最初のファイルを探します。
    if( (hFile = _findfirst( "*.*", &c_file )) == -1L )
       printf( "カレント ディレクトリにはファイルは存在しません。\n" );
    else{
        printf( "ファイルのリスト\n" );     
        printf( "%-12s\n", c_file.name );

        // 残りのファイルを探します
        while( _findnext( hFile, &c_file ) == 0 ){
          
            printf( "%-12s\n", c_file.name );
        }

       _findclose( hFile );
    }
}
でファイル名だけ出すようにして そこから
#include <stdio.h>
#include <io.h>

void main( void ){
    struct _finddata_t c_file;
    long   hFile;
    char    fname[99];
    int i = 0;
FILE *fp;
    // カレント ディレクトリ内の最初のファイルを探します。
    if( (hFile = _findfirst( "*.c", &c_file )) == -1L )
       printf( "カレント ディレクトリにはファイルは存在しません。\n" );
    else{

        printf( "ファイルのリスト\n" );     
        printf( "%s\n", c_file.name );/*ファイル名を出力しなさい*/
        sprintf(fname[i],"%s",c_file.name);/*ファイル名をfname[i]に文字データとして代入させなさい*/
        fp = fopen(fname, "r");/*ファイルを開きなさい*/
         i++;
        // 残りのファイルを探します
        while( _findnext( hFile, &c_file ) == 0 ){
          
        printf( "%s\n", c_file.name );/*ファイル名を出力しなさい*/
        sprintf(fname[i],"%s",c_file.name);/*ファイル名をfname[i]に文字データとして代入させなさい*/
        fp = fopen(fname, "r");/*ファイルを開きなさい*/
         i++;
        }

       _findclose( hFile );
    }
}

と改造したのですが・・・(やっぱりsprintfが無理がある?)
回答のほうよろしくお願いします。


633ポイント を手に入れた。


Name: たいちう  ..熟練のプログラマー(42,460ポイント)   Date: 2009/12/28(月) 09:58   No:44990     
Title: Re:カレントディレクトリ内の検索    
> 回答のほうよろしくお願いします。

何を答えてほしいのですか?
途中までのソースコードを貼っているみたいですが、
それがどこまでできていて、どこで躓いているかの説明は無し?


> perl言語で書かれた次のスクリプトmygrep.plと
> 同等以上のコマンドをC言語として書きなさい

...

> つまり.cファイル内にある例えばprintfと検索かけたら
> カレントディレクトリ内にあるファイルの中にある
> printfと書いてある文字列を全部書き出しなさいということです

間違いないですか?Perlのプログラムは別のことをやっていますよ?
(Perlの動く環境がないので、もしかしたら間違っているかもしれません)

・検索対象はカレントディレクトリの全ファイルではなく、
  コマンドライン引数で、検索パターンの後に指定されたファイル。
・検索パターンは正規表現で書かれているので、
  例えばパターンが"strn?cpy"とかの場合は、strcpyとstrncpyの
  両方が抽出される。(もっと複雑な検索もできます)


253ポイント を手に入れた。

Name: 天和  ..中級者(11,829ポイント)   Date: 2009/12/28(月) 10:24   No:44991     
Title: Re:カレントディレクトリ内の検索    
>たいちうさん
まず躓いている場所は
#include <stdio.h>
#include <io.h>

void main( void ){
    struct _finddata_t c_file;
    long   hFile;
    char    fname[99];
    int i = 0;
FILE *fp;
    // カレント ディレクトリ内の最初のファイルを探します。
    if( (hFile = _findfirst( "*.c", &c_file )) == -1L )
       printf( "カレント ディレクトリにはファイルは存在しません。\n" );
    else{

        printf( "ファイルのリスト\n" );     
        printf( "%s\n", c_file.name );/*ファイル名を出力しなさい*/
        sprintf(fname[i],"%s",c_file.name);/*ファイル名をfname[i]に文字データとして代入させなさい*/
        fp = fopen(fname, "r");/*ファイルを開きなさい*/
         i++;
        // 残りのファイルを探します
        while( _findnext( hFile, &c_file ) == 0 ){
          
        printf( "%s\n", c_file.name );/*ファイル名を出力しなさい*/
        sprintf(fname[i],"%s",c_file.name);/*ファイル名をfname[i]に文字データとして代入させなさい*/
        fp = fopen(fname, "r");/*ファイルを開きなさい*/
         i++;
        }

       _findclose( hFile );
    }
}
とやると(実際には_findfirst( "*.c", &c_file )はGCC用に書いてあるので
VISUAL c++だと*.cppなのですが)
そうするとエラーが出て強制終了してしまうのですですのでまずは
上のソースコードを何とかしたいというところです(もちろんいきなり課題の回答書いていただけてもありがたいですが・・・・)
>perl言語に間違いはありませんか?
自分はperl言語なんてやったことなく先生が「ほかの言語にも触れる機会を作ろう」ということでこういう課題
をとったみたいですだから間違いかどうかは・・・・
課題のプリントには$ perl mygrep. pl while ./*.cで〜.cファイルから"while"という文字列を含むすべての行を行番号つきで画面に表示できます。
mygrep.plはUNIXが標準装備している grep コマンドの簡易版になっています。
grepコマンドで同じような結果を得るには、次のようにコマンド入力します。
$ grep -n while ./*.c
ここでスイッチ -nが行番号付加になります。grepコマンドの詳しい使用法は$ man grepで確認できます
つまり、スクリプトmygrep.plは perlという言語で書かれた簡易版のgrepだったわけです。
これが今日の課題です。
と書いてあるので
行番号つけるにしてもまずカレントディレクトリ内にある.cファイル名を検索などしてファイル名をだし
そのファイルを検索したい文字を含む文字列を出しなさいという課題かと思ったのですが・・・・


867ポイント を手に入れた。

Name: たいちう  ..熟練のプログラマー(42,646ポイント)   Date: 2009/12/28(月) 11:00   No:44994     
Title: Re:カレントディレクトリ内の検索    
char fname[99]; は、文字列が長さ98文字の文字列が1つ分です。
複数のファイル名を保持したいならば、
char fname[10][99]; // 10個のファイルまでの場合
のようにする必要があります。

使う部分も fopen(fname[i], "r") のように変更します。
意味を考えてください。


> と書いてあるので
> 行番号つけるにしてもまずカレントディレクトリ内にある.cファイル名を検索などしてファイル名をだし
> そのファイルを検索したい文字を含む文字列を出しなさいという課題かと思ったのですが・・・・

Perlはそれほど詳しくないので、"$ perl mygrep. pl while ./*.c"というコマンドが
どのように処理されるのか、私には実行してみないと判りません。早くても今夜帰宅後です。
# Usage: mygrep pattern file1 file2 ...
というようなコメントからも、ファイルを指定するものと判断したのですが。


186ポイント を手に入れた。

Name: 天和  ..中級者(11,519ポイント)   Date: 2009/12/28(月) 11:18   No:44996     
Title: Re:カレントディレクトリ内の検索    
>たいちうさん

>char fname[99]; は、文字列が長さ98文字の文字列が1つ分です
やはりここのsprintfとは違うのでしょうか
http://www.play21.jp/board/formz.cgi?action=res&resno=43828&page=&lognum=135&id=dixq&rln=44086
上のURLだと
int set_word(int argc, char **argv, WORD *word)
{
    int i;
    for (i = 0; i < argc - 1; i++)
        word[i].lenght = sprintf(word[i].letter, "%s", argv[i + 1]);
    return argc - 1;
}

だと例えば this is a penだと配列ひとつひとつ「this」 「is」 「a」 「pen」
と入って「t」「h」「i」「s」と一文字一文字はいってるということはないと思ったのですが。
>Perlはそれほど詳しくないので、"$ perl mygrep. pl while ./*.c"というコマンドが 
どのように処理されるのか、私には実行してみないと判りません。早くても今夜帰宅後です。 
# Usage: mygrep pattern file1 file2 ... 
というようなコメントからも、ファイルを指定するものと判断したのですが。

いろいろほんとにどうもすいませんしかしなぜ普通にc言語でこれしなさいと先生はしなかったのか・・・
(javaならともかくとして)
プログラム習う上で重要な言語またはほかの言語を理解するのも大切なことなんですかね?


310ポイント を落としてしまった。

Name: たいちう  ..熟練のプログラマー(42,788ポイント)   Date: 2009/12/28(月) 11:36   No:45001     
Title: Re:カレントディレクトリ内の検索    
> だと例えば this is a penだと配列ひとつひとつ「this」 「is」 「a」 「pen」
> と入って「t」「h」「i」「s」と一文字一文字はいってるということはないと思ったのですが。

配列の定義を比べてください。何の配列なのかが違います。


> プログラム習う上で重要な言語またはほかの言語を理解するのも大切なことなんですかね?

工学系の学生とかが、研究に必要な計算のためだけにプログラムを習うのならば、
それほど重要ではないでしょう。

情報系や専門学校の学生の場合だと、1つしか言語を知らないというのは、
致命的だと私は考えます。(天和さんの場合はCすら知らないレベルね。今は。)


142ポイント を手に入れた。

Name: 天和  ..中級者(11,381ポイント)   Date: 2009/12/28(月) 14:33   No:45023     
Title: Re:カレントディレクトリ内の検索    
>たいちうさん
>情報系や専門学校の学生の場合だと、1つしか言語を知らないというのは、 
致命的だと私は考えます。(天和さんの場合はCすら知らないレベルね。今は。)
うちは情報系ですのでc言語c++javaですから実質2つですね。
メジャーな言語だけって感じもしますが・・・・


138ポイント を落としてしまった。



Name: てら  ..ぴよぴよ(630ポイント)   Date: 2009/12/25(金) 13:30   No:44860       
Title: 宿題なのですが・・・    
いつもサイト見させていただいています。
学校の宿題なんですが、今日提出で、わからない問題を集めたので助けてください。
linuxでemacsで作ってktermでコンパイルするやつです。

★演習問題1
入力されたデーク数に応じた配列を確保し,入力されたデータをその配列に保存し,それらの和を求めよ.

(実行結果例)
データの数は?10
1番目のデータを人力してください:1
2番目のデータを入力してください:2
3番目のデータを入力してください:3
4番目のデータを入力してください:4
5番目のデータを入力してください:5
6番目のデータを人力してください:6
7番目のデータを入力してください:7
8番目のデータを入力してください:8
9番目のデータを入力してください:9
10番目のデータを入力してください:10
和=55

★演習問題2
2個のmxn行列の足し算の結果を求めるプログラムを作成せよ,
(時間に余裕があれば,2×2よりも大きい行列で動作を確認せよ.)

(実行結果例)
a:2
m;2

a[O][O]=1
a[0][1]=2
a[1][0]=3
a[1][1]=4
b[O][O]=4
b[0][1]=3
b[1][0]=2
b[1][1]=1

a=  1.00  2.00
  3.00  4.00

b=  4.00  3.00
  2.00  1.00

C=  5.00  5.00
   5.00  5.00

★演習問題3
"izumi","Kanto","Kudo","Sato","Sugawala","Matuda","Wada"の7個の文字列の長さを求めて表示しなさい。
(ただし,ポインタのボインタを用いること。)

(実行結果例)
6 : izumi
5 : kanto
4 : Kudo
4 : Sato
8 : Sugawara
6 : Matuda
4 : Wada


★演習問題4
文字型配列str1に,"ABCDEFGHIJKLMNOPQRSTUVWXYZ"という文字列が格納されている。
ポインタを2個用いて,文字型配列str2に,この文字列を逆順に格納しなさい。

★演習問題5
人力されたクラスの人数と科目の数に応じた配列を確保し,入力されたデータをその配列に保存し,科目ごとの和を求めよ。
例として,人数を3とし,科目数を3とした場合,それぞれの科日数に対する点数を読み込み,結果が正しく出力されるかを確認せよ。
(時間があれば,人数や科日数を適当に変えて,動作を確認せよ)


生徒番号    国語    数学    英語
1            85      74     63
2            78      65     70
3            89      92     88
4            32      48     66



(実行結果例)
クラスの人数は?4
科目の数は?3
1番目の学生
74
63
2番目
78
65
70
3番目の学生
89
92
88
4番目の学生
32
48
66
各科目の和は以下の通りです
222
213
269
146


630ポイント を手に入れた。


Name: たかぎ [URL]  ..ハッカー(144,591ポイント)   Date: 2009/12/25(金) 13:35   No:44861     
Title: Re:宿題なのですが・・・    
まずはお約束通り...



112ポイント を落としてしまった。

Name: Mist  ..比類無きプログラマー(79,737ポイント)   Date: 2009/12/25(金) 13:37   No:44862     
Title: Re:宿題なのですが・・・    
で、何を助ければいいんですか?
丸投げするつもりなら2ちゃんの宿題スレのほうがよろしいかと。
自分で出来ないなら正直にいったほうがあなたの人生にとっては遥かに有意義だと思いますけどね。


67ポイント を手に入れた。

Name: てら  ..ぴよぴよ(722ポイント)   Date: 2009/12/25(金) 13:43   No:44863     
Title: Re:宿題なのですが・・・    
宿題スレにも書きました。

でもほんとに急いでいて、でも聞ける友達も今いなくて・・
今後はしっかり勉強して、聞ける友達も作ろうと思うのでどうか今回だけ、この宿題やっていただきたいです。

ほんとに困っています。自分ではできないのでお願いしたいです・・

自分勝手ですみません。


92ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(144,717ポイント)   Date: 2009/12/25(金) 13:44   No:44864     
Title: Re:宿題なのですが・・・    
せっかくなので私も考えてみることにします。
ただ、よくわからないところがあるので、補足願います。

> linuxでemacsで作ってktermでコンパイルするやつです。

ktermでどうやってコンパイルするのでしょうか?
kterm初心者なのでわかりません。ぜひご教示ください。

> 入力されたデーク数に応じた

「デーク数」とは何でしょうか?

> 1番目のデータを人力してください:1 

1番目だけは、「入力」ではなく「人力」なんでしょうか?


126ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(144,740ポイント)   Date: 2009/12/25(金) 13:48   No:44865     
Title: Re:宿題なのですが・・・    
> 宿題スレにも書きました。

マルチポストは禁止です。
利用規約を熟読してから出直した方が、結局は近道です。


23ポイント を手に入れた。

Name: てら  ..ぴよぴよ(549ポイント)   Date: 2009/12/25(金) 13:54   No:44866     
Title: Re:宿題なのですが・・・    
たかぎさん、ありがとうございます。
誤字ばかりですみません。
> linuxでemacsで作ってktermでコンパイルするやつです。 

ktermでどうやってコンパイルするのでしょうか? 
kterm初心者なのでわかりません。ぜひご教示ください。 

私もよくわからないのですが、ktermを開いて、gcc -o 実行形式ファイル名
を打って、./a.out<return>と入力するとコンパイルされて作成された実行可能形式プログラムが実行されるっていうこと?です。すみませんよくわからないですよね。


> 入力されたデーク数に応じた 

「デーク数」とは何でしょうか? 

データ数の間違いです。

> 1番目のデータを人力してください:1 

1番目だけは、「入力」ではなく「人力」なんでしょうか? 

いいえ、入力です。


ほんと誤字が多くてすみません。。



173ポイント を落としてしまった。

Name: たかぎ [URL]  ..ハッカー(144,986ポイント)   Date: 2009/12/25(金) 14:44   No:44868     
Title: Re:宿題なのですが・・・    
とりあえず、演習問題1だけ...
#include <stdio.h> 
#include <stdlib.h>
#include <errno.h>
#include <inttypes.h>
#include <stdbool.h>

bool get_value(FILE *stream, intmax_t *value)
{
    char s[100];
    if (fgets(s, 100, stream) == NULL)
        return false;

    errno = 0;
    char *endptr;
    intmax_t t = strtoimax(s, &endptr, 0);
    if (errno != 0 || *endptr != '\n')
        return false;
    
    if (value == NULL)
        return false;
    *value = t;
    return true;        
}

int main(void)
{
    setvbuf(stdout, NULL, _IONBF, 0);

    fputs("データの数は?", stdout);
    intmax_t n;
    if (!get_value(stdin, &n))
        return EXIT_FAILURE;

    intmax_t data[n];
    intmax_t sum = INTMAX_C(0);
    for (intmax_t i = 0; i < n; i++)
    {
        printf("%jd番目のデータを入力してください:", i + 1);
        if (!get_value(stdin, &data[i]))
            return EXIT_FAILURE;
        sum += data[i];
    }

    printf("和=%jd\n", sum);
}

コメントはないので勝手に解析してください。


246ポイント を手に入れた。

Name: Mist  ..比類無きプログラマー(79,771ポイント)   Date: 2009/12/25(金) 14:50   No:44869     
Title: Re:宿題なのですが・・・    
> たかぎさん

宿題スレで答え貰ってるからもういいんじゃないですか。
あと、こっちでは書かれてないけどC++だそうですよ。


34ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(145,047ポイント)   Date: 2009/12/25(金) 14:52   No:44870     
Title: Re:宿題なのですが・・・    
> 宿題スレで答え貰ってるからもういいんじゃないですか。 

リンクも貼られていませんし、解決にもなっていませんからね。

> あと、こっちでは書かれてないけどC++だそうですよ。

別の質問ではないですか?
gccコマンドでC++はコンパイルできませんから。


61ポイント を手に入れた。

Name: Mist  ..比類無きプログラマー(79,836ポイント)   Date: 2009/12/25(金) 15:01   No:44871     
Title: Re:宿題なのですが・・・    
> 別の質問ではないですか? 

添付ファイルがこのスレと同じものでしたので間違いないでしょう。
「人力」とか書いていましたし。

> gccコマンドでC++はコンパイルできませんから。 

本人も書いているとおり「わかってない」んでしょうね。


65ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(145,088ポイント)   Date: 2009/12/25(金) 15:04   No:44872     
Title: Re:宿題なのですが・・・    
> 本人も書いているとおり「わかってない」んでしょうね。

ということは、宿題スレで得られた回答は役に立たない可能性も十分ありますね。


41ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,126,335ポイント)   Date: 2009/12/28(月) 12:18   No:45006     
Title: Re:宿題なのですが・・・    
まず、わかるところからやってみませんか?

1,キーボードから入力された数値を表示するだけのプログラムを書きましょう

を書いてあったら出来ますか?
どのあたりで躓いているかがわかれば回答が的確になると思います。


80ポイント を手に入れた。



Name: 45nm  ..ぴよぴよ(442ポイント)   Date: 2009/12/28(月) 02:06   No:44982       
Title: 一定時間経過したら表示している画像を消す。    
ゲームで会話ウィンドウみたいなやつを、一定時間過ぎたら消すようにしたいんですけど、どうやったらいいんでしょうか?


55ポイント を手に入れた。


Name: DVDM [URL]  ..熟練のプログラマー(46,587ポイント)   Date: 2009/12/28(月) 02:31   No:44985     
Title: Re:一定時間経過したら表示している画像を消す。    
>>45nmさん
会話中のボタン入力を考慮せず、単に時間だけを使うのであれば
カウンタ変数を一つ用意してやればうまくできると思います。
あくまで一例ですので、45nmさんのプロジェクトに合わせて関数化するなりしてみてください。


15秒経ったらウインドウを消す処理はこんな感じです。
(1/60秒ごとに更新しているという前提です)


int TalkCount=0;

if(++TalkCount >= 15*60)
{
    ウインドウを消す処理
}
else
{
    ウインドウを描画する処理
}




if文の条件式if(++TalkCount <= 15*60)からif(++TalkCount >= 15*60)に変更いたしました。
申し訳ございません;
 編集済み

192ポイント を手に入れた。



Name: メア  ..ぴよぴよ(221ポイント)   Date: 2009/12/27(日) 17:39   No:44940       
Title: 配列について    
C++を使っています

利用者が英字の大文字、小文字、数字を使って入力を行い、
そのなかにABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrstuvwxyz,0123456789の連続した
数値があれば出力できるプログラムを作っています。

たとえば、
入力してください>>asdfg123
fgが連続しています      (1)
123が連続しています     (2)

入力してください>>abc123
abcが連続しています
123が連続しています

入力してください>>ABC456
ABCが連続しています
456が連続しています

このように表示させるものを作っています

(1)入力した文字列の中に2文字以上連続したものがあれば出力したいんですが
どうしたらうまく表示させられるでしょうか?
今配列の勉強もしていますが理解できずよくわかりません… 編集済み


221ポイント を手に入れた。


Name: non  ..比類無きプログラマー(84,421ポイント)   Date: 2009/12/27(日) 18:17   No:44942     
Title: Re:配列について    
>今配列の勉強もしていますが理解できずよくわかりません…
具体的に理解できていないことはなんでしょうか?
アスキーコードについては理解していますか?
題意からするとchar型の配列と考えて良いのでしょうか?それともstring?
char型の配列だとすると、入力する文字数に制限はありますか?それとも、何文字入力されるか不明?





149ポイント を落としてしまった。

Name: メア  ..ぴよぴよ(262ポイント)   Date: 2009/12/28(月) 00:55   No:44977     
Title: Re:配列について    
返事遅くなりました。
char型の配列です。制限は20文字程度です。

アスキーコードはあまりよくわかっていない状態です。


41ポイント を手に入れた。

Name: sizuma [URL]  ..上級者(21,741ポイント)   Date: 2009/12/28(月) 01:25   No:44980     
Title: Re:配列について    
>配列がよくわからない

http://homepage3.nifty.com/mmgames/c_guide/13-02.html
では、上のサイトとかみて、まずはすべての配列の要素を表示するプログラムを作ってみてはどうでしょう。
アスキーコード表を見たり、整数型にキャストして表示してみるとどうすればいいのか見えてくると思います。


86ポイント を手に入れた。



Name: 餅男  ..ぴよぴよ(97ポイント)   Date: 2009/12/27(日) 20:53   No:44950       
Title: プロセスが終了せずビルドできない。    
起動中に新しくビルドするとこれがでるのはわかるのですが
一度閉じてソースを少しでも改修するとしてビルドすると下記の文が出ます。

タスクマネージャーのプロセスから一回一回終了させております。
今まで出なかったのですがソースが原因なのでしょうか。

お手数おかけいたしますが教えては頂けないでしょうか。

エラー
fatal error LNK1104: ファイル 'D:\PG\DirectX\DXシーン管理 091017\Debug\DxLib_VC2005用.exe' を開くことができません。



97ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(486,689ポイント)   Date: 2009/12/27(日) 21:20   No:44953     
Title: Re:プロセスが終了せずビルドできない。    

> ソースが原因なのでしょうか

 ソースが原因です。

 DXライブラリのウインドウを閉じたりエスケープキーなどが押されると DxLib_End関数が
呼ばれるようになっていますが、この関数はDXライブラリの終了処理を行うものであって
プロセスを終了するものではありません。

 その為、DXライブラリは終了しウインドウは消えても while(1)のループからは抜けていないので
ひたすらループを実行しつづけ、結果プロセスは残ったままとなります。

 終了時には WinMain関数を終わらせるようにしましょう。


290ポイント を手に入れた。

Name: 餅男  ..ぴよぴよ(164ポイント)   Date: 2009/12/27(日) 22:11   No:44958     
Title: Re:プロセスが終了せずビルドできない。    
Justy様
breakしたら出来ました。
ありがとうございます。

ただ普通に実行するとよく落ちる(応答なし)のですがこれは
CheckHitKey(KEY_INPUT_F1)とかが原因でしょうか?

気のせいかもしれませんがマウスを画面外に動かしたり
するとよく落ちる気がします。


67ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(486,914ポイント)   Date: 2009/12/27(日) 22:37   No:44962     
Title: Re:プロセスが終了せずビルドできない。    

> 応答なし

 応答なしになる原因として定期的に ProcessMessage関数が呼ばれていないことが挙げられますが
ざっとコードを追ってみたかんじでは(問題点はいろいろありますが)特にそういう原因と
なりそうなところはありませんでした。

 一応念の為に ProcessMessage関数をループの先頭で実行してみてはどうでしょう?
 それでもまだ発生するようなら、デバッガを使ってどこで処理が止まっているのか
調べてみて下さい。


225ポイント を手に入れた。



Name: ひよこ  ..比類無きプログラマー(76,262ポイント)   Date: 2009/12/25(金) 22:35   No:44885       
Title: ゲームを作りました「雑談」気軽にどうぞ    
クリスマスということでゲームを作りました。
クリスマス関係?の内容です。
感想をくださるとうれしいです。次回作に生かさせていただきます。
http://down11.ddo.jp/uploader/download/1261747912.zip
PASSは「hiyoko」です。


2倍のポイントを手に入れた! 220ポイント を手に入れた。


Name: kazuoni [URL]  ..ハッカー(120,862ポイント)   Date: 2009/12/26(土) 05:55   No:44890     
Title: Re:ゲームを作りました「雑談」気軽にどうぞ    
DLさせていただきました。

相変わらず、シューティングは苦手なので全くやりこめてはいませんが、
初めのボス?的なものを倒したら、また元のスクロール画面に戻りますが、
敵が出てこず、音楽もボス戦のままでした。
(移動はできるが、なにも出てこないため、なにもやる事がない=バグ?)

あと、前回も指摘があったかもしれないですけど、
STGにしては自機が大きすぎる様な気がします。
よけてるのか当たってるのか分からなくなりそうです。

ステージにおいてですが、弾幕の華やかさが少し足りないかなと思います。
錯乱の弾ならよいのでが、魅せるいわゆる規則的やシンメトリーな弾幕が少しバラけて
みえた「気」がしました。(あくまで一個人で気がしただけですから参考までに・・・。)

クリスマスまでに自ら期限を定め、それまでに制作をし、配信する事が出来る
ことは個人的に素晴らしいと思います。

制作お疲れ様でした。


345ポイント を手に入れた。

Name: ひよこ  ..比類無きプログラマー(76,346ポイント)   Date: 2009/12/26(土) 07:29   No:44891     
Title: Re:ゲームを作りました「雑談」気軽にどうぞ    
kazuoniさん遊んでくださりありがとうございました。

初めのボス?的
>>ボスを倒したらただ、画面が変わらない。ここはゴール的な画面を作ろうと思います。

STGにしては自機が大きすぎる様な気がします
>>そうですか、じゃあ小さくします。

弾幕の華やかさが少し足りないかなと思います。
>>レーザーと傘はよく出来たと思ったのですが、他のが駄目のようですか。

魅せるいわゆる規則的
>>魅せるものですか、画面で弾の位置が対象でないということでしょうか?


84ポイント を手に入れた。

Name: Tatu  ..上級者(21,588ポイント)   Date: 2009/12/26(土) 09:14   No:44893     
Title: Re:ゲームを作りました「雑談」気軽にどうぞ    
プレイしてみました。
通常ショットで初見ノーコンティニュークリアできました。

ウィンドウモードでやってみましたが、自機が大きいですね。

道中で、敵が左右や後方からやってくることがなく、
また、ボスを倒しきることができないことがあり、
特殊ショットのよいところがほとんどありません。

道中は前の作品とあまり敵の配置が変わっておらず、
物足りない感じがしました。


191ポイント を手に入れた。

Name: ひよこ  ..比類無きプログラマー(76,607ポイント)   Date: 2009/12/26(土) 09:33   No:44894     
Title: Re:ゲームを作りました「雑談」気軽にどうぞ    
Tatuさん遊んでくださりありがとうございます。
通常ショットで初見ノーコンティニュークリアできました。
>>難易度的に簡単だったということですか?

ウィンドウモードでやってみましたが、自機が大きいですね。
>>自機の大きさは考えます。
>>ウィンドウで困るのは処理落ちなのですが大丈夫でしたか?

特殊ショットのよいところがほとんどありません
>>特殊すぎましたね。低速は難しいと思います。

道中は前の作品とあまり敵の配置が変わっておらず、 物足りない感じがしました。
>>道中はほとんど変えてませんでしたね。いろいろなパターンを考えてみます。


165ポイント を手に入れた。

Name: ようすけ  ..中級者(9,377ポイント)   Date: 2009/12/26(土) 09:44   No:44896     
Title: Re:ゲームを作りました「雑談」気軽にどうぞ    
DLさせてもらいました。

気になったのが、敵を倒してもスコアが「1」以上増えないのですが、
これは仕様でしょうか?

まぁ、私の作ってるゲームとは違うタイプなので、
新鮮味がありこれはこれで楽しませてもらいました。

ゲーム作りは大変なのはわかるんで、制作御苦労さまでした!


110ポイント を手に入れた。

Name: ひよこ  ..比類無きプログラマー(76,802ポイント)   Date: 2009/12/26(土) 09:49   No:44897     
Title: Re:ゲームを作りました「雑談」気軽にどうぞ    
ようすけさん遊んでくださりありがとうございます。

気になったのが、敵を倒してもスコアが「1」以上増えないのですが、 これは仕様でしょうか?
>>最初ボムを撃つとスコアがへるようにしてと考えていたのですが、
>>数制にしようとして、そして、スコアを増やす処理を書いてないので、増やしてませんでした。
>>ありがとうございます。

ゲーム作りは大変なのはわかるんで、制作御苦労さまでした! 
>>ようすけさんのほうが何倍も複雑な気がします。


195ポイント を手に入れた。

Name: situmon  ..熟練のプログラマー(47,452ポイント)   Date: 2009/12/26(土) 13:35   No:44907     
Title: Re:ゲームを作りました「雑談」気軽にどうぞ    
プレイさせていただきました。
とても楽しかったですが、
みなさんの意見のように自機が大きく、また当たり判定が青いと見えにくいです。
また絵全体が明るい色なので目がちかちかしました。
弾幕についてはもう少し複雑なほうがいいと思います。
でも最後の弾幕は(こんなのよけられないと思っていましたが意外と簡単でとてもきれいでした。)
絵は何のツールで描かれてるのでしょうか?
もしよければなにかお手伝いしますよ。(足手まといになる可能性大ですが・・・)

こちらはいま、素材作りにこってます。
音楽や絵を作ってがんばってます・・・結果最近はプログラミングしてません(笑
なのでひよこさんのように要領よくできる人はすごいと思います。
 編集済み


192ポイント を手に入れた。

Name: ひよこ  ..比類無きプログラマー(76,996ポイント)   Date: 2009/12/26(土) 15:45   No:44909     
Title: Re:ゲームを作りました「雑談」気軽にどうぞ    
situmonさん遊んでくださりありがとうございます。

当たり判定が青いと見えにくいです。 
>>じゃあ赤にします。

また絵全体が明るい色なので目がちかちかしました。
>>そうなんですか、いつもは白と黒の背景なので、わかりませんでした。

絵は何のツールで描かれてるのでしょうか? 
>>ペイントも使いますがGIMPを使って描いてます。
>>レイヤーとぼかしのために使ってます。

弾幕についてはもう少し複雑なほうがいいと思います。
>>そうですか、私はちょっと計算式をいじくってこんな形になった、みたいな物が多いです。

なのでひよこさんのように要領よくできる人はすごいと思います。 
>>絵は簡単のしか描けませんし、プログラムは龍神録の館を使っているので
>>タイトルとタイトルのちょっとした計算くらいしかしてません。



194ポイント を手に入れた。

Name: ひよこ  ..比類無きプログラマー(77,073ポイント)   Date: 2009/12/26(土) 23:13   No:44923 解決!     
Title: Re:ゲームを作りました「雑談」気軽にどうぞ    
situmonさん
もしよければなにかお手伝いしますよ。(足手まといになる可能性大ですが・・・)
>>絵は自分で作りますが・・・
>>音楽はsitumonさんのも使っています。効果音って作れますか?

ここで一応解決にしておきます。


77ポイント を手に入れた。

Name: situmon  ..熟練のプログラマー(47,511ポイント)   Date: 2009/12/27(日) 14:12   No:44935     
Title: Re:ゲームを作りました「雑談」気軽にどうぞ    
はいつくれますよ。
どういったものを作ればよいでしょうか?
曲ももしよければ作ります。
もしよければメールアドレスを教えてください。
いやでしたらこちらがメールアドレスを教えますのでメールしていただければよいです。


59ポイント を手に入れた。

Name: ひよこ  ..比類無きプログラマー(77,073ポイント)   Date: 2009/12/27(日) 17:07   No:44939     
Title: Re:ゲームを作りました「雑談」気軽にどうぞ    
situmonさん
できたらアドレス書いてもらっていいですか?


Name: situmon  ..熟練のプログラマー(47,635ポイント)   Date: 2009/12/27(日) 20:53   No:44951     
Title: Re:ゲームを作りました「雑談」気軽にどうぞ    
*消しました。 編集済み

24ポイント を手に入れた。

Name: ひよこ  ..比類無きプログラマー(77,085ポイント)   Date: 2009/12/27(日) 21:43   No:44956     
Title: Re:ゲームを作りました「雑談」気軽にどうぞ    
みました。メールも送りました。

12ポイント を手に入れた。



Name: ますい  ..ぴよぴよ(2ポイント)   Date: 2009/12/26(土) 20:09   No:44918       
Title: elライブラリの件なのですが    
c:\documents and settings\ユーザー\my documents\visual studio 2008\projects\フォルダ名\フォルダ名\vc++.cpp(4) : fatal error C1083: include ファイルを開けません。'el.h': No such file or directory

と出るのですがel.hというファイルはどこに保存すればよろしいのでしょうか?
こういったファイルを何処で読み込ませるかなどがいまいちわからず実行できなくて困っています。
ご返答よろしくお願いします。


2ポイント を手に入れた。


Name: たかぎ [URL]  ..ハッカー(145,603ポイント)   Date: 2009/12/27(日) 13:49   No:44934     
Title: Re:elライブラリの件なのですが    
> el.hというファイルはどこに保存すればよろしいのでしょうか?

コンパイラからアクセス可能な場所であれば、どこでもよいと思います。
インクルードディレクトリの設定を忘れないようにしてください。


50ポイント を手に入れた。



Name: dic  ..熟練のプログラマー(43,471ポイント)   Date: 2009/12/23(水) 15:27   No:44767       
Title: 続 バックスペースについて    
バックスペースについて もう一回質問したいです

下のコードを実行すると

#include    <stdio.h>
#include    <windows.h>

void    main()
{
    int    i ,j;
    for( i=0; i<10; i++ )
    {
        for( j=0; j<10; j++ )
        {
            printf( "%d", i );
        }
    }
    Sleep( 1000 * 5 );
    for( i=0; i<100; i++ )
        putchar( 0x08 );
}


(上の段)0000000001111111111......777777777
(下の段)8888888889999999999_

から

(上の段)0000000001111111111.....7777777
(下の段)_

_が出力先頭になるのですが

コンソール上で改行が起きると
上の段に出力先頭の位置を戻す方法はないのでしょうか?


193ポイント を手に入れた。


Name: バグ  ..ハッカー(180,697ポイント)   Date: 2009/12/23(水) 17:27   No:44768     
Title: Re:続 バックスペースについて    
WINAPIを使用してもよいのであれば可能ですよ(^-^)

14ポイント を手に入れた。

Name: バグ  ..ハッカー(181,188ポイント)   Date: 2009/12/24(木) 09:25   No:44806     
Title: Re:続 バックスペースについて    
戻すというよりは、好きな位置へカーソルを移動させることで解決できるかと思います。
提示されたソースにwindows.hと書かれてあるので、WINAPIを使用できる環境だと仮定して書き込みますね。


#include <stdio.h>
#include <windows.h>

VOID main(VOID)
{
    // 出力先のハンドルを取得
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);

    // COORD構造体へ座標を設定する
    COORD stPosition = {10, 0};

    // COORD構造体で指定された座標へカーソルを移動させる
    SetConsoleCursorPosition(hOut, stPosition);

    // 文字列を出力する
    printf("test\n");
}


WINAPIを使用できるコンソールアプリでは、こんな方法で任意の位置へ文字列を出力することが可能です。
ただ、このままでは少々使いづらいかもしれませんので、出力ハンドルをグローバル変数にしたり、位置指定している箇所を関数化したりカスタマイズした方が便利かもしれませんが…(^_^;)

参考までに…ですが、コンソールアプリでも、文字に色をつけたりすることも可能です。固定16色しかありませんけどね(苦笑)


491ポイント を手に入れた。

Name: dic  ..熟練のプログラマー(43,569ポイント)   Date: 2009/12/24(木) 16:51   No:44816     
Title: Re:続 バックスペースについて    
カーソルの位置を変更するのは成功しましたが
下のようにすると、付属画像のようになります

#include    <stdio.h>
#include    <string.h>

void    main()
{
    char    http[1024] = "http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1414571724";
    int        len = strlen(http);

    int    i, j;
    for( i=0; i<99; i++ )
    {
        printf( http );
        for( j=0; j<len; j++ )
            putchar( 0x08 );
    }
}



この表示しているものを消すにはどうすればいいでしょうか?


98ポイント を手に入れた。

Name: バグ  ..ハッカー(181,506ポイント)   Date: 2009/12/24(木) 17:04   No:44819     
Title: Re:続 バックスペースについて    
バックスペース(0x08)を出力してもカーソルが戻るだけですので、表示を消したい場合はスペースで上書きしてやる必要があります。

それと、細かいことですが、strlen関数の戻り値はsize_t型ですので注意しましょう。(ちなみにVC++6.0ではsize_t型はunsigned int型です)



#include <stdio.h>
#include <string.h>

void main()
{
    char http[1024] = "http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1414571724";
    int len = (int)strlen(http);
    int    i;

    printf("%s", http);
    for (i = 0 ; i < len; ++i)
    {
        putchar(0x08);
        putchar(' ');
        putchar(0x08);
    }
}



318ポイント を手に入れた。

Name: dic  ..熟練のプログラマー(43,577ポイント)   Date: 2009/12/24(木) 18:39   No:44823 解決!     
Title: Re:続 バックスペースについて    
多分、動作すると思います

8ポイント を手に入れた。

Name: バグ  ..ハッカー(181,613ポイント)   Date: 2009/12/24(木) 18:48   No:44825     
Title: Re:続 バックスペースについて    
はいはい、聞く耳持たない訳ね。
勝手にしてくださいな…┐('〜`;)┌


3ポイント を手に入れた。

Name: Mist  ..比類無きプログラマー(79,590ポイント)   Date: 2009/12/24(木) 19:14   No:44826     
Title: Re:続 バックスペースについて    
> この表示しているものを消すにはどうすればいいでしょうか?

前の質問のときに回答したけどなぁ。


14ポイント を落としてしまった。

Name: lbfuvab  ..上級者(24,166ポイント)   Date: 2009/12/25(金) 06:20   No:44841     
Title: Re:続 バックスペースについて    
system("CLS");

↑でも良いかと思いますけどね(ただしベッタリと環境依存)


21ポイント を手に入れた。

Name: dic  ..熟練のプログラマー(43,628ポイント)   Date: 2009/12/25(金) 19:54   No:44883 解決!     
Title: Re:続 バックスペースについて    
>Mistさん
前回は回答ありがとうございました
今回はコンソール上で改行されてるとバックスペースで消せなかったので
もういちど質問させてもらいました

>lbfuvabさん
おお、そんな命令あったんですね
環境依存のようですが、Windows前提なんでとても使えます


参考に私が買った参考書の画像を貼り付けておきます
苦情はその方におっしゃってください
前にも言いましたが戻り値使わないんで


51ポイント を手に入れた。

Name: Mist  ..比類無きプログラマー(79,861ポイント)   Date: 2009/12/25(金) 21:38   No:44884     
Title: Re:続 バックスペースについて    
> 前にも言いましたが戻り値使わないんで

なんか勘違いしてません?
バグさんはstrlenの戻り値の型の話しているのに、なんでmainの戻り値の話なの?


25ポイント を手に入れた。

Name: dic  ..熟練のプログラマー(43,642ポイント)   Date: 2009/12/26(土) 17:33   No:44911 解決!     
Title: Re:続 バックスペースについて    
すいません、バックスペースに関して質問してるんで

14ポイント を手に入れた。

Name: バグ  ..ハッカー(182,178ポイント)   Date: 2009/12/26(土) 19:43   No:44916     
Title: Re:続 バックスペースについて    
質問のタイトルはともかく、最初の書き込み内容は…

>>コンソール上で改行が起きると上の段に出力先頭の位置を戻す方法はないのでしょうか?


であった訳ですから、コンソール上でのカーソル制御についての質問でした。

あなた自身、バックスペースについては全く質問されていませんが?

かなり拡大解釈して、私が提示してみたバックスペースを使用しての文字の消去処理のサンプルについては、全く無反応でしたから、あなたが思っていた動作とは違うようですし、何がしたいのか意味不明です。


143ポイント を手に入れた。

Name: dic  ..熟練のプログラマー(43,677ポイント)   Date: 2009/12/26(土) 20:06   No:44917 解決!     
Title: Re:続 バックスペースについて    
関りたくないんで、管理人さん
不適切でしたら削除してください


35ポイント を手に入れた。

Name: Q  ..ぴよぴよ(787ポイント)   Date: 2009/12/26(土) 22:42   No:44920     
Title: Re:続 バックスペースについて    
質問するだけしておいて都合が悪くなると関わりたくないって・・・


23ポイント を手に入れた。

Name: Tororo  ..かけだし(1,031ポイント)   Date: 2009/12/27(日) 08:30   No:44930     
Title: Re:続 バックスペースについて    
とりあえず、回答者sにアリガトウとか言ったら?

27ポイント を手に入れた。

Name: dic  ..熟練のプログラマー(43,695ポイント)   Date: 2009/12/27(日) 09:33   No:44931 解決!     
Title: Re:続 バックスペースについて    
>バグさん
ありがとうございました


18ポイント を手に入れた。

Name: バグ  ..ハッカー(182,213ポイント)   Date: 2009/12/27(日) 13:42   No:44933     
Title: Re:続 バックスペースについて    
何故お礼を言われるのか分かりませんが、これ以上かかわりあいたくないので、ここへの書き込みは止めます。

35ポイント を手に入れた。



Name: kms  ..入門者(3,488ポイント)   Date: 2009/12/23(水) 21:46   No:44775       
Title: キャラを4方向に歩かせる    
度々質問させて頂きます。

ゲーム基本編の22章、キャラを四方向に歩かせるという課題の、

ch.img=image[(ch.x%32+ch.y%32)/8 + ch.muki*4];


という行がなかなか理解できません。

何度かページを読んだのですが、僕の思考回路はショート寸前です。

何方かご教授頂けないでしょうか。 編集済み


2倍のポイントを手に入れた! 76ポイント を手に入れた。


Name: softya  ..比類無きプログラマー(73,294ポイント)   Date: 2009/12/23(水) 22:21   No:44777     
Title: Re:キャラを4方向に歩かせる    
まず、image[]配列にどの様に画像情報が格納されているか分かりますか?
image[0]なら何とか?


35ポイント を手に入れた。

Name: kms  ..入門者(3,573ポイント)   Date: 2009/12/23(水) 22:51   No:44779     
Title: Re:キャラを4方向に歩かせる    
お返事ありがとうございます。

image[0]の場合は、画像情報は、最初の一番目、ですよね?

[0]>[1]>[2]....という具合に。。

つまり、image[0]は、キャラクターがうえを向いている画像ですよね。

[0][1][2][3]
[4][5][6][7]
[8][9].....

といった感じでしょうか?


85ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(73,427ポイント)   Date: 2009/12/23(水) 23:51   No:44784     
Title: Re:キャラを4方向に歩かせる    
では、ch.muki*4の意味は分かりますよね?

あとは、(ch.x%32+ch.y%32)/8ですが、これは[0][1][2][3]と1つの方向が4つのパターンがセットに成っているのと関係します。 
4方向に歩くプログラムですのでch.xとch.yが同時変化しないのは分かりますよね?
なのでとりあえず片方のch.xだけを考えてみます。
片方だけなので(ch.x%32)/8と考えて、ch.xを32で割った余りを更に8で割るとどんな値が求まるでしょうか?
値の範囲を書いてみて下さい。


133ポイント を手に入れた。

Name: kms  ..入門者(3,509ポイント)   Date: 2009/12/24(木) 00:38   No:44791     
Title: Re:キャラを4方向に歩かせる    
お返事ありがとうございます。

00000000
11111111
22222222
33333333
44444444
55555555
66666666
77777777
(中略)..
3131313131313131

でしょうか?


64ポイント を落としてしまった。

Name: softya  ..比類無きプログラマー(73,482ポイント)   Date: 2009/12/24(木) 00:46   No:44794     
Title: Re:キャラを4方向に歩かせる    
プログラムを作って試してみて下さい。
printf( "%d\n", (x%32)/8 );
としてxを0から128までforで回してみると分かりますよ。


55ポイント を手に入れた。

Name: kms  ..入門者(3,557ポイント)   Date: 2009/12/24(木) 01:56   No:44796     
Title: Re:キャラを4方向に歩かせる    
お返事遅れてしまい申し訳ありません。。

00000000111111112222222233333333....の繰り返しになったのですが。。


48ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(73,563ポイント)   Date: 2009/12/24(木) 08:50   No:44803     
Title: Re:キャラを4方向に歩かせる    
今までの情報を整理してみて下さい。
>ch.img=image[(ch.x%32+ch.y%32)/8 + ch.muki*4];

ch.muki*4の取りうる値は?
(ch.x%32+ch.y%32)/8の値の変化は?
この2つの値を組み合わせるとどうなりますか?


81ポイント を手に入れた。

Name: kms  ..入門者(3,585ポイント)   Date: 2009/12/25(金) 17:02   No:44874     
Title: Re:キャラを4方向に歩かせる    
お返事遅れてしまい申し訳ないです。。

えと、情報を整理したのですが、まだよくわかりません。。

xの値とyの値にそれぞれ、32の余り+8で、

>00000000111111112222222233333333....の繰り返し

になるのは感覚的にわかるのですが、それ以上は。。

ごめんなさい。。本当によくわからないのです。


28ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(73,374ポイント)   Date: 2009/12/25(金) 17:29   No:44876     
Title: Re:キャラを4方向に歩かせる    
それでは、
int x,y,muki;
x=32;
y=32;
for( muki=0 ; muki<4 ; muki++ ) {
for( x=32; x<96; x+=4 ) {
 printf( "muki=%d x=%d y=%d ???=%d\n", muki, x, y, (x%32+y%32)/8 + muki*4 );
}
}
というプログラムで表示される???の値の意味は理解できますか?
明らかな法則性があるのが分かると思いますが。


141ポイント を手に入れた。

Name: kms  ..入門者(3,699ポイント)   Date: 2009/12/25(金) 18:02   No:44879     
Title: Re:キャラを4方向に歩かせる    
mukiに応じて、???が増えていますね。。

キャラクターのmukiに応じて、キャラクターの歩く動作を表しているのでしょうか?

たとえば、mukiが0のとき(上向きのとき)、

???は、キャラクターの上向き画像を、[0][0][1][1][2][2][3][3]...

と増やしている。これにより、キャラクターが歩く動作をする。

でしょうか?

違いましたら、すみません。。


114ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(73,487ポイント)   Date: 2009/12/25(金) 18:32   No:44880     
Title: Re:キャラを4方向に歩かせる    
mukiはキャラクタの向きですね。
???はmukiが0の時は0から3を繰り返しますし、mukiが1の時は4から7を繰り返しているのが分かると思います。
ここでimage配列に画像がどう格納されているか考えるとなぜ0から3や4から7を繰り返すのか見えてきませんか?
そして、x,y,mukiと画像の関係が見えてきませんか?


113ポイント を手に入れた。

Name: kms  ..入門者(3,947ポイント)   Date: 2009/12/26(土) 17:40   No:44912     
Title: Re:キャラを4方向に歩かせる    
>ここでimage配列に画像がどう格納されているか考えるとなぜ0から3や4から7を繰り返すのか見えてきませんか? 

mukiが0のとき、0から3を繰り返すのは、
muki==0(上向き画像)を歩かせる処理をする為、としかまだわかりません。
画像を、0>1>2>3>と順番に処理する事により、テクテク、キャラクターがうえに歩くとしか。。

muki==1は、左向きの画像ですよね?
これも上記と同様、4>5>6>7と順番に処理する事により、画像をひとつひとつ更新しているんですよね?

下記の配列を画像としたとき、

[0]>[1]>[2]>[3] == muki 0
[4]>[5]>[6]>[7] == muki 1
[8]>[9]>[10]>[11] == muki 2
[12]>[13]>[14]>[15] == muki 3

という関係性は見えてきたのですが。。

すみません。まだこの段階で詰まっています。。


248ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(73,678ポイント)   Date: 2009/12/26(土) 21:48   No:44919     
Title: Re:キャラを4方向に歩かせる    
>ch.img=image[(ch.x%32+ch.y%32)/8 + ch.muki*4]; 
この行はキャラの向きと座標からキャラの歩行アニメの今現在の画像を求めるって事ですので、それで理解されていることにはならないんでしょうか?
何処の部分に疑問が残っているか教えてもらえますか?


92ポイント を手に入れた。

Name: kms  ..入門者(4,168ポイント)   Date: 2009/12/26(土) 22:47   No:44921     
Title: Re:キャラを4方向に歩かせる    
ええとですね、後々色々考えた結果なんですけど、
間違った解釈をしていました。
なにか、ピクセルを理解していなかったようです。

その後、考えた限りの解答なんですが、

(ch.x%32+ch.y%32)/8が配列の[0][1][2][3]の4ループの実現だとすると、

それに加算される、ch.muki*4は、0が0、1が4、2が8、3が12で、各キャラの向きを表しているのですよね?
そこに、+が出てきて、何がなにやら混乱している状況です。

まだ、(ch.x%32+ch.y%32)/8 と、ch.muki*4 が、
自分のなかでは独立した感じになっています。。


221ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(73,858ポイント)   Date: 2009/12/26(土) 23:00   No:44922     
Title: Re:キャラを4方向に歩かせる    
画像が
[0][1][2][3] = 上向き歩行アニメ
[4][5][6][7] = 左向き歩行アニメ
[8][9][10][11] = 下向き歩行アニメ
[12][13][14][15] =  右向き歩行アニメ
だと言うことは理解されてますよね?
これを4x4の表と考えてください。

ch.muki*4は縦軸の選択をする計算です。
(ch.x%32+ch.y%32)/8は横軸の選択をする計算と言うわけです。
なので、独立しているといえば独立しています。

>なにか、ピクセルを理解していなかったようです。 
ピクセルって画素の最小単位=ドットの事ですがどういう意味で使われていますか?


180ポイント を手に入れた。

Name: kms  ..入門者(4,378ポイント)   Date: 2009/12/26(土) 23:19   No:44924     
Title: Re:キャラを4方向に歩かせる    
>画像が 
[0][1][2][3] = 上向き歩行アニメ 
[4][5][6][7] = 左向き歩行アニメ 
[8][9][10][11] = 下向き歩行アニメ 
[12][13][14][15] = 右向き歩行アニメ 
だと言うことは理解されてますよね? 

はい。

>ピクセルって画素の最小単位=ドットの事ですがどういう意味で使われていますか?

最初は、32ピクセルと読んだとき、キャラクターのサイズだと勘違いしていました。
なので、もう一度、21章の「キャラを一区間歩かせる」をじっくり読んだとき、
キャラを一区間歩かせるときの、[0]>[1]>[2]>[3]の四ループで32ピクセルだと理解しました。
また誤っていたら、恐縮ですが。。。

0〜7ピクセルは -> [12] 
8〜15ピクセルは -> [13] 
16〜23ピクセルは -> [14]
24〜31ピクセルは -> [15]
という説明です。

今は、1ピクセルは、1ドットだと解釈しています。


210ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(73,924ポイント)   Date: 2009/12/26(土) 23:29   No:44925     
Title: Re:キャラを4方向に歩かせる    
>最初は、32ピクセルと読んだとき、キャラクターのサイズだと勘違いしていました。 
あぁ、分かりました。
この(ch.x%32+ch.y%32)/8に出てくる32は歩く距離(ピクセル)を表します。
キャラクタのサイズも32ピクセルなのですが、今回の式には関係ありません。


66ポイント を手に入れた。

Name: kms  ..入門者(4,380ポイント)   Date: 2009/12/26(土) 23:42   No:44926     
Title: Re:キャラを4方向に歩かせる    
>この(ch.x%32+ch.y%32)/8に出てくる32は歩く距離(ピクセル)を表します。 
キャラクタのサイズも32ピクセルなのですが、今回の式には関係ありません。

そうだったんですか。。すみません。ずっと悩んでいました。
ありがとうございます。

ちなみに、

[0][1][2]
[3][4][5]
[6][7][8]
[9][10][11]

という配列の場合は、

式は、(ch.x%32+ch.y%32)/11 + ch.muki*3

になるのでしょうか?

何度も申し訳ありません。。 編集済み


2ポイント を手に入れた。

Name: softya  ..比類無きプログラマー(74,204ポイント)   Date: 2009/12/27(日) 00:40   No:44927     
Title: Re:キャラを4方向に歩かせる    
>(ch.x%32+ch.y%32)/11 + ch.muki*3 
確かにこう書くしかないのですが、1ドットづつ移動した場合に11,11,10という周期に成るので最後だけ周期が短くなります。これがアニメだと違和感になる場合があるので使ってみて違和感が無ければって事ですね。
他にもch.xやch.yを使わずにアニメーションする方法があるので場合によって式を全く変えた方がいいでしょね。その場合は歩いたフレーム数をカウントします。


2倍のポイントを手に入れた! 280ポイント を手に入れた。

Name: kms  ..入門者(4,480ポイント)   Date: 2009/12/27(日) 07:38   No:44929 解決!     
Title: Re:キャラを4方向に歩かせる    
わかりました。
softya様、ご丁寧な解説、本当にありがとうございました。
ずっと悩んでいたので、助かりました。。

とりあえず、
>(ch.x%32+ch.y%32)/11 + ch.muki*3
の処理に関して、目立った違和感はありませんでした。
こんな僕の質問に応えてくださり、本当にありがとうございました。
また何かとご質問する場合もあると思いますが、
そのときは宜しくお願い致します。


100ポイント を手に入れた。



Name: toto  ..かけだし(1,272ポイント)   Date: 2009/12/26(土) 12:43   No:44899       
Title: getlineについて    
いつもお世話になっています。

C++を使ってプログラムを作っています。
インターネットとかで参考にしたソースに
std::getline(std::cin, str);というものがありました。
string strで定義されています。
getline関数からchar型の変数aに代入したいんですが
stringとcharは互換性がないためかエラーが出てしまいます。
error C2440:'char *' から 'std::string' に変換できません。

何か方法はないでしょうか?

char moji[100];
std::string str;
printf("入力してください>>");
    std::getline(std::cin, str); //変換ができないため2回同じものを入力する状態になっている
    scanf("%s",moji);
         std::cout << "数字:";
        c=std::count_if(str.begin(), str.end(), is(&std::isdigit));
        printf("%d個\n",c);
{
    while(moji[i]!='\0'){
        if(moji[i-1]==moji[i]){
            if(sw==0){
                printf("出力:%c%cが1つあります\n",moji[i-1],moji[i-1]); 
                sw=1;
            }
        }
        else{
            if(sw==1)
                sw=0;
        }
        i++;
    }}


ex.
入力してください>>888
888           //←1回だけ入力する方法はないでしょうか?説明下手ですいません…
数字:3個
出力:88が一つあります


510ポイント を手に入れた。


Name: たかぎ [URL]  ..ハッカー(145,475ポイント)   Date: 2009/12/26(土) 12:59   No:44901     
Title: Re:getlineについて    
> getline関数からchar型の変数aに代入したいんですが 

よくわかりませんが、こういうことでしょうか?
std::cin.getline(&a, 1);

ただし、この場合だと、エラーチェックが面倒になりますよ。


2倍のポイントを手に入れた! 146ポイント を手に入れた。

Name: toto  ..かけだし(1,360ポイント)   Date: 2009/12/26(土) 13:12   No:44902     
Title: Re:getlineについて    
std::cin.getline(&a, 1);ですか?
エラーがいっぱいでてきました。

std::getline(std::cin, str);の値を
printfで出力は可能ですか?
printf("%s",str);のような感じで…


88ポイント を手に入れた。

Name: たいちう  ..熟練のプログラマー(42,207ポイント)   Date: 2009/12/26(土) 13:15   No:44903     
Title: Re:getlineについて    
printf("%s", str.c_str());

14ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(145,553ポイント)   Date: 2009/12/26(土) 13:18   No:44904     
Title: Re:getlineについて    
失礼。std::cin.getline(&a, 1);だとナル文字しか入りませんね。
ただ、エラーがいっぱいでるというのがよくわかりません。
それと、getlineでchar型の変数に直接値を読み込むのは無理かと思います。

> printf("%s",str);のような感じで… 

strはstd::stringでしょうか?
それなら、
std::printf("%s", str.c_str());

とすればできます。


78ポイント を手に入れた。

Name: toto  ..かけだし(1,391ポイント)   Date: 2009/12/26(土) 13:20   No:44905     
Title: Re:getlineについて    
できました!
printf("%s", str.c_str());とは意味的にはどんな感じなんでしょう?


31ポイント を手に入れた。

Name: toto  ..かけだし(1,553ポイント)   Date: 2009/12/26(土) 17:55   No:44914     
Title: Re:getlineについて    
char a[100];
std::string str;

printf("入力してください>>");
std::getline(std::cin, str);
printf("%s\n", str.c_str());
a=str.c_str();    



std::getline(std::cin, str);に入力されたものを
printf("%s\n", str.c_str());で出力できるようにはなりました。
このstr.c_str();を、aに代入したいので
a=str.c_str(); という形で組むと
error C2440: '=' : 'const char *' から 'char [100]' に変換できません。というエラーが出ます。






162ポイント を手に入れた。

Name: pooka [URL]  ..上級者(19,815ポイント)   Date: 2009/12/26(土) 18:23   No:44915     
Title: Re:getlineについて    
>a=str.c_str();
std::strcpy(a, str.c_str());
としてみてください。


46ポイント を手に入れた。

Name: toto  ..かけだし(1,606ポイント)   Date: 2009/12/27(日) 02:41   No:44928     
Title: Re:getlineについて    
できました!!
ありがとうございます。
std::strcpyで(a, str.c_str()); という表現があるんですね。



53ポイント を手に入れた。




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +