C言語何でも質問掲示板

Total hit  今日  昨日  



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

 
   60章について   
     ・[37589] Justy 
     ・[37593] @ 
     ・[37594] Justy 
     ・[37619] @ 
   クラス内のコンストラ ....   
     ・[37587] たかぎ 
     ・[37588] kaiten 
     ・[37590] array 
     ・[37607] バグ 
     ・[37608] array 
     ・[37610] たかぎ 
     ・[37614] array 
     ・[37616] たかぎ 
     ・[37617] array 
   配列すべて選択   
     ・[37612] Justy 
     ・[37615] trx 
   devpartner profiler ....   
   一日アクセス出来なか ....   
     ・[37571] situmon 
     ・[37572] すずめ 
     ・[37597] Dixq (管理人) 
     ・[37599] Tororo 
     ・[37602] TRUTH 
     ・[37611] 御津凪 
   新しいサーバーへ移行 ....   
     ・[37346] ひよこ 
     ・[37373] sizuma 
     ・[37392] Dixq (管理人) 
     ・[37394] 御津凪 
     ・[37396] situmon 
     ・[37398] array 
     ・[37400] yu 
     ・[37417] Dixq (管理人) 
     ・[37532] 御津凪 
     ・[37556] Dixq (管理人) 
     ・[37557] たかぎ 
     ・[37559] toyo 
     ・[37560] Dixq (管理人) 
     ・[37561] toyo 
     ・[37568] Dixq (管理人) 
     ・[37577] たかぎ 
     ・[37581] array 
     ・[37596] Dixq (管理人) 
   重なってる物から離れ ....   
     ・[37485] Justy 
     ・[37486] ひよこ 
     ・[37488] ねこ 
     ・[37491] 初心者さんです 
     ・[37511] nayo 
     ・[37592] ボブ 
   無題   
     ・[37565] Q 
     ・[37566] 静波 
     ・[37567] バグ 
     ・[37574] 静波 
     ・[37575] 静波 
     ・[37582] 静波 
     ・[37583] たかぎ 
     ・[37584] バグ 
     ・[37585] 静波 
   弾幕よけゲームを作り ....   
     ・[37328] チルチル 
     ・[37329] ひよこ 
     ・[37330] situmon 
     ・[37331] スー 
     ・[37332] situmon 
     ・[37333] 烏 
     ・[37336] すずめ 
     ・[37355] situmon 
     ・[37361] ねこ 
     ・[37379] situmon 
     ・[37380] situmon 
     ・[37381] situmon 
     ・[37387] TRUTH 
     ・[37395] situmon 
     ・[37403] チルチル 
     ・[37441] situmon 
     ・[37444] チルチル 
     ・[37570] situmon 
   無題   
     ・[37564] 静波 
   当り判定について   
     ・[37443] TRUTH 
     ・[37445] 華穂 
     ・[37447] 華穂 
     ・[37509] 夢夢 
     ・[37562] 華穂 
   アンケートについて   
     ・[37555] Dixq (管理人) 
   しりとりプログラム   
     ・[37426] Haru 
     ・[37427] Mist 
     ・[37428] p3 
     ・[37430] Haru 
     ・[37431] non 
     ・[37432] p3 
     ・[37433] たかぎ 
     ・[37434] Mist 
     ・[37435] non 
     ・[37438] TKOZ 
     ・[37440] やそ 
     ・[37552] TKOZ 
     ・[37553] non 
     ・[37554] non 
   数式コンパイラ   
     ・[37548] ピロリン 
     ・[37551] non 
   ウィンドウの大きさ変 ....   
     ・[37540] yu 
     ・[37541] nayo 
     ・[37546] GPGA 
     ・[37550] Trx 
   画像表示について   
     ・[37543] ねこ 
     ・[37545] 華穂 
   万年カレンダー   
     ・[37517] ねこ 
     ・[37520] アイリ 
     ・[37522] ねこ 
     ・[37523] box 
     ・[37525] ねこ 
     ・[37528] アイリ 
     ・[37530] sizuma 
     ・[37531] アイリ 
     ・[37533] ねこ 
   レゴのロボット   
     ・[37424] やそ 
     ・[37521] 刻の旅人 
     ・[37529] 通りすがり 
   無題   
     ・[37461] kazuoni 
     ・[37468] C言語初心者 
     ・[37469] Tororo 
     ・[37472] non 
     ・[37473] kazuoni 
     ・[37474] non 
     ・[37475] kazuoni 
     ・[37476] C言語初心者 
     ・[37478] non 
     ・[37479] C言語初心者 
     ・[37487] non 
     ・[37518] C言語初心者 
   loding画像について   
     ・[37481] DVDM 
     ・[37482] Justy 
     ・[37516] siratomi 
   3D背景について   
     ・[37385] yu 
     ・[37388] あ〜る 
     ・[37471] あ〜る 
     ・[37484] Justy 
     ・[37489] あ〜る 
     ・[37490] ねこ 
     ・[37514] あ〜る 
   マップチップのきれい ....   
     ・[37493] LUNA 
     ・[37494] LUNA 
     ・[37495] LUNA 
     ・[37496] LUNA 
     ・[37497] LUNA 
     ・[37498] LUNA 
     ・[37499] LUNA 
     ・[37501] LUNA 
     ・[37502] LUNA 
     ・[37503] LUNA 
     ・[37504] LUNA 
     ・[37505] LUNA 
     ・[37506] LUNA 
     ・[37507] LUNA 
     ・[37508] ねこ 
     ・[37510] LUNA 
     ・[37512] ねこ 
     ・[37513] LUNA 
   文字がうまく表示され ....   
     ・[37477] conio 
     ・[37500] アトラス 
   画像が表示できません ....   
     ・[37453] ねこ 
     ・[37454] 美月 
     ・[37457] 美月 
     ・[37458] やそ 
     ・[37459] やそ 
     ・[37464] 美月 
     ・[37466] 美月 
   ポインタの初期化につ ....   
     ・[37449] kazuoni 
     ・[37450] チルチル 
     ・[37452] ねこ 
     ・[37455] チルチル 
     ・[37460] ねこ 
     ・[37462] kazuoni 
     ・[37465] チルチル 
   std::bad_allocについ ....   
     ・[37358] 御津凪 
     ・[37382] MNS 
     ・[37393] 御津凪 
     ・[37412] Justy 
     ・[37463] MNS 
   関数呼び出し   
     ・[37436] ねこ 
     ・[37437] non 
     ・[37446] kamiya 
   魔方陣を回しながら、 ....   
     ・[37414] DVDM 
     ・[37416] 素人 
     ・[37418] DVDM 
     ・[37420] 素人 
     ・[37421] ねこ 
     ・[37423] pooka 
     ・[37439] 素人 
   大学や仕事で使うコン ....   
     ・[37351] ランド 
     ・[37352] ターボ 
     ・[37353] バグ 
     ・[37357] やそ 
     ・[37360] バグ 
     ・[37362] ねこ 
     ・[37365] ターボ 
     ・[37367] ターボ 
     ・[37415] ターボ 
   魔方陣の大きさを一定 ....   
     ・[37369] 素人 
     ・[37370] yu 
     ・[37375] 素人 
     ・[37399] yu 
     ・[37402] 素人 
     ・[37406] yu 
     ・[37409] yu 
     ・[37411] 素人 
   画像の表示について   
     ・[37240] Justy 
     ・[37404] 茶くれ爺 
     ・[37410] Justy 
   グレイズについて   
     ・[37337] nayo 
     ・[37389] スペルヴォ 
     ・[37390] @ 
     ・[37408] pooka 
   ゆらゆらとした背景   
     ・[37405] チルチル 
     ・[37407] Justy 
   敵キャラの動き2   
     ・[37372] ねこ 
     ・[37374] 華穂 
     ・[37377] 華穂 
     ・[37383] ねこ 
     ・[37384] 華穂 
     ・[37386] TRUTH 
     ・[37397] 華穂 
   ボスと敵の当たり判定   
     ・[37195] TRUTH 
     ・[37292] けいすけ 
     ・[37293] yu 
     ・[37391] けいすけ 
   みなさんでたくさんの ....   
     ・[35820] たかぎ 
     ・[35850] situmon 
     ・[35868] チルチル 
     ・[35966] situmon 
     ・[35968] バグ 
     ・[35969] Dixq (管理人) 
     ・[35972] yu 
     ・[35979] チルチル 
     ・[36007] TKOZ 
     ・[36022] やっくん 
     ・[36033] TKOZ 
     ・[36050] 御津凪 
     ・[36064] TKOZ 
     ・[36082] 幽蛙 
     ・[36138] situmon 
     ・[36144] チルチル 
     ・[36145] チルチル 
     ・[36151] あ〜る 
     ・[36166] Dixq (管理人) 
     ・[36250] situmon 
     ・[36253] situmon 
     ・[36271] tkmakwins15 
     ・[36273] DVDM 
     ・[36313] situmon 
     ・[36325] DVDM 
     ・[36398] situmon 
     ・[36538] situmon 
     ・[36542] 御津凪 
     ・[36586] TKOZ 
     ・[36631] situmon 
     ・[36633] TKOZ 
     ・[36757] TKOZ 
     ・[36760] TKOZ 
     ・[36801] TKOZ 
     ・[36826] situmon 
     ・[36827] situmon 
     ・[36835] 御津凪 
     ・[36905] TKOZ 
     ・[36913] situmon 
     ・[36914] チルチル 
     ・[36917] チルチル 
     ・[37081] situmon 
     ・[37203] situmon 
     ・[37368] TKOZ 
     ・[37378] situmon 
   残機の減らし方   
     ・[37212] ねこ 
     ・[37359] ミトリ 
     ・[37363] YuO 
     ・[37364] ねこ 
   整数値を数字文字に変 ....   
     ・[37342] non 
     ・[37344] toyo 
     ・[37349] takashi 
   queueとlist   
     ・[37345] ねこ 
     ・[37347] blackman 
     ・[37348] ねこ 
   C言語〜プログラミング ....   
     ・[37018] lbfuvab 
     ・[37019] 256bit 
     ・[37020] lbfuvab 
     ・[37021] array 
     ・[37022] 256bit 
     ・[37034] lbfuvab 
     ・[37044] 256bit 
     ・[37059] lbfuvab 
     ・[37339] 256bit 
     ・[37340] 256bit 
   アニメーション描画   
     ・[37316] バグ 
     ・[37318] kms 
     ・[37320] バグ 
     ・[37326] TRUTH 
     ・[37327] バグ 
     ・[37338] kms 
   敵キャラの動きについ ....   
     ・[37322] situmon 
     ・[37323] nayo 
     ・[37325] 華穂 
   弾幕などの質問   
     ・[37069] TRUTH 
     ・[37319] エデリュス 
   32章にて   
     ・[37062] Justy 
     ・[37180] スペルヴォ 
     ・[37317] スペルヴォ 
   シューティングゲーム ....   
     ・[37206] ねこ 
     ・[37208] situmon 
     ・[37211] ねこ 
     ・[37214] situmon 
     ・[37216] TRUTH 
     ・[37220] TRUTH 
     ・[37221] situmon 
     ・[37315] situmon 
   不規則移動の処理   
     ・[37271] 御津凪 
     ・[37313] チルチル 
   変数の宣言効率と有効 ....   
     ・[37255] sizuma 
     ・[37263] たかぎ 
     ・[37272] sizuma 
     ・[37278] Kou 
     ・[37294] たかぎ 
     ・[37312] Kou 
   ポインタについて   
     ・[37305] たかぎ 
     ・[37307] チャッカマン 
     ・[37308] sizuma 
     ・[37311] non 

Name:  ..ぴよぴよ(165ポイント)   Date: 2009/08/02(日) 00:07   No:37578       
Title: 60章について    
3Dの勉強してるのですが、
60章のプログラムで画像が移動する速度を制御してる部分の
プログラムはどこの部分なのでしょうか?
早くしたり遅くしたりしてみたいのですが
場所が分からないです。誰か教えてください><


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


Name: Justy  ..伝説なるハッカー(397,306ポイント)   Date: 2009/08/02(日) 00:58   No:37589     
Title: Re:60章について    

>画像が移動する速度を制御してる部分

 何の画像ですか?
 プレイヤー? 弾? エネミー? エフェクト? ...etc


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

Name: @  ..ぴよぴよ(58ポイント)   Date: 2009/08/02(日) 02:01   No:37593     
Title: Re:60章について    
床と壁と桜の木の画像です。
奥から手前にフェードアウトしていくまでの速さのプログラムです


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

Name: Justy  ..伝説なるハッカー(398,215ポイント)   Date: 2009/08/02(日) 02:23   No:37594     
Title: Re:60章について    

>床と壁と桜の木の画像です

 把握しました。
 それは "3Dbackground.cpp"の 118行目、

Object[t].ObChild[s].z-=3;

 の .zに対して減算している値 3がそうです。

 ちなみに加算すると、移動方向が反転して、床や壁が奥に向かう(プレイヤーが後退する)
ようになります。
 


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

Name:  ..ぴよぴよ(198ポイント)   Date: 2009/08/02(日) 16:17   No:37619 解決!     
Title: Re:60章について    
Justyさんのおかげで無事できました!
ありがとうございます!


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



Name: array [URL]  ..熟練のプログラマー(52,865ポイント)   Date: 2009/08/02(日) 00:38   No:37586       
Title: クラス内のコンストラクタの引数ありの場合    
言語はC++使い、Microsoft Visual C++を使用しています。

コンストラクタに引数を持たせ場合、他のクラスでインスタンス化する際どの様に書けば良いか分かりません。


例)

// 使いたいクラス
class CTest
{
public:
CTest(); // 引数なしのコンストラクタ
CTest( int num1, int num2 ); // 引数のあるコンストラクタ
};


//
class CCall
{
CTest test; // 引数なしでは定義できる
CTest test2( 10, 200 ); // 引数ありだと定義ができない(1)
};




質問の仕方が下手で申し訳ありませんが、意図が分からない部分があれば追記します。

(1)の書き方は構文エラーとなるので、どの様に書けば良いのか困っています。

一応私の分かる範囲だと、(1)は宣言部となるのでCTestを戻り値とした、test2という関数という形でコンパイラに認識されているのかな・・・と思ってます。
(1)の書き方は、実行部で使えば、エラーを出さずインスタンス化できます。


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


Name: たかぎ [URL]  ..ハッカー(109,832ポイント)   Date: 2009/08/02(日) 00:51   No:37587     
Title: Re:クラス内のコンストラクタの引数ありの場合    
こんな感じです。

class CCall
{
CTest test2;
public:
CCall() : test2(10, 200) {} // コンストラクタで「メンバ初期化子」を指定する。
};


部分オブジェクトの初期化順序については、タイムリーにもつい何日か前にブログに書いたので、下記を参照してください。
http://www.kijineko.co.jp/node/557


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

Name: kaiten  ..初心者(8,948ポイント)   Date: 2009/08/02(日) 00:51   No:37588     
Title: Re:クラス内のコンストラクタの引数ありの場合    
意図があってるか不安ですが……


class CCall

{

CTest test; // 引数なしでは定義できる
public:
CCall() : test( 10 , 200 )
{}

};

といった感じでCCallの初期化子リストで初期化してやればいいのではないでしょうか?


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

Name: array [URL]  ..熟練のプログラマー(53,437ポイント)   Date: 2009/08/02(日) 01:24   No:37590 解決!     
Title: Re:クラス内のコンストラクタの引数ありの場合    
たかぎさん、kaitenさんありがとうございます。

たかぎさんのブログは不定期ですが読ませてもらってます(この場をお借りして少しだけ)。
私はプログラムのマニアックな話を特に興味を持って読ませてもらってます。
前の記事で「 とりあえず memset で初期化 」は印象に残っていたりします。


質問の方は解決しました。

一応結果として、質問の方が不十分だった点も含めて結果を書いておきます。
不十分だった点は、コンストラクタがすでに定義されている場合です。

例)

// 使いたいクラス
class CTest
{
public:
CTest(); // 引数なしのコンストラクタ
CTest( int num1, int num2 ); // 引数のあるコンストラクタ
};


//
class CCall
{
CTest test; // 引数なしでは定義できる
CTest test2( 10, 200 ); // 引数ありだと定義ができない(1)
public:
CCall(); // 他で構文
};

CCall::CCall() : test( 20, 30 ) // 引数ありの方で定義される
{
}




この様な形にすることでコンパイルが通ったので、ちゃんと実行されているかも含めて確認してみます。


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

Name: バグ  ..ハッカー(163,961ポイント)   Date: 2009/08/02(日) 12:29   No:37607     
Title: Re:クラス内のコンストラクタの引数ありの場合    
別のアプローチとして、コンストラクタ内で、newで動的に生成するというのはどうでしょうか?(^_^;)

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

Name: array [URL]  ..熟練のプログラマー(53,782ポイント)   Date: 2009/08/02(日) 13:06   No:37608     
Title: Re:クラス内のコンストラクタの引数ありの場合    
バグさん貴重なご意見ありがとうございます^^

newで生成する方法は、今回のこの方法で出来なかった場合の最終手段にしようと考えてました。
理由はdeleteを行わなければいけないので、プログラムが途中で強制終了された際、メモリが残ったままになるのか分からなかったからです。

その辺りは例外処理を加えて開放してあげれば問題ないのかもしれませんがあまり分かっていないのでとりあえず、可能な限りnewは使わない方向でプログラミングしています。

ただ、今回の引数ありが何個か存在する場合、見た目が綺麗でないのであまり気に入っていないので最終的にnewを使う方向になるかもしれませんが^^;


例)
// 引数ありの方で複数定義される
CCall::CCall() : test( 20, 30 ), test2(10,30), ...
{
}


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

Name: たかぎ [URL]  ..ハッカー(109,889ポイント)   Date: 2009/08/02(日) 14:03   No:37610     
Title: Re:クラス内のコンストラクタの引数ありの場合    
> ただ、今回の引数ありが何個か存在する場合、見た目が綺麗でないのであまり気に入っていないので最終的にnewを使う方向になるかもしれませんが^^;

いや、new を使っても奇麗にはなりませんよ。

CCall::CCall() : test(0), test2(0)
{
try
{
test = new CTest(20, 30);
test2 = new CTest(10, 30);
}
catch (...)
{
delete test;
delete test2;
throw;
}
}


↑のようにするか、std::auto_ptrなどを使うしかないわけで、さらに、デストラクタやコピーコンストラクタや代入演算子も定義しなければならなくなります。
手間は増えますし、どちらかというと汚くなると思いますが...


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

Name: array [URL]  ..熟練のプログラマー(53,965ポイント)   Date: 2009/08/02(日) 14:49   No:37614     
Title: Re:クラス内のコンストラクタの引数ありの場合    
例外が入ってませんが、個人的には下の形の方が綺麗に見えると思っています。
というのも、今まで関数名の横に、「 CCall::CCall() : test(0), test2(0), 〜 」というような形を見たことが無かったからなんですが・・・


// 使いたいクラス
class CTest
{
public:
CTest( int num1, int num2 ); // 引数のあるコンストラクタ
};


//
class CCall
{
CTest *test; // ポインタを用意
CTest *test2;
public:
CCall(); // コンストラクタ
~CCall(); // デストラクタ
};

// コンストラクタ
CCall::CCall()
{
test = new CTest(20, 30);
test2 = new CTest(20, 30);
}

// デストラクタ
CCall::~CCall()
{
delete test;
delete test2;
}


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

Name: たかぎ [URL]  ..ハッカー(109,959ポイント)   Date: 2009/08/02(日) 15:21   No:37616     
Title: Re:クラス内のコンストラクタの引数ありの場合    
> 例外が入ってませんが、

コンストラクタで複数のオブジェクトを動的に生成する場合は、必ず適切に例外処理を行わなければなりません。
そうでなければ、testの生成に成功した後、test2の生成に失敗して例外が送出されると、testがリークしてしまいます。


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

Name: array [URL]  ..熟練のプログラマー(54,016ポイント)   Date: 2009/08/02(日) 15:32   No:37617     
Title: Re:クラス内のコンストラクタの引数ありの場合    
なるほど、やはり動的に確保する場合は細心の注意が必要なんですね。

今後newを使う場合は、No:37610を参考に例外をきちんと入れるようにします^^


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



Name: trx  ..ぴよぴよ(973ポイント)   Date: 2009/08/02(日) 06:14   No:37595       
Title: 配列すべて選択    
DX_LIB を使って、電子ピアノソフトを作ろうとしています。鍵盤の音は、配列を使っています。鍵盤の音量を変えるために、関数ChangeVolumeSoundMemを使っています。http://homepage2.nifty.com/natupaji/DxLib/dxfunc.html#R5N2 で紹介されているサンプルプログラムでは、一つの音声データの音量を変えているだけです。一遍に、配列のデータすべての音量を変える方法を、教えてください。それと、配列すべてを、選択する方法も教えてください。

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


Name: Justy  ..伝説なるハッカー(398,590ポイント)   Date: 2009/08/02(日) 14:09   No:37612     
Title: Re:配列すべて選択    

>一遍に、配列のデータすべての音量を変える方法を

 一つの音声データの音量が変えられるなら、それを配列全てに対して行うだけです。

 普通にforで配列の要素数分回して、全ての要素に対し音量を変更するような、
音量を引数にとる関数を用意すれば使うときに楽になります。


 それが面倒なら

waveOutSetVolume
ttp://msdn.microsoft.com/ja-jp/library/cc428831.aspx

ウェーブ オーディオ ボリューム コントロール API の使用方法
ttp://support.microsoft.com/kb/139098/ja

とか

ミキサー その1(音量の調節)
ttp://hp.vector.co.jp/authors/VA016117/mixer1.html

とかを参考にして大元のボリュームを変更してしまうのも手です。



>配列すべてを、選択する方法も教えてください

 配列を選択ですか?
 意味がよくわからないのですが……。


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

Name: trx  ..かけだし(1,139ポイント)   Date: 2009/08/02(日) 15:02   No:37615 解決!     
Title: Re:配列すべて選択    
配列すべてを、選択する方法も教えてください
と言うのは、たとえば...
int a[10]
と言う配列の、
a[0]〜a[9]
と言うのをすべて楽に表す方法を聞きたかったのです。(a[0], a[1], a[2]... a[9]と言うのを楽に、すべて表示すると言うことです)
でも大体解りました。
有難うございました。


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



Name: kawa  ..ぴよぴよ(126ポイント)   Date: 2009/08/02(日) 14:31   No:37613       
Title: devpartner profiler community edition    
Visual Studio 2005 Professional EditionでC++で作成したプログラムのプロファイルを行おうと思い検索したところ、devpartner profiler community editionという無償で配布されているプロファイラがあることを知りました。
インストールして「Start Without Debugging with Performance Analysis」をクリックしたところ、以下の文章が表示されましたが、プログラムの実行が終了してもいっこうに分析結果が表示されません。
「Visual Studio 2005 Professional Edition」と「.NET Framework 2.0 Service Pack 1」をインストールしあれば使用可能みたいなのですが…。
分析結果を表示するためにはどうしたら良いかわかる方がいましたら教えてください。

C言語ではなくC++の質問になってしまい申し訳ありませんがよろしくお願いします。

------ DevPartner analysis starting session ------

Initializing process monitoring...


------ Session started ------



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




Name: Dixq (管理人) [URL]  ..ウィザード(1,046,637ポイント)   Date: 2009/08/01(土) 23:12   No:37569       
Title: 一日アクセス出来なかったお詫び    
昨日の夜から今までこのHPにアクセス出来ませんでした。
このHPをご覧下さっている方には大変ご迷惑をおかけしました。

今日は休日ですが、ずっと会社の用事で朝から今まで出ていたので、対応が遅くなってしまいました(汗
(今日は松本ぼんぼんというお祭りで3時間踊り続けましたよ(ノ▽`)ノ)

無事復旧できたのでお知らせします。
また、サーバーは引越ししようと思うので、その時は何かとお世話になるかもしれませんが・・よろしくお願いしますm(_ _)m


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


Name: situmon  ..プログラマー(36,790ポイント)   Date: 2009/08/01(土) 23:17   No:37571     
Title: Re:一日アクセス出来なかったお詫び    
アクセスできなくてまってました。
でもできてよかったです。
これからもがんばってください。
いつもこのサイトを見ています。


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

Name: すずめ  ..入門者(3,860ポイント)   Date: 2009/08/01(土) 23:32   No:37572     
Title: Re:一日アクセス出来なかったお詫び    
毎日掲示板を見るのが楽しみだったので
ちょっと心配していましたが、無事つながって
よかったです。

たいへんでもこれからもずっと続けてください。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,046,892ポイント)   Date: 2009/08/02(日) 09:10   No:37597     
Title: Re:一日アクセス出来なかったお詫び    
>>situmonさん
>>すずめさん

ご迷惑をおかけしました。
サーバーは新しいものに変更しようと思います。
ありがとうございます。


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

Name: Tororo  ..ぴよぴよ(105ポイント)   Date: 2009/08/02(日) 10:39   No:37599     
Title: Re:一日アクセス出来なかったお詫び    
Dixqサンに何かあったのかと思いましたが
直ってよかったです


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

Name: TRUTH  ..中級者(12,413ポイント)   Date: 2009/08/02(日) 11:32   No:37602     
Title: Re:一日アクセス出来なかったお詫び    
はじめまして。復旧したようで安心しました
自分も同じく掲示板を見るのが楽しみで、日課になっています。

大変だと思いますが、頑張ってください。


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

Name: 御津凪 [URL]  ..ハッカー(108,502ポイント)   Date: 2009/08/02(日) 14:03   No:37611     
Title: Re:一日アクセス出来なかったお詫び    
掲示板のチェックにはRSSを使ってて、サイトのほうにアクセス出来なかったのには気づいていませんでした。
昨日の掲示板に投稿がほとんど無かったのはそのせいだったんですね。


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



Name: Dixq (管理人) [URL]  ..ウィザード(1,045,488ポイント)   Date: 2009/07/26(日) 22:23   No:37334       
Title: 新しいサーバーへ移行のお知らせ    
以前から発生しているIE等一部の環境でファイルが正常にDL出来ないトラブルについて、
解決しないので、新しいサーバーへ移行することになりました。
(サイトのURLなどはそのままですので、ご覧下さっている方に何かして頂く必要はございません)

現在新しいレンタルサーバー会社に契約し、
新しく確保したサーバースペースに現在のHPと同じ内容をアップし、
DNSサーバーの変更申し込みをしたところです。
数日中に変更が完了するようです。

DNSサーバーの変更申し込みは初めてで、うまく行くか不安です;
万が一HPにアクセスできないようなことが起きたら設定ミスだと思うので、その時はしばらくお待ち下さい(汗

また、現在トップページ http://dixq.net/index.html の一番下に「引越し前サーバー」と書いています。
(F5で更新しないと表示されないかもしれません)
これが「引越し後、新サーバー」と表示が変わったら変更が完了した証拠です。

そこで、お願いなのですが、環境によりDLがきちんと行われないトラブルが、引越し後で起きないことを確認したいので、
もしお暇な方がいらっしゃいましたら、
皆様の環境で何かファイルをDLされて、ファイルが壊れることなく正常にDL出来るか確認していただけないでしょうか?
現在最も中身のファイルが多いZipファイルは龍神録プログラミングの館の一括DLできるファイルだと思います。
http://dixq.net/rp/zip/project.zip

また、何かファイルがアップミスされているなど、何か不具合を見つけられましたら、報告頂けると有り難く思います。
お世話になります。よろしくお願いしますm(_ _)m


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


Name: ひよこ  ..熟練のプログラマー(47,635ポイント)   Date: 2009/07/27(月) 09:22   No:37346     
Title: Re:新しいサーバーへ移行のお知らせ    
報告です。昔は失敗がありましたけど
龍神録の一括ダウンロードが一発で成功しました。


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

Name: sizuma [URL]  ..中級者(11,454ポイント)   Date: 2009/07/27(月) 17:16   No:37373     
Title: Re:新しいサーバーへ移行のお知らせ    
管理人様、はじめまして。
いつも勉強させて頂いてます


移行お疲れ様です。
Windows Firefox
問題なくDL出来ました。
八月中は時間があるので、サイトを見て不具合アップミス等なにか発見したら報告します
それでは。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,045,638ポイント)   Date: 2009/07/27(月) 21:12   No:37392     
Title: Re:新しいサーバーへ移行のお知らせ    
ひよこさん、sizumaさん、お忙しい中DLテストをして頂きありがとうございます。
こちらでも試したところ問題なさそうです。
ただし、DL速度が異様に遅い気が・・。
こちらの環境だと光なので普段2〜3MB/秒位出るのに、このサーバーだと300KB/秒位しか出ませんでした。
DLの速さの違いなどは無かったでしょうか・・?


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

Name: 御津凪 [URL]  ..ハッカー(108,080ポイント)   Date: 2009/07/27(月) 21:18   No:37394     
Title: Re:新しいサーバーへ移行のお知らせ    
> こちらの環境だと光なので普段2〜3MB/秒位出るのに、このサーバーだと300KB/秒位しか出ませんでした。

ついさっきこちらで試したところ、1.1〜1.3MB/秒でした。(project.zip、Firefox 3.5.1)

移行したサーバーは共用サーバーですし、時間によって差があるのかもしれませんね。


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

Name: situmon  ..プログラマー(36,616ポイント)   Date: 2009/07/27(月) 21:21   No:37396     
Title: Re:新しいサーバーへ移行のお知らせ    
管理人様へ
ダウンロードできました。
環境は
Windows Vista

Fire Fox
です。
すべて開いてはいませんが、
フォルダが一通りそろっているようなので問題ないかと・・・


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

Name: array [URL]  ..熟練のプログラマー(52,242ポイント)   Date: 2009/07/27(月) 22:34   No:37398     
Title: Re:新しいサーバーへ移行のお知らせ    
私の環境は光で800KB/秒でした。

普段から1MB付近なので速度が遅いとは感じませんでした


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

Name: yu  ..プログラマー(37,144ポイント)   Date: 2009/07/27(月) 23:04   No:37400     
Title: Re:新しいサーバーへ移行のお知らせ    
Internet Explorer 8.0
Windows Vista

問題無くダウンロードできました〜
速度は 100KB/秒 で、いつもと対して変わりませんでした
( 光ですが、無線LANと結構離れていますので... )


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,045,754ポイント)   Date: 2009/07/28(火) 06:19   No:37417     
Title: Re:新しいサーバーへ移行のお知らせ    
>御津凪さん
>situmonさん
>arrayさん
>yuさん

皆様、確認して頂きありがとうございます^^
とりあえず、正常にDLされることについては安心できそうですね。
今のところ、DL速度より、安定性を重視したいので、一応これでよかったと思います。
DL速度についてはまた追々考えていこうと思います☆


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

Name: 御津凪 [URL]  ..ハッカー(108,049ポイント)   Date: 2009/07/31(金) 01:27   No:37532     
Title: Re:新しいサーバーへ移行のお知らせ    
つい先ほど気づいたのですが、
アンケートページが見れませんので報告しておきます。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,046,059ポイント)   Date: 2009/07/31(金) 19:34   No:37556     
Title: Re:新しいサーバーへ移行のお知らせ    
ありがとうございます。
そうなんですよね。
ここのサーバーはCgiがおけるフォルダが別になっていたり、
実行する為の設定をしたりしないといけないようです。
なんだかんだでやたら制約がおおいのですが、ちゃんとしたマニュアルが無い!
「解らなかったらサポートで聞いて下さい」と書いてあり、
どうしたらいいのか明確にわかりません・・。
転送速度は遅いし、わかりにくいし、ここはよくありませんでした・・。

しかも、何故か現在アクセスできないし><
早急になんとかしようと思いますが、明日土曜日も一日中家にいないので、いつ直せるかわからない状態です(汗


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

Name: たかぎ [URL]  ..ハッカー(109,367ポイント)   Date: 2009/07/31(金) 20:40   No:37557     
Title: Re:新しいサーバーへ移行のお知らせ    
> 転送速度は遅いし、わかりにくいし、ここはよくありませんでした・・。

せめて事前に相談してもらえれば...
間違いなくハズレなので、次の契約の切れ目で引っ越しした方がよいかもしれません。


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

Name: toyo  ..プログラマー(39,964ポイント)   Date: 2009/08/01(土) 08:43   No:37559     
Title: Re:新しいサーバーへ移行のお知らせ    
Internal Server Errorですか
自分で.htaccessとか置いてなったわけじゃないんですよね
それならクレームつけて解約してもいいのでは


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

Name: Dixq (管理人)  ..ウィザード(1,046,141ポイント)   Date: 2009/08/01(土) 10:43   No:37560     
Title: Re:新しいサーバーへ移行のお知らせ    
サポートからそのファイルを置くように言われたので一度置いたんです‥。
サイトが見れなくなったのでそのファイルを削除したのですが‥。
原因や対策を調べる時間がないのでこのままになってしまってます;
サポートからも返事がないです‥。
今携帯なのですが、帰宅したらどうしたらいいでしょう?


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

Name: toyo  ..熟練のプログラマー(40,040ポイント)   Date: 2009/08/01(土) 12:26   No:37561     
Title: Re:新しいサーバーへ移行のお知らせ    
.htaccessが削除されてないのでは
ドットファイルだと表示されなかったりするので存在に気づかない場合もあります
私もWindows用の改行コードのまま.htaccessをアップしてエラーになったことがあります


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,046,471ポイント)   Date: 2009/08/01(土) 23:09   No:37568     
Title: Re:新しいサーバーへ移行のお知らせ    
>toyoさん

ご指摘ありがとうございます。
仰るとおり消せていませんでした(汗
なるほど、windows用の改行コードではダメなんですね・・。
サポートで言われたとおりにしたのに、そんなこと位一緒にアドバイスしてくれてもいいと思いますねホント・・。
このサーバーは変えようと思います。
助言ありがとうございます。

>たかぎさん

ありがとうございます。
たかぎさんお聞きすると完璧かつ高価なサーバーを紹介して頂けそうな気が^^;
そこまで高機能なサーバーは必要なく、CGIが使えて安定していて容量が3G位あればそれでいいんですが、
それ位でいいサーバーどこかありますでしょうか?
ついでにいうと、転送量無制限だとありがたいです。


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

Name: たかぎ [URL]  ..ハッカー(109,571ポイント)   Date: 2009/08/01(土) 23:55   No:37577     
Title: Re:新しいサーバーへ移行のお知らせ    
> たかぎさんお聞きすると完璧かつ高価なサーバーを紹介して頂けそうな気が^^;

完璧なところというのはありません。何億円かけようと落ちるときは落ちますから。

> そこまで高機能なサーバーは必要なく、CGIが使えて安定していて容量が3G位あればそれでいいんですが、
> それ位でいいサーバーどこかありますでしょうか?
> ついでにいうと、転送量無制限だとありがたいです。

そんなに高いところを勧めても仕方がないので、さくらのレンタルサーバーあたりでどうでしょうか?
スタンダードプランなら年5,000円(+初期費用1,000円)です。
容量が増えてくる場合は、別のサーバーを併用する方がプレミアムプランを借りるより安上がりです。

転送量については特に規定はありませんが、スタンダードプランで10GB/日、プレミアムプランで30GB/日が目安のようです。
ただし、ごく短時間にアクセスが集中する場合は警告を受ける可能性はあります。


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

Name: array [URL]  ..熟練のプログラマー(52,575ポイント)   Date: 2009/08/02(日) 00:11   No:37581     
Title: Re:新しいサーバーへ移行のお知らせ    
私も、さくらさんのレンタルサーバーの評判は良い方で知っているので良いと思いますよ

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

Name: Dixq (管理人) [URL]  ..ウィザード(1,046,855ポイント)   Date: 2009/08/02(日) 09:00   No:37596     
Title: Re:新しいサーバーへ移行のお知らせ    
>たかぎさん
>arrayさん

ありがとうございます^^
早速さくらのレンタルサーバー一年間契約しました。
これで安心してやっていけそうです。
今週末には反映される形にしたいと思います。
ご紹介ありがとうございました^^


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



Name: ボブ  ..ぴよぴよ(240ポイント)   Date: 2009/07/30(木) 02:01   No:37483       
Title: 重なってる物から離れたという事を判定したいのですが。。    
はじめまして。ボブです。宜しくお願いします。

現在ボンバーマン風のゲームを作っています。
キャラクターが爆弾を出して、その爆弾は以後通り抜けできない障害物として処理したいのです。

前に爆弾があって進めないという判定をピタゴラスの定理を使ってやっています。

しかし、爆弾を出す際は、キャラクターが爆弾の上に重なってるので、↑のピタゴラスの定理を使った進めない判定の処理をした場合動けなくなってしまうので、置いたときにはその処理は行わないようにフラグを立てて、爆弾上に重なってても動けるようにしてます。

そこで、「爆弾を出してから キャラクターが爆弾上から離れた」という判定を行い ↑のフラグを消して、以後は障害物として扱おうと考えています。
しかし、「キャラクターが爆弾上から離れた」という判定の方法がなかなか 思いつきません。

何かいい判定方法はないでしょうか?


 


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


Name: Justy  ..伝説なるハッカー(397,247ポイント)   Date: 2009/07/30(木) 02:33   No:37485     
Title: Re:重なってる物から離れたという事を判定したいのですが。。    

>「キャラクターが爆弾上から離れた」という判定の方法がなかなか

 進めない判定の場合は爆弾との距離がある値より小さければ進めない、というような感じで
行っているわけですよね?

 であれば離れた判定は爆弾と重なっている時は一定の距離より小さいけど
離れれば一定の距離より大きくなるはずなのでそれを利用すれば判るのではないでしょうか。


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

Name: ひよこ  ..熟練のプログラマー(47,673ポイント)   Date: 2009/07/30(木) 08:25   No:37486     
Title: Re:重なってる物から離れたという事を判定したいのですが。。    
マップチップのように扱うのはどうですか?
マップは
0が壁
1が床
2が爆弾
で動く時に向きを見て1マス先に爆弾や壁がなかったら移動っていうのはどうでしょう。


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

Name: ねこ  ..プログラマー(32,816ポイント)   Date: 2009/07/30(木) 09:14   No:37488     
Title: Re:重なってる物から離れたという事を判定したいのですが。。    
単純に自身の座標との当たり判定を行わないのが良いんじゃないでしょうか。

マップチップとしても、動的オブジェクト配置にしていても結局自身の座標は「自分が居る以上歩行可能」として扱っているわけなので、爆弾を置いた際もチェックの必要がありません。

自身の座標が切り替わる(恐らく爆弾形状半分以上超えた)場合、それ以降戻ることが出来なくなります。
そのタイミングを完全に爆弾と重ならない状態になったら、というのだと少し工夫が必要になりますね。
接触判定に「既に接触状態(めり込んでいる状態)だったら」という分岐を作るのが無難じゃないかと。


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

Name: 初心者さんです  ..かけだし(1,256ポイント)   Date: 2009/07/30(木) 11:13   No:37491     
Title: Re:重なってる物から離れたという事を判定したいのですが。。    
ピタゴラスの定理をお使いになっているのであれば
ゲームプログラミングの館のs11章のように

range = 自機範囲 + 爆弾の障害物範囲;
x = 自機.x - 爆弾.x;
y = 自機.y - 爆弾.y;
当たり判定:x^2 + y^2 < range^2 には行けなぃ(接触は出来なぃ)

のような形で判定されているのではなぃかと思います

ここでご質問にあるような状態はJusty様の云われるような一定の距離より大きくなる瞬間
つまり爆弾とキャラが接触から隣接状態への移行の瞬間ですので

x^2 + y^2 = range^2 となった瞬間
(もしくは x^2 + y^2 < range^2 から初めて x^2 + y^2 >= range^2 になった瞬間)
にフラグを消してあげればいいのではなぃでしょうか?



※ここからは蛇足
上記のフラグで気になる点がありましたので列記してみます
・モンスターや2P側も爆弾設置フラグが消えるまではすり抜け可能になるかも
・モンスターや2P側と爆弾を一部重ねて設置できると相手は動けなくなるかも
・モンスターや2P側と極近い距離の時に、
 爆弾設置(二人とも重なる)→自分だけ逃げる(爆弾の移動禁止判定が復活する)→相手だけ爆弾に重なって動けなくなるかも


フラグ以外にも
x^2 + y^2 < range^2 の当たり判定を少し移項して
0(完全に重なった状態) < (x^2 + y^2) / range^2 < 1(隣接した状態) なら接触
1(隣接した状態) <= (x^2 + y^2) / range^2 なら問題無し
ただし離れる方向(0から1の方向、つまり+方向)には接触中も移動可能と切り替えてみる方法も出来るかもしれません
(引き返すことが出来なぃ判定にはなってしまいますが…)

ただし上記の回答は龍神録のように自由な移動及び自由な爆弾の設置が可能なボンバーマンを想定したものです
情報がありませんので分かりませんが、マップチップ単位で爆弾の設置が出来る一般的(?)なボンバーマンでしたら、
ひよこ様やねこ様の仰られているような方法の方がシンプルだと思います


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

Name: nayo  ..中級者(12,035ポイント)   Date: 2009/07/30(木) 16:14   No:37511     
Title: Re:重なってる物から離れたという事を判定したいのですが。。    
私がボンバーマンを作った時はマップ側に情報を持たせていましたね
マップ用の変数(配列)の下位数bitをデフォルトのマス情報、その他bitを爆風があるか、爆弾が置いてあるか、キャラクターがいるか、
などのフラグとして使用していました
これが良いというわけではありませんがそれほど厳密に爆弾や障害物との当たり判定を求める必要はないかな、と思います


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

Name: ボブ  ..ぴよぴよ(348ポイント)   Date: 2009/08/02(日) 01:41   No:37592 解決!     
Title: Re:重なってる物から離れたという事を判定したいのですが。。    
沢山の返信ありがとうございます。遅くなってすみませんでした。


マップ側に情報をもたせるというのが、一番やりやすそうなので、マップ側に情報を持たせて見ようと思います。

Justyさん、ねこさん、ひよこさん、初心者ですさん、nayoさん、ありがとうございました。


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



Name: 静波  ..かけだし(1,359ポイント)   Date: 2009/08/01(土) 21:14   No:37563       
Title: 無題    
いまからメールソフトを作成しようと思っていますが、メールサーバーへ繋げる方法がわかりません・・・・

なにかメールサーバーへ繋げる関数はあるのでしょうか?


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


Name: Q  ..ぴよぴよ(815ポイント)   Date: 2009/08/01(土) 21:37   No:37565     
Title: 何でタイトルとか環境とか書かないの?    
環境によっては違いますが、ネットワークをサポートする
環境なら普通のTCP/IPの接続関数で接続できます。



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

Name: 静波  ..かけだし(1,454ポイント)   Date: 2009/08/01(土) 22:31   No:37566     
Title: すみません。わすれてました。    
TCP/IPというのはC言語の標準関数に用意されているのでしょうか?

少し自分なりに調べてみたのですが、ソケットというものはサーバーへ繋げるものでは
ないのでしょうか?


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

Name: バグ  ..ハッカー(163,838ポイント)   Date: 2009/08/01(土) 22:52   No:37567     
Title: Re:無題    
標準関数にはありません。
開発環境にもよりけりなので、開発環境を書いていただければ、よりよい回答を得られるかもしれませんね。
.NETが使えるならば、かなり楽に実装できるんですが…


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

Name: 静波  ..かけだし(1,499ポイント)   Date: 2009/08/01(土) 23:45   No:37574     
Title: Re:無題    
開発環境といいますと?
VC++でコンパイルしています。
そういうことでしょうか?


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

Name: 静波  ..かけだし(1,484ポイント)   Date: 2009/08/01(土) 23:49   No:37575     
Title: Re:無題    
.NETが使えるってなんのことでしょうか?

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

Name: 静波  ..かけだし(1,549ポイント)   Date: 2009/08/02(日) 00:12   No:37582     
Title: Re:無題    
開発環境というのかわかりませんが・・・・・

OSはウィンドウズxpプロ
回線はフレッツ光
プロバイダーはビックローブ
コンパイラはVC++
です。


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

Name: たかぎ [URL]  ..ハッカー(109,675ポイント)   Date: 2009/08/02(日) 00:19   No:37583     
Title: Re:無題    
> コンパイラはVC++

C言語ということなので、MFCや.NET Framework SDKは使えないと考えた方がよいでしょうね。
だとすると、WinSockで接続するか、BSMTP.DLLのようなものを使うのが妥当かと思います。


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

Name: バグ  ..ハッカー(163,924ポイント)   Date: 2009/08/02(日) 00:27   No:37584     
Title: Re:無題    
あら?たかぎさんに先を越されてしまいましたね(笑)
.NETが使用できない環境であるのならば、たかぎさんの言われている方法が一般的だと思います。

もし、.NETが利用できるのであれば…

C++
.NET
TcpListener
TcpClient
メール
送受信


などのワードでググると有用な情報が得られると思います


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

Name: 静波  ..かけだし(1,588ポイント)   Date: 2009/08/02(日) 00:32   No:37585     
Title: Re:無題    
そうですか・・・・
WinSock
でググってみます^^

初めて聞く用語なのでまた質問するかもです・・・


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



Name: situmon  ..プログラマー(34,903ポイント)   Date: 2009/07/26(日) 18:50   No:37324       
Title: 弾幕よけゲームを作りました!    
弾幕よけゲーム・・・
公開?を終了しました。
70以上のダウンロードもされて(少ないと思う人もいるかもしれませんが)自分が試しにやったのも含め73
本当にうれしかったです。どうもありがとうございました。


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


Name: チルチル  ..プログラマー(35,549ポイント)   Date: 2009/07/26(日) 19:53   No:37328     
Title: Re:弾幕よけゲームを作りました!    
前回に引き続き猫さんですね♪

気になった所を挙げると

@全体的に弾が白っぽいので低速移動時のエフェクトと同化して見えにくい

Aやはり決定がエンター、終了がエスケープは使いにくい、矢印は画像の方が良いかも

Bポーズとかが欲しい、バックグラウンドでも動いて欲しいかも

C弾画像の境界が曖昧だと判定がわかりにくい、無敵なら判定も無いほうがパターンを作りやすいかも

Dショットとボムが撃ちたい・・

E背景画像の繋ぎ目が目立つ

F道中が欲しい

G会話が欲しい

H被弾時の演出が欲しい

I被弾時に弾がいきなり消えるのは違和感がある、エフェクトやアイテム化が大変だったら、段々薄くなって消えるとか・・

J読み込み画面が一瞬で消えるのでフェードインとかあると良いかも

K全体的に弾の配置がバラバラなので、もう少し規則性が欲しい、弾密度も繋がるほど高いのはすり抜けられない・・

Lドット絵は上手だと思います、発射する瞬間に画像を変えると臨場感が出るかも

M私は絵が描けないのでよくわかりませんが、顔を少し大きくしてもっと笑顔にすれば良いかも

NBGMは道中の音楽としては問題無いと思いますが、ボス戦中だと少し盛り上がりに欠ける気がします、効果音も増やした方が良いかも

Oボスが小刻みに動くのは速すぎるかも、発射する前だけブルブルするとタイミングがつかみやすくて良いかも

Pもう少しボスに動きが欲しい、一点から発射されると自機も動けない・・

Q全体的に弾速が遅いので、時々速い弾を入れるとあきないかも

R文字を全体的にロゴにした方が良いかも

S決定するといきなり画面が変わるとビックリするのでフェードイン、フェードアウトがあると良いかも

とかですね

相変わらず言いたい放題言ってすいません・・

しかし全体で32MBはすごいですね、私はまだ27MBです・・


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

Name: ひよこ  ..熟練のプログラマー(47,609ポイント)   Date: 2009/07/26(日) 20:11   No:37329     
Title: Re:弾幕よけゲームを作りました!    
situmonさん さっそく遊ばせてもらいました。
ゲームについて、独特の世界観で和んでていいですね。
絵は上手でした。
しかし、直したほうがいいのもあって
最初っから弾幕の避ける隙間がとても狭かったです(避けられないのもありました。
ダメージを受けたら弾が一瞬で消えるのも直せるといいです。
もっとその世界の話が聞けたらよかったです。
制作お疲れ様でした。


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

Name: situmon  ..プログラマー(35,721ポイント)   Date: 2009/07/26(日) 20:30   No:37330     
Title: Re:弾幕よけゲームを作りました!    

チルチルさんへ
@全体的に弾が白っぽいので低速移動時のエフェクトと同化して見えにくい
>色変えますね♪
Aやはり決定がエンター、終了がエスケープは使いにくい、矢印は画像の方が良いかも
>タイトルは前作のコードを持ってきたのでかえます。
Bポーズとかが欲しい、バックグラウンドでも動いて欲しいかも
>なおしますね。
C弾画像の境界が曖昧だと判定がわかりにくい、無敵なら判定も無いほうがパターンを作りやすいかも
>弾画像を濃くします。
Dショットとボムが撃ちたい・・
>最初はつけるつもりでしたが今回は#避ける#に注目してほしかったです。
E背景画像の繋ぎ目が目立つ

F道中が欲しい
G会話が欲しい
>東方文花帖がきっかけで弾幕だけで見せるのもいい名と思ったので今回は弾幕避けゲームとしました。

H被弾時の演出が欲しい
>はい、爆発とか・・・
I被弾時に弾がいきなり消えるのは違和感がある、エフェクトやアイテム化が大変だったら、段々薄くなって消えるとか・・
>変えますね

J読み込み画面が一瞬で消えるのでフェードインとかあると良いかも
>フェードインですか・・・
K全体的に弾の配置がバラバラなので、もう少し規則性が欲しい、弾密度も繋がるほど高いのはすり抜けられない・・
>安置をなくし気合い避けを要するものばかりにしました。
Lドット絵は上手だと思います、発射する瞬間に画像を変えると臨場感が出るかも
>あぁ・・・
M私は絵が描けないのでよくわかりませんが、顔を少し大きくしてもっと笑顔にすれば良いかも
>そうですね。。。
NBGMは道中の音楽としては問題無いと思いますが、ボス戦中だと少し盛り上がりに欠ける気がします、効果音も増やした方が良いかも
>今回道中を作らなかったので適当につくった中から選びました。
Oボスが小刻みに動くのは速すぎるかも、発射する前だけブルブルするとタイミングがつかみやすくて良いかも
Pもう少しボスに動きが欲しい、一点から発射されると自機も動けない・・
>修正します。
Q全体的に弾速が遅いので、時々速い弾を入れるとあきないかも
>ありがとうございます。参考にします。
R文字を全体的にロゴにした方が良いかも
S決定するといきなり画面が変わるとビックリするのでフェードイン、フェードアウトがあると良いかも
>後は演出ですね

ひよこさんへ

中毒的になったので難しいのじゃないとやりがいがなくなってしまいつい。。。
もっと難易度考えます。

ありがとうございました。



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

Name: スー  ..初心者(7,733ポイント)   Date: 2009/07/26(日) 20:30   No:37331     
Title: Re:弾幕よけゲームを作りました!    
遊ばせてもらいました。
ドット絵が綺麗で素晴らしかったのと、弾幕も目新しいものが多くて楽しかったです。
難しくてクリアできなかったですけど><;

いくつか気になった所を挙げさてもらいます。

ゲームオーバーになったあと再びゲームを始めるとボスがでてこないです。

弾が粗く見えます。
バイリニア法で描写してみたらいかがでしょうか。

最初のボスの、ボスから黄、緑、青、赤、橙色の弾がゆっくり円状に放たれる弾幕で、動きすぎたら空きが無くなって逃げ場が無くなります。
仕様でしたらごめんなさい。

二人目のボスの最初の弾幕ですが、弾が画面の右端に行った時に、その弾が真下に落ちていく現象が気になりました。

三人目のボスの弾が急に超加速して自機近辺に来る弾幕ですが、早すぎて軌道が読めません。
理不尽すぎる気がします。


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

Name: situmon  ..プログラマー(35,952ポイント)   Date: 2009/07/26(日) 21:14   No:37332     
Title: Re:弾幕よけゲームを作りました!    
>黄、緑、青、赤、橙色の弾がゆっくり円状に放たれる弾幕
いかに動かず、いかに道を作るかを要します。
簡単な方法は始まってすぐに、画面左上に行きそこから回るといいです。
>弾が画面の右端に行った時に、その弾が真下に落ちていく現象が気になりました。
仕様です。
>ボスの弾が急に超加速して自機近辺に来る弾幕
あれは、−に減速しすぎてああするのですが・・・もっと軌道を読めるようにするといいですね。
アドバイスありがとうございます。
>バイリニア法
やろうと思って忘れてました。
今回、シューティングゲームの館のコードを変えて自分にわかりやすい名前の構造体にしました。
だから昔のコードも見ながらの調整が大変で・・・
>ゲームオーバーになったあと再びゲームを始めるとボスがでてこないです。
なおします。ありがとうございます。
難しいという声が・・・
もっと簡単にしますね。


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

Name:  ..初心者(7,800ポイント)   Date: 2009/07/26(日) 22:09   No:37333     
Title: Re:弾幕よけゲームを作りました!    
プレイさせていただきました。

気づいたことはほとんど皆様が上げられています。
気づいた中でまだあげられていないものは、ゲームオーバーの他にもクリア後に再スタートしたときもボスが出てこないということくらいです。

プレイした感想ですが、弾幕が見たことのないものが多く見ていて楽しかったです。
難易度は私としては難しかったですが、上のほうの方になるともうちょっとほしいと思う方も折られるかもしれません。ちなみに私は無敵使わないと最後まで見れませんでしたorz
弾の画像が粗いのはやはり気になりました。
あと、会話がとてもほしかったです。(人の作った物語とか好きなので)

製作お疲れ様です。





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

Name: すずめ  ..入門者(3,754ポイント)   Date: 2009/07/26(日) 23:47   No:37336     
Title: Re:弾幕よけゲームを作りました!    
プレイさせていただきました。
私はウインドウモードでプレイしたので
とてもきれいでした。

弾幕も新鮮でした。
でも、最初から最後まで当たりっぱなしでした。

感想としては、とてもよくできてると思います。


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

Name: situmon  ..プログラマー(35,984ポイント)   Date: 2009/07/27(月) 14:07   No:37355     
Title: Re:弾幕よけゲームを作りました!    
難しいという声がかなり・・・
やはり考えなくては・・・


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

Name: ねこ  ..プログラマー(31,214ポイント)   Date: 2009/07/27(月) 14:55   No:37361     
Title: Re:弾幕よけゲームを作りました!    
前にどなたかにも言いましたが、

基本的にシューティングゲーム作者=それなりの腕⇒初心者意識が低くなる

という傾向があります。自分では簡単と思っているのが初心者や不得手な人からすると難しすぎる現象です。
勿論それが間違いというわけではなく「初心者お断り」としたSTGだってあります。

要はゲームの開発意図(コンセプト)の問題です。
・どういう人向けのゲームなのか
・どういう点を楽しんで欲しいのか
・どういう事に改善意見・感想を言って欲しいのか
このあたりを明確にして、それを公開時に添えておくとより多くの意見・感想が頂けると思います。

ただ漠然とゲームを放り投げて感想お願いします。
と言われてもプレイヤーは何を意識してプレイすればいいのかが分かりません。
そのあたりを意識しないと、ゲーム製作はただの自己満足に終わってしまいます。


後、個人的には質問の回答でも感想レスでもそうですが
時間を割いて回答・感想をくれてる方には個別レスくらいはちゃんとした方が今後も感想頂けると思いますよ。
ちゃんと読んでるかもしれませんが、外から見たらえらくないがしろに受け取ってる感じがしますので^^;


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

Name: situmon  ..プログラマー(36,170ポイント)   Date: 2009/07/27(月) 18:59   No:37379     
Title: Re:弾幕よけゲームを作りました!    
わかりました。
初心者用もできるのですが、
初心者用を作ろうとすると超初心者用と、
まったく持って簡単になってしまうので・・・
やはりやる人の目を持つことが大切ですね。
>・どういう人向けのゲームなのか
 ・どういう点を楽しんで欲しいのか
 ・どういう事に改善意見・感想を言って欲しいのか

これは ・東方を1年くらいやった人向け?です。
    ・弾幕のきれいさとどんどん激しくなる攻撃!を楽しんでほしいです。
    ・バグや弾幕の難易度、よかった弾幕です。


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

Name: situmon  ..プログラマー(36,376ポイント)   Date: 2009/07/27(月) 19:03   No:37380     
Title: Re:弾幕よけゲームを作りました!    
鳥さま、
バイリニア法にしましたので今度は楽しんでいただけるかもです。
難しすぎたのは直します。
アドバイスどうもありがとうございました。
人の作った物語・・・
自分は作るのは・・・苦手というか・・・むしろ好きだけどうまく作れません。
ががんばってみます。
すずめさま、
ウィンドウモードのほうがきれいですが、
弾幕を避けるのが難しかったと思います。
>弾幕も新鮮でした。
ずっと新鮮が保ち続けられるといいですね・・・


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

Name: situmon  ..プログラマー(36,455ポイント)   Date: 2009/07/27(月) 19:05   No:37381     
Title: Re:弾幕よけゲームを作りました!    
チルチルさんへ、
次回作は
チルチルさんのアドバイスをもとにがんばっているのですが、
読み込み画面のフェードインが難しいです・・・
画像はかなり改良したつもりですが・・・
やはり調整が難しいですね。


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

Name: TRUTH  ..中級者(12,356ポイント)   Date: 2009/07/27(月) 19:51   No:37387     
Title: Re:弾幕よけゲームを作りました!    
初めまして、こんにちは。
楽しくプレイできました。ありがとうございます

気になった点ですが…
もうほとんど出尽くしていますね…

また改良されましたら、プレイさせてください。


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

Name: situmon  ..プログラマー(36,564ポイント)   Date: 2009/07/27(月) 21:19   No:37395     
Title: Re:弾幕よけゲームを作りました!    
>楽しくプレイできました。
ありがとうございます。
難易度はどうだったでしょうか?

改良ですが、今度はシューティングで行きたいと思います♪
今回は弾幕中心ですが、
今度は会話シーンや雑魚がでてきます。
そちらも今度よろしくおねがいします。

ですが難易度は・・・ 初心者視点で考えたいです^_^・・・


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

Name: チルチル  ..プログラマー(35,640ポイント)   Date: 2009/07/27(月) 23:42   No:37403     
Title: Re:弾幕よけゲームを作りました!    
>読み込み画面のフェードインが難しいです・・・

私もフェードインは作るのが難しかったのですが
弾や敵のように登録する方式にすると実装できました
フェードイン関係の処理を関数にまとめると良いかもしれません


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

Name: situmon  ..プログラマー(36,702ポイント)   Date: 2009/07/28(火) 21:00   No:37441     
Title: Re:弾幕よけゲームを作りました!    
そうですね・・・
だんだん暗くなる方法などを参考に見てみます。
処理を関数にまとめる・・・
難しそうですが、時間をかけてやってみたいと思います。
チルチルさんのアドバイスをもとに、
作成中ですが、かなりゆっくりめです。


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

Name: チルチル  ..プログラマー(35,738ポイント)   Date: 2009/07/28(火) 22:06   No:37444     
Title: Re:弾幕よけゲームを作りました!    
少し補足すると”処理を関数にまとめる”と言っても
一箇所で全部やってるわけではなく
今のところ0〜6までの数値を引数に渡す事で7種類の機能を使い分けられるようにして
関数をループ内の7個所で呼ぶ事でフェードインを実現しています
まとめているのは管理や変更を容易にするためですね

製作頑張ってくださいね♪


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

Name: situmon  ..プログラマー(36,737ポイント)   Date: 2009/08/01(土) 23:15   No:37570 解決!     
Title: Re:弾幕よけゲームを作りました!    
みなさんありがとうございました。
いまがんばってつくっているのでもうすぐできるかと思います。


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



Name: 静波  ..かけだし(1,307ポイント)   Date: 2009/08/01(土) 03:30   No:37558       
Title: 無題    
ファイルをウィンドウで開くプログラムを作りたいのですがわかりません・・・

まずプログラムを実行するとファイルが作成されます。
次にそのファイルをコマンドプロント上ではなく、ウィンドウでファイルを開きたいのです。


ふつうにファイルを作成したら一度プログラムをやめて、直接ファイルを開けばいいと思われるかもしれませんが、それをプログラム上で実行したいのです。

このようなことはできるのでしょうか?

もし出来るのであれば教えてください。


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


Name: 静波  ..かけだし(1,381ポイント)   Date: 2009/08/01(土) 21:14   No:37564 解決!     
Title: Re:無題    
すみません。

ググッたら出てきました。


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



Name: 華穂  ..かけだし(2,250ポイント)   Date: 2009/07/28(火) 21:24   No:37442       
Title: 当り判定について    

華穂です。
あぅ・・まさかの3日連続の書き込みです。
ごめんなさい。

えと、今日はちょっと・・題名通り当り判定についてアドバイスがほしくて書き込み
させていただきました。

昨日のアドバイスのおかげでようやく敵の動きをつくることができ、ほっとして
いたんですが、今日から自機の弾と敵との当り判定を作ったところ・・なぜか弾が
素通りするという事態に・・「???(泣)」状態です。
えと、DrawFormatを利用したところ、どうやら弾が出た(発射)時から既にはずれになっている
んです。



ソースは・・。
当り判定だけちょっと敵の挙動の関数からはずして別の関数を利用してみました。

int My_Atari()
{
int Cr = GetColor(255, 255, 255);

//弾が表示されていれば判定
if(TamaFlag == 1)
{
if((( TamaX > EZakoX && TamaX < EZakoX + EZakoW) &&
( EZakoX > TamaX && EZakoX < TamaX + TamaW)) ||
(( TamaY > EZakoY && TamaY < EZakoY + EZakoH) &&
( EZakoY > TamaY && EZakoY < TamaY + TamaH)))
{
//当たったら敵と弾消滅
BotuEZako = 0;
TamaFlag = 0;

DrawFormatString(0, 400, Cr, "当たり%d", BotuEZako);
}
else
{
DrawFormatString(0, 400, Cr, "はずれ%d", BotuEZako);
}
}
return 0;
}



です。
えと、この敵(TEZako)はsin波の動きの敵です。
弾は1発発射したら画面外に出るまでは次の弾が発射できないようにしているため、
(TamaFlag)としました。
当れば敵と弾は消滅します。
が、なぜかこれではただ敵を華麗にスル―するという・・当り判定は円?丸?ではなく、
□・矩形の判定です。

これはあれでしょうか・・、弾で考えているから駄目なんでしょうか?



なにとぞアドバイス・ご指摘・ご指南の方をよろしくお願いします。





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


Name: TRUTH  ..中級者(12,412ポイント)   Date: 2009/07/28(火) 21:57   No:37443     
Title: Re:当り判定について    
こんばんはー

if((( TamaX > EZakoX && TamaX < EZakoX + EZakoW) &&
( EZakoX > TamaX && EZakoX < TamaX + TamaW)) ||
(( TamaY > EZakoY && TamaY < EZakoY + EZakoH) &&
( EZakoY > TamaY && EZakoY < TamaY + TamaH)))
とありますが、赤い部分の&&と||は逆では上手くいきませんか?

( TamaX > EZakoX && TamaX < EZakoX + EZakoW) &&( EZakoX > TamaX && EZakoX < TamaX + TamaW))
まったく逆の条件で&&を使っているので常に偽になっているのだと思います。




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

Name: 華穂  ..入門者(2,566ポイント)   Date: 2009/07/28(火) 22:11   No:37445     
Title: Re:当り判定について    




TRUTH様、ありがとうございます!

さっそく試してみたところ、なんと当りました!!
先ほど判定の||と&&の意味について調べてみたところ・・
私の思っていた意味とまったく逆でした。(情けない・・)
逆の意味でとらえていたのにひやっとしてしまいました。


ですが、まだ当るだけで消滅・・消えはしないのでそれをどうにかしないと
いけませんね。
一応、ステージ1の雑魚敵として考えているので、HPは1・・つまり1回当れば
消滅しているように BotuEZako = 0 としているのですが・・。

今のこの当り判定では、1回当りで消えはしないんしょうか?
やはりきちんとどこかでHPを作らないとダメでしょうか?(てか駄目ですよね)


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

Name: 華穂  ..入門者(2,772ポイント)   Date: 2009/07/28(火) 22:28   No:37447     
Title: Re:当り判定について    



何度もすみませんっ(汗)


えと、今まで↑の質問をしてしまってから自分で
あれこれ考えて試してみた結果・・。

まぁ、敵をまだ1体でしか試していないということもあって、
(BotuEZako)から(EZako)へと変更してみたところ、
消えてくれました。



なので・・これで大丈夫かなぁ・・とは思うんですが・・。
どうでしょうか?
えと、1ステージの波敵は5体なのでこれから5体出すようにしたいと
おもんですが・・ここでもまたなんか凡ミスやらかしそうなので、
ぜひともなにかアドバイスをもらえたら嬉しいかと・・。


どうぞよろしくおねがいします。


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

Name: 夢夢  ..ぴよぴよ(565ポイント)   Date: 2009/07/30(木) 15:50   No:37509     
Title: Re:当り判定について    
当たった時にHPが減る処理を当たり判定の関数内に一緒に入れればいいのでは?
消える処理はHPが0だったら消える処理という具合に。

EZakoX,EZakoY・・・と変数を追加していると、
敵を増やす時に大変なので、
構造体を使いましょう。

struct ENEMY{
x;
y;
hp;
}
ENEMY EZako[5];//5体分

参照する時は EZako[0].xまたはEZako->xという風に使います。



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

Name: 華穂  ..入門者(4,571ポイント)   Date: 2009/08/01(土) 17:01   No:37562 解決!     
Title: Re:当り判定について    



遅くなってしまって申し訳ありませんっ!
夢夢様。

そうなんですよね。
1体だけならまだしも、1ステージは8体〜5ステージでは50体ほど出さなければならないため、
構造体かクラスを利用しろと講師から言われたため、只今最初からこれまで作っていたプログラムを
利用し、クラスで作っております。

しかし、構造体も考えていたため、このアドバイスはとてもうれしいです!!

クラスの場合だと、また違う形なので、これもまたどうしようかと軽く悩んでいます。


でも、ありがたいですね。
ご指摘・アドバイス・・・どうもありがとうございました!
とりあえず、今はまだ自機のクラスを終えてようやく雑魚敵のクラスを書き始めたため、
当り判定まではたどり着いておりませんが・・また別の書き込みをするかもしれません。

その時は、どうぞよろしくお願いします!


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



Name: lbfuvab  ..上級者(21,363ポイント)   Date: 2009/07/31(金) 16:39   No:37549       
Title: アンケートについて    
この掲示板のアンケートですが、
cgiファイルが丸見えになっています。
不具合ですよね?多分。


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,045,807ポイント)   Date: 2009/07/31(金) 19:32   No:37555     
Title: Re:アンケートについて    
ご報告ありがとうございます。
なんかいじってたら状況が悪化しました(汗
しばらくお待ち下さいm(_ _;)m


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



Name: p3  ..ぴよぴよ(417ポイント)   Date: 2009/07/28(火) 15:09   No:37425       
Title: しりとりプログラム    
[1] 質問文
 [1.1] しりとりを行うプログラムです。
 [1.2]
 [1.3]
 [1.4] 土台となる部分から作ることができませんでした。

[2] 環境  
 [2.1] OS : Windows
 [2.2] コンパイラ名 : gcc
[3] その他
 ・C言語はある程度の基礎は分かっております。

問題文は以下のようなものです。
ファイルword.txt から英単語を読み込み、その中で最初の文字がa である単語から始ま
るしりとりを行うプログラムを作成せよ。より多くの単語をつなげられるほど望ましい。
なお、しりとりを行うプログラムとword.txt は同じディレクトリにあるものとする。
入力ファイルの形式
ファイルword.txt は小文字のアルファベットのみで構成される英単語を複数個(1 以上
10000 以下)含む。1 つの単語の文字数は1 以上40 以下である。単語間の区切りとして1 つ
以上の空白が挿入されている。
しりとりのルール
ある単語に対して次の単語をつなげるためには、ある単語の最後の文字と次の単語の最
初の文字が等しくなければならない。最後の文字として使用が禁止されている文字はない
(任意のアルファベットで終了する単語を使用してもよい)。同じ単語は、word.txt の中身で
登場した回数だけ使用できる。
例. the note this the pool key the がword.txt の中身であった場合、しりとりにおいて
the は3 回、note、this、pool、key はそれぞれ1 回使用できる。
出力
最初の文字がa である単語を1 番目として、しりとりの順序につなげられた単語のみを
順に出力すること。各単語の間には1 つの空白文字を入れること。出力先は標準出力とす
る。
実行例
ファイルword.txt の例:
dot pwd rmdir through file current list change concatenate or copy text ls directory file
cp mv directories make mkdir contents working a browse change or cat files rm display
the cd the permissions chmod the and directories of or of of more directory directory
working directory display move a remove files pathname mode files the rename remove
page
しりとりプログラムの実行結果:
a a and dot text the

どなたかよろしくお願いします。

 


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


Name: Haru  ..上級者(23,885ポイント)   Date: 2009/07/28(火) 15:22   No:37426     
Title: Re:しりとりプログラム    
ちょっと長すぎて最後までしっかり読んでないんですが・・・
word.txt に英単語を入力するところまでは手動で行うんですよね?

そこまで終わったら次は、とりあえず
word.txt ファイルオープン → 最初の文字がa である単語を探す
→ 表示 ・・・

って感じなのかと思うんですが、ここまではできてますか?




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

Name: Mist  ..熟練のプログラマー(65,845ポイント)   Date: 2009/07/28(火) 15:28   No:37427     
Title: Re:しりとりプログラム    
少しずつ進めていくのがいいかと思います。

まず、word.txtから全ての文字を配列に取り込むところまで作れますか?


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

Name: p3  ..ぴよぴよ(480ポイント)   Date: 2009/07/28(火) 15:29   No:37428     
Title: Re:しりとりプログラム    
最初の部分からできていない状態です。。。
ちなみにword.txtというファイルにははじめから英単語がいくつか入っています。


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

Name: Haru  ..上級者(23,954ポイント)   Date: 2009/07/28(火) 15:35   No:37430     
Title: Re:しりとりプログラム    
 
>>・C言語はある程度の基礎は分かっております。

基礎はわかっているようなので、Mistさんのおっしゃるとおり少しずつ
進めてみましょう。

ちなみに、何がわかりませんか?


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

Name: non  ..熟練のプログラマー(57,957ポイント)   Date: 2009/07/28(火) 15:37   No:37431     
Title: Re:しりとりプログラム    
質問があります。

1 word.txt ファイルをすべて、メモリに読み込んで良いのか、否か?

2 >より多くの単語をつなげられるほど望ましい。
これは、一番単語数が多くなるような解を求めなければいけないということなのか?

3 >土台となる部分から作ることができませんでした。
プログラムはできなくても、アルゴリズムが組めるなら、その考えを示して欲しい。

4 >C言語はある程度の基礎は分かっております。
再帰呼び出しはわかりますか?
構造体はわかりますか?
リスト構造はわかりますか?
2分木構造はわかりますか?

以上、回答をお願いします。

 
  


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

Name: p3  ..ぴよぴよ(703ポイント)   Date: 2009/07/28(火) 15:53   No:37432     
Title: Re:しりとりプログラム    
質問があります。

1 word.txt ファイルをすべてメモリに読み込んで良いです。
2 一番単語数が多くなるような解を求めなければいけないということはありません。
3 今のところ考えているプログラムとしては、
単語の読み込み→記憶された文字(一番初めならa)の発見→出力→発見した文字の終わりの文字を記憶
→発見した単語の消去→単語の読み込み・・・とういような動作を考えています。

4再帰呼び出し、構造体は一応習っております。


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

Name: たかぎ [URL]  ..ハッカー(109,330ポイント)   Date: 2009/07/28(火) 15:57   No:37433     
Title: Re:しりとりプログラム    
参考までにC++で書いてみました。

#include <iostream>
#include <fstream>
#include <deque>
#include <map>
#include <string>
#include <cctype>

int main()
{
std::ifstream ifs("word.txt");
std::map<char, std::deque<std::string> > m;
std::string s;

while (ifs)
{
ifs >> s;
m[std::tolower(s[0])].push_back(s);
}

for (s = "a"; !s.empty(); )
{
std::cout << s << ' ';
char c = std::tolower(*s.rbegin());
std::deque<std::string>& d = m[c];
if (!d.empty())
{
s = d.front();
d.pop_front();
}
else
{
s.clear();
}
}
std::cout << std::endl;
}


これを参考にして、Cのコードは自分で考えてみてください。


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

Name: Mist  ..熟練のプログラマー(65,870ポイント)   Date: 2009/07/28(火) 16:18   No:37434     
Title: Re:しりとりプログラム    
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1328789843

マルチさん


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

Name: non  ..熟練のプログラマー(58,184ポイント)   Date: 2009/07/28(火) 16:22   No:37435     
Title: Re:しりとりプログラム    
>2 一番単語数が多くなるような解を求めなければいけないということはありません。

そうですか。ただ単に、しりとりをするだけでいいのなら、p3さんの方法でいけるでしょう。
>単語の読み込み→記憶された文字(一番初めならa)の発見→出力→発見した文字の終わりの文字を記憶
>→発見した単語の消去→単語の読み込み・・・とういような動作を考えています。

ただ、1文字の単語(例えばa)の場合、aの個数だけ最初に全部しりとりしてしまった方が
必ず長くなりますね。ということは、ソートした方がいいかもしれません。

それでは。Mistさんがおっしゃっているように、配列に読み込む部分を作って、わからないところを
尋ねてください。






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

Name: TKOZ  ..プログラマー(27,101ポイント)   Date: 2009/07/28(火) 19:21   No:37438     
Title: Re:しりとりプログラム    
p3さんへ
word.txtをアップロードして欲しいです。
お願いします。


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

Name: やそ  ..比類無きプログラマー(97,986ポイント)   Date: 2009/07/28(火) 20:19   No:37440     
Title: Re:しりとりプログラム    
>TKOZさんへ
とりあえず、問題文の最後に実行例として単語が並べられてあるようなので、それをword.txtの中身としてよいかと思います。

>p3さんへ
問題文にある前提条件(ルール)を確認してみましょう。
入力ファイルの形式
ファイルword.txt は小文字のアルファベットのみで構成される英単語を複数個(1 以上
10000 以下)含む。1 つの単語の文字数は1 以上40 以下である。単語間の区切りとして1 つ
以上の空白が挿入されている。
なのですから、
配列の大きさは40×10000が最大ということはわかりますか?
1文字づつ読み込んで、配列に代入し、スペースがきたらひとつの単語終了です。
これをファイル(データ)の終端まで繰り返し、配列を完成させてください。
で、printf関数などで表示してみて、思うとおりに表示されているかを確認しましょう。

おしりとっちゃうぞ!のプログラムはその次です^^


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

Name: TKOZ  ..プログラマー(28,488ポイント)   Date: 2009/07/31(金) 17:06   No:37552     
Title: Re:しりとりプログラム    
3日間ねばりましたが、これが、私の限界のようです。


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>

#define MAX 40

typedef struct W{
char Word[MAX];
int kaisuu;
}W;

int WordCount(char str[])
{
int i;
int count=0;

for(i=0;str[i]!='\n';i++)
{
if(str[i]==' ')
count++;
}
return count+1;
}
char *ChopChopChop(char str[],int num)
{
//文字列strの中の文字' 'からnum番目の文字列を取り出す関数
static char str2[300];
int Number=0;
int i,j;

for(j=0;j<=num;j++)
{

for(i=0;i<strlen(str2);i++)
{
str2[i]=' ';
}
str2[i+1]='\0';

for(i=Number;str[i]!=' ';i++)
{
str2[i-Number]=str[i];
}
str2[i-Number]='\0';
Number=i+1;
}

return str2;
}

int FileLoad(W *buf,char filename[])
{
FILE *fp;
int i=0,j=0;
char tmp[40];
fp=fopen("words.txt","r");
while(fgets((buf+i)->Word,MAX,fp) != NULL)
{
for(j=0;j<WordCount((buf+i)->Word)-1;j++)
{
strcpy(tmp,ChopChopChop((buf+i)->Word,j));
strcpy((buf+i)->Word,tmp);
printf("tmp=%s:",tmp);
}
i++;
}
fclose(fp);
return i;
}


char FirstCharacter(char word[])
{
return word[0];
}

char LastCharacter(char word[])
{
int i;
for(i=0;word[i]!='\0';i++)
{
i++;
}
return word[i-1];
}

int Chain(W *buf,int max)
{
int i,j,k;
static int flag=0;
static int counter=0;
static char Start[MAX];
static char Next[MAX];
static int missflag=0;


if(counter==0)
{
strcpy(Next,(buf+rand()%max)->Word);
printf("%s ",Next);
}
else
{
static char c;

c=LastCharacter(Next);
for(i=0;i<max;i++)
{
//printf("tbl[%d]=%s:",i,tbl[i]);
if(FirstCharacter((buf+i)->Word)==c)
{

strcpy(Next,(buf+i)->Word);
printf("%s ",(buf+i)->Word);
//(buf+i)->kaisuu--;
missflag=0;
break;
}

}
return -1;
}

counter++;
if(counter>1)
counter=1;

}

int main()
{
W word[10000]={0};
int max;

srand(time(NULL));

max=FileLoad(word,"../words.txt");

printf("maxは%d個でした。\n",max);

while(1)
{
if(Chain(word,max)==-1)
break;
}
return 0;
}

うまく行ったり、いかなかったり、よく分からないプログラムです。


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

Name: non  ..熟練のプログラマー(59,158ポイント)   Date: 2009/07/31(金) 17:41   No:37553     
Title: Re:しりとりプログラム    
まだ、少ししか見ていませんが、
FileLoadの関数で
> while(fgets((buf+i)->Word,MAX,fp) != NULL)
とありますが、1行の長さはMAXより大きいと思われますし、
あとで分解することも考えれば、fscnafを使った方が簡単だと思います。


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

Name: non  ..熟練のプログラマー(59,219ポイント)   Date: 2009/07/31(金) 18:08   No:37554     
Title: Re:しりとりプログラム    

char LastCharacter(char word[])
の関数ですがi++がダブってます。

単語を使用したかどうかをチェックしてませんね。
たぶん、その前がうまくいかないから途中で止めたのですね。


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



Name: ピロリン  ..ぴよぴよ(128ポイント)   Date: 2009/07/31(金) 15:45   No:37547       
Title: 数式コンパイラ    
教えて頂きたいのですが、C言語で数式コンパイラを作成したいのです。
方法はまずプログラムを実行したら、変数をAから順番に使い数式を入力(例えばこんな感じでABC=DE+F-G*HI)します。
その後、右辺の式の変数に値を入力します。
そして最終的ににABC=ans(ansは解答)という形で結果を表示したいのです。
条件としては使える演算は四則演算のみ、右辺の変数は10個までです。
また、()や累乗を扱えるとなお良いとのことです。
この場合の累乗も四則演算で計算する。

締切が8月3日なので協力して下さい。
お願いします。

添附はlinuxで作ったプログラムです。
エラーが出てしまっているので、何処が悪いか指摘して下さい。
もちろん初めから作りなおしてもらっても結構です。


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


Name: ピロリン  ..ぴよぴよ(146ポイント)   Date: 2009/07/31(金) 15:49   No:37548     
Title: 補足    
言い忘れましたが、コンパイラはgccです。

よろしくお願いします。


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

Name: non  ..熟練のプログラマー(59,225ポイント)   Date: 2009/07/31(金) 16:43   No:37551     
Title: Re:補足    
どういったエラーが出るか貼り付けてください。

>変数をAから順番に使い数式を入力(例えばこんな感じでABC=DE+F-G*HI)します。
>その後、右辺の式の変数に値を入力します。
>そして最終的ににABC=ans(ansは解答)という形で結果を表示したいのです。

意味がわかりません。具体的に示して下さい。

更に、添付されたプログラムは自分で作られたものですか?
貴方のCのレベルがわかりませんので。



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



Name: trx  ..ぴよぴよ(839ポイント)   Date: 2009/07/31(金) 14:12   No:37538       
Title: ウィンドウの大きさ変換    
ウィンドウモードの枠の範囲(ウィンドウの大きさ)を大きくしたいのですが、それに適している関数は在りますか?電子ピアノプログラムを作ろうとしているのですが、横幅が足りないのです。BCC DeveloperをWindows XPで使っています。

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


Name: yu  ..プログラマー(37,382ポイント)   Date: 2009/07/31(金) 14:18   No:37540     
Title: Re:ウィンドウの大きさ変換    
DXライブラリだとしましたら

SetWindowSize関数

はどうでしょうか


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

Name: nayo  ..中級者(11,900ポイント)   Date: 2009/07/31(金) 14:22   No:37541     
Title: Re:ウィンドウの大きさ変換    
DXライブラリを使っているのならばyuさんの紹介されている関数の他SetGraphModeという関数があります。

使っていないのならばCreateWindowなどの関数のパラメータを調整してください。


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

Name: GPGA  ..熟練のプログラマー(64,752ポイント)   Date: 2009/07/31(金) 15:27   No:37546     
Title: Re:ウィンドウの大きさ変換    
動的に変更するのであればSetWindowPosで変更が可能です。

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

Name: Trx  ..ぴよぴよ(16ポイント)   Date: 2009/07/31(金) 16:41   No:37550     
Title: Re:ウィンドウの大きさ変換    
yuさん、 nayoさん、 GPGAさん、どうも有り難うございます。

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



Name: 華穂  ..入門者(4,148ポイント)   Date: 2009/07/31(金) 14:35   No:37542       
Title: 画像表示について    


華穂です。

今日は、ちょっと困ったことになったためお力をお借りしたく
書き込ませていただきました。(常連になっちゃいましたね)

実はですね、初めて書き込みをした時からシューティングゲームを作って
はいたのですが、それは各時の・・なんというか、簡単な動作を一つ一つ
作っていただけでして・・いや、実はクラスとか構造体とかあまり考えずに
作っていたのですが、5ステージある以上、やはりクラスで作ろうと昨日から
急いでクラスを作っていました。

そこで、なんとか画面ごとに飛べるようになったのですが・・自機のクラス(
というよりも画像)を、フレームつまり、プレイ画面へと表示させたい
のですが・・どうすればいいのでしょうか?
いままでのやり方とは違う方向・久しぶりのクラスともあってうまくいきません。

ソースは・・。



/*画面クラス*/
class GameFrame
{
//全体の変数を設置
   int 〜〜〜
   ・
   ・
   ・
public:
GameFrame()
void Load();
void Start();
void Map();
void Play();
以下、ステージ・ゲームクリア・オーバーをvoidで宣言
void GameMain();
};

GameFrame::GameFrame()
{//この中では、マップに表示するための自機の残機や
フォント・現在の画面モードの設定}

void GameFrame::Load()
{この中では、必要な画像と音源のロード}

void GameFrame::Start()
{スタート画面の設定}

void GameFrame::Map()
{マップ画面の設定}

void GameFrame::Play()
{ステージごとの画面の設定と、ステータス画面の文字設定}

☆以下省略

ゲーム全体の流れ(?)を設定
void GameFrame::GameMain()
{ゲーム全体の流れ(?)を設定
 ・スタート画面表示
  ・マップ画面表示
・プレイ画面表示
{
Play();
}

以下省略





/*自機クラス*/
class Ziki
{
  //よく分からないが、上で設定した変数が使えない?
   ため、上から自機と弾の変数だけ持ってきて改めて設定
int Ziki[2],〜〜〜
int Tama, 〜〜〜
public:
Ziki();
void Ziki_Move();
void Ziki_Tama();
void Ziki_Load();
};

Ziki::Ziki()
{自機の初期化・初期設定(X、Yの座標など)}

void Ziki::Ziki_Load()
{画像ロード(自機はLDGにてロード}

void Ziki::Ziki_Move()
{自機の移動・制御}

void Ziki::Ziki_Tama()
{自機の弾の移動・制御}


と、書いてみました。
大雑把ですみません。

そして、問題は、私の考えでは、自機のクラスの中から
『Ziki_Move』『Ziki_Tama』だけを、画面クラスの
void GameFrame::GameMain()の中の、Play();の下に、


Play();
Ziki_Move();
Ziki_Tama();


とすれば表示・動かすことができるのではないかと考えました。
しかし、実際にはエラーが出てしまい・・それならばと、
画面クラスの、変数設定の中に・・

Ziki Zk;

と作りそれを、Zk.Ziki_Move();とすればいいんじゃないかと
思いました・・が、またもエラー。

『Ziki Zk;に、型名が必要』と言われ「??」となってしまいました。
どうすればいいのでしょうか?
このままでは、雑魚敵のクラスでも同じことになってしまうため、是非とも
ご指摘・アドバイス・ご指南の方をよろしくお願いします。


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


Name: ねこ  ..プログラマー(34,161ポイント)   Date: 2009/07/31(金) 14:46   No:37543     
Title: Re:画像表示について    
それぞれのソースファイルがどういう構成にあるのか分からないのですが
全て1ファイルに記述しているのであれば、Zikiクラスの定義はGameFrameクラスの定義より上部に無いといけません。
それぞれをヘッダファイルに定義しているなら、定義するクラスのヘッダをインクルードする必要があります。


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

Name: 華穂  ..入門者(4,342ポイント)   Date: 2009/07/31(金) 15:00   No:37545     
Title: Re:画像表示について    




うえっ!?

そ、そうなんですか?


今のところ、1つのファイルに2つのクラスをかきこんでます。(ヘッダは・・使用してませんね)
今から自機のクラスを上部へと移動させて試してみたいと思います。

ねこ様、ありがとうございました!


おそらく今度は画像コンパイルが通っても画像が表示されてない可能性も出てくるので・・その時は
またよろしくおねがいします。


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



Name: アイリ  ..ぴよぴよ(416ポイント)   Date: 2009/07/30(木) 17:12   No:37515       
Title: 万年カレンダー    
初めまして、アイリと申します
4月より専門学校に通い、プログラムの勉強をしているC言語初心者です

現在学校の課題で「万年カレンダー」の製作をしています
明日提出なのですがどうしてもわからないところがあるので
こちらで質問をさせていただきます

仕様は4つの関数利用しmainにて呼び出しというもので
4つの関数は
1、年月入力処理関数
  表示する年、月を入力する
  数字以外、1583年〜3999年の範囲外、1月〜12月の範囲外の場合再入力を促す
2、日付文字列編集関数
  課題用の関数で入力された年月を文字列へ変換する処理
3、曜日計算処理
  ↑の関数から受け取った文字列を数字へ変換し、
  ゼラーの公式(ツェラー?)で計算し1〜6までの数字を返す
4、カレンダ表示データ編集関数
  与えられた年月のカレンダ表示用文字列を
  グローバル変数 char D_date[15][80]に設定する

わからないのは最後の4の関数で現在は

char D_date[15][80]; //グローバル変数宣言
     ・
     ・
void cal_edit (int year, int month, int dayofweek)
{
int dm, i , j, a = 1;
     ・
     ・
    閏年、月の日数等の分岐
    表示日数をdmに格納する [例] 2月の閏年→ dm = 29;
     ・
     ・
printf("日 月 火 水 木 金 土\n");  //曜日の表示

while( a <= dm ){
for(i = 0 ; i < 15 ; i ++){
for( j = 0 ; j < 7 ; j++ ){
D_date[i][j] = a ;   // D_dateに日数を格納
a ++ ;
}
}
}
}
}


このような感じに・・・
1日の前に空白を入れなければいけないのはわかりますが
やり方がいまいちわかりません
上記のやり方では文字化けをおこしてしまいます
わからないのは
・空白の入れ方
・配列への日付の入れ方
・表示
です。

学校では「独習C」という本を使い勉強していて
現在、基礎、制御文、配列、文字列、ポインタまでは終わっています(6章まで)

急ではあると思いますがどうかよろしくお願いします!



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


Name: ねこ  ..プログラマー(33,323ポイント)   Date: 2009/07/30(木) 17:27   No:37517     
Title: Re:万年カレンダー    
文字の追加的処理みたいなので追加のstrcatを使います。

・空白の入れ方

D_date[i][j] = ' ';
または
strcat( D_date[i], " " );

・配列への日付の入れ方

char cTemp[ 16 ] = "";
sprintf( cTemp, "%d", a );
strcat( D_date[i], cTemp );

・表示

for( int i = 0; i < 15; i++ )
printf( "%s\n", D_date[i];




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

Name: アイリ  ..ぴよぴよ(496ポイント)   Date: 2009/07/30(木) 18:38   No:37520     
Title: Re:万年カレンダー    

ねこさん、回答ありがとうございます

日付の方なのですが
カレンダーなので日〜土までの曜日位置に
数字を合わせなければいけませんし、
上記のやり方では1〜dmまでの数値が横並びで表示されてしまいます

私の仕方が悪いだけかもしれないのですが
もう少し詳しくお願いできないでしょうか?


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

Name: ねこ  ..プログラマー(33,622ポイント)   Date: 2009/07/30(木) 19:40   No:37522     
Title: Re:万年カレンダー    
前回レス内容は質問に対する処理内容や関数を記述しただけなので、出力した見た目は考慮してません。

<数字を合わせる
例えば
printf("日 月 火 水 木 金 土\n");  // 曜日の表示
の下に合わせた1〜7の数字を作るには以下のようにします。

char cDisp[32] = "";
for( int i = 0; i < 7; i++ )
{
char cTemp[16];
sprintf( cTemp, "%2d", i + 1 ); // A
strcat( cDisp, cTemp, " " );
}
printf( cDisp );

数字を文字列にするAの箇所で数字を半角二文字分に合わせます。
その後、曜日の出力と同じように全角スペースを付け加えます。

<上記のやり方では1〜dmまでの数値が横並びで表示されてしまいます
D_date配列に1行ずつ格納してください。上記で作った内容を
D_date[0] = 1行目
D_date[1] = 2行目
...
というように入れていけば近い形になると思います。

コピペで動くか分かりませんが、ちょこっと書いたソースを参考においておきます。


char D_date[15][80] = {""};
int i, j, a = 1;
int dayofweek = 2;
int dm = 31;
for(i = 0 ; i < 15 ; i ++){
for( j = 0 ; j < 7 ; j++ ){
// 最初の行では開始曜日を考慮する
if( i == 0 ){
if( j >= dayofweek - 1 ){
char cTemp[ 16 ] = "";
sprintf( cTemp, "%2d", a );
strcat( D_date[i], cTemp ); // 数字を入れる
strcat( D_date[i], " "); // 全角スペースで調整
} else {
strcat( D_date[i], "  "); // 全角スペース2個で調整
continue;
}
} else {
char cTemp[ 16 ] = "";
sprintf( cTemp, "%2d", a );
strcat( D_date[i], cTemp ); // 数字を入れる
strcat( D_date[i], " "); // 全角スペースで調整
}
a++;
if( a > dm )
break;
}
if( a > dm )
break;
}
printf( "日 月 火 水 木 金 土" );
for( int ii = 0; ii < 15; ii++ ){
if( D_date[ii][0] != NULL ){
printf( "%s", D_date[ii] );
}
}


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

Name: box  ..ハッカー(142,203ポイント)   Date: 2009/07/30(木) 20:09   No:37523     
Title: Re:万年カレンダー    
>ねこさん


> if( D_date[ii][0] != NULL ){

char型と(void *)型とを比べて、大丈夫ですか?
本当は '\0' と書きたかったのですか?



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

Name: ねこ  ..プログラマー(33,646ポイント)   Date: 2009/07/30(木) 20:20   No:37525     
Title: Re:万年カレンダー    
>box様
ただの置き換えミスです。元はC++で書いてたので^^;


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

Name: アイリ  ..ぴよぴよ(628ポイント)   Date: 2009/07/30(木) 22:15   No:37528     
Title: Re:万年カレンダー    

度々すみません;

試しにねこさんの上記のプログラムを実行したところ


日 月 火 水 木 金 土
     1  2  3  4  5  6  7 ...
19 20 ...


というような表示になりました
iをインクリメントすれば行が進んで
改行できるのでは?と思うのですが
違うのでしょうか?


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

Name: sizuma [URL]  ..中級者(11,481ポイント)   Date: 2009/07/30(木) 23:18   No:37530     
Title: Re:万年カレンダー    
横から失礼します

printf( "日 月 火 水 木 金 土\n" );

for( int ii = 0; ii < 15; ii++ ){

if( D_date[ii][0] != NULL ){

printf( "%s\n", D_date[ii] );

}

}


ってすればいけると思います。
char型配列の中に改行コードがないと改行はされないですよ。
putsだと改行されますけど。


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

Name: アイリ  ..ぴよぴよ(669ポイント)   Date: 2009/07/30(木) 23:31   No:37531 解決!     
Title: Re:万年カレンダー    


無事完成しました
とても分かり易くて助かりました
ありがとうございました><


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

Name: ねこ  ..プログラマー(33,698ポイント)   Date: 2009/07/31(金) 09:26   No:37533     
Title: Re:万年カレンダー    
>sizuma様
補足ありがとうございます。
元がOutputDebugStringを含めたマクロで改行コード不要だったので抜けてましたorz


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



Name: KINOKO  ..ぴよぴよ(24ポイント)   Date: 2009/07/27(月) 15:18   No:37366       
Title: レゴのロボット    
今レゴのロボットを動かしてるんだけど、
なんの言語を使ってるかはわからないけど、
C言語と同じ感じなんだよ。
誰かこのロボットしってる?


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


Name: やそ  ..比類無きプログラマー(97,728ポイント)   Date: 2009/07/28(火) 15:08   No:37424     
Title: Re:レゴのロボット    
ttp://www.legoeducation.jp/mindstorms/products/products04.html

↑コレのこと?

ほかにもなんかニュースでロボットをプログラムで動かすやつを見たことがある気がする^^;

ディアゴスティーニとかやってそうな気が(?)



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

Name: 刻の旅人  ..ぴよぴよ(379ポイント)   Date: 2009/07/30(木) 19:18   No:37521     
Title: Re:レゴのロボット    
例えば
    MOVLW   28H       
     MOVWF   CNT3      
LOOP                
     MOVLW   10H       
     MOVWF   COLUM      
     MOVF   NUMBER,W    
     MOVWF   TEMP       

こんな感じのっすか?
これなら、アセンブラ言語(?)っていって、PICマイコンとか、そっち系統の言語です。


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

Name: 通りすがり  ..上級者(17,306ポイント)   Date: 2009/07/30(木) 22:32   No:37529     
Title: Re:レゴのロボット    
とりあえず質問者は規約位守りましょうか。言葉遣い的に。

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



Name: C言語初心者  ..入門者(3,684ポイント)   Date: 2009/07/29(水) 15:20   No:37456       
Title: 無題    
入力に2つのデータを用いて行います。
I番目の入力データをXi,出力される移動平均の値をmiとして
mi=1/NΣj=i-(n-1) i Xj

この場合のプログラミングについて分からないのでご指導よろしくお願いします。

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
main (void){
FILE *fp;
FILE *FP;
int i,t,N;
float S=0;

printf("N=");
scanf("%d",&N);
float x[N];
fp=fopen("input.dat","r");
FP=fopen("output.dat","w");

for(i=0;i<N-1;i++){
fscanf(fp,"%f",&x[i]);
S=S+x[i];
}

while(fscanf(fp,"%f",&x[N-1])!=EOF){

S=S+x[N-1];

fprintf(FP,"%f\n",S/N);
S=S-x[0];

for(t=1;t<N;t++)
x[t-1]=x[t];

}
fclose(fp);
fclose(FP);
return 0;
}

これで宜しいのでしょうか?
申し訳ありませんが、よろしくお願いします。


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


Name: kazuoni [URL]  ..比類無きプログラマー(95,529ポイント)   Date: 2009/07/29(水) 17:58   No:37461     
Title: Re:無題    
>mi=1/NΣj=i-(n-1) i Xj

この式の意味が理解できないのですが・・・
j なんて変数は条件文にないですし、
四則演算がどのような順序かも明白ではありません。
こんな感じですか?(恐らく違うかと思いますが・・・)
mi = 1/(NΣj) = i - (n-1) * i * Xi

また、入力ファイルにはどのような情報が格納されていてるのでしょうか?
一つのファイルに二種類のデータが格納されているということですか?

>for(i=0;i<N-1;i++){ 

>fscanf(fp,"%f",&x[i]);
>S=S+x[i];
>}

では、N個の入力値を配列に格納し、その総和を求めているで分かりますが、
それ以降、何がしたいのかが良く分かりません。

あと環境も書いたほうがいいかと思います。
gccだとたしか、
int N;
...
int ary[N];
と出来なかたった気がします。
(誤りでしたらすみません。。)
また、main関数に戻り値の型がないのに対し、
return 0;
としているので、環境によってはコンパイルが通らないかと。

コードを載せる際は、規約通り、プレタグでかこってくださいね。


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

Name: C言語初心者  ..入門者(3,822ポイント)   Date: 2009/07/29(水) 20:09   No:37468     
Title: Re:無題    
比類無きプログラマーさん、ご返信ありがとうございます。
プログラミングの本来の目的は、移動平均フィルタの作成です。
入力データは、筋電信号と脳波のデータを用いて行います。
mi=の計算式は、一般的な移動平均の計算式を使っています。
また、環境はUNIXでテキストエディタ、ターミナルにてコンパイルを行っています。
よろしくお願いします。


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

Name: Tororo  ..ぴよぴよ(72ポイント)   Date: 2009/07/29(水) 20:34   No:37469     
Title: Re:無題    
私にはわかりませんが、
タイトルは無題より質問にあった題の方が
回答を得られやすいですよ
(こんな事知ってるよと言うことならすみませんm(_ _)m)


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

Name: non  ..熟練のプログラマー(58,384ポイント)   Date: 2009/07/29(水) 21:36   No:37472     
Title: Re:無題    
>これで宜しいのでしょうか?
とありますが、何か不都合があるのでしょうか?
プログラムとしては、特に間違いがないと思いますけど。


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

Name: kazuoni [URL]  ..比類無きプログラマー(95,766ポイント)   Date: 2009/07/29(水) 21:48   No:37473     
Title: Re:無題    
単純移動平均ってことですかね?
流れはよいと思います。
問題文には書かれていないのですが、
移動が0の時のデータを出力できてないのはいいのでしょうか?
(whileの条件で、データがなかったらループに入らない)


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

Name: non  ..熟練のプログラマー(58,463ポイント)   Date: 2009/07/29(水) 21:54   No:37474     
Title: Re:無題    
>移動が0の時のデータを出力できてないのはいいのでしょうか?
forでN-1個しかデータを読んでないので、whileで最初の1個を読んでN個
となり、OKだと思いました。


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

Name: kazuoni [URL]  ..比類無きプログラマー(95,772ポイント)   Date: 2009/07/29(水) 21:59   No:37475     
Title: Re:無題    
あ、そでした^^;
大変失礼しました。
N-1
を見落としていました。。


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

Name: C言語初心者  ..入門者(3,890ポイント)   Date: 2009/07/29(水) 22:14   No:37476     
Title: Re:無題    
皆さん、解説ありがとうございます。
このプログラムでいいとすると、入力データが2つある場合には、どのように書けばよろしいのでしょうか?
このプログラムでは、1個のデータしか読み込んでいないので・・


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

Name: non  ..熟練のプログラマー(58,513ポイント)   Date: 2009/07/29(水) 22:51   No:37478     
Title: Re:無題    
>入力データが2つある場合
ってことは、データ系列が2つということですか?
例えばファイルが
a0 b0
a1 b1
a2 b2
:
:
のようになっているということでしょうか?


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

Name: C言語初心者  ..入門者(3,919ポイント)   Date: 2009/07/29(水) 23:13   No:37479     
Title: Re:無題    
nonさん、そのとおりです。
今回の課題では、入力データを2つ用いて行います!


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

Name: non  ..熟練のプログラマー(58,789ポイント)   Date: 2009/07/30(木) 09:08   No:37487     
Title: Re:無題    
もしかしたら、前のプログラムは自分で組んだのではないということでしょうね。
それなら、そうと先に言ってくれればよかったのに。

2組作ればいいだけではないでしょうか。
なお、下のプログラムは試していません。(gccがないので)

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main (void){
FILE *fp;
FILE *FP;
int i,t,N;
float S1=0,S2=0;

printf("N=");
scanf("%d",&N);
float x[N],y[N];
fp=fopen("input.dat","r");
FP=fopen("output.dat","w");

for(i=0;i<N-1;i++){
fscanf(fp,"%f %f",&x[i],&y[i]);
S1=S1+x[i];S2=S2+y[i];
}

while(fscanf(fp,"%f %f",&x[N-1],&y[N-1])!=EOF){

S1=S1+x[N-1];S2=S2+y[N-1];

fprintf(FP,"%f %f\n",S1/N,S2/N);
S1=S1-x[0];S2=S2-y[0];

for(t=1;t<N;t++){
x[t-1]=x[t]; y[t-1]=y[t];
}

}
fclose(fp);
fclose(FP);
return 0;
}



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

Name: C言語初心者  ..入門者(3,951ポイント)   Date: 2009/07/30(木) 18:04   No:37518 解決!     
Title: Re:無題    
nonさん、ありがとうございました。
とてもわかりやすかったです。 参考にさせていただきます!


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



Name: siratomi  ..ぴよぴよ(370ポイント)   Date: 2009/07/29(水) 23:48   No:37480       
Title: loding画像について    
はじめまして。
「龍神録プログラミングの館」を参考にSTGを作らせてもらっています。

今回は表題の通り、loding画像について分からないことがあったので質問させていただきます。
ゲームの最初には大抵ロードがあると思いますが、そこでloding...と描かれた画像を
アニメーションで表示させたいのです。(東方の「少女祈祷中」のようなものです。)

ロード画面ではロードをさせている以上、画面の更新はできないのではないかと思います。
したがって、壁紙は更新をする必要がないので表示できるのですが、
自ら画像をループさせてアニメーションにしようとすると更新が必要になってしまい表示できません。
また、GIFアニメーション、PNGアニメーションをあらかじめ作っておき、それを表示することも考えました。
しかし、GIFはDXライブラリが未対応、PNGは挑戦してみましたがうまく表示されません。
動画を表示するということに関しては、重くなりそうなので避けたいと思っています。

私としてはこれ以上方法が思いつきません。
他に良い方法はないでしょうか?
分かりにくい文章かとは思いますが、どうかお願いします。


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


Name: DVDM [URL]  ..入門者(2,624ポイント)   Date: 2009/07/30(木) 00:17   No:37481     
Title: Re:loding画像について    
>>siratomiさん
ぱっと思いつく方法で二つあります。
一つはこんな感じです。

画像1読み込み
アニメさせる画像を表示(アニメ1)
画像2読み込み
アニメさせる画像を表示(アニメ2)
画像3読み込み
アニメさせる画像を表示(アニメ3)

このように読み込みんでは表示、読み込んでは表示する方法です。


もう一つはマルチスレッドを使う方法です。
片一方のスレッドでアニメーションを描画し、もう片一方のスレッドでロードする方法です。
こちらの場合は、方法1みたいに交互に書く必要はなくロード関数とアニメ関数を別スレッドに処理させればOKです。


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

Name: Justy  ..伝説なるハッカー(396,817ポイント)   Date: 2009/07/30(木) 01:49   No:37482     
Title: Re:loding画像について    

>他に良い方法はないでしょうか?

 一番簡単なのは、DXライブラリの非同期読み込み関数を使ってファイルの内容を
メモリに読み出すことでしょう。

 FileRead_openの第二引数 TRUEにして、FileRead_read()を行えば読み込みが
非同期になりますので、読み込みの完了を FileRead_idle_chk()で毎フレームチェックして
TRUEが返ってくれば読み込み完了となります。

 もし、この読み込んだデータが画像データなどのDXライブラリで扱うデータとする場合は、
CreateGraphFromMem()などのメモリからハンドルを作成する関数を使えば
各種ハンドルにすることができます。

 ただ、非同期なだけに一端 FileRead_readを使って読み出したのなら、
読み込みが終わるまで FileRead_readで指定したバッファを保持していなければならないことや
キャンセル機能がないので注意が必要です。


 あと、自前でスレッドを作って同様のことを行うこともできますが、
DXライブラリ最新版(2.25b)においては、スレッドセーフではなくなっているので
マルチスレッドで LoadGraphなどのDXライブラリの関数を使う場合は注意が必要です。


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

Name: siratomi  ..ぴよぴよ(619ポイント)   Date: 2009/07/30(木) 17:27   No:37516 解決!     
Title: Re:loding画像について    
>>DVDMさん
一つ目の方法は単純で分かりやすくて良いのですが、
画像の重さによってはアニメーションが止まりそうですね・・・。
しかし、やはり一番扱いやすい方法ではあるので参考にさせていただきます。

>>Justyさん
最初の方法は動作については、ご指摘くださった点に注意すれば確実そうですね。
ちょっと複雑そうなので、うまくいくかが心配ですがとりあえずこの方法を中心に考えてみたいと思います。


お二人ともマルチスレッドを使用することについても書いてくださっていますが、
今回はJustyさんの書き込みを参考にして、やめておくことにしました。

大まかではありますが、方針が見えてきましたのでこれにて解決とさせていただきます。
DVDMさん、Justyさんご教授ありがとうございました!


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



Name: あ〜る  ..中級者(10,924ポイント)   Date: 2009/07/27(月) 18:23   No:37376       
Title: 3D背景について    
お久しぶりです。
3D背景を実装しようと思い、このサイトにあったプログラムを勉強して一応理解はしましたが、いざプログラムしてみると、載ってるような結果になりません。
自分のプログラムにミスがあるのかと思い、コピペしてみたのですが変わりませんでした。
画像は表示されるんですけど、壁や地面のようにズラーッと表示されず、一枚しか表示されませんでした、桜の方は表示もされなかったです。
また壁の画像は三角形の片方しか表示されません。
どうすれば実行結果と同じ結果になりますか?
環境は
BorlandC++、BCC、WindowsXP
です。


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


Name: yu  ..プログラマー(37,056ポイント)   Date: 2009/07/27(月) 19:36   No:37385     
Title: Re:3D背景について    
コピペではなく、
龍神録のソースコードをダウンロードして
実際に実行してみてください

それでも正常に表示されないのなら
すみませんが、自分ではどうにもなりません;

正常に描画されましたら、
プログラムの方になにか誤りがあると思います
ソースコードを見せて頂けないと原因を特定するのは難しいです;


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

Name: あ〜る  ..中級者(11,046ポイント)   Date: 2009/07/27(月) 20:26   No:37388     
Title: Re:3D背景について    
返信ありがとうございます
早速言われた通り、ダウンロードしたソースをコピーしてみたんですが、変わりませんでした…
一応、57、58、59章のソースもコピーして、新しいプロジェクトで試してみたんですが、57、58章は画像が表示されず、59章は今の状態と全く同じ結果になりました


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

Name: あ〜る  ..中級者(10,976ポイント)   Date: 2009/07/29(水) 21:12   No:37471     
Title: Re:3D背景について    
一応ソースも貼っておきます。
わざわざダウンロードして貰うのもアレですし。
というかまたVisualC++だと出来るけどBorlandC++だと出来ないとかじゃないですよね・・・?


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

Name: Justy  ..伝説なるハッカー(396,951ポイント)   Date: 2009/07/30(木) 02:25   No:37484     
Title: Re:3D背景について    

>ダウンロードしたソースをコピーしてみたんですが、変わりませんでした

 テクスチャはダウンロードしたそのままのデータですか?

 もしそうだとすると、ひょっとしたら GPUが 3Dを処理するだけの能力が
ないのかもしれません。
(その場合、Log.txtを確認してみてください。初期化の段階で何かエラーを出していることが多いので)


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

Name: あ〜る  ..中級者(11,054ポイント)   Date: 2009/07/30(木) 09:44   No:37489     
Title: Re:3D背景について    
返信ありがとうございます。
AppLog.txtを見てみたんですが、エラーは見つかりませんでした。
CPUも、一応龍神録や東方が出来るんで、能力的には問題ないと思います。

AppLog.txtも貼っときます。


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

Name: ねこ  ..プログラマー(32,931ポイント)   Date: 2009/07/30(木) 10:37   No:37490     
Title: Re:3D背景について    
1個気になったのですが、DXLIBのバージョンがやたら古いような気がします。
2.21aは2006/3/11のものみたい(公式参照)

3D関係は相当修正入ってるみたいですから、最新版を入れ直してみてはどうでしょう?
※既存バージョンはバックアップ取ってから


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

Name: あ〜る  ..中級者(11,133ポイント)   Date: 2009/07/30(木) 17:11   No:37514 解決!     
Title: Re:3D背景について    
返信ありがとうございます!
今最新版を入れてみたらちゃんと動きました!
こんなくだらない理由でお手を煩わせてしまいすいませんでした・・・(汗)
相談に乗ってくれた皆様、ありがとうございました!!


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



Name: LUNA  ..初心者(5,198ポイント)   Date: 2009/07/30(木) 14:33   No:37492       
Title: マップチップのきれいな当たり判定    
こんにちはLUNAです。こんかい、2Dアクションゲームを作るのにマップチップでのあたり判定処理を行っているのですが、うまく当たり判定が機能してくれません。自分の勘としてはおそらくグリッドの求め方がおかしいのではないのかと思うのですが、いまいちよくわかりません。どなたかヒントをくれませんでしょうか。
例のごとくDirectX9で製作しております。
ちなみに無限ジャンプは仕様です。(未調整)
ファイルは・・・ZIPが添付できないので一つずつおくります・・・


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


Name: LUNA  ..初心者(5,203ポイント)   Date: 2009/07/30(木) 14:35   No:37493     
Title: Re:マップチップのきれいな当たり判定    
一つ目


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

Name: LUNA  ..初心者(5,209ポイント)   Date: 2009/07/30(木) 14:35   No:37494     
Title: Re:マップチップのきれいな当たり判定    
二つ目・・・

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

Name: LUNA  ..初心者(5,214ポイント)   Date: 2009/07/30(木) 14:36   No:37495     
Title: Re:マップチップのきれいな当たり判定    


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

Name: LUNA  ..初心者(5,219ポイント)   Date: 2009/07/30(木) 14:36   No:37496     
Title: Re:マップチップのきれいな当たり判定    
4

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

Name: LUNA  ..初心者(5,214ポイント)   Date: 2009/07/30(木) 14:37   No:37497     
Title: Re:マップチップのきれいな当たり判定    
5

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

Name: LUNA  ..初心者(5,219ポイント)   Date: 2009/07/30(木) 14:37   No:37498     
Title: Re:マップチップのきれいな当たり判定    
6

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

Name: LUNA  ..初心者(5,224ポイント)   Date: 2009/07/30(木) 14:38   No:37499     
Title: Re:マップチップのきれいな当たり判定    
7

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

Name: LUNA  ..初心者(5,229ポイント)   Date: 2009/07/30(木) 14:38   No:37501     
Title: Re:マップチップのきれいな当たり判定    
8

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

Name: LUNA  ..初心者(5,234ポイント)   Date: 2009/07/30(木) 14:38   No:37502     
Title: Re:マップチップのきれいな当たり判定    
9

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

Name: LUNA  ..初心者(5,239ポイント)   Date: 2009/07/30(木) 14:39   No:37503     
Title: Re:マップチップのきれいな当たり判定    
10

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

Name: LUNA  ..初心者(5,244ポイント)   Date: 2009/07/30(木) 14:39   No:37504     
Title: Re:マップチップのきれいな当たり判定    
11

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

Name: LUNA  ..初心者(5,254ポイント)   Date: 2009/07/30(木) 14:40   No:37505     
Title: Re:マップチップのきれいな当たり判定    
12

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

Name: LUNA  ..初心者(5,261ポイント)   Date: 2009/07/30(木) 14:40   No:37506     
Title: Re:マップチップのきれいな当たり判定    
13
次で最後です


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

Name: LUNA  ..初心者(5,308ポイント)   Date: 2009/07/30(木) 14:41   No:37507     
Title: Re:マップチップのきれいな当たり判定    
最後です。こんな形でファイル添付してすみません・・・
画像や、音楽素材の部分のプログラムは何か適当な名前のものを突っ込むか、注釈文にしてください。

ZIP対応って書いてあったのに・・・


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

Name: ねこ  ..プログラマー(32,796ポイント)   Date: 2009/07/30(木) 15:14   No:37508     
Title: Re:マップチップのきれいな当たり判定    
まずはテンプレート回答を下さい。

1.どういう状況で
2.こうなるはずなのだが
3.こうなってしまう

ぱっとソース見た感じ、左右判定、上部判定、下部(地面)判定と何箇所か「当たり判定」があると思いますが
うまくいかないのはどれの事を言ってますか?


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

Name: LUNA  ..初心者(5,426ポイント)   Date: 2009/07/30(木) 16:11   No:37510     
Title: Re:マップチップのきれいな当たり判定    
あ、すみません
Y座標のあたりはできているみたい(特定のマップチップの上に来たらそのマップチップより上の座標に自機を固定させる)なんですが、X座標のグリッドがおかしいみたいで、本来なら乗って欲しいところに乗らず、そのまま落下してしまうんです。
実際に動かしてもらえば一番わかると思います。
起動すればコンソールで現在の自機の座標確認できます。


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

Name: ねこ  ..プログラマー(33,262ポイント)   Date: 2009/07/30(木) 16:59   No:37512     
Title: Re:マップチップのきれいな当たり判定    
タイトルに「きれいな当たり判定」とあるから誤差程度の判定バグだと想定してますが
グリッド値を頭で計算してその後変化があっても再計算してないからじゃない?

<実際に動かしてもらえば一番わかると思います。
<起動すればコンソールで現在の自機の座標確認できます。
誰しもが開発できる環境から見てるわけじゃないのと
環境設定の違い書き換えてまでコンパイルするのは手間な点から
最低でもEXEくらい載せないと実行してもらえるとは思わないほうが良いですよ。


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

Name: LUNA  ..初心者(5,559ポイント)   Date: 2009/07/30(木) 17:09   No:37513     
Title: Re:マップチップのきれいな当たり判定    
そうでしたか・・・・
EXEは添付できないみたいですのであきらめるしかないですね・・・

ところで皆さんはマップチップでの当たり判定はどうやっていますか?
大まかな流れで結構ですので参考がてら聞かせてください。
やっぱり同じプログラムでも人それぞれだと思いますし。


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



Name: アトラス  ..ぴよぴよ(617ポイント)   Date: 2009/07/29(水) 20:05   No:37467       
Title: 文字がうまく表示されません    
初めての投稿になります。
現在「ゲームプログラミングの館」の解説を参考にRPGを作ろうとしているのですが、
行き詰ってしまったので質問させていただきます。
ちなみにC言語は今回がはじめてです。
--------------------------------------------------------------------------------------------

#include "DxLib.h"

int GetHitKeyStateAll_2(int KeyStateBuf[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1) KeyStateBuf[i]++;
else KeyStateBuf[i]=0;
}
return 0;
}

int title(){
int Key[256];
int com=1;
int color1,color2,color3,white,blue;
white=GetColor( 255 , 255 , 255 );
blue=GetColor( 0 , 255 , 255 );

while(!ProcessMessage() && GetHitKeyStateAll_2(Key)==0 && Key[ KEY_INPUT_RETURN ]!=1 ){
//↑メッセージ処理 ↑キーボード入力状態保存
color1=white; color2=white; color3=white;

if(Key[ KEY_INPUT_DOWN ] == 1) com++;
else if(Key[ KEY_INPUT_UP ] == 1) com--;

if(com==0){
com=3;
}else if(com==4){
com=1;
}else if(com==1){
color1 = blue ;
}else if(com==2){
color2 = blue ;
}else{
color3 = blue;
}
DrawString(280,250, "始めから" ,color1);//文字列表示
DrawString(280,300, "続きから" ,color2);//文字列表示
DrawString(280,350, "EXIT" ,color3);//文字列表示
}


return com;

}

void map(int mapn){
(省略)
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
int f_status=0;

if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理

while(1){
if(f_status ==0 ){
f_status = title();
}else if( f_status ==1 ){
map(0);
f_status=0;
}else if ( f_status ==2 ){
map(1);
f_status=0;
}else{
return 0;
}
}


DxLib_End();
return 0;
}


---------------------------------------------------------------------------------------------
関数の説明をすると、
titleはタイトル画面で、十字キーの上下でメニュー選択、エンターキーで決定します。
「始めから」を選んだなら1、「続きから」なら2、「EXIT」なら3を返します。
mapは引数mapnに応じたマップを表示、それと主人公の移動もこの関数で行ってます。
この関数はエスケープキーで終了するようにしました。
メイン関数では f_statusの値で条件分けしてます。

問題なのですが、「始めから」もしくは「続きから」を選び、エスケープキーを押してもタイトル画面の文字が表示されません。(画面にはマップが表示されたまま)
エスケープを押したあとに、
エンターを押すとmap(0)、↓を一回押した後エンターでmap(1)の処理が行われていることが確認できたので、
文字表示だけがうまくいってないようです。
一回目(起動時)にはきちんと表示されているので、余計に分からなくて非常に悩んでおります。
どなたかご指南ください。


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


Name: conio [URL]  ..プログラマー(35,947ポイント)   Date: 2009/07/29(水) 22:35   No:37477     
Title: Re:文字がうまく表示されません    

メインループがおかしいですね。
ClearDrawScreen()、ScreenFlip() が呼ばれてないので画面がクリアされていません。

たまたま同じ場所に表示しているので問題なく動いているように見えますが、
文字列の座標を移動させたらおかしなことになる筈です。


とりあえず、単純に作ってみました。
---------------------------------------------------------------------------------------------------
#include "DxLib.h"

enum SequenceID{
SEQ_TITLE,//タイトル
SEQ_OPENING,//初めから
SEQ_CONTINUE,//続きから
SEQ_EXIT//終わり
};
SequenceID NowSequence = SEQ_TITLE;//最初はタイトル

int Key[256];
int GetHitKeyStateAll_2(int KeyStateBuf[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1) KeyStateBuf[i]++;
else KeyStateBuf[i]=0;
}
return 0;
}

void Title(void){
static int com = 0;
int color[3] = {0};
int white,blue;
white = GetColor( 255 , 255 , 255 );
blue = GetColor( 0 , 255 , 255 );

for(int i = 0; i < 3; i++)
color[i] = white;

if(Key[ KEY_INPUT_DOWN ] == 1){
com = (com + 1) % 3;
}else if(Key[ KEY_INPUT_UP ] == 1){
com = (com + 2) % 3;
}
color[com] = blue;

DrawString(280,250, "始めから" ,color[0]);//文字列表示
DrawString(280,300, "続きから" ,color[1]);//文字列表示
DrawString(280,350, "EXIT" ,color[2]);//文字列表示

if(Key[ KEY_INPUT_RETURN ] == 1){
switch(com)
{
case 0:NowSequence = SEQ_OPENING;
break;
case 1:NowSequence = SEQ_CONTINUE;
break;
case 2:NowSequence = SEQ_EXIT;
break;
default:
break;
}
com = 0;
}
}

void Opening(void)
{
int color;
color = GetColor( 255 , 255 , 0 );
DrawString(300,220, "☆オープニングです☆" ,color);//文字列表示
}

void Continue(void)
{
int color;
color = GetColor( 0 , 255 , 255 );
DrawString(300,220, "●つづきから●" ,color);//文字列表示
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理

while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll_2( Key ) && !Key[KEY_INPUT_ESCAPE] && NowSequence != SEQ_EXIT){
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されていない
SetDrawScreen( DX_SCREEN_BACK );// 描画先を裏画面に設定

switch(NowSequence)
{
case SEQ_TITLE:Title();
break;
case SEQ_OPENING:Opening();
break;
case SEQ_CONTINUE:Continue();
break;
default:break;
}
ScreenFlip();
}
DxLib_End();
return 0;
}
---------------------------------------------------------------------------------------------------


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

Name: アトラス  ..ぴよぴよ(703ポイント)   Date: 2009/07/30(木) 14:38   No:37500 解決!     
Title: Re:    
返事が遅れてしまいすみませんが、conioさん、回答ありがとうございます。
試してみたところ、正常に動くようになりました。
あと「%」をうまく使えばプログラムがスマートになるんですね。
勉強になりました。
本当にありがとうございました!


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



Name: 美月  ..ぴよぴよ(47ポイント)   Date: 2009/07/29(水) 13:48   No:37451       
Title: 画像が表示できません><    
今日から龍神録を見ながら(ほとんど見よう見真似)シューティングゲームを作り始めているのです。
キャラ画像は自分のやつがあるので、それを使おうとしているのですが、画像が表示されません(>_<)
保存場所は、デスクトップ/bat/img/char/0.png です。
(上記の場所を記入して)デバック開始にするとエラーは無いのですがウィンドウズのどこにも画像が表示されてないんです。
保存場所って関係あるのでしょうか?
また、どのようにプログラムすれば表示できるのですか?(x_x)


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


Name: ねこ  ..プログラマー(32,491ポイント)   Date: 2009/07/29(水) 14:15   No:37453     
Title: Re:画像が表示できません><    
とりえあず表示するなら龍神録.sln(かな?)がある場所に0.pngを置いて
LoadGraph("0.png");
で読めます。

後はプロジェクトのフォルダをどこに置いてるのかがよく分からないので答えられません。


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

Name: 美月  ..ぴよぴよ(241ポイント)   Date: 2009/07/29(水) 14:35   No:37454     
Title: Re:画像が表示できません><    
プロジェクトフォルダは、今は龍神録のプログラムをDLしていじっています。が、一応のせときます。長くなりますが
マイドキュメント/Visual Studio 2008/Projects/project/一章
です。
自分でフォルダ作ってそこにやろうともしてますんで、
マイドキュメント/Visual Studio 2008/Projects/STG
が正しいかもです(-_-;)
ぐちゃぐちゃですみません


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

Name: 美月  ..ぴよぴよ(262ポイント)   Date: 2009/07/29(水) 15:23   No:37457     
Title: Re:画像が表示できません><    
LoadGraph("0.png");
でやってみると、エラーはでませんが、画像が表示できませんでした(>_<)


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

Name: やそ  ..比類無きプログラマー(98,157ポイント)   Date: 2009/07/29(水) 16:02   No:37458     
Title: Re:画像が表示できません><    
龍神録の館をよく読んでみよう。

1章で書くファイルの配置を示した図があります。
その通りに配置されていますか。
4章のキャラを描画してみようでは

void load(){
LoadDivGraph( "../dat/img/char/0.png" , 12 , 4 , 3 , 73 , 73 , img_ch[0] ) ;
}

となっていますよね。
0.pngの場所、どこでしょうか。

もう一度ご確認されると良いと思います。



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

Name: やそ  ..比類無きプログラマー(98,432ポイント)   Date: 2009/07/29(水) 16:11   No:37459     
Title: Re:画像が表示できません><    
連投でおま。

../dat/img/char/0.pngの

..は実行するプログラムから見て1階層上のフォルダに戻ることを意味しています。
プロジェクトの場所が
マイドキュメント/Visual Studio 2008/Projects/project/一章
だとして、そこからどうすれば
デスクトップ/bat/img/char/0.png
にたどり着けるのか。
相対パス指定やら絶対パス指定やらを駆使してみると良いでしょう。
また、0.pngを
マイドキュメント/Visual Studio 2008/Projects/project/一章 の下に置いて
(もしくはマイドキュメント/Visual Studio 2008/Projects/STG の下に置いて)

LoadGraph("0.png");
で描画されるかどうかやってみてください。



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

Name: 美月  ..ぴよぴよ(337ポイント)   Date: 2009/07/29(水) 19:22   No:37464     
Title: Re:画像が表示できません><    
あ、すみません 
画像の場所変えてましたw
えーとマイドキュメント/Visual Studio 2008/Projects/projectあたりに入れたと思います
確認してみます&やってみます


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

Name: 美月  ..ぴよぴよ(287ポイント)   Date: 2009/07/29(水) 19:45   No:37466 解決!     
Title: Re:画像が表示できません><    
あ!
できました!
教えてくださった皆様ありがとうございました♪\(^o^)/
何故かすごくうれしいですw(^^ゞ


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



Name: チルチル  ..プログラマー(36,059ポイント)   Date: 2009/07/29(水) 00:12   No:37448       
Title: ポインタの初期化について    
ポインタについて確認したいのですが

C++において

int *P;

と言うポインタがある場合



P=アドレス;

はポインタにアドレスを代入



*P=アドレス;

はポインタのポインタを変更だと思うのですが



int *P=アドレス;

は実行してみるとポインタにアドレスを代入してるようです

ポインタは*を付けるとポインタのポインタになりますが

int *P1,*P2;

などは紛らわしいですが

int *P;

は int*型でPを宣言しているので

*Pと書いた事にはならず

int *P=アドレス;



int *P;
P=アドレス;

と同じであり

int *P1=アドレス,*P2=アドレス;



int *P1,*P2;
P1=アドレス;
P2=アドレス;

と同じ・・と言う解釈であっているでしょうか?


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


Name: kazuoni [URL]  ..比類無きプログラマー(95,270ポイント)   Date: 2009/07/29(水) 01:00   No:37449     
Title: Re:ポインタの初期化について    
>*P=アドレス;
>はポインタのポインタを変更だと思うのですが

ではなく、エイリアス(実体)の変更(代入)です。

>ポインタは*を付けるとポインタのポインタになりますが
これも*pはポインタのポインタではなく、エイリアス(実体)です。
例えばint **pが「pはintのポインタのポインタ型」です。

>int *P=アドレス; (前者)
>は
>int *P;
>P=アドレス(後者)

>int *P1=アドレス,*P2=アドレス; (前者)
>は
>int *P1,*P2;
>P1=アドレス; (後者)
>P2=アドレス;

結果的には同じですが、両例の前者は「初期化」、後者は「代入」
という点で異なっています。
#勘違いを招くかと思ったので、前者、後者の内容追記です^^;


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

Name: チルチル  ..プログラマー(36,128ポイント)   Date: 2009/07/29(水) 13:23   No:37450 解決!     
Title: Re:ポインタの初期化について    
この場合はポインタのポインタと言う表現は不適切でしたね・・

"P"はポインタ変数の中身
"*P"はポインタ変数自体のアドレス・・かな

どうもありがとうございました


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

Name: ねこ  ..プログラマー(32,400ポイント)   Date: 2009/07/29(水) 14:13   No:37452     
Title: Re:ポインタの初期化について    
<この場合はポインタのポインタと言う表現は不適切でしたね・・
そもそもポインタのポインタには「ダブルポインタ」という名称があります「int** PP;」のような。

<"P"はポインタ変数の中身
Pはアドレス
<"*P"はポインタ変数自体のアドレス・・か
*PはPが指すメモリへのアクセス方法であり、ポインタ変数自体のアドレスなら「&P」

なんか予想ですが・・・
int* P;
*P = 1;
とか出来るようなイメージ持ってませんか?
ポインタ変数ってのはアドレス保持するだけですよ。


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

Name: チルチル  ..プログラマー(36,292ポイント)   Date: 2009/07/29(水) 15:13   No:37455     
Title: Re:ポインタの初期化について    
今まで*Pにはポインタ変数自体のアドレスが入っていると解釈していましたが、違うんですかね・・
確か通常変数に*を付けるとアドレスを変えられると思ってたのですが・・

しかし・・
int ***P;とか
int ****P;みたいに続いていくのだろうか・・

そういう期待は無い事もないですね・・
むしろ
int i;
i=アドレス;
とかできたら良いのにな〜
とは思いますね・・
何かグラフィックハンドルと混同してますね・・


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

Name: ねこ  ..プログラマー(32,961ポイント)   Date: 2009/07/29(水) 16:13   No:37460     
Title: Re:ポインタの初期化について    
<今まで*Pにはポインタ変数自体のアドレスが入っていると解釈していましたが、違うんですかね・・
<確か通常変数に*を付けるとアドレスを変えられると思ってたのですが・
*を付けるのはポインタ変数の実体にアクセスするだけです。ダブルポインタとかと混同してないかな・・・

<int ***P;とか
<int ****P;みたいに続いていくのだろうか・
仕組みが良いかは置いといて、動的配列の確保時には使います。
二次元配列ならダブルポインタ、三次元配列ならトリプルポインタ・・・・と、続きます。
後はポインタ変数を渡して参照先を関数内で作る場合はダブルポインタで渡す等、
ポインタで1冊本が書けると言われるほど用途は様々です。

まぁとりあえず自分でどうこう考えるとヒープメモリ触ったり、解放しない領域作ったりする危険性もあるので
ポインタとメモリについての解説サイトを見たり、本を見たりして徐々にメモリの使い方の幅を広げていけばいいんじゃないかなと。
ゲーム作りの過程で色んな人のソース見てたらそのうち嫌でも覚えるよ。

※なお、ここでは32ビット環境での話という事で。


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

Name: kazuoni [URL]  ..比類無きプログラマー(95,672ポイント)   Date: 2009/07/29(水) 18:09   No:37462     
Title: Re:ポインタの初期化について    
>int i;
>i=アドレス;
>とかできたら良いのにな〜

これができてしまうと、プログラムがものすごいことに・・・。
っというか、変数とアドレスの区別がなくなるので、
今変数iの持っている数値がアドレスなのかポインタなのかを
別途に記憶しておかないといけなくなり、

・・・

・・・結局はint * ですね。^^;



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

Name: チルチル  ..プログラマー(36,325ポイント)   Date: 2009/07/29(水) 19:39   No:37465     
Title: Re:ポインタの初期化について    
う〜んポインタは奥が深いですね・・
とりあえず慣れるまで*Pに代入はしないようにします


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



Name: MNS  ..中級者(13,903ポイント)   Date: 2009/07/27(月) 14:21   No:37356       
Title: std::bad_allocについて    
プログラムを実行中に、std::bad_allocという例外が返されました。
std::bad_allocについて調べたところ、newの確保に失敗した時に返される例外であるということがわかり、
newを使っている箇所全てにtry~catchブロックを作って、失敗した箇所を探そうとしたのですが、
どのブロックにも引っかかりませんでした。

ここで質問なのですが、std::bad_allocはnew使用時以外でも返される場合があるのでしょうか?
また、std::vectorや、std::list, std::mapなども返される可能性はあるでしょうか?
そして、std::bad_allocを予防するには何か方法があるのでしょうか?

コンパイラはVC++2008EEで、PCのメモリは4GBであり、(OSがvista32bitなので、実質3GBでしょうか?)
少なくともnewでのメモリ不足は無いと考えられます。


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


Name: 御津凪 [URL]  ..ハッカー(107,681ポイント)   Date: 2009/07/27(月) 14:43   No:37358     
Title: Re:std::bad_allocについて    
STL ライブラリ全てのメモリ確保に関して std::bad_alloc 例外を返すことがあります。
(環境によっては例外を出さないものもあります)

今回の場合、 new で確保する時に配列数などに異常な値を渡され、 std::bad_alloc 例外が発生しているのではないでしょうか。
(未初期化の値を渡している場合は高確率で発生します)
もしかしたら、累積的なメモリリークによるメモリ確保の失敗かもしれません。

(ちなみに throw を使って自ら std::bad_alloc 例外を発生させることも可能です)


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

Name: MNS  ..中級者(13,592ポイント)   Date: 2009/07/27(月) 19:11   No:37382     
Title: Re:std::bad_allocについて    
作成しているプログラムというのが、戦略シミュレーションゲームなのですが、
マップによって、例外が返されるかが違ってきます。
ですが、マップが大きいほど、ユニットが多いほど例外が発生しやすいことが分かったので、
単純にメモリを使い切ったのではないかと思ったのですが、
クラスのインスタンスがnewで確保されていれば、メンバ変数もビープ領域に置かれますよね?
そうすると、メモリ不足とは考えられないのですが・・・。
ちなみに、newで配列を確保したりはしていません。

敵が攻撃される時に発生する爆発アニメーションを消したところ、
例外は発生しなかったのですが、そのアニメーションの処理にはnewもSTLも使っていません。
ということは、やはりメモリ不足なのでしょうか?


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

Name: 御津凪 [URL]  ..ハッカー(108,009ポイント)   Date: 2009/07/27(月) 21:13   No:37393     
Title: Re:std::bad_allocについて    
一度タスクマネージャを起動し、パフォーマンスタブを表示した状態で実行してみてください。

この状態で例外が発生したときにメモリ使用率のグラフが上端までいっていたらメモリ不足で、
そうでない場合は異常なサイズのメモリ確保を行おうとした可能性があります。
(どこかの処理でバグが存在している可能性)

malloc 関数でも、デバッグ版などであれば内部的に例外を出す場合があります。
もしかしたらその辺りかもしれません。

あと、仮想メモリが標準で有効になっているはずなので、
普通メモリを使い切る前後に動作が重くなるなどの予兆が出るはずです。


ちなみにメモリリーク対策は行っていますか?
crtdbg.h をインクルードし、起動直後に
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);


を呼んでおけば、プログラム終了時に開放されなかったメモリをレポート(出力)してくれます。


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

Name: Justy  ..伝説なるハッカー(396,417ポイント)   Date: 2009/07/28(火) 00:49   No:37412     
Title: Re:std::bad_allocについて    

>失敗した箇所を探そうとしたのですが

 ということは、まだ例外が発生した場所は見つかっていないのでしょうか?

 VisualStudioのデバッガを使えば例外を出した時点で、止めてくれると思うのですが。


方法 : 例外がスローされたときに中断する
ttp://msdn.microsoft.com/ja-jp/library/d14azbfh(VS.80).aspx


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

Name: MNS  ..中級者(13,674ポイント)   Date: 2009/07/29(水) 19:07   No:37463 解決!     
Title: Re:std::bad_allocについて    
いろいろと仕様を変えてしまったら、例外が発生しなくなってしまったので、
原因の追究が出来なくなってしまいました。
根本的な解決でないですが、一応解決したので、このスレッドは終了とします。
ありがとうございました。


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



Name: kamiya  ..ぴよぴよ(56ポイント)   Date: 2009/07/28(火) 15:35   No:37429       
Title: 関数呼び出し    

void func(int no)
{
if(no > 0) {
func(no - 1);
printf("%d", no);
func(no - 2);
}
}


上のに示す関数をfunc(3)と呼び出したときの実行結果を示せ。
という問題が参考書にあり,解いてみたのですが,さっぱり分かりません。
func(3)と呼び出す → func(no - 1)の部分で func(2)を呼び出す。
func(2)と呼び出す → func(no - 1)の部分で func(1)を呼び出す...。
これがno = 0になるまで繰り返され…る…?わけないしなぁ…と思い,
実際に組んでみると"1231"となったのですが、
肝心のなぜこうなるのか,がさっぱりです。

OS: Windows Vista
コンパイラ:Visual C++ 2008 Express
どの程度C言語を理解しているか:ど素人(独学2ヶ月程度)

どなたかご教授していただければ幸いです。


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


Name: ねこ  ..プログラマー(32,169ポイント)   Date: 2009/07/28(火) 16:38   No:37436     
Title: Re:関数呼び出し    
呼び出した関数の内部処理を入れ子にすると以下のようなイメージ図になります。


func(3) // 呼び出し元
{
func(3-1) // 3-1>0だから実行
printf(3) // プリント(3)
func(3-2) // 3-2>0だから実行
}
↓内部処理を加えたイメージ
func(3) // 呼び出し元
{
func(3-1) // 3-1>0だから実行
{
func(2-1) // 2-1>0だから実行
{
func(1-1) // 1-1>0じゃないから何もしない
printf(1) // プリント(1)
func(1-2) // 1-2>0じゃないから何もしない
}
printf(2) // プリント(2)
func(2-2) // 2-2>0じゃないから何もしない
}
printf(3) // プリント(3)
func(3-2) // 3-2>0だから実行
{
func(1-1) // 1-1>0じゃないから何もしない
printf(1) // プリント(1)
func(1-2) // 1-2>0じゃないから何もしない
}
}

それぞれfuncの引数が0以下の時に何もしなくなります。


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

Name: non  ..熟練のプログラマー(58,331ポイント)   Date: 2009/07/28(火) 16:43   No:37437     
Title: Re:関数呼び出し    
>func(3)と呼び出す → func(no - 1)の部分で func(2)を呼び出す。
>func(2)と呼び出す → func(no - 1)の部分で func(1)を呼び出す...。
>これがno = 0になるまで繰り返され…る…?

この考え方であってます。
これを再帰呼び出し(リカーシブコール)といいます。

no <=0 になったら、その呼び出された関数は終わりますから、
呼び出した関数に戻り、
printf("%d", no); が行われます。



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

Name: kamiya  ..ぴよぴよ(41ポイント)   Date: 2009/07/28(火) 22:16   No:37446 解決!     
Title: Re:関数呼び出し    
ありがとうございました。
かなり分かりやすかったです。


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



Name: 素人  ..中級者(10,720ポイント)   Date: 2009/07/28(火) 04:03   No:37413       
Title: 魔方陣を回しながら、ボスの周りを回す方法    
再び魔方陣について救いの手を貸してください><
タイトルどおりなんですが、ボスの中心軸と魔方陣の中心軸を二つ一緒に作る方法が分からなくて困ってます。

DrawRotaGraphFdF(boss.dx, boss.dy,//←ここが分からない
(0.085+0.02*sin(PI2/120*(-count%120)))*3,
2*PI*(count%100)/100,//時計まわり
img_etc[5], TRUE);


どうしたら軸を二つ作り、魔方陣を回しながらボスの周りを回すことが出来るのでしょうか?


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


Name: DVDM [URL]  ..かけだし(2,197ポイント)   Date: 2009/07/28(火) 04:34   No:37414     
Title: Re:魔方陣を回しながら、ボスの周りを回る方法    
>>素人さん
DxLib知らないので的外れかもしれませんが、
DrawRotaGraphで検索をかけると「メモリに読みこんだグラフィックの回転描画」という関数みたいですので
ボスの周りをぐるぐる回る処理と画像の回転処理を分ければ実装できそうな感じがします。

余力がありましたら、引数で渡した対象を中心にぐるぐる回る処理を作っておくと後々便利かもしれません。



#define PI 3.14159265f
#define RAD(Angle) ((Angle)*PI/180.0f)// RAD(角度)と記述することで、ラジアンに変換する
// 回転処理
魔法陣のX座標 = ボスのX座標 + ボスから魔法陣までの距離 * cosf(RAD(角度));
魔法陣のY座標 = ボスのY座標 + ボスから魔法陣までの距離 * sinf(RAD(角度));
角度 += 角度変化分;
魔法陣の画像を回転させる処理




ボスから魔法陣までの距離をX、Y共に同じにすると綺麗な円を描き、違う値を指定すると楕円を描きます。
角度変化分の値を弄ると、高速でぐるぐる回したり、ゆっくりと回したりできると思います。
また、角度 -= 角度変化分; とすることで逆回転にすることもできます。


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

Name: 素人  ..中級者(10,929ポイント)   Date: 2009/07/28(火) 06:02   No:37416     
Title: Re:魔方陣を回しながら、ボスの周りを回る方法    
返答ありがとうございます。
ちょっと分からない点があったのですが
魔法陣のX座標と魔法陣のY座標とは
例えば、

DrawRotaGraphFdF(boss.dx-140, boss.dy-58,
(0.085+0.02*sin(PI2/120*(-count%120)))*3,
2*PI*(count%100)/100,//時計まわり
img_etc[5], TRUE);

としたらboss.dx-140、boss.dy-58のことを表してるのでしょうか?
それとも新しく座標を作る必要があるのでしょうか?
また「角度」 += 角度変化分;
の「角度」とは具体的に何の角度のことを表してるのでしょうか?


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

Name: DVDM [URL]  ..入門者(2,819ポイント)   Date: 2009/07/28(火) 07:47   No:37418     
Title: Re:魔方陣を回しながら、ボスの周りを回る方法    
>>素人さん
DrawRotaGraphFdF関数は画像自体の回転という認識で間違いないでしょうか。
凄く不安なのですが、DrawRotaGraph関数の親戚だという前提でお話します。
DrawRotaGraph:http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_graph.html#R3N10

第一引数、第二引数に回転させる画像の中心座標を指定します。
上ですと、boss.dx-140, boss.dy-58の位置をベースに画像が右回転(時計回り)するということになります。
ここは画像を回転させなければならない魔法陣の座標を指定しなくてはなりません。
ですので、

>魔法陣のX座標と魔法陣のY座標とは〜
>〜boss.dx-140、boss.dy-58のことを表してるのでしょうか?

回転させる画像の中心座標とリファレンスに書いていましたので
(boss.dx や boss.dy が何を表しているかは解りませんが)そういう事になります。


>それとも新しく座標を作る必要があるのでしょうか?

DrawRotaGraphFdF関数の引数だけで画像を回転させ、
なお且つボスの周りを円運動出来るのでしたら必要ありません。
・・・が、作らないと出来ないような気がします。

>また「角度」 += 角度変化分;
>の「角度」とは具体的に何の角度のことを表してるのでしょうか?

「ボスを中心に円運動させるための角度」です。


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

Name: 素人  ..中級者(11,483ポイント)   Date: 2009/07/28(火) 08:30   No:37420     
Title: Re:魔方陣を回しながら、ボスの周りを回る方法    
あてはめてみたのですが

(1行目)#define RAD(Angle) ((Angle)*PI/180.0f)
(2行目)boss.dx-140=boss.dx+50*cosf(RAD(90));
(3行目)boss.dy-58=boss.dy+50*sinf(RAD(90));
(4行目)RAD(Angle)+=1;
(5行目) DrawRotaGraph(boss.dx-140, boss.dy-58,//ボス左上
(6行目) (0.085+0.02*sin(PI2/120*(-count%120)))*3,
(7行目) 2*PI*(count%100)/100,//時計まわり
(8行目) img_etc[5], TRUE);

エラーが出ます。
(1行目)warning C4305: '引数' : 'double' から 'float' へ切り詰めます。
(1行目)error C2106: '=' : 左のオペランドが、左辺値になっていません。
(2行目)warning C4305: '引数' : 'double' から 'float' へ切り詰めます。
(2行目)error C2106: '=' : 左のオペランドが、左辺値になっていません。
(3行目)error C2106: '+=' : 左のオペランドが、左辺値になっていません。
(4行目)error C2065: 'Angle' : 定義されていない識別子です。
(8行目)warning C4244: '引数' : 'double' から 'int' への変換です。データが失われる可能性があります。
(8行目)warning C4244: '引数' : 'double' から 'int' への変換です。データが失われる可能性があります。

なにが原因でどうすればおっしゃる通りになるのか指摘お願いします。


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

Name: ねこ  ..プログラマー(31,557ポイント)   Date: 2009/07/28(火) 08:59   No:37421     
Title: Re:魔方陣を回しながら、ボスの周りを回る方法    
左辺に式は入れられません。

boss.dx=boss.dx+50*cosf(RAD(90))+140;
boss.dy=boss.dy+50*sinf(RAD(90))+58;
Angle+=RAD(1);



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

Name: pooka [URL]  ..中級者(11,618ポイント)   Date: 2009/07/28(火) 12:05   No:37423     
Title: Re:魔方陣を回しながら、ボスの周りを回る方法    
まとめるとこんな感じでしょうか?
void DrawTest(double cx,double cy,double r,double ExtRate,double Angle1,double Angle2,int GrHandle,int TransFlag,int TurnFlag = 0){
    double x,y;
    x = r * cos(Angle1) + cx;
    y = r * sin(Angle1) + cy;

    DrawRotaGraphF((float)x,(float)y,ExtRate,Angle2,GrHandle,TransFlag,TurnFlag);
}

cx,cy:中心座標(ボスの座標)
r:中心座標との距離(ボスとの距離)
ExtRate:拡大率
Angle1:描画角度(素人さんが添付した画像の黄色いほう)
Angle2:描画角度(素人さんが添付した画像の赤いほう)
GrHandle:描画するグラフィックの識別番号(グラフィックハンドル)
TransFlag:透過色が有効か、フラグ(TRUEで有効FALSEで無効)
TurnFlag:画像の左右反転を行うか、のフラグ(FALSEで普通に描画 TRUEで反転)

名前などは適当に変更してください。


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

Name: 素人  ..中級者(11,500ポイント)   Date: 2009/07/28(火) 20:01   No:37439 解決!     
Title: Re:魔方陣を回しながら、ボスの周りを回る方法    
アドバイスのおかげで無事出来ました!
DVDMさん、ねこさん、pookaさん
ありがとうございました!


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



Name: ターボ  ..かけだし(1,173ポイント)   Date: 2009/07/27(月) 10:56   No:37350       
Title: 大学や仕事で使うコンパイラやエディタ    
こんにちは。10年近く間に地方の工学部の電気工学科を卒業した者ですが、当時は大学ではUnixのコンパイラ多分gccでエディタはviエディタでc言語やfortranのプログラミンの授業を受けていたのですが、実際に最近の大学や今、仕事でプログラミングをして働いている人などは、gccでプログラムを組んだりはしますか?

昔の高校の同級生は地方の国立大学に進学したのですがOSは多分Unixを使っていたがエディタはEmacsを使っていたと言っていました。

私は、はじめて使ったOSがUnixやMS-DOSであったためLinuxのCentOSとかCygwinとかを古いWindowsXPのパソコンにVMware Playerを使って動かしているのですが、もちろんVisual C++などもインストールしている(ちょっと古くなるのですが、Visual C++.net2003とVisual Basic.net2003とBorand C++ Builder6)なのですが。

最近の大学や会社ではどんなソフトを使っているのか気になって投稿しました。

私はLinuxではviエディタの使い方しか知らないのですが、皆さんはviエディタよりEmacsを使いますか?
誰か返信お願いします。


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


Name: ランド  ..初心者(5,156ポイント)   Date: 2009/07/27(月) 11:11   No:37351     
Title: Re:大学や仕事で使うコンパイラやエディタ    
こんにちは。とりあえず一例として。
現在地方の工学部2回生ですが、Linux,gcc,geditを使っています。

(担当講師の方はEmacsを薦め、簡単に使用方法も説明されました。
エディタは自由と言われたので、私はgeditを使っています。特に深い理由はありません。

また、説明された使用方法は新規作成,終了,保存等のショートカットがメインでした。)

C言語ではなく、アセンブラの授業ではwindows,CASL?でした。


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

Name: ターボ  ..かけだし(1,216ポイント)   Date: 2009/07/27(月) 12:39   No:37352     
Title: Re:大学や仕事で使うコンパイラやエディタ    
ランドさん返信ありがとうございます。最近のLinuxのエディタにはgeditという物も有るのですね。

今まで知りませんした。

>アセンブラの授業ではwindows,CASL?でした。

私のころのアセンブラの授業というか実験でやったのはNECのP98シリーズでしか多分動かせないZ80アセンブラというソフトでした。

引き続き私の学校や会社ではこれを使っているという情報を教えてほしいです、よろしくお願いします。


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

Name: バグ  ..ハッカー(163,677ポイント)   Date: 2009/07/27(月) 13:27   No:37353     
Title: Re:大学や仕事で使うコンパイラやエディタ    
うちではVC++6.0、VB6.0、VS2005PE、VS2008PEですね。
あとはJava用にeclipseを入れてます。


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

Name: やそ  ..比類無きプログラマー(97,656ポイント)   Date: 2009/07/27(月) 14:36   No:37357     
Title: Re:大学や仕事で使うコンパイラやエディタ    
話題とは全く!!関係ありませんが(^^;)

eclipse

って日食って意味だったんですね。
ラジオでパックンが解説してました。
ふーん。

今回の日食、仕事中で全く見られませんでした(^^;)

私の居た頃の専門学校でもUnix上でエディタはviでした。
viが非常に使い辛かったのを覚えています。(まあ、慣れの問題ですが)
当時家で使っていた98ではクイックCを導入してました。
エディタはVZやMIFESを使ってたと思います。

アセンブラは20数年前にPC88でZ80をいじって遊んでいました。
今のCPUのマシン語(アセンブラ)にはついていけないかも・・・
仕事場ではCは使っていません(笑)
VBやCOBOLですね。(汎用機メインなんで)


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

Name: バグ  ..ハッカー(163,765ポイント)   Date: 2009/07/27(月) 14:47   No:37360     
Title: Re:大学や仕事で使うコンパイラやエディタ    
eclipseって日食にも月食にも使うんですね。私は月食で覚えていたので驚いてしまいましたよ(^_^;)
たしか開発環境としてのeclipseの名前の由来は、Javaの開発元へのアンチテーゼとしての意味合いがあったんじゃなかったかな?


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

Name: ねこ  ..プログラマー(31,303ポイント)   Date: 2009/07/27(月) 15:03   No:37362     
Title: Re:大学や仕事で使うコンパイラやエディタ    
これはLinuxにおける意見求めなのかな・・・
そうでないならOSはXP,Vistaで開発ソフトはVC6.0とVCPです。
コンパイルbat作ってるのでsakuraみたいなエディタでさくっと編集してbat通すだけの時もあります。
Javaは同じくEclipse、VBだとVBPですね。

<eclipse
昔ゲームでトータルエクリプスが皆既日蝕という意味だと子供ながらに覚えてしまいました。
単語自体の意味はエキサイト先生が「食」と教えてくださいました。


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

Name: ターボ  ..かけだし(2,012ポイント)   Date: 2009/07/27(月) 15:15   No:37365     
Title: Re:大学や仕事で使うコンパイラやエディタ    
バグさんやそさん返信ありがとうございます。

>うちではVC++6.0、VB6.0、VS2005PE、VS2008PEですね。

VS2005PE、VS2008PEを買うのは結構値段が張ると思うのですが、やっぱり本格的にプログラミングする場合はVSのPE以上が良いのでしょうか?

かなり昔、プログラマの求人を受けに行った時面接で、VC++6.0PE、VB6.0PE以上が両方使えたらどこかの会社に入れるかもしれないと面接の時にその会社の技術者の人に言われたのですが、なんかその時のことを思い出しました。

>当時家で使っていた98ではクイックCを導入してました。

やそさんもPC98を使っていたんですか。私はPC98の生き残りのV233を大学時代初めて買ったのですが、パソコンは買ったのですがコンパイラを持ってなかったので、MP3やMidiの曲を聴くくらいで、1年くらいパソコンは放置状態でした。1年後に友人にCygwinを圧縮してフロッピーディスク15枚位(15M位分)を分割してもらってようやくパソコンを使ってCやC++のプログラミングができる環境になりました。

でも後になってV233が壊れる1年位前に気付いたのですが、Z80アセンブラの本にZ80アセンブラのコンパイラが付いていたのでZ80アセンブラは少しだけ勉強したのですが、PC9821用と本に書いてあるので多分今のパソコンでは動かないのだろうかとも思いました。どっちみち今のパソコンにはフロッピーディスクドライブが付いてないので使えないのですが・・・。

引き続き他の人も返信お願いします。


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

Name: ターボ  ..かけだし(2,163ポイント)   Date: 2009/07/27(月) 15:34   No:37367     
Title: Re:大学や仕事で使うコンパイラやエディタ    
ねこさん返信ありがとうございました。

入れ違いになったみたいです。すみません。サクラエディタは私もCygwinでプログラミングをする時に昔使っていました。

今度VS2010が出るみたいなので、世の中の人はどんなコンパイラを使っているのだろうかと思って投稿しました。Visual Studioを使っている人にproffesionl editionを使っている人が多いのはなぜでしょうか?

返信が来るまで想像してなかったのですが、javaを使っている人が結構いるんだなぁと思いました。

もうしばらく、引き続き返信お願いします。


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

Name: ターボ  ..かけだし(2,192ポイント)   Date: 2009/07/28(火) 05:55   No:37415 解決!     
Title: Re:大学や仕事で使うコンパイラやエディタ    
返信してくれた皆さんありがとうございました。とても参考になりました。

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



Name: 素人  ..中級者(10,400ポイント)   Date: 2009/07/27(月) 13:36   No:37354       
Title: 魔方陣の大きさを一定の大きさから開始する方法    
改造龍神録のボスの魔方陣で
boss.endtimeが小さくなるほど魔方陣も小さくする処理をしてるのですが
最初に魔方陣を展開したときの大きさは一定にして
小さくする割合をboss.endtimeによって決定したいのですが
どうしてもうまくいきません。(boss.endtimeはボスの弾幕によって全て時間が違うようにしてあります。)

DrawRotaGraphFdF(boss.dx, boss.dy,
(0.03*boss.endtime/60)*2, //←ここの部分が分かりません
2*PI*(count%300)/300,img_etc[2], TRUE);

計算式が分かる方がいたらどのようにすれば修正すればいいのか教えてください。


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


Name: 素人  ..中級者(10,455ポイント)   Date: 2009/07/27(月) 16:03   No:37369     
Title: Re:魔方陣の大きさを一定の大きさから開始する方法    
思ったんですけど、
東方のボスカウントによって回ってる魔方陣って
大きさは変わらないで円周だけ変わってますね・・
どうプログラムを変えたらそうなるんでしょうか?


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

Name: yu  ..プログラマー(36,866ポイント)   Date: 2009/07/27(月) 16:10   No:37370     
Title: Re:魔方陣の大きさを一定の大きさから開始する方法    
DrawPolygonBase関数で
円になるように頂点を指定してあげれば良いのではないでしょうか

頂点を指定するので東方本家の、
後半の魔方陣のようにグニャグニャにすることも多分可能ですよ


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

Name: 素人  ..中級者(10,504ポイント)   Date: 2009/07/27(月) 17:49   No:37375     
Title: Re:魔方陣の大きさを一定の大きさから開始する方法    
DrawPolygonBase関数がリファレンスのページにもなく、
使い方が分からなくて困ってるのですが
どのように使うのでしょうか?


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

Name: yu  ..プログラマー(37,206ポイント)   Date: 2009/07/27(月) 22:52   No:37399     
Title: Re:魔方陣の大きさを一定の大きさから開始する方法    
http://www1.axfc.net/uploader/He/so/236788

実際に作ってみました。Zキーで魔方陣が出ます。
が、少し表示がおかしいことになりました。orz
( U値がおかしいですね... )
多分できるとか言ってすみません...

ソースも書き捨てなので使い方だけみてやってください...
(使い方も怪しいですが^^;)

DrawPolygonBase関数は
第一引数 : VERTEXのアドレス
第二引数 : 頂点の数
第三引数 : プリミティブタイプ
第四引数以降は分かると思います

参考 : プリミティブ
ttp://www.mitsubishielectric.co.jp/service/d-style/d_spec/504i_java/z3d/z3dg_31.html


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

Name: 素人  ..中級者(10,563ポイント)   Date: 2009/07/27(月) 23:16   No:37402     
Title: Re:魔方陣の大きさを一定の大きさから開始する方法    
魔方陣がこんな処理をしてるとは思いませんでした・・
にしてもyuさんのこの処理はとても参考になります。
頑張って理解して実装してみます。
ただ、最初の展開で魔方陣が大きくなるのが気になりますけど


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

Name: yu  ..プログラマー(37,236ポイント)   Date: 2009/07/27(月) 23:52   No:37406     
Title: Re:魔方陣の大きさを一定の大きさから開始する方法    
>> ただ、最初の展開で魔方陣が大きくなるのが気になりますけど

自分は永夜抄を見て作りました
....にしても確かに極端すぎですねw

そこら辺はソースコードを少し弄れば変更できますので
自分好みにしてください


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

Name: yu  ..プログラマー(37,346ポイント)   Date: 2009/07/28(火) 00:18   No:37409     
Title: Re:魔方陣の大きさを一定の大きさから開始する方法    
って、思いっきり本題を無視していました
すみません orz

最初に設定した残り時間と現在の残り時間を変数に格納しておいて

r : 定数(円の最大の大きさ)
endtime : 現在の残り時間
max_endtime : 設定した残り時間

endtime * r / max_endtime


としてやれば良いのでは無いでしょうか(要はHPメーターと同じことです)
または、自分がさっき書いたコードのように
円の大きさから一定の値を引いていくか・・・ですかね


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

Name: 素人  ..中級者(10,655ポイント)   Date: 2009/07/28(火) 00:47   No:37411 解決!     
Title: Re:魔方陣の大きさを一定の大きさから開始する方法    
なるほど!
max_endtimeのことを忘れてました。
さっそく実装してみたいと思います。
yuさん、本当にありがとうございました。


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



Name: 茶くれ爺  ..ぴよぴよ(54ポイント)   Date: 2009/07/24(金) 23:34   No:37239       
Title: 画像の表示について    
指示どうり保存し実行しても表示されません。
確認用のプログラム実行すると
画像の保存場所が違うか、ファイル名が違うため、表示できません。
とでます。
ちなみに保存場所は
C:\Documents and Settings\******\デスクトップ\DxLib_VC\サンプルプログラム実行用フォルダ
です。
何か考えられる原因はありますか教えてください


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


Name: Justy  ..伝説なるハッカー(395,419ポイント)   Date: 2009/07/25(土) 00:42   No:37240     
Title: Re:画像の表示について    

>何か考えられる原因はありますか教えてください

 単純にプログラムからその画像のデータが見つからないのでしょう。
 試しに


#include "DxLib.h"
#include <shlwapi.h>
#include <string>

#pragma comment(lib, "shlwapi.lib")

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

    ChangeWindowMode(TRUE); 
    if(::DxLib_Init() == -1) return -1; 
    
    std::wstring message;
    wchar_t currDir[MAX_PATH]; 
    if(GetCurrentDirectoryW(MAX_PATH, currDir) > 0)
    {
        std::wstring pngFilePath(currDir);
        if(pngFilePath[pngFilePath.length()-1] != L'\\')
            pngFilePath.append(L"\\");
        pngFilePath.append(L"char.PNG");
        
        if(PathFileExistsW(pngFilePath.c_str())) 
            message.assign(pngFilePath + L"は存在します"); 
        else 
            message.assign(pngFilePath + L"は存在しません"); 
    }
    else
    {
        message.assign(L"カレントディレクトリの取得に失敗しました"); 
    }
    MessageBoxW(GetMainWindowHandle(), message.c_str(), L"Info", MB_OK);

    DxLib_End(); 
    return 0; 



のコードを実行してみてください。

 実行に成功すれば、char.PNGへのファイルパスとそのパスにファイルがあるかどうかが書かれた
ポップアップメッセージが表示されます。

 もし「存在しない」と表示されたのならそのパスにファイルを置いて再度実行してみてください。

 うまく「存在する」と表示されれば成功です。
 その状態であればオリジナルの確認プログラムも成功するはずです。


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

Name: 茶くれ爺  ..ぴよぴよ(126ポイント)   Date: 2009/07/27(月) 23:49   No:37404     
Title: Re:画像の表示について    
コメントありがとうございます
上のプログラムを実行してみると
ビルドに失敗してしまいます

1>------ ビルド開始: プロジェクト: test, 構成: Debug Win32 ------
1>コンパイルしています...
1>main.cpp
1>d:\visual studio 2008\projects\test\test\main.cpp(1) : fatal error C1083: include ファイルを開けません。'DxLib.h': No such file or directory
1>ビルドログは "file://d:\Visual Studio 2008\Projects\test\test\Debug\BuildLog.htm" に保存されました。
1>test - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

のようになっています
解決方法の方うをよろしくお願いします


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

Name: Justy  ..伝説なるハッカー(396,228ポイント)   Date: 2009/07/28(火) 00:44   No:37410     
Title: Re:画像の表示について    

>ビルドに失敗してしまいます

 (新規に作ったプロジェクトではなく)その「確認用のプログラム」のソースを
書き換えて実行するとどうなりますか?


 それとは別に d:\Visual Studio 2008\Projects\test\testにあるプロジェクトの方は
DXライブラリへのパスが通っていないようです。

 多分、VisualStudio2008だと思われるので、
プロジェクトのプロパティ -> C/C++ -> 全般の追加のインクルードディレクトリに
DXライブラリの「プロジェクトに追加すべきファイル_VC用」へのパスを入力してください。

 それでそのエラーは解消されるはずです。


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



Name: スペルヴォ  ..ぴよぴよ(473ポイント)   Date: 2009/07/26(日) 23:09   No:37335       
Title: グレイズについて    
フルスクリーンの件については、本当にありがとうございました。
無事に龍神録のページを見終えて、色々いじっているのですが、グレイズの実装がよく分からず
再び質問させていただきました。
前に同じ質問をしていた方がいらっしゃったのですが、
僕自信c言語を始めて日が浅いので
その質問のところを見てもあまりよく理解できませんでした。
グレイズの実装はほぼ何も出来ていないに等しい状態です。
できれば分かりやすく教えていただきたいです。
どうかよろしくお願いします。


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


Name: nayo  ..中級者(11,884ポイント)   Date: 2009/07/26(日) 23:58   No:37337     
Title: Re:グレイズについて    
あたり判定を行っている部分は分かるでしょうか?
確認したところ龍神録の館ではout_judge_enemyshot関数内の以下の部分ですね

半径計算部分
double r = bullet_info[shot[s].bullet[n].knd].range+CRANGE;

あたり判定部分
if(x*x+y*y<r*r) return 1; //当たり判定内なら当たり

これと同様の関数を作ってあげて

半径計算部分
double r = bullet_info[shot[s].bullet[n].knd].range+CRANGE+(グレイズ範囲);

と少し半径を大きくしてやって

同じようにあたり判定部分
if(x*x+y*y<r*r) return 1; //当たり判定内ならグレイズ

としてやり、1が返ってきたらグレイズの数を保存している変数を+1してあげると良いかと思います
また同じ弾を連続で何度もグレイズできると一つの弾でたくさんグレイズが増えてしまいます
なので弾の構造体にプレイヤーがグレイズしたか否かのフラグを用意し、グレイズ判定する際、
すでにグレイズ済みの弾なら0を返し、未グレイズでグレイズしているなら1を返す、とすると良いかと思います

また、あたり判定とほぼ同じ処理なのであたり判定とグレイズ判定は一つにまとめてしまった方が効率的だと思います




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

Name: スペルヴォ  ..ぴよぴよ(915ポイント)   Date: 2009/07/27(月) 20:35   No:37389     
Title: Re:グレイズについて    
>>nayo さん
ありがとうございました。
アドバイスを参考にプログラムを組んでみたのですが
このようなエラーが出ました。
----------------------------------------------------------------------------------------------------
error C2440: '=' : 'int (__cdecl *)(double,double,double,double,double,double,double,double)' から 'int' に変換できません。
----------------------------------------------------------------------------------------------------
どうしてもこのエラーだけが取ることが出来ません。
どうしたらとれるのでしょうか?
組んだプログラムは
----------------------------------------------------------------------------------------------------
//自機と敵ショットがグレイズしたかどうかを判定する
int out_judge_enemyshot_graze(int s,int n){
if(shot[s].bullet[n].cnt>0){//ショットの軌道が1度でも計算されていたら
if(out_judge(
shot[s].bullet[n].x,shot[s].bullet[n].y,ch.x,ch.y,
bullet_info[shot[s].bullet[n].knd].range2,CRANGE,
shot[s].bullet[n].spd,shot[s].bullet[n].angle
)){
return 1;
}
}
{if(1 = out_judge)
ch.graze += 1;
}
return 0;
}
----------------------------------------------------------------------------------------------------
range2 は新たに定義したグレイズする範囲です。


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

Name: @  ..ぴよぴよ(25ポイント)   Date: 2009/07/27(月) 20:56   No:37390     
Title: Re:グレイズについて    
改行してないので読みづらいです・・
まずは規約と注意事項を読んでから出直してきてください^^


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

Name: pooka [URL]  ..中級者(12,105ポイント)   Date: 2009/07/28(火) 00:10   No:37408     
Title: Re:グレイズについて    
エラーの原因は
>{if(1 = out_judge)
ですね。
out_judgeは
int out_judge(double x1, double y1, double x2, double y2,double range1, double range2, double spd1,double angle1){
//略
}
となっているので確認してください。

out_judge_enemyshot_graze関数内でグレイズの処理を行おうとしているみたいですが、
enemyshot_and_ch関数で行ってみてはどうでしょうか?

nayoさんが書かれているように、弾の構造体にグレイズしたかどうかのフラグを用意して(ここではg_flagとする)

//自機と敵ショットがグレイズしたかどうかを判定する
int out_judge_enemyshot_graze(int s,int n){
    if(shot[s].bullet[n].cnt>0){//ショットの軌道が1度でも計算されていたら
        if(shot[s].bullet[n].g_flag == 0 && out_judge(shot[s].bullet[n].x,shot[s].bullet[n].y,ch.x,ch.y,
            bullet_info[shot[s].bullet[n].knd].range2,CRANGE,shot[s].bullet[n].spd,shot[s].bullet[n].angle)){
            return 1;
        }
    }
    return 0;
}

とし、enemyshot_and_ch関数で

//敵ショットと自機との処理
void enemyshot_and_ch(){

    //略

    //雑魚敵のショット
    for(s=0;s<SHOT_MAX;s++){//敵ショット総数
        if(shot[s].flag>0){//そのショットが登録されていたら
            for(n=0;n<SHOT_BULLET_MAX;n++){//弾総数
                if(shot[s].bullet[n].flag==1){//弾が登録されていたら
                    if(bom.flag!=0){
                        shot[s].bullet[n].flag=0;
                        continue;
                    }
                    if(out_judge_enemyshot(s,n)==1){//自機にその弾が接触していたら
                        shot[s].bullet[n].flag=0;//弾をオフ
                        if(ch.flag==0 && ch.mutekicnt==0){
                            ch.cnt=0;
                            ch.flag=1;
                            se_flag[3]=1;
                        }
                    }
                    if(out_judge_enemyshot_graze(s,n) == 1){
                        ++ch.graze;
                        shot[s].bullet[n].g_flag = 1;
                        //ここでグレイズ音も処理すればいいかもしれません
                    }

                }
            }
        }
    }

    //略

}

ボスに関しても同じようにすればできるかも。
私はグレイズの処理は実装してないので、間違ってたらすみません。


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



Name: 初心者  ..プログラマー(34,484ポイント)   Date: 2009/07/27(月) 23:11   No:37401       
Title: ゆらゆらとした背景    
東方地霊殿のようなボスの周りの背景がゆらゆらしているのを作ってみたいんですが、
どのようにしたらいいか誰かアドバイスをお願いします。

環境 VC++2008EE,DXライブラリ


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


Name: チルチル  ..プログラマー(35,730ポイント)   Date: 2009/07/27(月) 23:51   No:37405     
Title: Re:ゆらゆらとした背景    
私も以前に同じ質問をしたのでとりあえず過去ログを貼っておきます

http://www.play21.jp/board/formz.cgi?action=res&resno=30740&page=&lognum=98&id=dixq&rln=31805&vino=62


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

Name: Justy  ..伝説なるハッカー(396,055ポイント)   Date: 2009/07/28(火) 00:03   No:37407     
Title: Re:ゆらゆらとした背景    
 他にも似たようなスレがありました。
 このあたりが参考になるかも。


C言語何でも質問掲示板 - 画像をぐにゃぐにゃさせるには・・・?
ttp://www.play21.jp/board/formz.cgi?action=res&resno=20946&page=&lognum=66&id=dixq&rln=20959

C言語何でも質問掲示板 - 演出のやり方ですが・・・
ttp://www.play21.jp/board/formz.cgi?action=res&resno=22475&page=&lognum=71&id=dixq&rln=22562


サンプルプログラミングの館
ttp://dixq.net/sm/d5.html


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



Name: 華穂  ..かけだし(1,078ポイント)   Date: 2009/07/27(月) 17:04   No:37371       
Title: 敵キャラの動き2    


またまた失礼します。
華穂です。


え〜と、実は昨日アドバイスをいただいてsin波についてはあの後ソースで実際
にできたのですが、敵の動きその1にある、特攻について今日いろいろありまして、
最初はホーミングを考えていたのですが、特攻なのだから・・と変更があり、悶々と
考えてみましたが、どうしてもここでプログラムが分からないため書き込みをさせていただきました。

さて、分からない特攻の動き・・というものですが、まずは図的なもので簡単に説明しますと。
☆・・自機 ●・・敵
                   @
              /―――●
             /
           ☆  
             \
              \
               \―――●
                    A
といったものです。(大雑把ですみません)
つまり、敵はある程度前に進んだら自機のいる方向に向かって急降下(@)又は急上昇(A)する
といった動きです。(左端を通過する)(スピードは一定)
ホーミングではありませんので、あくまで自機を追いかけないようにしたいのですが・・
そこまでの動きについてまだうまく頭の中でプログラムが立てられず困ってしまいました。

まだ途中ですが、「こうかなぁ?」といった形のものがあるのですが、おそらくそれも
間違ってはいると思います。
が、一応短いですがソースを大雑把に記します。(中途半端で挫折してしまいました)


☆TEZako = 特攻敵 , Ziki = 自機

int TEZX, TEZY;
int EZSpeed;
float i;
EZSpeed = 3;

TEZX = TEZakoX - ZikiX;
TEZY = TEZakoY - ZikiY;

i = atan( TEZX * TEZX - TEZY * TEZY );



です。
おそらくここで既に間違っているはずです。
えと、atanとかを使えればなんとかいけるのかなぁ?とは思っているのですが
どうなんでしょうか?



ご検討・アドバイス・ソースのご指摘よろしくお願いします。


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


Name: ねこ  ..プログラマー(31,408ポイント)   Date: 2009/07/27(月) 17:14   No:37372     
Title: Re:敵キャラの動き2    
自分から見た対象への角度を求める場合は
double target_angle = atan2( 対象.y - 自分.y, 対象.x - 自分.y );
で求まります。

この角度に速度をかけて座標に加算するのがホーミング、
どこかのタイミングで1回だけ行い、その角度を保持して動くのがロック動作です。


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

Name: 華穂  ..かけだし(1,193ポイント)   Date: 2009/07/27(月) 17:28   No:37374     
Title: Re:敵キャラの動き2    


はは〜・・なるほど・・。


そういったものがあるのですね!
さっそく試して理解を深めたいと思います!
もしかしたら、「??」となってまた聞くことがあるかもしれませんが、
その時はどうぞよろしくお願いします。


ねこ様。
アドバイス、ありがとうございました!


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

Name: 華穂  ..かけだし(1,674ポイント)   Date: 2009/07/27(月) 18:52   No:37377     
Title: Re:敵キャラの動き2    


はい。
またまたすみません。


ねこ様に教えていただいた方法も使い、試してはみたんですが・・。
なぜか、弾が発射されて消えるまでの間でしか動かないんです。
しかも、止まっているときは私の眼の錯覚でしょうか?
ブルブル震えてます(笑)ちょっとこれはやばいんじゃないかと思いまして・・・。



ま、まだなにや足りない・・間違っていますでしょうか?


えと、ソースは・・。
ざっくりと記すと。




int TEZX, TEZY;
int EZSpeed;
float Target_angle;
EZSpeed += 3;

Target_angle = atan2(TEZakoY - ZikiY, TEZakoX - ZikiX);

//TEZX = TEZakoX - ZikiX;
//TEZY = TEZakoY - ZikiY;

TEZakoX -= cos(Target_angle * EZSpeed);
TEZakoY -= sin(Target_angle * EZSpeed);

DrawGraph( TEZakoX, TEZakoY, TEZako, TRUE);




と書いてみましたが・・・何が足りなくて、何が「あ、これは駄目」
なのかちょっと私一人じゃ気づけません。


どなたか、どうぞご指摘・アドバイス・ご検討よろしくおねがいします。


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

Name: ねこ  ..プログラマー(31,485ポイント)   Date: 2009/07/27(月) 19:17   No:37383     
Title: Re:敵キャラの動き2    

EZSpeed = 3;
TEZakoX += cos(Target_angle * EZSpeed);
TEZakoY += sin(Target_angle * EZSpeed);

で、動くんじゃないかな。


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

Name: 華穂  ..かけだし(1,760ポイント)   Date: 2009/07/27(月) 19:28   No:37384     
Title: Re:敵キャラの動き2    



・・・ぁ。
本当ですね。

はい!確かに動きました!!

こ、こんなパンチミス・・情けないです。
でも、本当に助かりました!


ねこ様、ご指摘・アドバイスありがとうございました!!!






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

Name: TRUTH  ..中級者(12,284ポイント)   Date: 2009/07/27(月) 19:41   No:37386     
Title: Re:敵キャラの動き2    
こんにちはー。
全体の構成がわからないので何とも言えませんが…
流れを見る限り、その関数は何度も呼ばれますよね?


Target_angle = atan2(TEZakoY - ZikiY, TEZakoX - ZikiX);
これは毎回呼ばれるのではなく、特攻の態勢に入り角度の変わる瞬間(1回きり)だけ
上手くいくと思います。


TEZakoX -= cos(Target_angle * EZSpeed);
TEZakoY -= sin(Target_angle * EZSpeed);
ですが、EZSpeed += 3; かつ Target_angle が毎回変わってしまっている(上記より)ので
-1<=cos<=1,-1<=sin<=1の間の様々な値をとり、結果としてブルブル震えているんだと思います。

TEZakoX -= cos(Target_angle)*EZSpeed;
TEZakoY -= sin(Target_angle)*EZSpeed;

とすれば、Target_angleが1度だけ呼ばれると定数のようになり
速度をかけることで、上手くいくと思います。


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

Name: 華穂  ..かけだし(1,780ポイント)   Date: 2009/07/27(月) 21:35   No:37397 解決!     
Title: Re:敵キャラの動き2    


TRUTH様、返信遅くなって申し訳ありませんっ!!


なるほど・・そういうことなんですね。
私も「??どうしていけば・・」とちょこちょこいじっては
いたんですが、そうすればいいんですね!

アドバイスとご指摘のほう、ありがとうございました。
これからまた、少し作っていきたいと思います。


また、何か問題が発生したら、ぜひともよろしくお願いします。


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



Name: けいすけ  ..初心者(6,096ポイント)   Date: 2009/07/24(金) 07:02   No:37189       
Title: ボスと敵の当たり判定    
龍神録の50章を改造してます。
ボスや敵の弾幕ではなく、ボスと敵自体に当たり判定をつけて
自機と接触した場合は自機が死ぬという感じで実装してみたいのですが
どんな感じの順序で作ればいいでしょうか?アドバイスお願いします。


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


Name: TRUTH  ..中級者(11,092ポイント)   Date: 2009/07/24(金) 11:33   No:37195     
Title: Re:ボスと敵の当たり判定    
こんにちはー。初めまして


ボスや敵自体に当たり判定をつけるときは
基本的に弾幕のときと同じです。

キャラと敵の当たり範囲を使用して
接触しているかどうか調べます。

キャラと敵とボスの当たり範囲
#define ENEMY_RANGE_MAX 4
#define CSHOT_RANGE_MAX 2
#define BRANGE 40.0


//当たり判定
//ショットの座標:1 当たりを判定する物体:2
int out_judge(double x1, double y1, double x2, double y2,
double range1, double range2, double spd1,double angle1){
int j;
double x=x1-x2;//敵と自機ショットとの距離
double y=y1-y2;
//敵の当たり判定と自機ショットの当たり判定の合計範囲
double r=range1+range2;
//中間を計算する必要があれば
if(spd1>r){
//1フレーム前にいた位置を格納する
double pre_x=x1+cos(angle1+PI)*spd1;
double pre_y=y1+sin(angle1+PI)*spd1;
double px,py;
for(j=0;j<spd1/r;j++){//進んだ分÷当たり判定分ループ
px=pre_x-x2;
py=pre_y-y2;
if(px*px+py*py<r*r)
return 1;
pre_x+=cos(angle1)*r;
pre_y+=sin(angle1)*r;
}
}
if(x*x+y*y<r*r)//当たり判定内なら
return 1;//当たり
return 0;
}

out.cpp内の「弾幕と接触してるかの判定」を参考にしてみてください。
当たっていたら,死亡させると言う流れになります。


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

Name: けいすけ  ..初心者(6,139ポイント)   Date: 2009/07/25(土) 21:14   No:37292     
Title: Re:ボスと敵の当たり判定    
double spd1,double angle1がどう置き換えるべきか悩んでるんですけど
これはいらないのでしょうか?


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

Name: yu  ..プログラマー(36,792ポイント)   Date: 2009/07/25(土) 21:24   No:37293     
Title: Re:ボスと敵の当たり判定    
ボスの前回と今回の位置から、ピタゴラスの定理を使って速さを出し、
atan2 で角度を出すのが簡単だと思います

atan2 で引数に 0 を渡さないように注意してください


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

Name: けいすけ  ..初心者(6,551ポイント)   Date: 2009/07/27(月) 21:00   No:37391     
Title: Re:ボスと敵の当たり判定    
ちょっと聞きたいのですが
//当たり判定

//ショットの座標:1 当たりを判定する物体:2
int out_judge(double x1, double y1, double x2, double y2,
double range1, double range2, double spd1,double angle1){
int j;
double x=x1-x2;//敵と自機ショットとの距離
double y=y1-y2;
//敵の当たり判定と自機ショットの当たり判定の合計範囲
double r=range1+range2;
//中間を計算する必要があれば
if(spd1>r){
//1フレーム前にいた位置を格納する
double pre_x=x1+cos(angle1+PI)*spd1;
double pre_y=y1+sin(angle1+PI)*spd1;
double px,py;
for(j=0;j<spd1/r;j++){//進んだ分÷当たり判定分ループ
px=pre_x-x2;
py=pre_y-y2;
if(px*px+py*py<r*r)
return 1;
pre_x+=cos(angle1)*r;
pre_y+=sin(angle1)*r;
}
}
if(x*x+y*y<r*r)//当たり判定内なら
return 1;//当たり
return 0;
}

は新しく作り直す必要はあるのでしょうか?


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



Name: situmon  ..プログラマー(31,717ポイント)   Date: 2009/06/26(金) 22:18   No:35819       
Title: みなさんでたくさんの素材を公開しましょう!    
自分はよく、探している素材が見つかりません。
いまいち曲がジャンルにあった曲でなかったり、
素材が使いにくかったりしたことがあります。
なので、ゲームを作る立場として、
こんな素材があったらいいなぁという素材を作って公開しませんか?
なんでもよいです。
画像、曲ファイルなど・・・


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


Name: たかぎ [URL]  ..ハッカー(106,811ポイント)   Date: 2009/06/26(金) 22:32   No:35820     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
こういう呼びかけをするときは、まず自分から公開しないと...


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

Name: situmon  ..プログラマー(31,750ポイント)   Date: 2009/06/27(土) 18:37   No:35850     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
そうですね。
素材についてですが、
弾の画像です。
GIMPで、割とはっきりとしたカラーを使いました。


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

Name: チルチル  ..プログラマー(27,589ポイント)   Date: 2009/06/27(土) 23:02   No:35868     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
なんでもよいですって言われると逆に迷いますね・・

じゃあとりあえず弾の画像でも・・

ちなみにsitumonさんはどんな素材を希望ですか?


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

Name: situmon  ..プログラマー(31,771ポイント)   Date: 2009/06/29(月) 18:19   No:35966     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
弾の画像がほしいです。
特に作りにくいものとか・・・


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

Name: バグ  ..ハッカー(160,439ポイント)   Date: 2009/06/29(月) 18:33   No:35968     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
落ち物パズルのブロックにしようするつもりで描きましたが、結局未だに使用しておりません(汗)


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,039,436ポイント)   Date: 2009/06/29(月) 19:33   No:35969     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
う〜ん、私が書いた奴は全部公開してあるんですよね〜・・。
どんな弾の画像が作りにくいんでしょうか?


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

Name: yu  ..プログラマー(33,919ポイント)   Date: 2009/06/29(月) 20:23   No:35972     
Title: Re:みなさんでたくさんの素材を公開しましょう!    

前に書いた弾画像です
PSPで扱うために一回り小さく書いたので
PCでは少し小さすぎるかもしれません・・・

よければどうぞ〜


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

Name: チルチル  ..プログラマー(27,644ポイント)   Date: 2009/06/29(月) 23:08   No:35979     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
一度に複数添付する方法がわからないのでとりあえずこれを・・

では私もリクエストを2つ

@敵弾発射時の効果音に使えそうな音、連続で鳴らしても違和感が無いものを・・

A東方永夜抄でボスがスペル時に出す紫色の魔方陣みたいな画像

このサイトで見かけた〜とかでも良いです


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

Name: TKOZ  ..プログラマー(25,621ポイント)   Date: 2009/06/30(火) 19:18   No:36007     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
拙い曲ですが、欲しい人がいれば、どうぞ。

アレンジ、wav,mp3に変換は、全然オッケーです。

完全にフリーなので、ReadMe.txtに書かなくてもいいです。
でも、書いてくれたら、嬉しいです。


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

Name: やっくん  ..中級者(10,014ポイント)   Date: 2009/06/30(火) 23:12   No:36022     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
>TKOZさん
ご自分で作られたんですか?!
ゲームにとてもあう曲調で気にいったので使わせていただきます。


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

Name: TKOZ  ..プログラマー(25,703ポイント)   Date: 2009/07/01(水) 01:17   No:36033     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
やっくんさんへ

>ご自分で作られたんですか?!
はい、Dominoというフリーソフトで作りました。

>ゲームにとてもあう曲調で気にいったので使わせていただきます。
ありがとうございます。気に入っていただけて嬉しいです。


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

Name: 御津凪 [URL]  ..比類無きプログラマー(98,102ポイント)   Date: 2009/07/01(水) 10:43   No:36050     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
このサイトのサンプルプログラミングの館で紹介されている私のゲームも、
基本素材利用してかまわないものなので一応報告しておきますね。

あと、私のサイトで曲(東方アレンジ曲ですが)も1曲公開してますので、よろしかったらどぞ。


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

Name: TKOZ  ..プログラマー(25,732ポイント)   Date: 2009/07/01(水) 19:42   No:36064     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
ボスのドット絵にでもしてください。
少々古臭い感じはしますが…。


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

Name: 幽蛙  ..ぴよぴよ(107ポイント)   Date: 2009/07/01(水) 23:01   No:36082     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
東方風オリジナルゲームを創ろうとしていたのですが、
計画が頓挫してしまい陽の目を見れなくなりそうな曲を揚げさせていただきます。
著作権はとうに破棄しておりますので改変、変換などはご自由に。
感想など(主に曲に対しての突込みなど)をいただければこれ善哉です。

ReadMe.txtに書かれなくても良いのですが、書いていただけるのならこれ幸いです。


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

Name: situmon  ..プログラマー(31,887ポイント)   Date: 2009/07/02(木) 21:31   No:36138     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
みなさまありがとうございます。
つい先日、Roland社のSC-55mkUを手に入れました!!
これで楽しく作曲ができるかと♪
まだTKOZさんの曲などはきいていませんが後に聞きたいですので・・・
皆様素材が作るのがうまいですね!
管理人さまへ

作りにくいのは、東方のタン・オブ・ウルフでつかわれるあのきらきらの弾です。


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

Name: チルチル  ..プログラマー(27,571ポイント)   Date: 2009/07/02(木) 21:59   No:36144     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
あ〜アレですか・・
確かにアレは作りにくそうですね・・
龍神録にも似た弾があったので
とりあえずアレで代用してはどうでしょうか?

とりあえずzip形式の存在を思い出したので
手持ちの弾画像を全部添付しておきます

重いので2回に分けて・・


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

Name: チルチル  ..プログラマー(27,588ポイント)   Date: 2009/07/02(木) 22:00   No:36145     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
2回めです、ちなみに15番は失敗作です・・

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

Name: あ〜る  ..中級者(9,739ポイント)   Date: 2009/07/02(木) 22:39   No:36151     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
キラキラしてる弾はそうゆう画像なんじゃなくて普通の弾の画像の描画方法をいじくってキラキラなるようにしてるんじゃなかったっけ?
龍神録の「ケロちゃん雨風に負けずを作ってみよう」らへんに載ってた筈…
イメージしてるのと違ったらすいませんm(__)m


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,039,661ポイント)   Date: 2009/07/03(金) 06:15   No:36166     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
>タン・オブ・ウルフ

あ〜、あれは、弾の画像を表示しただけでは描画できないと思いますよ。
何らかのエフェクトがかけてあると思います。
あ〜るさんが仰るように、ケロちゃん弾幕とかよければ参考にして下さい。
http://dixq.net/rp/30.html
これとは少し違うでしょうけど・・。

>TKOZさん

おぉ!
ドット絵すごいですね!
CAVEのSTGを思い出します^^

>幽蛙さん
>御津凪さん
>TKOZさん

みなさん作曲できてすごいですね〜、私も作りたいのですが、なにぶんセンスが・・。
シンセサイザーを入手したので、今度の休みにでも挑戦しようかなと思っています(ノ▽`)ノ


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

Name: situmon  ..プログラマー(31,912ポイント)   Date: 2009/07/04(土) 20:00   No:36250     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
ありがとうございます!!
もうすぐ作った曲をアップします。


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

Name: situmon  ..プログラマー(32,010ポイント)   Date: 2009/07/04(土) 20:05   No:36253     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
変な曲ばかりですがお願いします。
4曲です。
できるだけSC-55mkUできいていただけるとよいかと。
でもやはり変な曲なのでそんな価値はないですが・・・
自由です。wavにしてゲームに使ってもよいです。


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

Name: tkmakwins15  ..比類無きプログラマー(97,756ポイント)   Date: 2009/07/05(日) 00:24   No:36271     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
公開できるだけの素材がないので、素材はありませんが…
ゲーム用素材をテーマにしたWikiを設立するという方法もありますよ。
そうすれば素材のアップロードの制約が少なくなります。


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

Name: DVDM [URL]  ..ぴよぴよ(53ポイント)   Date: 2009/07/05(日) 00:49   No:36273     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
素材アップしてみます。
(一部違いますが)横シューティング用に作った素材達です。
使用はご自由に。

http://u1.getuploader.com/SampleUP/download/4/%E7%B5%B5%E7%B4%A0%E6%9D%90.zip
パスワードは「dvdm」です。


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

Name: situmon  ..プログラマー(32,097ポイント)   Date: 2009/07/05(日) 20:20   No:36313     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
>ゲーム用素材をテーマにしたWikiを設立するという方法もありますよ。
今回はこちらで・・・
>(一部違いますが)横シューティング用に作った素材達です。
バックグラウンドの綺麗さに感動です。
なんのソフトを使って描きましたか?


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

Name: DVDM [URL]  ..ぴよぴよ(175ポイント)   Date: 2009/07/06(月) 00:26   No:36325     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
>>situmonさん
一部D-pixedというフリーのソフトで、一部ペイント、他はPhotoShop7.0です。
やはり絵を描く時にはレイヤー情報を扱えるペイントソフトがお勧めですね。


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

Name: situmon  ..プログラマー(32,130ポイント)   Date: 2009/07/07(火) 21:18   No:36398     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
Photoshopですか・・・
あとD-pixedですね。検索してみます。


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

Name: situmon  ..プログラマー(32,183ポイント)   Date: 2009/07/09(木) 21:13   No:36538     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
みなさん、曲を作られている方に質問ですが、音源と使用ソフトを詳しく教えてくださる方はお願いします。

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

Name: 御津凪 [URL]  ..ハッカー(102,459ポイント)   Date: 2009/07/09(木) 21:39   No:36542     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
私の場合は、製作ツールは SSW(シンガーソングライター)、音源は主に以下のものを使ってます。
(SSW 以外は無料で手に入ります)

・Kore Player
・ProteusVX
・VSC(SSW同梱音源)
・sfz(サウンドフォント)

※まだ製作に使用してませんが最近 ACID Pro 7 を買いました。


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

Name: TKOZ  ..プログラマー(26,434ポイント)   Date: 2009/07/10(金) 20:30   No:36586     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
ソフトは、Dominoを使っています。TAKABO-Softさんのです(無料です)
音源は、wav,mp3に録音する場合に限って、Proteus VX,Synth1,timidity++を使用しています。
↑の音源は全て無料で手に入ります。
今回の自分の作品は、mp3に録音していないし、midファイルなので、
音源を活かしきれていないと思いました。


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

Name: situmon  ..プログラマー(32,296ポイント)   Date: 2009/07/11(土) 10:39   No:36631     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
ありがとうございます。
自分は
・Cherry
・SC-55mkU
・前はtimidity++
ただSC-55mkUで作っても録音ができません。
ステレオミキサーがないからです・・・・
いつか買うつもりです、なので前、midiで公開しました。


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

Name: TKOZ  ..プログラマー(26,788ポイント)   Date: 2009/07/11(土) 12:18   No:36633     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
>>situmonさんへ

SoundEngineFreeというフリーソフトで録音が出来ますよ。
録音タブを選んで、録音デバイスを選択し、録音ラインを設定して、
右方向の三角ボタンを押せば、録音が開始されます。
もう一度、三角ボタンを押せば、録音が解除されます。
そしたら、再生タブを選択して、別名保存を選択して、wavファイルで保存すれば完了です。
あとは、SCMPXやらなにやらでmp3に変換してください。
うまくいかない場合は、ググッてください。


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

Name: TKOZ  ..プログラマー(26,891ポイント)   Date: 2009/07/13(月) 21:21   No:36757     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
>>situmonさん
パソコンで音が鳴るということは、おそらく録音も出来るはずですが、
録音が出来ない状態なら、詳しく手元のメモからやり方を書きます。

新しく出来た曲をアップロードしました。
(録音した曲をアップするには、1曲でもサイズがでかい事が判明したので、
従来通りsmf形式でアップロードしました。)


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

Name: TKOZ  ..プログラマー(26,928ポイント)   Date: 2009/07/13(月) 21:23   No:36760     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
あっ、そうか…録音した曲がアップロード出来ないから
困ってたんですか?
>>situmonさん


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

Name: TKOZ  ..プログラマー(26,962ポイント)   Date: 2009/07/14(火) 07:52   No:36801     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
格闘ゲームの微妙な品質のドット絵です。
サイズは割と小さめです。


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

Name: situmon  ..プログラマー(32,467ポイント)   Date: 2009/07/14(火) 20:23   No:36826     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
調べた上なのですが、Vistaは録音できるデバイスがないということですので、やはり
ステレオミキサーを買いたいと思います。
TKOZさんありがとうございます。
ドット絵ですか!あのなんともいえないよき古きゲームってありますよね。
すごく上手いです。
あと、Timidity++の音源ですが、midファイル添付しました。
聞いてくださると光栄です。

それと
midファイルは
一度ウィルスに感染した(1つ)ので駆除しましたが心配な方はご注意願います。
でも駆除してからもう一度検索したところ0でみつからなかったので大丈夫だと思います。


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

Name: situmon  ..プログラマー(32,468ポイント)   Date: 2009/07/14(火) 20:31   No:36827     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
みなさんどのくらいで曲を作りますか?
自分は
一日、一回なんとなく引いたフレーズを発展させ、1分弱の曲をつくってます。


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

Name: 御津凪 [URL]  ..ハッカー(105,532ポイント)   Date: 2009/07/14(火) 21:36   No:36835     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
しっくり来るフレーズ・展開が出てこなかったら基本破棄するタイプなので、
未だにオリジナル曲として公開したものは無いです。
(なので先にアレンジ曲が出来ちゃうのですが…)

今は製作の方に力を入れているので作曲はさっぱりしてませんが、

作曲は1週間頑張って何とか形になるぐらいですね。


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

Name: TKOZ  ..プログラマー(27,027ポイント)   Date: 2009/07/15(水) 17:36   No:36905     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
>>situmonさん
聴いてみました。なんか面白い曲というか、不思議な感じの曲ですね。

作曲は、1曲あたり、2時間くらいで出来ます。まあ、手抜きをしているので、
いまだにこれといった名曲が自分の中にはないです。

追記:
ドット絵を褒めて頂きありがとうございます。
でも、もっと上手い人はたくさんいますよ。
TAKABO-Softのドット絵掲示板とか見ると凄いレベルのドット絵を見ることが出来ます。


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

Name: situmon  ..プログラマー(32,480ポイント)   Date: 2009/07/15(水) 20:37   No:36913     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
チルチルさんへ

返事が遅れすいません。
弾画像ですね。とても綺麗にできていてよかったです。
たくさんあってどれも実用的でした。
使わせていただくかもです。


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

Name: チルチル  ..プログラマー(31,050ポイント)   Date: 2009/07/15(水) 20:48   No:36914     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
まあ自分で描いたわけではないんですけどね
フリー素材をトリミングして並べて作ったのですが
欠けている色は赤,青,黄を重ねて7色そろえました


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

Name: チルチル  ..プログラマー(31,090ポイント)   Date: 2009/07/15(水) 21:26   No:36917     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
気が向いたので失敗した15番を作り直してみました
よろしければ使ってください


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

Name: situmon  ..プログラマー(32,508ポイント)   Date: 2009/07/21(火) 17:44   No:37081     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
この弾はとても作りにくいので助かります。
使うかもです。


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

Name: situmon  ..プログラマー(32,578ポイント)   Date: 2009/07/24(金) 15:35   No:37203 解決!     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
みなさんどうもありがとうございました。
本当にいろいろな素材を提供してくださりありがとうございました。
これからもよろしくお願いします。


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

Name: TKOZ  ..プログラマー(27,082ポイント)   Date: 2009/07/27(月) 15:45   No:37368     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
またまた、格闘ゲーム風のドット絵です。
今回は、前回のキャラをリメイクし、動きを
付けてみました。
このキャラに名前はないです。


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

Name: situmon  ..プログラマー(36,020ポイント)   Date: 2009/07/27(月) 18:54   No:37378     
Title: Re:みなさんでたくさんの素材を公開しましょう!    
ありがとうございます!!
いろいろな素材を提供してくれてありがとうございました。


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



Name: ミトリ  ..ぴよぴよ(644ポイント)   Date: 2009/07/24(金) 16:15   No:37210       
Title: 残機の減らし方    
龍神録プログラミングの館を参考にさせていただきながらシューティングを作っているのですが、
残機の減らし方がわかりません。
敵の攻撃を受けて減っているはずなのですが、スコアボードの"Player"の★が減っていないので困っています。
ご指導お願いします


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


Name: ねこ  ..プログラマー(30,733ポイント)   Date: 2009/07/24(金) 16:26   No:37212     
Title: Re:残機の減らし方    
http://www.play21.jp/board/formz.cgi?action=res&resno=34180&page=&lognum=108&id=dixq&rln=35364
のひよこさんのレスから抜粋。

>弾を食らった瞬間にch.num-=1;をすればいいです。


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

Name: ミトリ  ..ぴよぴよ(751ポイント)   Date: 2009/07/27(月) 14:46   No:37359     
Title: Re:残機の減らし方    
返信ありがとうございます!
弾を食らった瞬間のプログラムを探しているのですが、自分のプログラムにしっかり説明をいれてなかったので
場所がわからないです(´;ω;`)
教えていただけないでしょうか?

ほとんど龍神録の改造のままなのでプログラムの場所は変わっていないと思います


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

Name: YuO  ..プログラマー(32,031ポイント)   Date: 2009/07/27(月) 15:06   No:37363     
Title: Re:残機の減らし方    
それくらいも分からないのなら
龍神録の改造はやめたほうがいいと思います。これからのためにも、自分のためにも

まずはゲームプログラミングの館から勉強することをお勧めします。


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

Name: ねこ  ..プログラマー(31,315ポイント)   Date: 2009/07/27(月) 15:12   No:37364     
Title: Re:残機の減らし方    
50章で言えばout.cppの213行目あたりです。

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



Name: takashi  ..ぴよぴよ(191ポイント)   Date: 2009/07/27(月) 07:45   No:37341       
Title: 整数値を数字文字に変換    
int no;

scanf("%d", &no); // 生徒番号を入力
chechno(no);  
:
:
int chechno(int no) // 生徒番号が数字以外入力されていないかチェック
{
 :
 :
}

生徒番号を入力して、その番号が数字以外が入力されていないか、チェックする関数を作ろうと思ったのですが、noをcheckno関数に渡したものの、そのあとをどうすればいいのか分かりません。
そのnoを配列に入れて、一文字ずつ走査して、isdigit関数を用いてチェックしようと思ったのですが、
noの値をどのようにしたら、配列に入れることができるのですか?


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


Name: non  ..熟練のプログラマー(57,663ポイント)   Date: 2009/07/27(月) 08:38   No:37342     
Title: Re:整数値を数字文字に変換    
>int no;
>scanf("%d", &no); // 生徒番号を入力

int型で入力したのだから、数字以外は元々、入力されていません。
何を、したいのかもう少し、具体的に示してください。
例えば、生徒番号に規則があるとか、範囲があるとか。



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

Name: toyo  ..プログラマー(39,895ポイント)   Date: 2009/07/27(月) 08:52   No:37344     
Title: Re:整数値を数字文字に変換    
scanf("%d", &no);
に"123abc"入力したら数字部分の123のみnoに入ります
"abc123"と入力したらnoには何も入らなくscanfが0を返します
scanf( )で%d使った時点で数字のみ入力されています
自分でチェックしたいならfgets( )やscanf("%s", 〜)で文字列として読み込んだらいいでしょう


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

Name: takashi  ..ぴよぴよ(231ポイント)   Date: 2009/07/27(月) 10:15   No:37349     
Title: Re:整数値を数字文字に変換    
すいません、初歩的なことでした。

わざわざ関数作る必要なかったです。


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



Name: blackman  ..ぴよぴよ(145ポイント)   Date: 2009/07/27(月) 08:52   No:37343       
Title: queueとlist    
キューを使った簡単な計算機プログラムです。
コンパイルエラーについての質問です。

ソースが長いためとりあえず原因となり得る箇所をピックアップします。
struct queuen{
double data;
struct queuen *next;
};

struct queuen *sp=NULL;

struct list{
struct queuen *head;
struct queuen *tail;
};

struct list *lst;

lst->head = sp;//←ここが問題の21行目です。
lst->tail = sp;

コンパイルすると
c:21:error : parse error before '->' token
となります。

原因が分からないので教えていただけませんか?


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


Name: ねこ  ..プログラマー(30,784ポイント)   Date: 2009/07/27(月) 09:12   No:37345     
Title: Re:queueとlist    
lst->head = sp;
lst->tail = sp;

これらの処理は関数外では記述できません。
main関数の上の方に移せば動くんじゃないでしょうか。


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

Name: blackman  ..ぴよぴよ(0ポイント)   Date: 2009/07/27(月) 09:26   No:37347     
Title: Re:queueとlist    
>>プログラマーさん

ご指摘ありがとうございます。
ご指摘に従って修正しました(修正したソースを添付しています)ところ、
コンパイルは通ったのですが、実行時において

$ ./a.exe
201 [main] a 11440 _cygtls::handle_exceptions: Error while dumping state
(probably corrupted stack)
Segmentation fault (core dumped)

このようなエラーが出てしまいます。
main()のwhile文に入る前にエラーが出ているため、恐らく
main()内の
lst->head = sp;
lst->tail = sp;
におけるエラーだと思いますが、原因がつかめません。
たびたび申し訳ありませんが教えていただけないでしょうか?

ちなみにwindows vista で cygwinを使っています。
./a.exeによる実行です。


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

Name: ねこ  ..プログラマー(30,803ポイント)   Date: 2009/07/27(月) 09:59   No:37348     
Title: Re:queueとlist    
lst変数にメモリが確保されてません。newかmallocで確保してから設定して下さい。

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



Name: 256bit  ..かけだし(1,116ポイント)   Date: 2009/07/19(日) 17:50   No:37017       
Title: C言語〜プログラミングの館のHP〜について    
 最近C言語プログラミングの館のHPにアクセスした際、項目0の「0. (導入)DXライブラリを手に入れる。」以降表示されません。こういうときはどうしたらいいですか?

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


Name: lbfuvab  ..上級者(21,328ポイント)   Date: 2009/07/19(日) 18:11   No:37018     
Title: Re:C言語〜プログラミングの館のHP〜について    
http://dixq.net/g/#1 にアクセス出来ますか?

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

Name: 256bit  ..かけだし(1,158ポイント)   Date: 2009/07/19(日) 18:27   No:37019     
Title: Re:C言語〜プログラミングの館のHP〜について    
ここからアクセスはできましたが、 http://dixq.net/g/#1の内容は表示されませんでした。

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

Name: lbfuvab  ..上級者(21,342ポイント)   Date: 2009/07/19(日) 18:36   No:37020     
Title: Re:C言語〜プログラミングの館のHP〜について    
環境は何ですか?(OS,ブラウザ,回線等)

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

Name: array [URL]  ..熟練のプログラマー(51,306ポイント)   Date: 2009/07/19(日) 18:41   No:37021     
Title: Re:C言語〜プログラミングの館のHP〜について    
基本的な解決には繋がりませんが使用するブラウザを変えてみてはどうでしょうか。

備考:無料で使えるブラウザ
Google Chrome
Firefox
Lunascape

Google Chromeが一番軽かったと思います。


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

Name: 256bit  ..かけだし(1,205ポイント)   Date: 2009/07/19(日) 18:57   No:37022     
Title: Re:C言語〜プログラミングの館のHP〜について    
 OSはXPでワイヤレスでネット接続しています。電波がいいところでも試し見たのですが、状況は変わりませんでした。

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

Name: lbfuvab  ..上級者(21,365ポイント)   Date: 2009/07/20(月) 11:13   No:37034     
Title: Re:C言語〜プログラミングの館のHP〜について    
う〜ん、他にネットの事に関して障害が発生する事はありますか?
後、ソースも見てみて下さい。


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

Name: 256bit  ..かけだし(1,345ポイント)   Date: 2009/07/20(月) 16:50   No:37044     
Title: Re:C言語〜プログラミングの館のHP〜について    
 >>lbfuvabさん

 C言語〜プログラミングの館のHP〜のHPソースを見てみましたが、「0. (導入)DXライブラリを手に入れる。」までしか記載されてませんでした。
 ワイヤレスの為、電波が届かなくなることがよくあります。(普段の電波:最弱)やはり、電波の問題が大きいでしょうか?

 >>arrayさん

 ありがとうございます。
 教えてもらったとおり、今は応急処置でGoogleChromeを使ってます。このブラウザでは正常にHPが動作しました。


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

Name: lbfuvab  ..上級者(21,328ポイント)   Date: 2009/07/21(火) 00:03   No:37059     
Title: Re:C言語〜プログラミングの館のHP〜について    
う〜ん、私のIEではいけたのですが…
クロムで動いたという事は解決と見なして良いのでしょうか?


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

Name: 256bit  ..かけだし(1,376ポイント)   Date: 2009/07/27(月) 03:00   No:37339 解決!     
Title: Re:C言語〜プログラミングの館のHP〜について    
 >>lbfuvabさん

 今日場所を少し変えてここを立ち上げてみたら、正常に動作しました。^^
 


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

Name: 256bit  ..かけだし(1,482ポイント)   Date: 2009/07/27(月) 03:02   No:37340 解決!     
Title: Re:C言語〜プログラミングの館のHP〜について    
 >>lbfuvabさん

 どうも、ありがとうございます。今日場所を少し変えてHP開いてみたら、Explorerでも正常に動作しました。^^


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



Name: kms  ..かけだし(1,047ポイント)   Date: 2009/07/26(日) 13:33   No:37314       
Title: アニメーション描画    
質問失礼致します。

現在、アニメーションを描画する関数を作成しているのですが、
PCの性質を理解していない為、試行錯誤を繰り返しています。
動かせたいキャラクターの画像は、配列として[11]、用意してはいるのですが、
for文を用いても、キャラクターが動かず(一瞬で止まってしまう)、
[0]>[1]>[2]>[3]>.....と徐々にiの値を増やしたいのですが、どういった計算式が必要でしょうか?

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

int g_image[ 11 ] ;//画像を分割して配列要素に保存

int Opening( void ){
for ( i = 0 ; i < 11 ; i++ ){
DrawGraph( x , y , g_image[i] , TRUE ) ;//画像を描画
Sleep(60);
}
if ( i == 11 ) i = 0 ;//iが11(配列の要素数)になった時点で0に戻す
}
return 0;
}

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

ヒントを頂けたら幸いです。
文法に関してもご教授頂けたら嬉しいです。

度々申し訳ないです。。


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


Name: バグ  ..ハッカー(163,536ポイント)   Date: 2009/07/26(日) 13:56   No:37316     
Title: Re:アニメーション描画    
forループを継続する条件が「iが11未満ならば」ですから、iは0〜10に変化するだけで11になる事はありません。よって、0〜10の変化を繰り返しさせたいのでしょうが実際にはiの値がリセットされる事なく終了しています。
それから、ループ内でメッセージ処理がされてないので、ProcessMessage関数をどこかに入れてやらないといけないかと…


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

Name: kms  ..かけだし(1,182ポイント)   Date: 2009/07/26(日) 15:50   No:37318     
Title: Re:アニメーション描画    
バグ様、お返事ありがとうございます。

「iが11未満ならば」。そうですね。「以下」と「未満」を履き違えていました。。
助かりました^_^

>>ループ内でメッセージ処理がされてないので、
>>ProcessMessage関数をどこかに入れてやらないといけないかと…

ProcessMessage関数は、複数存在しても大丈夫なのでしょうか?
入れる箇所がいまいち理解できていないので。。

(追記:自分で作った関数で、それが繰り返し処理を必要とする関数の場合、
 ProcessMessage関数ループ内にその関数を書かなければいけないのでしょうか?)。

説明下手ですみません。。


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

Name: バグ  ..ハッカー(163,619ポイント)   Date: 2009/07/26(日) 17:21   No:37320     
Title: Re:アニメーション描画    
多分、描画用のメッセージ処理を行なわないと画面が描き変わらなくなるんじゃないかな?
ProcessMessage関数自体はメッセージ処理をしているだけのはずなんで、何処で呼び出しても問題ないと思いますが、出来るなら一ヵ所にまとめておいた方がよいかと…
DXライブラリにはそんなに詳しくないので、嘘を言っているかもしれませんが…(^_^;)


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

Name: TRUTH  ..中級者(11,918ポイント)   Date: 2009/07/26(日) 19:07   No:37326     
Title: Re:アニメーション描画    
こんにちはー。

http://dixq.net/rp/2.html
からWinMainだけ抜き出しました。
このような状態でアニメーションを行いたいとします。


ココ!と書かれている場所にOpeningなどの処理したい関数を入れてください。
例え描画の絡む繰り返しの処理(アニメーションやゲーム画面など)はforを使いません。
なぜならScreenFlip();が呼ばれないと画面の更新が行われないはずですので
アニメーションにしたい場合は、アニメ静止画@→ScreenFlip()→アニメ静止画A→ScreenFlip()…
と繰り返されるように組みます。



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 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
//↑メッセージ処理   ↑画面をクリア     ↑入力状態を保存       ↑ESCが押されていない


//ココ!!



ScreenFlip();
}

DxLib_End();
return 0;
}


ココの部分にOpening();を挿入したとしますと
Opening→ScreenFlip()→Opening→ScreenFlip()…と繰り返し処理されます。
上記の説明と比べますとOpening内の描画が、アニメ静止画@→アニメ静止画A…と処理すればいいことが
わかると思います。

龍神録をつくろう7章でアニメーションが実装されていますので参考にしてみるといいかもしれません。
http://dixq.net/rp/7.html


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

Name: バグ  ..ハッカー(163,637ポイント)   Date: 2009/07/26(日) 19:48   No:37327     
Title: Re:アニメーション描画    
裏画面処理をしなければ、forループ内で処理しても問題ないと思いますよ。

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

Name: kms  ..入門者(2,557ポイント)   Date: 2009/07/27(月) 02:49   No:37338     
Title: Re:アニメーション描画    
バグ様、TRUTH様、お返事ありがとうございます。
アドバイスを参考にし、どうにかアニメーション描画を完成させる事ができました(感謝!)。

その後、WinMain関数内で、選択画面を作り、エンターキーが押された時点でアニメーション描画関数(Opening();)を呼び出そうとしたのですが、
以下のコードで問題は無いでしょうか?
メッセージ処理と画面クリアを二度、用いているのですが。。。


#include "DxLib.h"
//グローバル
int Opening( void );//プロトタイプ宣言

int x = 0 , y = 240 , i = 0 ;
int g_image[ 11 ] ;//画像を分割して配列要素に保存
char KeyBuf[ 256 ] ;//入力を取得する

int Opening( void )//オープニング関数
{
SetDrawScreen( DX_SCREEN_BACK );//裏画面処理
while( ProcessMessage()==0 && ClearDrawScreen()==0 ){ //*ココ

//アニメーション描画
DrawGraph( x , y , g_image[i] , TRUE ) ;//画像を描画
i++;
if ( i == 11 ) i = 0 ;//iが11(配列の要素数)になった時点で0に戻す

ScreenFlip();//表画面に反映
}

WaitKey();
DxLib_End();
return 0;
}


int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP , LPSTR lpC , int nC ){
ChangeWindowMode(TRUE);//ウィンドウサイズの変更
if( DxLib_Init() == -1 ) return -1;

LoadDivGraph( "player01.bmp" , 11 , 11 , 1 , 64 , 64 , g_image );//画像を分割して読み込み

SetDrawScreen( DX_SCREEN_BACK );//裏画面処理

while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( KeyBuf ) && !KeyBuf[KEY_INPUT_ESCAPE]){

int cr_1 = GetColor( 255 , 255 , 255 );//色を取得
SetFontSize( 40 ) ; //サイズを40に変更
SetFontThickness( 1 ) ; //太さを1に変更
ChangeFont( "HGS創英角ポップ体" ) ; //HGS創英角ポップ体に変更
ChangeFontType( DX_FONTTYPE_ANTIALIASING_EDGE );//アンチエイリアス&エッジ付きフォントに変更
DrawString(220,50,"GAME", cr_1 );

SetFontSize( 12 ) ; //サイズを12に変更
SetFontThickness( 2 ) ; //太さを2に変更
DrawString( 220 , y , "■" , cr_1 );
DrawString( 250 , 240 , "NewGame" , cr_1 );//文字列を描画
DrawString( 250 , 260 , "LoadGame" , cr_1 );//文字列を描画
if( KeyBuf[ KEY_INPUT_DOWN ] == 1 ){//下キーが押されていたら、
y += 20 ;//矢印を下に動かす
if( y == 280 ) y = 240 ;//yが280に達しようとしたとき、yを初期値に戻す
}
if( KeyBuf[ KEY_INPUT_RETURN ] == 1 ){
ClearDrawScreen();//画面を初期化
Opening();//ココで呼び出す
}

ScreenFlip();//表画面に反映
}
WaitKey();
DxLib_End();
return 0;
}


動作はするのですが、文法上、どうなのかな? と気になってしまい。。


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



Name: 華穂  ..ぴよぴよ(382ポイント)   Date: 2009/07/26(日) 18:03   No:37321       
Title: 敵キャラの動きについて    
初めまして。

今回初めての質問です。
実は、今課題としてシューティングゲームを作っているのですが、
所々分からないところがありましてそのうちの1つを教えてもらいたくて
こちらに書き込みさせてもらいました。

ええと、分からないというのが、雑魚敵の動きをどう表現すればいいのか
というもので、パターンは2つあります。(1ステージ目の雑魚敵は8体います。)


1つが、自機に向かって特攻してくる雑魚敵(3体)
2つ目が、左端に向かって上下運動をする雑魚敵(5体。左端つまり画面から消えたら消滅する)



というものです。
1つめの方は、なんとかなるのですが、2つめの上下運動・・つまり、波の動きをする雑魚敵のほうが、どう書けばいいのか分からず、ぜひこちらで教えてほしいと書き込みしました。
なにぶん数学的なところも弱く、今地道に勉強はしているのですが分からないためぜひアドバイス、または教えてほしいです。

えと、ちなみに今利用しているのは、DxLib・C++で2Dのシューティングです。
シューティングでは、画像は全て横を向いています。(こちらにある縦向きのシューティングとは違いますね)



なにとぞよろしくお願いいたします。


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


Name: situmon  ..プログラマー(34,831ポイント)   Date: 2009/07/26(日) 18:42   No:37322     
Title: Re:敵キャラの動きについて    
sin波とかのことですか?
でしたら
http://dixq.net/s/15.html
とか
http://dixq.net/s/16.html
を見たらわかると思います。


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

Name: nayo  ..中級者(11,477ポイント)   Date: 2009/07/26(日) 18:43   No:37323     
Title: Re:敵キャラの動きについて    
グラディウスのような感じですかね。

敵のx座標をe.x、y座標をe.y、これと毎フレーム加算されていくようなカウンタをe.cntとすると、

e.x -= 横方向速度;
e.y = y方向中心位置 + 振幅 * sin( π/周期 * e.cnt );

というような感じでどうでしょうか。
そちらのプログラムがどういう感じで敵を管理しているか分からないので微妙ですが一応参考にどうぞ。

#追記
/周期とするためには2πじゃないとだめでしたね


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

Name: 華穂  ..ぴよぴよ(517ポイント)   Date: 2009/07/26(日) 19:05   No:37325 解決!     
Title: Re:敵キャラの動きについて    


なるほど・・・。

プログラマー様、中級者様分かりやすいアドバイスありがとうございます!

そういった方法があるのですね、勉強になります。
参考に教えていただいた方を見て、もうちょっと勉強・試してみたいと思います。
まだまだ未熟者で、これから先ちょくちょく質問をすると思いますが、またどうぞよろしくおねがいします。




では、がんばります!



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



Name: エデリュス  ..かけだし(1,028ポイント)   Date: 2009/07/20(月) 16:41   No:37043       
Title: 弾幕などの質問    
お久しぶりです。
早速ですが質問します。
1、ボス弾幕でボスを移動させていたんですが曲線に移動できるのでしょうか。
たとえば、自機の周りを一周回るなど・・・
パーフェクトFのを見て実験したんですがカクカクとしか動かないのでお願いします。

2、飛光虫ネストを再現してるのですが、弾幕データでキャラクターの座標を記憶→放つ→記憶→・・・
にしたいのですがアドバイスを下さい。

3、プリズムリバーのように3体のボスのように複数のボスを描写するにはどうすればいいでしょう。

いつもすいません。
よろしくおねがいします。


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


Name: TRUTH  ..初心者(6,422ポイント)   Date: 2009/07/21(火) 04:18   No:37069     
Title: Re:弾幕などの質問    
こんにちはー分かる・思いつく範囲で回答してみます。
(興味があるので後日、試してみます)

@曲線移動はちょっとわかりません・・・
自機の周りをずっとまわるとかでしたらsin cos程度でいけそうな気もしますが・・・

曲線関係でしたらペジェ曲線なども使えそうな感じもします。
http://homepage2.nifty.com/natupaji/DxLib/dxprogram.html#N27





Aこれは、さとりの飛行虫ネストでいいのでしょうか?
動画で見ましたが、自機依存の弾の話のようなので丸い弾の方ですよね?

パターンとしては、決まったカウントがくると6方向に発射
その後、弾の座標が枠外になりそうになると自機に向けてある程度加速して軌道変更だと思います。


軌道変更の仕方が分からないというような書き込みのようなので、詳しくかきますと
(弾の座標が枠外になりそうになる かつ 状態が0)という条件が真ならば
弾のangleを自機に向け、状態を1にする。
さらにそれらしくするならば 状態1のとき 速度が一定になるまで加速させる。
これでうまくいくと思います。





BプリズムリバーということはHPを共有してる形ですよね?
思いつくのは、ボスの付属品のような扱いにしてしまい(自機のオプションのようにし、ボスの構造体に入れてしまう)
フラグが立っている場合は表示させ、ボスに当たり判定があってフラグが立っているなら
当たり判定もあるという形しか浮かびません・・・


まだ未熟なのでこのような回答ですみません。


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

Name: エデリュス  ..かけだし(1,070ポイント)   Date: 2009/07/26(日) 16:23   No:37319     
Title: Re:弾幕などの質問    
返信遅れてすいません。
まだ試していませんがこんどやってみます。
TRUTH様ありがとうございます。


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



Name: スペルヴォ  ..ぴよぴよ(64ポイント)   Date: 2009/07/20(月) 17:37   No:37048       
Title: 32章にて    
私は今龍神録の32章をやっている(コピペ)のですが、何故かこの章からフルスクリーンで表示されて
しまいます。
自分のパソコンはとある事情でフルスクリーンのものを表示することができず、対処しようにも全く手が
打てません。
プログラムのどこを変えればウィンドウで表示できるようになるのか教えてください。
OSはXPで、Visual Studio 2008を使っています。


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


Name: Justy  ..伝説なるハッカー(394,302ポイント)   Date: 2009/07/21(火) 01:07   No:37062     
Title: Re:32章にて    
 main.cppにある WinMain関数の先頭に ChangeWindowMode関数の呼び出しがコメントアウト、
もしくは削除されていませんか?

 もしそうであれば

ChangeWindowMode(TRUE);

 の一行を WinMain関数の先頭に入れてみてください。


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

Name: スペルヴォ  ..ぴよぴよ(108ポイント)   Date: 2009/07/23(木) 20:41   No:37180     
Title: Re:32章にて    
>>Justy さん
ありがとうございました!!
ChangeWindowMode関数が消えてました(^^;


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

Name: スペルヴォ  ..ぴよぴよ(113ポイント)   Date: 2009/07/26(日) 15:11   No:37317 解決!     
Title: Re:32章にて    
.

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



Name: situmon  ..プログラマー(34,009ポイント)   Date: 2009/07/24(金) 15:42   No:37204       
Title: シューティングゲームの館での疑問    
何回も読み返しているのですが疑問がかなり出てきて、
どうしても解決できないので聞きたいことがあります。
たくさんあるかもしれませんがよろしくお願いします。
ひとつは

http://dixq.net/s/17.html


for(j=0;j < ENEMY_TOTAL_NUM ;j++)//発射されていない弾を探す。
if(EnemyShot[j].flag==0)//あったらそこでiを保持してブレイク
break;

とはどういう意味ですか?
もうひとつは

#include "DxLib.h"
#include "Extern.h"
#include <math.h>
#define PI 3.1415926535897932384626433832795
#define PI2 PI*2

void Enemy_shot_pat1(int i){

for(int j=0;j<98;j++){
if(e_shot[i].count==0){
e_shot[i].bullet[j].flag=1;
e_shot[i].bullet[j].x=e_shot[i].ex;
e_shot[i].bullet[j].y=e_shot[i].ey;
e_shot[i].bullet[j].angle=atan2(e_shot[i].py-e_shot[i].bullet[j].y,e_shot[i].px-e_shot[i].bullet[j].x)+PI2/98*j;
e_shot[i].bullet[j].spd=2.0f;
e_shot[i].bullet[j].img=3;
e_shot[i].bullet[j].col=2;
e_shot[i].bullet[j].turn=0;
PlaySoundMem( sound_effect[2] , DX_PLAYTYPE_BACK ) ;
}
}
for(int j=0;j<200;j++){
e_shot[i].bullet[j].x+=e_shot[i].bullet[j].spd*cos(e_shot[i].bullet[j].angle);
e_shot[i].bullet[j].y+=e_shot[i].bullet[j].spd*sin(e_shot[i].bullet[j].angle);
}

}
void Enemy_shot_Control(){
int i;
for(i=0;i<Enemy_max;i++){
if(e_shot[i].flag==1){
if(e_shot[i].pat==1)
Enemy_shot_pat1(i);
*すいませんここはなにもないです。
}
}
}
void Enemy_shot_graph(){
for(int i=0;i<Enemy_max;i++){
if(e_shot[i].flag==1){
e_shot[i].count++;
for(int j=0;j<Enemy_shot_max;j++){
if(e_shot[i].bullet[j].flag==1){
if(e_shot[i].bullet[j].turn==1)
DrawRotaGraph( (int)e_shot[i].bullet[j].x , (int)e_shot[i].bullet[j].y , 1.0f , PI*((double)count*0.1) , enemy_shot_img[e_shot[i].bullet[j].img][e_shot[i].bullet[j].col] , TRUE ) ;
if(e_shot[i].bullet[j].turn==0){
e_shot[i].bullet[j].d_angle=e_shot[i].bullet[j].angle+PI/2;
DrawRotaGraph( (int)e_shot[i].bullet[j].x , (int)e_shot[i].bullet[j].y , 1.0f , e_shot[i].bullet[j].d_angle ,enemy_shot_img[e_shot[i].bullet[j].img][e_shot[i].bullet[j].col] , TRUE ) ;
}
if(e_shot[i].bullet[j].x<-35 || e_shot[i].bullet[j].x>450 || e_shot[i].bullet[j].y<-50 || e_shot[i].bullet[j].y>480)
e_shot[i].bullet[j].flag=0;
}
}
}
}
for(int i=0;i<Enemy_max;i++){
if(e_shot[i].flag==1){
for(int j=0;j<Enemy_shot_max;j++){
if(e_shot[i].bullet[j].flag==1){
return;
}
}
e_shot[i].flag=0;
}
}
}

で問題はないのでしょうか?
(EnemyShot[i].EnemyShots[j].はe_shot[i].bullet[j].にかわってます)
ほかにも変わっていますが。。。

かなりかえたのでこれでいいのか不安で・・・







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


Name: ねこ  ..プログラマー(30,549ポイント)   Date: 2009/07/24(金) 15:51   No:37206     
Title: Re:シューティングゲームの館での疑問    
・1個目
敵ショット配列を0からチェックしていき、flagが0(未使用)のものを探している

・2個目
何を持って「問題はない」と判断すれば良いのですか?
ただの変数の置き換えなら起動して動けばそれでいいと思います。
どう考えて、こう変えて、こう動いて欲しい。という内容がないと意図がよく分かりません。



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

Name: situmon  ..プログラマー(34,716ポイント)   Date: 2009/07/24(金) 16:04   No:37208     
Title: Re:シューティングゲームの館での疑問    
enemy.cppは

#include "DxLib.h"
#include "Extern.h"

void Enemy_pat1(int i){
int j;
if(enemy[i].count<50)
enemy[i].y+=2.0f;
if(enemy[i].count>50 && enemy[i].count%10==0 ){
for(j=0;j<Enemy_shotg_max;j++)
if(e_shot[j].flag==0)
break;
e_shot[j].flag=1;
e_shot[j].ex=enemy[i].x;
e_shot[j].ey=enemy[i].y;
e_shot[j].px=player.x;
e_shot[j].py=player.y;
e_shot[j].count=0;
e_shot[j].pat=1;
}
}

void Enemy_Control(){
int i;
for(i=0;i<Enemy_max;i++){
if(enemy[i].flag==1){
if(enemy[i].pat==1)
Enemy_pat1(i);
}
}
}
void Enemy_graph(){
int i;
for(i=0;i<Enemy_max;i++)
if(enemy[i].flag==0)
break;

switch(count){
case 50:
enemy[i].pat=1;
enemy[i].flag=1;
enemy[i].count=0;
enemy[i].img=1;
enemy[i].x=200;
enemy[i].y=-10;
enemy[i].hp=500;
break;
}
for(i=0;i<Enemy_max;i++) {
if(enemy[i].flag==1){
enemy[i].count++;
DrawRotaGraph( (int)enemy[i].x , (int)enemy[i].y , 1.0f , 0.0f , enemy_img[enemy[i].img][count%12/2] , TRUE ) ;
if(enemy[i].x<-35 || enemy[i].x>450 || enemy[i].y<-50 || enemy[i].y>480)
enemy[i].flag=0;
}
}
}

なのですが、
画面のように玉が途切れて、今まで表示されてたあたり判定の画像が表示されないのです。
ふつうif(enemy[i].count>50 && enemy[i].count%10==0 ){だから途切れることはないはずです。

#define Player_shot_max 5
#define Player_shot_max2 5
#define Player_shot_level 5
#define Enemy_max 30
#define Enemy_shotg_max 30
#define Enemy_shot_max 1000

です。


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

Name: ねこ  ..プログラマー(30,660ポイント)   Date: 2009/07/24(金) 16:23   No:37211     
Title: Re:シューティングゲームの館での疑問    
<ふつうif(enemy[i].count>50 && enemy[i].count%10==0 ){だから途切れることはないはずです
こっちは多分弾数制限かかってそう。
#define Enemy_shot_max 1000 ←を3000とかにしてもそうなるか確認して下さい。

<今まで表示されてたあたり判定の画像が表示されないのです。
何のですか?プレイヤー?もうちょっと主語を明確に。


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

Name: situmon  ..プログラマー(34,773ポイント)   Date: 2009/07/24(金) 16:55   No:37214     
Title: Re:シューティングゲームの館での疑問    
えっと調べたらEnemy_shotg_maxの数だけしかリングを作ってくれないことがわかりました・・・
がどうすればいいのかがさっぱり・・・
当たり判定の画像は プレイヤーの当たり判定の画像です。


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

Name: TRUTH  ..中級者(11,144ポイント)   Date: 2009/07/24(金) 17:30   No:37216     
Title: Re:シューティングゲームの館での疑問    
こんにちはー。

Enemy_shotg_maxの数も変更すれば大丈夫だと思います。
画像のリング状の一部が弾幕が欠けてるのは仕様ですか?


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

Name: TRUTH  ..中級者(11,476ポイント)   Date: 2009/07/24(金) 17:54   No:37220     
Title: Re:シューティングゲームの館での疑問    
追記です。
シューティングゲームの館のほうは、ほとんど読んでいませんので
完全に把握しているわけではないのですが・・・


#define Enemy_shot_max 1000
だった場合にこの弾幕を実行すると、1000のうちの98しか
e_shotのbulletを使用していないという事はないでしょうか?
(弾幕1つにつき弾を1000発生成できるので最大で3万発は作れます)


Enemy_pat1(int i)で

if(enemy[i].count>50 && enemy[i].count%10==0 ){

for(j=0;j<Enemy_shotg_max;j++)

if(e_shot[j].flag==0)

break;

e_shot[j].flag=1;

e_shot[j].ex=enemy[i].x;

e_shot[j].ey=enemy[i].y;

e_shot[j].px=player.x;

e_shot[j].py=player.y;

e_shot[j].count=0;

e_shot[j].pat=1;

}



enemy[i].count%10==0として、「弾幕」にフラグを立てているわけですが
Enemy_shotg_max 30 ですので「弾幕」が消えるまではリング30個分しか登録できないはずです。

図にすると
弾幕1  弾98/1000使用中
弾幕2  弾98/1000使用中
  (略)
弾幕30 弾98/1000使用中
などのような状態になってると思うのですが・・・確かめてみてはどうでしょう?




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

Name: situmon  ..プログラマー(34,877ポイント)   Date: 2009/07/24(金) 18:22   No:37221     
Title: Re:シューティングゲームの館での疑問    
>画像のリング状の一部が弾幕が欠けてるのは仕様ですか?
はい、あの隙間にもぐりこんで回るのをつくります!!
>enemy[i].count%10==0として、「弾幕」にフラグを立てているわけですが
>Enemy_shotg_max 30 ですので「弾幕」が消えるまではリング30個分しか登録できないはずです。
そうなのですか・・・
ではもっと増やします。


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

Name: situmon  ..プログラマー(34,894ポイント)   Date: 2009/07/26(日) 13:38   No:37315 解決!     
Title: Re:シューティングゲームの館での疑問    
無事解決できました!
ありがとうございました。


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



Name: チルチル  ..プログラマー(34,854ポイント)   Date: 2009/07/24(金) 18:39   No:37222       
Title: 不規則移動の処理    
龍神録1面の中ボスのように不規則な移動を実装しようとしたのですがうまく行きません

できる事はできるのですが、方向が偏ってしまいます
上→下→上→下みたいな事が起きやすいです

何か偏りにくい方法は無いでしょうか?
ボスが移動範囲内のどこに移動するかを求めたいです
今は画面内にランダムに点を打ち、移動範囲内なら移動を登録しています

int SetBossRandMove(int CenterX,int CenterY,int ReachX,int ReachY,int Reach_MAX,int Reach_MINI,int Count){//不規則移動を登録する関数

float flag,X,Y;
do{
X=(GetRand(1)==0)?GetRand(447):Boss.x;
Y=(GetRand(1)==0)?GetRand(479):Boss.y;
if( X<CenterX-ReachX || X>CenterX+ReachX || Y<CenterY-ReachY || Y>CenterY+ReachY )flag=1;
else if( (X-Boss.x)*(X-Boss.x)+(Y-Boss.y)*(Y-Boss.y)>Reach_MAX*Reach_MAX || (X-Boss.x)*(X-Boss.x)+(Y-Boss.y)*(Y-Boss.y)<Reach_MINI*Reach_MINI )flag=1;
else flag=0;
}while( flag );
SetBossMove(X-Boss.x,Y-Boss.y,Count);//物理的計算を登録
return (Boss.ReachX==0.0)?1:(Boss.ReachX<0.0)?0:2;

}//不規則移動を登録する関数


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


Name: 御津凪 [URL]  ..ハッカー(107,326ポイント)   Date: 2009/07/25(土) 19:56   No:37271     
Title: Re:不規則移動の処理    
擬似乱数値が偏りやすいのは GetRand 関数に問題があり、
ある間隔でとある部分が規則的に出やすいために起こっている可能性があります。

このコードでは、GetRand(1) で条件判断を行っているため、
1の位がある傾向(偶数と奇数が交互に出やすいなど)があると、処理が偏ることがあります。

根本的解決は別のよりよい擬似乱数を生成する関数を用意するのが一番ですが、
とりあえず、do文内で
    int rand_x = GetRand(447*2);

int rand_y = GetRand(479*2);
X=(rand_x<447)?rand_x:Boss.x;
Y=(rand_y<479)?rand_y:Boss.y;


とすることである程度は解消されるかもしれません。




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

Name: チルチル  ..プログラマー(34,885ポイント)   Date: 2009/07/26(日) 13:11   No:37313 解決!     
Title: Re:不規則移動の処理    
なるほど〜GetRand関数が偏るんですね
調整してみます

どうもありがとうございます


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



Name: Kou  ..入門者(4,584ポイント)   Date: 2009/07/25(土) 16:23   No:37250       
Title: 変数の宣言効率と有効範囲について。    
お世話になってます。以前質問させて頂いた、Kouです。
今回C言語の変数についていくつか質問させて頂きます。(初歩的で申し訳ありません・・・)

以下長文になりますが。


1.変数宣言位置の効率について。
・ゲームに限らずプログラム内では多くの変数を使用しますが、
   いろいろな関数で使用する変数(敵データの構造体配列、弾データの構造体配列など)を宣言するのに、
   グローバル変数として宣言するのと、staticで静的ローカル変数として宣言するのと、
   どちらがメモリ効率が良いのでしょうか?

   簡単に考えると、前者なら変数の関数間受け渡しを考えなくても良いし、
   後者ならオブジェクト化とまでは行かなくても、ある程度処理を分けれるので、
   保守的な面でメリットがあるかなと・・・

   どちらで宣言してもメモリ効率の違いが無いのであれば、後は個人の好みの問題ですが、
   違いがあるのであればと思いまして・・・。

2.変数の有効範囲について。
  ・自作関数内で構造体データをmallocで確保した場合、そのメモリ領域を示すポインタ変数は、
   関数から出た時点で破棄される訳ですが、確保したメモリ領域はfreeで開放するまで残っていますよね?
   仮に

   struct DATA_t{
int x;
int y;
};

void init( void );

int main(){
init();

return 0;
}

void init( void ){
struct DATA_t *p;

p = ( struct DATA_t* )malloc( 10 * sizeof( struct DATA_t ) );
}

   上記の場合init関数内のポインタ変数pは、関数を出た時点で破棄されるので、確保された領域の
   アドレスが迷子になります。(迷子になるんだと思っています・・・)
   これは、

   struct DATA_t{
int x;
int y;
};

struct DATA_t* init( void );

int main(){
struct DATA_t *p;
p = init();

     実際の処理・・・・

free( p );

return 0;
}

struct DATA_t* init( void ){
struct DATA_t *p;

p = ( struct DATA_t* )malloc( 10 * sizeof( struct DATA_t ) );

return p;
}

   こうすれば関数内で確保したメモリ領域を他の関数でも使用できるのでしょうか?

C言語(File拡張子は.cppです)
VS C++ 2008EE
です。

初歩的な質問で申し訳ありませんが、回答よろしくお願いします。



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


Name: sizuma [URL]  ..中級者(11,262ポイント)   Date: 2009/07/25(土) 18:00   No:37255     
Title: Re:変数の宣言効率と有効範囲について。    
Kouさんこんにちは

僕の意見は参考程度にお願いします。
Cでゲーム作ったことない人ですし。

1メモリ効率

グローバル変数、ファイル内のstatic変数、static指定したローカル変数はスコープの違いだと記憶してます。
なので普通に考えるとメモリ効率は同じだと。
どれもプログラム開始から終了までメモリを占拠してますんで。
個人的にstaticはキライです。あくまで好みですが・・。


2malloc

mallocで確保したメモリはfreeされるまで開放されないです。
っていうかfreeされても
「ここ上書きしていいよー」ってflagをオンにして、前後が使われてない領域であれば一まとめにする
ってデフラグみたいな仕事をするので、おそらくfreeしても上書きするまでは使えると思いますよ。
mallocで確保したメモリはfreeするまで確保されたままなんで、関数内で開放しないとメモリリークの恐れもあると思うので気をつけないとですね。
JavaとかC#だとガーベジコレクション勝手にしてくれるんで、気にしなくてもいいんですけど



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

Name: たかぎ [URL]  ..ハッカー(108,811ポイント)   Date: 2009/07/25(土) 19:00   No:37263     
Title: Re:変数の宣言効率と有効範囲について。    
> C言語(File拡張子は.cppです)

拡張子が.cppということはC++ですね。
以下、そのつもりで回答します。

> 1.変数宣言位置の効率について。

メモリ効率だけでいえば、関数内でstaticを付けて宣言したオブジェクトが最もメモリを消費します。

> 2.変数の有効範囲について。

書かれている認識であっています。
ただし、

> 確保したメモリ領域はfreeで開放するまで残っていますよね?

freeで「解放」するまでですよね。
freeにはメモリを「開放」する機能はありません。
http://www.kijineko.co.jp/tech/superstitions/open-memory-by-free.html

メモリ管理の手間を省きたければ、std::tr1::shared_ptrやstd::vectorを使うなどするとよいでしょう。



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

Name: sizuma [URL]  ..中級者(11,285ポイント)   Date: 2009/07/25(土) 20:00   No:37272     
Title: Re:変数の宣言効率と有効範囲について。    
>開放、解放
確かに意味が変わりますね。気をつけます。


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

Name: Kou  ..入門者(4,907ポイント)   Date: 2009/07/25(土) 20:20   No:37278     
Title: Re:変数の宣言効率と有効範囲について。    
sizumaさん、たかぎさん回答ありがとうございます。

>たかぎさん
 紛らわしい記述ですみません。拡張子.cppにしてあるのは、コード記述の便宜上.cppの方が良かったからで、
使用言語自体はC++ではなくC言語です。

 それと、freeに関する記述読ませて頂きました。
確かに開放ではな解放ですね・・・
ご指摘ありがとうございます。

 たかぎさんの回答でstaticが一番効率が悪いとありましたが、よくC++の解説書で
「何でもグローバル変数にしないで、クラスを使用する。」とあります。
これはC言語には当てはまらないのでしょうか?

 たしかにC言語にはクラスはありませんが、処理のパック化と言うか、関数内での処理完結化はできますよね?
例えば今作っているSTGで使用した自機のデータ構造(構造体定義)や移動処理、弾の発射処理などを別ファイルにしておき、次に別のSTGを作る時にそのファイル(前回作成した関数や構造体)に手を加えずに利用する・・・
ようはライブラリと同じような使い方を.cppや.hの状態でする場合、どのような構造(変数の宣言方法など)
が一番良いのでしょうか?


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

Name: たかぎ [URL]  ..ハッカー(109,127ポイント)   Date: 2009/07/25(土) 22:38   No:37294     
Title: Re:変数の宣言効率と有効範囲について。    
>  たかぎさんの回答でstaticが一番効率が悪いとありましたが、よくC++の解説書で
> 「何でもグローバル変数にしないで、クラスを使用する。」とあります。
> これはC言語には当てはまらないのでしょうか?

必要に応じて使い分けるべきです。
メモリを1バイトでも節約したい状況でなければ(Windowsではないと思いますが)、static付きの局所オブジェクトを使うことによるメモリ効率の低下は気にすることはありません。
なぜ、static付きの局所オブジェクトのメモリ効率が悪くなるかも説明しておきます。

int foo()
{
static int x = bar();
return x++;
}


のような関数があった場合、最初にfooが呼び出されたときだけbarが呼び出されることになります。
これを実現するには、内部的には

int foo()
{
static bool __f = false;
static int x;
if (!__f)
{
x = bar();
__f = true; // ← この行、追加しました。
}
return x++;
}


のようなコードをコンパイラが生成することになります。
この暗黙的に挿入されるコードの分だけメモリ効率(実効効率も)が悪くなります。


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

Name: Kou  ..初心者(5,273ポイント)   Date: 2009/07/26(日) 10:30   No:37312 解決!     
Title: Re:変数の宣言効率と有効範囲について。    
詳しい解説付での回答ありがとうございます。

staticにすると、余計なコードが増える事によりステップ数(暗黙の変数?も)が増え、結果メモリ使用量と
実行効率が悪くなるんですね。

sizumaさんとたかぎさんの回答と拝見して、現在のマシンスペック(一般的に)では変数宣言によるメモリの
使用量(効率)は気にしなくても良いようですが、やはりstaticにした際のステップ数増加は、乱用すると無視
出来ないものになりそうですね。特にSTGのような処理速度を出来るだけ上げたい物の場合は・・・

グローバル変数が嫌いとかじゃないんですが、何とか関数内で完結出来ないかと考えたんです。
その部分を考える事で、少しはレベルアップできるかな?・・・なんて思ってしまいました。

とりあえず状況による使い分けを実践して色々な組み方を勉強したいと思います。
sizumaさん、たかぎさん、ありがとうございました。


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



Name: チャッカマン  ..ぴよぴよ(566ポイント)   Date: 2009/07/26(日) 07:11   No:37304       
Title: ポインタについて    
おはようございます。いつもお世話になっています。
WindowsのVistaを使っていて、コンパイラはBorland C++です。

char ary[] = "ABC";
char (*pz)[4];

pz = &ary;

このとき、char (*pz)[4]はchar *pz[4]と違うのでしょうか?

また、pz = &aryは配列全体へのポインタとあるのですが、これはpz[0] = &ary[0],pz[1] = &ary[1]・・・
pz[3] = &ary[3]と解釈してよろしいのでしょうか?

このpz = &aryの&aryはアドレスを意味しているのでしょうか?
それならば、aryは配列なので、&aryはおかしいのではないのでしょうか?


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


Name: たかぎ [URL]  ..ハッカー(109,061ポイント)   Date: 2009/07/26(日) 07:17   No:37305     
Title: Re:ポインタについて    
> このとき、char (*pz)[4]はchar *pz[4]と違うのでしょうか?

前者はchar[4]へのポインタ、後者はchar*へのポインタの配列です。

> また、pz = &aryは配列全体へのポインタとあるのですが、これはpz[0] = &ary[0],pz[1] = &ary[1]・・・
> pz[3] = &ary[3]と解釈してよろしいのでしょうか?

違います。
pz[0]または*pzは、aryと同じオブジェクトを指す式になります。

> このpz = &aryの&aryはアドレスを意味しているのでしょうか?

aryのアドレスを取得する式です。

> それならば、aryは配列なので、&aryはおかしいのではないのでしょうか?

おかしくありません。


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

Name: チャッカマン  ..ぴよぴよ(994ポイント)   Date: 2009/07/26(日) 08:00   No:37307     
Title: Re:ポインタについて    
たかぎ様、解答ありがとうございます。

>前者はchar[4]へのポインタ、後者はchar*へのポインタの配列です。
char[4]へのポインタは、つまり配列の先頭要素のアドレスを指しているのですよね。この後者のchar*へのポインタが分かりません。

このpz = &aryの&aryはアドレスを意味しているのでしょうか?
これは、aryのアドレスを取得する式とあったのですが、ary配列の先頭アドレスをpzに代入しているのでしょうか?そのような場合、pz = ary か、pz = &ary[0]でないといけないのではないではないでしょうか?


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

Name: sizuma [URL]  ..中級者(11,363ポイント)   Date: 2009/07/26(日) 08:15   No:37308     
Title: Re:ポインタについて    
ポインタ演算を行ったときに増減する単位が変わりますね。
配列へのポインタへの加減算は配列単位に。
先頭アドレスへのポインタは要素の型を単位にします


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

Name: non  ..熟練のプログラマー(57,561ポイント)   Date: 2009/07/26(日) 10:13   No:37311     
Title: Re:ポインタについて    
>このpz = &aryの&aryはアドレスを意味しているのでしょうか?
&aryもaryもアドレスではあるけど、何の型を指すアドレスかが違っている。

>pz = ary か、pz = &ary[0]でないといけないのではないではないでしょうか?
これでは、先頭の文字のアドレスを入れている。
&aryと&ary[0]はアドレス値は同じだけど、意味が違うからエラーになる。

下のプログラムで2次元配列とポインタ配列の違いの参考になれば


#include <stdio.h>
int main(void)
{
char ary1[][4]={"A","BC","DEF"};
char (*pz1)[4];
pz1 = ary1;
printf("%p %s\n",pz1,pz1);
pz1++;
printf("%p %s\n",pz1,pz1);
pz1++;
printf("%p %s\n",pz1,pz1);
printf("\n");

char *ary2[3];
ary2[0]="A";
ary2[1]="BC";
ary2[2]="DEF";
// char *ary2[]={"A","BC","DEF"};これと同じ
char **pz2;
pz2 = ary2;
printf("%p %s\n",*pz2,*pz2);
pz2++;
printf("%p %s\n",*pz2,*pz2);
pz2++;
printf("%p %s\n",*pz2,*pz2);
return 0;
}





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




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +