C言語何でも質問掲示板

Total hit  今日  昨日  



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

 
   レーザー   
     ・[39352] チルチル 
     ・[39368] 初心者 
     ・[39372] チルチル 
     ・[39375] ねこ 
     ・[39376] チルチル 
     ・[39378] ねこ 
     ・[39379] チルチル 
     ・[39380] 初心者 
     ・[39381] 初心者 
     ・[39382] ねこ 
     ・[39384] 初心者 
   マップファイルの読み ....   
     ・[39153] zwi 
     ・[39259] belve 
     ・[39261] バグ 
     ・[39263] バグ 
     ・[39276] belve 
     ・[39301] GPGA 
     ・[39326] belve 
     ・[39327] Justy 
     ・[39383] belve 
   GetHitKeyStateAll_2の ....   
     ・[38896] Dixq (管理人) 
     ・[38906] trx 
     ・[38930] Kou 
     ・[38968] trx 
     ・[38971] kazuoni 
     ・[38975] trx 
     ・[38976] Mist 
     ・[38990] trx 
     ・[38992] kazuoni 
     ・[38993] Mist 
     ・[38999] trx 
     ・[39000] Mist 
     ・[39020] trx 
     ・[39022] Mist 
     ・[39053] Dixq (管理人) 
     ・[39056] kazuoni 
     ・[39204] trx 
     ・[39205] Dixq (管理人) 
     ・[39208] trx 
     ・[39209] ねこ 
     ・[39210] trx 
     ・[39212] Mist 
     ・[39235] trx 
     ・[39236] ねこ 
     ・[39237] trx 
     ・[39371] trx 
   無題   
     ・[39367] 初心者 
   【雑談】 作成中のソフ ....   
     ・[38569] zwi 
     ・[38571] 御津凪 
     ・[38573] Dixq (管理人) 
     ・[38574] kazuoni 
     ・[38575] Dixq (管理人) 
     ・[38577] 御津凪 
     ・[38601] 羽流布 
     ・[38631] 羽流布 
     ・[38684] Dixq (管理人) 
     ・[38685] 羽流布 
     ・[38687] Justy 
     ・[38688] 羽流布 
     ・[38692] 御津凪 
     ・[38694] 羽流布 
     ・[38700] 羽流布 
     ・[38779] 御津凪 
     ・[38781] kazuoni 
     ・[38785] アトラス 
     ・[38789] 羽流布 
     ・[38791] 御津凪 
     ・[38793] 羽流布 
     ・[38898] Dixq (管理人) 
     ・[38907] アトラス 
     ・[38909] ひよこ 
     ・[38938] 羽流布 
     ・[38940] situmon 
     ・[38951] アトラス 
     ・[38954] Dixq (管理人) 
     ・[38960] situmon 
     ・[39084] 御津凪 
     ・[39089] kazuoni 
     ・[39091] zwi 
     ・[39108] バグ 
     ・[39133] 羽流布 
     ・[39137] バグ 
     ・[39342] Tororo 
     ・[39351] kazuoni 
     ・[39363] Tororo 
   VisualC++とBorlandC+ ....   
     ・[39265] ねこ 
     ・[39266] たいちう 
     ・[39277] dic 
     ・[39283] 御津凪 
     ・[39362] あ〜る 
   ボタンのサブクラス化 ....   
     ・[39358] Justy 
     ・[39361] Ace 
   デバッグ実行   
     ・[39317] 山崎 
     ・[39336] ぽよ 
     ・[39339] yume 
   龍神録4章について   
     ・[39333] conio 
     ・[39335] くるり 
   龍神録50章改造におけ ....   
   龍神録プログラミング ....   
     ・[39319] でんすけ 
     ・[39325] 優曇華院 
   シューティングゲーム ....   
     ・[39248] ひよこ 
     ・[39251] mnkr 
     ・[39252] situmon 
     ・[39254] mnkr 
     ・[39255] 御津凪 
     ・[39260] ひよこ 
     ・[39281] 御津凪 
     ・[39282] situmon 
     ・[39289] アトラス 
     ・[39291] Tatu 
     ・[39297] situmon 
     ・[39323] situmon 
   自機ショット   
     ・[39314] でんすけ 
     ・[39315] ディア 
   好奇心   
     ・[39306] バグ 
     ・[39313] Dixq (管理人) 
     ・[393041254290118] 電気屋 
   C++での*.libの生成法 ....   
     ・[39311] たいちう 
   ショットが遅れる   
     ・[39241] ディア 
     ・[39310] ディア 
   質問です   
     ・[39293] でんすけ 
     ・[39294] toyo 
     ・[39295] でんすけ 
     ・[39302] non 
     ・[39308] HAL 
   大量データ更新教えて ....   
   龍神録ステージ1、2の ....   
     ・[39269] Justy 
     ・[39299] AS 
   C言語でテキストファイ ....   
     ・[39278] dic 
     ・[39280] conio 
     ・[39296] mint 
     ・[39298] たかぎ 
   原因がよくわからない ....   
     ・[39288] kazuoni 
   DXライブラリを使って ....   
     ・[38908] ねこ 
     ・[38961] niko 
     ・[38964] ねこ 
     ・[38966] niko 
     ・[38977] 旅人 
     ・[38980] チルチル 
     ・[39009] ねこ 
     ・[39061] niko 
     ・[39093] niko 
     ・[39094] niko 
     ・[39096] Justy 
     ・[39130] niko 
     ・[39138] Justy 
     ・[39144] ねこ 
     ・[39145] niko 
     ・[39146] ねこ 
     ・[39165] Justy 
     ・[39166] niko 
     ・[39177] Justy 
     ・[39247] niko 
     ・[39285] niko 
   マウスを使ったショッ ....   
     ・[39268] situmon 
     ・[39272] でんすけ 
     ・[39279] situmon 
     ・[39284] でんすけ 
   テキストファイルを読 ....   
     ・[39275] dic 
   ライブラリOpenC ....   
     ・[39267] Justy 
     ・[39274] dic 
   シーンごとのソース管 ....   
     ・[39250] Justy 
   2面ボスの作り方を教え ....   
     ・[39219] kazuoni 
     ・[39227] 蒼空 
     ・[39229] kazuoni 
     ・[39246] 蒼空 
   exe形式にする方法につ ....   
     ・[39223] ディア 
     ・[39225] array 
     ・[39244] APS 
   ビットマップに文字列 ....   
     ・[39239] toyo 
     ・[39242] binoruto 
   助けてください。。。   
     ・[39152] バグ 
     ・[39154] mnkr 
     ・[39157] non 
     ・[39161] box 
     ・[39174] non 
     ・[39175] Dixq (管理人) 
     ・[39240] 鈴木萌々 
   分割コンパイルについ ....   
     ・[39233] たかぎ 
     ・[39238] jemi 
   JavaのJNI機能について ....   
     ・[39203] YuO 
     ・[39230] nn 
     ・[39231] nn 
   2面作成にあたって   
     ・[38796] ひよこ 
     ・[38882] はね 
     ・[38887] Dixq (管理人) 
     ・[39027] はね 
     ・[39028] はね 
     ・[39029] はね 
     ・[39033] はね 
     ・[39046] さめ 
     ・[39048] Dixq (管理人) 
     ・[39066] Justy 
     ・[39098] はね 
     ・[39149] かつのり 
     ・[39228] はね 
   無題   
     ・[39214] Mist 
     ・[39217] takerussu 
     ・[39220] YuO 
     ・[39226] takerussu 
   マウスを使ったショッ ....   
     ・[39216] kazuoni 
     ・[39224] でんすけ 
   マウスでの選択につい ....   
     ・[39105] conio 
     ・[39106] masu 
     ・[39122] conio 
     ・[39215] masu 
   スコープを覗いた時の ....   
     ・[39196] Justy 
     ・[39211] 山崎 
   複数の条件が揃ったと ....   
     ・[39195] kazuoni 
     ・[39206] Dixq (管理人) 
   無題   
     ・[39186] mnkr 
     ・[39197] ゆうすけ 
     ・[39201] ゆうすけ 
     ・[39202] mnkr 
   コンパイルエラー   
     ・[39160] box 
     ・[39199] Hermit 
     ・[39200] ディア 
   exitによる終了   
     ・[39194] たかぎ 
     ・[39198] kaiten 
   背景(マップなど)や ....   
     ・[39178] チルチル 
     ・[39181] Justy 
     ・[39191] 素人A 
   残機を減らす   
     ・[39148] zwi 
     ・[39190] APS 
   何度もコードを書いて ....   
     ・[39185] Justy 
     ・[39189] うっそ 
   酒飲天薫   
     ・[39179] 通りすがり 
     ・[39188] 冬 
   DxLib_VC2008_and_200 ....   
     ・[39170] Dixq (管理人) 
     ・[39180] ゆうすけ 
     ・[39182] ゆうすけ 
   無題   
     ・[39155] conio 
     ・[39173] Dixq (管理人) 

Name: 初心者  ..プログラマー(35,810ポイント)   Date: 2009/09/18(金) 06:13   No:39334       
Title: レーザー    
過去のログに、
東方文花帖でよく使われるレーザーの作り方について
http://www.play21.jp/board/formz.cgi?action=res&resno=38458&page=30&lognum=118&id=dixq&rln=38530
を参考にしていたんですが、

双方向循環リストを使うのは理解したんですが、
それをどうやって2Dのポリゴンで描画するんでしょうか?


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


Name: チルチル  ..熟練のプログラマー(50,250ポイント)   Date: 2009/09/18(金) 23:02   No:39352     
Title: Re:レーザー    
簡単に説明すると、ノードの座標を原点として
ノードの角度に対して前後に長さだけ移動
そこから左右に幅だけ移動して4頂点の座標を求め
2Dポリゴンの構造体に代入して描画します

過去ログの時点では未完成でしたが
現在は暫定的に完成しているのでコードを添付します
わからない所があったら言ってください


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

Name: 初心者  ..プログラマー(35,994ポイント)   Date: 2009/09/19(土) 10:21   No:39368     
Title: Re:レーザー    
回答ありがとうございます^^

 Flag の各値の説明をお願いしていいですか?


あと、もし面倒でなければ、
使用例みたいなものを1つ教えて欲しいんですが、

よろしくお願いします。


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

Name: チルチル  ..熟練のプログラマー(50,760ポイント)   Date: 2009/09/19(土) 11:20   No:39372     
Title: Re:レーザー    

線形リストの場合は全部同じノードで構成する事により
手順を簡略化できるので、何のノードかをFlagで判断します
まあノードから別の線形リストを伸ばしても良いんですが
それはそれで問題が多いので・・

Flagの値が

-1,削除待ちノード
0,補間ノード(ボムとかで消された弾ノード)
1,弾ノード
2,弾ノード(ボムとかで消えない)
3,管理ノード
4,管理ノード(多重描画型)
5,番兵ノード

見たいな感じです

使用例ですが、これは上で添付したコードを追加して
メインループや初期化処理を追加して、使用する準備を整えた後に
最も簡単な飛行虫ネストみたいなレーザーを下に撃つ場合の処理です

//ザコ敵の移動パターンの処理とかで行う処理
if( Enemy[i].Count==30 )SetNode(New,3,Enemy[i].x,Enemy[i].y,PI/2,3,0,10,10,1,0,0,0,10);//管理ノードを登録

//管理ノードのパターン内で行う処理
if( P->Count<30 )SetNode(P);//弾ノードを登録
if( DeleteJudge(P->Next->x,P->Next->y) )P->flag=-1;//最後尾の弾が画面外に出たら管理ノードを削除

こんな感じです
簡単なレーザーなら3行で撃てます
実行すると添付画像のように見えます

共通部分の機能は弾ノードの並びの形に画像を変形して判定するので
レーザーごとに最低限書くのは
・管理ノード登録処理
・弾ノード登録処理
・管理ノード削除処理
ぐらいですね、目に見えない場合は2番目は必要ないですけど・・
なので特殊なレーザーの場合でも弾ノードを表示したい形に配置するだけでOKです


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

Name: ねこ  ..熟練のプログラマー(41,385ポイント)   Date: 2009/09/19(土) 13:51   No:39375     
Title: Re:レーザー    
スレと関係ないのですが、ポリゴン座標求める際角度±90度してますが
ここは前・今・後の三点の中心角度に対して伸ばしたほうが良いですよ。
例えば正三角形の三点をイメージすると線分の終始点に対して90度足すと明らかに変な位置にポリゴン座標が連続しちゃいますよね。
これは三点が鋭角になった時は全てそうなので、始点・終点は現在の方法、その間は三点角度を考慮するとレーザーが壁ではねかえるような描画になっても違和感が多少マシになります。

厳密にはさらに基準点から伸ばした線分同士のの交差判定で補正すると変に角ばった描画になったりするのは大体拭えます。これは分割数によっては計算コストが多いので不要かもしれません。


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

Name: チルチル  ..熟練のプログラマー(50,869ポイント)   Date: 2009/09/19(土) 14:29   No:39376     
Title: Re:レーザー    
そういえばそうですね・・
今回は機能面を重視したので描画は結構汚いです
終点始点も最低限の補間なので長いとバリが出たりしますね

中心角度はよくわからないですね・・
そもそも四角形の連続で描画するので
曲げた時にガタガタしないようにするのと
表示がチラチラしないように分割数がかなり多いので
そんなには目立たないのが幸いですね
まあ現状では三点で三角形は描画できないんですが・・


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

Name: ねこ  ..熟練のプログラマー(41,509ポイント)   Date: 2009/09/19(土) 15:07   No:39378     
Title: Re:レーザー    
書き方悪かったですね。三角形の描画をするんではなく、正三角形の三点をノードとして登録した場合です。
左下・上・右下。というような。鋭角の説明だったので正三角形はイメージとして挙げただけです。
その際の左下から上の点に向けての角度に±90度は明らかに変な位置に座標取っている事になるので、と(以下略

まぁスレ本題とは関係ないのでこのへんでやめておきます。



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

Name: チルチル  ..熟練のプログラマー(51,044ポイント)   Date: 2009/09/19(土) 15:59   No:39379     
Title: Re:レーザー    
角度の補間は結構難しいですね・・

区画の中間はノード同士の中間点を原点にするので
現状で仮に正三角形の三点をノードとして登録すると
多分1回り小さい上下反転した正三角形になりますね
まあ辺の部分にも弾を並べれば問題無いんですが・・

補間する機能を付けると意図的にガタガタさせたい時に不便なので
今の所は現状の方法が無難のようです

この辺は次回への課題ですね・・


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

Name: 初心者  ..プログラマー(36,103ポイント)   Date: 2009/09/19(土) 16:16   No:39380     
Title: Re:レーザー    
>チルチルさん

 理解することができました^^有難うございます
 大変お世話になりました。

>ねこさん

 Angle=(
atan2(p->Next->y - p->y, p->Next->x - p->x) -
atan2(p->y - p->Prev->y, p->x - p->Prev->x)
)/2
 っていうことでしょうか?


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

Name: 初心者  ..プログラマー(36,164ポイント)   Date: 2009/09/19(土) 16:17   No:39381     
Title: Re:レーザー    
Angle=(
atan2(p->Next->y - p->y, p->Next->x - p->x) +
atan2(p->y - p->Prev->y, p->x - p->Prev->x)
)/2

+でした


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

Name: ねこ  ..熟練のプログラマー(41,747ポイント)   Date: 2009/09/19(土) 16:46   No:39382     
Title: Re:レーザー    
>初心者さん
ノードの変数見てないので少し予想入りますが

atan2(p->Next->y - p->y, p->Next->x - p->x) +
(atan2(p->y - p->Prev->y, p->x - p->Prev->x) - atan2(p->Next->y - p->y, p->Next->x - p->x) ) / 2.0;

こうかな。2角度を求めて、その差を2で割ってPrev側に足す感じで。
なお、ノードはPrevとNextが無い場合があるので、その場合はPrev⇒Prevの次に対して±90度(逆も同様)、もとい既存処理で良いと思います。


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

Name: 初心者  ..プログラマー(36,172ポイント)   Date: 2009/09/19(土) 17:19   No:39384 解決!     
Title: Re:レーザー    
なるほど、有難うございました^^

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



Name: belve  ..ぴよぴよ(136ポイント)   Date: 2009/09/11(金) 21:00   No:39119       
Title: マップファイルの読み込み    
Platinumで作成したマップデータを読み込みたいのですが、
http://inu.harisen.jp/scene_1/14.html こちらのサイトを参考に読み込みできましたが、Platinumのエディタだとヘッダーのx,yのサイズ情報がそれぞれ4バイトになってるのでどう読み込めばいいのか分かりません。

上記サイトで読み込みの作業では何をやっているのでしょうか。
データを開いて、バッファに記録する、という所までは分かるのですが、X,Yに入れる作業の意味が理解できません。
ヒントだけでもご教授頂けるとありがたいです。


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


Name: zwi  ..入門者(4,718ポイント)   Date: 2009/09/12(土) 18:24   No:39153     
Title: Re:マップファイルの読み込み    
まず、2バイトバッファに溜め込んでます。これはOKですか?

for(int i = 0 ; i < 2 ; i++)
{
if(FileRead_read(&buf[i], sizeof(BYTE), fh) == -1)
{
MB("マップチップデータファイル読み込みに失敗しました。");
FileRead_close(fh); //ちゃんとファイルを閉じる
return false;
}
}

続いて
map.data_x_num = ((buf[1] & 0xff) << 8) | (buf[0] & 0xff);
で2バイトの数値に変換して、map.data_x_numに代入しています。
map.data_y_numも同様です。

4バイトにするなら、状況の処理を4バイトにするだけです。
for(int i = 0 ; i < 4 ; i++)

map.data_x_num = ((buf[3] & 0xff) << 24) |((buf[2] & 0xff) << 16) |((buf[1] & 0xff) << 8) | (buf[0] & 0xff);
って感じです。
私としては、あんまり好きな処理では無いですが。


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

Name: belve  ..ぴよぴよ(250ポイント)   Date: 2009/09/16(水) 16:28   No:39259 解決!     
Title: Re:マップファイルの読み込み    
回答ありがとうございますm(__)m

4バイト分並んでるから、シフトさせてビット演算でひとつにまとめてるという事ですよね。
何となく理解できた気がします。ありがとうございました。

ところで、あまり好きな処理ではないという事はほかにもっと良い処理があったりするのでしょうか。
自分では思いつきもしません。。


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

Name: バグ  ..ハッカー(170,487ポイント)   Date: 2009/09/16(水) 16:42   No:39261     
Title: Re:マップファイルの読み込み    
共用体を使うと分かり易いかもしれませんね。

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

Name: バグ  ..ハッカー(170,609ポイント)   Date: 2009/09/16(水) 17:34   No:39263     
Title: Re:マップファイルの読み込み    
こんな感じかな?


#include <stdio.h>

union DWORD
{
unsigned char byte[4]; // ※unsigned char型が1byteの環境とする
unsigned long dword; // ※unsigned long型が4byteの環境とする
};

int main(void)
{
DWORD data;
for (int i = 0; i < 4; ++i) data.byte[i] = 255;
printf("%u\n", data.dword);
return 0;
}


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

Name: belve  ..ぴよぴよ(182ポイント)   Date: 2009/09/16(水) 21:17   No:39276 解決!     
Title: Re:マップファイルの読み込み    
共用体ってそういう使い方が出来たんですか。今まで聞いたことはありましたが、よく分からなかくて使ったことはなかったです^^;

長いスクリプトがすっきりしそうです。ありがとうございました。m(__)m


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

Name: GPGA  ..熟練のプログラマー(65,865ポイント)   Date: 2009/09/17(木) 11:57   No:39301     
Title: Re:マップファイルの読み込み    

memcpyやキャストでやる方法もあります。

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

int main() {
unsigned char c[] = { 0x12, 0x34, 0x56, 0x78 };
unsigned int n;

memcpy(&n, c, sizeof(n));
printf("%x\n", n);

n = *(unsigned int*)c;
printf("%x\n", n);
}
 


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

Name: belve  ..ぴよぴよ(384ポイント)   Date: 2009/09/17(木) 22:09   No:39326     
Title: Re:マップファイルの読み込み    
色々ありがとうございます。
ポインタとかもあまり使わないのですが、使い方をしっかり覚える必要がありそうです^^;

全く関係ないのですがPlatinumでマップチップを2バイトモードで使った際に、1行目が埋まらずに画像が次の行に行くので、エディタの画像番号がプログラムで分割読み込みした際の番号と合わなくなってしまうのですが、他の使っている方はどのようにしているのでしょうか。
ググったりしたのですが、そのような事を思う方もいないようなので相当初歩的な事を見落としてるのかもしれませんけど;;


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

Name: Justy  ..伝説なるハッカー(426,635ポイント)   Date: 2009/09/17(木) 22:49   No:39327     
Title: Re:マップファイルの読み込み    

>マップチップを2バイトモードで使った際に、1行目が埋まらずに画像が次の行に行くので、
>エディタの画像番号がプログラムで分割読み込みした際の番号と合わなくなってしまうのですが

 ?
 何がどう合わないんでしょうか??



>他の使っている方はどのようにしているのでしょうか

 多分サンプルの CFmfMapクラスをそのまま使ってるんじゃないでしょうか。
 あれを使えば自分でマップファイルの解析ルーチンを作る必要はなくなりますので。


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

Name: belve  ..ぴよぴよ(598ポイント)   Date: 2009/09/19(土) 16:51   No:39383 解決!     
Title: Re:マップファイルの読み込み    
やはりサンプルを使ってたのですか。

WINAPIは分からないからDXライブラリでやろうと思っていたのですが、なんとか自己解決できました。
色々とお騒がせして申し訳ありません。

回答ありがとうございましたm(__)m


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



Name: trx  ..入門者(3,733ポイント)   Date: 2009/09/05(土) 15:04   No:38845       
Title: GetHitKeyStateAll_2のKeyBuf    
http://dixq.net/g/#40で紹介されている、GetHitKeyStateAll_2のKeyBufでの使い方にする場合どこを変えれば良いのかを教えてください。
DxLibをBorlandをWindowsXPで使っています。
添付してあるのは、今あるプログラムの一部です。


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,052,249ポイント)   Date: 2009/09/06(日) 04:08   No:38896     
Title: Re:GetHitKeyStateAll_2のKeyBuf    
質問の意図がよくわからないですが・・。
このプログラムはどのように自分の期待通りにならないのでしょうか?


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

Name: trx  ..初心者(5,991ポイント)   Date: 2009/09/06(日) 07:21   No:38906     
Title: Re:GetHitKeyStateAll_2のKeyBuf    

http://dixq.net/g/#40で紹介されているのは、

#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 WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){

int Key[256];

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が押されていない

DrawFormatString(0,0,GetColor(255,255,255),"%d",Key[KEY_INPUT_RETURN]);//エンター入力カウント

if(Key[KEY_INPUT_RETURN]==1)//今の瞬間押されたら
DrawBox(0,0,640,480,GetColor(255,255,255),TRUE);//画面全体を白い四角で表示


ScreenFlip();
}

DxLib_End();
return 0;
}
ですが、
if(Key[KEY_INPUT_RETURN]==1)
の部分を
if(Key[KEY_INPUT_RETURN]==1 && KeyBuf[ KEY_INPUT_SPACE ] == 1)
にするには、
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;
}
のどこを変えたら良いのでしょうか。
すなわちaudio.cppの
int GetHitKeyStateAll_2(int KeyStateBuf[]){
char GetHitKeyStateAll_KeyBuf[256];
GetHitKeyStateAll( GetHitKeyStateAll_KeyBuf );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_KeyBuf[i]==1) KeyStateBuf[i]++;
else KeyStateBuf[i]=0;
}
return 0;
}
どこを変えたら良いのでしょうか?(自分でKeyと書いてあった所をKeyBufに変えてみた)
それと、
int Key;
を、
int KeyBuf;
に変えています。
回答よろしくお願いします。


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

Name: Kou  ..初心者(8,821ポイント)   Date: 2009/09/06(日) 15:44   No:38930     
Title: Re:GetHitKeyStateAll_2のKeyBuf    
えっと・・・もしかして、2種類のキー入力状態を調べる為に変数Keyと変数KeyBufを使おうとしてますか?

もしそうなら、変数は分ける必要はないんですが・・・
意図が違っていたらすみません。

仮にそうだと仮定して変数を分けるならば、
int Key;
int KeyBuf;
両方宣言が必要だし、各変数でGetHitKeyStateAll関数を呼び出せば良いだけです。
ポインタ使っても出来ると思います。

ちなみに、
if(KeyBuf[KEY_INPUT_RETURN]==1 && KeyBuf[ KEY_INPUT_SPACE ] == 1)
で2種類同時に調べれますよ。


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

Name: trx  ..初心者(6,097ポイント)   Date: 2009/09/07(月) 03:26   No:38968     
Title: Re:GetHitKeyStateAll_2のKeyBuf    
回答ありがとうございます。
2種類のキー入力状態を調べる為に変数Keyと変数KeyBufを使おうとは、していません。
KeyBufだけを使おうとしています。
2種類のキー入力状態を調べようとはしています。
それと、GetHitKeyStateAll関数では無く、GetHitKeyStateAll_2関数を使おうとしています。
それと、ポインタ使ってどうするのですか?
ポインタとは、文字列を、操作する際に使う関数なのでは?
回答よろしくお願いします。


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

Name: kazuoni [URL]  ..ハッカー(104,314ポイント)   Date: 2009/09/07(月) 09:22   No:38971     
Title: Re:GetHitKeyStateAll_2のKeyBuf    
KeyとKeyBufの違いをもっと明白にしないと、回答しようがないかと・・・

>if(Key[KEY_INPUT_RETURN]==1)
>の部分を
>if(Key[KEY_INPUT_RETURN]==1 && KeyBuf[ KEY_INPUT_SPACE ] == 1)

なぜ分けているのですか?
現在のコードでは、すべてのキー入力の状態はKeyに格納されています。

>KeyBufだけを使おうとしています。

KeyBufにキー入力の情報を格納したければ、
int KeyBuf[256];

...
while( ... && GetHitKeyStateAll_2(KeyBuf)==0 && ...)

とすれば、OKです。
GetHitKeyStateAll_2関数の中身は変える必要ありません。

>すなわちaudio.cppの

main関数でキー監査(GetHitKeyStateAll_2)をしているが、
audio.cppでもこの情報を使いたいって時は、
各場所にキー監査の関数を書くのではなく、
キー監査用配列をグローバル変数にすればよいです。


#余談
>ポインタとは、文字列を、操作する際に使う関数なのでは?
ではないです。


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

Name: trx  ..初心者(5,805ポイント)   Date: 2009/09/07(月) 15:16   No:38975     
Title: Re:GetHitKeyStateAll_2のKeyBuf    
kazuoniさん、回答ありがとうございました。
前回は、インターネットの調子が悪くて投稿できなくてすみませんでした。(いつの間にか、アーカイブになっていました)
>if(Key[KEY_INPUT_RETURN]==1)
>の部分を
>if(Key[KEY_INPUT_RETURN]==1 && KeyBuf[ KEY_INPUT_SPACE ] == 1)
は、
if(Key[KEY_INPUT_RETURN]==1)
の部分を
if(KeyBuf[KEY_INPUT_RETURN]==1 && KeyBuf[ KEY_INPUT_SPACE ] == 1)
の書き間違えでした。

>>すなわちaudio.cppの

>main関数でキー監査(GetHitKeyStateAll_2)をしているが、
>audio.cppでもこの情報を使いたいって時は、
>各場所にキー監査の関数を書くのではなく、
>キー監査用配列をグローバル変数にすればよいです。

と、言うのは、
if(KeyBuf[KEY_INPUT_RETURN]==1 && KeyBuf[ KEY_INPUT_SPACE ] == 1)
と毎回書かない方が、良いと言うことですか?

添付してあるのは、書き直したaudio.cppです。
まだ、プログラムから音が出ません。
色々と足してあるのでごちゃごちゃしててすみません。
何度もすみませんが、
回答よろしくお願いします。


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

Name: Mist  ..熟練のプログラマー(66,362ポイント)   Date: 2009/09/07(月) 15:40   No:38976     
Title: Re:GetHitKeyStateAll_2のKeyBuf    
> まだ、プログラムから音が出ません。

音が出ないの関係あるか判りませんがChangeVolumeSoundMemのところがいろいろ間違っています。

vol[0]=vol[0]+((double)0.01);

と書いていますが、volはint型で宣言されているのでdoubleの0.01を足しても永久に0ですね。
なぜ0.01を加算しようとしたのでしょうか。


if( KeyBuf[ KEY_INPUT_UP ] == 1){
if (vol[0] < 100) vol[0]++;
}


でいいと思いますが。(引くほうは負にならないようにしてください)

あと、変数vに一度も値がセットされていませんのでken[v]がどんな値をChangeVolumeSoundMemに渡しているかも謎ですね。
最悪の場合、いろいろ破壊することになるかもしれません。


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

Name: trx  ..初心者(6,333ポイント)   Date: 2009/09/08(火) 06:55   No:38990     
Title: Re:GetHitKeyStateAll_2のKeyBuf    

回答ありがとうございます。
ChangeVolumeSoundMemを消したのですがまだ音が出ません。
0.01ずつなのは、Graphic.cppで0.01ずつ値を増やしているのに合わせている為です。
graphic.cpp
...
if( KeyBuf[ KEY_INPUT_UP ] == 1){
vol[4]=vol[4]+((double)0.01);
}
if( KeyBuf[ KEY_INPUT_DOWN ] == 1){
vol[4]=vol[4]-((double)0.01);
}
ScreenFlip();
if( KeyBuf[ KEY_INPUT_ESCAPE ] == 1 )
break;
if( ProcessMessage() == -1 )
break ;
}
...


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

Name: kazuoni [URL]  ..ハッカー(104,468ポイント)   Date: 2009/09/08(火) 09:31   No:38992     
Title: Re:GetHitKeyStateAll_2のKeyBuf    
音を出す目的でこのスレを挙げたのですかね^^;

とりあえず、Mistさんの指摘してくださったところは
修正しましたか?
それに加えて、キー監査に関してですけど、
以前もどこかで言った記憶があるのですが・・・(人違いでしたらごめんなさい)
関数GetHitKeyStateAll_2はキーが押されている間、
キー監査の値はインクリメントされています。
なので、( Key[...]==1 )となるのは押された一瞬のみです。
なので、完全な同時押しをしないと音が鳴らないかと。
GetHitKeyStateAllにすれば動く・・・かもしれないです。


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

Name: Mist  ..熟練のプログラマー(66,706ポイント)   Date: 2009/09/08(火) 09:31   No:38993     
Title: Re:GetHitKeyStateAll_2のKeyBuf    
ソースを全体的にきちんと見直されたほうが良いような。

単なる書き間違いだとは思いますが、やばい間違いがあります。

vol[6] = LoadSoundMem ("Media\\click.wav" );

vol[6]は存在しないのでメモリ破壊しています。
volはdoubleで宣言されているのでLoadSoundMemの戻り値を入れるのも間違っています。(ワーニングになっているのでは?)

次に
DrawGraph( 205, ken[61] , pn , FALSE ) ;
という行が複数ありますが、pnに画像をロードしているところがありませんね。
DrawGraphに不定値を渡した場合の動作は不明ですのでこれも危険な間違いです。


上記は修正してもらうとして、気になるのはLoadSoundMemでのロードの成功をチェックしていませんが失敗しているということはないんですよね?



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

Name: trx  ..初心者(7,051ポイント)   Date: 2009/09/08(火) 14:55   No:38999     
Title: Re:GetHitKeyStateAll_2のKeyBuf    
回答ありがとうございます!

>関数GetHitKeyStateAll_2はキーが押されている間、
>キー監査の値はインクリメントされています。
>なので、( Key[...]==1 )となるのは押された一瞬のみです。
>なので、完全な同時押しをしないと音が鳴らないかと。
>GetHitKeyStateAllにすれば動く・・・かもしれないです。
以前試しに、( KeyBuf[...]==1 )ではなく、( Key[...]==1 )で実行した際、
音は、鳴りました。
なので、GetHitKeyStateAll_2をKeyから、KeyBufに変えるさいに、おかしくなっているのだと思います。(間違えて解釈していたらすみません)

それと、
vol[6] = LoadSoundMem ("Media\\click.wav" );
単なる書き間違えですが何回か前に、
>色々と足してあるのでごちゃごちゃしててすみません。
と言いましたので他の問題は、気にしないで下さい。
DrawGraph( 205, ken[61] , pn , FALSE ) ;
も、同じでまだ消していないだけです。
一応書き直してみました。

回答よろしくお願いします!!


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

Name: Mist  ..熟練のプログラマー(67,103ポイント)   Date: 2009/09/08(火) 15:28   No:39000     
Title: Re:GetHitKeyStateAll_2のKeyBuf    
if( KeyBuf[ ... ] >= 1){

こうしないといけないんじゃないのかな。

ちなみに

> と言いましたので他の問題は、気にしないで下さい。

いやいや違いますよ(^^;
メモリ破壊は無視していい問題じゃありません。
破壊される場所によってはアプリにどんな不具合が出るか予測できませんよ。
無視していい程度の問題ないら最初から書いてないです。


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

Name: trx  ..初心者(7,293ポイント)   Date: 2009/09/09(水) 07:02   No:39020     
Title: Re:GetHitKeyStateAll_2のKeyBuf    
if( KeyBuf[ ... ] >= 1){
と言うのは、例えば、
if( KeyBuf[ KEY_INPUT_Z ] == 1 && KeyBuf[ KEY_INPUT_SPACE ] == 1){
を、
if( KeyBuf[ KEY_INPUT_Z ] >= 1 && KeyBuf[ KEY_INPUT_SPACE ] == 1){
とするか、
if( KeyBuf[ KEY_INPUT_Z ] >= 1 && KeyBuf[ KEY_INPUT_SPACE ] >= 1){
とするか、
if( KeyBuf[ KEY_INPUT_Z ] == 1 && KeyBuf[ KEY_INPUT_SPACE ] >= 1){
にするのですか?
どれにしても音が出ないのですが...
添付してあるのは、
if( KeyBuf[ KEY_INPUT_Z ] >= 1 && KeyBuf[ KEY_INPUT_SPACE ] == 1){
の一個だけ変えてあります
それと、メモリ破壊は重要な問題だとも知らないで適当な事言って、ごめんなさい。
まだ、ど初心者なので。

あまり関係ない質問ですが、前から気になっていて、
>2倍のポイントを手に入れた! 718ポイント を手に入れた。
と、2倍のポイントを手に入れるには、何をすればよいのでしょうか?


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

Name: Mist  ..熟練のプログラマー(68,124ポイント)   Date: 2009/09/09(水) 10:35   No:39022     
Title: Re:GetHitKeyStateAll_2のKeyBuf    
> if( KeyBuf[ KEY_INPUT_Z ] >= 1 && KeyBuf[ KEY_INPUT_SPACE ] >= 1){

これで正解です。
GetHitKeyStateAll_2をよく読んだら

if( KeyBuf[ KEY_INPUT_Z ] != 0 && KeyBuf[ KEY_INPUT_SPACE ] != 0){

のほうがいいような気はしますが。
ソースを流用するだけじゃなく、何をしているのかを理解する力を付けられるのがよいと思います。
今回のGetHitKeyStateAll_2では

if(GetHitKeyStateAll_Key[i]==1) KeyStateBuf[i]++;
else KeyStateBuf[i]=0;

としていますので、該当のキーが押されている間はKeyStateBufは増え続け、離されると0に戻ります。
つまり、KeyStateBuf[...] >= 1かKeyStateBuf[...] != 0がキーが押されている状態の判定方法だとわかります。
こういうのは忘れないようにソースにコメントで記述しておくとグッドです。

こちらで動作確認したソースはっておきます。

#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 WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int KeyBuf[256];

ChangeWindowMode(TRUE);

if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化

while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(KeyBuf)==0 && KeyBuf[KEY_INPUT_ESCAPE]==0){
if( KeyBuf[ KEY_INPUT_Z ] >= 1 && KeyBuf[ KEY_INPUT_SPACE ] >= 1){
printfDx("Z + SPACE\n");  // 音ファイルがないので代用
}

ScreenFlip();
}

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

return 0 ; // ソフトの終了
}



これでも音が鳴らないとすれば、その原因はGetHitKeyStateAll_2以外のところにあると思います。
で、気になったのは先にも書いたwavファイルのロードに失敗していないかどうか

if( KeyBuf[ KEY_INPUT_Z ] >= 1 && KeyBuf[ KEY_INPUT_SPACE ] == 1){
   PlaySoundMem( ken[0], DX_PLAYTYPE_BACK );
}
とすると、Zとスペースが押されている、何回もPlaySoundMemが実行されることになります。
音が再生された後、キーを離してもう一度押すまではキーを音を鳴らさないというふうにするべきではないでしょうか。
例えば

bool flag[61]; //FALSEで初期化済みとする



途中省略



if( KeyBuf[ KEY_INPUT_Z ] >= 1 && KeyBuf[ KEY_INPUT_SPACE ] >= 1){
if (flag[0] == FALSE) { // 鍵盤離し済み
    PlaySoundMem( ken[0], DX_PLAYTYPE_BACK );
flag[0] = TRUE;
}
} else if ( !KeyBuf[ KEY_INPUT_Z ] && !KeyBuf[ KEY_INPUT_SPACE ]){
flag[0] = FALSE;
}

とか。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,056,133ポイント)   Date: 2009/09/09(水) 21:07   No:39053     
Title: Re:GetHitKeyStateAll_2のKeyBuf    
LoadSoundMem関数の返り値をチェックしてみて下さい。
ロードに失敗していたら-1が入るはずです。
ブレイクポイントを置くか、printfDxで出力するなどして返り値を確認して下さい。

また、2倍のポイントを手に入れたり、逆にポイントを落としてしまったりすることがありますが、
これは完全なランダムなので、何かをすれば2倍になったりと言う事はありません。

ただし、文字数が多いほどポイントが高くなるようになっています。

元々コメント沢山書いてくれた人には沢山ポイントを!と思って設定しましたが、
コードを大量にはっつけさえすればランクが上がると言うおかしなことに・・^^;


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

Name: kazuoni [URL]  ..ハッカー(104,597ポイント)   Date: 2009/09/09(水) 21:41   No:39056     
Title: Re:GetHitKeyStateAll_2のKeyBuf    
か、管理人さんの超回答ww
おもわず吹きましたww

>コードを大量にはっつけさえすればランクが上がると言うおかしなことに・・^^;
まさに自分がそれに当てはまる気が・・・w
っというか、質問をすれば自然とランクアップ。。
なんか、成長してます感がでて、若干プレッシャーになってきますねw

#余談
最近シューティングの質問が極端に増えてきましたね。
それ専用に掲示板を立ててみてはどうですか?っと
管理人さんに手間をかける質問をあえてしてみます・・・。


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

Name: trx  ..初心者(7,323ポイント)   Date: 2009/09/14(月) 04:12   No:39204     
Title: Re:GetHitKeyStateAll_2のKeyBuf    
LoadSoundMem関数の返り値が-1の場合は、どのような時なのですか?

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

Name: Dixq (管理人) [URL]  ..ウィザード(1,057,415ポイント)   Date: 2009/09/14(月) 06:25   No:39205     
Title: Re:GetHitKeyStateAll_2のKeyBuf    
>kazuoniさん

いえいえ、kazuoniさんはいつも回答してくださりお世話になっています^^
私は最近おろそかになってしまっているので、いつかJustyさんに抜かれそうな気が^^;

シューティングの質問増えてきましたね〜。
多くの人が見てくださっているのにあの内容は・・。
色々見直したいですね〜^^;

後、別掲示板の件、検討してみますね。

>trxさん

関数の仕様については、本家のリファレンスを確認してみるといいですよ。
http://homepage2.nifty.com/natupaji/DxLib/
リファレンスページから調べたい関数を調べて見て下さい。
どういう意味か解ると思います。


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

Name: trx  ..初心者(7,412ポイント)   Date: 2009/09/14(月) 07:27   No:39208     
Title: Re:GetHitKeyStateAll_2のKeyBuf    
管理人さん、ありがとうございます。
返り値をチェックして-1の場合どうすれば良いのでしょうか?
また返り値は、どの様にチェックすれば良いのでしょうか?
色々と調べてみたのですが、それらしき物が...
回答よろしくお願いします。


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

Name: ねこ  ..熟練のプログラマー(40,647ポイント)   Date: 2009/09/14(月) 08:31   No:39209     
Title: Re:GetHitKeyStateAll_2のKeyBuf    

int iRet = LoadSoundMem( "〜〜.wav" );
if( iRet == -1 )
{
// 読み込めなかった場合
}

読みこめなかった場合の処理というのは単純にエラーメッセージを出して読めなかった事をどこかに出力するのが一般的ですが、
そもそも読めない状態自体を直す必要があるので、ファイルのパスやファイルの形式を確認して下さい。

<また返り値は、どの様にチェックすれば良いのでしょうか?
<色々と調べてみたのですが、それらしき物が...
この質問をされてる時点でCの基礎は勉強してないと思うのですが、
ちゃんとプログラムを作りたいなら最低限if、for、whileと関数の仕組み、変数の使い方程度はCの基礎サイト見るなりして勉強したほうがいいですよ。
このままだと何かやりたいたびに質問しなきゃいけなくてとても非効率になってます。


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

Name: trx  ..初心者(7,530ポイント)   Date: 2009/09/14(月) 08:52   No:39210     
Title: Re:GetHitKeyStateAll_2のKeyBuf    

if( ken[0] == -1 )
{
break;
}
と入れてみたのですが、プログラムは、止まりませんでした。
それとGetHitKeyStateAll関数を使っていた頃は、音は出ていましたので、ファイルは正常だと思いますが。
回答よろしくお願いします。


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

Name: Mist  ..熟練のプログラマー(68,167ポイント)   Date: 2009/09/14(月) 10:04   No:39212     
Title: Re:GetHitKeyStateAll_2のKeyBuf    
breakはforやswitchから抜けるための命令であって、プログラムを止めるものではありません。
添付のプログラムにも反映されていませんし、その質問内容から回答はできないです。

No:39022で私が提示したサンプルのように音を鳴らすのではなく、画面表示でキー押下がキチンと認識できていないのか、それともキー押下は認識できているけど音を鳴らすことに失敗しているのか、問題の切り分けをしましょう。


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

Name: trx  ..初心者(7,626ポイント)   Date: 2009/09/15(火) 09:59   No:39235     
Title: Re:GetHitKeyStateAll_2のKeyBuf    
音が出ました!
単純な間違えをしていました。
Buildではなく、Compileを押していたからでした。
ごめんなさい。
ですが、今度は、画像が出てこなくなりました。
audio.cppを音だけ出る用にするには、どのように修正すれば良いのでしょうか?
回答よろしくお願いします。


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

Name: ねこ  ..熟練のプログラマー(40,670ポイント)   Date: 2009/09/15(火) 10:05   No:39236     
Title: Re:GetHitKeyStateAll_2のKeyBuf    
画像ファイル読み込んでる処理が無いから。

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

Name: trx  ..かけだし(1,664ポイント)   Date: 2009/09/15(火) 10:27   No:39237     
Title: Re:GetHitKeyStateAll_2のKeyBuf    
すみません。

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

Name: trx  ..初心者(7,678ポイント)   Date: 2009/09/19(土) 10:59   No:39371 解決!     
Title: Re:GetHitKeyStateAll_2のKeyBuf    
内容からずれたので解決にして新しく開きます。

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



Name: 初心者  ..プログラマー(35,900ポイント)   Date: 2009/09/19(土) 10:20   No:39366       
Title: 無題    
回答ありがとうございます。

 Flag の各値の説明をお願いしていいですか?


あと、もし面倒でなければ、
使用例みたいなものを1つ教えて欲しいんですが、

よろしくお願いします。


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


Name: 初心者  ..プログラマー(35,916ポイント)   Date: 2009/09/19(土) 10:20   No:39367 解決!     
Title: Re:無題    
すいません、間違えました;;

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



Name: Dixq (管理人) [URL]  ..ウィザード(1,050,736ポイント)   Date: 2009/08/29(土) 18:09   No:38567       
Title: 【雑談】 作成中のソフト(ゲーム)意見交換トピ    
皆さんこんにちは。まだ残暑の厳しい8月下旬ですが、いかがお過ごしでしょうか?
8月とは言え、長野は朝晩かなり涼しくなってきました。冬はどうなることやら・・。

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

先日dicさんのトピで趣味で作成しているソフトの話が出てましたね。
そこでアルファ版やら意見交換やらの話が出てきたので、こんなトピを立ててみました。

このトピは、今作成中のソフトやゲームを宣伝し、
指摘・意見を言い合ったり、モチベーションを高めあったりしよう!
という趣旨で立てました。

「宣伝するほどのものじゃ・・」「アルファ版出すほどのものじゃ・・」
普段そう思ってしまいがちな些細なツール的なものでも、このトピでは大歓迎です^^


それでは私から・・。
以前からUSBカメラ使って何かゲームが作れないかな〜!と考えていたのですが、
やっと少しだけ形になりました^^(と言うほど時間をかけたものじゃないですが^^;)
(ブログ参照→http://directxq.blog58.fc2.com/

画面に向かって翳すので、「ヒットした感」「押した(?)触れた(?)感」が無く、
実際やってみると、ビーマニやDDRのようなもうちょっと音楽と同期している感じが欲しい気がします・・。
何かご意見頂けるとありがたいです^^


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


Name: zwi  ..かけだし(1,196ポイント)   Date: 2009/08/29(土) 18:24   No:38569     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
USBカメラのヤツ見ました。なかなか面白そうですよ〜。
提案としては、振り回したりするアクションですので、指揮棒のようなアクションとか「サンバDEアミーゴ』のマラカス代わりとかのアクションの方が自然に馴染むかなぁと言う印象です。あと画面に向かってドラムのように両手持ちでリズムを刻む方が楽しそうです。
参考にしてください。


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

Name: 御津凪 [URL]  ..ハッカー(110,637ポイント)   Date: 2009/08/29(土) 19:06   No:38571     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
クリップボードツールの FIFO (キュー)機能を使っている方がどれほどいるかわかりませんが、
これは、その機能だけのクリップボードツールで、とても小さく、単純な自作ツールです。

本当に些細な、しかし実用的なツールだと思うので、自サイトで公開してもいいかなと思ってますが、
しかし、公開するものほどではない状態(設定が出来ない等)であるため、
現在とりあえず動いているものをここに置きますね。

あと、OS全体に影響するキーボードフックを利用してますので、
動かなくなる可能性は否定できないところをご了承ください。
(現在も実用テスト中です)

因みに制作のきっかけは、サブモニタを導入したとき、今まで使ってたクリップボードツールが動かなくなってしまい、他のツールを使おうにも使い勝手が悪かったところから作ろうと思い立ったことです。
で、とあるツールのソースを参考にし、1日半でこの状態になりました。
正式公開は来週にしようかなと思っています。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,050,931ポイント)   Date: 2009/08/29(土) 19:23   No:38573     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
>>zwiさん

>サンバDEアミーゴ

に・・似てる・・。
そうか〜、素人が思いつくような事は既にやられちゃってますよね;

>両手持ちでリズムを刻む方が楽しそうです。

なるほど、ドラムマニアのウェブカメラバージョンみたいな感じでしょうか。
ドラムマニアって機材が必要だし、家庭用の奴はホントやる気がしないんですよね〜;
ドラムなら同じ翳す動作でも、より叩いた感が出るかも?
ご意見ありがとうございます^^


>>御津凪さん

おぉ!これは便利!
前からこういう作業が出来ないかな〜と思ってたんですが、こういうソフトで実現可能なんですね。
これはマジで重宝させていただくかもしれません^^
正式公開楽しみにしてます〜☆


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

Name: kazuoni [URL]  ..ハッカー(101,942ポイント)   Date: 2009/08/29(土) 20:09   No:38574     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
>御津凪さん

これは便利すぎますww
本当に重宝します^^
制限もメモリがあるかぎりって嬉しいですね。
プログラミングの時も絶対に役に立ちそうです。

ここからは、一ユーザーのぼやきとして聞いてください。
コピーしたものの一覧がctrl+anyで一覧が出て、
それを選択して、文字挿入なんてあったらもっと使い幅が広がりそうで・・・す。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,051,054ポイント)   Date: 2009/08/29(土) 20:21   No:38575     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
お〜それはいいですね!
私もそのリクエストに一票!

後その一覧の中から範囲指定をするとCtrl+Vを押すたびにループするとか・・・
したら操作がめんどくさくなるか^^;

3種類位繰り返しペーストしたい作業とかよくあるんですよね〜・・。


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

Name: 御津凪 [URL]  ..ハッカー(110,849ポイント)   Date: 2009/08/29(土) 20:38   No:38577     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
> コピーしたものの一覧がctrl+anyで一覧が出て、
> それを選択して、文字挿入なんてあったらもっと使い幅が広がりそうで・・・す。

それも機能として入れようとは思っていますが、
実装のプライオリティを下げているので、後で実装することになりそうです。

> 後その一覧の中から範囲指定をするとCtrl+Vを押すたびにループするとか・・・

面白い機能ではありますが、実装は結構後になりそうですね。
選択UIを用意する必要があるので…。

コピーしたデータの重複チェックとか一切していないので、
必要な分だけコピーを繰り返すことで今は代替として機能すると思います。
(永遠にとなると、実装しないといけませんが)

今の実装プライオリティは、

設定と設定画面の実装>クリップボード履歴>ループペースト機能

こんな感じです。
でもその前に今やっているゲームの完成を優先してますが。


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

Name: 羽流布 [URL]  ..中級者(12,844ポイント)   Date: 2009/08/30(日) 11:38   No:38601     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
お久しぶりです!
初めての方は初めまして!
羽流布《うるふ》と申しますm(_ _)m
覚えてるかな・・・?

この度、偶然こちらのトピックが目に入り、
僕も晒しておこうかなと思った次第です(;^^

なにぶん、まだ本編が遊べる状態ではありませんので、
今回はシステム面だけの公開とさせて頂きます。

紹介サイトはコチラです(サンプルがダウンロードできます)
http://dzware.suppa.jp/chiara/

とりあえず就活が無事終了しましたので、
時間の許す限りせっせと制作に励んでおります。

変わったことと言えば、、、

ボーカロイドを購入して音楽制作を始めました^^
http://dzware.suppa.jp/video.html

楽器とか全く弾けませんので、愛と根性でやっております(苦笑)

まだまだ未熟な故、期待しないで見て頂ければ幸いです!


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

Name: 羽流布 [URL]  ..中級者(12,340ポイント)   Date: 2009/08/30(日) 21:09   No:38631     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
雑談トピなのに恐縮ですが、ついでに質問させていただきます。

FPSについてなのですが、何故かこれが60に安定しないのです・・・
処理落ちはしてないと思うのですが、こんなにフラフラするものでしょうか?
ソースを以下に載せておきますので、よろしくお願いしますm(_ _)m
(アルゴリズムはDixqさんの龍神録プログラミングそのまんまです)


class Fps
{
public static const
{
int FIXED_FPS = 60; /// FPSの固定値
}

private static
{
int m_count; /// フレームのカウンター
int m_time0; /// 基準時間(1フレーム目の時間)
int[FIXED_FPS] m_f; /// 各フレームに要した時間
double m_avg; /// FPSの平均値
}


/// コンストラクタ ///////////////////////////////////////////////////////////////
private this() {}


/// 処理速度を一定にする /////////////////////////////////////////////////////////
static void wait()
{
int waitingTime; // 待ち時間
static int lastTime = 0; // 前回の時間
int nowTime; // 今回の時間

// 1フレーム目であれば
if( m_count == 0 )
{
// 基準時間から待ち時間を求める(初回であれば待たない)
waitingTime = (lastTime == 0) ? 0 : (m_time0 + 1000 - dx_GetNowCount());
}
else
{
// 待ち時間 = 理想の現在時間 - 現在時間
waitingTime = cast(int)(m_time0 + m_count * (1000.0 / FIXED_FPS)) - dx_GetNowCount();
}

// 時間が余れば待つ
if( waitingTime > 0 ) Sleep( waitingTime );

nowTime = dx_GetNowCount();

// 基準時間を格納
m_time0 = (m_count == 0) ? nowTime : m_time0;

// 1フレームに要した時間を格納
m_f[m_count] = nowTime - lastTime;

lastTime = nowTime;

// FPSの平均値を求める
if( m_count == FIXED_FPS - 1 )
{
m_avg = 0;
foreach( n; m_f )
m_avg += n;
m_avg /= FIXED_FPS;
}

m_count = (++m_count) % FIXED_FPS;
}


/// FPSを取得 /////////////////////////////////////////////////////////////////
static double get() { return (m_avg == 0) ? 0 : (1000 / m_avg); }
}


追記:
・・・当然、これだけでは原因なんて解りませんよね(;^^
当方、D言語で開発しておりますもので情報が少ないのですよorz
一応、アップローダにうpしたものにはデバッグ情報表示機能がありますが、
他にどんな情報が必要でしょう?


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,051,185ポイント)   Date: 2009/08/31(月) 23:12   No:38684     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
おぉ〜、まだしっかり拝見できていないのですがすごいですね^^
明日帰宅して、遊ばさせていただきます^^
絵は自作ですか??すごいですね!
曲制作までされているとは・・。

私は音ゲー的なものを作っているのはいいのですが、
同梱できる曲が無いので困っています;


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

Name: 羽流布 [URL]  ..中級者(10,665ポイント)   Date: 2009/08/31(月) 23:23   No:38685     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
おぉ〜管理人さん^^
お久しぶりです!

> 明日帰宅して、遊ばさせていただきます^^

はは・・・
申し訳ないですが、まだ本編を公開できないのですね(;^^
タイトル画面までの公開となっておりますw

> 絵は自作ですか??すごいですね!

とんでもないです(汗)
大上狼さんという人に協力いただいています(;^^
さすがに東方の人みたいに何でもはできませんよorz

> 曲制作までされているとは・・。

未熟ですが一応やっております。


お疲れ様です^^


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

Name: Justy  ..伝説なるハッカー(410,395ポイント)   Date: 2009/09/01(火) 00:15   No:38687     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    

>羽流布《うるふ》と申しますm(_ _)m
>覚えてるかな・・・?

 もちろん、覚えてますよ。


>FPSについてなのですが、何故かこれが60に安定しないのです・

 うちの環境では 60ではないですが、表示される数値は 58.7(±0.1くらい)で
安定していますよ。

 ところで、このゲームタイトル画面だけですか?
(サウンド鳴らさないのなら、サウンドデータ削れば3つに分割する必要がなくなるんじゃ……)


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

Name: 羽流布 [URL]  ..中級者(10,862ポイント)   Date: 2009/09/01(火) 00:40   No:38688     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
> Justyさん

覚えていてもらえて光栄です^^
C言語を学び始めた頃にはお世話になったような気がします。

> うちの環境では 60ではないですが、表示される数値は 58.7(±0.1くらい)で安定していますよ。

そのことなんですが、、、
色々試してみた結果、特に問題はないようですのでスルーすることにしました(;^^
ただ、龍神録をプレイしてみて60で安定しているなと感じたもので。
僕の環境ですと、58になったり61になったり。。。
なぜかバラつくのですよ。

> ところで、このゲームタイトル画面だけですか?

現時点では、そうです(;^^
本編の方はまだ色々実装したいものがありますので、
先に延びていくと思われますw
ですが、とりあえず遊べる状態になったら体験版として公開するつもりです。

> (サウンド鳴らさないのなら、サウンドデータ削れば3つに分割する必要がなくなるんじゃ……)

ほう・・・
確かにそうかもw
でも、アップローダが15MBまでなのですよorz

正式に公開するのであれば、ベクターとかを利用するつもりですが。


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

Name: 御津凪 [URL]  ..ハッカー(111,444ポイント)   Date: 2009/09/01(火) 12:57   No:38692     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
D言語といえば、
ABA Games のサイトで、主にD言語でシューティングゲームを製作していることを思い出しました。

確かほとんどのゲームにソースコードがあったと思いますので、それを参考にしてみてはどうでしょうか。


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

Name: 羽流布 [URL]  ..中級者(10,959ポイント)   Date: 2009/09/01(火) 13:15   No:38694     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
> 御津凪さん
ABAさんはD言語界では有名ですからね^^

確かにソースコードは添付されていましたが、
コンパイラのバージョンが古いので残念orz
D言語はまだ発展途上ですから、言語レベルで仕様が変わったりするのですよ(;^^

あと、ABAさんはライブラリにSDLとかOpenGLを使ってるみたいですね。
僕もかじった事はありますが、やはりDXライブラリに落ち着いています・・・


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

Name: 羽流布 [URL]  ..中級者(12,048ポイント)   Date: 2009/09/01(火) 15:35   No:38700     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
Justyさんに指摘された通り、分割しないで済むように上げ直しました(;^^
(サンプルのダウンロード先を随時紹介サイトに載せていくことにしました^^
興味のある人は立ち寄ってみてください)
http://dzware.suppa.jp/chiara/

ついでにオープニング曲や「ザ・マッチメイカァズ」さんの効果音も付けてみました。
オープニング曲は自作ですが、気分によっては修正したりするかもしれません・・・

あと、D言語の紹介も兼ねてソースコードを一部載せたりしてみますw

下記のソースはメニュー表示クラスのメンバの1つです。
C言語の視点から見ると、かなり可笑しいと思われます。
・・・というより、僕の書き方が変なのかも。。。


/// デバッグ・モードを表示 ///////////////////////////////////////////////////////
private void showMenuDebugMode()
{
scope List!(string) str = new List!(string);

// フラグを文字列にする関数
string fToStr( bool f )
{
return std.string.format( "%s %s %s", (f) ? " " : "←", (f) ? "オン" : "オフ", (f) ? "→" : " " );
}

// 文字列を格納
str.pushBack( std.string.format( "FPS:%s", fToStr( g_showFpsFlag ) ) );
str.pushBack( std.string.format( "現在日時:%s", fToStr( g_showDateFlag ) ) );
str.pushBack( std.string.format( "乱数:%s", fToStr( g_showRandFlag ) ) );
str.pushBack( std.string.format( "処理時間:%s", fToStr( g_showFuncTimeFlag ) ) );
str.pushBack( std.string.format( "メモリ状態:%s", fToStr( g_showMemoryStatusFlag ) ) );
str.pushBack( std.string.format( "入力:%s", fToStr( g_showInputFlag ) ) );
str.pushBack( "スクリーン・ショット" );
str.pushBack( "戻る" );

// 描画
draw( str, "デバッグ・モード" );

// 選択された項目を実行
if( Input.get( BUTTON_Z, false, I_LV ) || Mouse.getLeftClick( 0, 0, SCREEN_X, SCREEN_Y, I_LV ) )
{
switch( str( m_cursorPos ) )
{
case "スクリーン・ショット": m_printScreenFlag = true; break;
case "戻る": returnMenuState(); break;
//
default: break;
}
}

// 設定の変更処理
if( Input.get( BUTTON_LEFT, true, I_LV ) || Input.get( BUTTON_RIGHT, true, I_LV ) )
{
switch( m_cursorPos )
{
case 0: g_showFpsFlag = (Input.get( BUTTON_LEFT, true, I_LV )) ? true : false; break;
case 1: g_showDateFlag = (Input.get( BUTTON_LEFT, true, I_LV )) ? true : false; break;
case 2: g_showRandFlag = (Input.get( BUTTON_LEFT, true, I_LV )) ? true : false; break;
case 3: g_showFuncTimeFlag = (Input.get( BUTTON_LEFT, true, I_LV )) ? true : false; break;
case 4: g_showMemoryStatusFlag = (Input.get( BUTTON_LEFT, true, I_LV )) ? true : false; break;
case 5: g_showInputFlag = (Input.get( BUTTON_LEFT, true, I_LV )) ? true : false; break;
//
default: break;
}
}
}



関数の中で関数を定義できたり、switch文に文字列が使えたり・・・
書いていて楽しいです^^


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

Name: 御津凪 [URL]  ..ハッカー(112,576ポイント)   Date: 2009/09/04(金) 00:56   No:38779     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
クリップボードツールのベータ版が出来ましたので、またテスト版として添付しておきますね。

このバージョン(0.10)では、
kazuoni さんの提示した履歴貼り付け機能と、
Dixq さんの提示したループペースト機能を実装しました。
あと、それぞれの機能を呼び出すホットキーの設定も入れました。
これで実用可能レベルになったと思います。

この制作過程の中で苦労した点が、グローバルフックを使ったツールの為、
デバッグがまともにできなかったところ。

グローバルフックは全てのアプリケーションに関与する為、デバッガも例外ではなく、
ブレイクポイント等で引っかかった瞬間デバッガは対象をブロックするので
グローバルフックの処理もブロックしてデバッガがフリーズ、
と言った結果に開発中は何度も苦労しました。
(つまり、何で止まったのかの詳しい情報が分からない)

添付されているツールではそのようなフリーズになることはまず無いので安心してください。


> 羽流布さん

D 言語は文法的に便利ですが、私は C++ をそのまま移植出来ないのがつらくて、
留まっているんですよね。
すでにゲームライブラリも C++ で組んじゃったし…。

D 言語がメジャーバージョンアップしたころには普及しているといいですね。


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

Name: kazuoni [URL]  ..ハッカー(103,597ポイント)   Date: 2009/09/04(金) 01:27   No:38781     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
自分の意見がそのまま実装に・・・^^;
本当に便利です。
vector等に登録しておけば、
すぐ便利ツールでランキング入りしそうな気が・・・w


グローバルフック・・・。
確か同い年なのに、こうも知識の差があると、
頭が上がりませんw


制作本当にお疲れ様でした!
愛用させていただきます^^


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

Name: アトラス [URL]  ..入門者(2,621ポイント)   Date: 2009/09/04(金) 10:30   No:38785     
Title: 初心者ですが    
私も現在制作中のゲームを公開してみたいと思います。
http://www.geocities.jp/roy_marth0301/testplay.zip
1か月かけてやっとこの段階までできました^^;
これから戦闘システムを作るつもりです。

現段階のマップでは一応2階の画面上部にたどり着けばゴールです。
ちなみにグラフィック、音楽は無料素材サイト様のを使わせてもらってます。


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

Name: 羽流布 [URL]  ..中級者(12,158ポイント)   Date: 2009/09/04(金) 15:28   No:38789     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
> 御津凪さん
そうですねぇ〜
C言語で作ったライブラリならDからでも呼び出せるのですが(;^^

クリップボードツールのほう使用させて頂きました^^
こういうツールは意外と使う場面が多いので助かったです!

テキストだけでも十分使えるのですが、
他のデータ形式への対応はやはり難しいのでしょうか?
素人な意見ですみません(汗)

> アトラスさん
プレイさせて頂きました♪
氷の床の謎解きには結構手間取りましたよ(;^^

戦闘はアクション形式なのでしょうか?
なんにせよ楽しみにしております!


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

Name: 御津凪 [URL]  ..ハッカー(112,662ポイント)   Date: 2009/09/04(金) 15:59   No:38791     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
> テキストだけでも十分使えるのですが、
> 他のデータ形式への対応はやはり難しいのでしょうか?

クリップボードのデータ構造から見ると、あらゆるデータを扱うことは可能です。
クリップボードに格納されているデータと形式を保存し、使用するときに書き込むだけで済みます。
が、混在するデータを扱う時のUIと動作が複雑になりやすいです。
また、テキスト形式のみ扱う目的で作ったツールなので、
現在はテキスト形式以外を扱う予定はないです。


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

Name: 羽流布 [URL]  ..中級者(12,169ポイント)   Date: 2009/09/04(金) 16:13   No:38793     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
> が、混在するデータを扱う時のUIと動作が複雑になりやすいです。
ですよねぇ〜(;^^

制作お疲れ様です!


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,052,641ポイント)   Date: 2009/09/06(日) 04:23   No:38898     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
>羽流布さん

遅くなりました〜(@_@
いや〜毎日遅いのに、今日は友達の結婚式で大阪に来ており、終電に間に合わなくなって
現在ネカフェで始発待ちです・・。眠い・・zzZ
半年ぶり位の徹夜です^^;
院時代は2日に一度徹夜していたDixqですが、最近はもう徹夜がこたえるように・・w

タイトル画面のみの公開とかいてありましたね、すみません^^;
拝見させていただきました。タイトルだけでも先に出来るとやる気がでますよね♪
私もまずタイトル作ったり作りたいものから作りますw
計算モジュール作ってるかと思ったりロゴ作り始めたり^^;

>アトラスさん

「このページは準備中です」(T_T


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

Name: アトラス [URL]  ..入門者(2,685ポイント)   Date: 2009/09/06(日) 07:45   No:38907     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
>管理人さん

すみません。
リンククリックだとなぜかつながらないみたいです^^;
アドレスをコピーして直接打ちでやってみてください。


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

Name: ひよこ  ..熟練のプログラマー(48,704ポイント)   Date: 2009/09/06(日) 10:29   No:38909     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
アトラスさん
>>ゲーム遊ばせていただきました。とても楽しくてむずかしい。
完成が楽しみです。


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

Name: 羽流布 [URL]  ..中級者(12,365ポイント)   Date: 2009/09/06(日) 18:00   No:38938     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
> 管理人さん

> いや〜毎日遅いのに、今日は友達の結婚式で大阪に来ており、終電に間に合わなくなって
> 現在ネカフェで始発待ちです・・。眠い・・zzZ
なんだか大変そうですね(;^^
僕も広島にとあるアーティストのライブを見に行ったとき、
終電に間に合わずネカフェで過ごしたことがありましたよorz

> 半年ぶり位の徹夜です^^;
> 院時代は2日に一度徹夜していたDixqですが、最近はもう徹夜がこたえるように・・w
僕の場合、既に徹夜がキツイですよ(汗)
高校時代はよく寝ずに色々やってましたが・・・
最近は体がダルイです。

実のところ、今日はワールドマップを作ってました。
いやぁ〜、ただのダンジョンゲームでは面白くないと思い・・・
ちなみにストーリーは8章構成となっていて、それぞれ1つずつダンジョンを用意します。
おまけダンジョンも2つほど。

ただ、僕が大学4年ということもありまして当然卒業研究があるのですね(;^^
しかしながら内容がコンパイラ作成ですので、
スクリプト・エンジンに活かせたりと少し嬉しかったりします^^


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

Name: situmon  ..熟練のプログラマー(44,460ポイント)   Date: 2009/09/06(日) 18:18   No:38940     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
とつぜんですがすいません。
アトラスさんのゲームやってみました。
おもしろかったですが、氷がとても・・・難しかったです。
これ本当にいけるのかな・・・とかおもいながら時間を結構費やしやっとできました。
みなさん面白そうなゲームばかりつくられていますね。


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

Name: アトラス [URL]  ..入門者(2,766ポイント)   Date: 2009/09/06(日) 20:08   No:38951     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
>管理人さん、羽流布さん、situmonさん
感想ありがとうございます!
ゲームを作るのは初めてなこともあり、公開することは不安だったのですが、みなさんの感想のおかげで自信がもてました。
頑張って完成させたいと思います。
あと謎解きはもう少しわかりやすくしたほうがいいのでしょうか?


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,053,770ポイント)   Date: 2009/09/06(日) 21:22   No:38954     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
おぉ〜やってみました^^
面白いですね♪

「これどうやったらいけるんだ・・」みたいに思わず考え込みましたw
謎解きは段階的に難しくすれば大丈夫だと思いますよ!
ただ私のようにパズルゲーが苦手な人間は、どうにもならなくなると投げてしまうので^^;
そういうときの救済処置とかがあると親切かも・・?

あとやってみて感じた事としては
宝箱から出てくるものが違うのに、宝箱の形が同じだとちょっとわかりにくいかなと思いました。
弾薬は赤、鍵は青・・など中に入ってるアイテムによって色分けしてみたりしてはどうでしょう?
連打してしまった時とか「あれ・・?今何手に入れたっけ?」みたいに思ってしまうかもしれないので。
まぁその辺はメニューで確認出来ますし、何が入ってるかあけるまで解らない方がゲーム的にいいなど
色々あると思うのであくまで参考程度ということで^^

後、効果音クオリティが高くていいですね☆


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

Name: situmon  ..熟練のプログラマー(44,469ポイント)   Date: 2009/09/06(日) 22:09   No:38960     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
謎解きとは難しいからいいのです(笑
解けたときの快感がほどよく味わえる程度で・・・
でも難しすぎるのはやめちゃいます。
しかしアトラスさんの作品はほどほどでちょうどいい難しさでしたよ。
ですが、もう少し、絵の増加、エフェクト、音の増加をするといいかもしれません。

あと管理人さんのゲームですが、
やってみたくなりました。
もうあれさえ持ってれば、家庭用ゲーム機がなくても十分遊べそうですよ!!

今自分はせっせとシューティングゲームをつくっています。
初めて、試験的に3ステージ+EX制にするのでかなり時間がかかっています。


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

Name: 御津凪 [URL]  ..ハッカー(113,138ポイント)   Date: 2009/09/10(木) 21:57   No:39084     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
> kazuoni さん

> vector等に登録しておけば、
> すぐ便利ツールでランキング入りしそうな気が・・・w

報告が遅れましたが、 Vector に登録しました(9/4に公開されてます)。
また、今日窓の杜にて紹介されちゃいました。
(まさかとは思いましたが、やはりサイトのアクセスへの影響は計り知れませんね)

現状でも満足していたのですが、あとひとつ入れるのを忘れていた機能があって、
それを問題なく使えてメジャーバージョンとしたいなと思います。
定型文章を登録しておいて、それを履歴機能のように呼び出して貼り付ける、というやつです。
(いつ実装作業するかはまだ未定ですが)

以上、宣伝がましい報告でした^^;


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

Name: kazuoni [URL]  ..ハッカー(104,820ポイント)   Date: 2009/09/10(木) 23:19   No:39089     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
おぉw予想通りの展開ですねww
でもまさか窓の杜で紹介されるとは・・・。
ってことは、windows●●%と、Iピーとかも来ちゃったりw

そして今日のアクセス数wwすごいww

開発がんばってください^^


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

Name: zwi  ..入門者(3,809ポイント)   Date: 2009/09/10(木) 23:31   No:39091     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
>> 御津凪さん。
おっ、これは早いですね。
窓の杜で、こんなに早く紹介される事があるんですね。

>windows●●%と、Iピーとかも来ちゃったりw
確実に依頼が来ると思います。
このソフトなら、もっと一般向けの●スキー・ドットPCとか●経PCとかからも問い合わせがあるかも。


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

Name: バグ  ..ハッカー(170,334ポイント)   Date: 2009/09/11(金) 14:35   No:39108     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
コンソールアプリでイベントドリブンっぽい事をやりたい人(居るかどうかは別問題)用に作ったクラスです。
これまでに作ったコンソールアプリ用の関数も色々と詰め込んでパッケージングしてみました。

サンプルコードは、マウスの移動、クリックに、キー入力、フォーカスの移動などを検知するようにしております。

他にも文字に色を付けたり、カーソル位置を移動させたりもできます。

まだ未完成品ですが、よかったら見てやってください。

開発環境はVS2005、言語はC++、WINAPIです。


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

Name: 羽流布 [URL]  ..中級者(12,472ポイント)   Date: 2009/09/12(土) 09:40   No:39133     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
> バグさん

早速D言語に書き直して使わせて頂きました^^

D言語はUTF-8のためWindowsのコマンドプロンプト(Shift-JIS)と相性が悪くて困ってたのですよ・・・
(日本語が文字化けする)
でも、WINAPIを使えば解決できたのですねw

あと、以前からイベント駆動型プログラミングに興味がありまして。。。
参考にさせて頂きました!


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

Name: バグ  ..ハッカー(170,375ポイント)   Date: 2009/09/12(土) 12:47   No:39137     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
>>羽流布さん
あまりに忙しい中、現実逃避気味に作成したクラスですが可愛がってやってくださいw


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

Name: Tororo  ..ぴよぴよ(321ポイント)   Date: 2009/09/18(金) 19:51   No:39342     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
余り関係ないですが文字の色を変えるのは どうやって変えているのですか?
最初にDixqさんがやった 大歓迎←黄色みたいなかんじで・・
ちょっと気になるんです・・


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

Name: kazuoni [URL]  ..ハッカー(105,969ポイント)   Date: 2009/09/18(金) 22:55   No:39351     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    
これですか?

<FONT COLOR="Red"></FONT>

すべてRedのR以外半角小文字です
「タグ」で調べればいろいろ出てきますよ。
この掲示板では、簡単タグ入力からできますよ^^


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

Name: Tororo  ..ぴよぴよ(382ポイント)   Date: 2009/09/19(土) 08:05   No:39363     
Title: Re:【雑談】 作成中のソフト(ゲーム)意見交換トピ    

テストです


アクア色??


紫色?


kazuoniさんありがとうございましたm(__ __)m
簡単タグ入力とはこのことだったのですね!


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



Name: あ〜る  ..中級者(11,774ポイント)   Date: 2009/09/16(水) 18:10   No:39264       
Title: VisualC++とBorlandC++の違い    
こんにちは
別にプログラミング自体には関係無い(?)んですけど、知らないで困ったら嫌だと思い投稿させて頂きました
内容はタイトルの通りです
ネットで調べてみたんですけどイマイチちゃんと載ってるサイトが出てきません
心なしかVCを進めてる本やサイトの方が多い気がするのでBCを使ってるので不安になったので知っておきたいです
よろしくお願いします


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


Name: ねこ  ..熟練のプログラマー(41,008ポイント)   Date: 2009/09/16(水) 19:32   No:39265     
Title: Re:VisualC++とBorlandC++の違い    
BCは昔使っただけで別段比較して「ここが優れてる!」とか調べたわけじゃないのですが

昔まだVisualStudioが有料だった頃に、C開発をする無料ツールの代表がBCでした。
当時の参考書だとBCインストールから記述された書籍も多かったと思います。

ただVCがExpress Editionとして無料で利用出来るようになったため
昨今では機能的にVCを推奨し、それをベースに解説を構築するサイトが増えていると思います。

この先は私的意見ですが
Javaでよく使われるEclipseのようにフリーでも高性能の開発ツールもありますが
やはりStandardという上位有償バージョンを持つVCの方が機能的にも優れていると思います。
また開発系の職業に就けばVisualStudioを使う機会あると思いますし。
乗り換えた方が色々な物を作っていく上で効率的じゃないかな〜と思いますよ。


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

Name: たいちう  ..プログラマー(33,758ポイント)   Date: 2009/09/16(水) 19:38   No:39266     
Title: Re:VisualC++とBorlandC++の違い    
「Borland C++ Compiler 5.5」のことですよね。
これが出た10年ほど前は、無償のコンパイラの中では
かなり人気があった気がします。
「Visual C++ 2005 Express Edition」が出た頃から
存在意義が減ったと個人的には思います。

「マシンスペックのために、古いコンパイラじゃないと
重くて動かない」とかいう理由が無いのならば、
「Visual C++ 2008 Express Edition」等に移ることを
お勧めします。強く勧めるわけではないけど。

VCとBCCとで、情報が手に入りやすいのはどっちか?
というのが主な理由です。


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

Name: dic  ..プログラマー(33,219ポイント)   Date: 2009/09/16(水) 21:23   No:39277     
Title: Re:VisualC++とBorlandC++の違い    
Borland C++ Compiler 5.5のことでしょうか?
みなさんおっしゃってる通り昔は無料で、コンパイル、ビルドできて
無料でゲームなり、アプリケーションなり作れてて Visual C++ 6.0 とか高くて
とてもじゃないが買えない学生向けだったと思われます

しかしながら、makefileは手書きだったりしてて、やっぱりビルド、コンパイルのソースファイルを
自動で生成してくれる有料版を買う方もいらっしゃいましたね

gccなどいじったことのない私なので、makefileを手書きするのは避けて通るので
勉強がてらに使うのもありだと私は考えます
今でもmakefile直書きする人は重宝がられます(私の知ってる範囲ですが)


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

Name: 御津凪 [URL]  ..ハッカー(113,953ポイント)   Date: 2009/09/16(水) 22:10   No:39283     
Title: Re:VisualC++とBorlandC++の違い    
gcc も VC++ も BCC も、コンパイル・リンクの方法はほぼ同じですが、
細かい点において色々と違いがありますね。
(現在ではそれぞれ無償版が存在するという点など)
それぞれの相違点は大まかに、

・VC++ は IDE を含めて無償で提供されており、
 常に Microsoft の最新 SDK を利用することが出来る。
 また、配布されているライブラリに付属されるライブラリファイルも VC++ 形式が多い。
 なお、コンパイルエラー文なども日本語で表示されるのも他とは違う点。

・BCC は 無償版(5.5)が古く(最近の仕様に対応されていないところがあるなど)、
 フリーの IDE もあるが、コンパイルできない(BCCに対応していない)ライブラリがあったり、
 VC++ 形式のライブラリファイルを変換する手間があるなどの欠点がある。

・gcc はツール一式を導入することで C, C++ の他にも Java などの他の言語もコンパイルできる。
 これにもフリーの IDE があるが、専門知識がないと理解しずらい部分があったりする。
 しかし、コンパイルオプションを駆使することで他のコンパイラより実行ファイルサイズが小さくなりやすい。

こんな感じでしょうか。

もっとも、それぞれの最新のコンパイラを比較したことが無いので
間違っている部分があるかもしれませんが。


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

Name: あ〜る  ..中級者(11,936ポイント)   Date: 2009/09/19(土) 07:59   No:39362     
Title: Re:VisualC++とBorlandC++の違い    
返信遅れてすいません
皆さんの意見を聞くと、やっぱりVCの方がいいみたいなんで、こっちを使う事にしました
教えて下さりありがとうございました


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



Name: Ace  ..かけだし(1,236ポイント)   Date: 2009/09/17(木) 23:23   No:39328       
Title: ボタンのサブクラス化について    
Win32APIでボタンをサブクラス化して、色々試していたのですが、よく分からない挙動をして示したので質問させていただきます。
とりあえずソースをのせます。VC++2008Proでコンパイル成功の確認済みです。

#include <windows.h>

HINSTANCE hInst;

#define ID_BUTTON (1)
WNDPROC defBtnProc;

LRESULT CALLBACK BtnProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) {

switch (msg) {
case WM_LBUTTONUP: {
int dammy = 0; // ブレークポイント用のダミー
// これを実行するとWM_COMMANDのほうへメッセージがいかない!?
//MessageBox(hWnd, L"HogeHoge at BtnProc", L"WM_LBUTTONUP", MB_OK);
break;
}
}

return CallWindowProc(defBtnProc, hWnd, msg, wp, lp);
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) {

switch (msg) {
case WM_DESTROY: {
PostQuitMessage(0);
return 0;
}
case WM_CREATE: {
HWND hBtn = CreateWindow(L"BUTTON", L"Click Me!",
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
20, 20, 100, 30, hWnd, (HMENU)ID_BUTTON, hInst, 0);

defBtnProc = (WNDPROC)GetWindowLong(hBtn, GWL_WNDPROC);
SetWindowLong(hBtn, GWL_WNDPROC, (LONG)BtnProc);

return 0;
}
case WM_COMMAND: {
switch (LOWORD(wp)) {
case ID_BUTTON: {
MessageBox(hWnd, L"HogeHoge at WndProc", L"ID_BUTTON", MB_OK);
return 0;
}
}
break;
}
}

return DefWindowProc(hWnd, msg, wp, lp);
}


int WINAPI wWinMain(
HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPWSTR lpszCmdLine, int nCmdShow) {

WNDCLASSEX wc = {0};
HWND hWnd = 0;
MSG msg = {0};
BOOL ret = 0;

hInst = hInstance;

wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
wc.lpszMenuName = 0;
wc.lpszClassName = L"BUTTON_TEST_CLASS_NAME";
wc.hIconSm = wc.hIcon;

if (!RegisterClassEx(&wc)) return -1;

hWnd = CreateWindow(
wc.lpszClassName, L"Button Test",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
300, 300, NULL, NULL, hInstance, NULL);

if (!hWnd) return -1;

ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

while (1) {
ret = GetMessage(&msg, NULL, 0, 0);
if (ret == -1) return -1;
if (ret == 0) break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return 0;
}

ソース中にも少し書きましたが、BtnProcのWM_LBUTTONUPでMessageBoxを実行するとWndProcにWM_COMMANDメッセージがいっていないようです。
しかし、BtnProcのWM_LBUTTONUPでMessageBoxを実行しなければ(ソースの状態です)、WM_COMMANDメッセージが送られているようなのです。

これはいったい何故なのでしょうか?
WM_LBUTTONUPでMessageBoxを実行したことにより何が起こってしまったのかがよく分かりません。
分かる方がいましたら、ご教示のほどよろしくお願いいたします。


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


Name: Justy  ..伝説なるハッカー(426,832ポイント)   Date: 2009/09/19(土) 00:15   No:39358     
Title: Re:ボタンのサブクラス化について    

>これはいったい何故なのでしょうか?

 多分メインウィンドウが非アクティブ化になってしまっているからでしょう。


 起動した直後はメインウインドウがアクティブな状態になっていますが、
ボタンをクリックしてメッセージボックスを表示した瞬間にメインウインドウが
非アクティブ化され、メッセージボックスがアクティブになります。

 その為、非アクティブになったメインウインドウには WM_COMMANDが
来ないのだと思います。


 アクティブ・非アクティブの切り替わりは WM_ACTIVATEメッセージを
とらえると判ります。


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

Name: Ace  ..かけだし(1,322ポイント)   Date: 2009/09/19(土) 03:13   No:39361 解決!     
Title: Re:ボタンのサブクラス化について    
WM_COMMANDはウィンドウがアクティブな時しか送られないのですね。
なるほど、納得です。

ウィンドウメッセージはこういうところが煩雑で疲れます…。

数日間もやもやしていたのが、すっきりしました。
どうもありがとうございました。


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



Name: yume  ..ぴよぴよ(192ポイント)   Date: 2009/09/17(木) 14:43   No:39303       
Title: デバッグ実行    
はじめまして。こちらのサイトでC言語を勉強させて頂いている者です。
ゲームプログラミング解説の「DCライブラリの設定」の内「5.DXライブラリを使用するためのプロジェクトの設定を行う」までは出来たのですが、その後の「画面中央に点を打つプログラム」が上手く行きません。
サンプルをそのままコピペ→デバッグ実行しているのですが、デバッグ実行自体にエラーは起こらないものの、全画面の状態になっても画面に点は表示されず、真っ暗なままです。
試しにDxLib_VC2008用.sinをダブルクリックして実行し、てみたのですが、こちらもウィンドウは真っ暗のまま、画像が表示されませんでした。
仮にVC2008やDXライブラリの設定を間違えていなければ、使っているPCのスペックや設定に問題があるのでしょうか?


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


Name: 山崎  ..プログラマー(26,375ポイント)   Date: 2009/09/17(木) 20:41   No:39317     
Title: Re:デバッグ実行    
こんばんは。

もしかして、DXライブラリは最新のバージョン3.0以上でしょうか?
結構最近3.0にバージョンアップされて、3D機能が豊富になりました。
今のところバージョン3.0以上ですと、パソコンによって何も描画されないことがあるようです。
今、私のパソコンもその症状が出ていて、本家DXライブラリのサイトの方に報告しています。
多くのパソコンでは、ちゃんと画面に描画されるようですが…。

yumeさんの方の不具合がこの問題によるものかはわかりませんが、念のため申し上げておきました。
もし違う理由でしたらすいません〜!


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

Name: ぽよ  ..ぴよぴよ(24ポイント)   Date: 2009/09/18(金) 10:54   No:39336     
Title: Re:デバッグ実行    
はじめまして

私も同じような状況ですが、どうやらDXライブラリ3.0以降とちょっと古めのGeForce系グラフィックボードで起こる環境依存のものではないかといわれています。
DXライブラリダウンロードページに前のバージョンである2.25bも置いてありますので、とりあえずそちらを使用してみてはいかがでしょうか。
DXlib3.0以降で問題の起こる方もそちらは問題ないようです。
私も問題ありませんでした。


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

Name: yume  ..ぴよぴよ(280ポイント)   Date: 2009/09/18(金) 15:30   No:39339 解決!     
Title: Re:デバッグ実行    
お2人ともありがとうございます。
前バージョンを使用することで正常に表示されるようになりました。
グラフィックボードがGeForce7600GSなのでそれが原因のようです。ありがとうございました。


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



Name: くるり  ..ぴよぴよ(228ポイント)   Date: 2009/09/18(金) 01:11   No:39332       
Title: 龍神録4章について    
C言語始めたての初心者です。
現在、龍神録で勉強に勤しんでいるのですが、4章のコンパイラがどうしても上手くいきません。
元サイト様から、プログラムをそのまま貼り付けさせて頂いているのですが、どうやらヘッダに問題があるようで、エラーが続いております。

エラーの内容は、
1>graph.cpp
1>c:\users\owner\desktop\プログラミングフォルダ\テスト2\include\gv.h(1) : fatal error C1083: include ファイルを開けません。'../../../include/DxLib.h': No such file or directory
1>key.cpp
1>c:\users\owner\desktop\プログラミングフォルダ\テスト2\include\gv.h(1) : fatal error C1083: include ファイルを開けません。'../../../include/DxLib.h': No such file or directory
1>load.cpp
1>c:\users\owner\desktop\プログラミングフォルダ\テスト2\include\gv.h(1) : fatal error C1083: include ファイルを開けません。'../../../include/DxLib.h': No such file or directory
1>main.cpp
1>c:\users\owner\desktop\プログラミングフォルダ\テスト2\include\gv.h(1) : fatal error C1083: include ファイルを開けません。'../../../include/DxLib.h': No such file or directory

となっており、プログラムを実行したくとも、自分では原因がわからずにいます。
こんな初心者がこのような所で質問するのは厚かましいと考える方もいるでしょうが、何卒よろしくお願いします。

環境はVista、VC++2008EE、DXライブラリとなっております。


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


Name: conio [URL]  ..熟練のプログラマー(44,670ポイント)   Date: 2009/09/18(金) 01:59   No:39333     
Title: Re:龍神録4章について    
パスの設定ミスですね。

ヘッダファイル自体に問題があるのではなく、ヘッダファイルの存在する場所に問題があります。

--------------------------------
【1】「../../../include/DxLib.h」
【2】「../include/DxLib.h」
【3】「DxLib.h」
--------------------------------
【1】〜【3】は、それぞれ何がどのように違うのか分かりますか?

それぞれ、
-----------------------------------------------------------------------------------------
【1】3つ上の階層にある"include"というフォルダの中にある"DxLib.h"というヘッダファイル
【2】1つ上の階層にある"include"というフォルダの中にある"DxLib.h"というヘッダファイル
【3】同じ階層にある"DxLib.h"というヘッダファイル
-----------------------------------------------------------------------------------------
という意味になります。

今回は【1】なので、

@3つ上の階層に"include"というフォルダが存在するか
A"include"というフォルダの中に"DxLib.h"というヘッダファイルが入っているか

を調べてみてください。


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

Name: くるり  ..ぴよぴよ(298ポイント)   Date: 2009/09/18(金) 09:14   No:39335 解決!     
Title: Re:龍神録4章について    
conioさん、とてもわかりやすい説明どうもありがとうごいざいます。
conioさんの言ったとおりに、手直しを加えたところ、おかげさまで、コンパイルに成功しました。
本当にありがとうございます。


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



Name: ラグ  ..入門者(4,527ポイント)   Date: 2009/09/18(金) 00:32   No:39330       
Title: 龍神録50章改造におけるボムの当たり判定について    
毎度お世話になっております。
相変わらず龍神録を改造して勉強させてもらってます。

さて、龍神録50章のプロジェクトを利用し、ボムにも当たり判定を付け、ボムのグラフィックが敵またはボスと触れた場合にのみダメージを与えるようにしたいと考えました。
龍神録の場合は、ボムを発射すると光弾が四発発射されると思いますが、例えばこの光弾にそれぞれ敵やボスとの当たり判定をつけるにはどうすればよいでしょうか。
エフェクトの光弾の座標を取得し、そこを中心の円として当たり判定を行おうと考えましたが、なかなかうまくいきません。

龍神録改造で上記のような仕様を実装するには、どのようなコードにすればよいでしょうか。
もしよろしければ、皆様のお力をお貸しくださいませんか?
よろしくお願いします。


環境はXP SP2、VC++2008EE、DXライブラリです


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




Name: 優曇華院  ..ぴよぴよ(45ポイント)   Date: 2009/09/17(木) 20:42   No:39318       
Title: 龍神録プログラミングの館の13について    
初めまして。弾の表示についてなんですが
http://dixq.net/rp/13.htmlの実行例で質問があります。

13まで、プログラムのソースを真似したのですが、実行例のように
さまざまな弾が出ず、添付した画像のように、この大きな弾しか出さないという状態になっています。
さらに、実行例では弾を全部の敵が発射していますが、
僕の場合は、発射しない敵と発射する敵が存在しています。
エクセルファイルの弾の種類の数値を変えてみましたが、今度は弾を発射しなくなりました…。

説明が下手ですいません…。
自分のプロジェクトもアップローダーにあげました。
http://www.dotup.org/uploda/www.dotup.org151959.zip.html
パスはtamanoです。

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



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


Name: でんすけ  ..かけだし(2,270ポイント)   Date: 2009/09/17(木) 20:50   No:39319     
Title: Re:龍神録プログラミングの館の13について    
storyH0.csvファイルの中身をいじってみては?
弾の種類といじれば色々変わるはずです。


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

Name: 優曇華院  ..ぴよぴよ(83ポイント)   Date: 2009/09/17(木) 21:48   No:39325 解決!     
Title: Re:龍神録プログラミングの館の13について    
エクセルのデータいじってたらできました。
ありがとうございます!!


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



Name: situmon  ..熟練のプログラマー(44,714ポイント)   Date: 2009/09/15(火) 21:07   No:39245       
Title: シューティングゲームを作りました!!    
第4弾です。今回はたっぷりの3面+EXステージです。
URLはhttp://down11.ddo.jp/uploader/download/1253016410/attach/Gm16%20~%E5%A6%96%E7%B2%BE%E5%B3%B6%E3%81%AE%E6%8E%A2%E6%A4%9C~.zip
PASSはsitumon
見所は新しい弾幕と、エフェクトの数々です。
難易度はいつもの3つです。
EASY,NORMAL,HARDです。
結構簡単です。
ボムもつきました!!
一応、次の作品を後編として、前編という位置にします。
なので次の作品は4、5、6ステージ+EXというステージにしたいと思っています。
ではご感想をお願いいたします。


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


Name: ひよこ  ..熟練のプログラマー(48,822ポイント)   Date: 2009/09/15(火) 22:44   No:39248     
Title: Re:シューティングゲームを作りました!!    
遊ばせていただきました。
最初っから激しくて驚きました。
自分的には、悲鳴が上がるほど難しかったです。
コンティンニュー3回してノーマルをクリアしました。
しかし、弾幕に見ごたえがありました。

あくまで自分的な意見(無視してもいいですよ)
{考えてみると和風>−(球が見ずらい)でした。水色の弾が一番見やすかったです。}

この一つでした。
楽しかったです。次回作楽しみにしてます。
制作お疲れ様でした。


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

Name: mnkr  ..かけだし(1,702ポイント)   Date: 2009/09/16(水) 00:08   No:39251     
Title: Re:シューティングゲームを作りました!!    
遊ばせて頂きました。
とても難しかったですorz
いつかはこんなゲームを作りたいです(遠い目

一つ気になった点ですが、
・低速&あたり判定の魔方陣展開
なんですけど、
何度も低速→通常→低速とシフトキーを連打すると
固定キー機能のメッセージが。。。。
フルスクリーンモード、ウインドウモード両方で確認しました。

この機能をプログラムのほうで抑制できたりしないのでしょうか・・・・


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

Name: situmon  ..熟練のプログラマー(45,018ポイント)   Date: 2009/09/16(水) 08:34   No:39252     
Title: Re:シューティングゲームを作りました!!    
ひよこさん、
たぶん弾が見えずらいのは彩度の問題だと思うので、がんばって改善したいです。
すいません。。。
悲鳴が上がるほどですか・・・
う〜んやっぱり作者の立場からみると難しくなってしまいます・・・
EX開放しましたか?
EXはNORMALをノーコンでクリア、
EASYは・・・たぶん簡単なので、一ミスくらいを狙っていただきたいです。
HARDは・・・いがいとボムで乗り切れたんですが・・・
そしたら出るはずです。
ようするにノーコンが大切です。
mnkrさん、
すいません、そればかりは・・・(固定キー)
というのも、東方をやっているときにも出てくるので。。。
難しかったでしょうか?次回作はもっと難しくするつもりですが・・・
調整したほうがいいですね。
どうもありがとうございました。


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

Name: mnkr  ..かけだし(1,815ポイント)   Date: 2009/09/16(水) 11:34   No:39254     
Title: Re:シューティングゲームを作りました!!    
固定キーは東方でも出てくるんですか。。。
いつもゲームパッド使用なので気づきませんでした、申し訳ありません。

自分はいつも東方はEASYなので。。。(しかもクリアできない)
難易度の意見はあまり参考にならないと思います。


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

Name: 御津凪 [URL]  ..ハッカー(113,346ポイント)   Date: 2009/09/16(水) 11:54   No:39255     
Title: Re:シューティングゲームを作りました!!    
固定キーなどのアクセシビリティ機能をプログラム側で一時的に無効化する方法については下記のページにて解説されていますよ。
http://msdn.microsoft.com/ja-jp/library/bb219746%28VS.85%29.aspx#Disabling_Accessibility_Shortcut_Keys

が、少々面倒だと思いますし、アクセシビリティ機能の無効化処理をシステムに設定する(Vista 環境では管理者権限への昇格が必要の可能性がある)ので、
ユーザー側の設定で無効化するようにしたほうが無難だと思います。


プレイ感想の方ですが、今日仕事から帰ってきてから何度かプレイしてからにしてみたいと思います。


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

Name: ひよこ  ..熟練のプログラマー(48,822ポイント)   Date: 2009/09/16(水) 16:38   No:39260     
Title: Re:シューティングゲームを作りました!!    
situmonさん

EX開放しましたか?
>>解放してません。たくさん遊ばせていただきます。

悲鳴が上がるほど・・・って表現がひどかったですね。すいません、
けっこう隙間がなくて(東方はけっこう隙間があったと思ったので・・・)
ってことです。


Name: 御津凪 [URL]  ..ハッカー(113,578ポイント)   Date: 2009/09/16(水) 21:48   No:39281     
Title: Re:シューティングゲームを作りました!!    
(ステージを)2週半くらいプレイさせていただきました。

難易度的には1〜3ステージというよりは4〜6ステージといった感じですね。
それでも、 NORMAL は難しいですが…。

ステージ3ボスの最後の弾幕、EASY はそれなりで楽しめましたが、
NORMAL 以上だと、(固定概念のせいか)非常に詰みやすいです。
(ステージ2の道中にも避け辛い弾幕がありましたね)


いわゆる初見一発クリアは難しいと言った感想ですね。
それがこのゲームの特徴ならそれはそれでありですが。


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

Name: situmon  ..熟練のプログラマー(45,461ポイント)   Date: 2009/09/16(水) 22:00   No:39282     
Title: Re:シューティングゲームを作りました!!    
やはりむずかしいでしたか。
そういえば感想を書き忘れていたのですが、御津凪さんの音楽同調弾幕やらせていただきました。
しかし難しかったので、プラクティスの無敵状態でみていました。おもしろかったです。
>難易度的には1〜3ステージというよりは4〜6ステージといった感じですね。
次回作はこの作品の続編という形なのでもっと難しくするつもりで、さっそく4面の道中をつくったのですが、難しすぎますかね。。。もう少ししたら完成させたいです。


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

Name: アトラス [URL]  ..入門者(2,858ポイント)   Date: 2009/09/17(木) 00:28   No:39289     
Title: Re:シューティングゲームを作りました!!    
私もやらせていただきました。

normalはとりあえずノーコンクリアできました、が
normalにしては弾幕が濃く、弾のスピードもちょっと速いなと感じました。
あと、大玉の色が薄いので少し見づらかったです。

それと音楽はほんわかとした感じが結構好きですね。

次回作も頑張ってください。


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

Name: Tatu  ..初心者(7,407ポイント)   Date: 2009/09/17(木) 02:06   No:39291     
Title: Re:シューティングゲームを作りました!!    
  遊んでみました。


イージーは「結構簡単」のなかのいちばんやさしい難易度にしては隙間が狭い弾幕があり、難しい気がします。
ノーマルはノーボムでもノーコンティニュークリアできました。
ハードはボムがなければ(私には)無理な感じはしますが、このままでも問題ないと思います。
エクストラは最初いきなりやられてしまいました。

気になった点や意見

エクストラのフラグは保存されることを確認しましたが、
各難易度でのハイスコア、ボリューム設定、スクリーン設定も保存されるようにしたほうがよいと思います。
スクリーンについては初めての起動時に聞くほか、オプションでも変更できるようにし、
そのときは「※変更は次回起動時に反映されます」という文を添えておくとよいでしょう。

タイトルなどのメニューを選ぶときにほんの少しだけ押したつもりでも2つ以上動いてしまうことがあります。

ポーズの画面がPose Menuになっています。(作業などの)一時停止を表す英語はPauseです。
Poseは「カメラの前でポーズをとる。」というように姿勢などを表す時に使います。

やられたときにポーズをすると、無敵時間中はポーズをしていても自機を動かすことができてしまいます。

エクストラステージでゲームオーバーになった時に初めからやり直すと通常の一面が始まってしまいます。
ポーズ画面からやり直した場合はエクストラステージの最初から始めることができます。

ミスをしたときは弾の画像がすべて同じものになるのだから、画像をいきなり消すのではなく、
ゆっくりとフェードアウトするようにしてもよいのではないでしょうか。

あるボスの魔法名の「花の世にひきる」って誤字なのでしょうか?

敵のライフが減ると魔法陣が小さくなるようにして、敵のライフが今どのくらいかわかるようにしてはどうでしょうか。

次回作は4〜6面+EXその2ということですが、
1〜3面も入れておいて、4面から始めることもできるようにすればよいのではないでしょうか。


2倍のポイントを手に入れた! 1,550ポイント を手に入れた。

Name: situmon  ..熟練のプログラマー(45,123ポイント)   Date: 2009/09/17(木) 08:10   No:39297     
Title: Re:シューティングゲームを作りました!!    
normalはとりあえずノーコンクリアできました、が
normalにしては弾幕が濃く、弾のスピードもちょっと速いなと感じました。
あと、大玉の色が薄いので少し見づらかったです。
>改善するつもりです。
>プレイどうもありがとうございました。
ハイスコア、ボリューム設定、スクリーン設定も保存されるようにしたほうがよいと思います。
>そうですね。
スクリーンについては初めての起動時に聞くほか、オプションでも変更できるようにし、
そのときは「※変更は次回起動時に反映されます」という文を添えておくとよいでしょう。
>しかし起動時に聞かれたほうが自分はいいのですが、検討しておきます。
花の世にひきる
>誤字です。
>1〜3面も入れておいて、4面から始めることもできるようにすればよいのではないでしょうか。
区切りが違うのでやはり4面からでご了承ください。

意見反映をがんばりたいです。
意見反映がやり切れるかわかりませんが、
とりあえず意見反映して、それからコメントを改めてしたいと思います。

アトラスさん、Tatuさんありがとうございました。





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

Name: situmon  ..熟練のプログラマー(45,331ポイント)   Date: 2009/09/17(木) 21:23   No:39323     
Title: Re:シューティングゲームを作りました!!    
意見を反映して、
ボスのときは魔法陣を変える、
敵のHPが減ると魔法陣がちいさくなる。
Pose->Pauseにかえる。
をしました。
あと難易度ですが、今作っている次回作は今作の何倍かは難しくなりそうですので、EASYで調整しなければとおもっています。よけやすくてきれいな弾幕・・・難しいですね。


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



Name: ディア  ..かけだし(1,950ポイント)   Date: 2009/09/17(木) 17:58   No:39312       
Title: 自機ショット    
以下のソース内で、
56行 'shot_cnt' は 'ch_t' のメンバーではない(関数 enter_shot() )
57行 'shot_cnt' は 'ch_t' のメンバーではない(関数 enter_shot() )
65行 'shot_cnt' は 'ch_t' のメンバーではない(関数 enter_shot() )

とエラーが発生するのですが、
対処法がわかりません。
どなたか教えてください。



52  //ショット登録部
53  void enter_shot(){
54   //ショットボタンが押されていたら
55   if(CheckStatePad(configpad.shot)>0){
56   ch.shot_cnt++;
57   if(ch.shot_cnt%3==0){//3カウントに1回
58   if(CheckStatePad(configpad.slow)>0)//低速移動中なら
59   ch1_shot_pattern();
60   else
61   ch0_shot_pattern();
62   }
63   }
64   else
65   ch.shot_cnt=0;
66  }



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


Name: でんすけ  ..かけだし(2,295ポイント)   Date: 2009/09/17(木) 18:23   No:39314     
Title: Re:自機ショット    
構造体の中身を確認してみてください

// キャラクターに関する構造体
typedef struct
{
int flag;
int cnt;
int power;
int point;
int score;
int num;
int mutekicnt;
int shot_mode;
int shot_cnt; // これを追加してやる
int money;
int img;
int slow;
double x, y;
}ch_t;


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

Name: ディア  ..かけだし(1,969ポイント)   Date: 2009/09/17(木) 18:51   No:39315 解決!     
Title: Re:自機ショット    
解決しました!ありがとうございます!




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



Name: 電気屋  ..ぴよぴよ(344ポイント)   Date: 2009/09/17(木) 15:45   No:39304       
Title: 好奇心    
私はこのサイトをよく観覧しています。
前回もとても参考になるアドバイスをいただきました。また、四聖龍神録をやらせてもらいとても楽しかったです。
そして自分も自作ゲームを作成しています。そのとき、ふと四聖龍神録のソースがどのようになっているか、とても興味が出てきてしまい、ご迷惑をすごくかけてしまうかもしれませんが、見せていただく訳にはいきませんか?ご迷惑なら結構なので、よろしくお願いします。(もし、見せていただけるなら圧縮ファイルで掲載していただくとありがたいです。)


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


Name: バグ  ..ハッカー(170,669ポイント)   Date: 2009/09/17(木) 16:07   No:39306     
Title: Re:好奇心    
たしか、オリジナルソースは消失したとか、管理人さん本人が言われてたような…(^_^;)

ですから、龍神録の館の解説を見て、順を追って解析していくしかないかと思われます。


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

Name: Dixq (管理人)  ..ウィザード(1,057,575ポイント)   Date: 2009/09/17(木) 18:21   No:39313     
Title: Re:好奇心    
こんにちは
ソ−スは消えてしまいました..........
少し前のバックアップなら取ってあるのでそれを元にいつかなんとかしたいと思っています

骨格的な部分は館と大して違いません
むしろ誰にも見せないんならといい加減な書き方をしている部分が多いので参考にならないかと^^;


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

Name: 電気屋   Date: 2009/09/30(水) 14:55   No:393041254290118 解決!     
Title: Re:好奇心    
どうもありがとうございました。



Name: LIBLIB  ..ぴよぴよ(67ポイント)   Date: 2009/09/17(木) 17:47   No:39309       
Title: C++での*.libの生成法?    
どんな方法ありますか 教えてください。
以前lib命令あったが、実行方法は忘れました。

開発環境:
Visual Studio 2008 C++

宜しくお願いします


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


Name: たいちう  ..プログラマー(33,779ポイント)   Date: 2009/09/17(木) 17:57   No:39311     
Title: Re:C++での*.libの生成法?    
プロジェクト作成時にスタティックライブラリを選ぶ。

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



Name: ディア  ..ぴよぴよ(435ポイント)   Date: 2009/09/14(月) 20:02   No:39221       
Title: ショットが遅れる    
前質問にて、
丁寧な回答を有難うございます。

すみませんが、また質問させていただこうと思います。


13章にて、ソースを完成させコンパイル、実行してみたのですが、
敵の表示自体には問題は無いのですが、
全ての
敵のショット発射が遅れてしまいます。

また、発射される弾の画像がdat/img/bullet/内のb0.pngのみになってしまいます。


ソースのコピペなどのチェックは何度も行ったのですが、
変化がありませんでした。

どこが間違っているのか、全く解りません。

基本的な質問であることは承知ですが、
教えていただけないでしょうか。





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


Name: ディア  ..かけだし(1,288ポイント)   Date: 2009/09/15(火) 16:13   No:39241     
Title: Re:ショットが遅れる    
すみません、追加質問させて下さい。

同じく13章で、shotH.cppに以下を追加

//1発だけ、自機に向かって直線移動
void shot_bullet_H000(int n){
int k;
if(shot[n].cnt==0){
if(shot[n].flag!=2 && (k=shot_search(n))!=-1){
shot[n].bullet[k].knd =enemy[shot[n].num].blknd2;
shot[n].bullet[k].angle =shotatan2(n);
shot[n].bullet[k].flag =1;
shot[n].bullet[k].x =enemy[shot[n].num].x;
shot[n].bullet[k].y =enemy[shot[n].num].y;
shot[n].bullet[k].col =enemy[shot[n].num].col;
shot[n].bullet[k].cnt =0;
shot[n].bullet[k].spd =3;
se_flag[0]=1;
}
}
}


そして、読み進めていくと、以下を追加する部分がありますよね。

void shot_bullet_H000(int n){
int k;
if(shot[n].cnt==0){//弾幕が始まって0カウント目
//敵が倒されていなくて、探した登録可能な弾番号が有効なら
if(shot[n].flag!=2 && (k=shot_search(n))!=-1){
shot[n].bullet[k].knd =enemy[shot[n].num].blknd2;//弾の種類
shot[n].bullet[k].angle =shotatan2(n);//角度
shot[n].bullet[k].flag =1;//フラグ
shot[n].bullet[k].x =enemy[shot[n].num].x;//座標
shot[n].bullet[k].y =enemy[shot[n].num].y;
shot[n].bullet[k].col =enemy[shot[n].num].col;//色
shot[n].bullet[k].cnt =0;//カウンタ
shot[n].bullet[k].spd =3;//スピード
se_flag[0]=1;//弾の発射音フラグを立てる
}
}
}




と、上記二つのソースを入力したのですが、
shot_bullet_H000(int)の本体の定義が重なっていると出ます。
どういうことなのでしょうか?


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

Name: ディア  ..かけだし(1,294ポイント)   Date: 2009/09/17(木) 17:53   No:39310 解決!     
Title: Re:ショットが遅れる    
自己解決しました

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



Name: HAL [URL]  ..ぴよぴよ(150ポイント)   Date: 2009/09/17(木) 03:01   No:39292       
Title: 質問です    
URLのが宿題です。

大学の宿題なのですが、水道料金の使用料金について

一応プログラムを作成しました。

添付ファイルです。しかし

if文の使い方がいまいち分からなく、うまく起動しているか分かりません。

大学ではC言語について変数やifや演算式を習いました。

よろしくお願いします。


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


Name: でんすけ  ..ぴよぴよ(631ポイント)   Date: 2009/09/17(木) 06:53   No:39293     
Title: Re:質問です    
なにをどうする宿題なんですか?

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

Name: toyo  ..熟練のプログラマー(40,961ポイント)   Date: 2009/09/17(木) 07:07   No:39294     
Title: Re:質問です    
y = x / 2 + 0.5 ; //使用量の分割//
z = x / 2 - 0.5 ;
分割するのはなぜでしょうか
xが18だとyが9.5でzが8.5になるのでどのif文にもあてはまらなくなります


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

Name: でんすけ  ..かけだし(1,633ポイント)   Date: 2009/09/17(木) 07:28   No:39295     
Title: Re:質問です    

#include <stdio.h>
int main(void)
{
int x,a,b,ryokin1,ryokin2,ryokin; //xが使用量 ryoukin が最終的な料金//
double y,z;
while( 1 )
{
printf("使用量は?");
scanf("%d",&x);

y = x / 2 + 0.5 ; //使用量の分割//
z = x / 2 - 0.5 ;

if(y<=9 , z<=9){ //使用料が9以下のとき//
a=0;
b=0;
}

else if( ( 9<=y && y<=15 ) , ( 9<=z && z <=15) )
{ //使用料が9以上15以下のとき//
a = (15 - (int)y) * 75;
b = (15 - (int)z) * 75;
}

else if( (16<=y && y<=20 ) , (16<=z && z<=20 ) )
{ //使用料が16以上20以下のとき//
a = 525 + ((int)y - 15) ;
b = 525 + ((int)z - 15) ;
}

else if( ( 21<=y && y<=30) , ( 21<=z && z<=30 ) )
{ //使用料が21以上30以下のとき//
a = 525 + 400 + ((int)y - 20) ;
b = 525 + 400 + ((int)z - 20) ;
}

else if( ( 31<=y && y<=50 ) , ( 31<=z && z<=50) )
{ //使用料が31以上50以下のとき//
a = 525 + 400 + 900 + ( (int)y - 30);
b = 525 + 400 + 900 + ( (int)z - 30);
}

else if( ( 51<=y && y<=100 ) , ( 51<=z && z<=100 ) )
{ //使用料が51以上100以下のとき//
a = 525 + 400 + 900 + 2000 + ( (int)y - 50 );
b = 525 + 400 + 900 + 2000 + ( (int)z - 50 );
}

else if( ( 101<=y && y<=300 ) , ( 101<=z && z<=300 ) )
{ //使用料が101以上300以下のとき//
a = 9825 + ( (int)y - 100);
b = 9825 + ( (int)z - 100);
}

else if( ( 301<=y && y<=1000 ) , ( 301<=z && z<=1000 ) )
{ //使用料が301以上1000以下のとき//
a = 35825 + ( (int)y - 300);
b = 35825 + ( (int)z - 300);
}

else if( y>=1000 , z>=1000 )
{ //使用料が1001以上//
a = 144325 + ( (int)y - 1000);
b = 144325 + ( (int)z - 1000);
}

ryokin1 = 500 + a; //料金半分1//
ryokin2 = 500 + b; //料金半分2//

ryokin1 = (int)(ryokin1*1.05); //消費税計算//
ryokin2 = (int)(ryokin2*1.05); //消費税計算//

ryokin = ryokin1 + ryokin2;
printf("水道料金は%d円です。\n",ryokin);
}
return 0;
}


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

Name: non  ..熟練のプログラマー(62,854ポイント)   Date: 2009/09/17(木) 12:54   No:39302     
Title: Re:質問です    
使用量が、整数値に限るとは題意にないのですが、例からすれば、整数として考えろと言うことなのでしょうか?
さて、分割の式ですが、
int y,z; にして
y = x / 2.0 + 0.5 ;
z = x / 2 ;
ですね。
こういうのもありですか。
y = x / 2;
z = y + (x % 2);

さて、ifについては、少し、教科書を読んで、条件演算子を勉強した方がいいですね。
また、yとzの計算を一度にやってしまおうというのに、無理があります。
同じ事を、2回やるのだから、関数を習ったなら、使った方がいいし、習ってないなら、
同じ事を2回やるようにすべきでしょう。





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

Name: HAL [URL]  ..ぴよぴよ(190ポイント)   Date: 2009/09/17(木) 17:18   No:39308     
Title: Re:質問です    
ありがとうございます
if文では、yとzは一つ一つ考えた方がいいんですね。

ご指導がなかったら永久に分かりませんでした。

ほんとうに感謝です。


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



Name: KANSAI  ..ぴよぴよ(529ポイント)   Date: 2009/09/17(木) 11:15   No:39300       
Title: 大量データ更新教えてください    
多数レコードを更新するような場合、以下のようにしていますが、
データ量が多いとTEMPファイルが大きくなりCドライブの空き容量がなくなってしまいます。
なにかいい更新方法はありますか?お願い致します。
m_pSet->MoveFirst();
while (!m_pSet->IsEOF()) {

m_pSet->Edit();
・・・内容の変更・・・
m_pSet->Update();
m_pSet->MoveNext();
}


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




Name: AS  ..初心者(6,370ポイント)   Date: 2009/09/16(水) 12:19   No:39256       
Title: 龍神録ステージ1、2のボス戦背景    
タイトルどおり、龍神録ステージ1、2のボス戦時の背景でわからないところがあるので、書き込ませていただきます。

ボスと戦闘時、一面では鳥の絵が流れる背景に切り替わるときがあり、
同じ要領で二面では球の絵が流れる背景に切り替わるときがあります。

そしてわからないのが、その鳥や球が色をじわりじわりと変わりながら移動していることです。
あれはどのようにして表現されているのでしょうか?


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


Name: Justy  ..伝説なるハッカー(426,230ポイント)   Date: 2009/09/16(水) 20:29   No:39269     
Title: Re:龍神録ステージ1、2のボス戦背景    

>あれはどのようにして表現されているのでしょうか

 毎フレーム少しずつ輝度(ディフューズカラー)を変化させている
と思われます。

ttp://dixq.net/g/#9


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

Name: AS  ..初心者(6,444ポイント)   Date: 2009/09/17(木) 09:59   No:39299 解決!     
Title: Re:龍神録ステージ1、2のボス戦背景    
すみません今まで輝度という言葉を勘違いしていました…orz
それゆえ、すごい難しいことをやっているのではないかと思ってしまいました。
簡単に出来そうで安心しました。
Justyさんありがとうございました。


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



Name: mint  ..ぴよぴよ(652ポイント)   Date: 2009/09/16(水) 20:43   No:39271       
Title: C言語でテキストファイルを開業したい    
教えてください。

次のような一行で数字の間にスペースがあるテキストファイルがあります。

12 23 23 53 54 43

これを次のように2列ずつ改行したいのですがやり方がわかりません。

12 23
23 53
54 43


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


Name: dic  ..プログラマー(33,260ポイント)   Date: 2009/09/16(水) 21:27   No:39278     
Title: Re:C言語でテキストファイルを開業したい    
まず、スペースの空いた一行を配列に格納するのが分からないのか
配列に格納後、2列ずつファイルに出力するアルゴリズムが思い浮かばないのか

何ができないか、どこでつまづいてるかを書いてくれると回答者もでてきそうです


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

Name: conio [URL]  ..熟練のプログラマー(44,223ポイント)   Date: 2009/09/16(水) 21:46   No:39280     
Title: Re:C言語でテキストファイルを開業したい    
-----------------------------------------------------------------------------------------
@数字が並んだテキストファイルAを、2行で改行するようにしてテキストファイルBに書き出す。
A数字が並んだテキストファイルAを読み込み、2行で改行するようにして実行画面に表示。
B数字が並んだテキストファイルAを、2行で改行した状態に変更したい。
-----------------------------------------------------------------------------------------

表現が曖昧なので、上記のどれなのか、もしくは上記以外の別の処理なのか分かりません。
普通に改行したいのであれば、「テキストファイルを開いてエンターキーを押せば改行できます。」
という回答もアリになってしまいます。


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

Name: mint  ..ぴよぴよ(797ポイント)   Date: 2009/09/17(木) 08:08   No:39296     
Title: Re:C言語でテキストファイルを開業したい    
表現があいまいでした。すみません。

数字が並んだテキストファイルAを、2行で改行した状態にしたいと考えていますが、直接テキストファイルを開いてエンターキーを押すにはデータ量があまりに多すぎるためできません。

23 32 33 23 43 53 ・・・のような一行を配列に格納するやり方と、配列に格納後、2列ずつファイルに出力するアルゴリズムが 分かりません。

もしくは他の方法でもよいのですが、教えてください。よろしくお願いします。


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

Name: たかぎ [URL]  ..ハッカー(111,032ポイント)   Date: 2009/09/17(木) 09:43   No:39298     
Title: Re:C言語でテキストファイルを開業したい    
> 23 32 33 23 43 53 ・・・のような一行を配列に格納するやり方と、配列に格納後、2列ずつファイルに出力するアルゴリズムが 分かりません。

そんな難しく考える必要はありません。

#include <stdio.h>

int main(void)
{
int n = 0;
int c;

while ((c = getchar()) != EOF)
{
if (c == ' ' && ++n == 2)
{
n = 0;
c = '\n';
}
putchar(c);
}
return 0;
}

こんな感じで十分でしょう。


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



Name: マウ  ..入門者(3,284ポイント)   Date: 2009/09/16(水) 10:39   No:39253       
Title: 原因がよくわからないのですが    
 オプション画面で矢印キーで選択し、Zで決定に設定しているのですがカーソルが
 Zを押しても動いてしまうし、Rを押すとタイトルに戻るようにしたと思うのですが画面が真っ暗で指定した キーを押すと他画面に移ることはできてしまうという。
 この原因がわからなくて悩んでいます。どうかよろしくおねがいします。
#include "DxLib.h"
#include <stdio.h>

int function_status;
int White, Red, G_Blue;
int menuImg;
int optionImg;
int stageImg;
int selectImg;
int ItemImg;
int cursorPos;

char KeyBuf[256];
void setState( int );
void Menu();
void Sselect();
void Option();

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode( TRUE ) ; //ウィンドウモードに変更

SetGraphMode( 800 , 600 , 32 ) ;
if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了
White = GetColor( 255 , 255 , 255 ) ; //色の取得
SetDrawScreen( DX_SCREEN_BACK ) ; // 描画先を裏画面に設定

while( 1 )
{
ClearDrawScreen(); // 裏画面のデータを全て削除
GetHitKeyStateAll( KeyBuf ); // すべてのキーの状態を得る
switch( function_status )
{
case 0: Menu(); break;
case 1: Sselect(); break;
case 3: Option(); break;
case 4: Menu(); break;
case 5: Option(); LoadGraphScreen( 410 , 50 , "EN1.bmp" , TRUE ); break;
case 6: Option(); LoadGraphScreen( 410 , 50 , "EN2.bmp" , TRUE ); break;
case 7: Option(); LoadGraphScreen( 410 , 50 , "EN3.bmp" , TRUE ); break;
case 8: Option(); LoadGraphScreen( 410 , 50 , "EN4.bmp" , TRUE ); break;
default: DxLib_End(); return 0; break; // DXライブラリ使用の終了処理
}
if( ProcessMessage() == -1 ) break; // エラーが起きたら終了
ScreenFlip(); // 裏画面データを表画面へ反映
}
DxLib_End();
return 0;
}
void setState( int state )/*追加*/
{
function_status = state;
cursorPos = 0;
}
void Menu()
{
//menuImg = LoadGraph( "back1.bmp" );
//DrawGraph( 0, 0, menuImg, FALSE ); // 画像を表示

DrawString( 320, 300, "スタート", White );
if( KeyBuf[KEY_INPUT_S] == 1 )
setState( 1 );
DrawString( 320, 340, "オプション", White );
if( KeyBuf[KEY_INPUT_O] == 1 )
setState( 3 );
DrawString( 320, 380, "終了", White );

if( KeyBuf[KEY_INPUT_E] == 1 )
setState( 8 );

}
void Sselect()
{
//selectImg = LoadGraph( "bg1.png" );/*追加*/
//DrawGraph( 0, 0, selectImg, FALSE ); // 画像を表示

LoadGraphScreen( 280 , 450 , "triangul_L.bmp" , TRUE );
LoadGraphScreen( 480 , 450 , "triangul_R.bmp" , TRUE );
DrawString( 660, 560, "もどる(R)", White );
if( KeyBuf[KEY_INPUT_R] == 1 )
setState( 4 );
while(ProcessMessage() == 0 && CheckHitKeyAll() != 0 ){}
while(ProcessMessage() == 0 && CheckHitKeyAll() == 0 ){}
if( KeyBuf[KEY_INPUT_RIGHT ] == 1 )
LoadGraphScreen( 227 , 120 , "サンプル2.bmp" , TRUE );
if( KeyBuf[KEY_INPUT_RIGHT ] == 1 )
LoadGraphScreen( 315 , 450 , "Stage2.bmp" , TRUE );
if( KeyBuf[KEY_INPUT_LEFT ] == 1 )
LoadGraphScreen( 227 , 120 , "サンプル1.bmp" , TRUE );
if( KeyBuf[KEY_INPUT_LEFT ] == 1 )
LoadGraphScreen( 315 , 450 , "Stage.bmp" , TRUE );

if( KeyBuf[KEY_INPUT_Z] != 0 ) // 決定処理
{
switch( cursorPos )
{
case 0: setState( 2 ); break;
//
default: break;
}
}
}
void Option()
{
optionImg = LoadGraph( "back2.bmp" );/*追加*/
DrawGraph( 0, 0, optionImg, FALSE ); // 画像を表示
White = GetColor( 0, 0, 0 ); // 白色の値を取得
Red = GetColor( 255, 0, 0 ); // 赤色の値を取得
G_Blue = GetColor( 0, 255, 255 ); // 緑と青の混合色の値を取得
DrawString( 60, 60, "??????", White );
if( KeyBuf[KEY_INPUT_1] == 1 )
setState( 5 );
DrawString( 60, 90, "??????", White );
if( KeyBuf[KEY_INPUT_2] == 1 )
setState( 6 );
DrawString( 60, 120, "??????", White );
if( KeyBuf[KEY_INPUT_3] == 1 )
setState( 7 );
DrawString( 60, 150, "??????", White );
if( KeyBuf[KEY_INPUT_4] == 1 )
setState( 8 );
DrawString( 160, 250, "変更", White);
DrawString( 660, 560, "もどる(R)", White );
if( KeyBuf[KEY_INPUT_R] == 1 )
setState( 4 );

//カーソル移動処理
const int HEAD = 0;
const int TAIL = 3;
while(ProcessMessage() == 0 && CheckHitKeyAll() != 0 ){}
while(ProcessMessage() == 0 && CheckHitKeyAll() == 0 ){}
//カーソル描画
DrawBox( 43 , 60 + cursorPos * 30 , 59 , 60 + cursorPos * 30 + 16 , GetColor( 255 , 255 , 0 ) , TRUE ) ;
if( KeyBuf[KEY_INPUT_UP] == 1 )
cursorPos = (cursorPos == HEAD) ? TAIL : (cursorPos - 1);
if( KeyBuf[KEY_INPUT_DOWN] == 1 )
cursorPos = (cursorPos == TAIL) ? HEAD : (cursorPos + 1);

if( KeyBuf[KEY_INPUT_Z] != 0 ) // 決定処理
{
switch( cursorPos )
{
case 0: setState( 5 ); break;
case 1: setState( 6 ); break;
case 2: setState( 7 ); break;
case 3: setState( 8 ); break;
case 4: setState( 4 ); break;
//
default: break;
}
}
}




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


Name: kazuoni [URL]  ..ハッカー(105,869ポイント)   Date: 2009/09/16(水) 23:11   No:39288     
Title: Re:原因がよくわからないのですが    
まず、規約を一通り読んでください。
プレタグ、インデント、どちらもされてません。

いろいろ突っ込む点がありますが、
とりあえず、ブレークポイントを張って、
・キーが押された時
・Menu()に戻ったとき
などの各変数の状態を追って行ってください。
「このタイミングでこの変数に入っている値はおかしいだろ・・・」
ってのが見つけられるかと思います。


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



Name: niko  ..ぴよぴよ(230ポイント)   Date: 2009/09/06(日) 05:07   No:38902       
Title: DXライブラリを使ってなんでも対応できる描画関数    

DXライブラリを使ってなんでも対応できる描画関数を作ろうと思います。

・Draw(x1,y1,x2,y2,x3,y3,x4,y4BMP,color,turn,center,rot);
x1・・・描画座標X
y1・・・描画座標Y
x2・・・読み込んだ画像の切り取り開始位置
y2・・・読み込んだ画像の切り取り開始位置
x3・・・切り取るサイズ 32ならx2〜32ドットの切り取り
y3・・・切り取るサイズ
x4・・・X軸に対しての拡大率
y4・・・Y軸に対しての拡大率
BMP・・・読み込む画像
color・・・カラー
turn・・・LR反転
center・・・0なら原点左上、1なら中心
rot・・・原点を中心とした回転角度

またcolorなのですがRGB(R,G,B)ではなく透過を設定できるようにARGB(A,R,G,B)にしたいです。
どのようにすればよいのでしょうか?



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


Name: ねこ  ..プログラマー(39,017ポイント)   Date: 2009/09/06(日) 09:42   No:38908     
Title: Re:DXライブラリを使ってなんでも対応できる描画関数    
全部書くと長いので簡単に処理手順を。
まず、BMPは画像じゃなくてグラフィックハンドルが良いですね。

1.対象グラフィックのサイズを取得( w, h )
2.「x2==0 && y2==0 && x3==w && y4==h」以外の時
  「DerivationGraph」関数を使って切り取ったグラフィックハンドルを作成して差し替える
3.center==0ならx1,y1を左上に、1なら中心として矩形の4隅の座標を取得する
4.「rot」が「0.0」以外の時、矩形の中心から4隅の座標を回転させる
5.LR反転なら4隅の座標の左上・右上、左下・右下にあたる座標を入れ替える
6.SetDrawBlendMode( DX_BLENDMODE_ALPHA, ( color>>24 ) )
7.SetDrawBright( color ) // それぞれ赤、青、緑の引数にする
8.DrawModiGraphで描画する
9.ブレンドと輝度設定を戻す
10.切り取ったグラフィックハンドルを使用した場合DeleteGraphで削除

こんな手順でやりたいことが出来ると思います。


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

Name: niko  ..かけだし(1,002ポイント)   Date: 2009/09/06(日) 22:36   No:38961     
Title: Re:DXライブラリを使ってなんでも対応できる描画関数    
ねこs
ご回答ありがとうございます。

何とか自分でやってみたのですが
4のrotでの座標回転
6のシフト演算(引数に渡すときどうやって4桁渡すのか?)
8の描画座標の取得(変数の名前が悪いと思うのですが理解しにくい)
が現在の問題点です。

ねこsのアドバイスをもとに作ったソースを載せさせていただきます。


void Draw(int x1,int y1,int x2,int y2,int x3,int y3,int Zx,int Zy,int BMP,int color,bool turn,bool center,int rot){
int SizeX,SizeY; // 画像の切り取りサイズ
int xLeft,xRight,yLeft,yRight; // 描画座標
GetGraphSize(BMP,&SizeX,&SizeY); // グラフィックのサイズの取得

if(x2==0 && y2==0 && x3==SizeX && y3==SizeY){
}else{
BMP = DerivationGraph(y1,y2,x3,y3,BMP);
}
// 各座標の取得
if(center == true){
xLeft = x1+SizeX/2;
xRight = x2-SizeX/2;
yLeft = y1+SizeY/2;
yRight = y2-SizeY/2;
}else{
xLeft = x1;
xRight = x2;
yLeft = y1;
yRight = y2;
}
// 各座標の回転 90などといれる角度の方 ディグリー角?
if(rot != 0){
xLeft = xLeft;
xRight = xRight;
yLeft = yLeft;
yRight = yRight;
}
// LRフラグがtrueなら各座標の反転
if(turn == true){
int tx,ty;
tx = xLeft;
xLeft = xRight;
xRight = tx;
//上下反転
//ty = yLeft;
//yLeft = yRight;
//yRight = ty;
}
SetDrawBlendMode(DX_BLENDMODE_ALPHA,( color>>24 ));
SetDrawBright(color);

if(center == true){
DrawModiGraph(?);
}else{
DrawModiGraph(?);
}
SetDrawBright(255,255,255);
//DeleteGraph(BMP);


}


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

Name: ねこ  ..プログラマー(39,088ポイント)   Date: 2009/09/06(日) 23:20   No:38964     
Title: Re:DXライブラリを使ってなんでも対応できる描画関数    

回転は下記のような計算で求められます。
1.中心から対象座標への角度・距離を求める
2.求めた角度へ回転分加算した角度を求める
3.中心から2で求めた角度へ1で求めた距離分加算する


SetDrawBright(color);

SetDrawBright( ( color & 0xFF0000 ) >> 16, ( color & 0x00FF00 ) >> 8, ( color & 0x0000FF ) );


まず名目上「Left」「Right」「Top」「Bottom(底)」とした方が良いでしょうね。
yLeft⇒Top yRight⇒Bottom
DrawModiGraph( Left, Top, Right, Top, Right, Bottom, Left, Bottom, 〜 )

後、DeleteGraphなのですが、「切り取ったグラフィックハンドルを使った」ってフラグを1個作ってフラグがONの時にのみ実行すると良いです。

最後にSetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0 );もお忘れなく。


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

Name: niko  ..かけだし(1,682ポイント)   Date: 2009/09/06(日) 23:59   No:38966     
Title: Re:DXライブラリを使ってなんでも対応できる描画関数    
描画がうまくいきません。
※棒線でノイズが走ります。

回転角度の4についてよくわからないです・・・。
現在のソースを載せさせていただきます。



void Draw(int x1,int y1,int x2,int y2,int x3,int y3,int Zx,int Zy,int BMP,int color,bool turn,bool center,int rot){
int SizeX,SizeY; // 画像の切り取りサイズ
int Left,Right,Top,Bottom; // 描画座標
int hGraph;
GetGraphSize(BMP,&SizeX,&SizeY); // グラフィックのサイズの取得

if(x2==0 && y2==0 && x3==SizeX && y3==SizeY){
}else{
hGraph = DerivationGraph(y1,y2,x3,y3,BMP);
}
// 各座標の取得
if(center == true){
Left = x1+SizeX/2;
Right = x2-SizeX/2;
Top = y1+SizeY/2;
Bottom = y2-SizeY/2;
}else{
Left = x1;
Right = x2;
Top = y1;
Bottom = y2;
}
// 各座標の回転 90などといれる角度の方 ディグリー角?
if(rot != 0){
Left = Left;
Right = Right;
Top = Top;
Bottom = Bottom;
}
// LRフラグがtrueなら各座標の反転
if(turn == true){
int tx,ty;
tx = Left;
Left = Right;
Right = tx;
//上下反転
ty = Top;
//yTop = yBottom;
//yBottom = ty;
}
SetDrawBlendMode(DX_BLENDMODE_ALPHA,( color>>24 ));
SetDrawBright( ( color & 0xFF0000 ) >> 16, ( color & 0x00FF00 ) >> 8, ( color & 0x0000FF ) );

if(center == true){
DrawModiGraph( Left-SizeX/2, Top-SizeY/2, Right+SizeX/2, Top-SizeY/2, Right+SizeX/2, Bottom+SizeY/2, Left-SizeX/2, Bottom+SizeY/2, hGraph , true);
}else{
DrawModiGraph( Left, Top, Right, Top, Right, Bottom, Left, Bottom, hGraph , true);
}
SetDrawBright(255,255,255);
SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0 );
DeleteGraph(hGraph);


}

使用時
Draw(320,240,5,5,10,10,1,1,LoadGraph("BMP/chr.png"),RGB(255,255,255),false,false,0);


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

Name: 旅人  ..ぴよぴよ(94ポイント)   Date: 2009/09/07(月) 16:13   No:38977     
Title: Re:DXライブラリを使ってなんでも対応できる描画関数    
まったくわき道にそれるのですが、座標移動の公式みたいなのがあるんです。これって利用できませんか?

移動前の座標を x,y 移動後の座標を X,Y とすると

X = ax + cy + e
Y = bx + dy + f

って感じだったはず(うろ覚えですいません

たとえば、原点を中心として、xyをそれぞれn倍するときは
X = nx + 0y + 0
Y = 0x + ny + 0
と書けますし、xyを入れ替えて、+1ずつ移動する場合は
X = 0x + y + 1
Y = x + 0y + 1
とかけると思います

また、原点を中心として u度 回転する場合も
X = cos(u)x - sin(u)y + 0
Y = sin(u)x + cos(u)y + 0
で出せる(はず・・・
もし使えそうならどうぞ





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

Name: チルチル  ..熟練のプログラマー(48,818ポイント)   Date: 2009/09/07(月) 17:58   No:38980     
Title: Re:DXライブラリを使ってなんでも対応できる描画関数    
横から失礼します
なんでも対応できると言う事ですが
DrawRotaGraph2関数に対応していない気がするのですが・・


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

Name: ねこ  ..プログラマー(39,213ポイント)   Date: 2009/09/08(火) 22:08   No:39009     
Title: Re:DXライブラリを使ってなんでも対応できる描画関数    
座標回転については「旅人」さんの手順でいけると思います。
「座標回転」等でググると図解入りで分かりやすい解説があると思いますのでそちらを参考にしたほうが良いかなと。

>チルチルさん
x4,y4使ってませんでしたね、失礼。
これらは矩形4点を求める際の係数とすればいけると思います。



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

Name: niko  ..かけだし(1,779ポイント)   Date: 2009/09/09(水) 22:57   No:39061     
Title: Re:DXライブラリを使ってなんでも対応できる描画関数    
遅くなりすみません><

みなさまありがとうございます。

今、仕事が忙しくて試している暇がありません。
今週の土曜になりましたら試してみたいと思います。

よろしくお願いいたします。


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

Name: niko  ..かけだし(1,897ポイント)   Date: 2009/09/11(金) 00:08   No:39093     
Title: Re:DXライブラリを使ってなんでも対応できる描画関数    
すみません。
今、いろいろといじってみたのですが
Left〜などとしているため一個いじったら1つの点しか正確な値がとれないかと思います。
4つの点ごとにxy情報を保存できる変数を作らないとだめなのでしょうか?

またノイズが走るのはなぜなのでしょうか・・・?


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

Name: niko  ..かけだし(2,336ポイント)   Date: 2009/09/11(金) 00:28   No:39094     
Title: Re:DXライブラリを使ってなんでも対応できる描画関数    
ノイズは私のミスでした・・・
フリップした後に描画していました・・・

また透過の処理のコメントをとると表示されなくなってしまいます。
どなたか教えていただけないですか。



void Draw(int x1,int y1,int x2,int y2,int x3,int y3,int Zx,int Zy,int BMP,int color,bool turn,bool center,int rot){
int SizeX,SizeY; // 画像の切り取りサイズ
int Left,Right,Top,Bottom; // 描画座標
int hGraph = BMP;
GetGraphSize(BMP,&SizeX,&SizeY); // グラフィックのサイズの取得
if(x2==0 && y2==0 && x3==SizeX && y3==SizeY){

}else{
hGraph = DerivationGraph(x2,y2,x3,y3,BMP);
}
// 各座標の取得
if(center == true){
Left = x1+SizeX/2;
Right = x2-SizeX/2;
Top = y1+SizeY/2;
Bottom = y2-SizeY/2;
}else{
Left = x1;
Right = x2;
Top = y1;
Bottom = y2;
}
// 各座標の回転 90などといれる角度の方 ディグリー角?
if(rot != 0){
Left = Left;
Right = Right;
Top = Top;
Bottom = Bottom;
}
// LRフラグがtrueなら各座標の反転
if(turn == true){
int tx,ty;
tx = Left;
Left = Right;
Right = tx;
//上下反転
ty = Top;
//yTop = yBottom;
//yBottom = ty;
}
// SetDrawBlendMode(DX_BLENDMODE_ALPHA,( color>>24 ));
SetDrawBright( ( color & 0xFF0000 ) >> 16, ( color & 0x00FF00 ) >> 8, ( color & 0x0000FF ) );

DrawModiGraph( 0 , 0 , 32 , 0 , 32 , 32 , 0 , 32 , hGraph , true ) ;

SetDrawBright(255,255,255);
SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0 );
// DeleteGraph(hGraph);




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

Name: Justy  ..伝説なるハッカー(419,647ポイント)   Date: 2009/09/11(金) 01:20   No:39096     
Title: Re:DXライブラリを使ってなんでも対応できる描画関数    

>また透過の処理のコメントをとると表示されなくなってしまいます

 引数 colorの値がどうなっているかにもよりますが、
仮に 0xffffffffとか 0x80000000などが入っていた場合、color>>24の結果は負になりますので、
SetDrawBlendMode関数内部で自動的に 0とみなされる可能性があります。

 もしそうだとすると、アルファの値が0では表示しても目には見えないことになります。


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

Name: niko  ..かけだし(2,437ポイント)   Date: 2009/09/12(土) 02:22   No:39130     
Title: Re:DXライブラリを使ってなんでも対応できる描画関数    
0xffffffffとかいていたのですがだめなのでしょうか・・・
ちなみに255と直接コメントアウトしている部分に入れたところ表示されましたので
使うときが原因みたいです。

また座標変換についてうまくできないのですが
教えて頂けないでしょうか?


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

Name: Justy  ..伝説なるハッカー(419,829ポイント)   Date: 2009/09/12(土) 13:02   No:39138     
Title: Re:DXライブラリを使ってなんでも対応できる描画関数    

>0xffffffffとかいていたのですがだめなのでしょうか・

 colorを intではなく unsigned intにすれば負にはならなくなります。



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

Name: ねこ  ..熟練のプログラマー(40,308ポイント)   Date: 2009/09/12(土) 15:54   No:39144     
Title: Re:DXライブラリを使ってなんでも対応できる描画関数    

// X座標、Y座標、中心座標X、中心座標Y、回転角度、受け取る座標X、受け取る座標Y
void CalcRotatePnt( double x, double y, double cx, double cy, double dRad, double* px, double* py )
{
// 角度と距離を計算
double dBaseRad = atan2( y - cy, x - cx );
double dBaseLen = sqrt( pow( x - cx, 2.0 ) + pow( y - cy, 2.0 ) );

// 座標を計算
double rx = cx + cos( dBaseRad + dRad ) * dBaseLen;
double ry = cy + sin( dBaseRad + dRad ) * dBaseLne;

// ポインタ変数に設定
*px = rx;
*py = ry;
}

こんな風にして使ってください。
double rx = 0.0, ry = 0.0;
Calc( x, y, cx, cy, 30.0, &rx, &ry ); // rx, ryに回転後の座標が入る


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

Name: niko  ..入門者(2,738ポイント)   Date: 2009/09/12(土) 16:01   No:39145     
Title: Re:DXライブラリを使ってなんでも対応できる描画関数    
>>justyさん
透過できました。
ありがとうございます。
また座標取得用の構造体を作ったのですがこれを使った方がよいのでしょうか?
(LEFTだけでは分かりにくいため)
申し訳ないのですが座標変換についていろいろ調べてはみたのですが
よくわかりませんでした。
できれば以下のソースを修正してはいただけないでしょうか?


typedef struct{
int x,y;
}XY;

void Draw(int x1,int y1,int x2,int y2,int x3,int y3,int Zx,int Zy,int BMP,unsigned int color,bool turn,bool center,int rot){
XY Size;
int Left,Right,Top,Bottom; // 描画座標
int hGraph = BMP;
GetGraphSize(BMP,&Size.x,&Size.y); // グラフィックのサイズの取得

if(x2==0 && y2==0 && x3==Size.x && y3==Size.y){

}else{
hGraph = DerivationGraph(x2,y2,x3,y3,BMP);
}
// 各座標の取得
if(center == true){
Left = x1+Size.x/2;
Right = x2-Size.x/2;
Top = y1+Size.y/2;
Bottom = y2-Size.y/2;
}else{
Left = x1;
Right = x2;
Top = y1;
Bottom = y2;
}
// 各座標の回転 90などといれる角度の方 ディグリー角?
if(rot != 0){
Left = Left;
Right = Right;
Top = Top;
Bottom = Bottom;
}
// LRフラグがtrueなら各座標の反転
if(turn == true){
int tx,ty;
tx = Left;
Left = Right;
Right = tx;
//上下反転
ty = Top;
//yTop = yBottom;
//yBottom = ty;
}
SetDrawBlendMode(DX_BLENDMODE_ALPHA,( color>>24 ));
SetDrawBright( ( color & 0xFF0000 ) >> 16, ( color & 0x00FF00 ) >> 8, ( color & 0x0000FF ) );

DrawModiGraph( 0 , 0 , 32 , 0 , 32 , 32 , 0 , 32 , hGraph , true ) ;

SetDrawBright(255,255,255);
SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0 );
DeleteGraph(hGraph);


}


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

Name: ねこ  ..熟練のプログラマー(40,368ポイント)   Date: 2009/09/12(土) 16:08   No:39146     
Title: Re:DXライブラリを使ってなんでも対応できる描画関数    
あ、しまった。角度の引数はラジアン値なので、以下のように度数から変換して下さい。

( A / 180.0 * M_PI ); // Aのところに角度指定


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

Name: Justy  ..伝説なるハッカー(420,507ポイント)   Date: 2009/09/13(日) 02:07   No:39165     
Title: Re:DXライブラリを使ってなんでも対応できる描画関数    

>座標取得用の構造体を作ったのですがこれを使った方がよいのでしょうか

 どういうものかは見ていないのでわかりませんが、xと yなどの必ず対になるものは
構造体などに纏めるのはいいと思います。



>できれば以下のソースを修正してはいただけないでしょうか?

 修正云々とかの前に、いろいろ問題と質問と提案があります。

□ 画像の切り抜きとかブレンドなどは別にしてDrawRotaGraph()とか DrawRotaGraph2()では
代用できないのですか?
 回転とか反転とかは機能がかぶってます。

□ hGraphを破棄している
 DerivationGraph()で新規に作った場合はともかく、中身が引数 BMPだった場合、
引数として与えられた画像を破棄してしまうことになります。
 これは意図した通りですか?
 
□ GetGraphSizeで画像の大きさを取得していますが、DerivationGraphで切り抜いた場合の
画像サイズではないので、表示位置とか中央表示を行うと位置がずれそうです。

□ 個人的な意見ですが、DrawModiGraphの後は、デフォルトの輝度とブレンドモードに
戻すのではなく、関数が呼ばれる前の状態に戻した方が自然かと思います。

□ 引数の数が多すぎませんか?
 実際に使う際にはさらにラッパー関数を作るのかもしれませんが、
クラス化できるならクラス化を、そうでないなら引数の全部もしくは一部を構造体に纏めるなど、
情報を纏めた方がいいように思います。

□ 切り取り機能を持たせていますが、これは必要ですか?
 UVアニメーションをガンガン使っていきたいという用途であればまだいいのかもしれませんが、
関数を呼ぶ度に新規にグラフィックハンドルを作成し破棄するのは少しコストが高い気がします。

 この関数の中ではなく、外で切り取り済みのグラフィックスハンドルを作っておいて
そちらで管理した方がいいのではないでしょうか?


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

Name: niko  ..かけだし(2,064ポイント)   Date: 2009/09/13(日) 03:16   No:39166     
Title: Re:DXライブラリを使ってなんでも対応できる描画関数    
ご回答ありがとうございます。

>>画像の切り抜きとかブレンドなどは別にしてDrawRotaGraph()とか DrawRotaGraph2()では
>>代用できないのですか?
DrawRotaGraph()
DrawRotaGraph2()
と書いてしまったら別々の画像が描画されてしまわないでしょうか?
といいますのも回転と反転を同時に行う場合に対応できるのでしょうか・・・

>>hGraphを破棄している
hGraphを破棄しているだけでBMP自体は破棄してはいないかと思うのですが
違うのでしょうか?

>>GetGraphSizeで画像の大きさを取得していますが、DerivationGraphで切り抜いた場合の
>>画像サイズではないので、表示位置とか中央表示を行うと位置がずれそうです。
そうなのですか・・・
これについてはよくわかりません・・・

>>個人的な意見ですが、DrawModiGraphの後は、デフォルトの輝度とブレンドモードに
>>戻すのではなく、関数が呼ばれる前の状態に戻した方が自然かと思います。
ここらへんも全く考えておりませんでした。
変更する前に輝度を取得する関数を使い戻すといった方法で
できるでしょうか?

>>引数の数が多すぎませんか?
確かに引数が多いのは私も感じております。
反転や原点等のフラグ情報は一個にまとめ0x1101みたいな感じで書いて
シフト演算をするようにしようかとも考えておりました。(今回のができたら変更しようかと)

表示位置xy
画像の切り取り開始位置xy
切り取るサイズxy
拡大率xy
読み込む画像
color・・・カラー
LR反転
原点の場所
回転角度

上記の設定ができる描画関数にしたいです。

>>切り取り機能を持たせていますが、これは必要ですか?
なるほど・・・
そのように考えたことはありませんでした。
今後アニメ画像を1枚のシートに作る時用に考えていたのですがあらかじめ
ハンドルをつくっておけばよいのですね・・・
そうしたら引数もかなり減らせそうです・・・。

お手数おかけしますがサンプルのソースを書いてはいただけないでしょうか?
自分ではあまりに非効率な書きかたすぎて参考になるものがみてみたいです・・・。


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

Name: Justy  ..伝説なるハッカー(421,255ポイント)   Date: 2009/09/13(日) 13:27   No:39177     
Title: Re:DXライブラリを使ってなんでも対応できる描画関数    

>別々の画像が描画されてしまわないでしょうか?

 ?
 画像が別々かどうかはグラフィックスハンドル次第ですが、2回描画を呼び出しているので
2回描画されます。



>回転と反転を同時に行う場合に対応できるのでしょうか・

 試してはいませんが、これらの関数にも TurnFlagの引数を持っていますので、
これを TRUEにすることで反転できると思います。
 回転は勿論、引数 Angleです。

 とはいえ、拡大率xyそれぞれには対応してないですね。



>>画像サイズではないので、表示位置とか中央表示を行うと位置がずれそうです
>これについてはよくわかりません

 DerivationGraph()は新規に指定したサイズに合わせて画像ハンドルを作ります。
 その画像ハンドルからサイズ情報を取り出し、中央の位置を計算しないと
表示位置がずれないか、ということです。

 まぁ、切り抜き機能自体を削るのであればもう関係ない話になりますが。



>BMP自体は破棄してはいないかと思うのですが

 よくみると冒頭でint hGraph = BMP と hGraphを BMPで初期化しているので
この時点では hGraphは BMPそのものです。

 グラフィックスの切り取りを行わない場合は hGraphはそのままになるので、
終了時に破棄されるのは BMPということになります。



>変更する前に輝度を取得する関数を使い戻すといった方法で
>できるでしょうか

 可能です。
 SetXXXXに対する GetXXXXが用意されています。

 どっち(デフォルトの値に戻すか元の値に戻すか)がいいのかは
好みが分かれるところなので、お好みで。



>拡大率xy
>回転角度

 このあたりは実に面倒なのですが拡大してから回転するのか、回転してから拡大するのか、を
引数で指定するか、どっちか一方に決めておかなければなりません。

 正方形のテクスチャを [2, 1]の横長な拡大率で常に回転させた場合、
一方はラグビーボールのように回転に伴い長い方向が変化しますが、
もう一方は重い重量の荷物を積んで潰れたタイヤのように横長のまま絵の中身だけ回転します。



>LR反転

 今気付きましたが、ひょっとするとこれ要らないかもしれませんね。
 拡大率がラグビーボールのように動くのであれば、拡大率を負にすれば
同じことになります。



>非効率な書きかたすぎて参考になるものがみてみたいです・

 あと少しですよ。
 ねこさん作の CalcRotatePnt()を使えば回転はできるはずです。
 もう少し頑張ってみて下さい。


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

Name: niko  ..入門者(3,280ポイント)   Date: 2009/09/15(火) 22:16   No:39247     
Title: Re:DXライブラリを使ってなんでも対応できる描画関数    
前回からいろいろ変更してみました。
作っていただいた関数を使っているのですが
うまくいきません。
変な場所に表示されてしまいます。

折角作っていただいたのに申し訳ないです。

またたまにEscなどで終了させるとウインドウがあった位置だけが真っ黒くなり
どうやってもけせなくなるバグが起きてしまいます。
これは描画の仕方が悪いのでしょうか。



void Draw(int x1,int y1,int x2,int y2,int x3,int y3,int Zx,int Zy,int BMP,unsigned int color,bool turn,bool center,int rot){
XY Size;
XY LeftUp,RightUp,LeftDown,RightDown; // 描画座標
int hGraph = BMP;
bool DeleteF = false;
GetGraphSize(BMP,&Size.x,&Size.y); // グラフィックのサイズの取得

if(x2==0 && y2==0 && x3==Size.x && y3==Size.y){

}else{
hGraph = DerivationGraph(x2,y2,x3,y3,BMP);
DeleteF = true;
}
// 各座標の取得
if(center == true){
LeftUp.x = x1-Size.x/2;
LeftUp.y = y1-Size.y/2;
RightUp.x = x1+Size.x/2;
RightUp.y = y1-Size.y/2;
LeftDown.x = x1-Size.x/2;
LeftDown.y = y1+Size.y/2;
RightDown.x = x1+Size.x/2;
RightDown.y = y1+Size.y/2;
CalcRotatePnt(LeftUp.x,LeftUp.y,x1,y1,rot,&LeftUp.x,&LeftUp.y);
CalcRotatePnt(RightUp.x,RightUp.y,x1,y1,rot,&RightUp.x,&RightUp.y);
CalcRotatePnt(RightDown.x,RightDown.y,x1,y1,rot,&RightDown.x,&RightDown.y);
CalcRotatePnt(LeftDown.x,LeftDown.y,x1,y1,rot,&LeftDown.x,&LeftDown.y);
}else{
LeftUp.x = x1;
LeftUp.y = y1;
RightUp.x = x1+x3;
RightUp.y = y1;
LeftDown.x = x1;
LeftDown.y = y1+y3;
RightDown.x = x1+x3;
RightDown.y = y1+y3;
CalcRotatePnt(LeftUp.x,LeftUp.y,LeftUp.x+x3/2,LeftUp.y+y3/2,rot,&LeftUp.x,&LeftUp.y);
CalcRotatePnt(RightUp.x,RightUp.y,RightUp.x-x3/2,RightUp.y+y3/2,rot,&RightUp.x,&RightUp.y);
CalcRotatePnt(RightDown.x,RightDown.y,RightDown.y-x3/2,RightDown.y-y3/2,rot,&RightDown.x,&RightDown.y);
CalcRotatePnt(LeftDown.x,LeftDown.y,x1+x3/2,y1-y3/2,rot,&LeftDown.x,&LeftDown.y);
}
// 各座標の回転 90などといれる角度の方 ディグリー角?

// LRフラグがtrueなら各座標の反転

SetDrawBlendMode(DX_BLENDMODE_ALPHA,( color>>24 ));
SetDrawBright( ( color & 0xFF0000 ) >> 16, ( color & 0x00FF00 ) >> 8, ( color & 0x0000FF ) );

DrawModiGraph( LeftUp.x , LeftUp.y , RightUp.x , RightUp.y , RightDown.x , RightDown.y , LeftDown.x , LeftDown.y , hGraph , true ) ;

SetDrawBright(255,255,255);
SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0 );
if(DeleteF) DeleteGraph(hGraph);


}




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

Name: niko  ..入門者(3,440ポイント)   Date: 2009/09/16(水) 22:20   No:39285     
Title: Re:DXライブラリを使ってなんでも対応できる描画関数    
バグが起こる条件がわかりました。
Alt+F4や×でウインドウを閉じようとすると必ず起こります。
もしかしたらwhileでまわしているので
DXライブラリを終了させるときに書かなければいけないEndの
命令までたどり着いていないのかもしれません。


描画の方は自分なりに修正しているのですが
相変わらず表示位置が関係ない位置になってしまいます。


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



Name: でんすけ  ..ぴよぴよ(521ポイント)   Date: 2009/09/16(水) 14:39   No:39257       
Title: マウスを使ったショット 続き    
以前「マウスを使ったショット」を投稿した者です。
弾の画像を回転させるにはどこをいじって、どのような計算をさせればよいのでしょうか?
あと発射される位置も回転させたいのですが、どうしたらよいでしょうか?

// cshot.cpp
// 通常ショット登録
void ch0_shot_pattern()
{
int k;
for( int i = 0; i < cshot0num[ch.power < 200?0 : 1]; i++ )
{
if( ( k = search_cshot() ) != -1 )
{
cshot[k].flag = 1;
cshot[k].cnt = 0;
cshot[k].angle = atan2( MouseY - ch.y, ( MouseX - 30 ) - ch.x );
cshot[k].spd = 20;
cshot[k].x = ch.x + cshot0pos_x[i];
cshot[k].y = ch.y + cshot0pos_y[i];
cshot[k].power = 23;
cshot[k].knd = 0;
}
}
se_flag[2] = 1; // 発射音オン
}

いじったのは cshot[k].angle です。
MouseX, MouseYはマウスの位置を取得して格納してます。


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


Name: situmon  ..熟練のプログラマー(45,173ポイント)   Date: 2009/09/16(水) 20:28   No:39268     
Title: Re:マウスを使ったショット 続き    
1.弾の画像の回転。
それ自体を回転すればいいですので、
DrawRotaGraphで
PI*((double)count*(回転するスピード)をangleにいれればいいです。
詳しくは、ゲームプログラミングの館の51章をご覧ください。
2.発射される位置の回転、についてですが、言っている意味がよくわからないのですが、
円回転をすればいいと思います。


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

Name: でんすけ  ..ぴよぴよ(595ポイント)   Date: 2009/09/16(水) 20:53   No:39272     
Title: Re:マウスを使ったショット 続き    
質問の仕方が悪かったようです。
今、マウスの位置に向かって自機ショットが飛んでいっているのですが、
ショット画像が上を向いたままになっているんです。

飛んでいっている方向に画像を向けるにはどうしたらいいでしょうか?


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

Name: situmon  ..熟練のプログラマー(45,313ポイント)   Date: 2009/09/16(水) 21:31   No:39279     
Title: Re:マウスを使ったショット 続き    
自機ショットの角度+PI/2です。
DrawRotaGraph( ショットの中心座標のx座標 , ショットの中心座標のy座標 , 大きさ , 自機ショットの進んでいる角度+PI/2 ,画像ハンドル , 透過するかどうか ) ;
です。
画像が上を向いているのはその方向に飛ばすプログラムではなく、
その画像を描くプログラムを変えれば直るはずです。
もしわからなければ、どのようにしてショットを描いているのかのコードを見せていただければわかるかもしれません。


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

Name: でんすけ  ..ぴよぴよ(622ポイント)   Date: 2009/09/16(水) 22:11   No:39284 解決!     
Title: Re:マウスを使ったショット 続き    
解決しました!
どうもありがとうございます!


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



Name: chocoe  ..ぴよぴよ(61ポイント)   Date: 2009/09/16(水) 20:55   No:39273       
Title: テキストファイルを読み込んで配列表現したい    
次のようなテキストファイルがある場合に、それをC言語で配列表現したいのですがやり方が分かりません。

1 2 1 2 3 4 5 6 5 5 5 6

これを配列でA[1 2 1 2 3 4 5 6 5 5 5 6]のようにしたい。

よろしくお願いします。


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


Name: dic  ..プログラマー(32,727ポイント)   Date: 2009/09/16(水) 21:00   No:39275     
Title: Re:テキストファイルを読み込んで配列表現したい    
ファイルから読み込む方法が分からないのか
ファイルからデータを読み込んだ後、配列に格納するのが分からないのか

どこまでやって、どこでつまづいているか詳しく書いてくれると
返答しやすいと思います


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



Name: dic  ..プログラマー(32,638ポイント)   Date: 2009/09/16(水) 17:11   No:39262       
Title: ライブラリOpenCVをコンパイルできない    
ライブラリOpenCVを利用しようと思い
下のURLにあるソースコードをコンパイルしましたが、
http://gihyo.jp/dev/feature/01/opencv/0002?page=2
ライブラリ内のエラーで、どう対処すればいいか分かりません
インクルードのパスなどは通してます

サンプルで、使用されてるコンパイラはMicrosoft Visual C++ 2005
なのですが、私が使用しているコンパイラはMicrosoft Visual C++ 6.0
だからでしょうか?

下がコンパイルエラーです、多いので似たようなコンパイルエラーは省いてます

--------------------構成: hoge - Win32 Debug--------------------
コンパイル中...
main.cpp
c:\program files\opencv1.2\include\opencv\cxcore.hpp(173) : error C2535: '__thiscall cv::Allocator<U>::cv::Allocator<U>(const class cv::Allocator<U> &)' : メンバ関数は、すでに定義または宣言されています。
c:\program files\opencv1.2\include\opencv\cxcore.hpp(171) : 'Allocator<_Tp>::Allocator<_Tp>' の宣言を確認してください。
c:\program files\opencv1.2\include\opencv\cxcore.hpp(189) : コンパイルされたクラスのテンプレートのインスタンス化 'cv::Allocator<_Tp>' の参照を確認してください
c:\program files\opencv1.2\include\opencv\cxcore.hpp(203) : error C2989: 'DataDepth<class ?? ::_Tp *>' : このテンプレート クラスはすでに非テンプレート クラスとして定義されています。
c:\program files\opencv1.2\include\opencv\cxcore.hpp(203) : error C2988: 認識できないテンプレートの宣言または定義です。
c:\program files\opencv1.2\include\opencv\cxoperations.hpp(106) : error C2039: 'min' : 'std' のメンバではありません。
c:\program files\opencv1.2\include\opencv\cxoperations.hpp(106) : error C2873: 'min' : シンボルを using 宣言の中で使用することはできません。
c:\program files\opencv1.2\include\opencv\cxoperations.hpp(131) : error C2667: 'saturate_cast' : 4 個のオーバーロード関数があいまいで最適な変換ができません。 (新しい機能 ; ヘルプを参照)
c:\program files\opencv1.2\include\opencv\cxoperations.hpp(131) : error C2668: 'saturate_cast' : オーバーロード関数の呼び出しを解決することができません。(新機能 ; ヘルプを参照)
c:\program files\opencv1.2\include\opencv\cxoperations.hpp(133) : error C2908: 明示的な特殊化; 'unsigned char __cdecl cv::saturate_cast(unsigned int)' はプライマリ テンプレートから既にインスタンス化されています。
c:\program files\opencv1.2\include\opencv\cxoperations.hpp(133) : error C2039: 'min' : 'std' のメンバではありません。
c:\program files\opencv1.2\include\opencv\cxoperations.hpp(133) : error C2661: 'min' : 2 個の引数を持つオーバーロードされた関数はありません。
c:\program files\opencv1.2\include\opencv\cxoperations.hpp(135) : error C2908: 明示的な特殊化; 'unsigned char __cdecl cv::saturate_cast(float)' はプライマリ テンプレートから既にインスタンス化されています。
c:\program files\opencv1.2\include\opencv\cxoperations.hpp(135) : error C2667: 'saturate_cast' : 4 個のオーバーロード関数があいまいで最適な変換ができません。 (新しい機能 ; ヘルプを参照)
c:\program files\opencv1.2\include\opencv\cxoperations.hpp(135) : error C2668: 'saturate_cast' : オーバーロード関数の呼び出しを解決することができません。(新機能 ; ヘルプを参照)
c:\program files\opencv1.2\include\opencv\cxoperations.hpp(311) : error C2059: 構文エラー : ''template<''
c:\program files\opencv1.2\include\opencv\cxoperations.hpp(312) : error C2065: 'T2' : 定義されていない識別子です。
c:\program files\opencv1.2\include\opencv\cxoperations.hpp(320) : error C2143: 構文エラー : ';' が '{' の前に必要です。
c:\program files\opencv1.2\include\opencv\cxoperations.hpp(320) : error C2447: グローバルスコープで中カッコ ({) が見つかりましたが、対応する関数ヘッダーがありません。
c:\program files\opencv1.2\include\opencv\cxoperations.hpp(328) : error C2954: テンプレートの定義はネストできません。
エラーが 100 個を超えました。コンパイルは中断されます。
cl.exe の実行エラー

hoge.exe - エラー 102、警告 0


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


Name: Justy  ..伝説なるハッカー(426,134ポイント)   Date: 2009/09/16(水) 19:50   No:39267     
Title: Re:ライブラリOpenCVをコンパイルできない    

>私が使用しているコンパイラはMicrosoft Visual C++ 6.0 だからでしょうか?

 持ってないので正確なことは言えませんが、その可能性が高いです。
 
 MSVC6は今の C++の規格が固まる前後の製品なので、標準ライブラリの名前空間だとか
templateまわりだとか、for内の変数スコープだとかが、今のと異なります。

 MSVC8以降を使うか、ソースが公開されているので、ちまちま書き換えるか
しかないと思います


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

Name: dic  ..プログラマー(32,650ポイント)   Date: 2009/09/16(水) 20:56   No:39274 解決!     
Title: Re:ライブラリOpenCVをコンパイルできない    
Visual C++ 9.0 をインストールしてみましたところ
無事コンパイルできました
コンパイラも日進月歩ですね
Justyさん回答ありがとうございました


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



Name: おむすび  ..かけだし(2,452ポイント)   Date: 2009/09/15(火) 20:27   No:39243       
Title: シーンごとのソース管理    
以下でシーンごとのソース管理について
お尋ねしたものです。

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

現在、皆様のアドバイスで分割することができております。

ただシーンが増えてきていて今度はメイン処理のインクルードの長さに困っております。
そこでシーンのみを管理できるシート(SceneTbl.cpp)を作って
それをメイン処理のソースにインクルードするだけでいいようなロジックにしたいです。

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



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


Name: Justy  ..伝説なるハッカー(425,952ポイント)   Date: 2009/09/15(火) 23:50   No:39250     
Title: Re:シーンごとのソース管理    

>それをメイン処理のソースにインクルードするだけでいいようなロジックにしたいです

 単純に前のスレでいうところの GetSceneFunc()をその SceneTbl.cppに移動して、
コンパイルが通るように整えていく、でいいと思いますが。

 まぁインクルードが mainから SceneTbl.cpp側に移っただけで、インクルードの長さは
変わらないですけど……。


 では、ちょっといろいろアレな感じなソースですが、こんなのはどーでしょ。
 
 添付の scene_tbl.hにこんな関数があります。


・ bool SetCurrenScene(SceneID id)
 カレントシーン IDを指定します。

・ SceneID GetCurrentScene()
 カレントシーン ID(SetCurrenScene()で指定した ID)を取得します。
 
・ bool SetSceneFunction(SceneID id, const SceneFunc *sceneFunc);
 シーン IDと対になるシーン毎の関数情報を登録します。
 sceneFuncに NULLを入れると登録が解除されます。

・ const SceneFunc* GetSceneFunction()
 カレントシーンの関数情報を取得します。

・ const SceneFunc* GetSceneFunction(SceneID id)
 指定したシーン IDの関数情報を取得します。


 事前に SetSceneFunction() を使って、IDと対になる関数構造体の情報を
指定しておきます。

 例えば、

    SetSceneFunction(SCENE_START, GetSceneFunc_Game());
    SetSceneFunction(SCENE_GAME, GetSceneFunc_Game());

というような感じで。
 どこかのイニシャライズのところでも書いておけばいいかと思います。

 次に現在のシーン IDを SetCurrenScene() で指定します。
 
 そーすると、 GetSceneFunction() で先に指定したシーン IDに対応した
関数構造体情報が返ってきます(なければ NULLになることもあるので注意)ので、
その情報を元に、関数コールすればOKです。
 
 つまり main関数側では GetSceneFunction() を使って呼び出す関数を取得し、
各シーンの finishとかで次のシーンを指定してあげればいい、というわけです。

 この方法の利点は SetCurrenScene() によって、
同じ SCENE_GAMEでも途中で呼び出す関数構造体を動的に変更できるところです。
(多分いろいろ使い道はあると思います)


 で、このままでもいいのですが、ついでなのでわざわざ SetSceneFunction() するのが面倒だ!
という場合は、構造が先のスレで紹介したような方法であれば少し便利(?)なマクロを用意してみました。



// -----start_scene.cpp
#include "scene_tbl.h"
static void Init() {}
static void Draw() {}
static void Finish() {}
const SceneFunc *GetSceneFunc_Start()
{
    static const SceneFunc func = { &Init, NULL, &Draw, &Finish
    return &func;
}
AUTO_SET_SCENE_FUNC(SCENE_START, GetSceneFunc_Start());

// -----game_scene.cpp
#include "scene_tbl.h"
static void Init() {}
static void Loop() {}
static void Draw() {}
static void Finish() {}
const SceneFunc *GetSceneFunc_Game()
{
    static const SceneFunc func = { &Init, &Loop, &Draw, &Finish
    return &func;
}
AUTO_SET_SCENE_FUNC(SCENE_GAME, GetSceneFunc_Game());

 この AUTO_SET_SCENE_FUNC のマクロで自動的に SetSceneFunction()してくれますので、
後はカレントとなるシーン IDを指定して、対応する関数構造体を取得するだけ
になります(ヘッダでは使わないで下さい)。

 ただ、欠点としてはこれを使った上で SceneIDを変更したとき、
必然的に各シーンファイルの再コンパイルが必要になることですね……。


2,156ポイント を手に入れた。



Name: 蒼空  ..ぴよぴよ(13ポイント)   Date: 2009/09/14(月) 17:48   No:39218       
Title: 2面ボスの作り方を教えてください。    
 龍神録のプログラムを改造して、STGを作っているのですが、
1面は、とりあえず問題がないのですが
いざ、2面を作り始めたらボスが、うまく読み込めなくて
困っています。
読み込めないと言うより、まったく読み込んでいません。
どなたか、教えてほしいのですがお願いします。

C++を使っています。とりあえず、基礎的なことは覚えています。

念のため、自分で試した部分のコピーをしておきます。
ini.cpp

/*弾幕それぞれの設定。後々きちんと設定しましょう。*/
boss.appear_count[0]=100;//中ボスが出現する時刻(42)(47)
boss.appear_count[1]=500;//最後ボスが出現する時刻(44)(47)
boss.appear_count[2]=1000;//2面ボスが出現する時刻(44)(47)

boss.danmaku_num[0]=1;//中ボスが何個目までの弾幕を出すか
boss.danmaku_num[1]=2;//最後に出るボスが何個目までの弾幕を出すか(47)
boss.danmaku_num[2]=6;//最後に出るボスが何個目までの弾幕を出すか(47)

struct.h

typedef struct{
//フラグ、カウンタ、種類、待機時間、状態、弾幕終了までのカウンタ、後ろの羽衣、表示フラグ
int flag,cnt,knd,wtime,state,endtime,hagoromo,graph_flag;
//HP,最大HP
int hp,hp_max;
//出現カウンタ数、各弾幕のHP、背景の種類、中ボス-ラスボスの弾幕数(45)
int appear_count[3],set_hp[DANMAKU_MAX],back_knd[DANMAKU_MAX],danmaku_num[3];
//座標
double x,y,dx,dy,ang,spd;
//物理移動のための変数
phy_t phy;
}boss_t;

何か間違いや、ささいなことでもいいので、教えてください。


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


Name: kazuoni [URL]  ..ハッカー(105,241ポイント)   Date: 2009/09/14(月) 18:12   No:39219     
Title: Re:2面ボスの作り方を教えてください。    
>1面は、とりあえず問題がないのですが
>いざ、2面を作り始めたらボスが、うまく読み込めなくて
>読み込めないと言うより、まったく読み込んでいません。

二面を読み込む→ファイルからの読み込み?
ボスの読み込み→画像の読み込み?
など、詳細が分からないので、なんとも言えませんが、
一面が読み込めるなら、それと同じことをすれば、二面も読み込めるはずです。
一面と二面で相違点は何かありませんか?(プログラムの通る場所)
そこを徹底的に調べるべきです。
また、「二面の読み込み」の部分にブレークポイントを張って、一つ一つ中身を
見ていってください。
・配列外のところに代入していないか
・適切な数値が入っているか
などなど。

#上記に示されたコードでは回答側は全く見当がつかないかと・・・
いっそ、どこかに全コードUPすれば、龍神録プログラミングをしている方々から
回答がもらえるかと。。


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

Name: 蒼空  ..ぴよぴよ(146ポイント)   Date: 2009/09/14(月) 22:01   No:39227     
Title: Re:2面ボスの作り方を教えてください。    
>kazuoniさん

返答ありがとうございます。
>二面を読み込む→ファイルからの読み込み?
>ボスの読み込み→画像の読み込み?
>一面と二面で相違点は何かありませんか?(プログラムの通る場所)

同じファイル(.cpp)の読み込みです。

いえ、画像でなく、元のボス自体が読み込めないのです。
1面分は、読み込んでいますが、2面からは、なぜかできません。

特に、無いはずです。


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

Name: kazuoni [URL]  ..ハッカー(105,423ポイント)   Date: 2009/09/14(月) 23:03   No:39229     
Title: Re:2面ボスの作り方を教えてください。    
>同じファイル(.cpp)の読み込みです。

ますます分からないです。
ボスのデータのテンプレートがあり、一面と同じように作ってあり、
正常に受け渡しできているなら、
「なぜか読み込めない」なんてことは起こりません。

これ以上は自分は適切な回答ができないので、
他の方からの回答を待ってください。
もしよろしければ、プロジェクトごとUPしていただけませんか?


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

Name: 蒼空  ..ぴよぴよ(175ポイント)   Date: 2009/09/15(火) 22:09   No:39246 解決!     
Title: Re:2面ボスの作り方を教えてください。    
冷静に考え、試行錯誤した結果、自己解決しました。

いろいろお世話をかけました。


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



Name: APS  ..ぴよぴよ(268ポイント)   Date: 2009/09/14(月) 20:24   No:39222       
Title: exe形式にする方法について    
今回は、いままでプログラミングの館を見て作った龍神録をexe形式にしたいのですが、プログラミングの館で使ってるファイル形式の場合のやり方がわかりません。
どうすればexe形式にできるのでしょうか?

詳しい方ご教授お願いします。


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


Name: ディア  ..ぴよぴよ(533ポイント)   Date: 2009/09/14(月) 20:38   No:39223     
Title: Re:exe形式にする方法について    
>プログラミングの館で使ってるファイル形式
拡張子はなんでしょう・・・?

以下、cppなどのファイルの場合を書いておきます。
違う場合、拡張子等を明らかにして下さい。

何らかのソフトでコンパイル、メイク(全てのソースを一気にする)を行うとexeで出てきます。






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

Name: array [URL]  ..熟練のプログラマー(55,658ポイント)   Date: 2009/09/14(月) 21:02   No:39225     
Title: Re:exe形式にする方法について    
Debugフォルダの中にあるRyuJin.exeとは違うのでしょうか

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

Name: APS  ..かけだし(1,672ポイント)   Date: 2009/09/15(火) 20:47   No:39244 解決!     
Title: Re:exe形式にする方法について    
回答ありがとうございました。

arrayさんの言うとうりでした。
ご指摘ありがとうございます。


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



Name: binoruto  ..入門者(2,653ポイント)   Date: 2009/09/15(火) 09:46   No:39234       
Title: ビットマップに文字列の描画    
binorutoと申します。

標準Cでビットマップに文字列を描画されるにはどういった方法が考えられるでしょうか。
APIとか使用できるライブラリがあったら紹介してほしいです。
OSはlinux、コンパイラはgcc4.1.2を使用しております。

以上です、宜しくお願いします。


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


Name: toyo  ..熟練のプログラマー(40,918ポイント)   Date: 2009/09/15(火) 12:06   No:39239     
Title: Re:ビットマップに文字列の描画    
libgd
http://www.libgd.org/Main_Page

ImageMagick
http://www.imagemagick.org/script/index.php


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

Name: binoruto  ..入門者(2,675ポイント)   Date: 2009/09/15(火) 17:37   No:39242 解決!     
Title: Re:ビットマップに文字列の描画    
> libgd
> http://www.libgd.org/Main_Page
> や
> ImageMagick
> http://www.imagemagick.org/script/index.php
>

レスありがとうございます。
調べて使えるかやってみます。

以上です。


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



Name: 鈴木萌々  ..ぴよぴよ(399ポイント)   Date: 2009/09/12(土) 17:19   No:39150       
Title: 助けてください。。。    
18日までにやらなければならないレポートがあるのですが、
他のテスト勉強などなどに追われて頭の弱い私にはよくわかりません。。。
どなたか回答を教えてくださると助かります!

以下内容です。

【問題1】

3次方程式
x^3-0.5=0及び2x^3+7x^2+5x+3=0
の実数解を,以下のステップを踏むことにより,数値的に求めよ.

(1) 下のプログラムの,22行目から35行目を,そっくりそのまま,35行目の下に,5〜10回コピーしたプログラムを実行してみよ.
プログラムを保存するディレクトリ及びファイル名は各自で適当に決めること.
(表は添付しておきます)


(2) (1)で作ったプログラムの出力をよく見て. 出力が下の行に進むにつれ,"Xc"列の値が"誤差"列の誤差の範囲内で
x^3-0.5=0の解に近づいていることを確認し,なぜそうなるのかを理解せよ(参考).

(3) (1)で作ったプログラムを,while あるいは for 文による繰り返し処理を使って,同じ文がなるべくプログラム中に重複して出てこないように修正し,
解を誤差 0.0001 以内で求めよ.
その際,同じ意味を持つ定数もなるべく重複して出てこないようにする等,わかり易く効率的なプログラムにする修正も含めるものとする.
出力の形式は自由で良いが,わかりやすくすること.さらに,プログラムにはある程度のコメントを入れること.
元から入っているコメントは削除して構わない.

(4) (3)で作ったプログラムを参考にし,
2x^3+7x^2+5x+3=0の実数解を,誤差 0.00005 以内で求めるプログラムを作れ(保存するディレクトリ及びファイル名は各自で適当に決めること).
(3) 同様,出力の形式は自由で良いが,見やすい出力とすること.プログラムにはある程度のコメントを入れること.

【問題2】

問題1(3),(4)で作成した2つのプログラムについて,
・ソースプログラムの表示
・コンパイル・リンク
・プログラムの実行
を,連続的に自動実行する機能を持ったシェルスクリプト report2 を ~/scripts というディレクトリに作れ.その際,以下の指示に従うこと.
・問題1(3),(4)のソースプログラムを保存するディレクトリ及びファイル名は,上述したように各自で適当に決めること.
・シェルスクリプトは,必ず,~/scripts/report2 に作成すること.
・report2は,起動ディレクトリに依存せずに動作するようにすること.
・プログラム及びシェルスクリプトreport2には,必ず,ある程度のコメントを入れること.
・echo コマンド等を使って,シェルスクリプトの出力が見やすくなるようにすること.
シェルスクリプトが完成したら,ターミナルで,
(cd ; date ; who ; cat scripts/report2 ; scripts/report2) > ~/report2.log
というコマンドを実行せよ(実行する前に,chmodコマンドによりreport2の保護モードを変更しておく必要があることに注意).
このコマンドにより,シェルスクリプトの内容と実行結果が,ホームディレクトリの"report2.log"というファイルに保存される.
情報処理センターの端末室では,UNIXのホームディレクトリを,WindowsのZドライブとして参照出来るので,
Windows上のメールソフトを使って,"report2.log"を添付ファイルとして,メールで提出せよ.アドレスは絶対に間違えないこと.
提出する前に,UNIX上で,"report2.log"の内容を参照し,シェルスクリプトが最後まできちんと動いていることを確認した方が良い.
 

なお,report2 と同様な機能を持ったシェルスクリプトの例をこのページの最後の部分に示す.例を参考にして考えてみよ.
下記の例を参考にするときは,このシェルスクリプトが
・ ~/programs の report2_0.c というファイルに保存されているCのソースプログラムを対象にしている.
・スクリプトは,起動するディレクトリに依存しないように,シェルスクリプトの中で,必要なディレクトリの移動を行っている.
・gcc コマンドの -o オプション を使って,実行プログラムの名前を,report2_0 としている.
・echo コマンドを使って,出力の中で,"Cプログラムの表示部分","プログラムの実行部分"が,多少でもわかりやすくなるようにしている.
のようなことをしていることに注意し,必要だと思われる部分を流用すると良い.


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


Name: バグ  ..ハッカー(170,471ポイント)   Date: 2009/09/12(土) 17:47   No:39152     
Title: Re:助けてください。。。    
ここの掲示板の規約を読んでみてください。
課題の丸投げは禁止ですよ。


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

Name: mnkr  ..かけだし(1,376ポイント)   Date: 2009/09/12(土) 19:16   No:39154     
Title: Re:助けてください。。。    
C言語を勉強中の者です。

解答にはなりませんが、
この問題に酷似した問題をC言語の
勉強サイトで見かけた記憶があります。
解説も載っていましたが、わたしには理解不能でしたorz


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

Name: non  ..熟練のプログラマー(62,520ポイント)   Date: 2009/09/12(土) 21:06   No:39157     
Title: Re:助けてください。。。    
2分法で検索したら、詳しい解説があります。
少しだけお手伝いしましょう。
>2x^3+7x^2+5x+3=0の実数解を,誤差 0.00005 以内で求めるプログラムを作れ

#include <stdio.h>
#include <math.h>

#define eps 0.00005

double f(double x)
{
return 2*x*x*x+7*x*x+5*x+3;
}
int main(void)
{
float xa,xb,xc;
float ya,yb,yc;
float initial_delta,dx;

printf(" Xa Xc Xb 誤差 Ya Yc Yb\n");

initial_delta=10.0;
xa=-10.0;
xb=xa+initial_delta;
dx=initial_delta;
do{
dx/=2.0;
xc=xa+dx;
ya=f(xa);
yb=f(xb);
yc=f(xc);
printf("%10.7f%10.7f%10.7f%10.7f%10.7f%10.7f%10.7f\n",xa,xc,xb,dx,ya,yc,yb);
if((ya*yc)<0){
xb=xc;
}else{
xa=xc;
}
}while(!(fabs(xa-xb)<eps));
return 0;
}


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

Name: box  ..ハッカー(144,030ポイント)   Date: 2009/09/12(土) 22:19   No:39161     
Title: Re:助けてください。。。    

> double f(double x)
> {
> return 2*x*x*x+7*x*x+5*x+3;
> }
> int main(void)
> {
> float xa,xb,xc;
> float ya,yb,yc;
> float initial_delta,dx;

doubleとfloatが混在していると、初学者のかたは混乱するかもしれません。
いずれかに統一するほうがよいと思います。できればdoubleに。



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

Name: non  ..熟練のプログラマー(62,590ポイント)   Date: 2009/09/13(日) 08:26   No:39174     
Title: Re:助けてください。。。    
boxさんへ
うっかりでした。てっきり、doubleだと思って関数の方を作ってしまいました。
それに見直してみますと、終了条件が
>}while(!(fabs(xa-xb)<eps));
ではありませんね。
dx>epsです。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,057,119ポイント)   Date: 2009/09/13(日) 08:27   No:39175     
Title: Re:助けてください。。。    
>質問者さん

2箇所で同じ事を書くのもあれなので、こちらでは省略します。
後、プログラムは画像ではなく、タイプするようにして下さい。
回答者がコピペで確認したりという事が出来ないです。


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

Name: 鈴木萌々  ..かけだし(1,243ポイント)   Date: 2009/09/15(火) 13:24   No:39240     
Title: Re:助けてください。。。    
反応遅れて本当にすみません!
皆さんありがとうございます、ご指摘等も本当にすみません。
焦ってアップしたらいろいろ規約違反だったようで…それでもお助けいただいた皆様に感謝します。
お手伝い頂いた内容から頑張って課題仕上げたいと思います!
ありがとうございました。


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



Name: jemi  ..ぴよぴよ(567ポイント)   Date: 2009/09/15(火) 02:10   No:39232       
Title: 分割コンパイルについて、質問です。    
シューティングゲームの館の6章での分割コンパイルなのですが、
手順通りに進めて行くと、
main.cpp(33) : error C3861: 'SetColor': 識別子が見つかりませんでした
main.cpp(36) : error C3861: 'img_sound_load': 識別子が見つかりませんでした
main.cpp(39) : error C3861: 'init': 識別子が見つかりませんでした
main.cpp(50) : error C3861: 'BackGround': 識別子が見つかりませんでした
main.cpp(53) : error C3861: 'BackGround2': 識別子が見つかりませんでした
main.cpp(56) : error C3861: 'PlayerControl': 識別子が見つかりませんでした
main.cpp(59) : error C3861: 'FpsTimeFanc': 識別子が見つかりませんでした

とのエラーメッセージが出るため、「main.cpp」に
extern void img_sound_load();
extern void init();
extern void SetColor();
extern void BackGround();
extern void PlayerControl();
extern void BackGround2();
extern void FpsTimeFanc();

を追加してみたのですが、
1>img_sound_load.obj : error LNK2005: "int counter" (?counter@@3HA) は既に main.obj で定義されています。
1>init.obj : error LNK2005: "int counter" (?counter@@3HA) は既に main.obj で定義されています。
1>background.obj : error LNK2005: "int counter" (?counter@@3HA) は既に main.obj で定義されています。
1>player.obj : error LNK2005: "int counter" (?counter@@3HA) は既に main.obj で定義されています。
1>fps.obj : error LNK2005: "int counter" (?counter@@3HA) は既に main.obj で定義されています。
1>C:\Documents and Settings\小木\デスクトップ\C言語\VC自主作成\shooting training\Debug\shooting training.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。

上記のメッセージが出てきてしまい、コンパイルできません。

環境は「Visual C++ 2008 Express Edition」を使用しています。

どうすれば、解決するのでしょうか?
宜しくお願いします。


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


Name: たかぎ [URL]  ..ハッカー(110,949ポイント)   Date: 2009/09/15(火) 09:36   No:39233     
Title: Re:分割コンパイルについて、質問です。    
エラーメッセージのとおりですが、何が分からないのでしょうか?


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

Name: jemi  ..ぴよぴよ(628ポイント)   Date: 2009/09/15(火) 11:29   No:39238 解決!     
Title: Re:分割コンパイルについて、質問です。    
すみません。
自己解決できました。

extern宣言と同時に初期化していた事が原因だったようです。

大変失礼致しました。


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



Name: nn  ..かけだし(1,082ポイント)   Date: 2009/09/13(日) 03:56   No:39168       
Title: JavaのJNI機能について質問    
JavaのJNIはC、C++で記述した関数をJavaでメソッドとして使える
という機能ですが、ここで質問があります。
JavaはVMのバージョンが同じであればどのマシンでも同じ動作が約束されています。
一方、C、C++はマシンによって動作が異なる場合があります。
ではもしCで記述した関数をJavaで呼び出す場合、この部分の処理はJavaで記述した処理と同様に
どのマシンでも同じ動作が約束されるのでしょうか。


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


Name: YuO  ..プログラマー(33,259ポイント)   Date: 2009/09/14(月) 04:09   No:39203     
Title: Re:JavaのJNI機能について質問    
JNIで呼び出される側は,環境に依存します。
なので,JNIを使えば確実にRun Everywhereではなくなります。


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

Name: nn  ..かけだし(1,096ポイント)   Date: 2009/09/14(月) 23:46   No:39230     
Title: Re:JavaのJNI機能について質問    
やっぱりそうなんですか。
ありがとうございました。


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

Name: nn  ..かけだし(1,111ポイント)   Date: 2009/09/14(月) 23:47   No:39231 解決!     
Title: Re:JavaのJNI機能について質問    
解決つけるの忘れてました。
すみません


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



Name: はね  ..中級者(12,741ポイント)   Date: 2009/09/04(金) 07:13   No:38783       
Title: 2面作成にあたって    
龍神録50章を利用して2面を作成してみようと思うのですが、
流れがよくわかりません。どんな感じの流れで
2面を作成すればいいかアドバイスがほしいです。
よろしくお願いします。


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


Name: ひよこ  ..熟練のプログラマー(48,669ポイント)   Date: 2009/09/04(金) 18:33   No:38796     
Title: Re:2面作成にあたって    
一面が終わったら画像や敵情報やレーザーなどを初期化して敵情報の読み込み、ボスの弾幕をstageをつかって
分ければいいと思います。


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

Name: はね  ..中級者(12,765ポイント)   Date: 2009/09/06(日) 01:42   No:38882     
Title: Re:2面作成にあたって    
1面ボス撃破後に
一面クリアボーナスをつけたいのですが、
このタイミングはいつ、どのcpp内で、その後stageを+したらいいでしょうか?


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,051,714ポイント)   Date: 2009/09/06(日) 03:36   No:38887     
Title: Re:2面作成にあたって    
う〜ん、2面を作ることについて、
何かの変数を少しいじればいいだけというわけにはいかないので、ここで全てあげることはできませんが、
一つ一つの処理の意味を考えていけば自ずと作り方が分かるのではないかと思います。

また、もう少し質問が具体的だと回答が得られやすいと思います。

そうですね〜、とりあえずどこを変更すればいいのかを考え、わからないことが出てきたらその都度そこを限定して質問されてはいかがでしょうか?


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

Name: はね  ..中級者(12,590ポイント)   Date: 2009/09/09(水) 13:36   No:39027     
Title: Re:2面作成にあたって    
さっそく分からないことがあったので教えてください><
2面に移行するときに次のうち、必ず初期化するべきものってどれなんでしょうか?

memset(&ch,0,sizeof(ch_t));
memset(&bom,0,sizeof(bom_t));
memset(&bright_set,0,sizeof(bright_set_t));
memset(&dn,0,sizeof(dn_t));
memset(&boss,0,sizeof(boss_t));
memset(&stage_title,0,sizeof(stage_title_t));
memset(&area,0,sizeof(area_t));//(48)
memset(&boss_shot,0,sizeof(boss_shot_t));
memset(option_bb,0,sizeof(option_bb_t)*2);//(49)
memset(enemy,0,sizeof(enemy_t)*ENEMY_MAX);
memset(lazer,0,sizeof(lazer_t)*LAZER_MAX);
memset(enemy_order,0,sizeof(enemy_order_t)*ENEMY_ORDER_MAX);
memset(shot,0,sizeof(shot_t)*SHOT_MAX);
memset(cshot,0,sizeof(cshot_t)*CSHOT_MAX);
memset(effect,0,sizeof(effect_t)*EFFECT_MAX);
memset(del_effect,0,sizeof(del_effect_t)*DEL_EFFECT_MAX);
memset(child,0,sizeof(child_t)*CHILD_MAX);
memset(item,0,sizeof(item_t)*ITEM_MAX);


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

Name: はね  ..中級者(13,369ポイント)   Date: 2009/09/09(水) 13:51   No:39028     
Title: Re:2面作成にあたって    

もう一つ質問です。
2面用のstoryH1を読み込むには
どうしたらいいのでしょうか?

//敵の出現情報をエクセルから読み込んで格納する関数
void load_story(){
int n,num,i,fp;
char fname[32]={"../dat/csv/敵データ/storyH0.csv"};
int input[64];
char inputc[64];

fp = FileRead_open(fname);//ファイル読み込み
if(fp == NULL){
printfDx("read error\n");
return;
}
for(i=0;i<2;i++)//最初の2行読み飛ばす
while(FileRead_getc(fp)!='\n');

n=0 , num=0;
while(1){
for(i=0;i<64;i++){
inputc[i]=input[i]=FileRead_getc(fp);//1文字取得する
if(inputc[i]=='/'){//スラッシュがあれば
while(FileRead_getc(fp)!='\n');//改行までループ
i=-1;//カウンタを最初に戻して
continue;
}
if(input[i]==',' || input[i]=='\n'){//カンマか改行なら
inputc[i]='\0';//そこまでを文字列とし
break;
}
if(input[i]==EOF){//ファイルの終わりなら
goto EXFILE;//終了
}
}
switch(num){
case 0: enemy_order[n].cnt =atoi(inputc);break;
case 1: enemy_order[n].pattern =atoi(inputc);break;
case 2: enemy_order[n].knd =atoi(inputc);break;
case 3: enemy_order[n].x =atof(inputc);break;
case 4: enemy_order[n].y =atof(inputc);break;
case 5: enemy_order[n].sp =atof(inputc);break;
case 6: enemy_order[n].bltime =atoi(inputc);break;
case 7: enemy_order[n].blknd =atoi(inputc);break;
case 8: enemy_order[n].col =atoi(inputc);break;
case 9: enemy_order[n].hp =atoi(inputc);break;
case 10:enemy_order[n].blknd2 =atoi(inputc);break;
case 11:enemy_order[n].wait =atoi(inputc);break;
case 12:enemy_order[n].item_n[0]=atoi(inputc);break;
case 13:enemy_order[n].item_n[1]=atoi(inputc);break;
case 14:enemy_order[n].item_n[2]=atoi(inputc);break;
case 15:enemy_order[n].item_n[3]=atoi(inputc);break;
case 16:enemy_order[n].item_n[4]=atoi(inputc);break;
case 17:enemy_order[n].item_n[5]=atoi(inputc);break;
}
num++;
if(num==18){
num=0;
n++;
}
}
EXFILE:
FileRead_close(fp);
}



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

Name: はね  ..中級者(13,401ポイント)   Date: 2009/09/09(水) 14:00   No:39029     
Title: Re:2面作成にあたって    
すみません。
2面用のstoryH1を読み込む処理は自己解決しました。


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

Name: はね  ..中級者(13,342ポイント)   Date: 2009/09/09(水) 15:13   No:39033     
Title: Re:2面作成にあたって    
1面から2面に切り替わるとき、
一瞬、全画面が暗くなるのですが、
暗くならない方法は皆さんはどうしてるのでしょうか?
よろしければ教えてください。


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

Name: さめ  ..ぴよぴよ(10ポイント)   Date: 2009/09/09(水) 20:43   No:39046     
Title: Re:2面作成にあたって    
切り替わらないようにする

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

Name: Dixq (管理人) [URL]  ..ウィザード(1,055,235ポイント)   Date: 2009/09/09(水) 20:48   No:39048     
Title: Re:2面作成にあたって    
えぇとまず初期化しないといけないものですが

memset(&ch,0,sizeof(ch_t));
これって自機のデータですよね。
自機の残り残機数などもここに含まれるのでは無いでしょうか?
ということは、2面になると残機数がリセットされるような仕様では無い限りまずいのでは?

memset(&bom,0,sizeof(bom_t));
残りボム使用回数などをここに持たせていないのなら初期化しても大丈夫かと。

後のはざっと見た感じ大丈夫なのでは無いかと思います。
要はデータを2面に引き継ぎたいものを初期化しなければいいのです。

スコアデータとか、アイテム取得数とか、残機数とか・・。
敵を倒した回数みたいな要素を追加したとしたらそういうのも初期化するべきではないでしょう。

初期化しないものはしないものでまとめて、
後はすっきり初期化できるようにプログラムを組んだ方がいいかもしれませんね。

後、1面から2面に変わるとき一瞬画面が暗くなると言う事は無いと思いますよ。
1面の終わりで画像データを解放し、2面にさしかかるときにロードしているとすれば、
その間の1フレームは画像データが無いことになるので(しかもロード中は真っ暗)、
そういう意味で暗いのではないでしょうか?
画像を解放し、かつ暗くしない方法としては「画面を消さない」かもしくは
「解放する前の画面をキャプチャして保存し、それを描画し続ける」とかでしょうか。

どのような構造でプログラムを組まれているかわかりませんが・・。


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

Name: Justy  ..伝説なるハッカー(419,075ポイント)   Date: 2009/09/10(木) 00:27   No:39066     
Title: Re:2面作成にあたって    

>2面に移行するときに次のうち、必ず初期化するべきものってどれなんでしょうか?

 この質問がでるということは各構造体や変数の役割を把握していない、
ということになります。

 まぁなんとなく動けばそれでいいのかもしれませんが、ここはじっくりと腰を据えて
構造体や変数の役割や意味、それがどこでどう使われているのかを把握することに
努めた方がいいのではないでしょうか。

 そこが把握できればこの問題は解決したも同然ですし、後々の修正や改良が
し易くなると思います。


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

Name: はね  ..中級者(13,458ポイント)   Date: 2009/09/11(金) 02:15   No:39098     
Title: Re:2面作成にあたって    
一日中考えた結果、
無事、自己解決しました。
一瞬画面が暗くなる原因は
func_stateに新しく200を新規で作成して、そこで新しい処理を追加してたので原因でした。

ただ、一つだけ解決できなかったことがあるのですが、
音楽のfadeoutってどうやるのでしょうか?
1面終了時に実装してみようと思いましたが、SEと違って
ChangeVolumeSoundMem( 32, sound_se[0] ) ;
みたいに音量自体、設定もできないので困ってます。


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

Name: かつのり  ..ぴよぴよ(41ポイント)   Date: 2009/09/12(土) 17:10   No:39149     
Title: Re:2面作成にあたって    
あれ?メイン音楽も
ChangeVolumeSoundMem( 32, sound_se[0] ) ;
でいいんじゃないですか?


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

Name: はね  ..中級者(13,482ポイント)   Date: 2009/09/14(月) 22:35   No:39228     
Title: Re:2面作成にあたって    
いえ、ChangeVolumeSoundMem( 32, sound_se[0] ) ;
自体ないですけど・・


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



Name: takerussu  ..ぴよぴよ(187ポイント)   Date: 2009/09/14(月) 10:10   No:39213       
Title: 無題    
初めて投稿いたします。

ゲーム製作の本を使ってゲームを作成しようとしました。
本に書かれているコードを打ち込んで、ビルドして実行したところ、
画像がうまく表示されません。
実行ファイルと同じフォルダに画像ファイルを置いています。
ただ、実行ファイルをダブルクリックして実行してみたときは画像が表示されます。
なぜ画像が表示されないのか、教えていただけないでしょうか?

OS:WindowsXP
コンパイラ:VisualC++ 2008 express edition
ライブラリ:DXライブラリ


#include"DxLib.h"

int WINAPI WinMain(HINSTANCE hI,HINSTANCE hP,LPSTR lpC,int nC)
{
ChangeWindowMode(TRUE);
if( DxLib_Init() == -1 )
{
return -1 ;
}

int ghandle=LoadGraph("test_jiki.bmp");
DrawGraph(296,224,ghandle,TRUE);

WaitKey();
DxLib_End() ;
return 0 ;
}


よろしくおねがいいたします。


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


Name: Mist  ..熟練のプログラマー(68,215ポイント)   Date: 2009/09/14(月) 10:22   No:39214     
Title: Re:無題    
Visual Studioから実行する場合は、slnファイルのある場所が起動時のフォルダになります。
Visual Studioの仕様です。


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

Name: takerussu  ..ぴよぴよ(252ポイント)   Date: 2009/09/14(月) 17:19   No:39217     
Title: Re:無題    
ご回答ありがとうございます。
コードの内容は変更せず、
slnファイルのあるフォルダ内に画像を移動して、
プログラムをビルド、実行すればよいということでしょうか?


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

Name: YuO  ..プログラマー(33,353ポイント)   Date: 2009/09/14(月) 18:42   No:39220     
Title: Re:無題    
プロジェクトのプロパティ - 構成プロパティ - デバッグ - 作業ディレクトリ
を設定する事で,起動時のカレントディレクトリは変更できます。

ただし,カレントディレクトリに依存する事はお勧めできません。
たとえばリリース後ショートカットを作った場合に,
ショートカットの「作業フォルダ」を変更する事で起動時のカレントディレクトリは変更されます。


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

Name: takerussu  ..ぴよぴよ(320ポイント)   Date: 2009/09/14(月) 21:43   No:39226 解決!     
Title: Re:無題    
起動時のカレントディレクトリを設定することで、
正しく画像が表示するようになりました。
ありがとうございました。

カレントディレクトリには常に頼らないようにします。


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



Name: でんすけ  ..ぴよぴよ(110ポイント)   Date: 2009/09/14(月) 07:25   No:39207       
Title: マウスを使ったショット    
初めまして。でんすけです。
マウスを使用して、常にマウスがある方向に向かってショットを撃てるように作りたいのですが、
どうしたらよいでしょうか?

DXライブラリとこちらのコードを使用させて頂いてます。
過程は21章まで終わらせてあります。


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


Name: kazuoni [URL]  ..ハッカー(104,892ポイント)   Date: 2009/09/14(月) 16:09   No:39216     
Title: Re:マウスを使ったショット    
GetMousePointでマウスの場所を取得して、
プレーヤーの座標(ショットの発射されるところ)
から取得した場所まで飛ばせば良いのではないでしょうか?


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

Name: でんすけ  ..ぴよぴよ(133ポイント)   Date: 2009/09/14(月) 20:50   No:39224 解決!     
Title: Re:マウスを使ったショット    
解決しました。
ありがとうございます。


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



Name: masu  ..ぴよぴよ(23ポイント)   Date: 2009/09/11(金) 10:26   No:39103       
Title: マウスでの選択について    
マウスで項目を左クリックすると項目におおじた画面に移動させるにはどうすればいいのでしょうか?

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


Name: conio  ..熟練のプログラマー(43,612ポイント)   Date: 2009/09/11(金) 12:16   No:39105     
Title: Re:マウスでの選択について    
-------------------------------------------------------------------------------
@クリックしたときの、カーソルの位置を取得する。
A取得したカーソルの位置が、項目が描画されている場所の範囲内にあるかを判定する。
B範囲内にあれば、それぞれの項目に応じた処理へ遷移させる。
-------------------------------------------------------------------------------

やり方は大体、こんな流れになると思います。


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

Name: masu  ..ぴよぴよ(87ポイント)   Date: 2009/09/11(金) 12:22   No:39106     
Title: Re:マウスでの選択について    
なるほどありがとうございます。

もうひとつわからないのがあるのですがデバック開始したら画面に何も映らなくて

何かキーを押すと映るのはどうしてでしょうか?


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

Name: conio [URL]  ..熟練のプログラマー(43,762ポイント)   Date: 2009/09/11(金) 22:17   No:39122     
Title: Re:マウスでの選択について    
画像を描画されるようなプログラムなのにもかかわらず、
何かキーを押さないと描画されない、という事ですかね?

ソースを見ないと良く分かりませんが、
----------------------------------------------------
・単純にDXライブラリのタイムラグ
・キーを押さないと描画されないプログラムになっている
----------------------------------------------------
これらの事が考えられます。

DXライブラリは、初めの描画がされるまでに少し時間がかかります。
一度、キーを何も押さずに描画されないか待ってみてください。


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

Name: masu  ..ぴよぴよ(102ポイント)   Date: 2009/09/14(月) 12:00   No:39215     
Title: Re:マウスでの選択について    
タイムラグとはなんでしょうか?

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



Name: 山崎  ..プログラマー(25,953ポイント)   Date: 2009/09/13(日) 15:42   No:39187       
Title: スコープを覗いた時のような拡大・縮小表示    
いつもお世話になっております、山崎です。
今回は、拡大・縮小表示についてお伺いに参りました。

現在、ライフルのスコープを覗いたときの様子をどう表現しようかと考えています。
スコープの倍率はできれば10倍くらいまで可能にしたいと考えています(最低でも5倍)。
また、3Dやポリゴンは可能であれば使用を避けたいと思っています。

精密な照準を必要とするゲームにしたいと考えているので、拡大して画像を荒くするのは避けたいと思っています。
スコープの倍率が最大の10倍のとき、用意した元の画像はそのままの大きさで描画され、
スコープを覗いていない時(倍率1倍)のとき、用意した元の画像は10分の1の大きさで描画される、
といった方式にしたいと思っています。
実質、画像を引き伸ばして描画するような拡大は無いことになります。
スコープの倍率は連続的で、倍率によってスコープから見える風景も
滑らかにズームイン・ズームアウトされるような仕様にしたいと考えています。

そこで、次のようなアルゴリズムを考えました。
1.MakeScreen()で元の画面サイズの10倍のサイズのサブ画面を用意する。
2.MakeGraph()で、元の画面サイズの10倍のサイズのグラフィック領域を用意する。
3.サブ画面に必要な風景を描画する。
4.GetDrawScreenGraph()で、スコープの倍率と焦点に応じた領域をサブ画面から切り取り、
  用意したグラフィックハンドルに保存しておく。
5.裏画面全体に切り取ったグラフィックを描画する。
6.ScreenFlip()
試しに、画面サイズ10倍ではなく3倍で実行してみたのですが、
3倍程度でもFPS=15前後と非常に重くなってしまいました。

以下が、試してみた際の主なコードです。倍率の変更や焦点の移動は省いています。
倍率1倍のときの見え方を想定したコードです。

//-----------最初に一度だけ実行する部分------------------
int SubScreen=MakeScreen(640*3,480*3);
int GHandle=LoadGraph("Test.PNG");//風景。画像サイズは640*3×480*3
int SubScreenHandle=MakeGraph(640*3,480*3);

//----------------ループする部分-------------------------
SetDrawScreen(SubScreen);
DrawGraph(0,0,GHandle,FALSE);//元の画像そのままの大きさで、サブ画面に風景を描画
GetDrawScreenGraph(0,0,640*3,480*3,SubScreenHandle);//倍率1倍のときを想定。風景全体を切り取る。
SetDrawScreen(DX_SCREEN_BACK);
DrawExtendGraph(0,0,640,480,SubScreenHandle,FALSE);//裏画面に切り取った風景を描画
ScreenFlip();

私の作ってみた上のコードでは、重くてとてもゲームになりません。
画像の拡大を行わず、縮小だけでズームイン・ズームアウトを表現するにはどうしたらよいでしょうか。


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


Name: Justy  ..伝説なるハッカー(423,796ポイント)   Date: 2009/09/13(日) 20:44   No:39196     
Title: Re:スコープを覗いた時のような拡大・縮小表示    

>私の作ってみた上のコードでは、重くてとてもゲームになりません

 そりゃまぁそうでしょうね。
 VGAサイズの時ですら GetDrawScreenGraph()はあまり軽い処理ではなく、
毎フレーム連続して使うようなものではないですから。
 縦横それぞれ 10倍もの面積を持っているならなおさらです。

 というわけで、まず4の処理を何とかして下さい。
 わざわざ切り取って新たなハンドル使わなくても SubScreenに必要な絵は
そろっているので後は DrawRectRotaGraphを使うとか
DrawPolygon / DrawPolygonBaseを使って UVで切り取って表示すればいいはずです。

 そすると、必然的に2のハンドルも不要になります。


 さて、これで重くなる原因の1つは無くなるのですが、これでも単純に
描画面積が大きいので重い可能性があります。

 VGAなら 0.3Mピクセルですが、縦横それぞれ10倍ともなると面積 100倍なので
30Mピクセルです。

 よほど豪華なシステムでもなければちょっと厳しいです。


 では、その場合どうするかというと、細かく説明すると話が長くなるので端的に纏めると
ソフト的に MIPMAP(異なる解像度のテクスチャを使い分ける)処理を行うことです。
(ケースによっては高解像度のテクスチャは複数に分割して持った方がいいかもしれません)

 あとはどのテクスチャを使用するかをズーム値から求め、内部座標からズーム値に合わせた
表示座標に変換して表示します。
 勿論、ズームの結果画面外であることが判ったら表示はしないようにします。

 描画先は従来通りサイズですし、無意味に不必要なところのレンダリングを
しないで済むのでそれなりに軽くなるはずです。


2倍のポイントを手に入れた! 1,542ポイント を手に入れた。

Name: 山崎  ..プログラマー(26,117ポイント)   Date: 2009/09/14(月) 09:12   No:39211 解決!     
Title: Re:スコープを覗いた時のような拡大・縮小表示    
Justyさん
ご返信、誠にありがとうございます。

やはり私のやり方では難しいようですね・・・。
さすがに10倍じゃ無理なのかなとは思っていましたが・・・。
高性能のパソコンで実行することを前提としたゲームではないので、
私のやり方での実装はあきらめる事にします。

しかしDrawRectRotaGraphなどを使うという方法は参考になりました。
また機会があれば是非とも使ってみたいと思います。

MIPMAPについて、自分でちょっと調べてみようと思います。
実装するのには私の腕ではだいぶ時間がかかりそうです。
解像度の違う絵を複数準備する、という発想はありませんでした。

いろいろ教えていただき本当にありがとうございました。


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



Name: zyf  ..入門者(3,615ポイント)   Date: 2009/09/13(日) 19:41   No:39192       
Title: 複数の条件が揃ったときに実行させたい。    
ch.xが100以上200以下、ch.yが300以上400以下かつZキーが押されているときに、
文字列Aと文字列Bを表示させたいのですが、どんな文を組めばいいのでしょうか?


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


Name: kazuoni [URL]  ..ハッカー(104,824ポイント)   Date: 2009/09/13(日) 20:37   No:39195     
Title: Re:複数の条件が揃ったときに実行させたい。    
if( (ch.x>=100 && ch.x<=200) && (ch.y>=300 && ch.y<=400) && ( Zキーが押されている ) )

{
cout << "文字列A" << endl;
cout << "文字列B" << endl;
}


とかですかね?


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,057,481ポイント)   Date: 2009/09/14(月) 06:28   No:39206     
Title: Re:複数の条件が揃ったときに実行させたい。    
「&&」=「かつ」
「||」=「または」

これが組み合わせられれば大抵の条件はクリア出来そうです。
掛け算と足し算のような優先順位なので、それぞれの優先順位に注意して下さい。


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



Name: ゆうすけ  ..ぴよぴよ(303ポイント)   Date: 2009/09/13(日) 14:52   No:39183       
Title: 無題    
#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ;//ウィンドウモードに変更する関数
if( DxLib_Init() == -1 ) return -1;//初期化処理する関数

LoadGraphScreen( 0 , 0 , "test1.bmp" , TRUE ) ;//画像を表示する関数

WaitKey() ;//何か入力があるまで待つ関数
DxLib_End() ;//終了処理をする関数
return 0 ;
}

これらをコンパイルしようと試みたところ、「指定されたファイルが見つかりません」というエラーが表示されました。

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

Microsoft Visual C++ 2008 Express Editionを使用しています。


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


Name: mnkr  ..かけだし(1,452ポイント)   Date: 2009/09/13(日) 15:41   No:39186     
Title: Re:無題    
test1.bmpが開けないのかな。。。

DxLib_VC2008_and_2005用.slnとtest1.bmpが
「サンプルプログラム実行用フォルダ」の中に一緒に入っていますか?



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

Name: ゆうすけ  ..ぴよぴよ(369ポイント)   Date: 2009/09/13(日) 20:56   No:39197     
Title: Re:無題    
迅速なお返事ありがとうございます。

確認したところ、DxLib_VC2008_and_2005用.slnとtest1.bmpは
「サンプルプログラム実行用フォルダ」の中に一緒に入っています。






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

Name: ゆうすけ  ..ぴよぴよ(977ポイント)   Date: 2009/09/13(日) 22:22   No:39201     
Title: Re:無題    
出力のウィンドウにはこのように表示されます。



------ ビルド開始: プロジェクト: DxLib_VC2005用, 構成: Debug Win32 ------
コンパイルしています...
test.cpp
c:\documents and settings\○○○\デスクトップ\dxlib_vc\サンプルプログラム実行用フォルダ\test.cpp(3) : error C2146: 構文エラー : ';' が、識別子 'WinMain' の前に必要です。
c:\documents and settings\○○○\デスクトップ\dxlib_vc\サンプルプログラム実行用フォルダ\test.cpp(3) : error C2065: 'HINSTANCE' : 定義されていない識別子です。
c:\documents and settings\○○○\デスクトップ\dxlib_vc\サンプルプログラム実行用フォルダ\test.cpp(3) : error C2146: 構文エラー : ')' が、識別子 'hInstance' の前に必要です。
c:\documents and settings\○○○\デスクトップ\dxlib_vc\サンプルプログラム実行用フォルダ\test.cpp(3) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
c:\documents and settings\○○○\デスクトップ\dxlib_vc\サンプルプログラム実行用フォルダ\test.cpp(3) : error C2059: 構文エラー : ')'
c:\documents and settings\○○○\デスクトップ\dxlib_vc\サンプルプログラム実行用フォルダ\test.cpp(3) : error C2143: 構文エラー : ';' が '{' の前にありません。
c:\documents and settings\○○○\デスクトップ\dxlib_vc\サンプルプログラム実行用フォルダ\test.cpp(3) : error C2447: '{' : 対応する関数ヘッダーがありません (旧形式の仮引数リスト?)
ビルドログは "file://c:\Documents and Settings\○○○\デスクトップ\DxLib_VC\サンプルプログラム実行用フォルダ\Debug\BuildLog.htm" に保存されました。
DxLib_VC2005用 - エラー 7、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========


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

Name: mnkr  ..かけだし(1,514ポイント)   Date: 2009/09/13(日) 23:12   No:39202     
Title: Re:無題    
一番最初のソースをこちらの環境で実行すると問題なく動くんですよね。。。。
設定とか環境の問題???
わたしにはわかりませんごめんなさいorz


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



Name: ディア  ..ぴよぴよ(140ポイント)   Date: 2009/09/12(土) 21:08   No:39158       
Title: コンパイルエラー    
BCC使用です。

Error: 外部シンボル 'ChangeWindowMode(int)' が未解決
Error: 外部シンボル 'DxLib_Init()' が未解決
Error: 外部シンボル 'SetDrawScreen(int)' が未解決
Error: 外部シンボル 'ScreenFlip()' が未解決Error: 外部シンボル 'ProcessMessage()' が未解決
Error: 外部シンボル 'ClearDrawScreen()' が未解決
Error: 外部シンボル 'GetHitKeyStateAll(char *)' が未解決
Error: 外部シンボル 'DxLib_End()' が未解決

というコンパイルエラーが出てしまいます・・・

2章のmain.cppの内容をコピペし、コンパイルした結果です。

解決させるにはどうしたらいいでしょうか?


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


Name: box  ..ハッカー(143,959ポイント)   Date: 2009/09/12(土) 22:13   No:39160     
Title: Re:コンパイルエラー    
> というコンパイルエラーが出てしまいます・・・

リンクエラーです。コンパイルエラーではありません。

> 2章のmain.cppの内容をコピペし、コンパイルした結果です。

main.cppだけでは、実行プログラムを作成できないのではないでしょうか。
未解決だといわれている関数群を含むソースファイルも、
いっしょにコンパイル・リンクする必要があるのではないでしょうか。


【リンクエラーとは】
main.cpp内のmain関数から、funcという関数を呼び出しているとします。
そして、func関数の定義はmain.cppには存在しないとします。

この状態で、main.cppだけから実行ファイルを作成しようとした場合を考えます。

main.cppをコンパイルすると、
「main関数から、どこかにあるfunc関数を呼び出すのだな」という情報を保持し、
コンパイルは正常に終了します。main.cppからのオブジェクトファイルができます。

次に、C言語の標準関数(例:printf)や、自作の関数群を
結合させて(リンク)、実行ファイルを作成しようとします。

このとき、func関数をコンパイルしたオブジェクトファイルが
見あたりませんので、リンカー(リンクを担当するプログラム)は
「func関数が未解決」という判断を下します。実行ファイルは作成できません。
これが、リンクエラーです。


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

Name: Hermit  ..プログラマー(25,578ポイント)   Date: 2009/09/13(日) 21:04   No:39199     
Title: Re:コンパイルエラー    
良くは見てませんが、
Error: 外部シンボル 'DxLib_Init()' が未解決
Error: 外部シンボル 'DxLib_End()' が未解決
があるので、DxLib が、正常にリンクできるように設定されていないのでは?

未解決といわれる関数郡を、コンパイルして、ライブラリにしたものが、DxLib の中に有ると思われますので、
それをリンク出来る状態にすればいけそうな気がしますが。
2章以前の、環境の設定の仕方を見直したほうがいい気がします。


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

Name: ディア  ..ぴよぴよ(171ポイント)   Date: 2009/09/13(日) 21:17   No:39200 解決!     
Title: Re:コンパイルエラー    
返答、有難うございます。

無事、解決することができました。


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



Name: kaiten  ..中級者(9,380ポイント)   Date: 2009/09/13(日) 20:14   No:39193       
Title: exitによる終了    
お久しぶりです。exitについて不安があるので質問させていただきます。

一般的にexitは使わずにmainなりWinMainなりでreturnするのがいいようなのですがそれだとどうも冗長になってしまう設計だったのでexitの使用を考えました。そこで質問なのですが、exitを使う上で気をつける点を教えてください。
現在、処理はGameクラスに丸投げしています。以下ソース。


class Game
{
public:
~Game();
static Game& CreateGame()
{
static Game game;
return game;
}

void Main();

static void End()
{
exit(0);
}

private:
Game();
};
--------------------------------------------
#include <windows.h>
#include "Game.h"

Game& game=Game::CreateGame();
int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lPc, int nC)
{
game.Main();
return 0;
}


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


Name: たかぎ [URL]  ..ハッカー(110,945ポイント)   Date: 2009/09/13(日) 20:28   No:39194     
Title: Re:exitによる終了    
exitを使うと、自動記憶域期間を持つオブジェクトのデストラクタが呼び出されません。
思わぬ不具合につながる恐れがありますので、決してお勧めはしません。


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

Name: kaiten  ..中級者(9,443ポイント)   Date: 2009/09/13(日) 21:01   No:39198 解決!     
Title: Re:exitによる終了    
やはり使わないほうがよいのですか……
static変数に丸投げしていたので平気かと思ったのですが、設計しなおすことにします。
ありがとうございました。


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



Name: 素人A  ..ぴよぴよ(873ポイント)   Date: 2009/09/13(日) 11:19   No:39176       
Title: 背景(マップなど)やキャラクターの拡大縮小を行いたい    
[1] 質問文
 こんにちは。素人Aと申します。
 3日間も悩んでしまったので投稿(投降ともいう)します。

 背景画像のサイズが画面サイズより大きい場合、
 全体を表示させたりキャラクターがいる範囲を拡大して表示させたりと、
 背景とキャラクターの位置関係を維持したまま、ズームアップしたりズームアウトしたいのですが、
 アルゴリズムが閃きません・・・。
 ヒントでも構いませんのでお教えください。ぺこ <(_ _)>


[2] 環境  
 [2.1] OS : Windows Xp sp3
 [2.2] コンパイラ名 : VC++ 2008EE
[3] その他
 ・どの程度C言語を理解しているか: 龍神録プログラミングの館50章まで。
 ・ライブラリを使っている場合は何を使っているか:DXライブラリ



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


Name: チルチル  ..熟練のプログラマー(50,344ポイント)   Date: 2009/09/13(日) 13:58   No:39178     
Title: Re:背景(マップなど)やキャラクターの拡大縮小を行いたい    
少し違いますが参考になるかもしれないので過去ログを・・

http://www.play21.jp/board/formz.cgi?action=res&resno=34385&page=&lognum=105&id=dixq&rln=34455


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

Name: Justy  ..伝説なるハッカー(422,180ポイント)   Date: 2009/09/13(日) 14:39   No:39181     
Title: Re:背景(マップなど)やキャラクターの拡大縮小を行いたい    

>背景とキャラクターの位置関係を維持したまま、ズームアップしたりズームアウトしたいのですが

 どう拡大するのかで、細かいところは変わってきますが、行列使えば簡単にできます。
 例えば画面中央で拡大するなら、(作るのが面倒なので)DXライブラリのを使って書くと

struct vector2
{
    float x;
    float y;
};

void GetScreenScalingVector(vector2 *out, const vector2 &in, float scale)
{
    if(!out)    return;
    
    MATRIX m, mOut;
    CreateIdentityMatrix(&mOut);
    
    CreateTranslationMatrix(&m, in.x-ScreenSize_Width*0.5f, in.y-ScreenSize_Height*0.5f, 0.f);
    CreateMultiplyMatrix(&mOut, &mOut, &m);
    
    CreateScalingMatrix(&m, scale, scale, 1.f);
    CreateMultiplyMatrix(&mOut, &mOut, &m);
    
    CreateTranslationMatrix(&m, ScreenSize_Width*0.5f, ScreenSize_Height*0.5f, 0.f);
    CreateMultiplyMatrix(&mOut, &mOut, &m);
    
    VECTOR vOut, v = {0, 0, 0};
    VectorTransform(&vOut, &v, &mOut);
    out->x = vOut.x;
    out->y = vOut.y;
}

という感じの処理で、引数 inに元の座標を、scaleに拡大率を入れると outに結果の位置が
格納されます。

 ちなみに vector2は座標を扱う構造体、ScreenSize_Width / ScreenSize_Heightは画面のサイズです。

 
 DXライブラリのは3D用なので計算コスト的には無駄な部分がありますが、
2D用のを作ればそのあたりは改善できるはずです。


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

Name: 素人A  ..ぴよぴよ(907ポイント)   Date: 2009/09/13(日) 19:33   No:39191     
Title: Re:背景(マップなど)やキャラクターの拡大縮小を行いたい    
返信ありがとうございます。
過去ログの質問と内容がまったく同じでした。
さっそく試してみたいと思います。


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



Name: APS  ..ぴよぴよ(192ポイント)   Date: 2009/09/12(土) 16:18   No:39147       
Title: 残機を減らす    
プログラミングの館を参考に作っていて
今回、自機の残機を減らせるようにしたいのですが、その場合はどうしたらいいんでしょうか?

ちなみに章は50章が終わったところです。

分かる方宜しくお願いします。


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


Name: zwi  ..入門者(4,446ポイント)   Date: 2009/09/12(土) 16:43   No:39148     
Title: Re:残機を減らす    
残機カウンタを追加して、

if(ch.cnt==0 && ch.flag==2){//今の瞬間死んだら
ch.x=FIELD_MAX_X/2;//座標セット
ch.y=FIELD_MAX_Y+30;
ch.mutekicnt++;//無敵状態へ
}

の自機の死亡処理で残機カウントをカウントダウンすれば良いと思います。
で、残機カウントが0ならGAME OVERなどに移行します。

>ちなみに章は50章が終わったところです。
50章まで終わったとの事ですが、50章までに出てくる全ての処理と変数の役割を理解したと考えてよいですね?


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

Name: APS  ..かけだし(1,630ポイント)   Date: 2009/09/13(日) 17:05   No:39190 解決!     
Title: Re:残機を減らす    
無事、実装する事ができました。


>50章まで終わったとの事ですが、50章までに出てくる全ての処理と変数の役割を理解したと考えてよいですね?
すべてとういうわけではありませんが、だいだいの事は理解できてきました。


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



Name: うっそ  ..かけだし(1,007ポイント)   Date: 2009/09/13(日) 15:17   No:39184       
Title: 何度もコードを書いてビルド、デバックを繰り返しているとフリーズするようになる    
初めまして。
こちらのサイトでゲームプログラミングについて
勉強させていただいているうっそと申します。


タイトルの通りですが、同サイト「ゲームプログラミングの館」
を参考に環境を整え、コーディングしておりましたが、
コード変更後ビルド→デバックを繰り返していると
青画が出て、PCがフリーズするようになってしまいました。


【手順】
1, Microsoft Visual C++ 2008 Express Edition Ver3.5 SP1 インストール
2, DirectX SDK (November 2008) インストール
3, VC++上で、2でインストールしたSDKのインクルードパスとライブラリのパスをこちらのサイトhttp://homepage2.nifty.com/natupaji/DxLib/dxuse_vc2008express.html
を参考に設定。(2.VisualC++ 2008 Express Edition でDXライブラリを使うための設定を行う
)
4, DXライブラリのダウンロード(http://homepage2.nifty.com/natupaji/DxLib/dxdload.html)より
VC++用のDXライブラリをDLし、展開する。
5, VC++を起動し、DxLib_VC2008_and_2005用.slnをドラッグ&ドロップしてプロジェクトを開く。
6, ゲームプログラミングの館入門編1〜16をコピーして実行、ゲーム基本編17〜21をコピーして実行。
7, 21のコードを変更してビルド→デバックを繰り返す。[※フリーズする]


手順4で展開したフォルダごと削除し、7で変更したコードを再度ビルド→デバックすれば
正常に実行するようになります。
この現象が1度起きると、手順4の作業をもう1度行わない限り、
コードをどの状態に戻して実行しても、同じように青画になってフリーズするようになってしまいます。
(フリーズが発生すると添付した画面のようになります)

また、プログラム実行時に、毎度ウィルスバスターが反応し
下記のようなメッセージを表示します。
・不審な変更を拒否しました
DxLib_VC2005用.exe(3024)がプログラム起動時にDLL(プログラムライブラリ)が
自動的にロードされるように、Windowsの設定を変更しようとしています。
ロードされるDLLによっては、お使いのコンピュータのセキュリティや
動作に重大な影響を与える場合があります。


症状、現象については以上になります。

解決方法、ノウハウ等ご存知の方がおられましたら
ご教授願えませんでしょうか。

よろしくお願い致します。


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


Name: Justy  ..伝説なるハッカー(422,254ポイント)   Date: 2009/09/13(日) 15:34   No:39185     
Title: Re:何度もコードを書いてビルド、デバックを繰り返しているとフリーズするようになる    
 ATI系のグラフィックスカードを使用していますか?

 もしそうならグラフィックスドライバが最新かどうか確認し、最新でなければそうみてして下さい。


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

Name: うっそ  ..かけだし(1,155ポイント)   Date: 2009/09/13(日) 16:57   No:39189 解決!     
Title: Re:何度もコードを書いてビルド、デバックを繰り返しているとフリーズするようになる    
> Justyさん

早速のご解答ありがとうとうございます。

ATI系のグラフィックカードです。

また、ドライバのバージョンを最新にしたところ、
フリーズすることがなくなりました!
(2003年購入当初からアップデートしていなかったようです・・・)

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


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



Name: ken  ..入門者(4,691ポイント)   Date: 2009/09/12(土) 01:45   No:39127       
Title: 酒飲天薫    
酒飲天薫の読み方と意味を教えてください
よろしくお願いします



Name: 通りすがり  ..上級者(17,498ポイント)   Date: 2009/09/13(日) 14:10   No:39179     
Title: Re:酒飲天薫    
ただの通りすがりですが、失礼をば。

此方でも調べてみましたが、情報を得ることは出来ませんでした。
これだけで断言するのも早計だとは思いますが、恐らくオリジナルの四字熟語では?
ただ、読みは「シュイン(オン)テンクン」だと思われます。


意味は、この四字熟語を作られた方に聞くのが一番早いでしょうね。

別段国語の知識が深い訳ではないですので、ご参考までに。


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

Name:  ..かけだし(1,352ポイント)   Date: 2009/09/13(日) 16:13   No:39188     
Title: Re:酒飲天薫    
失礼します

簡単に探してみましたが、該当するような言葉は存在しないように思います
(今、簡単に調べただけなので間違っているかもしれません)

考えられるのは、オリジナルの熟語か、字を間違えているのどちらかだと


自分なりに意読してみましたが
「酒飲みて天薫る」

お酒を飲んで酔いが回ってきた。気分が高揚してきて気持ちがいい

とかですかね
あくまで自分の勝手な考えなので、参考にはしないでください


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



Name: ゆうすけ  ..ぴよぴよ(16ポイント)   Date: 2009/09/13(日) 03:50   No:39167       
Title: DxLib_VC2008_and_2005用.slnが開けず    
一番最初のステップであるDxLib_VC2008_and_2005用.slnを開くという指示ですが、ダブルクリックしても反応がありません。

その代わり横にあるDxLib_VC2003用.slnは開くことが出来ます。

拡張子はすべて表示させている状態です。

この現象が発生する理由は何なのでしょうか。


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,056,537ポイント)   Date: 2009/09/13(日) 08:07   No:39170     
Title: Re:DxLib_VC2008_and_2005用.slnが開けず    
一度
VisualStudioを「全てのプログラム」から開いておき、メニューの「開く」から開くか、
その画面にドロップして開いてみてはどうでしょうか?


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

Name: ゆうすけ  ..ぴよぴよ(35ポイント)   Date: 2009/09/13(日) 14:15   No:39180     
Title: Re:DxLib_VC2008_and_2005用.slnが開けず    
解決しました。

ありがとうございます。


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

Name: ゆうすけ  ..ぴよぴよ(46ポイント)   Date: 2009/09/13(日) 14:48   No:39182 解決!     
Title: Re:DxLib_VC2008_and_2005用.slnが開けず    
解決しました。

ありがとうございます。


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



Name: 鈴木萌々  ..かけだし(1,132ポイント)   Date: 2009/09/12(土) 17:20   No:39151       
Title: 無題    
あともう一つあるのでこちらも…

【問題3】

以下のCプログラムを良く読み,下記の問に対する解答を電子メールで提出せよ.

/*
???といった機能を持つプログラム
*/
#include <stdio.h>
#define IN 1
#define OUT 0
main()
{
int c;
int lastchar;
int status;
lastchar = '\n';
status = OUT;
while ( ( c=getchar() ) != EOF ) {
if ( lastchar == '\n' ) {
if ( c == '#' )
status = IN;
else
status = OUT;
}
if ( status == IN )
putchar(c);
lastchar = c;
}
}


(1) 上記プログラムは,どのような機能を持ったプログラムか?簡潔に説明せよ.
(ヒント: 上記プログラムをコンパイル・リンクした後,リダイレクションの機能を使ってソースプログラム自身を読み込ませてみて,結果を見てみよ.
その際,上記ソースプログラムの左端に寄っている行はその通りになっているようにしておくこと.)

(2) なぜ上記プログラムは,(1)の解答のような動作をするのか?それがわかるように,プログラムの構造を説明せよ.
(「他人に解説する」ことを思い描いて,全体的な流れ,各行の説明等をなるべくわかりやすく記述せよ.)

* report2の例と,実行例.
 実行プログラムの名前を a.out 以外にしたいときは,下の例のように gcc コマンドの -o オプションを利用できる.
report2の例
#!/bin/sh
cd ~/programs
# プログラムの表示
echo
echo "==============================="
echo "= report2_0.c の表示 ="
echo "==============================="
cat report2_0.c
# コンパイル・リンク
gcc -o report2_0 report2_0.c
# プログラムの実行
echo
echo "==============================="
echo "= プログラムの実行 ="
echo "= report2_0 ="
echo "==============================="
./report2_0
report2の実行例
(太字がコマンド,
斜体が出力)
eduws1% cd
eduws1% scripts/report2
===============================
= report2_0.c の表示 =
===============================
#include <stdio.h>
main()
{
〜〜〜 略 〜〜〜
}
===============================
= プログラムの実行 =
= report2_0 =
===============================
Xa Xc Xb 誤差 Ya Yc Yb
0.0000000 0.5000000 1.0000000 0.5000000 -0.5000000 -0.3750000 0.5000000
0.5000000 0.7500000 1.0000000 0.2500000 -0.3750000 -0.0781250 0.5000000
0.7500000 0.8750000 1.0000000 0.1250000 -0.0781250 0.1699219 0.5000000
〜〜〜 略 〜〜〜
eduws1%



お暇な方いらしたらぜひ助けていただけると泣いて喜びます;


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


Name: conio [URL]  ..熟練のプログラマー(43,952ポイント)   Date: 2009/09/12(土) 19:41   No:39155     
Title: Re:無題    
これは、実行すれば 簡単に分かると思います。

それと(2)に関しては、記述式です。
あなたの言葉で、適切な説明を考えればよいでしょう。


あと、『C言語何でも質問サイト〜疑問・宿題解決します〜 』というタイトルではありますが、
丸投げは禁止されています。

あくまでも「分からない部分の説明や、指摘などをして解決へ導く」と言う趣旨であって、
「宿題書いておくから、代わりに●日までにやっておいてね。」
というようなものではありません。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,057,084ポイント)   Date: 2009/09/13(日) 08:24   No:39173     
Title: Re:無題    
これは問題となっている文章をコピペしただけでしょうか?
不必要な文章が含まれていたり、問題や回答について全く自分の言葉が入っていないと
完全に「丸投げ」となってしまい、大抵の掲示板で禁止されている行為になってしまいます。

「忙しいは理由にならない、そうなったのは自分のせいだ」という考え方が一般的であろうかとは思いますが、
そうは言っても私自身学生時代締め切り前になってからジタバタしたり半泣きで徹夜しながら
レポート書いた事もよくあり、お気持ちはよくわかります。

しかしどうしようもなくても、なるべく規約に沿う事はやっていただけるのでは無いかと思います。
タグを使ったり、先生から出された文章完全コピーではなく、自分の言葉を入れたり。
トピの題名はきちんと付けたり、自分はどこまでわかるのか補足を入れたり。
「やる気」の姿勢を見せることで、回答者様も親身になってくれると思います。

不必要な部分というのは「これをメールに添付して提出せよ」とか「上のプログラムを完全にコピーして実行してみよ」とかです。
長文になるときは特に、不必要な部分を削除して回答者が読む手間を省くようにした方がいいと思います。

18日ということはまだ一週間ありますよね。
まずは「どこまでやってどこがわからないのか」を明確にしませんか?
それから単に「やってみよ」系の問題も結構ありますが、実際にコンパイルして確認してみましたか?

質問の仕方がわからないようでしたら、規約にテンプレートがあるのでお使い下さい。


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




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +