C言語何でも質問掲示板


Total hit  今日  昨日  

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

 
   まとめてヘッダーのイ ....   
     ・[47384] softya 
     ・[47401] たかぎ 
     ・[47415] 山口 
     ・[47445] 山口 
   topコマンド後の構造体 ....   
     ・[47426] Ma 
     ・[47428] FullMoon 
     ・[47429] Ma 
     ・[47443] dic 
   リリースビルドでの動 ....   
     ・[47431] MNS 
     ・[47432] Justy 
     ・[47438] kaiten 
   ボスが一定時間ごとに ....   
     ・[47403] yrao 
     ・[47408] サンタクロース 
     ・[47410] yrao 
     ・[47412] サンタクロース 
     ・[47413] サンタクロース 
   スペースを含む文を取 ....   
     ・[47405] mnkr 
     ・[47406] かげろう 
     ・[47409] kazuoni 
   スペルプラクティスの ....   
   関数   
     ・[47308] Dixq (管理人) 
     ・[47309] non 
     ・[47310] Dixq (管理人) 
     ・[47311] kerotan0820 
     ・[47312] non 
     ・[47315] SooA 
     ・[47316] dic 
     ・[47323] kerotan0820 
     ・[47400] kerotan0820 
   弾の重なり方について   
     ・[47391] fatens 
     ・[47392] ルート 
     ・[47394] Dixq (管理人) 
     ・[47398] ft 
   斜めの移動量について   
     ・[47290] mats 
     ・[47291] Dixq (管理人) 
     ・[47326] シャープシューター  
     ・[47347] シャープシューター 
     ・[47364] softya 
     ・[47378] シャープシューター 
     ・[47382] dic 
     ・[47383] softya 
     ・[47387] Dixq (管理人) 
   初心者の質問です   
     ・[47294] 通りすがり 
     ・[47386] たつのしん 
   warning LNK4098...   
     ・[47336] Justy 
     ・[47376] dom 
     ・[47381] Justy 
     ・[47385] dom 
   シーンごとのソース管 ....   
     ・[47338] Justy 
     ・[47340] おむすび 
     ・[47341] kazuoni 
     ・[47342] おむすび 
     ・[47343] Justy 
     ・[47346] omusubi 
     ・[47374] Justy 
     ・[47377] おむすび 
   柔軟に対応できる描画 ....   
     ・[47335] kazuoni 
     ・[47339] たいちう 
     ・[47373] dic 
   ソースコードを書く手 ....   
     ・[47359] mnkr 
     ・[47360] SooA 
     ・[47361] SooA 
     ・[47362] キム・ゾン 
   DLLをかきなおしたい。 ....   
     ・[47275] ベリ工 
     ・[47303] 初心者T 
     ・[47330] ベリ工 
     ・[47332] 初心者T 
     ・[47356] ベリ工 
   画像の輪郭を強調する   
     ・[47267] kazuoni 
     ・[47277] RAZ 
     ・[47282] たいちう 
     ・[47283] Ma 
     ・[47284] RAZ 
     ・[47298] SooA 
     ・[47300] kazuoni 
     ・[47302] kazuoni 
     ・[47320] バグ 
     ・[47327] RAZ 
     ・[47334] kazuoni 
   デバック用の表示関数   
     ・[47331] Justy 
   自機の移動について   
     ・[47048] sizuma 
     ・[47078] たこやき 
     ・[47080] sizuma 
     ・[47081] softya 
     ・[47092] takoyaki 
     ・[47093] たこやき 
     ・[47094] softya 
     ・[47097] たこやき 
     ・[47098] shilfia 
     ・[47099] softya 
     ・[47103] たこやき 
     ・[47114] softya 
     ・[47126] fatens 
     ・[47127] softya 
     ・[47128] たこやき 
     ・[47130] たこやき 
     ・[47131] softya 
     ・[47133] fatens 
     ・[47140] たこやき 
     ・[47142] fatens 
     ・[47144] たこやき 
     ・[47145] softya 
     ・[47164] たこやき 
     ・[47165] softya 
     ・[47167] たこやき 
     ・[47171] たこやき 
     ・[47172] softya 
     ・[47173] たこやき 
     ・[47174] softya 
     ・[47175] たこやき 
     ・[47176] softya 
     ・[47177] たこやき 
     ・[47181] softya 
     ・[47183] たこやき 
     ・[47190] softya 
     ・[47193] たこやき 
     ・[47196] たこやき 
     ・[47197] softya 
     ・[47198] たこやき 
     ・[47199] softya 
     ・[47200] たこやき 
     ・[47204] softya 
     ・[47208] たこやき 
     ・[47215] じゅんだった 
     ・[47216] たいちう 
     ・[47219] softya 
     ・[47236] たこやき 
     ・[47322] たこやき 
   FPSについて   
     ・[47217] fatens 
     ・[47218] softya 
     ・[47242] たこやき 
     ・[47243] fatens 
     ・[47257] たこやき 
     ・[47262] たこやき 
     ・[47263] たこやき 
     ・[47264] fatens 
     ・[47265] たこやき 
     ・[47269] softya 
     ・[47271] たこやき 
     ・[47272] たこやき 
     ・[47274] softya 
     ・[47286] たこやき 
     ・[47287] たこやき 
     ・[47288] たこやき 
     ・[47307] fatens 
     ・[47317] たこやき 
     ・[47318] fatens 
     ・[47319] たこやき 
     ・[47321] たこやき 
   途中まで完成しました   
     ・[47238] Tororo 
     ・[47239] ひよこ 
     ・[47246] mnkr 
     ・[47313] dic 
     ・[47314] dic 
   warning D9035 : オプ ....   
     ・[47301] kazuoni 
     ・[47306] メリ 
   構造体のプログラムの ....   
     ・[47226] softya 
     ・[47227] たかぎ 
     ・[47229] non 
     ・[47231] dic 
     ・[47232] りまぶぅ 
     ・[47276] ムンバ 
     ・[47281] ムンバ 
     ・[47304] 初級者 
   youtubeのようなサイト ....   
     ・[47146] softya 
     ・[47148] たかぎ 
     ・[47152] dic 
     ・[47155] さだはる 
     ・[47158] たかぎ 
     ・[47159] softya 
     ・[47160] たいちう 
     ・[47162] 通りすがり 
     ・[47178] dic 
     ・[47180] softya 
     ・[47182] array 
     ・[47184] Justy 
     ・[47188] light 
     ・[47195] lbfuvab 
     ・[47228] さだはる 
     ・[47230] dic 
     ・[47285] みつぎ 
   リスト構造プログラム ....   
     ・[47013] sizuma 
     ・[47042] box 
     ・[47049] sizuma 
     ・[47233] buttrfly 
     ・[47234] non 
     ・[47235] buttrfly 
     ・[47240] non 
     ・[47241] non 
     ・[47268] box 
     ・[47280] buttrfly 
   しつもんです。   
     ・[47247] たいちう 
     ・[47266] たかぎ 
   isalphaとtolowerを使 ....   
     ・[47250] non 
     ・[47259] たかぎ 
   アプリケーションが正 ....   
     ・[47150] たかぎ 
     ・[47185] rokoroko 
     ・[47186] Justy 
     ・[47209] rokoroko 
     ・[47213] じゅんだった 
     ・[47220] Justy 
   判定プログラム   
     ・[47206] sizuma 
     ・[47207] Libra 
   円形に弾を配置する方 ....   
     ・[47107] lbfuvab 
     ・[47109] Dixq (管理人) 
     ・[47111] yrao 
     ・[47113] yrao 
     ・[47115] Dixq (管理人) 
     ・[47116] Dixq (管理人) 
     ・[47117] 組木紙織 
     ・[47118] あ〜る 
     ・[47201] yrao 
     ・[47202] yrao 
   画面のちらつきについ ....   
     ・[47123] no 
     ・[47124] kazuoni 
     ・[47194] no 
   数値が勝手に変わって ....   
     ・[47169] MNS 
     ・[47170] ひよこ 
   キャラとコインの当た ....   
     ・[46963] wing 
     ・[46965] wing 
     ・[46966] wing 
     ・[46973] SooA 
     ・[46974] sizuma 
     ・[46981] wing 
     ・[46982] kazuoni 
     ・[46983] wing 
     ・[46986] kazuoni 
     ・[47000] wing 
     ・[47166] wing 
   関数不足?(ゲームプ ....   
     ・[47161] SooA 
     ・[47163] ムンバ 
   fopen"ab"で書き込まれ ....   
     ・[47147] softya 
     ・[47151] たかぎ 
     ・[47156] 青熊 
     ・[47157] 青熊 
   C++からCに   
     ・[47050] sizuma 
     ・[47068] MNS 
     ・[47075] sinrei 
     ・[47077] sizuma 
     ・[47079] non 
     ・[47153] sinrei 
   【雑談】最近話題の画 ....   
     ・[46957] Ma 
     ・[46959] kazuoni 
     ・[46968] Ma 
     ・[46977] kazuoni 
     ・[46979] 通りすがり 
     ・[47002] Ma 
     ・[47105] Dixq (管理人) 
     ・[47134] Ma 
   誤字報告   
     ・[47100] shilfia 
     ・[47104] Dixq (管理人) 
     ・[47129] ムンバ 
   string系関数について   
     ・[47046] softya 
     ・[47121] no 
   ソースファイルを削除 ....   
     ・[47084] box 
     ・[47087] softya 
     ・[47089] SooA 
     ・[47119] あま 
   文字列操作<改行が ....   
     ・[46940] box 
     ・[46945] dic 
     ・[46980] フリオ 
     ・[47108] 白 
   自機をボスから遠ざけ ....   
     ・[47067] Libra 
     ・[47069] yrao 
     ・[47072] Libra 
     ・[47085] yrao 
     ・[47101] Libra 
     ・[47102] yrao 
   龍神録プログラミング ....   
     ・[47070] non 
     ・[47071] hide 
     ・[47073] 御津凪 
     ・[47074] non 
     ・[47076] hide 
   数式の文字列の処理   
     ・[47052] SooA 
     ・[47053] Ma 
     ・[47055] Ma 
     ・[47056] non 
     ・[47057] Ma 
     ・[47058] たいちう 
     ・[47059] SooA 
     ・[47060] Ma 
     ・[47061] softya 
     ・[47062] Ma 
     ・[47063] Ma 
     ・[47064] Ma 
   無題   
     ・[46999] no 
     ・[47004] SooA 
     ・[47007] Ma 
     ・[47022] SooA 
     ・[47027] Ma 
     ・[47031] SooA 
     ・[47037] no 
     ・[47044] no 
   listによるバグ。   
     ・[47003] Ma 
     ・[47018] KKXY 
     ・[47036] KKXY 
   PNGの情報を...   
     ・[47034] softya 
   CreateFile関数のハン ....   
     ・[46993] MNS 
     ・[47032] dic 

Name: 山口  ..ぴよぴよ(610ポイント)   Date: 2010/01/30(土) 13:24   No:47379       
Title: まとめてヘッダーのインクルード    
Gameのプログラムではないです。
現在、大学でプログラムを書いております。
ただ問題が御座いましてかなりヘッダーファイルが多いです・・・。
新しいソースを追加する時にもヘッダーをインクルードするだけで
10個近くコピペしております。

これを改善するために一個のヘッダーをインクルードしたら
指定してあるヘッダーをすべてインクルードしたことと同じ扱いにしたいのですが
こういったことは可能なのでしょうか?

環境
C++
VS2005 
XP


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


Name: softya  ..ハッカー(111,473ポイント)   Date: 2010/01/30(土) 13:33   No:47384     
Title: Re:まとめてヘッダーのインクルード    
出来ますが、不要なヘッダをリンクするとコンパイルが遅くなりますよ。

方法としては、専用のヘッダファイルに全部の#includeだけを書いてしまえば良いです。各cppでは、そのヘッダファイルだけを#includeします。

出来ればしないことをお薦めしますが、単にコピペしまくっているなら変わらないかも知れませんね。


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

Name: たかぎ [URL]  ..ハッカー(157,260ポイント)   Date: 2010/01/30(土) 18:50   No:47401     
Title: Re:まとめてヘッダーのインクルード    
Visual C++なら、StdAfx.hに全部書いてしまうというのもひとつの手です。
ただし、そのヘッダファイルを度々修正するのであれば、止めた方がよいでしょうね。


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

Name: 山口  ..ぴよぴよ(623ポイント)   Date: 2010/01/30(土) 22:59   No:47415     
Title: Re:まとめてヘッダーのインクルード    
できました><
ありがとうございます><


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

Name: 山口  ..ぴよぴよ(633ポイント)   Date: 2010/01/31(日) 20:52   No:47445 解決!     
Title: Re:まとめてヘッダーのインクルード    
マーク付けます><

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



Name: FullMoon  ..ぴよぴよ(89ポイント)   Date: 2010/01/31(日) 04:00   No:47423       
Title: topコマンド後の構造体への保存    
こんにちは。

質問なんですがtopコマンドを用いることによって
ロードアベレージやプロセスの状態を確認できると思うのですが
各数値をC言語で構造体の中へ保存がしたいのですが
どういった方法があるでしょうか?

struct node_data{
   int average1;1分前のロードアベレージ
   int average5;5分前のロードアベレージ
   int average15;15分前のロードアベレージ
};
みたいな感じです。
ようは数字をだけを構造体の中の変数にどんどん詰め込めばいいと思うのですが・・・
よろしければ参考のソースコードもあると幸いです。


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


Name: Ma  ..熟練のプログラマー(40,364ポイント)   Date: 2010/01/31(日) 06:30   No:47426     
Title: Re:topコマンド後の構造体への保存    
|=========================
|========== 【警告】 ==========
| 
|   あなたは規約違反を犯しています。
|
|  規約を必ず読んでから投稿してください。
|    マルチポストは、違反です。
| 解答を得るには、他所でのポストを消してください。
|
|========== 【警告】 ==========
|=========================


ちょっとがんばってみた(苦笑) 編集済み


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

Name: FullMoon  ..ぴよぴよ(94ポイント)   Date: 2010/01/31(日) 06:49   No:47428     
Title: Re:topコマンド後の構造体への保存    
大変失礼しました

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

Name: Ma  ..熟練のプログラマー(40,713ポイント)   Date: 2010/01/31(日) 07:18   No:47429     
Title: Re:topコマンド後の構造体への保存    
C++しか知らないので回答にならないかもしれません、まず、それはすいません。
(それから、topコマンドとかサーバーについては詳しくありません。)

質問内容は、つまり可変長のデータの保存方法、ということでしょうか?

C++なら
std::vector
とか、可変のデータ量を保存するなら標準ライブラリを活用するのが(私にとって)一番簡単。
http://www.geocities.jp/ky_webid/cpp/library/002.html

それ以外なら、new を使って保存してます。サイズが足りなくなったら随時 新しく new するとか。


C言語なら、malloc とか活用するとよさそうです。
http://seclan.dll.jp/c99d/c99d04.htm
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1433263519


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

Name: dic  ..熟練のプログラマー(50,425ポイント)   Date: 2010/01/31(日) 20:15   No:47443     
Title: Re:topコマンド後の構造体への保存    
こういう方法があります
#include    <stdio.h>

struct node_data{ 
   int average1;//1分前のロードアベレージ 
   int average5;//5分前のロードアベレージ 
   int average15;//15分前のロードアベレージ 
}; 

int    main()
{
    struct node_data    data[100];
    struct node_data    buf;

    buf.average1 = 1;
    buf.average5 = 5;
    buf.average15 = 15;

    data[0] = buf;

    return 0;
}



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



Name: kaiten  ..中級者(9,903ポイント)   Date: 2010/01/30(土) 23:48   No:47416       
Title: リリースビルドでの動作不良    
自力で解決できる気がしないので質問させていただきます。
息抜きにシーン遷移のプログラムを作っていたのですが、デバッグビルドでは正常に動くのにリリースビルドだとアクセス違反が起こるという状況になってしまいました。
デバッグ情報を付加して試してみたところxtree内にあるinsertで問題が起きているようです。
エラーが発生するのはGame.cpp内のvoid GameSystem::StringInit()のSET_STRING(Sceneitle);です。マクロの内部でSetStringChange<Sceneitle>("Sceneitle");を呼んでおり、この時にアクセス違反が起きているようです。
ソースはまとめてzipにして添付します。当方の環境に問題があるのかそれ以外なのかすらわからないのでこのようにさせていただきました。
考えうる原因とその対処法を教えていただけると幸いです。
環境はvista、VC++2008EESP1、DxLib使用です。

別件なのですが、ResEditを使って画像をリソース化したところ奇妙な画像になってしまったのでこちらも教えていただけると幸いです。画像は少なくともデバッグ版なら見れると思います。右側が正常な画像です。


追伸:重すぎたのでソースのみzipにして添付しました 編集済み


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


Name: MNS  ..プログラマー(30,639ポイント)   Date: 2010/01/31(日) 09:46   No:47431     
Title: Re:リリースビルドでの動作不良    
void Change<SceneEnd>(){stack.Change(new SceneEnd(manager) );}
この関数について、例外処理を組み込んでみて、newの確保に失敗していないかどうか、調べてみてください。


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

Name: Justy  ..伝説なるハッカー(497,674ポイント)   Date: 2010/01/31(日) 12:54   No:47432     
Title: Re:リリースビルドでの動作不良    
 えーと、DxLibPCH.hで _SECURE_SCL定義をしていますが、これをするなら
全てのソースで行って下さい。

 xtreeの insertということは多分 std::mapだと思いますが、これがインスタンス化された
ときのソースと、実際に使用しようとしたときのソースでこの定義があるかないかで、
std::mapの中身が変わります。

 そこで insertを呼び出そうとしておかしくなったのではないでしょうか。

CRT セキュリティ強化対応: RH1FFT blog
http://cessna373.asablo.jp/blog/2008/01/03/2543708


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

Name: kaiten  ..中級者(10,075ポイント)   Date: 2010/01/31(日) 15:13   No:47438 解決!     
Title: Re:リリースビルドでの動作不良    
おかげさまで解決しました
本題は解決したので解決マーク付けておきます。

>>MNSさん
試してみましたがnewの例外は出ていなかったようです。
例外処理は苦手で避けていたのですが今後はまずやってみようと思います。ありがとうございました。

>>Justyさん
_SECURE_SCLを取り除いてみたところ正常に動作しました。説明の載っているページまでありがとうございました。


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



Name: サンタクロース  ..入門者(2,818ポイント)   Date: 2010/01/30(土) 19:28   No:47402       
Title: ボスが一定時間ごとに移動することについて    
こんばんは。
龍神録さんのところではボスの移動にinput_phy_pos()を使っていますよね。
そこで一定時間ごとにある範囲内で、ランダムに移動させるにはどうすればよいでしょうか? 編集済み


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


Name: yrao  ..上級者(21,184ポイント)   Date: 2010/01/30(土) 20:25   No:47403     
Title: Re:ボスが一定時間ごとに移動することについて    
サンタクロースさんこんばんは^ ^
 
携帯からの投稿であるため、詳しく書けないのですが 
if(boss_shot.cnt%300==0){
    input_phy_pos(・・・);
}

のようにすればよいと思いますよ。

上記の場合は、boss_shot.cntを300で割った余りが0になったときに処理を行うようにしています。

余りの値は、0から1ずつ増えていき、299まで増えると次は再び0に戻ります。
なので300カウント(=5秒)ごとに処理を行うことになります。 編集済み


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

Name: サンタクロース  ..入門者(2,724ポイント)   Date: 2010/01/30(土) 21:18   No:47408     
Title: Re:ボスが一定時間ごとに移動することについて    
yraoさん。回答ありがとうございます^^
そして僕の質問が説明不足だったみたいですね。
実は、一定時間ごとに、ある決められた範囲から出ないように移動させるにはというものでした。
誤解を招いてしまってすみません。


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

Name: yrao  ..上級者(21,547ポイント)   Date: 2010/01/30(土) 21:48   No:47410     
Title: Re:ボスが一定時間ごとに移動することについて    

ボスの移動について、書いてませんでしたねf^_^;
申し訳ないです。
 
 
move_boss_pos(double x1, double y1, double x2, double y2, double dist, int t )
という関数がありませんか?
これは、

指定したx,y座標の範囲内で、指定した移動距離を指定した移動時間を指定して移動させる

という関数です。
 
input_phy_pos関数の代わりに、この関数を使ってみても良いかもしれません。


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

Name: サンタクロース  ..入門者(2,740ポイント)   Date: 2010/01/30(土) 22:32   No:47412     
Title: Re:ボスが一定時間ごとに移動することについて    
ありがとうございます。
こんな関数があるなんてすっかり忘れていました;
この関数はかなり便利そうですね


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

Name: サンタクロース  ..入門者(2,752ポイント)   Date: 2010/01/30(土) 22:34   No:47413 解決!     
Title: Re:ボスが一定時間ごとに移動することについて    
解決をつけわすれました

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



Name: かげろう  ..ぴよぴよ(28ポイント)   Date: 2010/01/30(土) 20:31   No:47404       
Title: スペースを含む文を取り出したい    
文字列の配列に、2つの英文が入っていて、
それを別々に取り出したいのです。
しかし英文ゆえに半角スペースがあり、sscanf関数ではうまくいきません。

例をあげます。
  char str1[100] = "Thank you. You are welcome." ;
  char str2[100];
  char str3[100];

  sscanf(str1,"%s %s",str2,str3);

以上の結果、 str2が「Thank you.」 str3が「You're welcome.」 になってくれると嬉しいのですが、残念ながら str2が「Thank」 str3が「you.」 になってしまうのです。 半角スペースがクセモノです。 どういった工夫を施せばよいでしょうか? ちなみに、
  char str1[100] = "Thank you._You are welcome." ;
  char str2[100];
  char str3[100];

  sscanf(str1,"%s_%s",str2,str3);


このようにアンダーバーをはさんでみましたが駄目でした。


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


Name: mnkr  ..入門者(4,124ポイント)   Date: 2010/01/30(土) 20:42   No:47405     
Title: Re:スペースを含む文を取り出したい    
split関数はどうでしょうか?
・・・と調べたらCには無いのでstrtok関数を使うと良いみたいです。

参考URLをぺたり
http://networkprogramming.blog18.fc2.com/blog-entry-89.html


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

Name: かげろう  ..ぴよぴよ(0ポイント)   Date: 2010/01/30(土) 20:51   No:47406 解決!     
Title: Re:スペースを含む文を取り出したい    
こんな関数があったんですね…知りませんでした。
あとは自分で頑張ろうと思います。

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


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

Name: kazuoni [URL]  ..ハッカー(132,297ポイント)   Date: 2010/01/30(土) 21:34   No:47409     
Title: Re:スペースを含む文を取り出したい    
これは根本の解決ではない気がしますが・・・

英文を抜き出すという事ですよね?
どこで一つの英文とみなすかが分かりませんが、
ピリオド(.)で一文とするならば、
一文字づつ配列に出力していき、ピリオドが来たら終わりとする
とすれば、一応は題意を満たすと思うのですが・・・?


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



Name: yrao  ..上級者(21,438ポイント)   Date: 2010/01/30(土) 21:17   No:47407       
Title: スペルプラクティスの実装    
こんばんは。

おかげさまでボス弾幕の制作も一通り終えることができました。
 
現在、スペルプラクティスモードを作りたいと考えているのですが、実装方法がよく分かりません;
 
スペルプラクティスというのは、東方永夜抄や龍神録などにある、「選択した弾幕を単体でプレイできる」という機能のことです。
 
 
龍神録プロジェクトでは、ボス弾幕は、boss.kndで決めてしているので、boss.kndを指定してゲーム処理を行えば良さそうだと考えたのですが、boss_shot.cppのenter_boss関数で初期化されてしまうため上手くいきませんでした。
 
また、ボスの出現時間、体力、背景、制限時間なども、選択された弾幕に応じて変えなければならないので、ini関数でも処理を追加しなければならなさそうです…
 


漠然とした質問で申し訳ないのですが、アドバイスおいただければ幸いですm(__)m


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




Name: kerotan0820  ..上級者(23,134ポイント)   Date: 2010/01/29(金) 14:55   No:47305       
Title: 関数    
前回の質問{for(応用ループ)}ではお世話になりました


今回は、ニコニコ動画の(nm6415611)にて関数の勉強をしております

一通り動画を目に通して実際に取り組んでみたところ、関数以前に分からない点がありましたので質問させていただきます

プログラムはこのようなものでした

/*tasizan.c*/
#include<stdio.h>
int tasizan(int x,int y);
int main(void){
    int a,b,add;
    scanf("%d%d",&a,&b);
    add=tasizan(a,b);
    printf("add=%d\n",add);
    return 0;
}
int tasizan(int x,int y){
    int answer;
    answer=x+y;
    return answer;
}
表現の方法の違いなのかもしれないのですが。 add=tasizan(a,b); これがどういった役割を果たしているのかが分かりません scanfで二つの整数を入力してそれぞれを a と b に代入、その後の行です add=tasizan(足し算)とあるので
int tasizan(int x,int y){
    int answer;
    answer=x+y;
    return answer;
この部分に関係しているのかなと憶測はつくものの理解が出来ません この動画での関数についての解説もまったくといってよいほど理解が出来ていないのですが、それについては今もう少し勉強してみます そもそもこの関数の役割が理解できません 動画では ミク、ルカの二人のキャラを利用して大まかな解説がされています このような内容です ミクを「取りまとめ役」、ルカを「足し算担当」というように役割を分担した例を考えます まず、ミクが、「どんな数を足し算してほしいのか」という情報をルカに伝達します ルカが受け取った数を「加算処理」します 答えをだします 出した答えをミクに伝えます それをミクが受け取ったらやり取りは終了です 動画では図や画像で説明されているので、見ていただけると分かると思います これについてですが、関数(今回の単元)を理解せずに僕が二つの入力された整数を加算処理するプログラムを書けといわれたらこのようなものを作ります。
#include<stdio.h>
int main(void){
    int a,b,c;
    printf("二つの整数を入力してください\n");
    printf("@:");scanf("%d",&a);
    printf("A:");scanf("%d",&b);
    c=a+b;
    printf("結果=%d\n",c);
    return 0;
}


出来なかったらどうしようとか思いながらも今書いてみたプログラムです
結果はきちんと表示されます
このプログラムと関数の動画のプログラムで行う処理はまったく同じに思えます。

いったい関数は何の役割を果たしているのでしょうか;

最初の論点から大分ずれてしまいました すみません

■追記
質問の途中、なぜか改行が反映されないというバグ?がおきているので、読みにくいかと思われますがお許しください; 編集済み


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


Name: Dixq (管理人)  ..ウィザード(1,145,113ポイント)   Date: 2010/01/29(金) 15:07   No:47308     
Title: Re:関数    
携帯なんで簡単にしかかけませんが…

動画は見てませんが、それはプロトタイプ宣言といって関数がありますよという印です。
けろたんさんは、上からプログラムを読んでいますか?

下敷きか何かでプログラムを隠して上から少しずつみていってみて下さい。

tasizanという関数の呼出し行を見ても、初めて見るものだから意味わかんないですよね。
コンパイラだって意味わかんなくなるんです。
だから、実態の定義より前に呼出しを書くときは実態は下で定義してるよ!と先に言っておく必要があるのです。


で、関数化する意味ですが、今aとbの足し算一回ならできましたね。では、
a1とb1の足し算
a2とb2の足し算

とこれが1億回あったらどうします?
ひたすら1億行書きますか?

こう考えると効率化の面で利点が見えてくるかも。


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

Name: non  ..比類無きプログラマー(89,941ポイント)   Date: 2010/01/29(金) 15:12   No:47309     
Title: Re:関数    
関数というものを説明するために用意されたプログラムなので、わざわざ関数にするまでも
ない(というよりも、関数にしない方が簡単な)ものを関数にした例です。

やりたいことは、kerotan0820さんの作られたとおり、
c=a+b;
を行うだけのことを関数にしています。
関数には、引数という形で渡して、答えを返してもらうことができるよという例です。
このように簡単なものをわざわざ関数にする必要はないわけですが、もう少し複雑な
ことをするような場合、関数にした方が可読性もよくわかりやすくなります。


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

Name: Dixq (管理人)  ..ウィザード(1,145,150ポイント)   Date: 2010/01/29(金) 15:13   No:47310     
Title: Re:関数    
自分で言っておいてなんですが、さっきのはいい例じゃないですね。
別に関数じゃなきゃできない話じゃないし…。

携帯だからプログラムがうてない;

まぁ、機能分解してわかりやすくしたり、計算の再利用性を高めたりできるんですよ。関数ポインタ使って似たような計算まとめたりって事も出来ます。
具体例はほかの回答者様におゆずりします^^;


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

Name: kerotan0820  ..上級者(23,043ポイント)   Date: 2010/01/29(金) 17:42   No:47311     
Title: Re:関数    
■Dixq様
回答ありがとうございます^^
はい、上から読んでます。
プロトタイプ宣言… 動画の中で繰り返し説明されていた気がするのでもう一度確認してみます

■non様
ということは、この足し算の電卓プログラムをtasizanという関数に代入できてしまうということですか?


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

Name: non  ..比類無きプログラマー(90,005ポイント)   Date: 2010/01/29(金) 17:51   No:47312     
Title: Re:関数    
>ということは、この足し算の電卓プログラムをtasizanという関数に代入できてしまうということですか?

ごめんなさい。意味がわかりません。


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

Name: SooA [URL]  ..プログラマー(28,707ポイント)   Date: 2010/01/29(金) 18:20   No:47315     
Title: Re:関数    
まず一番解っていないと不味いのは、
処理が移動しているということです。

今は「足し算」は頭から切り離して下さい、
tasizan()関数に処理が移り、
そこでの処理が終わったら本流へと戻ってくる。

ここまでは解りますか?


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

Name: dic  ..熟練のプログラマー(49,731ポイント)   Date: 2010/01/29(金) 18:23   No:47316     
Title: Re:関数    
関数の機能として
戻り値 関数名(引数1,引数2,...);
と定義されます

今回の件では
int tasizan( int x, int y );
とあるので この関数は引数xと引数yをとり、
int型の変数を返すという意味になります

もし、void tasizan( int x, int y );
と宣言されてると
引数x、引数yをとり、何も値を返さない関数になります

double tasizan( int x, int y );
だと
引数x、引数yをとり、double 型の変数を返す関数になります

わかりやすいように ミク、やルカを用いているようですが、
私としてはよけいに話が複雑になる気がします
アセンブラ出身の方が、そういうたとえをよくしますね


関数のプロトタイプの意味としては
コンパイラはソースコードの上からソースコードを読み込んでコンパイルします
この時、tasizanというオリジナルの関数を作りますと先に宣言することを意味し、
コンパイルするときにtasizanという文字がでてきたとき、これはオリジナルの
関数だと解釈させるために必要です

なんで、関数なんか作るの?という疑問は
勉強を進めていくうちに徐々に分かってきますね


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

Name: kerotan0820  ..上級者(23,171ポイント)   Date: 2010/01/29(金) 19:03   No:47323     
Title: Re:関数    
■non様
分かりにくくて申し訳ありません;

入力された二つの整数を加算するというプログラムをくくってしまうことができるのかな?
と、勘違いしてたのです;

ほかの回答者様への返信は、もう一度動画を確認し、その後返信させていただきます。
たくさんの回答ありがとうございます。


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

Name: kerotan0820  ..上級者(23,206ポイント)   Date: 2010/01/30(土) 18:07   No:47400 解決!     
Title: Re:関数    
しばらくCをいじれそうにないので一旦閉めさせていただきます
次質問する際はこのURLをリンクします


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



Name: ft  ..中級者(12,224ポイント)   Date: 2010/01/30(土) 15:12   No:47389       
Title: 弾の重なり方について    
こんにちは、弾幕中の弾の重なり方について質問します。
画像についてですが、大きい方が本家の弾幕、小さい方が現在模倣中の弾幕です。
ボスの斜め方向に発射している丸弾を鱗弾の後ろに描画させたいのですが、どのようにしたらいいのでしょうか?
(同様に鱗弾同士も重なりがおかしくなっている部分があります。)
微調整しておらず、全然纏まってなくて見にくいですがコードも載せておきます。
http://icp.atura.ws/m/g/12381/img/0010768051.txt
DXライブラリPortableを用いているため特殊な環境だと思いますが、
よろしくお願いします。


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


Name: fatens  ..初心者(7,187ポイント)   Date: 2010/01/30(土) 15:41   No:47391     
Title: Re:弾の重なり方について    
>ボスの斜め方向に発射している丸弾を鱗弾の後ろに描画させたいのですが、どのようにしたらいいのでしょうか? 

単に描画する順序を逆にすれば良いのでは。


コードはあまり見てませんが、angleの即値の多用はやめた方が良いと思います。


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

Name: ルート  ..ぴよぴよ(32ポイント)   Date: 2010/01/30(土) 15:43   No:47392     
Title: Re:弾の重なり方について    
玉の描画順番を変えればいいと思います・・・。
ちなみに添付していただいたのは処理では?


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,145,450ポイント)   Date: 2010/01/30(土) 15:50   No:47394     
Title: Re:弾の重なり方について    
龍神録では弾の大きさ順にソートしてから描画しています。

ソートについてご存じなければこの辺どうぞ
http://www.google.co.jp/search?hl=ja&q=%E5%8D%98%E7%B4%94%E3%82%BD%E3%83%BC%E3%83%88&lr=lang_ja

高速なソートを使いたければクイックソートをお使いになってはいかがでしょう。
うちのサイトでクイックソートについて解説しています。
http://dixq.net/sort.html

標準関数でqsort関数もあります。

弾の構造体はそのままにしておきたければ、描画用に弾情報を持った変数にコピーして、コピーした物をソート>描画してもいいかもしれませんね。

#
しかしグラフィック手が込んでますね^^;


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

Name: ft  ..中級者(12,468ポイント)   Date: 2010/01/30(土) 17:28   No:47398 解決!     
Title: Re:弾の重なり方について    
添付したコードで、丸弾の初期値を決める箇所を後の方で定義するようにしたらできました。
実は最初はこのようにしていたにも関わらず画像のような状態となっていました。
その時とコードは変わっていないはずなのに結果が異なるのは不思議です(とはいっても現に結果が違うので何処かミスっていたのでしょう;)
わざわざありがとうございました。

管理人様
ソートは全く知りませんでした。
今回はソートに関して手を加えずに解決出来たのですが、高速ソートは非常に興味があるので参考にしたいと思います。


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



Name: シャープシューター  ..ぴよぴよ(21ポイント)   Date: 2010/01/29(金) 06:44   No:47289       
Title: 斜めの移動量について    
http://dixq.net/g/56.html
s13. sin,cosって何? シューティングの基本概念
を読ませて頂き気づいたことが一つあります。

現在、私もシューティングゲームを作っております。
多分、私のプログラムでは斜め移動の時に
普段より多い移動量が発生している気がします。
 (説明が下手で申し訳ないです。)

Px,Py … 現在位置
Dx,Dy … フレームごとの移動量
speed … 速度

・各キー操作がなければ移動量は0になる。(ようは押している時だけ動く)
・キー操作ごとに毎フレームで現在位置に移動量(speed)を足しております。

ここからが本題なのですがspeedが3だと仮定します。
この時、斜め(右と上など)が押されている場合
移動量は3√2になりませんか?

違ったらすみません・・・。
もしそうならサイン、コサインを使うのかと思うのですが
角度がわからない場合はどうするのでしょうか?
例えば(10,420)から(500,100)に移動するといった場合など

角度がわかれば下記でいんですよね?
Dx += cos( angle ) * speed ; //x座標計算
Dy += sin( angle ) * speed ; //y座標計算


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


Name: mats  ..入門者(2,882ポイント)   Date: 2010/01/29(金) 07:28   No:47290     
Title: Re:斜めの移動量について    
移動前の座標と移動後の座標がわかっているならば,sin,cosは計算で求めることができます.
移動前の座標をA,移動後の座標をBとする時(例ならばA=(10,420),B=(500,100)),

cos = (Bx-Ax)/|AB|
sin = (By-Ay)/|AB|
Ax,BxはそれぞれA,Bのx座標を,Ay,ByはA,Bのy座標を表します.
|AB|はAとBの距離です.

角度(ラジアン)を求めたい場合は,
上式で求めた値をacos,asinなどの引数にすれば良いのではないでしょうか.

質問を取り違えていたり,計算式を間違えていたらすみません…….


それと,実装方法がわからないので私の勘違いである可能性が高いのですが,
「フレームごとの移動量」に加算する方法で合っていますか?
「現在位置」に加算する方が自然な気がするのですが…….


ちなみに,意図的にかどうかはわかりませんが,
ゲームによっては斜め方向の移動量を多くしたままのものもあります.
(私の知る限りではロックマンDASHがそうでした)


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,144,568ポイント)   Date: 2010/01/29(金) 07:48   No:47291     
Title: Re:斜めの移動量について    
移動で角度が解らないような仕様なら仕方ないですが、
一般的な移動だけならsin,cosいらないんじゃないですか?
斜めといっても、45°だけなら(90+45°などは除く)
×√2ほど多いとわかっているなら、÷√2すればいいだけです。

龍神録の館でまさに同じ解説をしています。
http://dixq.net/rp/9.html

また、2点から角度を求める時はatan2が便利ですよ。
これも館に書いてあります。
http://dixq.net/rp/13.html

atan2で検索かけてもらえたらどこに書いてあるか解ると思います。


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

Name: シャープシューター  ..ぴよぴよ(90ポイント)   Date: 2010/01/29(金) 20:12   No:47326     
Title: Re:斜めの移動量について    
やはり移動量が多いんですか・・・。
知らなかった・・・ww

>>mats 様
すみません。現在位置に加算しております。

whileの最後に
Px += Dx;
Py += Dy;
と書いて移動させているように見せております。

>>Dixq (管理人) 様
管理人様からご回答頂けるとは感激です><
いつも制作したゲームをプレイさせて頂いております。
話はそれますがエアロビート面白かったです。

ただ一つ問題が御座いまして
私が以前購入したノートパソコンでは画像が乱れてしまいます。
※多分グラフィックボードの問題です。
 そのPCではDXライブラリを使うと画像がおかしくなります。
 但し3D機能のフラグをfalseにすると使えました。 
 (実家にあるのでご興味が御座いましたら型番調べます。) 

atan2をみたのですが引数が2つしかなくないでしょうか?
(10,420)から(500,100)の角度を求める場合
4つ必要ではないでしょうか?

あまりsin,cosが得意ではないのですが
具体的にDx,Dyの移動量はどう変化するのでしょうか?


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

Name: シャープシューター  ..ぴよぴよ(53ポイント)   Date: 2010/01/30(土) 02:44   No:47347     
Title: Re:斜めの移動量について    
すみません・・・。
やはり移動量を求めるのはできないのでしょうか・・・。


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

Name: softya  ..ハッカー(109,773ポイント)   Date: 2010/01/30(土) 11:26   No:47364     
Title: Re:斜めの移動量について    
>やはり移動量を求めるのはできないのでしょうか・・・。

三角関数をちゃんと使えば求められますよ。

>あまりsin,cosが得意ではないのですが 

シューティングにおいて重要すぎる知識ですので、この機会にちゃんと理解された方が良いでしょう。
ここの管理人さんが書かれたsin,cosの説明です。
http://dixq.net/g/56.html
こちらとかも。
http://www8.plala.or.jp/ap2/suugaku/sankakukansuunoshoho.html

>atan2をみたのですが引数が2つしかなくないでしょうか?
>(10,420)から(500,100)の角度を求める場合
>4つ必要ではないでしょうか? 

まずtanを理解することから始めましょう。
さきほど紹介したサイトの下のほうにtanがありますね。
http://www8.plala.or.jp/ap2/suugaku/sankakukansuunoshoho.html
tanθ=a/bって事が分かると思います。
わかりやすく書くとtanθ=y/xってことですね。
角度θからxとyの座標の比率が分かります。

atanはアークタンジェントって事でtanの逆三角関数です。
逆三角関数を単純に言うとy/xからθを求めることが出来る関数なんですが、yの距離、xの距離から角度θを求めることが出来ます。
なので、atan2に与えるパラメータは、ぞれぞれxとyの距離です。
atan2(y2-y1,x2-x1)
って事ですね。2つしかパラメータがいらない理由は分かりましたか?

それとベクトルと言う概念も重要です。
すでに、
Px += Dx;
Py += Dy; 
のDx,Dyと言う形で利用されている訳ですけどね。
http://w3e.kanazawa-it.ac.jp/math/category/vector/vector.html
http://w3e.kanazawa-it.ac.jp/math/category/vector/vector-no-ookisa.html

色々書きましたが、分からなかったら聞いてください。


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

Name: シャープシューター  ..ぴよぴよ(188ポイント)   Date: 2010/01/30(土) 13:10   No:47378     
Title: Re:斜めの移動量について    
回答ありがとうございます。

引数の意味はそういうことでしたか・・・。

かなり難しいですね。というか複雑・・・。
理解できたかわからないのですが
現在位置から(600,40) へspeedで移動する場合は
下記の移動量ということであっているでしょうか?

// (Play.Px,Play.Py) から(600,40) へ移動する
float tan = atan2(40-Play.Py,600-Play.Px);
Play.Mx = cos(tan) * Play.Speed;
Play.My = sin(tan) * Play.Speed;


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

Name: dic  ..熟練のプログラマー(50,264ポイント)   Date: 2010/01/30(土) 13:27   No:47382     
Title: Re:斜めの移動量について    
物理の計算入れるなら空気抵抗とかもあるんだけどね
風の向きや、強さなど
勉強と割り切ればいいんではないでしょうか

私程度の知識では分かりませんが


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

Name: softya  ..ハッカー(111,321ポイント)   Date: 2010/01/30(土) 13:27   No:47383     
Title: Re:斜めの移動量について    
>float tan = atan2(40-Play.Py,600-Play.Px);
>Play.Mx = cos(tan) * Play.Speed;
>Play.My = sin(tan) * Play.Speed;

あって良ると思います。
ただ、tanは関数名とかぶるので、rとかradianとか角度を表す名前にした方が良いでしょう。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,145,627ポイント)   Date: 2010/01/30(土) 14:41   No:47387     
Title: Re:斜めの移動量について    
> 話はそれますがエアロビート面白かったです。

プレイして頂きありがとうございます^^
最近更新が出来ていませんが、時間を見つけて更新したいと思います;

> かなり難しいですね。というか複雑・・・。

あ〜こういう場合は、関数をある種のブラックボックス化して考えてしまえばいいんですよ^^
中身の動作アルゴリズムはわからなくとも「これを渡したらあれが返ってくる」という仕組みだけわかればよいのです。

そのもの自身の仕組みを全て理解して利用することが一番良いことですが、そんなこと現実的に不可能な場合が多いです。
全て理解するまでそれが使えないより、使い方さえ理解して、出来る事の幅を広げた方が良いですよね?

例えばシャープシューターさんがテレビを見ていたとしましょう。
チャンネルを変える時、電源ボタンを押せばTVのスイッチが入りますが、
リモコンにどのような信号が走って、TVの電子回路にどのような電気信号が流れるか、全て理解していなくても使えていますよね?
仕組みを全て理解するより、その使い方を理解することの方が大事なこともあります。

ということで、今回、「移動元」と「移動先」を渡したらその方向の角度を返す関数を作ってみます。
仰っている内容から4つ引数を渡す方が解りやすそうなので、こんな感じで用意しました
#include <stdio.h>
#include <math.h>

float GetAtan2Angle( float FromX, float FromY, float ToX, float ToY ){
    return atan2( (ToY-FromY), (ToX-FromX) );
}

int main(){
    float ang;
    ang = GetAtan2Angle( 10, 420, 500, 100 );
    printf("%f\n",ang);
    return 0;
}



これから先はatan2がアークタンジェントを利用してて、アークタンジェントっていうのは逆正弦と逆余弦が・・なんて考えなくても今作ったGetAtan2Angle関数に移動元の座標と移動先の座標を渡せばそちらの方向の角度が返るのだとだけ解っていればいいのです。
 


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



Name: たつのしん  ..ぴよぴよ(45ポイント)   Date: 2010/01/29(金) 08:00   No:47293       
Title: 初心者の質問です    
旧シューティングプログラミングの館を元にさせて頂きながら、
簡単なシューティングゲームを作っています。

そこで質問があるのですが。
どんな簡単なゲームでもタイトル画面があったり、自機のHPが0になったらゲームオーバー画面になったり、
ボスを倒したらクリア画面がでると思います。
旧シューティングプログラミングを元に作っている場合、
main.cpp内でcase文を使ってタイトル画面なりゲームオーバー画面なりを作ればいいのですか?
いかんせん初心者なもので、しかも分割コンパイルになっているので頭が混乱しています(苦笑)

雑な質問で恐縮なのですが、できるのであればどのようにしてできるのか、
プログラミングを教えて頂きたいです。


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


Name: 通りすがり  ..上級者(19,337ポイント)   Date: 2010/01/29(金) 08:52   No:47294     
Title: Re:初心者の質問です    
こちらはご覧になりましたでしょうか?
これを元に作成してみてはいかがでしょうか。

33. 選択画面の作り方。
http://dixq.net/g/36.html

34. メイン関数の書き方。
http://dixq.net/g/37.html


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

Name: たつのしん  ..かけだし(1,035ポイント)   Date: 2010/01/30(土) 14:25   No:47386     
Title: Re:初心者の質問です    
返信遅れて申し訳ありません。
解答ありがとうございます。

参考にさせて頂きながら只今作っているのですがもう一つ質問があります。

・タイトル画面 → ゲーム開始 → (ボス敵のHPを0にしたら)ゲームクリア画面 → タイトルに戻る
                → (自機HPが0になったら)ゲームオーバー画面

という単純なループをcase文を使って作ることには成功できました。
ただ、2週目をやろうとするとゲームクリアしていた場合はすぐにゲームクリア画面に、
ゲームオーバーしていた場合はすぐにゲームオーバー画面へ移行してしまいます。
おそらく2週目に行く際、ちゃんと初期化されていないからだと思うのですが・・・。

旧シューティングプログラムで作ってる場合、
ゲームクリアしている場合は、敵のHPをリセットすればいいと思います。
リセットする方法は単純にゲーム内カウンタを0にすればいいと思います。
自分のプログラムは12章に書いてある↓のプログラムのcase文内に、
Enemy[i].hp = 10;と設定し追加しているだけです。

/* enemy.cpp */
/* 素材 ver 1.10以上必要 */


#include "DxLib.h"
#include "ExternGV.h"

void EnemyPattern1(int i){
        enemy[i].y+=1.5f;
}

void EnemyControl(){
        for(int i=0;i<100;i++)
                if(enemy[i].flag==1)
                        if(enemy[i].pattern==1)
                                EnemyPattern1(i);
}

void EnemyCalcDisp(){
        int i;
        for(i=0;i<100;i++)
                if(enemy[i].flag==0)
                        break;
        switch(counter){
                case 100:
                case 150:
                case 200:
                case 250:
                        enemy[i].flag=1;   //出現フラグを立てる
                        enemy[i].counter=0;//出現して何カウント目か測るカウンター初期化
                        enemy[i].pattern=1; //どういう軌道を描くか
                        enemy[i].size=0.5f;//敵の大きさ
                        enemy[i].x=100.0;  //xの初期座標
                        enemy[i].y=-10.0;  //yの初期座標
                        break;
                default:
                        break;
        }
        for(i=0;i<100;i++)
                if(enemy[i].flag==1)
                        DrawRotaGraph( (int)enemy[i].x , (int)enemy[i].y , enemy[i].size , 0.0f , img_enemy1[0] , TRUE ) ;
}

ゲームオーバーの場合、自機のHPはinitialization()関数内で設定しています。
ですからinitialization()関数をmain.cpp内で置く場所が間違っているのでしょうか。
でも、ほぼ旧シューティングプログラムの館通りに作っているので間違えてるはずはないと思うのですが・・・。

それともこのような考え方が間違っているのでしょうか?
もっと簡単に設定する方法があれば教えて頂きたいです。


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



Name: dom  ..ぴよぴよ(206ポイント)   Date: 2010/01/29(金) 23:36   No:47333       
Title: warning LNK4098...    
こんにちは。龍神録プログラミングで勉強させてもらっています。
いま第11章「エクセルを使って敵の出現データを作ってみよう」が終わったところなのですが、これをビルドすると、

warning LNK4098: defaultlib 'LIBCMT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。

と警告が出ます。これに従ってライブラリを無視すれば良いのだとは思いますがいまいち納得いきません。何かほかの解決方法はありますでしょうか?


環境はVC++ 2008 Express Editionです。


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


Name: Justy  ..伝説なるハッカー(496,618ポイント)   Date: 2010/01/30(土) 00:07   No:47336     
Title: Re:warning LNK4098...    
過去ログに似たようなのがありました。

C言語何でも質問掲示板
ttp://www.play21.jp/board/formz.cgi?action=res&resno=47333&page=&id=dixq&rln=47333


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

Name: dom  ..ぴよぴよ(288ポイント)   Date: 2010/01/30(土) 12:58   No:47376     
Title: Re:warning LNK4098...    
>ttp://www.play21.jp/board/formz.cgi?action=res&resno=47333&page=&id=dixq&rln=47333 
これはこのトピックへのリンクになっています。

一応過去ログに似たような質問があったようなのですが、ご指定の記事が見当たりません、と表示されてみることができなかったので質問させていただきました。


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

Name: Justy  ..伝説なるハッカー(497,589ポイント)   Date: 2010/01/30(土) 13:25   No:47381     
Title: Re:warning LNK4098...    
 あ、すみません、ミスってました。
 こっちですね。

C言語何でも質問掲示板
http://www.play21.jp/board/formz.cgi?action=res&resno=20874&page=&lognum=66&id=dixq&rln=20924




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

Name: dom  ..ぴよぴよ(310ポイント)   Date: 2010/01/30(土) 14:02   No:47385 解決!     
Title: Re:warning LNK4098...    
ありがとうございます、無事解決することができました!

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



Name: おむすび  ..入門者(4,798ポイント)   Date: 2010/01/30(土) 00:16   No:47337       
Title: シーンごとのソース管理    
何度も同じ質問をしてしまい申し訳ございません。
以前、こちらのサイトでシーンごとのソース管理について
質問させて頂いた者です。 
http://www.play21.jp/board/formz.cgi?action=res&resno=45104&page=&lognum=138&id=dixq&rln=45138

もしgame_scene.cppなどのシーンからSceneChange関数を
呼ぶ場合はどうすればよいのでしょうか?

error C3861: 'SceneChange': 識別子が見つかりませんでした

と出てしまいます。
これはSceneChange()を別のページで書いているからでしょうか?


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


Name: Justy  ..伝説なるハッカー(496,716ポイント)   Date: 2010/01/30(土) 00:22   No:47338     
Title: Re:シーンごとのソース管理    
>もしgame_scene.cppなどのシーンからSceneChange関数を 
>呼ぶ場合はどうすればよいのでしょうか
 SceneChange関数のプロトタイプ宣言を適当なヘッダに書いて、それを game_scene.cppなどのソース上で
インクルードして下さい。


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

Name: おむすび  ..入門者(4,805ポイント)   Date: 2010/01/30(土) 00:53   No:47340     
Title: Re:シーンごとのソース管理    
ご回答ありがとう御座います。
すみません。質問の日本語がおかしかったです。

SceneChangeという関数を作って
シーンを変えられるようにしたいです。
現在は GetSceneFunc(int id) の戻り値をシーンで読み込んでる感じです。

キーワード:dx
http://www1.axfc.net/uploader/Ne/so/73699


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

Name: kazuoni [URL]  ..ハッカー(132,204ポイント)   Date: 2010/01/30(土) 01:05   No:47341     
Title: Re:シーンごとのソース管理    
そもそも関数SceneChangeの実体がありませんね。
実体を書かなければ動かす事ができませんよね。
ほかにも数個関数の実体がない関数があります。 編集済み


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

Name: おむすび  ..入門者(4,995ポイント)   Date: 2010/01/30(土) 01:09   No:47342     
Title: Re:シーンごとのソース管理    
ご回答ありがとう御座います。
すみません。ここにあげるためにいくつか関数を省きました。

>>そもそも関数SceneChange関数の実体がありませんね。 
これを作りたいのですがどこにどう書けばよいのかが
検討つきません・・・。

今まではmain.cppにてsceneFunc = GetSceneFunc(SENE_GAME);
みたいに書いておりました。
これをmain.cpp以外でやるためにSceneChange関数を作りたいです。


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

Name: Justy  ..伝説なるハッカー(496,908ポイント)   Date: 2010/01/30(土) 01:17   No:47343     
Title: Re:シーンごとのソース管理    
>これを作りたいのですがどこにどう書けばよいのかが
 SceneChange関数は System.SceneNumの値を変更するだけでいいんじゃないでしょうか?
 その場合 GetSceneFunc内での System.SceneNumに対する書き込みは不要になります。

 どこに書くかは System.SceneNumにアクセスできるところならどこでもお好みで。
 本来 GetSceneFunc関数らを含めて独立したソースにあるのが望ましいですが、現状 main.cppにあるのなら
そこでも構わないでしょう。
 あとはプロトタイプ宣言を書いたヘッダを用意すればいいかと。


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

Name: omusubi  ..ぴよぴよ(554ポイント)   Date: 2010/01/30(土) 02:44   No:47346     
Title: Re:シーンごとのソース管理    
なんどもすみません・・・。
回答ありがとう御座います。

また、なかった関数を付け足しました最新版です。
http://211.18.152.192:81/uploader/He/upload.cgi?377473378
pass:dx

現在main.cppからならSystem.SceneNumを弄りシーンチェンジが出来るのですが
〜_sceneといった所ですと呼び出すことができません・・・。
※F2でシーンチェンジするようにしてあります。
 +1をしているだけなのでシーンがない場所にも読みに行っております。(危ないのはわかっております)

調べてみるとextern?というのを変数の先につけるとできると言うことまでわかりました。
しかしつけてみたのですがうまく動きません・・・。
また毎シーンでキー情報の取得などが呼ばれるのでシーンごとに定義しなくても
KEY Keyを呼び出せるようにしたいです・・・。


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

Name: Justy  ..伝説なるハッカー(497,586ポイント)   Date: 2010/01/30(土) 12:29   No:47374     
Title: Re:シーンごとのソース管理    
>現在main.cppからならSystem.SceneNumを弄りシーンチェンジが出来るのですが 
>〜_sceneといった所ですと呼び出すことができません
 ?
 SceneChange関数を使ってシーンを変えるのではなく、各ソースから直接グローバル変数である
System.SceneNumを変えてシーンを変えたいのですか?

 あまりグローバル変数をあちこちで参照するのはお行儀がよくないので、
SceneChange関数を作り、その中で System.SceneNumを変えるようにしましょう。

 既に MyLib.hに SceneChange関数のプロトタイプ宣言があるので、あとは関数の実体さえあれば
あとは他のソースで MyLib.hをインクルードすれば、SceneChange関数を呼び出すことが
できるはずです。

 ついでに、SceneChange関数内で sceneFuncを書き換えるようにしましょう。
 そうすればあらためて GetSceneFuncを呼び出さなくて済みます。
 で、先にも書きましたが、GetSceneFuncでの sceneFuncの代入を止めます。

 最小限の書き換えをしてものを添付しました。
 見比べたり、他のソースから SceneChange関数を呼び出してみるなど試してみて下さい。


>シーンがない場所にも読みに行っております
 シーンがなくても問題なく動くようにしましょう。
 無効なシーンの場合は sceneFuncに NULLが入るようにして、

    if(sceneFunc->init)        sceneFunc->init();
 ではなく
    if(sceneFunc && sceneFunc->init)        sceneFunc->init();
 とすれば安全になります。


>シーンごとに定義しなくても 
>KEY Keyを呼び出せるようにしたいです・・・。 
 もうできるようになってますよ。
 MyLib.hに extern KEYがあるので、MyLib.hさえインクルードされていれば
各ソースで Key変数にアクセスできます。
 試してみて下さい。


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

Name: おむすび  ..初心者(5,086ポイント)   Date: 2010/01/30(土) 13:01   No:47377 解決!     
Title: Re:シーンごとのソース管理    
>>Justy様
いつも助けていただいてありがとうございます。

できました><
Keyが呼び出せなかった原因としてインクルードしてないモノがありました・・・。
本当にありがとうございました。



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



Name: niko  ..入門者(4,650ポイント)   Date: 2010/01/29(金) 19:51   No:47324       
Title: 柔軟に対応できる描画関数    
柔軟に対応できる描画関数を作ろうと考えております。

http://www.play21.jp/board/formz.cgi?action=res&resno=38902&page=&lognum=120&id=dixq&rln=39285
以前、こちらで質問させて頂いたのですが私には実装できず
関数を作ることができなかったので再チャレンジしたいと思っております。

描画関数の拡張 ※前回とは若干仕様が変わっております。

Draw(int x1 ,int y1 ,int ImageHandle ,int x2 ,int y2 ,int x3 ,int y3 ,bool cneterF , ARGB ,int rot ,float ScaleX , float ScaleY);

x1・・・描画座標X
y1・・・描画座標Y
ImageHandle・・・読み込む画像ハンドル
x2・・・読み込んだ画像の切り取り開始位置
y2・・・読み込んだ画像の切り取り開始位置
x3・・・切り取るサイズ 32ならx2〜32ドットの切り取り
y3・・・切り取るサイズ
centerF・・・falseなら原点左上、trueなら中心
ARGB・・・ARGB(0xff,0xff,0xff,0xff)などと書くと通常表示
rot・・・原点を中心とした回転角度
ScaleX・・・X軸に対しての拡大率
ScaleY4・・・Y軸に対しての拡大率


上記のような描画関数を作りたいです。
ただし私の現在の実力では作れそうにありません。
そこで皆様のお力を再度お貸し願えないでしょうか?

関数の使い方などは分かるのですが具体的にどの数字を
どのように弄れば良いのか。等がわからないです・・・。
丸投げの様な形になってしまい申し訳ございません。

DXライブラリを使っております。


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


Name: kazuoni [URL]  ..ハッカー(132,162ポイント)   Date: 2010/01/30(土) 00:05   No:47335     
Title: Re:柔軟に対応できる描画関数    
正直な感想ですが・・・

これはあまりお勧めできません。
一つの関数に多くの処理を組み込むことは、
可読性も下げますが、余分な処理が増えてきます。
現在のDXライブラリの関数で恐らく表現出来ない事は少ないはずです。
やりたい事を一つ決めてそれを関数化する事を自分は心がけています。


まず、突っ込みどころから

画像を切り取り、その画像ハンドルを操作し、描写→破棄
とするよりは、先に切り取った画像をハンドルとして保持しておき、
それを操作する方が直観的です。

関数ARGBの内容によっては仕様がかなり変わってきそうです。
そもそもどういう関数なのでしょうか?
ARGB(0xff,0xff,0x0,0x0)と書いた場合はどの様な戻り値なのですか?
ARGB(0x0f,0xff,0x0,0x0)では?
恐らく、画像の各ドットの色の操作かと思いますが、
毎ループ各ドットにアクセスしていくには速度がかなり落ちると考えられます。
連続して、このドットにアクセスする場合の関数Drawを一ループ50回も書けば
FPSはたちまち落ちるかと思われます。
まぁ、この辺はトレードオフの関係なんですが。


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

Name: たいちう  ..熟練のプログラマー(53,520ポイント)   Date: 2010/01/30(土) 00:46   No:47339     
Title: Re:柔軟に対応できる描画関数    
kazuoniさんの書く通り、何でも出来る関数の実用性は低いでしょう。
ですが課題として考えるならば、作る価値はあると思います。
他者から出された課題か、自分で設定した課題かは問わず。
当然作るのはあなたです。

> ただし私の現在の実力では作れそうにありません。

多機能の描画関数ですが、その機能を箇条書きにしてください。
全ての機能を満たす関数が最終目的ですが、
まずは1つの機能だけを実装して、バージョン1を完成させましょう。

バージョン1にもう1つの機能を付け加えて、バージョン2を作ります。
これを好きなだけ繰り返して機能を増やせばよいでしょう。
完成品を他人に求めるよりも、まずは自分でできるところまで、
作ってください。

「…という機能までは完成させましたが、…という機能の追加の仕方について、
アドバイスを下さい」という質問の方が良いと思います。


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

Name: dic  ..熟練のプログラマー(50,246ポイント)   Date: 2010/01/30(土) 11:57   No:47373     
Title: Re:柔軟に対応できる描画関数    
x1・・・描画座標X 
y1・・・描画座標Y 
ImageHandle・・・読み込む画像ハンドル 
x2・・・読み込んだ画像の切り取り開始位置 
y2・・・読み込んだ画像の切り取り開始位置 
x3・・・切り取るサイズ 32ならx2〜32ドットの切り取り 
y3・・・切り取るサイズ 
centerF・・・falseなら原点左上、trueなら中心 
ARGB・・・ARGB(0xff,0xff,0xff,0xff)などと書くと通常表示 
rot・・・原点を中心とした回転角度 
ScaleX・・・X軸に対しての拡大率 
ScaleY4・・・Y軸に対しての拡大率 
を参考にさせてもらうと

Draw( x1, y1, ImageHandle, x2, y2, x3, y3, centerF );
Draw( x1, y1, ImageHandle, x2, y2, x3, y3, ARGB );
Draw( x1, y1, ImageHandle, x2, y2, x3, y3, rot );
Draw( x1, y1, ImageHandle, x2, y2, x3, y3, ScaleX );
Draw( x1, y1, ImageHandle, x2, y2, x3, y3, ScaleY );
と、機能別に作っていけばいいかなと思います
後でバグも追いやすいですし


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



Name: キム・ゾン  ..ぴよぴよ(101ポイント)   Date: 2010/01/30(土) 09:23   No:47358       
Title: ソースコードを書く手前で困っています。    
[1] 質問文
 [1.1] プログラムを始めたいんですけど、VC++のソースコードを書くための準備というのがありますよね。解説では「ソースファイル」>「追加」>「新しい項目」>「コード」>「C++ファイル」という手順が書いてあるのですが、同じようにしようと思うと「コード」と、「C++ファイル」というコマンドが表示されません。どうしたらよいか教えていただければうれしいです。

 [1.2] どのように取り組んだか・・・解説の通りに取り組みました。

 [1.3] どのようなトラブルで困っているか・・・ソースコードを書くためので必要になっている「コード」と
                       「C++ファイル」のコマンドが現れません。          
 [1.4] 今何がわからないのか、知りたいのか・・・どうしたら2つのコマンドが現れるのか知りたいです。
      
[2] 環境  
 [2.1] OS : Windows7です。

 [2.2] コンパイラ名 : VC++ 2008EEです。
[3] その他 
 ・どの程度C言語を理解しているか・・・始めたばかりの初心者です。
 ・ライブラリを使っている場合は何を使っているか・・・わかりません。



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


Name: mnkr  ..入門者(4,091ポイント)   Date: 2010/01/30(土) 09:38   No:47359     
Title: Re:ソースコードを書く手前で困っています。    
「コード」を選ぶ手順のところで
「VisualC++」っていう文字の前に「+」がありませんか?
そこをクリックしたら「コード」が下に現れませんか?

これ以上はわかりません。。。


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

Name: SooA [URL]  ..プログラマー(28,717ポイント)   Date: 2010/01/30(土) 10:11   No:47360     
Title: Re:ソースコードを書く手前で困っています。    
と、選択して、

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

Name: SooA [URL]  ..プログラマー(28,722ポイント)   Date: 2010/01/30(土) 10:12   No:47361     
Title: Re:ソースコードを書く手前で困っています。    
が、開きませんか? 編集済み

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

Name: キム・ゾン  ..ぴよぴよ(151ポイント)   Date: 2010/01/30(土) 10:22   No:47362     
Title: Re:ソースコードを書く手前で困っています。    
mnkrさん、SooAさんありがとうございます。お二人のおかげで無事に始められそうです。
ありがとうございました。


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



Name: 初心者T  ..ぴよぴよ(205ポイント)   Date: 2010/01/28(木) 21:00   No:47255       
Title: DLLをかきなおしたい。    
こんにちは。VC糞初心者です。
誰かが作ったDLLに書き足したいものがあります。
それのやり方について伺いたいと思います。

あるDLLに
#include <iostream.h> 
#include <string.h> 

class Mountain 

int m, n; 
int turn; 
int comp_take(); 
public: 
Mountain(); 
int get_stone(); 
}; 
というものを付けたしたいです。
最近はじめたばかりでまったくわからないので用語もあまりわからないと思いますがおねがいします。

環境はVisualC++2008ExpressEditionです。


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


Name: ベリ工  ..入門者(2,828ポイント)   Date: 2010/01/29(金) 00:33   No:47275     
Title: Re:DLLをかきなおしたい。    
まず確認ですが、その誰かが作ったDLLをコンパイルして再度DLLを
作成できる環境は揃っていますでしょうか?でないとDLLに追加は不可ですね。

で、そのDLLを作成するプロジェクトは何ですか?
【プロジェクト例】
・C++/CLI
・MFC
・Win32

呼び出し規約は?

・__stdcall
・__cdecl
・__clrcall

MFC、Win32環境ではモジュール定義ファイル(defファイル)や
エクスポート命令(__declspec(dllexport)など)を記述する必要
がある場合があります。


class __declspec(dllexport) Mountain {
    private:
        int m, n;
        int turn;

        int comp_take();
    public:
        Mountain();
        int get_stone();
}

など・・・後はネットで探せばいくらでも用語の説明やサンプルは見つかるでしょう。


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

Name: 初心者T  ..ぴよぴよ(272ポイント)   Date: 2010/01/29(金) 13:06   No:47303     
Title: Re:DLLをかきなおしたい。    
そのDLLを再度作成する環境とはたとえば何ですか?
ド初心者なんでホント知識がないです。

プロジェクトもわかりません・・・どうやって調べるのか・・・


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

Name: ベリ工  ..入門者(3,187ポイント)   Date: 2010/01/29(金) 22:51   No:47330     
Title: Re:DLLをかきなおしたい。    
>そのDLLを再度作成する環境とはたとえば何ですか? 
>ド初心者なんでホント知識がないです。 
>プロジェクトもわかりません・・・どうやって調べるのか・・・

そ・・・そこからですか・・・orz

グーグル先生に聞く癖をつけましょう。
グーグル先生に以下の項目で検索したら山ほど解説やサンプル
が出てきます。

『vc++ dll 作成』

とにかく、自分で調べる癖をつけましょう。
上記検索項目でヒットしたサイトをいろいろ見てください。
そうすれば

>そのDLLを再度作成する環境とはたとえば何ですか?
>プロジェクトもわかりません・・・

の答えがおのずと分かってきます。

そこまで分かったら、"その誰か"が作ったDLLをコンパイルできる
環境を"その誰か"からもらうか、自分で構築する。
その後、追加したいクラスなり一般関数なりを記述し、
他のAPPからコールできる形(モジュール定義やDLLエクスポート定義など)
にして再コンパイルすればDLLへの追加が完了します。


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

Name: 初心者T  ..ぴよぴよ(296ポイント)   Date: 2010/01/29(金) 23:15   No:47332     
Title: Re:DLLをかきなおしたい。    
ごめんない><
では、できないことはないんですよね?


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

Name: ベリ工  ..入門者(3,250ポイント)   Date: 2010/01/30(土) 07:21   No:47356     
Title: Re:DLLをかきなおしたい。    
>では、できないことはないんですよね?

そういうことですね。あくまでその誰かが作ったDLLを
コンパイルできる環境があればの話ですけどね。


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



Name: RAZ  ..ぴよぴよ(137ポイント)   Date: 2010/01/28(木) 21:33   No:47260       
Title: 画像の輪郭を強調する    
DXライブラリを使っております。

キャラクターが選択されている時に
輪郭を強調しようと思います。

ただこの為だけに画像をもう一枚用意するのは手間なので
プログラムで行おうと考えております。

Aの画像を読み込んである処理をして表示するとBの画像が表示されるようにしたいです。
このようなことはできないのでしょうか?



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


Name: kazuoni [URL]  ..ハッカー(131,713ポイント)   Date: 2010/01/28(木) 22:53   No:47267     
Title: Re:画像の輪郭を強調する    
> ただこの為だけに画像をもう一枚用意するのは手間なので
恐らく余分に用意する方がはるかに楽かと思います。

無理やりソフト内で処理するには、以下の二通りが考えられるかと思います。

1、画像をマスク処理し、拡大する
これは単純ですが。
まず、イメージをマスク化し、
背景以外の部分をくりぬきます。くり抜いたところは
画像の枠外の色にしたい色で塗りつぶし、それ以外(背景)を黒で塗りつぶしてください。
もし線を黒にしたいなら背景を白にしてください。(描写する際には、背景色を白に変えなければならない)
次に出来た画像を拡大します。縦横ともに同じ比率です。
(拡大してからマスクコピーでもよいと思いますが)
640*480ならば1.01倍とかでもよいかと。
ただ、小数点以下は切り捨てられるので、縦横で若干枠の大きさが変わるかと思いますが。
最後に描写する際、二つの画像の中心点を同じにさせればOKです。

2、エッジ抽出→エッジ拡大
綺麗にエッジを抽出するには、ラプラシアンフィルタとかですかね。
(詳しくはないので、他にもっと良いフィルタがあるかもしれませんが。)
これは結構難しいかもです。
例えば、画像の背景以外にも文字の部分の周り(DOTの文字)も枠描写したい
なんて時にはこのエッジ抽出が必須かと思います。

が、詳しく書こうとすると、長くなりそうで、
実際に自分で作るのも大変そうなので、省略します^^; 編集済み


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

Name: RAZ  ..ぴよぴよ(0ポイント)   Date: 2010/01/29(金) 00:59   No:47277     
Title: Re:画像の輪郭を強調する    
ご回答ありがとう御座います。
今までマスク処理をしたことがないので
原理が理解できません・・・。

本家を調べて書いてみたのですが何も表示されません。
MaskHandleに表示したい画像のマスクを読み込んであります。

    CreateMaskScreen() ;
    DrawMask( 200 , 200 , MaskHandle , DX_MASKTRANS_NONE ) ;
    DeleteMaskScreen() ;

画像はpngを使っております。
なぜなのでしょうか・・・。


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

Name: たいちう  ..熟練のプログラマー(53,210ポイント)   Date: 2010/01/29(金) 02:04   No:47282     
Title: Re:画像の輪郭を強調する    
> 今までマスク処理をしたことがないので
> 原理が理解できません・・・。

マスク処理の原理ですか?
それともkazuoniさんが説明しているアルゴリズムの原理ですか?

もし両方判らないならば、まず理解すべきなのはアルゴリズムの方です。
任意の画像(旗)を与えられて、輪郭を強調した画像を作る時に
どのように作業しますか?

PhotoShopやイラストレーター等で作業することが多いかもしれませんが、
ここでは64×64の方眼紙に絵が描かれていると思ってください。
そして作業するのは全くセンスの無いバイト君ですが、
あなたの指示に忠実に従います。
画像はまだ届いていないので、あなたも見たことはありませんが、
今から外出するので、画像を見る前にバイト君に指示を出さないといけません。
どのような指示を出したらよいでしょうか?

というのがアルゴリズムです。
方眼紙と色鉛筆を持ったバイト君に指示を与えるだけなので、
プログラミングは関係ありません。RAZさんも考えてみて下さい。
自分で考えた後ならば、kazuoniさんの書いていることも判りやすいでしょう。
プログラミングはその後です。


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

Name: Ma  ..プログラマー(38,862ポイント)   Date: 2010/01/29(金) 02:35   No:47283     
Title: Re:画像の輪郭を強調する    
くろぶちの方法なら簡単ですけどね。

透明度処理がしてある画像なら
色調を変えるというか、輝きの色を変える関数があったから、
SetDrawBright だったかな
これで全部0にしてから、拡大描画で黒い状態が描画できます。
これで黒いわくぶちはできますね。
色はもっと工夫しないといけないでしょうけど。



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

Name: RAZ  ..ぴよぴよ(286ポイント)   Date: 2010/01/29(金) 03:26   No:47284     
Title: Re:画像の輪郭を強調する    
皆様ご回答ありがとうございます。
回答を頂けて本当にうれしいです。

アルゴリズムにつきましてはやることはなんとなくわかります・・・。

1、マスクを作る。
2、作ったマスクを拡大
3、表示場所をあわせて表示

ということですよね? ※違ってたらすみません。
出来れば輪郭の色はキャラごとに変えたいです。(敵なら赤、味方なら青みたいなかんじです)
マスク画像は表示されているようなのですが
これを拡大するにはどうすれば良いのでしょうか・・・。
又、現在マスク画像が最前面に配置されてしまう為
H_charが隠れてしまいます・・・。

H_charとMaskHandleは同じ画像です。
     // マスク画面を作成します
    CreateMaskScreen() ;
    // ロードしたマスクデータを描画します
    DrawMask( 200 , 200 , MaskHandle , DX_MASKTRANS_NONE ) ;
    DrawBox( 0 , 0 , 640 , 480 , GetColor( 0 , 0 , 0 ) , TRUE ) ;
    DrawGraph( 180, 180 , H_char , true ) ; // 確認用に200,200からずらしてます
    // マスク画面を削除します
    DeleteMaskScreen() ;


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

Name: SooA [URL]  ..プログラマー(28,630ポイント)   Date: 2010/01/29(金) 11:08   No:47298     
Title: Re:画像の輪郭を強調する    
マスク有効中にキャラ描画してるのでキャラが隠れるのでしょう。

マスクについて。
例えば以下のようなマスクデータがあり、
データと同じ範囲を紫色で塗りつぶすと、
■の部分だけ塗りつぶされる事になります。
□□□□□□□□
□□■■■■□□
□■■■■■■□
□■■■■■■□
□■■■■■■□
□■■■■■■□
□□■■■■□□
□□□□□□□□

■黒 □白 です。投稿すると色が反転しました><


マスクデータの拡大について。
拡大ではないですが、上下左右(斜めも入れると良い)に
ずらして塗りつぶしてから、中央にキャラを描画すれば
似たような事はできますよ。

ただ、どのみちマスクデータを作るなら、
選択済みの画像を用意した方が遙かに簡単で
綺麗なものになると思います。

※非公開関数にマスクの拡大できる関数があったらごめんなさいです。
 CPUイメージを使う方法も省かせてもらいます。
 編集済み


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

Name: kazuoni [URL]  ..ハッカー(131,819ポイント)   Date: 2010/01/29(金) 12:32   No:47300     
Title: Re:画像の輪郭を強調する    
とりあえず、やっつけで作ってみました。
30分ぐらいで作ったので、思わぬバグがあるかもしれませんが・・・
アイシャさんはうまくいってるようです。

http://kazuoni.kumogakure.com/result.png

つながりにくいかもしれないので、
コピぺでよろしくお願いします。

もっとスマートな書き方があるかもしれませんが。。 編集済み


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

Name: kazuoni [URL]  ..ハッカー(131,930ポイント)   Date: 2010/01/29(金) 12:41   No:47302     
Title: Re:画像の輪郭を強調する    
あ、よくみたら独立した点が数点ありますねw
元絵にアルファ値が入っているのでしかたないですかね。
これはドットを特定して、ペイントソフトで潰していくしかないかと。
(もしかしたらプログラムがだめなのかもしれないです・・・)


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

Name: バグ  ..ハッカー(184,134ポイント)   Date: 2010/01/29(金) 18:47   No:47320     
Title: Re:画像の輪郭を強調する    
ぶっちゃけ、別途画像を用意した方が楽なうえに早いのではないかと…(^_^;)
2値化して、拡大して、着色した画像に、元画像を重ねてやる…と。手作業でもそんなに手間ではないと思いますよ。


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

Name: RAZ  ..ぴよぴよ(438ポイント)   Date: 2010/01/29(金) 20:14   No:47327 解決!     
Title: Re:画像の輪郭を強調する    
皆様ご回答ありがとう御座います。
今の私のPG力ではできそうにないので画像に手を加えることにしました。

サンプルソースありがとう御座います。
サンプルなのですがnamespace(名前空間?)がよく理解できませんでした。
せっかく作っていただいたのに申し訳ございません。

皆様のお時間を頂戴したのに作ることができず
お詫びさせて下さい。

ご回答ありがとう御座いました。


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

Name: kazuoni [URL]  ..ハッカー(132,048ポイント)   Date: 2010/01/29(金) 23:44   No:47334     
Title: Re:画像の輪郭を強調する    
> ぶっちゃけ、別途画像を用意した方が楽なうえに早いのではないかと…(^_^;) 

個人的にも同感ですね。
もし、画像が数百枚ある場合は別ですが。。
GIMPなんて使ったらかなり早く画像ができてしまいますよね。

> namespace(名前空間?)がよく理解できませんでした。 

これはコーティングの問題なんで、省いてもらって構いません。
詳しく知りたければ、[C++ namespace]でググれば参考サイトが出てくるかと思います。

#あ・・・途中がおかしかったですね。
修正したファイルを添付しておきます。
大変失礼しました。


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



Name: yama  ..初心者(7,144ポイント)   Date: 2010/01/29(金) 20:40   No:47328       
Title: デバック用の表示関数    
シーンごとにソースを管理しております。

各ページにDebFがtrueの時だけ
変数の値を表示できるようにプログラムを書いております。

最近これが手間になって来ました。
毎ページDebFを宣言したりするのが面倒です・・・。
これを関数にまとめられないでしょうか?

例えば
DebText("%d",Px);
DebText("%d",Py);
DebText("%d",HitF);
と書くだけで自動的にX座標は0、Y座標は(DebText呼んだ回数-1)*FONT_SIZE
みたいにしたいです。

シーンのソースにはDebTextのプロトコル宣言等もしたくないです・・・。
 (ヘッダインクルードならOK)
調べてみるとexternを使うと出来る様なことが書いてあったのですが
よく理解できませんでした。

opening.cpp … オープニング
title.cpp … タイトルシーン
main.cpp … ここでシーンを呼んでます。

FONT_SIZE には文字のサイズが定義されております。

if(DebF){
    DrawFormatString(0,0,RGB(0x00,0x00,0x00),"%d",Px);
    DrawFormatString(0,FONT_SIZE,RGB(0x00,0x00,0x00),"%d",Py);
    DrawFormatString(0,FONT_SIZE*2,RGB(0x00,0x00,0x00),"HitF = %d",HitF);
}


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


Name: Justy  ..伝説なるハッカー(496,541ポイント)   Date: 2010/01/29(金) 23:02   No:47331     
Title: Re:デバック用の表示関数    
>DebF
 DebFって #defineですか?


>これを関数にまとめられないでしょうか? 

 DebText関数はフォーマット付の文字列だけを指定していますが、それに加えて
"キー"の情報も引数に加えて、関数が呼ばれたら内部でキーと文字列を保存します。

    DebText("Test", "%d", Px);

 出来ればキーに対応した文字列リストという形で保存し、同じキーは同じリストに
追加するようにします。

 で、後はキーごとに表示するかどうかを別途指定して、フレームの最後でリストを
辿って一気に表示します。

 指定するキーをソース毎に統一しておけばソース毎に表示・非表示を切り替えられる、
というわけです。


 こんな感じのでよければ、とりあえず下の5つの関数があればいいでしょう。

    // デバッグ用表示文字列の指定
    void DebText(const char *key, const char *format, ...);

    // デバッグ用表示するキーの指定と取得
    void DebText_SetDisplayKey(const char *key, bool disp);
    bool DebText_IsDisplayKey(const char *key);

    // デバッグ文字列のクリア
    void DebText_Clear();

    // デバッグ文字列を表示
    void DebText_Draw();


 クリア関数は内部で保存していたキーが持っている文字列リストだけをクリアします。
 キーの表示・非表示情報は消しません。

 これはどこかで文字列をリストをクリアしないと過去に指定した文字列が延々と残ってしまうのを
 避けるためですが、普通は表示したら不要になるので、DebText_Draw関数内部で表示が終わったら
勝手にクリアしてしまってもいいのかもしれません。

 適当に書いたサンプルを挙げると

    DebText_SetDisplayKey("AAA", false);
    DebText_SetDisplayKey("BBB", true);
    while(!DxLib::ProcessMessage())
    {
        DxLib::ClearDrawScreen();
        DebText_Clear();
        
        // aaa.cpp
        DebText("AAA", "%d", Px);
        DebText("AAA", "%d", Py);
        
        // bbb.cpp
        DebText("BBB", "%d", HitF);
        
        DebText_Draw();
        DxLib::ScreenFlip();
    }

となっていたら、"BBB"のキーを指定した変数 HitFしか表示されない、というわけです。


 これならヘッダインクルードだけでOKですし、キーボードなどのイベントで、或いはシーンが変わる毎に
動的に ON/OFFを切り替えられます。

 こんな感じの仕組みならでまとめておく、というのはどうでしょう?


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



Name: たこやき  ..中級者(9,008ポイント)   Date: 2010/01/26(火) 00:30   No:47047       
Title: 自機の移動について    
一つ聞きたいことあるのですが、自機の移動している最中たまにずれて表示しながら移動するのですがこれは
直した方がいいのでしょうか?直した方がいい場合どの辺りを直せばよいのでしょうか?またどうしてこうい
うことが起きるのでしょうか?よろしくお願いします。


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


Name: sizuma [URL]  ..プログラマー(33,023ポイント)   Date: 2010/01/26(火) 00:38   No:47048     
Title: Re:自機の移動について    
直さなくていいと思うなら、それでいいのではないですか?

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

Name: たこやき  ..中級者(9,020ポイント)   Date: 2010/01/26(火) 16:00   No:47078     
Title: Re:自機の移動について    
回答有難うございます。出きることなら、ぶれながら移動するのは、見栄えが悪いので直したいのですが...
これはしょうがないものなのでしょうか?


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

Name: sizuma [URL]  ..プログラマー(33,549ポイント)   Date: 2010/01/26(火) 16:14   No:47080     
Title: Re:自機の移動について    
分かる人にはわかるかもしれないですけど、ぶれる、というのがどういう感じなのか、僕にはイメージが出来ません。
自分がわかってるから、人もわかってくれる、と思うのは勘違いです。
答えられる人は、知識が問題を推測できるほどあるからでしょう。


>自機の移動している最中たまにずれて表示しながら移動するのですが
まずは、自分が何をしてるか、ぐらい書きましょう。
シューティングを作ってるのでしょうか?
ライブラリは何を使ってるのでしょうか?
設計は、このサイトのゲームを模範としているのでしょうか?
環境は?
ぶれてるところのスクリーンショットを貼り付けるとわかりやすいかも。


僕はシューティング作ったことないので、おそらく分からないでしょうけど、質問をみて分かる人が答えてくれるような文章を書かないと、損するのは自分です。
漢字の使い方から推測するに、おそらくもう小学生ではないでしょう。


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

Name: softya  ..ハッカー(105,669ポイント)   Date: 2010/01/26(火) 16:17   No:47081     
Title: Re:自機の移動について    
質問の仕方が曖昧と言うか大雑把すぎると思いますよ。

>一つ聞きたいことあるのですが、自機の移動している最中たまにずれて表示しながら移動するのですがこれは
直した方がいいのでしょうか?

本人が良いと思えば良いし、良くないと思えば直すしかないです。
sizumaさんも言ってますが他人がとやかく言う事じゃないです。

>回答有難うございます。出きることなら、ぶれながら移動するのは、見栄えが悪いので直したいのですが... 

なら直しましょう。つまり最初の質問は意味がありませんよね。
直したいなら、直したいって書くべきでは?

>直した方がいい場合どの辺りを直せばよいのでしょうか?またどうしてこういうことが起きるのでしょうか?よろしくお願いします。 
>これはしょうがないものなのでしょうか?

ソースコードも見ていませんしアルゴリズムも聞いていませんので、神様でもエスパーでも予言者でも無い私には正直まったく分かりません。
「しょうがないものなのでしょうか?」本人が諦めれば、しょうがないって事になります。諦めないなら、なぜずれるのか調べてみてはどうでしょうか?必ず原因があるはずですよ。

1.デバッガでトレースする。
2.printfDxで座標情報を表示してバグの原因を探る。
3.プログラムに自機の座標がずれた事を検知するプログラムを入れて、原因を探る。


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

Name: takoyaki  ..中級者(13,566ポイント)   Date: 2010/01/26(火) 18:10   No:47092     
Title: Re:自機の移動について    
返信ありがとうございます。
自分でもなんて説明したらいいのかわかりません。
>シューティングを作ってるのでしょうか? 
はい。
>ライブラリは何を使ってるのでしょうか? 
自作です。
>設計は、このサイトのゲームを模範としているのでしょうか? 
いいえ違います。
>環境は? 
VC++2005です。
>ぶれてるところのスクリーンショットを貼り付けるとわかりやすいかも。 
張りました。
この画像が一瞬起きます。
動画を再生するとこの現象が多く起きるみたいです。
ソースは多分ここだろうなというところを載せます。
void Draw()
{
    // 画面消去
    HBRUSH oldbr = (HBRUSH)SelectObject(g_hdcOff, g_hbrBg);
    Rectangle(g_hdcOff, -1, -1, CLIENT_WIDTH+1, CLIENT_HEIGHT+1);
    SelectObject(g_hdcOff, oldbr);
    //----------------------------------------------------------     // ↓ここから描画処理
    // プレイヤーの表示
    DrawChr(g_Player.type, g_Player.x, g_Player.y);
    // 自機の弾表示
    for(i=0 ; i<PLSHOT_MAX ; i++)
    {
        if (g_PlShot[i].type == CT_PLSHOT)
        {
            DrawChr(g_PlShot[i].type,g_PlShot[i].x,g_PlShot[i].y);
        }
    }
    // ↑ここまで描画処理     //----------------------------------------------------------
    // 再描画
    InvalidateRect(g_hWnd,0,FALSE);
    UpdateWindow(g_hWnd);
} // キャラクタ描画関数 // type : キャラタイプ(eChrType) // x    : 表示位置X // y    : 表示位置Y void DrawChr(int type,int x,int y) {
    DrawImgMask(g_ImgData[type].idx, x,y,
        g_ImgData[type].sx, g_ImgData[type].sy,
        g_ImgData[type].w,  g_ImgData[type].h,
        g_ImgData[type].mx, g_ImgData[type].my);
} //================================================================================ // オフスクリーンへ画像表示。マスク表示→画像表示 // idx   : 画像データの添え字 // x,y   : 表示位置x,y // sx,sy : 画像切り出し位置x,y // w,h   : 画像切り出し幅、高さ // mx,my : マスク切り出し位置x,y //================================================================================ void DrawImgMask(int idx,int x,int y,int sx,int sy,int w,int h,int mx,int my) {
    BitBlt(g_hdcOff,x,y,w,h,g_hdcImg[idx],mx,my,SRCPAINT);
    BitBlt(g_hdcOff,x,y,w,h,g_hdcImg[idx],sx,sy,SRCAND);

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



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

Name: たこやき  ..中級者(9,032ポイント)   Date: 2010/01/26(火) 18:11   No:47093     
Title: Re:自機の移動について    
名前間違えました。

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

Name: softya  ..ハッカー(106,118ポイント)   Date: 2010/01/26(火) 18:17   No:47094     
Title: Re:自機の移動について    
ざっと見た感じですがWindowsAPIで作っていますよね。
これ、裏画面描画はしていないんでしょうか?
だとしたらタイミング次第で"ぶれ"ても仕方ないかと思いますが。

ちなみに画像貼れてないです。


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

Name: たこやき  ..中級者(9,062ポイント)   Date: 2010/01/26(火) 18:50   No:47097     
Title: Re:自機の移動について    
そうだったんですか。してないと思うのですが。ところで裏画面処理とはどういうのなので
しょうか?よろしくお願いします。


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

Name: shilfia  ..入門者(4,064ポイント)   Date: 2010/01/26(火) 19:03   No:47098     
Title: Re:自機の移動について    
裏画面処理はゲームプログラミングの館に解説が載っていますよ。
http://dixq.net/g/13.html


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

Name: softya  ..ハッカー(106,256ポイント)   Date: 2010/01/26(火) 19:12   No:47099     
Title: Re:自機の移動について    
画像を見る限り、どちらかと言うとvsync(垂直同期)のティアリング問題ですね。
http://spitfire.client.jp/program/fps.html
まぁ、「vsync ティアリング」で色々調べてみて下さい。

それと裏画面とは、画面バッファのコピーを作って画面消去や描画をそちらでする事で、消去から描画のタイミングでのちらつきをおさえる方法です。描画が終わったらvsyncしてから表画面にBitBltでコピーします。


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

Name: たこやき  ..中級者(9,268ポイント)   Date: 2010/01/26(火) 21:04   No:47103     
Title: Re:自機の移動について    
返信ありがとうございます。ティアリングの意味はわかったのですが、
どのサイトで調べてみてもDirectXのは載っているのですが、WINAPIで
使えるのが載ってなくて。。。
FPSの処理をこのサイトのFPS処理に変えたら少しは減ったのですが(動
画を再生した状態)完全には消えません。どうなおせばよいのでしょう
か?助けてください。。。


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

Name: softya  ..ハッカー(106,302ポイント)   Date: 2010/01/26(火) 23:08   No:47114     
Title: Re:自機の移動について    
私もWin32APIでゲームを作ったことが無いのでvsync出来るのかどうかさえわかりませんね。
ちょっと手のあいたときに調べてみます。


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

Name: fatens  ..初心者(6,567ポイント)   Date: 2010/01/27(水) 09:25   No:47126     
Title: Re:自機の移動について    
#include <windows.h>

HWND g_hWnd;
HDC g_hBackDC;        //裏画面のデバイスコンテキストハンドル
HBITMAP g_hBitmap;    //裏画面のビットマップ

LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT ps;

    switch (uMsg) {
        case WM_DESTROY:
            DeleteDC(g_hBackDC);
            DeleteObject(g_hBitmap);

            PostQuitMessage(0);
            break;
        case WM_CREATE:
            g_hWnd = hWnd;

            //裏画面を作成
            hdc = GetDC(hWnd);
            g_hBackDC = CreateCompatibleDC(hdc);
            g_hBitmap = CreateCompatibleBitmap(hdc, 640, 480);
            SelectObject(g_hBackDC, g_hBitmap);
            ReleaseDC(hWnd, hdc);
            break;
        case WM_PAINT:
            hdc = BeginPaint(hWnd, &ps);
            BitBlt(hdc, 0, 0, 640, 480, g_hBackDC, 0, 0, SRCCOPY);      //裏画面を表画面に転送
            EndPaint(hWnd, &ps);
        default:
            return DefWindowProc(hWnd, uMsg, wParam, lParam);
    }

    return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    HWND hWnd;
    WNDCLASS wc;
    MSG msg;
    RECT clrc = {0, 0, 640, 480};       //クライアント領域(640×480)

    //ウィンドウクラスを登録
    wc.style            = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc      = WindowProc;
    wc.cbClsExtra       = 0;
    wc.cbWndExtra       = 0;
    wc.hInstance        = hInstance;
    wc.hIcon            = NULL;
    wc.hCursor          = NULL;
    wc.hbrBackground    = (HBRUSH)GetStockObject(BLACK_BRUSH);
    wc.lpszMenuName     = NULL;
    wc.lpszClassName    = "Sample";

    if (!RegisterClass(&wc)) return 0;

    //クライアント領域の確保に必要なウィンドウ領域を取得
    AdjustWindowRect(&clrc, WS_OVERLAPPEDWINDOW ^ WS_THICKFRAME ^ WS_MAXIMIZEBOX, FALSE);

    //ウィンドウを作成
    hWnd = CreateWindow(
        wc.lpszClassName, "ダブルバッファリング",
        WS_OVERLAPPEDWINDOW ^ WS_THICKFRAME ^ WS_MAXIMIZEBOX,
        CW_USEDEFAULT, CW_USEDEFAULT,
        clrc.right - clrc.left, clrc.bottom - clrc.top,
        NULL, NULL, hInstance, NULL
    );

    if (!hWnd) return 0;

    //ウィンドウを表示
    ShowWindow(hWnd, SW_SHOW);
    UpdateWindow(hWnd);

    //メッセージループ
    while (1) {
        if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
            if (msg.message == WM_QUIT) break;

            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        else {
            //ゲームループ
        }
    }

    return msg.wParam;
}


あまりよろしくないつくりなのですが一応裏画面を使うプログラムを書いてみました。
ゲームループの中で描画処理をg_hBackDCに対して行います。
そして適当なタイミングでInvalidateRect(g_hWnd, NULL, FALSE);を呼び出すと
WM_PAINTで表画面に転送が行われます。

※FPSの処理は必ず入れてください。



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

Name: softya  ..ハッカー(106,452ポイント)   Date: 2010/01/27(水) 10:23   No:47127     
Title: Re:自機の移動について    
ティアリングを完全に防ぐ方法は無い様ですね。
理由は、Win32APIでは垂直同期のタイミングを掴むAPIが存在しないためです。
※ 周期(リフレッシュレート)だけは分かりますが、タイミングが分かるわけではありません。

ティアリングの原因↓
http://d4.princess.ne.jp/multimedia/ntsc/tearing.html

テレビゲーム機やDirectX、OpenGLでは、垂直同期に連動して裏表画面を切り替える機能がありますのでティアリングを完全に避けることが出来ます。Win32APIだけを使う限りは避けられないと考えた方が良さそうです。


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

Name: たこやき  ..中級者(11,363ポイント)   Date: 2010/01/27(水) 10:56   No:47128     
Title: Re:自機の移動について    
返信ありがとうございます。
http://www.play21.jp/board/formz.cgi?action=res&resno=47047&page=&id=dixq&rln=47126#47092
描画処理は上の通りです。
LRESULT CALLBACK WndProc(HWND hWnd,

        UINT message,

        WPARAM wParam,

        LPARAM lParam)

{
    // メッセージの種類に応じて処理を分岐します。
    HDC hdc;
    PAINTSTRUCT ps;
    HBITMAP hbmp;
    TCHAR buff[10];
    switch (message)
    {
        // ウィンドウ作成時の処理
        case WM_CREATE:
            // オフスクリーンの作成
            hdc = GetDC(hWnd);
            g_hdcOff = CreateCompatibleDC(hdc);
                    
            hbmp = CreateCompatibleBitmap(hdc,CLIENT_WIDTH,CLIENT_HEIGHT);
            ReleaseDC(hWnd, hdc);
            SelectObject(g_hdcOff,hbmp);
            DeleteObject(hbmp);
            SetTimer( hWnd, NULL, 1000, NULL );
            return 0;
        // マウス移動
        case WM_MOUSEMOVE:
            g_MouseX = LOWORD(lParam);
        g_MouseY = HIWORD(lParam);
            return 0;
    case WM_TIMER:
            InvalidateRect(hWnd,NULL,FALSE);
        return 0;
        // クライアント領域の再描画処理
        case WM_PAINT:
            hdc = BeginPaint(hWnd,&ps);    
            _stprintf(buff,_T("%.1f\n"),FpsDraw);
            SetWindowText(hWnd,buff);
            // オフスクリーンからウィンドウに転送
            BitBlt(hdc,0,0,CLIENT_WIDTH,CLIENT_HEIGHT,g_hdcOff,0,0,SRCCOPY);
            EndPaint(hWnd,&ps);
            
            return 0;
        // ウインドウが破棄されたときの処理
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
        // デフォルトの処理
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
    }       
} // エントリポイント int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow ) {         //WNDCLASSEXの初期化
      ・
      ・
      ・
    // ウインドウクラスを登録します。
    RegisterClassEx(&wcex);
    RECT rect = {0, 0, CLIENT_WIDTH, CLIENT_HEIGHT};
    AdjustWindowRect(&rect, MY_WS, FALSE);
    int width  = rect.right - rect.left;
    int height = rect.bottom - rect.top;
    // ウインドウを作成します。
<pre>    g_hWnd = CreateWindow(wcex.lpszClassName,_T("WinAPISample"),MY_WS,100,30,width,    height,NULL,NULL,hInstance,NULL);
    // ウインドウを表示します。
    ShowWindow(g_hWnd, nCmdShow);
    UpdateWindow(g_hWnd);
    // 初期化処理
    Init();
   // タイマーの精度を1msにする
    TIMECAPS tc;
    timeGetDevCaps(&tc, sizeof(tc));
    timeBeginPeriod(tc.wPeriodMin);
    // メッセージループ
    while(true)
    {
        if (PeekMessage(&msg, NULL, 0,0,PM_REMOVE))
        {
            if (msg.message == WM_QUIT) break;
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        else
        {
             WaitFps();
                Draw();
                Sleep(1);
        }
    }
    timeEndPeriod(tc.wPeriodMin);
    // 終了処理
    Cleanup();
    // 戻り値を返します。
    return (int)msg.wParam;

}

とやったのですが、ティアリングが取れません。


2,095ポイント を手に入れた。

Name: たこやき  ..中級者(11,461ポイント)   Date: 2010/01/27(水) 11:08   No:47130     
Title: Re:自機の移動について    
回答ありがとうございます。ということはWIN32APIではティアリングは
起きても直すことが出来ないのはしょうがないということでしょうか?
前にこのサイトでゲームを提供してくれたC言語とWIN32APIで作ったゲームでは
ティアリングは起きなかったのですが、どういうことなのでしょうか?


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

Name: softya  ..ハッカー(106,468ポイント)   Date: 2010/01/27(水) 11:17   No:47131     
Title: Re:自機の移動について    
>前にこのサイトでゲームを提供してくれたC言語とWIN32APIで作ったゲームでは
>ティアリングは起きなかったのですが、どういうことなのでしょうか?

そのゲームを見ていませんので分かりません。
ソースコードがあるなら調べられるのでは?


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

Name: fatens  ..初心者(6,741ポイント)   Date: 2010/01/27(水) 12:55   No:47133     
Title: Re:自機の移動について    
>DeleteObject(hbmp);
 SetTimer( hWnd, NULL, 1000, NULL );

せっかく作ったビットマップをすぐに削除しては意味がありません。
WM_DESTROYで削除すれば良いと思います。
また、私は先のコードでビットマップをグローバル変数にしてしまいましたがstaticで良いですね。

それと、画面の書き換えは1秒間隔で良いのですか?
シューティングゲームとのことなので普通は1/60秒周期かなと。


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

Name: たこやき  ..中級者(12,237ポイント)   Date: 2010/01/27(水) 14:14   No:47140     
Title: Re:自機の移動について    
softyaさん
返信ありがとうございます。
そうですか・・・
すみません。exeファイルと画像だけでしたので、ソースコードはわかりません。
 fatensさん
返信ありがとうございます。
>それと、画面の書き換えは1秒間隔で良いのですか?
>シューティングゲームとのことなので普通は1/60秒周期かなと。



                static DWORD befoer_time,befoer,Count0t;

                DWORD now_time,t;

                static int count=0;

                long long team=0;

                TCHAR buff[100];

                DWORD cnt;

                static long long surprus_Time=0;



                now_time=timeGetTime();

                if(!befoer_time)

    befoer_time=timeGetTime();
                if(!befoer)
    befoer=timeGetTime();
                surprus_Time+=1000/FPS-(long long)(now_time-befoer_time);                 if(surprus_Time<=0){
    team=0;
                }                 else                 {
    if(team!=surprus_Time)
          team=surprus_Time;
          surprus_Time=0;
          ++count;
                }                                  if(team>0)
    Sleep(team);
                wsprintf(buff,_T("%u\n"),(now_time-befoer_time)+team);                 OutputDebugString(buff);                 befoer_time=timeGetTime();                 cnt=timeGetTime();                 t=cnt-befoer;                  if(t>=1000)                 {
    cnt=t;
    FpsDraw=count*1000/t;
    count=0;
    befoer=timeGetTime();

                }

これでは1/60秒周期にならないのでしょうか。
できたらどこを直せばよいのかおしえてくださるとありがたいです。
ご指摘よろしくお願いします。


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

Name: fatens  ..初心者(6,803ポイント)   Date: 2010/01/27(水) 14:24   No:47142     
Title: Re:自機の移動について    
読みにくいのでとりあえずインデントを直してください。
あと、スペルミスも

befoer  → before
surprus → surplus
team    → ?


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

Name: たこやき  ..中級者(11,681ポイント)   Date: 2010/01/27(水) 14:43   No:47144     
Title: Re:自機の移動について    
すみません。

                static DWORD before_time,befoer,Count0t;
                DWORD now_time,t;
                static int count=0;
                long long IdleTime =0;
                TCHAR buff[100];
                DWORD cnt;
                static long long surplus_Time=0;
                now_time=timeGetTime();
                if(!befoer_time)
                    befoer_time=timeGetTime();
                if(!befoer)
                    befoer=timeGetTime();
                surplus_Time+=1000/FPS-(long long)(now_time-befoer_time);
                if(surplus_Time<=0){
                    IdleTime =0;
                }
                else
                {
                    if(IdleTime!=surplus_Time)
                        IdleTime=surplus_Time;
                surplus_Time=0;
                    ++count;
                }
        
        
                if(IdleTime>0)
                    Sleep(IdleTime);
                wsprintf(buff,_T("%u\n"),(now_time-before_time)+IdleTime);
                OutputDebugString(buff);
                before_time=timeGetTime();
                cnt=timeGetTime();
                t=cnt-before; 
                if(t>=1000)
                {
                    cnt=t;
                    FpsDraw=count*1000/t;
                    count=0;
                    before=timeGetTime();
                }

です。


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

Name: softya  ..ハッカー(106,567ポイント)   Date: 2010/01/27(水) 15:02   No:47145     
Title: Re:自機の移動について    
>そうですか・・・
>すみません。exeファイルと画像だけでしたので、ソースコードはわかりません。 

ソース無しでWin32APIしか使っていないと言うのはなぜ分かったのでしょうか?
そのexeファイルのある場所を教えてもらませんか。


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

Name: たこやき  ..中級者(11,802ポイント)   Date: 2010/01/27(水) 17:54   No:47164     
Title: Re:自機の移動について    
説明文に書いてありました。
サイトならあります。
http://www14.atpages.jp/kawae/shot.html
ただいまは工事中で取れないみたいなのですが。
今持っていますが、流しますか?
ただファイルが、ありすぎて全部流すのは出来ないのですが。


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

Name: softya  ..ハッカー(106,911ポイント)   Date: 2010/01/27(水) 18:19   No:47165     
Title: Re:自機の移動について    
>ただいまは工事中で取れないみたいなのですが。
>今持っていますが、流しますか? 

いえ、大丈夫です。
同サイトのパズルを見た限りでは、Win32APIしか使っていない様ですね。
使っている関数から、裏画面制御はしていると思います。

FPS制御と裏画面処理だけでティアリングを完全には押さえ込めないなずなんですけどね。


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

Name: たこやき  ..中級者(11,805ポイント)   Date: 2010/01/27(水) 18:38   No:47167     
Title: Re:自機の移動について    
裏画面処理はしているつもりでいるのですが、これだけでは足りないということでしょうか。。。
http://www.play21.jp/board/formz.cgi?action=res&resno=47047&page=&id=dixq&rln=47165#47165


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

Name: たこやき  ..中級者(11,843ポイント)   Date: 2010/01/27(水) 18:51   No:47171     
Title: Re:自機の移動について    
このサイトのパズル、ティアリングは起きてないのですが、?のところが微妙にブレて見えてしまうのは
自分だけでしょうか?


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

Name: softya  ..ハッカー(107,012ポイント)   Date: 2010/01/27(水) 18:59   No:47172     
Title: Re:自機の移動について    
>このサイトのパズル、ティアリングは起きてないのですが、?のところが微妙にブレて見えてしまうのは 
あれ?
Vistaだとティアリングが発生しづらいので、私が気づかなったのかも知れませんね。

じゃあ、exeだけをzipしてメールで送ってもらえますか?
公開してしまうと作者さんの再配布の問題があると思いますので。



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

Name: たこやき  ..中級者(11,857ポイント)   Date: 2010/01/27(水) 19:07   No:47173     
Title: Re:自機の移動について    
わかりました。
シューティングゲームの方ですよね?


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

Name: softya  ..ハッカー(107,047ポイント)   Date: 2010/01/27(水) 19:17   No:47174     
Title: Re:自機の移動について    
>わかりました。
>シューティングゲームの方ですよね?

はい。そうです。
メールアドレスは、名前のところに付けてあります。


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

Name: たこやき  ..中級者(11,879ポイント)   Date: 2010/01/27(水) 19:33   No:47175     
Title: Re:自機の移動について    
返信ありがとうございます。今送りました。無事届いたでしょうか?

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

Name: softya  ..ハッカー(107,106ポイント)   Date: 2010/01/27(水) 19:50   No:47176     
Title: Re:自機の移動について    
>返信ありがとうございます。今送りました。無事届いたでしょうか?

残念ながら届いていないみたいです。
確認をお願いします。


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

Name: たこやき  ..中級者(11,896ポイント)   Date: 2010/01/27(水) 19:59   No:47177     
Title: Re:自機の移動について    
今度こそちゃんと送りました。どうですか?

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

Name: softya  ..ハッカー(107,141ポイント)   Date: 2010/01/27(水) 21:01   No:47181     
Title: Re:自機の移動について    
>今度こそちゃんと送りました。どうですか?

残念ながら届いていません。


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

Name: たこやき  ..中級者(11,931ポイント)   Date: 2010/01/27(水) 21:15   No:47183     
Title: Re:自機の移動について    
今度はどうでしょうか?
自分に送ってみましたが、無事届いています。


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

Name: softya  ..ハッカー(107,194ポイント)   Date: 2010/01/27(水) 22:16   No:47190     
Title: Re:自機の移動について    
>今度はどうでしょうか?
>自分に送ってみましたが、無事届いています。 

うーん。だめですね。
自分で送ったのは届くんですけどね。

こちらに送ってみてもらえます?
<スパムが嫌なのでメールアドレスは削除>
 編集済み


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

Name: たこやき  ..中級者(11,945ポイント)   Date: 2010/01/27(水) 22:41   No:47193     
Title: Re:自機の移動について    
わかりました。送ってみます。どうでしょうか?

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

Name: たこやき  ..中級者(11,905ポイント)   Date: 2010/01/27(水) 23:02   No:47196     
Title: Re:自機の移動について    
届きませんか・・・
一体何が原因なのでしょうか・・・
送信されて、エラーメッセージがないので・・・
届いても問題ないと思うのですが・・・


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

Name: softya  ..ハッカー(107,220ポイント)   Date: 2010/01/27(水) 23:12   No:47197     
Title: Re:自機の移動について    
gooは、届きました。
gmailは相変わらず届きませんね。


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

Name: たこやき  ..中級者(11,959ポイント)   Date: 2010/01/27(水) 23:18   No:47198     
Title: Re:自機の移動について    
返信ありがとうございます。とりあえず届きましたか。
安心しました。
これをどうするのでしょうか?


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

Name: softya  ..ハッカー(108,354ポイント)   Date: 2010/01/27(水) 23:40   No:47199     
Title: Re:自機の移動について    
使っているAPIの一覧です。

USER32.BeginPaint
GDI32.BitBlt
USER32.ChangeDisplaySettingsA
KERNEL32.CloseHandle
GDI32.CreateCompatibleBitmap
GDI32.CreateCompatibleDC
KERNEL32.CreateFileA
GDI32.CreateFontA
USER32.CreateWindowExA
USER32.DefWindowProcA
GDI32.DeleteDC
GDI32.DeleteObject
USER32.DestroyWindow
USER32.DispatchMessageA
USER32.EndPaint
USER32.EnumThreadWindows
KERNEL32.ExitProcess
USER32.FindWindowA
KERNEL32.GetACP
KERNEL32.GetCommandLineA
KERNEL32.GetCPInfo
KERNEL32.GetCurrentThreadId
USER32.GetDC
KERNEL32.GetEnvironmentStrings
KERNEL32.GetFileType
KERNEL32.GetLastError
KERNEL32.GetLocalTime
USER32.GetMessageA
KERNEL32.GetModuleFileNameA
KERNEL32.GetModuleHandleA
GDI32.GetObjectA
KERNEL32.GetOEMCP
KERNEL32.GetProcAddress
KERNEL32.GetProcessHeap
KERNEL32.GetStartupInfoA
KERNEL32.GetStdHandle
GDI32.GetStockObject
KERNEL32.GetStringTypeW
USER32.GetSystemMetrics
KERNEL32.GetTimeZoneInformation
KERNEL32.GetVersion
KERNEL32.GetVersionExA
KERNEL32.GlobalMemoryStatus
KERNEL32.HeapAlloc
KERNEL32.HeapFree
USER32.InvalidateRect
KERNEL32.LCMapStringA
USER32.LoadCursorA
USER32.LoadIconA
USER32.LoadImageA
KERNEL32.LoadLibraryA
USER32.MessageBoxA
USER32.MoveWindow
WINMM.PlaySoundA
USER32.PostQuitMessage
KERNEL32.RaiseException
USER32.RegisterClassExA
USER32.ReleaseDC
KERNEL32.RtlUnwind
GDI32.SelectObject
USER32.SendMessageA
GDI32.SetBkMode
KERNEL32.SetConsoleCtrlHandler
KERNEL32.SetFilePointer
KERNEL32.SetHandleCount
GDI32.SetTextColor
USER32.SetTimer
USER32.SetWindowLongA
USER32.SetWindowPos
USER32.ShowCursor
USER32.ShowWindow
GDI32.TextOutA
KERNEL32.TlsAlloc
KERNEL32.TlsFree
KERNEL32.TlsGetValue
KERNEL32.TlsSetValue
USER32.TranslateMessage
MSIMG32.TransparentBlt
KERNEL32.UnhandledExceptionFilter
USER32.UpdateWindow
KERNEL32.VirtualAlloc
KERNEL32.VirtualFree
KERNEL32.WriteFile
USER32.wsprintfA

特にティアリングを予防するためのAPIは見当たりませんね。
ごく普通のAPIばっかりです。
って事で中でDirectXとかOpenGLとかも使ってないことが確認出来ました。
まぁ、だから困ったなって話なんですけどね。


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

Name: たこやき  ..中級者(11,976ポイント)   Date: 2010/01/28(木) 00:00   No:47200     
Title: Re:自機の移動について    
返信ありがとうございます。
困りました・・・

というかすごいです!?
どうやって調べたんですか!?


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

Name: softya  ..ハッカー(108,385ポイント)   Date: 2010/01/28(木) 00:35   No:47204     
Title: Re:自機の移動について    
>というかすごいです!?
>どうやって調べたんですか!?

リバースエンジニアリング関係のデバッガ・ツールです。
悪い用途にも使えるので、ここに書くのは止めて置きます。


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

Name: たこやき  ..中級者(12,038ポイント)   Date: 2010/01/28(木) 01:20   No:47208     
Title: Re:自機の移動について    
返信ありがとうございます。
悪い用途には使いませんので、
できたら教えていただきたいので大変恐縮なのですが、
メールで教えてくださらないでしょうか?


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

Name: じゅんだった  ..ぴよぴよ(322ポイント)   Date: 2010/01/28(木) 09:17   No:47215     
Title: Re:自機の移動について    
お話戻って済みません。
関係ないかも。で、申し訳ないのですが、
WM_PAINTに入っているSetWindowText()の位置が気になりました。

BeginPaint()とEndPaint()の間のBitBlt()で裏画面から一発転送。なのだと思うので、関係なさそうには思えるのですが、その前でやってるSetWindowText()がタイミング的になんか足を引っ張ったりはしないかと。

ちょっとコメントアウトしてみるか、

//  _stprintf(buff,_T("%.1f\n"),FpsDraw);
//  SetWindowText(hWnd,buff);

BeginPaint()の前かEndPaint()の後ろにはじき出すか、

// クライアント領域の再描画処理
case WM_PAINT:
    hdc = BeginPaint(hWnd,&ps);    

    // オフスクリーンからウィンドウに転送
    BitBlt(hdc,0,0,CLIENT_WIDTH,CLIENT_HEIGHT,g_hdcOff,0,0,SRCCOPY);
    EndPaint(hWnd,&ps);

// EndPaint()の後ろにSetText()を移動してみる
    _stprintf(buff,_T("%.1f\n"),FpsDraw);
    SetWindowText(hWnd,buff);

    return 0;

してみると、よさげ。になったりしないでしょうか。

あてずっぽうでごめんなさい。


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

Name: たいちう  ..熟練のプログラマー(52,391ポイント)   Date: 2010/01/28(木) 09:25   No:47216     
Title: Re:自機の移動について    
> できたら教えていただきたいので大変恐縮なのですが、
> メールで教えてくださらないでしょうか?

softyaさんがどのように判断されるかは別ですが、
今までに出ているヒントから自分で調べられない人には必要のないツールです。
ツールを教えれば今度はツールの使い方の質問をするようになるだけです。

替わりに私は入門書を教えましょう。
ふざけた本ですが入門にはなります。
『解析魔法少女美咲ちゃん』


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

Name: softya  ..ハッカー(108,554ポイント)   Date: 2010/01/28(木) 09:44   No:47219     
Title: Re:自機の移動について    
一応メールで送りましたが、使い方は自分で調べて下さい。
これに関しては、質問は回答出来ません。


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

Name: たこやき  ..中級者(13,261ポイント)   Date: 2010/01/28(木) 17:08   No:47236     
Title: Re:自機の移動について    
返信ありがとうございます。
使い方は自分で調べんたいと思います。回答ありがとうございました!


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

Name: たこやき  ..中級者(14,274ポイント)   Date: 2010/01/29(金) 18:48   No:47322 解決!     
Title: Re:自機の移動について    
解決しました。

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



Name: たこやき  ..中級者(13,224ポイント)   Date: 2010/01/28(木) 02:46   No:47210       
Title: FPSについて    
このシューティングゲームのFPSのソースなのですが、これを実行して移動させとたまに
一瞬止まってそしてすぐに移動するような現象がおきてしまいます。 
FPSの様子も56から46まで落ちる現象(処理落ち?)が起きます。
どの辺を直せばよいのでしょうか?

                static DWORD before_time,befoer,Count0t;
                DWORD now_time,t;
                static int count=0;
                long long IdleTime =0;
                TCHAR buff[100];
                DWORD cnt;
                static long long surplus_Time=0;
                now_time=timeGetTime();
                if(!befoer_time)
                    befoer_time=timeGetTime();
                if(!befoer)
                    befoer=timeGetTime();
                surplus_Time+=1000/FPS-(long long)(now_time-befoer_time);
                if(surplus_Time<=0){
                    IdleTime =0;
                }
                else
                {
                    if(IdleTime!=surplus_Time)
                        IdleTime=surplus_Time;
                surplus_Time=0;
                    ++count;
                }
                if(IdleTime>0)
                    Sleep(IdleTime);
                wsprintf(buff,_T("%u\n"),(now_time-before_time)+IdleTime);
                OutputDebugString(buff);
                before_time=timeGetTime();
                cnt=timeGetTime();
                t=cnt-before; 
                if(t>=1000)
                {
                    cnt=t;
                    FpsDraw=count*1000/t;
                    count=0;
                    before=timeGetTime();
                }

足りないところがあれば
補足します。よろしくおねがいします。


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


Name: fatens  ..初心者(7,055ポイント)   Date: 2010/01/28(木) 09:26   No:47217     
Title: Re:FPSについて    
とりあえずFPSを一定にする処理だけにしてみましょう。
そのために必要なのは、
現在の時間:now_time
1秒前の時間:before_time
それらの差を保持する変数:surplus_time
現在のフレーム:frame
理想時間:ideal_time
です。

理想時間 = (DWORD)(frame * 1000.0(ミリ秒) / 60(FPS))
これで何フレーム目に何ミリ秒経過していれば良いのか分かります。

理想時間に達していなかった場合はその分を待機させます。
Sleep(ideal_time - surplus_time)

1秒経過したら、1秒前の時間を現在の時間にして、現在のフレームを0にします。

一度この条件でコードを書いてみてもらえますか?


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

Name: softya  ..ハッカー(108,504ポイント)   Date: 2010/01/28(木) 09:37   No:47218     
Title: Re:FPSについて    
FPSですが、画面のリフレッシュレートを中途半端に下回っているとティアリングが確実に発生します。
液晶モニタだったら60とかでしょうから、FPSは60、30、20から選ばないといけません。
まず、モニタのリフレッシュレートを確認して下さい。


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

Name: たこやき  ..中級者(13,965ポイント)   Date: 2010/01/28(木) 19:10   No:47242     
Title: Re:FPSについて    
fatensさん
返信ありがとうございます。    
参考にしてやってみましたが。
                static DWORD before_time,before,Count0t;
                DWORD now_time,t;
                static int frame=0;
                DWORD ideal_time=0;
                TCHAR buff[100];
                DWORD cnt;
                static long surplus_time=0;
                now_time=timeGetTime();
                if(!before_time)
                    before_time=timeGetTime();
                if(!before)
                    before=timeGetTime();
                surplus_time=(frame*1000)/60-(1000/FPS)-((long)now_time-before);
<pre>                
                ideal_time=(DWORD)(frame*1000)/60;
                if(ideal_time-surplus_time<0)
                {
                    surplus_time+=(frame*1000)/60;
                }
                if((long)ideal_time-surplus_time>0)
                    Sleep((long)ideal_time-surplus_time);
                before=timeGetTime();
                frame++;
                if(ideal_time>=1000)
                {
                    wsprintf(buff,_T("%d\n"),frame);
                    OutputDebugString(buff);
                     before_time=timeGetTime();
                    frame=0;
                }

自分のが正しくプログラミングされてないと思いますが。
どの辺りを直せばよいのでしょうか?
>softyaさん
返信ありがとうございます。
プログラムでカウントしましたが、一秒で60回で毎回16msです。


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

Name: fatens  ..初心者(7,249ポイント)   Date: 2010/01/28(木) 19:29   No:47243     
Title: Re:FPSについて    
FPSの制御だけなら前に書いた5つの変数で十分なんですけどね。

1秒前の時間を取得
現在のフレームを初期化

//メッセージループ
while (TRUE) {
    if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
        if (msg.message == WM_QUIT) break;

        DispatchMessage(&msg);
    }
    else {
        現在の時間を取得
        時間の差を求める
        理想時間の計算

        //ゲームループ

        理想時間 > 時間の差 なら 待機する

        裏画面を表画面に転送

        1秒たったら、1秒前の時間を現在の時間にする・フレームを初期化する

    フレームをインクリメント
    }
}


まあ本来なら専用のスレッドですべきなんでしょうが……


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

Name: たこやき  ..中級者(14,060ポイント)   Date: 2010/01/28(木) 21:19   No:47257     
Title: Re:FPSについて    
返信ありがとうございます。
ご指摘のとおりプログラミングしてみたら、処理することが出来ました。
ただ、FPSが61fpsに固定されてしまっていて60に固定が出来ません。
これは仕方のないことなのでしょうか?


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

Name: たこやき  ..中級者(13,871ポイント)   Date: 2010/01/28(木) 21:40   No:47262     
Title: Re:FPSについて    
ソースです。
                static DWORD before_time;
                DWORD now_time,t;
                DWORD ideal_time=0;
                static int frame=0;
                TCHAR buff[100];
                DWORD cnt;
                static long surplus_time=0;
                now_time=timeGetTime();
                if(!before_time)
                    before_time=timeGetTime();
                surplus_time=(long)(now_time-before_time);
                ideal_time=(DWORD)(frame*1000)/60
                if((long)ideal_time-surplus_time>0)
                    Sleep((long)ideal_time-surplus_time);
                if(surplus_time>=1000)
                {
                    FpsDraw=frame;
                    before_time=timeGetTime();
                    frame=0;
                }
                frame++;


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

Name: たこやき  ..中級者(13,896ポイント)   Date: 2010/01/28(木) 21:46   No:47263     
Title: Re:FPSについて    
度々すみません。あとカクカクが取れません。

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

Name: fatens  ..初心者(7,398ポイント)   Date: 2010/01/28(木) 22:08   No:47264     
Title: Re:FPSについて    
surplus_timeはDWORDで良いですしstaticである必要もありません。
またソースの投稿は始めと終わりをpreで一度だけ囲んでください。
不要なスペースも消して。

FPSが61になってしまうのは工夫すれば何とかなるのかもしれません。

ところで、ソースでは計算や描画にかかる時間を無視してフレームを制御しているように見えますが……


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

Name: たこやき  ..中級者(13,948ポイント)   Date: 2010/01/28(木) 22:30   No:47265     
Title: Re:FPSについて    
返信ありがとうございます。
計算の処理や描画の処理はその後に処理してます。もしかしてなにか勘違いか
間違っていますでしょうか?
ご指摘よろしくお願いします。


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

Name: softya  ..ハッカー(108,801ポイント)   Date: 2010/01/28(木) 23:19   No:47269     
Title: Re:FPSについて    
fatensさんがNo:47217で言うとおりにしてもらえますか。
FPS制御だけのメインを含んだプログラムを書いてみて下さい。他の制御は絵を一枚出すだけぐらいで。
それで、全部のコードを添付する形でお願いします。   
ちゃんと、タブでインデントを整理して下さいね。

ここもチェックです。
http://dixq.net/g/51.html


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

Name: たこやき  ..中級者(13,964ポイント)   Date: 2010/01/28(木) 23:49   No:47271     
Title: Re:FPSについて    
返信ありがとうございます。
これです。


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

Name: たこやき  ..中級者(13,993ポイント)   Date: 2010/01/28(木) 23:52   No:47272     
Title: Re:FPSについて    
一からやるのは面倒くさかったのでゲームごと送ります。キー入力は出来ないですけど・・・

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

Name: softya  ..ハッカー(108,930ポイント)   Date: 2010/01/29(金) 00:16   No:47274     
Title: Re:FPSについて    
試しに、今のをFPS処理をコメントアウトして、代わりの下記サイトのFPS関数を組み込んでみて下さい。
http://dixq.net/g/51.html
それとDraw();の後のSleep(1);は次のようにすれば不要だと思います。
今の状態: Fps();→Draw();→Sleep(1);
新しい状態:Draw();→wait_fanc();
case WM_PAINT:のインデントも間違っているので直して下さいね。



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

Name: たこやき  ..中級者(14,046ポイント)   Date: 2010/01/29(金) 05:59   No:47286     
Title: Re:FPSについて    
返信ありがとうございます。
ここのサイトのFPSの制御は最終手段として使いたいので、
他に方法はないのでしょうか?


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

Name: たこやき  ..中級者(14,061ポイント)   Date: 2010/01/29(金) 06:01   No:47287     
Title: Re:FPSについて    
最終手段しか方法はないのでしょうか?

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

Name: たこやき  ..中級者(14,093ポイント)   Date: 2010/01/29(金) 06:07   No:47288     
Title: Re:FPSについて    
あとここのFPS制御を使ってもカクカクが起きてしまいます。

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

Name: fatens  ..初心者(7,193ポイント)   Date: 2010/01/29(金) 15:03   No:47307     
Title: Re:FPSについて    
いろいろ漁ってたら昔のソースが出てきたので、少し修正して添付しました。
コメントは大して付けてませんが似たような感じですし、
それほど難しい処理はしていませんので読み解いてください。

FPSの制御部分はあれだけ書いた割に適当なコードですが、
私の方では問題なく(カクカクになったりせず)動いているので良しとしましょう。
(FPSの表示はしていないので実際どうなのかは知りませんが)

FPSを一定に保つことももちろん重要なことですが、
いくら60FPSがキープできたとしても内容が良くなければゲームとしては成り立たないので、
とりあえずこのソースで動くのであれば、これを元にして内容を作り込んでいくことをお薦めします。


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

Name: たこやき  ..中級者(14,180ポイント)   Date: 2010/01/29(金) 18:25   No:47317     
Title: Re:FPSについて    
最後の質問にします。
そのソースでやってみましたが、今度はティアリングが発生します。
計ったらFPSも62fpsか61fpsとなってしまします。
これらは無視しても大丈夫なのでしょうか?


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

Name: fatens  ..初心者(7,313ポイント)   Date: 2010/01/29(金) 18:36   No:47318     
Title: Re:FPSについて    
>そのソースでやってみましたが、今度はティアリングが発生します。 

Win32 APIだけではティアリングを防ぐことはできません。
どうしても防ぎたいならDirectXなどを使うしかないと思います。


>計ったらFPSも62fpsか 61fpsとなってしまします。

1フレーム16ミリ秒になっているので約62.5fpsになるでしょうね。
先にも書きましたが、少しぐらいの誤差なら無視して進めた方が良いと思います。
別に後で直すこともできますから。


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

Name: たこやき  ..中級者(14,259ポイント)   Date: 2010/01/29(金) 18:47   No:47319     
Title: Re:FPSについて    
そうですか。。。

>先にも書きましたが、少しぐらいの誤差なら無視して進めた方が良いと思います。
>別に後で直すこともできますから。
わかりました。
回答ありがとうございました!


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

Name: たこやき  ..中級者(14,268ポイント)   Date: 2010/01/29(金) 18:48   No:47321 解決!     
Title: Re:FPSについて    
解決しました。

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



Name: dic  ..熟練のプログラマー(49,450ポイント)   Date: 2010/01/28(木) 17:48   No:47237       
Title: 途中まで完成しました    
いつも痛い子ですいません

私もシューティングを作成しているのですが
途中までできました

複雑な要素は避け
ザツでもいいから作ってみました

感想は・・・ないかもしれませんが
あったら感想くれると励みになります

http://www1.axfc.net/uploader/He/so/262597


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


Name: Tororo  ..かけだし(2,372ポイント)   Date: 2010/01/28(木) 18:02   No:47238     
Title: Re:途中まで完成しました    
楽しかったです。
ブロックを消すと出る青いものの意味が良くわかんなかったです^^;
理解力無くてすみません><


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

Name: ひよこ  ..比類無きプログラマー(79,212ポイント)   Date: 2010/01/28(木) 18:21   No:47239     
Title: Re:途中まで完成しました    
これって、全部dicさんが(絵とか、プログラムとか)作ったのですか?
DirectXですか?なんか、互換性のために(Vista Basic?)ウィンドウの色が変わりました。
自機がブロックを通り抜けてしまうのは、仕様ですか?
ブロックでのパズル?みたいなゲームですね。
新鮮さがありました。
制作頑張ってください。


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

Name: mnkr  ..入門者(3,638ポイント)   Date: 2010/01/28(木) 19:48   No:47246     
Title: Re:途中まで完成しました    
プレイしましたー

これからいろいろと改良できそうな感じですね!
良いと思います。

バグ?なのかわかりませんが、
機体変更とかせずにいきなりステージ1を選択してプレイすると
機体が表示しません・・・弾は出るみたいですけど。


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

Name: dic  ..熟練のプログラマー(49,632ポイント)   Date: 2010/01/29(金) 17:59   No:47313     
Title: Re:途中まで完成しました    
Tororoさん  ひよこさん  mnkrさん
感想ありがとうございます

青いブロックは、敵がいないので、この青いブロックに当たるとダメージを受ける計画です
体力が減るのですが、まだ、実装までしてないので、ほとんど意味ないですね^^;

絵は海外のサイトから借りましたので、完全には私の作品でないです
絵は、依頼して描いてもらう予定です
プログラムはDirectXのdll以外は全部自前です

ステージ1をいきなり始めると機体が表示されないですね
ソースをチェックしたところ、ミスっていました


色々問題はあるのは分かってますが、ゆっくり作っていきます^^
弾の移動計算などは算数なのです


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

Name: dic  ..熟練のプログラマー(49,639ポイント)   Date: 2010/01/29(金) 17:59   No:47314 解決!     
Title: Re:途中まで完成しました    
解決ボタン押し忘れました

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



Name: メリ  ..ぴよぴよ(110ポイント)   Date: 2010/01/29(金) 12:07   No:47299       
Title: warning D9035 : オプション 'Wp64' の使用は現在推奨さ…という警告が…    
環境はVC++2008EEです。
DXライブラリです。

新しいプロジェクトを作り、ビルドをしたのですが、次のような警告がでます。

cl : コマンド ライン warning D9035 : オプション 'Wp64' の使用は現在推奨されていません。今後のバージョンからは削除されます。

これを消したいのですがどうすれば解決できるでしょうか?


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


Name: kazuoni [URL]  ..ハッカー(131,870ポイント)   Date: 2010/01/29(金) 12:37   No:47301     
Title: Re:warning D9035 : オプション 'Wp64' の使用は現在推奨さ…という警告が…    
ググると色々なサイトがヒットします。

プログラム覚書 〜PSP(パーソナルソフトウェアプロセス)〜
warning D9035
http://d.hatena.ne.jp/hyh_hyh/20090621/1245606031


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

Name: メリ  ..ぴよぴよ(125ポイント)   Date: 2010/01/29(金) 14:58   No:47306 解決!     
Title: Re:warning D9035 : オプション 'Wp64' の使用は現在推奨さ…という警告が…    
ありがとうございます。
解決しました。


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



Name: 質問者  ..ぴよぴよ(842ポイント)   Date: 2010/01/28(木) 13:06   No:47225       
Title: 構造体のプログラムの意味    
急な質問失礼します。
ゲームを作る前に構造体などの意味を理解しようとサンプルを見ていたのですが
よくわからないところが出てきて困っています。

typedef struct{ 
    double x,y;
    int status,counter;
    int shot [11][15]; 
} BODY_player_t;

extern BODY_player_t Player;

このソースの
 BODY_player_t;
extern BODY_player_t Player;

の意味がよくわかりません。
どなたか教えていただけませんか?


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


Name: softya  ..ハッカー(108,699ポイント)   Date: 2010/01/28(木) 13:13   No:47226     
Title: Re:構造体のプログラムの意味    
C言語のtypedefの文法的な意味はご存知でしょうか?
まず、それを調べてみて下さい。

あと、今後質問なさるのでしたら、名前は個性的なものに変えた方が良いかと思います。
http://www.play21.jp/board/ranking.cgi?id=dixq
名前がバッティングしない様に、こちらをチェックして下さいね。


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

Name: たかぎ [URL]  ..ハッカー(157,144ポイント)   Date: 2010/01/28(木) 13:18   No:47227     
Title: Re:構造体のプログラムの意味    
> 意味がよくわかりません。

言語仕様上の意味なのか、そのアプリケーションにおける意味なのか、どちらでしょうか?
言語仕様上の意味であれば、

>  BODY_player_t; 

型名として定義される識別子

> extern BODY_player_t Player; 

BODY_player_t型のオブジェクトPlayerの宣言
ただし、extern記憶クラス指定子がついているので、Playerは外部結合

アプリケーションにおける意味であれば、これだけを見ても何とも回答のしようがありません。


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

Name: non  ..比類無きプログラマー(89,465ポイント)   Date: 2010/01/28(木) 13:40   No:47229     
Title: Re:構造体のプログラムの意味    
もう少し、具体的にいいますと・・・
typedefは、自分がわかりやすいように、型を定義するのに使用します。
例えば、
typedef unsigned char BYTE;
とすれば、unsigned char という型をBYTEという型で表せるということです。
今回は、それが構造体になっているだけ。

extern BODY_player_t Player;  
Playerという名前の変数の実体が他の場所で確保されているよということを、コンパイラに示している。
たぶん、一般的には、ファイルが複数に分かれていて、別のファイルで実体が確保されている。
だけど、このファイルでもPlayerという変数を扱うけど、いいよねと示している。


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

Name: dic  ..熟練のプログラマー(49,329ポイント)   Date: 2010/01/28(木) 13:44   No:47231     
Title: Re:構造体のプログラムの意味    
>意味がよくわかりません。 
何を知りたいのですか
回答しようがないです


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

Name: りまぶぅ  ..ぴよぴよ(28ポイント)   Date: 2010/01/28(木) 13:48   No:47232     
Title: Re:構造体のプログラムの意味 質問者    
回答ありがとうございました。
確かによくわからない質問だったと思います。
もう少し調べてみます


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

Name: ムンバ  ..プログラマー(27,433ポイント)   Date: 2010/01/29(金) 00:59   No:47276     
Title: Re:構造体のプログラムの意味 質問者    
こんばんはっ!

構造体について、私は
http://homepage3.nifty.com/mmgames/c_guide/index.html
の、「16.複数の型をまとめる」を、参照させて頂いてます。
以前に、この掲示板で、ご紹介頂いたページです。

りまぶぅさんは、「構造体」と「extern」の関係について
知りたいと言う事ですよね?



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

Name: ムンバ  ..プログラマー(27,561ポイント)   Date: 2010/01/29(金) 01:27   No:47281     
Title: Re:構造体のプログラムの意味 質問者    
私は、しょっちゅう的外れな事を質問したり、勘違いな事を言ったりしてるので
うまく伝わらなければ、大変申し訳ないのですが・・・。<(_ _)>

No:47225のスレッドの、りまぶぅ(質問者)さんの質問の様な質問を
以前に、こちらでさせて頂いた事があったと思います。
頭が悪いので、うろ覚えですが。^^;

---↓編集部位---

初級者さん、ご指摘ありがとうございます。
「うる覚え」→「うろ覚え」に訂正させて頂きました。

---↑編集部位---

>確かによくわからない質問だったと思います。
だから、質問されたのではないのですか?
 編集済み


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

Name: 初級者  ..初心者(7,229ポイント)   Date: 2010/01/29(金) 14:50   No:47304     
Title: Re:構造体のプログラムの意味    
誤:うる覚え
正:うろ覚え


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



Name: さだはる  ..ぴよぴよ(1ポイント)   Date: 2010/01/27(水) 13:51   No:47138       
Title: youtubeのようなサイト作成    
質問なのですが、youubeと同じような構造のサイトを造りたいと考えています。
動画が自由にとうこうできるサイトです。

でも一から作らないといけないのか、作成用のツールがあるのかもわからない状況です。
どなたかアドバイスいただけませんか??


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


Name: softya  ..ハッカー(106,758ポイント)   Date: 2010/01/27(水) 15:19   No:47146     
Title: Re:youtubeのようなサイト作成    
>でも一から作らないといけないのか、作成用のツールがあるのかもわからない状況です。
>どなたかアドバイスいただけませんか??
それは、C言語/C++でサイトを作成するって事でしょうか?だとしたら、相当難しいでしょうね。
まぁ、そのまえにyoutubeの様なサイトはJavaでも難しいですが。
軽く探してみましたが、ツールやフリーのCGIなどは無さそうでね。

>動画が自由にとうこうできるサイトです。
その負荷を耐えるサーバーをレンタルで借りたらムチャクチャ高いですが、自宅サーバーで運営でしょうか?
変な動画でも投稿されたら警察沙汰も覚悟しなければいけないので、当然24時間の監視も必要になりますよね。大丈夫ですか?


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

Name: たかぎ [URL]  ..ハッカー(156,993ポイント)   Date: 2010/01/27(水) 15:28   No:47148     
Title: Re:youtubeのようなサイト作成    
Youtubeは知りませんが、2、3年前にニコニコ動画は毎月(毎年ではないですよ)2億円だったか3億円だったかの赤字を出していたように思います(うろ覚えですが..)。
技術的なこともそうですが、そのレベルでの潤沢な運転資金は用意できるのでしょうか?


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

Name: dic  ..熟練のプログラマー(49,181ポイント)   Date: 2010/01/27(水) 16:19   No:47152     
Title: Re:youtubeのようなサイト作成    
NHKのような会社に就職したら? 編集済み

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

Name: さだはる  ..ぴよぴよ(213ポイント)   Date: 2010/01/27(水) 16:44   No:47155     
Title: Re:youtubeのようなサイト作成    
運営チームを作って運営するので資金は大丈夫だと思います。

ですがそれほどのものになると確かに痛手ですね…
ではmp3のような音楽ファイルや、画像データならもう少し容量を抑えることできるでしょうか??

今出ている形の案としては、youtubeのような形式か、syncl(http://www.syncl.jp/)のような形式という案が出ているのですが、やはりサイト構築はかなり難しいものになるでしょうか??

ほんと漠然とした質問ですいません。


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

Name: たかぎ [URL]  ..ハッカー(157,052ポイント)   Date: 2010/01/27(水) 17:00   No:47158     
Title: Re:youtubeのようなサイト作成    
> 運営チームを作って運営するので資金は大丈夫だと思います。 

真似事ではなく本気でやるのであれば、そして技術に自信がないのであれば、専門の企業に相談することをお勧めします。


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

Name: softya  ..ハッカー(106,787ポイント)   Date: 2010/01/27(水) 17:01   No:47159     
Title: Re:youtubeのようなサイト作成    
>運営チームを作って運営するので資金は大丈夫だと思います。 

そんなレベルの話なら、こんな処(失礼)で相談するのは間違っています。
個人レベルの話なら別ですけどね。
そういう動画や音楽のストリーミングサイトの構築経験のあるプロと話しあわないとダメです。
ここも含めてノウハウが無い人間達が話しあっても、いつまでたっても具体的になりません。
私も経験はありません。
プログラマなので大変そうだとは分かりますが、この手のサイトだと、どの程度の規模の物がどのぐらいの期間でどの位の予算で作れて、運営資金が幾らぐらい係るとなるとさっぱり分かりません。


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

Name: たいちう  ..熟練のプログラマー(51,931ポイント)   Date: 2010/01/27(水) 17:17   No:47160     
Title: Re:youtubeのようなサイト作成    
一応確認ですが、Youtubeのような不特定多数のユーザーを
相手にするシステムで、収益を上げようと思っているのですよね?
社内でグループウェア的に使う動画共有システムとかなら、
ハードルはずっと下がりますけど。


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

Name: 通りすがり  ..上級者(19,237ポイント)   Date: 2010/01/27(水) 17:45   No:47162     
Title: Re:youtubeのようなサイト作成    
動画サイトを立ち上げるならば、著作権問題が大きく必ず関わってきます。
プログラムうんぬんよりも、まずは著作権に詳しい弁護士や弁理士を雇って
人選を確保すべきだと思います。個人ではとても運営は出来ないと思いますよ。
softyaさんのおっしゃる通り、警察沙汰は冗談ではありません。
企業で立ち上げる場合でも
賃金・経営計画・コンプライアンス・資金管理・売掛買掛管理・
決算・予算・管理会計・継続取引・委託・依頼交渉・広告宣伝・
苦情抗議・債権回収・開発・製造委託・業務提携・知的財産権etc
色々大変ですよ。

さだはるさんは何を目指したいのですか?プログラマでしょうか?
それともカスタマーエンジニアでしょうか?


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

Name: dic  ..熟練のプログラマー(49,310ポイント)   Date: 2010/01/27(水) 20:07   No:47178     
Title: Re:youtubeのようなサイト作成    
企画の話でしょうか?
プログラマの雑談、相談所なんで
専門の相談所で質問されてはいかがでしょうか?

資金はいくらでもあるようですが
弁護士ひとり 月50万x1=50
開発5人   月40万x5=200
運用5人   月30万x5=150
サポート20人月20万x20=400
サーバー代軽く100万いくでしょう
簡単に見積もっても月900万必要です
本当に可能ですか?


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

Name: softya  ..ハッカー(107,132ポイント)   Date: 2010/01/27(水) 20:59   No:47180     
Title: Re:youtubeのようなサイト作成    
>>dicさん
経費としてみるなら、その2〜3倍は見ないと。


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

Name: array [URL]  ..熟練のプログラマー(62,914ポイント)   Date: 2010/01/27(水) 21:10   No:47182     
Title: Re:youtubeのようなサイト作成    
専門じゃないし経験もないので詳しくないですが、(悪気はないですが嘘が混じってるかもしれないので)話半分に聞いてもらえれば良いです。

多分、開発費を抑えたいのであれば以下の組み合わせで良いんじゃないでしょうか。
サーバ:LAMP http://ja.wikipedia.org/wiki/LAMP 
ツール?:XOOPS http://ja.wikipedia.org/wiki/XOOPS

XOOPSはモジュールが多数用意されているのでサイトの構築が楽だと聞きます。
そして、mixiのようなSNSのサイト構築ができるモジュールならあったと思いますので、探せばニコニコやYoutubeの様なサイト構築ができるようなモジュールもあるかもしれません。


ただ、動画などダウンロードが頻繁に行われるトラフィックが大きいサイトを作る場合はネットワーク構築の方が重要な気がします。


・・・参考になれば幸いです。


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

Name: Justy  ..伝説なるハッカー(495,259ポイント)   Date: 2010/01/27(水) 21:15   No:47184     
Title: Re:youtubeのようなサイト作成    
 Youtubeのような動画共有サイトを作るなら、フリー(といってもライセンスは各々きちんと確認を)の
ものとして

ClipBucke
http://clip-bucket.com/

PHPmotion
http://www.phpmotion.com/

とかがあります。


 どちらも海外のものなので、インストールや日本語化などいろいろ大変でしょうけど
一からつくるよりマシなはずです。


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

Name: light  ..ぴよぴよ(128ポイント)   Date: 2010/01/27(水) 21:57   No:47188     
Title: Re:youtubeのようなサイト作成    
本格的な運営をしようとしているのに本人が右も左もわからないなんて考えられない。
運営チームなんてホントにいるの?


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

Name: lbfuvab  ..上級者(24,729ポイント)   Date: 2010/01/27(水) 23:02   No:47195     
Title: Re:youtubeのようなサイト作成    
一応、
@ある程度少人数の決まったPCのみメンバー
A全員がほぼ常にPCつけっぱなし
BIPの変動なし

という条件がそろえばサーバなしでも一応いけそうな気はしますね。


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

Name: さだはる  ..ぴよぴよ(137ポイント)   Date: 2010/01/28(木) 13:37   No:47228 解決!     
Title: Re:youtubeのようなサイト作成    
いろいろと回答ありがとうございます!!
弁護士などの問題は、それ専用の方に相談するのでご心配なくです。

フリーのソフトがあるとのことなので、それでやってみたいと思います。


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

Name: dic  ..熟練のプログラマー(49,302ポイント)   Date: 2010/01/28(木) 13:41   No:47230     
Title: Re:youtubeのようなサイト作成    
やってみた結果報告待ってるよ

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

Name: みつぎ  ..ぴよぴよ(88ポイント)   Date: 2010/01/29(金) 03:35   No:47285     
Title: Re:youtubeのようなサイト作成    
質問者<回答者 
なのは確かですけれども
最近、回答者の言動が少し酷くないでしょうか?
折角、管理人様が貸してくれているスペースなので
もう少し優しい言葉を使いましょう・・・。


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



Name: buttrfly  ..ぴよぴよ(160ポイント)   Date: 2010/01/25(月) 02:16   No:47010       
Title: リスト構造プログラムについて    
初めまして、学校でプログラムを勉強しています
プログラム初心者です
私は今学校の課題でリスト構造のプログラムを作成しています
仕様は以下のとおりです

・テキストファイルより1行(255字以内)受け取りリスト構造に追加する
・リスト構造は昇順に追加する( 順序はstrcmp()仕様による )
・テキストファイルを表示する
・リスト構造追加後の結果を表示する

プログラム自体はできあがっているのですが
エラーが取れません
作成したプログラムは以下の通りです



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

typedef struct list{
    struct list *next;
    char str[256];
}ELEMENT;

int main (void){
    
    FILE *fp;
    struct ELEMENT *root = NULL;
    struct ELEMENT *elem,*pos,*work;
    int i;
    
    if(fp = fopen("strings.dat","r") == NULL){
        printf("ファイルを開けません\n");
        exit(1);
    }
    
    while(!feof(fp)){
        if(elem = (ELEMENT*) malloc(sizeof(ELEMENT)) == NULL){
            printf("メモリ割り当てエラー\n");
            exit(1);
        }
        
        fgets(elem->str , 255 , fp);   // 1行取得
        printf("%s" , elem->str);
        
        if(root == NULL){        // 空だった場合
            elem->next = NULL;
            root = elem;
        }else{
            pos = root;
            
            while(pos != NULL){
                i = strcmp(elem->str , pos->str);
                
                if(i < 0) break;
                
                work = pos;
                pos = pos->next;
            }
            
            if(pos == NULL){        // 最後尾に追加
                elem->next = NULL;
                pos->next = elem;
            }else if(pos == root){     // 先頭に追加
                elem->next = pos;
                root = elem;
            }else{             // 間に追加
                elem->next = pos;
                work->next = elem;
            }
        }
    }
    
    fclose(fp);
    work = root;
    
    while(work != NULL){
        pos = work->next;
        printf("%s",work->str);
        free(work);
        work = pos;
    }
    
    return 0;
}




使用しているコンパイラは独習Cに付属しているGNU C Compilerです
出るエラーは以下のものです

list.c: In function `main':
list.c:16: warning: assignment makes pointer from integer without a cast
list.c:22: warning: assignment makes pointer from integer without a cast
list.c:27: error: dereferencing pointer to incomplete type
list.c:28: error: dereferencing pointer to incomplete type
list.c:31: error: dereferencing pointer to incomplete type
list.c:37: error: dereferencing pointer to incomplete type
list.c:37: error: dereferencing pointer to incomplete type
list.c:42: error: dereferencing pointer to incomplete type
list.c:46: error: dereferencing pointer to incomplete type
list.c:47: error: dereferencing pointer to incomplete type
list.c:49: error: dereferencing pointer to incomplete type
list.c:52: error: dereferencing pointer to incomplete type
list.c:53: error: dereferencing pointer to incomplete type
list.c:62: error: dereferencing pointer to incomplete type
list.c:63: error: dereferencing pointer to incomplete type


このエラーの意味はなんなのでしょうか?
どうかご教授お願いいたします


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


Name: sizuma [URL]  ..プログラマー(32,599ポイント)   Date: 2010/01/25(月) 02:53   No:47013     
Title: Re:リスト構造プログラムについて    
全角スペースでソースを編集をしませんでしたか?
修正するのが面倒です。


最初の方の警告は演算子の優先度順で評価されるので、動かないですね
fp = fopen("strings.dat","r") == NULL
これは
(fp = fopen("strings.dat","r")) == NULL
としましょう。
その下のエラーチェックもですね。

実行するとエラーがでるんで、どっかバグがあります。
探してみてください。

最初の警告は
右側の整数型をキャストしないでポインタに変えてるよ。
下は多分ポインタが参照してるものがないよって意味だと思います。
fpには1か0が格納されてますからね。


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

Name: box  ..ハッカー(150,677ポイント)   Date: 2010/01/25(月) 23:17   No:47042     
Title: Re:リスト構造プログラムについて    
> プログラム自体はできあがっているのですが
> エラーが取れません

コンパイルも通っていないプログラムを「できあがった」とは言いません。

> typedef struct list{
>     struct list *next;
>     char str[256];
> }ELEMENT;

struct listに対してELEMENTという別名を付けているのですから、

>     struct ELEMENT *root = NULL;
>     struct ELEMENT *elem,*pos,*work;

ここでstructと書く必要はありません。
これと、sizumaさんの回答に対応すると、コンパイルエラーは
おそらく出なくなるでしょう。

ここで、やっと実行ファイルができますが、
まだ「プログラムができあがった」とは言いません。
実行して予想どおりの結果を得ることができて、
初めて「できあがった」と言います。
 編集済み


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

Name: sizuma [URL]  ..プログラマー(33,064ポイント)   Date: 2010/01/26(火) 00:40   No:47049     
Title: Re:リスト構造プログラムについて    
>structと書く必要はありません。
あぁ、本当ですね。
全角削除するときに自然に消してました^^;


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

Name: buttrfly  ..かけだし(1,091ポイント)   Date: 2010/01/28(木) 13:53   No:47233     
Title: Re:リスト構造プログラムについて    
返信遅れすみません

とりあえずコンパイルエラーはなくなりました
お二人ともありがとうございます


>コンパイルも通っていないプログラムを「できあがった」とは言いません
>ここで、やっと実行ファイルができますが、 
>まだ「プログラムができあがった」とは言いません。 
>実行して予想どおりの結果を得ることができて、 
>初めて「できあがった」と言います。

ごもっともです・・;



コンパイルは通ったのですが
実行すると2行目を表示して止まってしまいました
これはどうしてなのでしょうか?

書き直したプログラムは下のとおりです
割り当ての部分は()で括るとややこしくなったので
別に分けました
あと、全角も消しました
ご迷惑をお掛けします;


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

typedef struct list{
    struct list *next;
    char str[256];
}ELEMENT;

int main (void){
    
    FILE *fp;
    ELEMENT *root = NULL;
    ELEMENT *elem,*pos,*work;
    int i;
    
    if((fp = fopen("strings.dat","r")) == NULL){        // ファイルを開く
        printf("ファイルを開けません\n");
        exit(1);
    }
    
    while(!feof(fp)){
        
        elem = (ELEMENT*) malloc(sizeof(ELEMENT));        // メモリ割当
        
        if(!elem){
            printf("メモリ割り当てエラー\n");
            exit(1);
        }
        
        fgets(elem->str , 256 , fp);                    // 1行取得
        printf("%s" , elem->str);
        
        if(root == NULL){                                // 中身が空
            elem->next = NULL;
            root = elem;
        }else{
            pos = root;
            
            while(pos != NULL){
                i = strcmp(elem->str , pos->str);
                
                if(i < 0) break;
                
                work = pos;
                pos = pos->next;
            }
            
            if(pos == NULL){                        // 最後尾に追加
                elem->next = NULL;
                pos->next = elem;
            }else if(pos == root){                    // 先頭に追加
                elem->next = pos;
                root = elem;
            }else{                                    // 間に追加
                elem->next = pos;
                work->next = elem;
            }
        }
    }
    
    fclose(fp);
    work = root;
    
    while(work != NULL){
        pos = work->next;
        printf("%s",work->str);                    // 結果を表示
        free(work);                                // メモリ解放
        work = pos;
    }
    
    return 0;
}


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

Name: non  ..比類無きプログラマー(89,602ポイント)   Date: 2010/01/28(木) 15:15   No:47234     
Title: Re:リスト構造プログラムについて    
            if(pos == NULL){                        // 最後尾に追加
                elem->next = NULL;
                pos->next = elem;


この部分はまずいですね。

それと、
feofを使うと、EOFになったときに、ゴミをprintfで出力することになる
から、感心しないなぁ。


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

Name: buttrfly  ..かけだし(1,115ポイント)   Date: 2010/01/28(木) 16:11   No:47235     
Title: Re:リスト構造プログラムについて    

> この部分はまずいですね。

どうまずいのかを具体的に示して頂けるとありがたいのですけれど
 

> feofを使うと、EOFになったときに、ゴミをprintfで出力することになる
> から、感心しないなぁ。

ゴミとはどういうことでしょうか? 



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

Name: non  ..比類無きプログラマー(89,655ポイント)   Date: 2010/01/28(木) 18:56   No:47240     
Title: Re:リスト構造プログラムについて    
>pos->next = elem;

pos==NULLならpos->nextなんてないでしょう。

>ゴミ
ゴミがでないなら、私の勘違いでしょう。
試してないので・・・



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

Name: non  ..比類無きプログラマー(89,691ポイント)   Date: 2010/01/28(木) 19:08   No:47241     
Title: Re:リスト構造プログラムについて    
やっぱり、ゴミが出そうですね。
http://msdn.microsoft.com/ja-jp/library/xssktc6e.aspx
解説部分を読んでください。


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

Name: box  ..ハッカー(150,740ポイント)   Date: 2010/01/28(木) 23:19   No:47268     
Title: Re:リスト構造プログラムについて    
リスト構造を実装するとき、図を使うと早く完成するかもしれません。
頭の中だけでは、ポインターのつなぎ替えがなかなかうまくいかないような気がします。


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

Name: buttrfly  ..かけだし(1,140ポイント)   Date: 2010/01/29(金) 01:11   No:47280 解決!     
Title: Re:リスト構造プログラムについて    
> pos==NULLならpos->nextなんてないでしょう。
ごもっともです
work->nextが正しいですね
feofについてもわかりました
ありがとうございました


> リスト構造を実装するとき、図を使うと早く完成するかもしれません。
> 頭の中だけでは、ポインターのつなぎ替えがなかなかうまくいかないような気がします。
一応学校課題の関係でプログラムをPCで打つ前に
紙に疑似言語で書いているのでトレースするときに図に書いては散々やったんですが・・;



エラーもなく無事に表示されるようになりました
feofのゴミについては自分なりに考えて条件文を変えてみようと思います
回答をいただいた皆様ありがとうございました



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



Name: かすみ  ..ぴよぴよ(358ポイント)   Date: 2010/01/28(木) 19:38   No:47244       
Title: しつもんです。    
コマンド行引数に整数を指定し、その和を表示させるプログラムを作成しなさい。ただし、指定する整数の個数は何個であってもよいこととする。という問題なんですが、これを作ってみました。

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

int main(int argc, char *argv[])
{
    int sum=0, i;

    for (i=1; i<argc; i++)
        sum += atoi(argv[i]);
    printf("コマンドの行引数の和は%dです。 \n", sum);

    return(0);
}

という風に作りました(^v^)例えば、コマンド行引数を1、10、100とすると和は111とでるんですが、マイナスをつけるとできません。1、10、−100と入力して和が89と出るようにする感じです。
このようにするにはどこを直せばよいのでしょうか。


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


Name: たいちう  ..熟練のプログラマー(52,984ポイント)   Date: 2010/01/28(木) 19:58   No:47247     
Title: Re:しつもんです。    
-89の間違いだとすると、どこも直さないでも計算できましたよ。
どうやって実行したのですか?

あと、一応環境も書きましょう。


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

Name: たかぎ [URL]  ..ハッカー(157,193ポイント)   Date: 2010/01/28(木) 22:45   No:47266     
Title: Re:しつもんです。    
全角で入力して、全角で出力したいのでは?


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



Name: nami  ..ぴよぴよ(178ポイント)   Date: 2010/01/28(木) 20:14   No:47248       
Title: isalphaとtolowerを使わずに作りたい。    
コマンド行引数に一つのファイル名を指定しそのファイルに現れる各英字(a〜z及びA〜Z)の出現頻度を表示するプログラムを作成しなさい。大文字と小文字の区別はしなくてよい。

これをつくりました。

#include<stdio.h>
#include<ctype.h>

int main(int argc, char *argv[])
{
    FILE *fp;
    int  i, c, freq[26]={0};

    if((fp=fopen(argv[1], "r"))==NULL){
       printf("ファイル%sがオープンできません。\n",argv[1]);
       return(1);
    } else {
        while ((c=fgetc(fp)) !=EOF)
            if (isalpha(c))
                freq[tolower(c) -'a']++;
        fclose(fp);
    }
    for (i=0; i<26; i++)
        printf("%c: %5d\n", 'a'+i, freq[i]);
    
    return(0);
}


これと同じ内容で, isalphaとtolowerを使わずに同じ結果のプログラムを作りたいなと思っているんですがどの子のプログラムを変えたらよいでしょうか?    


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


Name: non  ..比類無きプログラマー(89,748ポイント)   Date: 2010/01/28(木) 20:29   No:47250     
Title: Re:isalphaとtolowerを使わずに作りたい。    
はて?
どの子?って言われてもよくわからないけど・・・・
isalphaとtolowerを自作すればいいのではないですか?


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

Name: たかぎ [URL]  ..ハッカー(157,218ポイント)   Date: 2010/01/28(木) 21:26   No:47259     
Title: Re:isalphaとtolowerを使わずに作りたい。    
処理系を特定しないのであれば...

> freq[tolower(c) -'a']++; 

これはダメでしょう。
詳細は下記参照
http://www.kijineko.co.jp/tech/superstitions/A-to-Z-is-sequence.html

バグまで復元するとなると、tolowerを使わずには難しいですね。
toupperを使えば近い状態にはなると思いますが...



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



Name: rokoroko  ..ぴよぴよ(524ポイント)   Date: 2010/01/27(水) 15:49   No:47149       
Title: アプリケーションが正しく初期化されない  ことについて    
失礼します。
プログラムを実行してみたところ、「アプリケーションが正しく初期化されまぜんでした(0xc0150002)」
というウィンドウがでてきてそのまま閉じてしまいます。
OpenCVを使っていないプログラム(DirectX)などは動くので、OpenCVが問題だとは思うのですが、OpenCVの設定に問題があると思っています。
この問題が解決しないと、先に進めないのでかなり深刻な問題です。

前に質問したwindows.hはVC++を完全にアンインストールして再インストールしたら解決しました。
環境はwindows vista VC++2008です。opencvはver1.1を使用しています。


どうか助言をよろしくお願いします。



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


Name: たかぎ [URL]  ..ハッカー(157,000ポイント)   Date: 2010/01/27(水) 16:08   No:47150     
Title: Re:アプリケーションが正しく初期化されない  ことについて    
> プログラムを実行してみたところ、

どんな?


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

Name: rokoroko  ..かけだし(1,020ポイント)   Date: 2010/01/27(水) 21:16   No:47185     
Title: Re:アプリケーションが正しく初期化されない  ことについて    
#include <stdio.h>
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>

int main( void ){
    CvCapture* capture;
    cvNamedWindow( "1",CV_WINDOW_AUTOSIZE);
    cvNamedWindow( "2",CV_WINDOW_AUTOSIZE);
    IplImage* frameImage;
    char key;

    
    if ( ( capture = cvCaptureFromCAM( 0 ) ) == NULL ){
        printf("みつかりません");
        cvWaitKey(0);
        cvReleaseCapture( &capture);
        return 0;
    }
    
    frameImage = cvQueryFrame( capture );
    IplImage* smoothImage = cvCreateImage(
        cvGetSize(frameImage),
        IPL_DEPTH_8U,
        3
    );



    while(1){
        frameImage = cvQueryFrame( capture );
        cvSmooth(frameImage, smoothImage ,CV_GAUSSIAN, 3, 3 );
        cvShowImage("1", frameImage);
        cvShowImage("2", smoothImage);
        key = cvWaitKey(1);
        if(key =='q'){
            break;
        }
    }


    cvReleaseCapture( &capture);
    cvDestroyWindow("1");
    cvDestroyWindow("2");
}


です。
簡単なプログラムです。
基本的にOpenCVを使うと質問のような状態になってしまいます。
おそらく原因はwindows.hが見つからないためにSDkをインストールして、その対処のために一回VC++を安易ストールしてしまったからだと思います。


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

Name: Justy  ..伝説なるハッカー(495,418ポイント)   Date: 2010/01/27(水) 21:30   No:47186     
Title: Re:アプリケーションが正しく初期化されない  ことについて    
 使っている opencvを全て今の環境でビルドし直してみてはどうでしょうか?
 或いは、

ダウンロードの詳細 : Visual C++ 2005 SP1 再頒布可能パッケージ (x86)
http://www.microsoft.com/downloads/details.aspx?FamilyID=200b2fd9-ae1a-4a14-984d-389c36f85647&displaylang=ja

を入れると直るかもしれません。


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

Name: rokoroko  ..かけだし(1,194ポイント)   Date: 2010/01/28(木) 02:35   No:47209     
Title: Re:アプリケーションが正しく初期化されない  ことについて    
>使っている opencvを全て今の環境でビルドし直してみてはどうでしょうか? 
というのは、OpenCVをアンインストールしてから再インストールするということでしょうか?
それについてはやってみましたが、治りませんでした。

VC++はいま2008を使っているのですが、2005にしたほうがいいのでしょうか?
正直な話、グレードダウンするのはちょっと抵抗があるのですが……


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

Name: じゅんだった  ..ぴよぴよ(43ポイント)   Date: 2010/01/28(木) 07:58   No:47213     
Title: Re:アプリケーションが正しく初期化されない  ことについて    
横からでごめんなさい。
Justyさんが書かれている内容にかぶるのですが、某掲示板のスレッド”Visual Studio 2008 Part 14”の164-175に同じような経緯のやりとりがあるようです。

http://www.unkar.org/read/pc11.2ch.net/tech/1230008197

>>171
http://d.hatena.ne.jp/piy/20081130/1228020473

上記スレッドの方がVC++の2008を使っている上で対処されたのかどうかは判りませんが、ダメもと。でやってみる手はあるかも。


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

Name: Justy  ..伝説なるハッカー(495,481ポイント)   Date: 2010/01/28(木) 10:48   No:47220     
Title: Re:アプリケーションが正しく初期化されない  ことについて    
>OpenCVをアンインストールしてから再インストールするということでしょうか? 
 違います。
 ソースからライブラリをビルドする、ということです。


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



Name: a  ..かけだし(1,229ポイント)   Date: 2010/01/28(木) 00:39   No:47205       
Title: 判定プログラム    
編集済み

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


Name: sizuma [URL]  ..プログラマー(33,697ポイント)   Date: 2010/01/28(木) 00:46   No:47206     
Title: Re:判定プログラム    
規約を読んで、もう一度投稿するか、2chの宿題掲示板にでも行ってください。

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

Name: Libra  ..上級者(19,920ポイント)   Date: 2010/01/28(木) 00:49   No:47207     
Title: Re:判定プログラム    
こういうのはネット使うより、出来てる人の解答見せてもらったり
教えてもらったりする方が早いと思うのですがどうでしょう?


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



Name: yrao  ..上級者(19,803ポイント)   Date: 2010/01/26(火) 21:36   No:47106       
Title: 円形に弾を配置する方法    
連続で質問させていただきます。

これもボス弾幕についての質問なのですが、弾を円形に配置する方法(x,y座標の設定の仕方)が知りたいです。
 
画面外から、中心に向かって円形に弾を発射する弾幕をつくっているのですが、この方法が分からず難航している状態です;

画面外に配置する方法自体は、龍神録プログラミングの館の、「そして誰もいなくなるか?風弾幕」の章を見て理解したのですが、円についての知識がほとんどないので、円形配置ができません…
 
分かる方いましたら、アドバイスよろしくお願いしますm(__)m


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


Name: lbfuvab  ..上級者(24,659ポイント)   Date: 2010/01/26(火) 21:48   No:47107     
Title: Re:円形に弾を配置する方法    
sin、cosの基本定義を覚えていますか?
覚えているなら出来ると思いますよ。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,143,908ポイント)   Date: 2010/01/26(火) 22:20   No:47109     
Title: Re:円形に弾を配置する方法    
龍神録の弾幕見てもらえたらいくつも円形の弾幕が紹介してあると思います。

解り易く円形で静止する弾幕作ってみました。

void boss_shot_bulletH000(){
    int i,k,t=boss_shot.cnt;
    double angle;
    //360カウント以下で5カウントに1回
    if(t<360 && t%5==0){
        if((k=search_boss_shot())!=-1){
            boss_shot.bullet[k].col   = 0;//弾の色
            boss_shot.bullet[k].x     = boss.x + cos(PI2/360*t) * 150;//座標
            boss_shot.bullet[k].y     = boss.y + sin(PI2/360*t) * 150;
            boss_shot.bullet[k].knd   = 4;//弾の種類
            boss_shot.bullet[k].angle = 0;//角度
            boss_shot.bullet[k].flag  = 1;
            boss_shot.bullet[k].cnt   = 0;
            boss_shot.bullet[k].spd   = 0;//スピード
            se_flag[0]=1;
        }
    }
}

5°ずつ置いて行って360°まわります。
結果は添付ファイル参照で。

まず、sin,cosの使い方は解りますか?
もし忘れてしまった場合は、中学1年か2年位の教科書に書いてあると思うのでもしあれば見てみてください。
ネットでも検索すればすぐ出てきます。

http://www.google.co.jp/search?hl=ja&q=sin+cos&lr=lang_ja


sin()
cos()

とかけばかっこの中の角度からsin,cosを計算してくれます。
sin,cosは-1〜1の値をとりますから、それに長さをかけてやればすきな半径に出来ます。
上の場合は150をかけているので、半径が150になっているのです。

わかりますかね・・?


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

Name: yrao  ..上級者(20,086ポイント)   Date: 2010/01/26(火) 22:41   No:47111     
Title: Re:円形に弾を配置する方法    
1bfuvabさんこんばんは、ありがとうございます
 
 
実は、三角関数もまだ未習なんです(汗
これまで、三角関数などについては、ゲーム制作の過程でその都度調べてきたものですから…
ある程度しか分かりません;

基礎的な数学の問題であれば、恐らく解けると思うのですが、プログラミングに応用するとなると、自分の理解度では少々厳しいことが多いです…
もしよければ、ご教授いただければ幸いです。
 
 
とりあえず、単位円において、
cosがx座標
sinがy座標
ということは分かるので、浅はかな知識なりに、円形に弾を配置するプログラムを書いてみました。
 
int t =boss_shot.cnt;
float i;
 
if(t=120){
     for(i=0;i<60;i++){
          bullet_way(cos(i)*100+200,sin(i)*100+200,1,0,0,0,4,1,0);//弾幕簡略関数。1番目がx座標、2番目がy座標となっています。
     }
}
 
…しかしこれだと、
・弾の並びが均一でない
・円の中心を指定できないなど色々と不十分です。
 
配置する弾の数を指定して、その弾を均等に円状に並べるには、どうすればよいのでしょうか。


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

Name: yrao  ..上級者(20,263ポイント)   Date: 2010/01/26(火) 23:04   No:47113     
Title: Re:円形に弾を配置する方法    
あぁっと
 
すれ違ってしまいました(-.-;
 
 
 
管理人さんありがとうございますm(__)m
 
わかりやすい解説のおかげで理解することができました。
一つ前のレスで書いたサンプルを見直してみたのですが……これはひどい…(+_+)
 
 
私は今年高二になるのですが、未だに三角関数は習ってません…
去年三角比を習いました;三角関数は、恐らくは高二でやることになると思います。
 
なので、
中一、中二の教科書
と聞いてとても驚きました。
皆さんそんなに早くに学習するものなのでしょうか… 
 
 


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,144,245ポイント)   Date: 2010/01/26(火) 23:18   No:47115     
Title: Re:円形に弾を配置する方法    
あれ・・中学で習うと思っていたのは勘違いだったのかもしれません・・。
サインコサインってそんなに後に習いますっけ・・?
高1で三角比か・・、なんか随分昔に習った気がするようになったということは自分も歳をt・・(ry

しかし習って無かったのならあのような計算式で理解されるとはすごいですね^^;

円周率ってありますよね。3.141592654...ってやつです。
あれは孤度法で表すと180°を表すんですよね。
何言ってるかわからない時は度数法と孤度法でググってみるといいと思います。

ということで、円周率X2が360°なので、私は

#define PI 3.141592654f
#define PI2 (PI*2)

と定義しています。PI2とは360°のことです。
だからPI2/360は1°を表すわけです。
プログラムでsinやcosを計算する時は孤度法を使わないといけないので、
このように円周率を使っているのです。

う〜ん、習ってないとわかりにくいかもしれませんね・・。
(私の説明が下手なだけか^^;


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,144,380ポイント)   Date: 2010/01/26(火) 23:26   No:47116     
Title: Re:円形に弾を配置する方法    
文部科学省のHP見てみましたが
http://www.mext.go.jp/b_menu/shuppan/sonota/990301c/990301m.htm
確かに中学じゃ習わないですね・・。
それどころか「負の数とは」そんな所からやるのか・・とちょっとビックリ^^;
そんな昔に習ったのか・・。
やだな、、しかし確かに自分が中学生だった頃を思い起こせば随分前だ・・(ブツブツ


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

Name: 組木紙織  ..比類無きプログラマー(76,780ポイント)   Date: 2010/01/27(水) 00:10   No:47117     
Title: Re:円形に弾を配置する方法    
>私は今年高二になるのですが、未だに三角関数は習ってません… 
>去年三角比を習いました;三角関数は、恐らくは高二でやることになると思います。 

三角関数と三角比を分けて考えているようですが、たいして違いないですよ。
三角比は角度を0〜180度に限定しているけど、三角関数はその限定を取り払ったものですから。
(使う公式にいくつか差はありますが、基本は変わりません)
弾幕の運動に使うのなら、三角[関数]を習ってなくても三角[比]だけでも分かるんじゃないでしょうか。

#そういえば今年のセンター試験まだ解いてないなー。


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

Name: あ〜る  ..上級者(16,285ポイント)   Date: 2010/01/27(水) 00:16   No:47118     
Title: Re:円形に弾を配置する方法    
あれです、単位円で考えるとすぐわかります、多分
調べてみて下さい

気をつけるべきなのはゲームの座標はY軸が下向きであることですね
単位円を理解して、そこを気をつければ大丈夫だと思います


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

Name: yrao  ..上級者(20,744ポイント)   Date: 2010/01/28(木) 00:17   No:47201     
Title: Re:円形に弾を配置する方法    
返答遅れてしまってすみません;
(今日はパソコンをネットに繋ぐ時間がなさそうなので、携帯での書き込みです…)
>管理人さん
孤度法の解説ありがとうございます、とても分かりやすかったです。

PIが孤度法でのπ、ということは、少し前にやっと気付きましたf^_^;
("π"の読みが"パイ"であるために、PI(パイ)と表しているのかなぁ…と勝手に想像しているのですが、他に理由があるのでしょうか)

サインコサインもそうですが、私は、プログラミングに必要な数学の勉強が不完全なままゲーム制作に取り組んでしまっているので、プログラミングから数学を学ばせてもらっていることが多々あります。
もちろん、数学を勉強したことによってプログラムの意味を理解することができた、なんてこともありますけど。
あぁ、あの数式はそういう意味だったんだ…みたいな^_^;
プログラミングと数学は関係が深いなぁ、と初心者なりに実感している今日この頃です。


まぁ…数学どころか、初歩的なプログラミング自体もまだ理解が不完全ですけどね…

一年ちょっと前に、このサイトを知り、勢いでゲーム制作を始めたときは本当に何も知りませんでした;
知っていた事と言えば、

・intなるもので変数を宣言する
・if文

…くらいで…(本当ですf^_^;)
プログラミングに関する基礎知識もないまま、本格的なゲーム制作に入ってしまったんですね(-.-;

そんなこんなでも、プログラムを色々いじってみたり、この掲示板で質問させてもらいながら、少しずつ理解していくことができました。(なんとか%


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

Name: yrao  ..上級者(21,054ポイント)   Date: 2010/01/28(木) 00:21   No:47202     
Title: Re:円形に弾を配置する方法    
あう…なんか切れとる…
 
‐続きです(-.-;)‐
 
・・・・・できました。(なんとか、ゲーム完成のめどがつく位までは…)
基礎を身につけてから、ゲーム制作を始めた方が良かったであろうということは分かるのですが、ある時突然、プログラムの意味が分かったりするのは個人的に好きだったりしますf^_^;
…とは言え、リプレイの実装などについては、まだ理解が不十分なので、その段階まで制作が進んだら、質問させていただくことになると思います。


……おおっと
すいません何やら関係のない方向に話が;
とにかく、毎回この掲示板で親切なアドバイスを下さる皆さんには、いくら感謝をしてもしきれないです。これからもどうぞよろしくお願いしますm(- -)m



>組木紙織さん
はじめまして。
確かに三角関数は、三角比の発展のような感じですね。
ただ、三角比では、孤度法ではなく度数法を使っていたので、慣れるまで少し大変でしたが…

あ、センター試験、数学1・Aはやりましたf^_^

…出来の方は……うーん……

そのうち国・英もやらなくてはと思ってはいるのですがなかなかやる気が…



>あ〜るさん

こんばんは〜
単位円でしたら、授業でちらっとやりました。

ただ、あまり深くは習いませんでしたね…

第一象限とかはやりましたが、sinがY座標…とかいった事は授業では教えてもらえなかったです;


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



Name: no  ..入門者(3,744ポイント)   Date: 2010/01/27(水) 00:42   No:47120       
Title: 画面のちらつきについて    
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
    SetMainWindowText( "asm" );//ウィンドウの名前
    message_box();//フルスクリーンにするかどうかの関数

    if( DxLib_Init() == -1 ) return -1; 
    SetDrawScreen( DX_SCREEN_BACK );


    load_img();//画像のロード
    ChangeFontType( DX_FONTTYPE_ANTIALIASING );//アンチ    

    while(!ProcessMessage() /*&& !ClearDrawScreen()*/ && !GetHitKeyStateAll( KeyBuf ) && !KeyBuf[KEY_INPUT_ESCAPE]){

        RefreshTime = GetNowCount();               //FPS 今の時間を取得
        ClearDrawScreen();

        switch(game_state){
            case DAIRY:
                dairy_mes();
                //DrawFormatString(100,100,col,"%d",(int)PlayerShot[1][2].x);
                break;
            case GAME_TITLE:
                game_title();
                break;
            case GAME_END:
                return 0;
                break;
            case GAME_PRA:
                game_pra();
                break;
        }

        //FpsTimeFanction(); //こちらをコメントにすると画面がちらつく
        ScreenFlip();
        FpsTimeFanction();   //こちらをコメントにするとちらつかない
        if(battle_flag==1) A_counter++;
        while(GetNowCount() - RefreshTime < 17);   //FPS 1周の処理が17ミリ秒になるまで待つ
    }
    

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

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

上記のソースなのですが、FpsTimeFanction();の位置によって画面がちらつきます。
現在上の部分をコメントにしていますが、この状態だと画面がちらつきます。
して、下をコメントにし、上の//をはずすとちらつきが完全に直ります。

なら下をコメントにして上の//をはずせばいいのか〜と思いきや、それではFpsが表示されません。
それにもしかしたら、Fps制御を完全にスルーしているようにも見えます。
原因、対処法はどのようになりますか?

FpsTimeFanction();は旧ゲームプログラムの館そのままです。

もし公開した方がいい関数などありましたら言ってください。


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


Name: no  ..入門者(3,845ポイント)   Date: 2010/01/27(水) 01:00   No:47123     
Title: Re:画面のちらつきについて    
//FpsTimeFanction(); //こちらをコメントにすると画面がちらつく 
ScreenFlip(); 
FpsTimeFanction();   //こちらをコメントにするとちらつかない 


すいません、上と下逆でした……。

正確には
ScreenFlipの前にFpsTimeFanctionがあるとちらつき、
      後だとちらつかない、
です。


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

Name: kazuoni [URL]  ..ハッカー(131,110ポイント)   Date: 2010/01/27(水) 02:51   No:47124     
Title: Re:画面のちらつきについて    
ScreenFlipの前後によって変わるということは通常起きないので、
まず、Fpsの関数のみ記述して、出力してみてください。
そこからちょっとずつ関数を戻して行ってみてください。
おかしくなったら、その前に戻した関数が原因です。

> それにもしかしたら、Fps制御を完全にスルーしているようにも見えます。 
そんなことはまずありませんので、デバッガ利用で色々追ってみてください。

#ClearDrawScreenはコメントアウトですか? 編集済み


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

Name: no  ..入門者(3,891ポイント)   Date: 2010/01/27(水) 22:55   No:47194     
Title: Re:画面のちらつきについて    
コメントアウトしていますが、その数行下にClearDrawScreen関数を書いているため、動作的には
問題ないと思います。


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



Name: ひよこ  ..比類無きプログラマー(79,151ポイント)   Date: 2010/01/27(水) 18:40   No:47168       
Title: 数値が勝手に変わってしまうのです。    
特定の条件(リストが3つあるときに)でp->xが1に書き換えられてしまうのです。
下のソースで、おかしい部分はないと思うのですが、
デバッグで見ていくと、ここで変わっているようなのです。
どこがおかしいと思われますか?
typedef struct door_t{
    int x,y;
    int state;
    door_t *next;
};
door_t *head_door;グローバル変数です。
#define COUNT_MAX 30
void out_hantei(){
    door_t *p=head_door;
    int counter=0;
    while(p!=NULL){
        p->x=(rand()%20)*32;//(1)
        p->y=(rand()%16)*30;
        printfDx("%d.%d\n",p->x,p->y);
        if(p!=head_door){
            if(p->x=head_door->x && p->y==head_door->y){
                while(p->x==head_door->x && p->y==head_door->y){//(2)
                    p->x=(rand()%20)*32;    
                    p->y=(rand()%16)*30;
                    printfDx("%d.%d\n",p->x,p->y);
                }
            }
        }        
        p=p->next;        
        counter++;
    }
    if(counter<COUNT_MAX){
        int x=(rand()%20)*32,y=(rand()%16)*30;
        printfDx("%d.%d\n",x,y);
        enter_door(x,y,1);
        //enter_door((rand()%20)*32,(rand()%16)*30,1);
    }//enter_door(0,0,1);
}
で最初(head_door)のときは(1)の部分で
0x023649a8 {x=576 y=420 state=0 next=0x02361288 }//最初
0x02361288 {x=0 y=0 state=1 next=0x023612d8}//2番目。
0x023612d8 {x=160 y=30 state=1 next=0x00000000}//最後

で二回目(head_door->next)のときは(1)の部分で
head_door = 0x023649a8 {x=32 y=330 state=0 next= 0x02361288}//最初
head_door->next = 0x02361288 {x=0 y=0 state=1 next =0x023612d8}//2番目。
(head_door->next)->next = 0x023612d8 {x=160 y=30 state=1 next = 0x00000000}//最後

で(2)の部分で
head_door =0x023649a8 {x=32 y=330 state=0 next=0x02361288}//最初
head_door->next=0x02361288 {x=1 y=330 state=1 next=0x023612d8}//2番目。
(head_door->next)->next =0x023612d8 {x=160 y=30 state=1 next=0x00000000}//最後

となって書き変わってしまうのです。どこが原因だと思われますか?


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


Name: MNS  ..プログラマー(30,064ポイント)   Date: 2010/01/27(水) 18:43   No:47169     
Title: Re:数値が勝手に変わってしまうのです。    
×if(p->x=head_door->x && p->y==head_door->y){
◯if(p->x==head_door->x && p->y==head_door->y){


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

Name: ひよこ  ..比類無きプログラマー(79,201ポイント)   Date: 2010/01/27(水) 18:51   No:47170 解決!     
Title: Re:数値が勝手に変わってしまうのです。    
あっ、=が一個足りませんね。二日悩んだものがあっさりと直りました。
デバッグは難しいですね。
MNSさんありがとうございました。


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



Name: wing  ..初心者(5,028ポイント)   Date: 2010/01/24(日) 14:43   No:46962       
Title: キャラとコインの当たり判定    
こんにちは、質問させていただきます。
Windows7, Dxライブラリ, VC2008EE を使用しています。

DXライブラリ置き場様のサンプルプログラム29を元にしています。

マップにコインを配置してキャラとの当たり判定によって消したいのですが、
うまい方法が浮かびません。
キャラとコインの当たり判定は MapHitCheck関数を参考にして作りました。
int CoinHitCheck(float X, float Y, float *MoveX, float *MoveY){
    float afX, afY;
    afX = X + *MoveX;
    afY = Y + *MoveY;

    if(GetChipParam(afX,afY) == 2){
       coin.lx = (float)((int)afX / CHIP_SIZE)*CHIP_SIZE;
       coin.rx = (float)((int)afX / CHIP_SIZE + 1)*CHIP_SIZE;
       coin.ty = (float)((int)afY / CHIP_SIZE)*CHIP_SIZE;
       coin.by = (float)((int)afY / CHIP_SIZE + 1)*CHIP_SIZE;
     if(*MoveY > 0.0f || *MoveY < 0.0f || *MoveX > 0.0f || *MoveX < 0.0f)
        return 1;
     else
        return 0;
    }    
}
そして描画しているのは
    {// マップの描画
        int i, j ;
        for( i = 0 ; i < MAP_HEIGHT ; i ++ ){            
            for( j = 0 ; j < MAP_WIDTH ; j ++ ){                                    
           switch(MapData[i][j]){
          case 1://1:ブロック
              DrawGraph(j*CHIP_SIZE, i*CHIP_SIZE, img_chip[0], true);
              break;
          case 2:// MapDataが2:コインの場合
              if(CoinHitCheck(ch.x, ch.y, &MoveX, &MoveY)==0) //0:当たっていない
             DrawGraph(j*CHIP_SIZE, i*CHIP_SIZE, img_chip[1], true);
              break;
                }
            }
        }
    }
の部分です。
長いので次に続きます。


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


Name: wing  ..初心者(5,131ポイント)   Date: 2010/01/24(日) 14:50   No:46963     
Title: Re:キャラとコインの当たり判定    
マップの描画のcase 2は、とりあえずCoinHitCheck関数が
ちゃんとできているかみるために書いてます。
実際に実行してみると、キャラとコインが接触するとコインが消えるので
CoinHitCheck関数はちゃんと機能していると思われます。
しかし、当たるとすべてが消え、離れるとすべてがまた描画されます。

当たったコインだけが消える方法を教えていただけないでしょうか。


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

Name: wing  ..初心者(5,141ポイント)   Date: 2010/01/24(日) 14:55   No:46965     
Title: Re:キャラとコインの当たり判定    
chipの画像です。

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

Name: wing  ..初心者(5,193ポイント)   Date: 2010/01/24(日) 15:00   No:46966     
Title: Re:キャラとコインの当たり判定    
キャラの画像です。

当たったコインだけ消したいんですが、
どなたかヒントでもいただけないでしょうか。
(リストはわかりません。)


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

Name: SooA [URL]  ..プログラマー(27,340ポイント)   Date: 2010/01/24(日) 15:58   No:46973     
Title: Re:キャラとコインの当たり判定    
マップデータにそのままコインを配置しているようですので、
そのまま使うなら、
■マップデータを書き換える方法
1 1 1 1 1 1
1 0 0 0 0 0 
1 0 2 0 0 0 
1 0 1 1 1 1 
↓コイン(2)の座標をキャラが通ったらマップを書き換える
1 1 1 1 1 1
1 0 0 0 0 0 
1 0 0 0 0 0 
1 0 1 1 1 1 

■コインの取得データを作成していく方法
1 1 1 1 1 1
1 0 0 0 0 0 
1 0 2 0 0 0 
1 0 1 1 1 1 
コイン(2) x=2 y=2 を取得したフラグを立てて
マップを描画するときに x=2 y=2 にフラグが立っていたらコインを描画しない。

■コインの配置をマップとは別データとして保持する


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

Name: sizuma [URL]  ..プログラマー(32,416ポイント)   Date: 2010/01/24(日) 16:03   No:46974     
Title: Re:キャラとコインの当たり判定    
ソースは読んでませんが、MetaDataをコインじゃないデータに置き換えるだけではダメなのでしょうか?

#ぼーっとしてたらかぶった^^; 編集済み


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

Name: wing  ..初心者(5,683ポイント)   Date: 2010/01/24(日) 17:13   No:46981     
Title: Re:キャラとコインの当たり判定    
SooAさん、ありがとうございます。

マップデータを書き換える方法。
コインの取得データを作成していく方法。
コインの配置をマップとは別データとして保持する。
考え方は分かったので、まだ具体的には分からないんですが、
試行錯誤してみます。

マップを書き換えるというのは、当たり判定した時に
MapData[y][x] = 0; とかで書き換えられるんでしょうか。
試してみたいと思います。

sizumaさん、ありがとうございます。

コインじゃないデータに置き換えるとは考えもしませんでした。
描画をしないようにするとばかり考えていたので、
とても思いつきませんでした。
がんばってできるようにしたいと思います。


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

Name: kazuoni [URL]  ..ハッカー(130,690ポイント)   Date: 2010/01/24(日) 18:03   No:46982     
Title: Re:キャラとコインの当たり判定    
> 描画をしないようにするとばかり考えていたので、 

この考え方は正しいと思います。
例えばメンバ(構造体)に表示する(コインでいえば取得された)かどうか
を示すメンバ

t.IsGetted = false

を持たせ、通過したら

t.IsGetted = true

とし、描写をしないという風に管理すれば、
もし、マップが複数あり、
マップ1からマップ2に切り替わり、マップ1に戻った時、
前にとったコインを元に戻したいと思ったら、マップ1のすべてのフラグをfalseにするでけで済みます。
まぁ、今回はお二方の方法で十分ですが。


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

Name: wing  ..初心者(5,867ポイント)   Date: 2010/01/24(日) 18:51   No:46983     
Title: Re:キャラとコインの当たり判定    
> kazuoniさん、アドバイスありがとうございます。
if(coin.flag == true)
   DrawGraph(j*CHIP_SIZE, i*CHIP_SIZE, img_chip[1], true);

のようにすると、coin.flag が false になるとすべてのコインが
消えてしまいます。コインがひとつならいいんですが.......。

龍神録のように、coin_t  coin[COIN_MAX]; のようにやるのかなとも
考えていますが、それはそれでまた良く分からないんですが。

まだまだ試行錯誤してみます。


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

Name: kazuoni [URL]  ..ハッカー(131,000ポイント)   Date: 2010/01/24(日) 19:21   No:46986     
Title: Re:キャラとコインの当たり判定    
> 龍神録のように、coin_t  coin[COIN_MAX]; のようにやるのかなとも 

もちろんそのようにやらなければいけません。
コインはすべてで一つではなく、個々の単体と考えてください。

以下のように簡単に考えれば今回の場合は十分かと思います。

キャラが歩き、そのマップチップがコインデータ(Wingさんでいう2)
ならば、そのコインは何番目のコインなのか探査します。
この何番目というのは、自分で定めればよいです。
例えば
1→→→→→→→→→→→→
2→→→→→→→→→→→→
3→→→→→→→→→→→→
4→→→→→→→→→→→→
5→→→→→→→→→→→→
の様な順番にマップをみていって、登場した順にコイン番号を割り振るとかですね。

そうすれば
coin[num].flag == false

みたいに一括で管理すれば、描写も楽ですよね。

コイン数がものすごい数ならば座標等のデータから
簡単符号化した数値をコイン番号に割り振るってことも
ありかと思いますが、これは恐らく今回のケースでは無駄がある気がするので省略します。


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

Name: wing  ..初心者(6,046ポイント)   Date: 2010/01/24(日) 23:40   No:47000     
Title: Re:キャラとコインの当たり判定    
>順番にマップをみていって、登場した順にコイン番号を割り振るとかですね

これは
#define COIN_MAX    8
.......

for(int i=0; i<MAP_HEIGHT; i++){
   for(int j = 0; j<MAP_WIDTH; j++){
      if(MapData[i][j] == 2){
         for(int k=0; k<COIN_MAX; k++){
       coin[k].data = MapData[i][j];
         }
      }
   }
}

こんな感じでしょうか。
coin[k].data は自分でも意味不明ですが、とりあえずMapData[i][j]を
いれておこうかと思いました。

考え方は分かったので、あとは試行錯誤していると突然ひらめくことも
あるかと思いますのでがんばってみたいと思います。


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

Name: wing  ..初心者(6,232ポイント)   Date: 2010/01/27(水) 18:22   No:47166 解決!     
Title: Re:キャラとコインの当たり判定    
やっと完成しました。
SooAさん、sizumaさん、kazuoniさん、
ありがとうございました。

よく見たら、おかしな部分があることにも気づきました。

実は、4ヶ月くらい前から横スクロールアクションゲームを
作ろうとして、ネットで調べながらマップエディタの使い方や
スクロールの部分は完成していました。

コインも取れるようになって、やっとゲームの形になりました。

アドバイス、ありがとうございました。


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



Name: ムンバ  ..プログラマー(27,287ポイント)   Date: 2010/01/27(水) 16:41   No:47154       
Title: 関数不足?(ゲームプログラミングの館)    
こんにちは。連投すみません。<_ _>

---↓編集部位---

↓私の誤認でした。申し訳御座いません。
(お手数おかけしますが、お時間あれば削除でも構いません。<_ _>)

---↑編集部位---

ゲームプログラミングの館の
「34. メイン関数の書き方。」のソースなのですが
GetHitKeyStateAll_2 関数の記述漏れがあります。
お時間ある時に、修正(追加)宜しくお願い致します。

ps:誤字等、発見した場合のタイトルなのですが
 「管理人さんへ」とかの方が、いいでしょうか?
 勉強させて頂いてるのに、何だか揚げ足をとってるみたいに感じて・・・。^^;
 以前に、掲示板の方での報告の方が良いとおっしゃってたので
 メールは控えてますが、私はメールでも、こちらでも構いませんので。^^
 (これも、お時間ある時にでも、ご返答お願い致します。w) 編集済み


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


Name: SooA [URL]  ..プログラマー(28,354ポイント)   Date: 2010/01/27(水) 17:18   No:47161     
Title: Re:関数不足?(ゲームプログラミングの館)    
横から申し訳ない、

>GetHitKeyStateAll_2 関数の記述漏れがあります。 
単に使用していないだけではないですか?
プログラムに問題はないと思うのですが、エラー出ましたか?


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

Name: ムンバ  ..プログラマー(27,323ポイント)   Date: 2010/01/27(水) 17:53   No:47163 解決!     
Title: Re:関数不足?(ゲームプログラミングの館)    
ご指摘ありがとうございます。
SooAさんのおっしゃる通りでした。(汗
私のコピペミスでした。

管理人さんへ
本当に申し訳ございませんでした。
解決マーク付けさせて頂きますが
この記事、お時間ある時に削除希望です。
ご面倒おかけします。(謝


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



Name: 青熊  ..ぴよぴよ(180ポイント)   Date: 2010/01/27(水) 14:23   No:47141       
Title: fopen"ab"で書き込まれた構造体リストの読み込み方法    
fopenで繰り返し追記された構造体を読み込む方法を探しています。

FILE fp = open(*FilePass,"ab");
fwrite(Save_Data, sizeof(savedata_t), 1, fp ) ;

このようにして構造体を次々とファイルに書き込んでいるのですが(ログファイルであるため)、
この書き込まれた構造体全てを上手く読み込む方法はあるでしょうか。
読み込む対象としては構造体savedata_tの配列か、連結リストを想定しています。

そもそも書き込む際に一行づつ書き込む、というのは最終手段でお願いします。
よろしくお願いします。


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


Name: softya  ..ハッカー(106,691ポイント)   Date: 2010/01/27(水) 15:23   No:47147     
Title: Re:fopen    
読み込むなら
FILE fp = fopen(*FilePass,"rb"); // ← たかぎさんのツッコミで修正。
fread(Save_Data, sizeof(savedata_t), 1, fp ) ;
while( !feof(fp) ) {
//Save_Dataを何処かへコピー
fread(Save_Data, sizeof(savedata_t), 1, fp ) ; 
}
で問題なく読み込めると思いますが。
こんな事聞いてないと思うので、もっと具体的に質問して下さいね。 編集済み


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

Name: たかぎ [URL]  ..ハッカー(157,013ポイント)   Date: 2010/01/27(水) 16:10   No:47151     
Title: Re:fopen    
念のため確認します。

> fopenで
> FILE fp = open(*FilePass,"ab"); 

fopenかopenかどちらでしょう?


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

Name: 青熊  ..ぴよぴよ(215ポイント)   Date: 2010/01/27(水) 16:46   No:47156     
Title: Re:fopen    
ありがとうございます。
先頭から順番に読み込めばよかったのですね……何か勘違いしていたようでした。


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

Name: 青熊  ..ぴよぴよ(236ポイント)   Date: 2010/01/27(水) 16:46   No:47157 解決!     
Title: Re:fopen    
すみません、解決マーク忘れてました

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



Name: sinrei  ..ぴよぴよ(107ポイント)   Date: 2010/01/25(月) 22:32   No:47040       
Title: C++からCに    
if(myid==0){
            if((MPI_Wtime()-time0)>0.5){
                ofstream outfile(OUTFILE,ios::app);
                outfile<<loop<<"";
                for(int i=0;i<STARNUM;i++)
                    outfile<<(int)Star[i].x<<""<<(int)Star[i].y<<""<<(int)Star[i].z<<"";
                outfile<<"\n";
                outfile.close();
                
                printf("Turn:%d,",loop);
                printf("Time(s):%.3f,",(MPI_Wtime()-StartTime));
                printf("\r");
                loop0=loop;
                time0=MPI_Wtime();
            }
        }

今、このC++で作ったソースをCに直したいんですが
この部分outfile<<(int)Star[i].x<<""<<(int)Star[i].y<<""<<(int)Star[i].z<<"";などの直し方
よければご教授ください。


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


Name: sizuma [URL]  ..プログラマー(33,167ポイント)   Date: 2010/01/26(火) 00:47   No:47050     
Title: Re:C++からCに    
http://www.isl.ne.jp/pcsp/beginC/C_Language_16.html

ファイルの入力をするだけならば、このページぐらい見れば書けるならすぐかけると思います。
streamより扱いづらいけど、シンプルだと思うので。


#追記
<<""<<ってなんか意味があるんですか?? 編集済み


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

Name: MNS  ..プログラマー(30,021ポイント)   Date: 2010/01/26(火) 15:15   No:47068     
Title: Re:C++からCに    
><<""<<ってなんか意味があるんですか??
「"」を出力したいのでは?


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

Name: sinrei  ..ぴよぴよ(139ポイント)   Date: 2010/01/26(火) 15:47   No:47075     
Title: Re:C++からCに    
>sizumaさん
ありがとうございます。
参考にさせてもらってやりたいと思います。

<<""<<ってなんか意味があるんですか?? 
そこはデータを結合して出したいのでそう打ち込んだんです。


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

Name: sizuma [URL]  ..プログラマー(33,213ポイント)   Date: 2010/01/26(火) 15:54   No:47077     
Title: Re:C++からCに    
>「"」を出力したいのでは?
"\""ですかね、それなら。

>そこはデータを結合して出したいのでそう打ち込んだんです
必要ないと思いますけど・・・


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

Name: non  ..比類無きプログラマー(89,213ポイント)   Date: 2010/01/26(火) 16:10   No:47079     
Title: Re:C++からCに    
半角スペースを忘れたのではないの?


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

Name: sinrei  ..ぴよぴよ(226ポイント)   Date: 2010/01/27(水) 16:33   No:47153 解決!     
Title: Re:C++からCに    
>sizumaさん

すいません。
半角スペースを忘れてただけでした。
いろいろ申し訳ありませんでした。

>nonさん

その通りです。
ありがとうございました。


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



Name: Ma  ..プログラマー(32,340ポイント)   Date: 2010/01/24(日) 13:28   No:46956       
Title: 【雑談】最近話題の画像ぷるぷるソフト    
DXライブラリ使っているような気がする、このソフト。
文字列の表示がとてもそんな感じ。

結構前から気になっていましたが、ちょっと雑談に持ち上げてみました。
もしかしたら作者さんが見にくるかも?

簡単にいえば、このソフトは2Dの画像をいれて、パラメータをペイントのように設定してから、その画像をぷるぷるさせるソフトです。
↓詳しくは、動画をどうぞ。

画像をぷるぷるにするソフト作ってみた ver3.00
http://www.nicovideo.jp/watch/sm9462411

ちなみに、私が一番驚愕したのは ver2.50 の3D化デモ。すごい、すごすぎるよ(発想がw)。


波紋を作るアルゴリズムや、この模擬3D化のアルゴリズム、AVI 保存、GIF保存について、語れたらなーとか思ってます。

一番気になるのは、AVI作成方法ですが、ぐぐってみると無圧縮で保存する方法が簡単に見つかりました。
って、これ聞いて解答があっても理解できるか分かりませんが(笑

ともかく、この面白ソフトについて雑談でもいかがでしょうか?


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


Name: Ma  ..プログラマー(32,483ポイント)   Date: 2010/01/24(日) 13:35   No:46957     
Title: Re:【雑談】最近話題の画像ぷるぷるソフト    
AVIとGIFについては、ちょっと調べたらありましたね。
あとやっぱりDXライブラリらしい。
もし作者さん来てたら一言。
「あんたは(二重の意味で)男だ!!」

readme.txtより。


DXライブラリ
DX Library Copyright (C) 2001-2008 Takumi Yamada.

avi出力
Video for Windows
使い方参考:岩本一樹 http://www.maid.org/

GIFファイル出力
cgif


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

Name: kazuoni [URL]  ..ハッカー(130,238ポイント)   Date: 2010/01/24(日) 14:06   No:46959     
Title: Re:【雑談】最近話題の画像ぷるぷるソフト    
提示されているリンク先の動画の応用方法が
ここの掲示板にふさわしい内容かどうかは微妙ですが・・・

> ver2.50 の3D化デモ。すごい、すごすぎるよ(発想がw)。

これはソフトが違いますね。
上であげられた動画は3D化ではない気がします。
恐らくこちらでしょうか。
http://www.nicovideo.jp/watch/sm9277616

実はこれは結構前からありました。レイヤデプスイメージってググれば、
恐らく方法もわかるかと。
難点は、濃淡の設定により画像が切れてしまう事があるって事ですかね。
ここはうまく線形補完や、周囲のデータより、推測で埋めるなど色々な解決策がありますが
結構面倒な気がしますが、動画のソフトではうまく調整しているようですね。


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

Name: Ma  ..プログラマー(32,126ポイント)   Date: 2010/01/24(日) 15:29   No:46968     
Title: Re:【雑談】最近話題の画像ぷるぷるソフト    
>ここの掲示板にふさわしい内容かどうかは微妙ですが・・・
たしかにきわどかったですかね。。。


>これはソフトが違いますね。 
あぁ、そういわれてみればUIがぜんぜん違うなー。
結構前に見た動画だったので勘違いしていたようですいません。
わざわざリンクまでありがとうございます。

>レイヤデプスイメージ
ふむ。
なんとなく方法は分かっているつもりでしたが、実際にやってみないとできるとはいえないですねぇ・・・。
とはいえ、やるきにもあまりなりませんがww

DXライブラリでもできるのだろうか・・・?
2D画像にいくつか頂点を均等に分布させてから、濃淡の情報を元に各頂点のz値に反映、反映後そのまま描画。
なんて感じですよね。


>難点は、濃淡の設定により画像が切れてしまう事があるって事ですかね。 
切れる?伸びすぎるという意味でしょうか?



・いつも思うこと。
やはり3Dの話をするにはDirectX勉強するべきかなぁ。。。


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

Name: kazuoni [URL]  ..ハッカー(130,502ポイント)   Date: 2010/01/24(日) 16:37   No:46977     
Title: Re:【雑談】最近話題の画像ぷるぷるソフト    
> レイヤデプスイメージ 

あ、誤認でした。
レイヤデプスイメージは主に複数枚の画像と奥行きから得るものでした。

普通に一枚の画像から奥行き値だけで立体的に表示すると、
画像に現れているところは伸ばす事が出来ますが、
例えば、正面から顔の画像があるとしたら、
それを濃淡だけで3Dっぽっくすると、耳の裏、首の横面
などは一枚の画像だけではわからないので、そこには何も表示する事が出来ず、
切れているように見えます。
それを解消するために、レイヤデプスイメージが役に立ちます。
そりゃ耳の後ろを映した画像(奥行きも含める)があれば補間できますよねって話です。
 編集済み


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

Name: 通りすがり  ..上級者(18,802ポイント)   Date: 2010/01/24(日) 16:58   No:46979     
Title: Re:【雑談】最近話題の画像ぷるぷるソフト    
DXライブラリの話題ならば、本家の掲示板でお話されたほうがよいかと

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

Name: Ma  ..プログラマー(32,187ポイント)   Date: 2010/01/24(日) 23:54   No:47002     
Title: Re:【雑談】最近話題の画像ぷるぷるソフト    
ところで、あの波はホイヘンスの原理を元に作ってるのだろうか。
一点の動きは周りの8点によって決まるようにして。
(やったことないので、できるかわかりませんが)
そしたら計算量は、O(n)になるのかな。


>DXライブラリの話題ならば、本家の掲示板でお話されたほうがよいかと
いわれてみればたしかにDXライブラリの話になっちゃいますかね。


うーん、失礼しました。
使ってるアルゴリズムとかを雑談したら結構ためになるかなーって思ったまででした。
不適切でしたらすいません。 編集済み


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,143,200ポイント)   Date: 2010/01/26(火) 21:30   No:47105     
Title: Re:【雑談】最近話題の画像ぷるぷるソフト    
> Maさん

こんにちは。
お〜この動画なら私もみましたよ^^
すごいな〜と思ってみてました。
ver2.0の時に見つけて、似たような物を真似して作ってみましたが、
すぐにはあそこまで綺麗には作れませんでした。

> ここの掲示板にふさわしい内容かどうかは微妙ですが・・・

ここは意外に年齢の低い人もよく来られてるみたいですからね^^;
といっても、ニコニコのランキングに上がっている動画位なら誰でもアクセスしてすぐ見れるようなものなので、
まぁ大丈夫・・・でしょ(ホントか?

といっても、この動画気に入ったなと思ってブログに書こうかと思いつつ思いとどまったのでやっぱ微妙かもしれませんが^^;

> 使ってるアルゴリズムとかを雑談したら結構ためになるかなーって思ったまででした。不適切でしたらすいません。

いえいえ、私もすごく興味持ちましたよ。
内容はどうでもただ動画にDXライブラリと書いてあるだけで興味持つのですがw
すぐにレス出来ずごめんなさい。
何でも気軽に話して下さいね^^
DXライブラリの話題は私的には大歓迎ですよ☆
興味無い人はトピを見なければいいだけだと思うので、どんなトピがあっても良いと思ってます。
私も何か話題提供したいところですが、最近趣味にあけくれる時間も無く・・

> やはり3Dの話をするにはDirectX勉強するべきかなぁ。。。

DXライブラリが3D対応になってからは、そうでもないんじゃないですか?

私はバトーキンさんがアップされてるDXライブラリで作った3Dゲームの動画とか好きですよ^^
http://www.nicovideo.jp/watch/sm9115910

本格3Dゲーとか作ってみたいものですが、社会人になるとゲーム制作って難しいですね・・;
大学時代に帰りたい・・。


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

Name: Ma  ..プログラマー(35,435ポイント)   Date: 2010/01/27(水) 12:59   No:47134     
Title: Re:【雑談】最近話題の画像ぷるぷるソフト    
管理人さん、返信ありがとうございます。

>DXライブラリが3D対応になってからは、そうでもないんじゃないですか? 
私のレベルだと特にDirectXを学ばなくてもDXライブラリの3D機能だけで、結構満足できますね。
ただ、3D用語とかが分からなかったりします。メッシュだとか・・・。


>内容はどうでもただ動画にDXライブラリと書いてあるだけで興味持つのですがw 
ですです。私もよく某動画サイトでDXライブラリと検索してみてたりします。


>私はバトーキンさんがアップされてるDXライブラリで作った3Dゲームの動画とか好きですよ^^ 
実は、私もパトーキンさんが作られた3Dゲームが結構すきですw

あれの地面との接地判定が勉強になりました。
現在位置から各三角形に対して各頂点とのベクトルを出して、3つのベクトルから360度に近い値が出たらその三角形の上っていうアルゴリズムでした。
あれは、おぉーって思いましたね。


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



Name: ムンバ  ..プログラマー(27,167ポイント)   Date: 2010/01/26(火) 17:14   No:47086       
Title: 誤字報告    
こんにちは。お世話になります。<_ _>

「ゲームプログラミングの館」の
「32. 乱数の初期化の仕方」ご解説の4行目辺り

「ですから、今まさに操作しているようかにその人が操作したのと・・・」

誤字かと思われますので、お時間ある時に修正お願い致します。
引き続き、勉強させて頂いてます!w

---↓編集にて追加---
「33. 選択画面の作り方。」の9行目辺り
「これには40節の「キーがどれ位押されたかを監視する関数」を利用すると便利なので・・・」の
「キーがどれ位押されたかを監視する関数」から、リンクできません。
(私だけかも?^^;)
宜しくお願い致します。 編集済み


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


Name: shilfia  ..入門者(4,104ポイント)   Date: 2010/01/26(火) 20:08   No:47100     
Title: Re:誤字報告    
40節へのリンクがおかしいですね。
URL↓
http://dixq.net/g/36.html#40

前にもあったのと同じ問題でしょうか。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,143,513ポイント)   Date: 2010/01/26(火) 21:17   No:47104     
Title: Re:誤字報告    
ありがとうございます。リンクミスでした。
前にもありましたね。プログラムで一括置換したので、リンクがあちこちおかしいようです・・。
他にももしあれば教えて頂けると幸いですm(_ _;)m

ご指摘いただいた部分は修正致しました。


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

Name: ムンバ  ..プログラマー(27,171ポイント)   Date: 2010/01/27(水) 11:05   No:47129 解決!     
Title: Re:誤字報告    
おはようございます!

お疲れ様です。
また何かありましたら、ご報告させて頂きます。^^


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



Name: no  ..入門者(3,065ポイント)   Date: 2010/01/26(火) 00:00   No:47045       
Title: string系関数について    
少し気になったので質問します。

文字列を描画するためのstring系関数についてですが、これをwhile文で常時表示させると画面がちらつく原因になりますか?

フルスクリーン時のみ確認できました。
string系関数をすべてコメント文にしたところ解消されたのですが、実際にこの考えは正しいのでしょうか?

そして、もしそうだとするならばゲーム中で文字を表示したい場合は画像ファイルで表示しろ、ということになりますか?

質問多くて申し訳ありません。既知の方、解答お願いします。


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


Name: softya  ..ハッカー(104,532ポイント)   Date: 2010/01/26(火) 00:10   No:47046     
Title: Re:string系関数について    
基本的に裏描画していればちらつく事はありません。


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

Name: no  ..入門者(3,710ポイント)   Date: 2010/01/27(水) 00:42   No:47121 解決!     
Title: Re:string系関数について    
なるほど、そうでしたか。
ありがとうございました。もう少し考えてみます。


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



Name: あま  ..ぴよぴよ(65ポイント)   Date: 2010/01/26(火) 16:48   No:47083       
Title: ソースファイルを削除してしまいました。    
自分で作成したソースファイルを誤って削除してしまいました。
コンパイルしてexeファイルにしたものでしたら残ってるのですが
このexeファイルからソースを見ることは出来ないでしょうか?

VC++ 2800を使用してたのでログが残ってるかと思いましたが
こちらにも残っていません。。。

諦めるしかないのでしょうか?


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


Name: box  ..ハッカー(150,697ポイント)   Date: 2010/01/26(火) 16:58   No:47084     
Title: Re:ソースファイルを削除してしまいました。    
> 自分で作成したソースファイルを誤って削除してしまいました。

ゴミ箱の中に残ってないですか?


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

Name: softya  ..ハッカー(106,056ポイント)   Date: 2010/01/26(火) 17:15   No:47087     
Title: Re:ソースファイルを削除してしまいました。    
はい。残念ながら無理ですね。
exeファイルから出来るコトは逆アセンブリリストを得ることぐらいです。

今後のことを考えてソースコードの履歴管理ツールの利用をお薦めします。
私はソースコードの履歴管理に無料のtortoiseSVNを使っています。クセがありますが慣れると大変便利です。
http://tortoisesvn.net/docs/release/TortoiseSVN_ja/index.html
ちなみにマイクロソフト社のVisual source safeは高いのでとても使えません。
http://ja.wikipedia.org/wiki/Microsoft_Visual_SourceSafe

これを導入すると何が出来るかと言うと、
・定期的にコミットすることで差分履歴を残すことが出来ます。
・履歴のログから好きなバージョンにソースを巻き戻す事が出来ます。
・ソースコードの変更点を視覚的に確認することが出来ます。
・消してしまっても履歴から復活させることが出来ます。
・履歴ファイルを別ドライブにすることでバックアップにもなります。
などなどの特徴があります。

インストールは。こちらが簡単です。
http://pinoki.la.coocan.jp/wiki/?Subversion%2FTortoiseSVN%A4%CE%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB
使い方はこちら。サーバが無くても使えますよ。
http://www.profaim.jp/tools/soft/svn/tortoise-svn/index.php
まぁ、結構概念が難しいのでよろしかったらって事で。


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

Name: SooA [URL]  ..プログラマー(28,265ポイント)   Date: 2010/01/26(火) 17:24   No:47089     
Title: Re:ソースファイルを削除してしまいました。    
ゴミ箱に残ってない場合はファイル復元ソフトを
使うしかないですが、今からインストールしたり
私が使ってるソフトだとOS再起動が必要なので
復元できる可能性は少ないです。

消したファイルと同じドライブへ書き込みを行うと、
復元できる可能性がどんどん減ります。

データは別のドライブに保管しているという場合は
残っている可能性は高い。

Glary Utilities
http://www.glaryutilities.com/gu.html?tag=download&ref=update#
(アドオンツールバーがインストールされます、
 必要ないならチェックを外すのを忘れないように。)


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

Name: あま  ..ぴよぴよ(157ポイント)   Date: 2010/01/27(水) 00:36   No:47119 解決!     
Title: Re:ソースファイルを削除してしまいました。    
みなさん回答ありがとうございます。
やはり一度削除してしまったファイルを復元することは
不可能なのですね・・・

ありがとうございました。
今後このようなことがないように必ずバックアップを
しとくようにします。


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



Name:  ..入門者(3,391ポイント)   Date: 2010/01/23(土) 23:30   No:46937       
Title: 文字列操作<改行が消せない>    
 2つの文字列を読み込んでそれを連結して
一つの文字列として出力したいので、文字列操作
関連の関数をいろいろといじってみたのですが、
どうしても改行が入ってしまい、上手にいきません。

 下にしるした例も非常にわかりずらいかと思いますが、
どうか問題点を教えていただきたいです。
よろしくお願いします。 

char buf1[256],buf2[256];
char *buf;
char s1[] = "\n";

while(fgets(buf2,256,F_input) != NULL){
    buf = strtok(buf2,s1);    //\nをはずす
    while(fgets(buf2,256,F_material) != NULL){
        for(i = 0;i < 256;i ++)
            buf1[i] = buf[i];
        strcat(buf1,buf2);
        fputs(buf1,F_output);
}

例文字列1 = 123456789 文字列2 = qwertyuio   //各最後は改行されている文字列だと思ってください。
現在の出力
123456789
qwertyuio
123456789
qwertyuio

希望の出力
123456789qwertyuio
123456789qwertyuio


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


Name: box  ..ハッカー(150,471ポイント)   Date: 2010/01/24(日) 00:08   No:46940     
Title: Re:文字列操作<改行が消せない>    
> while(fgets(buf2,256,F_input) != NULL){
>     buf = strtok(buf2,s1);    //\nをはずす

fgets()で読んだ文字列の、'\0'直前の'\n'を外す定番の(と思われる)やり方は
if (buf2[strlen(buf2)-1] == '\n')
    buf2[strlen(buf2)-1] = '\0;
です。中間バッファbufは不要です。
そして、

>     while(fgets(buf2,256,F_material) != NULL){

ここではbuf2ではなくbuf1に読み込んで

>         for(i = 0;i < 256;i ++)
>             buf1[i] = buf[i];

このfor文を外して、

>         strcat(buf1,buf2);
>         fputs(buf1,F_output);

こうすればよいでしょう。


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

Name: dic  ..熟練のプログラマー(49,220ポイント)   Date: 2010/01/24(日) 09:35   No:46945     
Title: Re:文字列操作<改行が消せない>    
バックアップ中で時間あまってるので
ペタリ
#include    <stdio.h>
#include    <memory.h>
#include    <string.h>

int        main()
{
    FILE    *file = fopen( "hoge.txt", "rt" );
    if( file == NULL )
    {
        printf( "file not found.\n" );
        return -1;
    }
    int        len;
    char    buf[256], out[1024];
    memset( buf, 0, sizeof(buf) );
    memset( out, 0, sizeof(out) );

    fgets( buf, sizeof(buf), file );
    strcpy( out, buf );
    len = strlen(out);
    out[len-1] = 0;

    while( !feof(file) )
    {
        fgets( buf, sizeof(buf), file );
        int    len = strlen(buf);
        buf[len-1] = 0;
        strcat( out, buf );
    }
    fclose( file );
    file = 0;

    file = fopen( "out.txt", "wt" );
    if( file == NULL )
    {
        printf( "file not open.\n" );
        return -1;
    }
    fputs( out, file );

    fclose( file );
    file = 0;

    return 0;
}



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

Name: フリオ  ..プログラマー(32,159ポイント)   Date: 2010/01/24(日) 17:10   No:46980     
Title: Re:文字列操作<改行が消せない>    
 
 質問への回答ではありませんが、
ファイルの2行づつを1行にまとめるのなら、こんな方法もあります。
 
#include <stdio.h>

int main(int argc, char *argv[])
{
    int c, i;
    FILE *fin, *fout;
    
    if(argc != 3){
        puts("Parameter Error");
        return 1;
    }
    if(!(fin = fopen(argv[1], "r"))){
        puts("InputFile Open Error");
        return 1;
    }
    if(!(fout = fopen(argv[2], "w"))){
        puts("OutputFile Open Error");
        fclose(fin);
        return 1;
    }
    for(i = 0; (c = fgetc(fin)) != EOF; i ^= (c == '\n'))
    {
        if(i || c != '\n') fputc(c, fout);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}

 



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

Name:  ..入門者(3,484ポイント)   Date: 2010/01/26(火) 22:17   No:47108 解決!     
Title: Re:文字列操作<改行が消せない>    
 みなさんありがとうございました。
おかげで無事解決しました。
今回はboxさんのおっしゃるやり方で
最終的に完成させていただきました。
 全体のソースまで載せていただいたり
別の方面からのアプローチの仕方を
載せていただいたりと、本当にありがとうございました。


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



Name: yrao  ..上級者(19,163ポイント)   Date: 2010/01/26(火) 14:02   No:47065       
Title: 自機をボスから遠ざけていくには    

お世話になってます。

おかげさまでゲーム作りも少しずつ進んできました。
(といってもまだボス弾幕周りが固まってきた程度ですが・・・)
 
今回もまたボス弾幕関連の質問なのですが、アドバイスいただければ幸いです。
 
 
________________________
 
過去ログを見ていて、
『自機をボスの方へ少しずつ近づけていく処理』
というものがあったので、これを応用して、逆に『ボスから自機を遠ざけていく処理』を実装してみようと思い、以下のようにプログラムを書いて見たのですが、

@自機が上下の端までくると、左右のコントロールが効かなくなる
A自機が左右の端までくると、上下のコントロールが効かなくなる

という不具合が起きてしまいました。
どこを修正すればよいのでしょうか・・・
 
double angle = atan2(ch.y-boss.y,ch.x-boss.x);
        
    if(!(ch.x<10 || ch.x>FMX-10)){
        ch.x+=cos(angle)*1;
    } 
    if(!(ch.y< 5 || ch.y>FMY- 5)){
        ch.y+=sin(angle)*1;
    }     
            



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


Name: Libra  ..上級者(19,709ポイント)   Date: 2010/01/26(火) 14:47   No:47067     
Title: Re:自機をボスから遠ざけていくには    
xとyの動作を分けているのが原因です。
xだけ、yだけの条件を満たす時は、その方向の処理が行われないため、
1や2の動作となります。

double angle = atan2(ch.y-boss.y,ch.x-boss.x);

if( (ch.x>=10&&ch.x<=FMX-10) && (ch.y>=5&&ch.y<=FMY-5) ){
    ch.x+=cos(angle)*1;
    ch.y+=sin(angle)*1;
}


xとyの条件両方を満たさないと動作しないように変更してみました。


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

Name: yrao  ..上級者(19,403ポイント)   Date: 2010/01/26(火) 15:17   No:47069     
Title: Re:自機をボスから遠ざけていくには    

Libraさんはじめまして。
どうもありがとうございますm(_ _)m
 
 
えーと・・・
教えていただいた通りに書きかえてみたのですが、不具合の方は改善されませんでした(-_-;
 




書きかえたことによって変化したことがあったので報告します。
 
自機が端についてもボスから遠ざかろうとしていた。
(例えば、自機が下の端にいたとすると、x方向には少しずつ動いていました)



自機が端についたところで、x、yどちらの方向への移動もしなくなった
(壁に張りついているような感じです)
 
というものです。


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

Name: Libra  ..上級者(19,789ポイント)   Date: 2010/01/26(火) 15:44   No:47072     
Title: Re:自機をボスから遠ざけていくには    
不具合に対してどう改善したいのかが書いてないので、
どうしたらよいか、こっちもわかりません。


<<自機が端についたところで、x、yどちらの方向への移動もしなくなった 
(壁に張りついているような感じです)

自分はそういうように動くように例書いたので、
期待通りになったかなと。


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

Name: yrao  ..上級者(19,551ポイント)   Date: 2010/01/26(火) 17:11   No:47085     
Title: Re:自機をボスから遠ざけていくには    
説明不足申し訳ないです; 
 
自機が下端にあった場合では、下方向にはそれ以上進まずに、左、上、右方向には自由に動けるように

自機が左端にあった場合では、左方向にはそれ以上進まずに、下、上、右方向には自由に動けるように

自機が右端にあった場合では、右方向にはそれ以上進まずに、左、上、下方向には自由に動けるように

自機が上端にあった場合では、上方向にはそれ以上進まずに、左、下、右方向には自由に動けるように
 
 
という風に改善できればと考えています。
 編集済み


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

Name: Libra  ..上級者(19,874ポイント)   Date: 2010/01/26(火) 20:14   No:47101     
Title: Re:自機をボスから遠ざけていくには    
設定した端より進んでしまった場合、
座標を戻せばいいと思います。

ch.x+=cos(angle)*1;
ch.y+=sin(angle)*1;
if( ch.x < 10 ){
    ch.x = 10 ;
}
else if( ch.x > FMX-10 ){
    ch.x = FMX-10 ;
}
if( ch.y < 5 ){
    ch.y = 5 ;
}
else if( ch.y > FMX-5 ){
    ch.y = FMX-5 ;
}


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

Name: yrao  ..上級者(19,570ポイント)   Date: 2010/01/26(火) 21:00   No:47102     
Title: Re:自機をボスから遠ざけていくには    
おかげさまで不具合解決しました!
 
どうもありがとうございましたm(__)m


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



Name: hide  ..ぴよぴよ(251ポイント)   Date: 2010/01/26(火) 14:40   No:47066       
Title: 龍神録プログラミングの館に使う素材について?    
おととい始めたばかりなのですが
プロジェクトを一括ダウンロードしましてさっそく第一章のRyujin.slnを起動しようとしたのですが

このプロジェクトの種類(.vcproj)のアプリケーションがインストールされていませんと出るのですがどうすればいいですか?



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


Name: non  ..比類無きプログラマー(89,123ポイント)   Date: 2010/01/26(火) 15:17   No:47070     
Title: Re:龍神録プログラミングの館に使う素材について?    
Visual C++ は、インストールされてますよね。


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

Name: hide  ..ぴよぴよ(283ポイント)   Date: 2010/01/26(火) 15:39   No:47071     
Title: Re:龍神録プログラミングの館に使う素材について?    
Microsoft Visual C++ 2008 Express Edition
これをインストールしています。


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

Name: 御津凪 [URL]  ..ハッカー(138,538ポイント)   Date: 2010/01/26(火) 15:45   No:47073     
Title: Re:龍神録プログラミングの館に使う素材について?    
他の Express Edition 、たとえば C# や VB 、あるいは前バージョン(2005)のものが入っていたりしていませんか?

もしかしたらそれらで起動されてしまっているかもしれません。

あるいは、 VC++ を先に起動して、 sln ファイルをドラッグ&ドロップすると出来ると思います。


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

Name: non  ..比類無きプログラマー(89,209ポイント)   Date: 2010/01/26(火) 15:46   No:47074     
Title: Re:龍神録プログラミングの館に使う素材について?    
>Ryujin.slnを起動しようとしたのですが 

VC++を先に起動して、ファイル−開く−ソリューションでもだめですか?


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

Name: hide  ..ぴよぴよ(343ポイント)   Date: 2010/01/26(火) 15:50   No:47076 解決!     
Title: Re:龍神録プログラミングの館に使う素材について?    
nonさんのやりかたでやったら無事開くことができました。
どうやら変換2008に変換していないからできなかったみたいです。
ありがとうございました。


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



Name: Ma  ..プログラマー(33,319ポイント)   Date: 2010/01/26(火) 07:15   No:47051       
Title: 数式の文字列の処理    
 x^3+12
とか
 x*x/(14+x)
などの文字列を入力し、それを数式として(独自のクラス等で)管理、
さらに関数などでxに値を指定すれば答えが戻ってくる
そのようなライブラリはないでしょうか?
もちろん、自作してもいいのですが、手軽にあるのならばそちらを使いたいので。

↑で言ったことよりも多くの機能が入っていてもかまいません。

この前、同じような質問があったような気がしたのですが、見つからず。。。すいません。
知っている方がいらっしゃればリンクおねがいします。 編集済み


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


Name: SooA [URL]  ..プログラマー(27,804ポイント)   Date: 2010/01/26(火) 08:12   No:47052     
Title: Re:数式の文字列の処理    
参考
K-BASIC というスクリプトを作成する過程で
再帰下降構文解析について説明されています。
http://ruffnex.oc.to/kenji/text/script/

Vectorで検索して出てきたDLL
http://www.vector.co.jp/soft/win95/prog/se348215.html


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

Name: Ma  ..プログラマー(33,480ポイント)   Date: 2010/01/26(火) 08:49   No:47053     
Title: Re:数式の文字列の処理    
>K-BASIC というスクリプト
読んでみようと思いましたが、dllがあったみたいなのでそちらを利用させていただくことにしました。

Vector ...検索の仕方が悪かったのかな。
ありがとうございます。
かなり意図したとおりのものでたすかりました。

ただ、気になるのは、戻り値がint 型だったことですが
まぁ、引数に*100を加えて戻ってきた値に100で割れば、細かい値が出せれるかな。

ほんとうに、ありがとうございました。

 編集済み


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

Name: Ma  ..プログラマー(33,908ポイント)   Date: 2010/01/26(火) 09:16   No:47055     
Title: Re:数式の文字列の処理    
追記 



すいません。。。LIBファイルをうまくリンクできないようです。。。 

1>test.obj : error LNK2019: 未解決の外部シンボル "__declspec(dllimport) int __cdecl StrCalc(struct STRCALC_PARAM *)" (__imp_?StrCalc@@YAHPAUSTRCALC_PARAM@@@Z) が関数 "void __cdecl drawGrid(void)" (?drawGrid@@YAXXZ) で参照されました。 
1>C:\Users\Masao\Documents\C language\calc volume\Debug\test.exe : fatal error LNK1120: 外部参照 1 が未解決です。 

http://www.ne.jp/asahi/hishidama/home/tech/vcpp/dll.html#暗黙DLL呼出方法 
ここを参考にして 

#pragma comment(lib, "stcalc35.lib") 
#include "stcalc35.h" 

このようにインクルードしました。 


lib, dll,h ファイルはすべてソースファイルと同じディレクトリにおいてあります。 

dllファイルは、DXライブラリ以外は初挑戦だったりします。 

環境は, 
VC++ 2008 Express Edition 
Windows7 です。 


あと、DXライブラリのようにインクルードディレクトリに、dll, h, lib ファイルがおかれているフォルダを追加しましたが、変わりありませんでした。


フォルダ構成的には

-Debug
  -test.pdb
-test
  -Debug
    -test.objとか・・
  -materials
    -*.jbg とか・・
  -stcalc35.dll
  -StCalc35.H
  -stcalc35.lib
  -test.cpp
  -test.vcproj
test.ncb
test.sln
test.suo


このようになってます。 編集済み


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

Name: non  ..比類無きプログラマー(89,107ポイント)   Date: 2010/01/26(火) 09:40   No:47056     
Title: Re:数式の文字列の処理    
試してないけど
マニュアルに
>StrCalc の関数はCの装飾名を持ちますので、C++ でコンパイルすると関数をリンクする事ができません。
と、書いてあります。


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

Name: Ma  ..プログラマー(33,938ポイント)   Date: 2010/01/26(火) 09:49   No:47057     
Title: Re:数式の文字列の処理    
ほんとうですね。。。

これとDXライブラリを一緒に使うことはできないんだろうか。。。


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

Name: たいちう  ..熟練のプログラマー(51,604ポイント)   Date: 2010/01/26(火) 09:56   No:47058     
Title: Re:数式の文字列の処理    
> これとDXライブラリを一緒に使うことはできないんだろうか。。。

StrCalcを呼び出すdllをCで作ればヨロシ。
試してないけど。


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

Name: SooA [URL]  ..プログラマー(28,117ポイント)   Date: 2010/01/26(火) 10:09   No:47059     
Title: Re:数式の文字列の処理    
DLLに関しては検索かけてソレっぽいリンクを
貼っただけなので、内容のほうは良くわかってません。
で、探したらバージョン違いがありました。
http://www.vector.co.jp/soft/win95/prog/se476820.html


その他ソレっぽい検索
http://search.vector.co.jp/search?query=%95%B6%8E%9A%97%F1%81@%8Cv%8EZ&x=45&y=7


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

Name: Ma  ..プログラマー(34,655ポイント)   Date: 2010/01/26(火) 11:07   No:47060     
Title: Re:数式の文字列の処理    
たいちう さん。
返事ありがとうございます。
ですがマニュアルに、指示された方法があるのでこちらをとらせていただきます。(後記)

SooAさん。
バージョンを最新のものに更新してチャレンジしてみます。


DXライブラリとの連携の前に、サンプルから動かそうと思います。
以下、dllを扱ったことがないので、いろいろ間違っているかもしれませんが、私がやってみたことです。

まずは、サンプルから動かそうと思って、新しくプロジェクトを作りました。
コンソールとして空から作成して、cppファイルを作り、マニュアルどおりのコードを以下のように記載しました。
ちなみに
(C++ で利用する場合は、StrCalc の関数を呼び出している部分を extern "C" で括ってください。)
と記載してありました。

#include <stdio.h>

extern "C"{

#include "stcalc38.h"

void    main(void )
{
    STRCALC_PARAM       prm;

    if (StrCalc_Initialize(&prm) != STATUS_NORMAL){
        printf("初期化に失敗しました\n"); return;
    }

    prm.str = "6293 * (520 + 21)";
    int ret = StrCalc(&prm);

    if (ret != STATUS_NORMAL) printf("エラー:%d\n",ret);
    else printf("結果:%.16G\n",prm.ans);

    StrCalc_Terminate(&prm);
}
} // extern "C"




その後、このcppファイルがあるフォルダと同じところに、
stcalc38.h,stcalc38.dll,stcalc38.lib
をおきました。

ついでに、インクルードディレクトリにもこのフォルダを指定。


それでコンパイルすると
1>------ ビルド開始: プロジェクト: stringCalc, 構成: Debug Win32 ------
1>コンパイルしています...
1>main.cpp
1>リンクしています...
1>main.obj : error LNK2019: 未解決の外部シンボル __imp__StrCalc_Terminate@4 が関数 _main で参照されました。
1>main.obj : error LNK2019: 未解決の外部シンボル __imp__StrCalc@4 が関数 _main で参照されました。
1>main.obj : error LNK2019: 未解決の外部シンボル __imp__StrCalc_Initialize@4 が関数 _main で参照されました。
1>C:\Users\Masao\Documents\C language\stringCalc\Debug\stringCalc.exe : fatal error LNK1120: 外部参照 3 が未解決です。
1>ビルドログは "file://c:\Users\Masao\Documents\C language\stringCalc\stringCalc\Debug\BuildLog.htm" に保存されました。
1>stringCalc - エラー 4、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========


こんな感じです・・・。

たぶん、私が間違っているのですが、手順の間違いの指摘をよろしくおねがいします。


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

Name: softya  ..ハッカー(104,543ポイント)   Date: 2010/01/26(火) 11:15   No:47061     
Title: Re:数式の文字列の処理    
リンカの入力にstcalc38.libは書きましたか?

[補足]
追加の依存ファイルにstcalc38.libと書いて下さい。 編集済み


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

Name: Ma  ..プログラマー(34,675ポイント)   Date: 2010/01/26(火) 11:22   No:47062     
Title: Re:数式の文字列の処理    
softya さん、ありがとうございます。(嬉

うまく成功しました。
ようやく、前に進めそうです。
次はDXライブラリとの連携に挑戦です。
成功または失敗次第、報告に来ます。 編集済み


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

Name: Ma  ..プログラマー(34,753ポイント)   Date: 2010/01/26(火) 11:25   No:47063     
Title: Re:数式の文字列の処理    
(*すいません、ミスで二重投稿してたみたいです。) 編集済み

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

Name: Ma  ..プログラマー(34,738ポイント)   Date: 2010/01/26(火) 12:37   No:47064 解決!     
Title: Re:数式の文字列の処理    
成功しました。
皆様のご協力ありがとうございました。

 編集済み


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



Name: no  ..入門者(2,713ポイント)   Date: 2010/01/24(日) 23:29   No:46998       
Title: 無題    
void string1(){
         ChangeFontSize(20);
         ChangeFont( "MS ゴシック" ) ;
    DrawFormatString( 100 , 455 , col , "ああ");
         ChangeFont( "@MS ゴシック" ) ;
         ChangeFontSize(15);
    DrawVString   ( 620 , 80  , "ああ",col);
}

ゲーム中に縦文字と横文字を混在させる場合、上記のように記述するとフォントチェンジ、文字変更が
やたら起こるためか画面がちらつきます。どのような解決方法があるでしょうか?


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


Name: no  ..入門者(2,769ポイント)   Date: 2010/01/24(日) 23:30   No:46999     
Title: Re:無題    
あ、タイトルとパス付け忘れました……。
見苦しくなってしまって申し訳ありません。今後こういったことがないように注意します。


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

Name: SooA [URL]  ..プログラマー(27,365ポイント)   Date: 2010/01/25(月) 00:12   No:47004     
Title: Re:無題    
一文字ずつを縦方向に描画する関数を
作ってみてはどうでしょう。


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

Name: Ma  ..プログラマー(32,281ポイント)   Date: 2010/01/25(月) 00:40   No:47007     
Title: Re:無題    
もしくは、フォントハンドルを作って描画すれば改善するかも。

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

Name: SooA [URL]  ..プログラマー(27,463ポイント)   Date: 2010/01/25(月) 10:00   No:47022     
Title: Re:無題    
適当に作ってみました。
が、フォントの種類・サイズによっては残念な見栄えになるかも^^;

メモリ使用量を気にしないのであれば、
Maさんの仰るようにフォントハンドルを
作った方が見栄えや扱いが楽かな。 編集済み


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

Name: Ma  ..プログラマー(33,214ポイント)   Date: 2010/01/25(月) 15:06   No:47027     
Title: Re:無題    
>メモリ使用量
チェックしたことないのですが、フォントハンドルってメモリ結構消費するのですか?
せいぜい数キロバイトだろうとかって思ってました。
もしかして、画像と同じようなものなのでしょうか?
とすると、大きなフォントサイズのフォントハンドルを作ると・・・((((;゜Д゜)))ガクガクブルブル


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

Name: SooA [URL]  ..プログラマー(27,708ポイント)   Date: 2010/01/25(月) 16:20   No:47031     
Title: Re:無題    
添付したソースを少し修正しました。


>フォントハンドルってメモリ結構消費するのですか? 
私もちゃんとチェックはしてないのですが、
リファレンス DeleteFontToHandle の解説によると

>この関数は、明らかに使われなくなったフォントデータが
>メモリ領域を圧迫して迷惑を掛けているときに使うと有効です。
> (フォントデータはひとつあたり1.2MB程のメモリ領域を必要とします。)

とあります。
1.2MBが多いと感じるかは人それぞれかな。
私はメガ付くとビビッちゃうんですが・・・_| ̄|○


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

Name: no  ..入門者(2,884ポイント)   Date: 2010/01/25(月) 20:46   No:47037     
Title: Re:無題    
なるほど、そんな便利な関数があったのですね。
リファレンスはざっと眺めたつもりでしたが……。

せっかく作っていただいたので、SooAさんのソースも眺め分かりやすい方を参考にしたいと思います。

DXライブラリのリファレンスブックが欲しいとつくづく思いました。印刷すればいいだけの話ですが……。


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

Name: no  ..入門者(2,908ポイント)   Date: 2010/01/25(月) 23:56   No:47044     
Title: Re:無題    
解決にしておきます。
おふた方、ありがとうございました〜


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



Name: KKXY  ..入門者(4,155ポイント)   Date: 2010/01/24(日) 23:17   No:46997       
Title: listによるバグ。    
listを使ったクラスでバグが起きました。
一体何故バグになるのかわかりません。
なにとぞご教授お願いします。

以下ソースコード
template <class type>
class Graphics
{
protected:
    std::list<type*> dezid;
    std::list<type*> dezid;
public:
    void add(type* bb)
    {
        std::list<type*>::iterator p_one=dezid.begin();
        std::list<type*>::iterator p_two=dezid.end();
        if(dezid.size()!=0)
        {
            p_two--;
        }
        if( dezid.size()==0 || (bb->get_z() < (*p_one)->get_z() )){
            if(bb->get_z()!=-1){
              dezid.push_front(bb);//dezidにbbをいれる
            }
        }
        else if( bb->get_z() >= (*p_two)->get_z() ){

             if( bb->get_z()!=-1 ){
                dezid.push_back(bb);//dezidにbbをいれる。
             }
        }
        else{
            while((*p_one)->get_z() <= bb->get_z()
                  &&
                  p_one!=dezid.end())
            {
                p_one++;
            }
            dezid.insert(p_one,bb);//dezidにbbをいれる
        }    
    };
    void clear(){
        dezid.clear();
    };
    void dispose(type* bb)
    {
        std::list<type*>::iterator p_one=dezid.begin();//add関数でdezidにadd関数を使って
                             データを入れた場合、
                             ブレークポイントを使って調べると
                             ちゃんとデータが入っていると出る。
        std::list<type*>::iterator p_two=dezid.end();
        if(dezid.size()!=0)
        {
            p_two--;
        }

        if( dezid.size()==0){
        }
        else if(bb == (*p_two)){
             dezid.erase(p_two);
        }
        else if( bb ==(*p_one)){
            dezid.erase(p_one);
        }
        else{
            while(1)
            {
              if (p_one==dezid.end())
              {
                    break;
              }
              if (bb == (*p_one))
              {
                   dezid.erase(p_one);
                   break;
              }
              p_one++;
            }
        }
    };
    void screen_up()
    {
       std::list<type*>::iterator p_one=dezid.begin(); //ブレークポイントで調べるとadd関数でちゃん                             とデータをいれたはず
                             なのにdezidには何も入っていないと出る。
       std::list<type*>::iterator p_two=dezid.end(); //ブレークポイントで調べるとadd関数でちゃん                             とデータをいれたはず
                            なのにdezidには何も入っていないと出る。

       ClearDrawScreen();                            // 裏画面のデータを全て削除
       SetDrawScreen( DX_SCREEN_BACK );
      
       for(p_one;p_one!=dezid.end();p_one++){
          if( (*p_one)->get_visible()==true )
            (*p_one)->draw();
       }
       ScreenFlip();//裏画面を表画面に反映
     };
};
static Graphics<Bitmap> graphics;

今回は同様のバグを掃くソースを作ることが出来ず、
バグを起こしているソースをそのまま移しました。

このバグは簡単に言うと
「list型のメンバー変数であるdezidにデータを入れたはずなのに
 メンバー関数で使うと何も入っていないことになっている。」
というバグなのです。
しかもadd関数とdispose関数の中でdezidを使い、
ブレークポイントを使って調べたら
ちゃんとdezidにはデータが入っていることになっているのです。
一体何故このようなバグがおきるのでしょうか?
ちなみにdezidと同じ名前のグローバル変数は宣言していません。


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


Name: Ma  ..プログラマー(32,248ポイント)   Date: 2010/01/25(月) 00:01   No:47003     
Title: Re:listによるバグ。    
しっかり検証していませんが、ぱっとみ気になった点。

protected: 
    std::list<type*> dezid; 
    std::list<type*> dezid; 

同じ名前のメンバーが宣言されていますが、これはミスでしょうか?
というか、これでコンパイルできるのでしょうか。。


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

Name: KKXY  ..入門者(4,145ポイント)   Date: 2010/01/25(月) 06:30   No:47018     
Title: Re:listによるバグ。    
すみません、ミスです

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

Name: KKXY  ..入門者(4,159ポイント)   Date: 2010/01/25(月) 19:38   No:47036 解決!     
Title: Re:listによるバグ。    
すみません、自己解決しました。


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



Name: yus  ..ぴよぴよ(12ポイント)   Date: 2010/01/25(月) 18:06   No:47033       
Title: PNGの情報を...    
png画像の、幅・高さを呼び出し(?)て、プログラム内で使う変数に代入する方法を教えてください。

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


Name: softya  ..ハッカー(104,508ポイント)   Date: 2010/01/25(月) 18:13   No:47034     
Title: Re:PNGの情報を...    
私が思いつく方法は三つあります。
(1)DXライブラリのLoadGraph()で読んで、GetGraphSize()でサイズを得る。
(2)GDI+で読み込んでサイズを得る。
(3)pngをバイナリファイルとして読み込んで、フォーマット解析する。
ちなみに、yusさんの知識と環境次第で大分話が変わります。


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



Name: dic  ..熟練のプログラマー(49,108ポイント)   Date: 2010/01/24(日) 21:44   No:46992       
Title: CreateFile関数のハンドルを閉じる    
WIN32API CreateFile関数で、指定したファイルを読み込もうとしてるのですが、
オープンしたハンドルを閉じる関数ってないのでしょうか?
もしくは、閉じる必要がないのでしょうか?
ファイル数が20万くらいあるので、
リソースをすんごく使いそうなんですが
閉じる関数がMSDNに見当たらなかったので


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


Name: MNS  ..プログラマー(29,947ポイント)   Date: 2010/01/24(日) 21:49   No:46993     
Title: Re:CreateFile関数のハンドルを閉じる    
Win32APIについては全く詳しくはありませんが、
調べてみた感じでは、CloseHandle関数を使うようです。


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

Name: dic  ..熟練のプログラマー(49,167ポイント)   Date: 2010/01/25(月) 16:49   No:47032 解決!     
Title: Re:CreateFile関数のハンドルを閉じる    
ネットワーク越しにファイルやりとりしてるんで
まだ、テスト準備中なんですが
準備態勢ができたら試します
ありがとうございました


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




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +