C言語何でも質問掲示板


Total hit  今日  昨日  

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

 
   最前面表示の仕方   
     ・[49537] softya 
     ・[49598] 匿名 
     ・[49599] softya 
     ・[49715] 匿名 
     ・[49716] softya 
     ・[49727] Ma 
     ・[49768] 匿名 
     ・[49773] Ma 
   実行しているファイル ....   
     ・[49741] Blue 
     ・[49744] たかぎ 
     ・[49763] dic 
     ・[49767] YuO 
     ・[49772] 真由美 
   .netで指定したURLをブ ....   
     ・[49753] dic 
     ・[49757] セレン 
     ・[49758] dic 
     ・[49760] セレン 
   物体の跳ね返りについ ....   
     ・[49736] たいちう 
     ・[49742] K.MURAKAMI 
     ・[49743] Ma 
     ・[49745] たかぎ 
     ・[49746] たいちう 
   .netで指定したURLをブ ....   
     ・[49700] YuO 
     ・[49725] セレン 
     ・[49733] バグ 
     ・[49737] セレン 
   無題   
     ・[49669] pon 
     ・[49672] softya 
     ・[49675] mnkr 
     ・[49690] pon 
     ・[49691] たいちう 
     ・[49693] pon 
     ・[49695] fatens 
     ・[49696] たいちう 
     ・[49697] たいちう 
     ・[49701] fatens 
     ・[49705] たいちう 
     ・[49706] softya 
     ・[49707] fatens 
     ・[49711] バグ 
     ・[49712] たいちう 
     ・[49714] softya 
     ・[49731] フリオ 
   回転度に応じた特定の ....   
     ・[49719] Justy 
     ・[49728] Ma 
   あるゲームのジャンプ ....   
     ・[49709] Dixq (管理人) 
     ・[49723] nnn 
     ・[49724] Dixq (管理人) 
   質問です   
     ・[49378] fatens 
     ・[49379] たかぎ 
     ・[49380] くりあ 
     ・[49411] Justy 
     ・[49420] くりあ 
     ・[49423] たかぎ 
     ・[49439] くりあ 
     ・[49441] たかぎ 
     ・[49458] くりあ 
     ・[49461] fatens 
     ・[49462] たかぎ 
     ・[49468] くりあ 
     ・[49473] たかぎ 
     ・[49485] くりあ 
     ・[49486] くりあ 
     ・[49487] softya 
     ・[49499] fatens 
     ・[49521] くりあ 
     ・[49522] softya 
     ・[49525] たかぎ 
     ・[49685] くりあ 
     ・[49698] softya 
     ・[49699] たかぎ 
     ・[49722] くりあ 
   C++でのメンバ関数ポイ ....   
     ・[49474] たかぎ 
     ・[49482] ぬっち 
     ・[49483] たいちう 
     ・[49501] ぬっち 
     ・[49569] たいちう 
     ・[49718] ぬっち 
   感想ください!!   
     ・[49628] Tororo 
     ・[49630] K.MURAKAMI 
     ・[49632] Tororo 
     ・[49633] K.MURAKAMI 
     ・[49635] kazuoni 
     ・[49640] K.MURAKAMI 
     ・[49643] ideyan 
     ・[49656] Dixq (管理人) 
     ・[49702] K.MURAKAMI 
     ・[49704] K.MURAKAMI 
   四聖龍神録Plus   
     ・[49676] たかぎ 
     ・[49678] softya 
     ・[49679] sizuma 
     ・[49681] Dixq (管理人) 
     ・[49682] softya 
     ・[49684] Dixq (管理人) 
   gccでのtemplateとfri ....   
     ・[49625] たかぎ 
     ・[49627] kazuoni 
     ・[49646] YuO 
     ・[49654] kazuoni 
     ・[49659] たかぎ 
   スクロールゲームにつ ....   
     ・[49585] 鴨 
     ・[49629] wint 
     ・[49631] wing 
     ・[49657] 鴨 
   初心者です。   
     ・[49554] softya 
     ・[49556] pon 
     ・[49557] softya 
     ・[49561] pon 
     ・[49563] softya 
     ・[49567] pon 
     ・[49570] pon 
     ・[49571] たいちう 
     ・[49572] たいちう 
     ・[49577] dic 
     ・[49578] softya 
     ・[49580] たいちう 
     ・[49591] pon 
     ・[49593] pon 
     ・[49594] たいちう 
     ・[49595] pon 
     ・[49596] たいちう 
     ・[49597] pon 
     ・[49601] たいちう 
     ・[49605] GannRock 
     ・[49606] pon 
     ・[49608] GannRock 
     ・[49609] box 
     ・[49615] GannRock 
     ・[49616] たいちう 
     ・[49622] pon 
     ・[49626] fatens 
     ・[49634] たいちう 
     ・[49638] たいちう 
     ・[49639] fatens 
     ・[49641] pon 
     ・[49642] たいちう 
     ・[49644] pon 
     ・[49645] たいちう 
     ・[49648] pon 
     ・[49649] たいちう 
     ・[49650] pon 
     ・[49651] たいちう 
     ・[49652] たいちう 
     ・[49653] pon 
   fgets関数に関して   
     ・[49299] バグ 
     ・[49300] バグ 
     ・[49301] バグ 
     ・[49303] sky 
     ・[49304] non 
     ・[49305] たかぎ 
     ・[49306] sky 
     ・[49308] バグ 
     ・[49309] sky 
     ・[49311] sky 
     ・[49313] Blue 
     ・[49315] sky 
     ・[49316] Blue 
     ・[49372] sky 
     ・[49373] Blue 
     ・[49374] sky 
     ・[49620] sky 
     ・[49637] fatens 
   ゲームの流れについて   
     ・[49565] ひよこ 
     ・[49623] エネン 
   ソフト制作について   
     ・[49506] softya 
     ・[49516] dic 
     ・[49519] softya 
     ・[49568] dic 
     ・[49576] softya 
     ・[49600] dic 
     ・[49602] softya 
     ・[49614] dic 
     ・[49617] たいちう 
     ・[49619] 御津凪 
   3dsMAX 9.0のプラグイ ....   
     ・[49592] LEGZE 
     ・[49610] Justy 
     ・[49613] LEGZE  
   3Dゲームでカメラの位 ....   
     ・[49560] softya 
     ・[49590] SHIM 
     ・[49604] softya 
     ・[49611] SHIM 
   DXライブラリで3Dの表 ....   
     ・[49607] softya 
   たすけてくださいまし   
     ・[49587] softya 
     ・[49589] FOX 
   ファイル名の入力を要 ....   
     ・[49579] softya 
     ・[49582] くぼ 
     ・[49584] softya 
     ・[49588] くぼ 
   「ゲームプログラミン ....   
     ・[49538] kazuoni 
     ・[49539] -ion 
     ・[49541] kazuoni 
     ・[49583] -ion 
   テキストファイルに出 ....   
     ・[49549] たかぎ 
     ・[49550] たかぎ 
     ・[49566] たいちう 
     ・[49573] dic 
     ・[49574] dic 
   質問です   
     ・[49546] フリオ 
     ・[49555] 冊 
     ・[49558] conio 
     ・[49559] 冊 
     ・[49562] fatens 
     ・[49564] 冊 
   XMLの取得について   
     ・[49505] Justy 
     ・[49508] 真由美 
     ・[49510] Justy 
     ・[49511] 真由美 
     ・[49512] Justy 
     ・[49552] 真由美 
   Tatuさんの作った ....   
     ・[49543] Tatu 
     ・[49544] Tatu 
     ・[49547] ハル 
   改行の仕方について   
     ・[49533] kazuoni 
     ・[49534] array 
   龍神録プログラミング ....   
     ・[49526] Justy 
     ・[49530] yskey 
     ・[49532] Justy 
   ノベルスクリプトを作 ....   
     ・[49529] nayo 
   printfDXについて   
     ・[49515] softya 
     ・[49518] FOX 
     ・[49520] softya 
     ・[49523] FOX 
   DXライブラリ用ウィン ....   
     ・[49128] Ma 
     ・[49134] Justy 
     ・[49146] dic 
     ・[49161] kazuoni 
     ・[49180] Justy 
     ・[49249] kazuoni 
     ・[49252] Justy 
     ・[49253] Justy 
     ・[49297] kazuoni 
     ・[49307] lbfuvab 
     ・[49345] kazuoni 
     ・[49364] Justy 
     ・[49365] kazuoni 
     ・[49479] Justy 
     ・[49517] kazuoni 
   ぬえの弾幕のつくりか ....   
     ・[49294] Tatu 
     ・[49302] Tatu 
     ・[49410] situmon 
     ・[49513] situmon 
   ボスの魔法陣?(後ろ ....   
     ・[49507] Justy 
     ・[49509] サンタクロース 
   中1でも、ゲームプログ ....   
     ・[49491] sf4oresama 
     ・[49492] softya 
     ・[49493] sf4oresama 
     ・[49494] Tororo 
     ・[49504] situmon 
   またまた失礼いたしま ....   
     ・[49497] softya 
     ・[49500] ふぇす 
   無題   
     ・[49334] Tororo 
     ・[49495] Tororo 
     ・[49496] Tororo 
   無題   
     ・[49460] fatens 
     ・[49490] ふぇす 
   マップチップの坂道に ....   
     ・[49321] TKOZ 
     ・[49353] mera 
     ・[49385] TKOZ 
     ・[49387] softya 
     ・[49390] mera 
     ・[49391] TKOZ 
     ・[49392] TKOZ 
     ・[49393] TKOZ 
     ・[49394] TKOZ 
     ・[49484] TKOZ 
   無題   
     ・[49452] 哲 
     ・[49477] 哲 
     ・[49481] Justy 
   へにょりレーザー   
     ・[49413] situmon 
     ・[49434] あ〜る 
     ・[49438] Dixq(管理人) 
     ・[49475] mera 
     ・[49476] mera 
     ・[49478] mera 
     ・[49480] mera 
   困っています   
     ・[49418] softya 
     ・[49421] FOX 
     ・[49424] Justy 
     ・[49427] softya 
     ・[49432] Justy 
     ・[49469] FOX 
     ・[49470] FOX 
     ・[49471] FOX 
   このサイトについて   
     ・[49417] Dixq (管理人) 
     ・[49422] たかぎ 
     ・[49433] Dixq (管理人) 
     ・[49467] dm 
   Visual C++ 2008 プロ ....   
     ・[49445] tk 
     ・[49465] 佐藤 渦雷(さとう からい) 
     ・[49466] 佐藤 渦雷(さとう からい) 

Name: 匿名  ..上級者(20,791ポイント)   Date: 2010/03/22(月) 17:14   No:49535       
Title: 最前面表示の仕方    
前回デスクトップアクセサリの時に背景色を消すと言うことは、成功したのですが、
今度はそれを、最前面に表示したいのですがそのプログラムはどのように指定したらよいのでしょうか?

後もう一つ質問なのですが、そのプログラムをバックグラウンド(?)で動かすにはどうすればいいのでしょうか?
通常デスクトップアクセサリとは、スタートの横に表示されるのではなく、
ハードウェアの取り外しなどが表示されている場所にソフトの起動を示すアイコンが出現すると思うのですが、
そのやり方はどうすればいいのでしょうか?


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


Name: softya [URL]  ..ハッカー(137,605ポイント)   Date: 2010/03/22(月) 17:40   No:49537     
Title: Re:最前面表示の仕方    
前回も書きましたが環境を教えてください。
Win32API、MFC、C++/CLIフォームではやり方が違います。

>ハードウェアの取り外しなどが表示されている場所にソフトの起動を示すアイコンが出現する
通知領域(タスクトレイ)ですね。
通知領域(タスクトレイ)に無闇にアイコンを置くことはWindowsVista/7では非推奨の行為となっています。
Vistaの場合は、アイコンが自動的に隠されます。表示はアイコン更新時とメッセージ通知されるときだけです。
7の場合は更に徹底していて、メッセージ通知される時だけになります(ユーザーがわざわざアイコン表示を選べば表示されますが、1つのソフト毎に設定する必要があります)。
なので非表示時に操作を行いたいのなら、デスクトップマスコット自体に操作メニューを搭載して下さい。

アイコンを表示しないのであれば、メインウィンドウを非表示にするだけでタスクバーからは消すことが出来ます。


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

Name: 匿名  ..上級者(20,822ポイント)   Date: 2010/03/23(火) 20:57   No:49598     
Title: Re:最前面表示の仕方    
環境とはどこを見れば解るのでしょうか?
現在windowsXPのMaicrosoft Visual C++をつかって記述しています。


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

Name: softya [URL]  ..ハッカー(138,265ポイント)   Date: 2010/03/23(火) 21:10   No:49599     
Title: Re:最前面表示の仕方    
>現在windowsXPの Maicrosoft Visual C++をつかって記述しています。 
よく分からないのであれば、日ごろ参考にしているサイトやメッセージループの部分の構造を教えてください。


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

Name: 匿名  ..上級者(20,836ポイント)   Date: 2010/03/25(木) 15:10   No:49715     
Title: Re:最前面表示の仕方    
日頃参考にしているサイトはこのサイトになります

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

Name: softya [URL]  ..ハッカー(139,087ポイント)   Date: 2010/03/25(木) 15:41   No:49716     
Title: Re:最前面表示の仕方    
えーと、よく分かりません。
DXライブラリでデスクトップマスコットに使える機能なんてありましたっけ?
管理人さんのサンプルにもなかった気がするんですが・・・。
情報をちゃんと開示してもらわないと、こちらとしては手助け出来ないので詳しくお願いします。

私の知っているのは、Win32API、MFC、 C++/CLIフォームなど直接ウィンドウを制御出来る関数を使ってデスクトップマスコットを作る方法だけです。DXライブラリでの方法は存じません。

DXライブラリの関数リファレンスに書いてある機能なんでしょうか?
http://homepage2.nifty.com/natupaji/DxLib/dxfunc.html


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

Name: Ma  ..熟練のプログラマー(61,662ポイント)   Date: 2010/03/26(金) 04:07   No:49727     
Title: Re:最前面表示の仕方    
>DXライブラリでデスクトップマスコットに使える機能なんてありましたっけ?
つい、最近追加された機能です。
ver3.01a の途中から追加されています。

詳細、使い方はこちら。
http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1616&p=2


正直、私も詳しくありませんが、同じようにデスクトップマスコットを作りました。
で、ちなみに知識もなしにぐぐって無理やり最前面表示させました。

方法は以下のとおりです。

SetWindowPos( GetMainWindowHandle() , HWND_TOPMOST, 0, 0, 300, 300, (SWP_SHOWWINDOW |SWP_NOSIZE) );

HWND_TOPMOST
がみそですな。

なお、この方法では
SetUseBackBufferTransColorFlag(TRUE);
をしている場合、第3引数から第7引数(0 とか 300)は、どんな値を指定してもたいしてウィンドウに変化はありませんでした。

「ただし」、透明化していない状態の場合、ウィンドウの形などがいかれてしまうようです。
DXライブラリで、かつ透明化している場合のみ使える強引な手段かも。。。

あとは詳しい人にまかせ(ry 編集済み


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

Name: 匿名  ..上級者(21,127ポイント)   Date: 2010/03/26(金) 21:36   No:49768     
Title: Re:最前面表示の仕方    
Maさん補足説明ありがとうございます。
今回DXライブラリで作ろうと思ったのは一番初めに画像を表示するプログラムが簡単に書けるのが、
こちらのサイトだったから、という理由だけなので深い意味わ無いです。

しかしMaさんも書かれていますように最近透明化が出来るようになっており、その機能を使うと綺麗に、画像のみを表示することが出来たので、これを使用しデスクトップアクセサリを作ろうと思ったわけです。

しかし、私のPCでは画像を表示させただけでCPU使用率が20%ほど上昇したので出来ればもっと、
軽いプログラムにしたいと思っています

デスクトップ内をうろうろさせるものを作りたいのですがなにで作るのがいいのでしょうか?


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

Name: Ma  ..熟練のプログラマー(62,578ポイント)   Date: 2010/03/27(土) 09:49   No:49773     
Title: Re:最前面表示の仕方    
>デスクトップ内をうろうろさせるものを作りたいのですがなにで作るのがいいのでしょうか?
DXライブラリじゃないなら、WinAPIでしょうかね。一番はやそうなイメージがw
ただし、推測ですのであてにしないでください。

あと、CPU使用率をさげるなら、スリープ関数で休ませてfpsを意図的に下げるのも手ですよ。


ここからは、WinAPIで1回だけウィンドウの透明化をしたことがある程度である私の意見です。

DXライブラリでデスクトップマスコットをやるのと同じ事をWinAPIでするなら、コード内容は何十倍から何百倍も難解になるとおもいます。
WinAPIの経験が十分にあるならば、失礼しました。

たとえば、DXライブラリは、アニメーションをしても自動的に描画されたところだけをクロップしてくれますが、WinAPIは自動的にしてくれません。

そもそも透明化する領域を指定しないといけなかったはず。
その場合は、リージョンを毎フレーム更新しないといけないですね。

結論
DXライブラリ以外も試してみるといいとおもいますが、おそらく一番簡単にデスクトップマスコットを作れるのはDXライブラリです。


サンプルは、グーぐる先生に聞いてみるとそこそこヒットしますよ。 編集済み


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



Name: 真由美  ..入門者(3,739ポイント)   Date: 2010/03/26(金) 11:21   No:49738       
Title: 実行しているファイル名を取得する    
VC++でフリーソフトを作っております。

完成まであと少しの所まで来ました。
そこで実行したファイル名をどうしても取得しなければならないのですが
そのようなメソッドがリファレンスで見つかりませんでした。

※実行したファイル名がtest.exeならtestと拾ってきたいです。

実行されている関数名の取得?はあったのでそれ系列で探したのですが
このメソッドではないようです・・・。
String^ url = System::Reflection::MethodBase::GetCurrentMethod()->Name;

そういったことは出来ないのでしょうか?



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


Name: Blue  ..中級者(12,371ポイント)   Date: 2010/03/26(金) 11:53   No:49741     
Title: Re:実行しているファイル名を取得する    
System::String^ s = System::IO::Path::GetFileNameWithoutExtension(System::Reflection::Assembly::GetExecutingAssembly()->Location);

でどう?


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

Name: たかぎ [URL]  ..ハッカー(172,094ポイント)   Date: 2010/03/26(金) 12:34   No:49744     
Title: Re:実行しているファイル名を取得する    
.NET一般の話ではなく、Visual C++限定であれば、__argv[0]でファイル名を取得することもできます。
ただし、拡張子やディレクトリを取り除くのであれば、それなりの加工が必要です。


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

Name: dic  ..熟練のプログラマー(58,332ポイント)   Date: 2010/03/26(金) 19:47   No:49763     
Title: Re:実行しているファイル名を取得する    
自分で作るソフトの名前って最初から自分で決めるのはでなく?

私は
#define DEF_TITLE "application"

とソースコードに埋め込んでます


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

Name: YuO  ..熟練のプログラマー(43,011ポイント)   Date: 2010/03/26(金) 21:14   No:49767     
Title: Re:実行しているファイル名を取得する    
CLR環境で起動時したアセンブリの名前を取得するのであれば,
GetExecutingAssembly (「現在」実行中のアセンブリの取得) よりもGetEntryAssemblyの方がよいです。
MSDN: Assembly.GetExecutingAssembly メソッド (System.Reflection)
http://msdn.microsoft.com/ja-jp/library/system.reflection.assembly.getexecutingassembly.aspx
MSDN: Assembly.GetEntryAssembly メソッド (System.Reflection)
http://msdn.microsoft.com/ja-jp/library/system.reflection.assembly.getentryassembly.aspx

UnmanagedなWindows環境では,GetModuleFileName APIにNULLを渡すことで起動したプログラムのフルパスを取得できます。
あとは,PathFindFileName APIとPathRemoveExtension APIでファイル名から拡張子を抜かした部分を取得できます。
MSDN: GetModuleFileName Function (Windows)
http://msdn.microsoft.com/en-us/library/ms683197.aspx
MSDN: PathFindFileName Function (Windows)
http://msdn.microsoft.com/en-us/library/bb773589.aspx
MSDN: PathRemoveExtension Function (Windows)
http://msdn.microsoft.com/en-us/library/bb773746.aspx


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

Name: 真由美  ..入門者(3,842ポイント)   Date: 2010/03/27(土) 09:48   No:49772     
Title: Re:実行しているファイル名を取得する    
皆様、ご丁寧に回答ありがとうございました。

System::String^ s = System::IO::Path::GetFileNameWithoutExtension(System::Reflection::Assembly::GetExecutingAssembly()->Location); 

で行けました!!

ありがとうございます。
.netなのですがメソッドが多すぎな気がします・・・。
解決しましたがMSDNのサイト以外でよく使うものが書いてあるようなサイトはないでしょうか?


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



Name: セレン  ..ぴよぴよ(465ポイント)   Date: 2010/03/26(金) 14:12   No:49747       
Title: .netで指定したURLをブラウザで開く    
すみません・・・解決したと思ったのですが解決していなかったので再度質問させて頂きます。
http://www.play21.jp/board/formz.cgi?action=res&resno=49692&page=&id=dixq&rln=49737
で質問させて頂いたものです。

添付したソースは実行すると3つのサイトを開くというものです。
IE7で試した所、IEを実行していると3つとも開くのですが
IEが全く開いていない状況だと一つのサイトしか開きません。
※3つのうち最後に書いているURLのみ

System::Diagnostics::Process::Start("http://www.yahoo.co.jp/");
System::Diagnostics::Process::Start("http://www.bing.com/");
System::Diagnostics::Process::Start("http://www.google.co.jp/");

ソースが原因なのでしょうか?


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


Name: dic  ..熟練のプログラマー(58,162ポイント)   Date: 2010/03/26(金) 14:48   No:49753     
Title: Re:.netで指定したURLをブラウザで開く    
私もgoogleをプログラムで開こうとしたらbotと判定したのでしょうか
いつものHTMLを吐いてくれませんね


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

Name: セレン  ..ぴよぴよ(548ポイント)   Date: 2010/03/26(金) 16:06   No:49757     
Title: Re:.netで指定したURLをブラウザで開く    
dic様
回答ありがとうございます。
これは私のプログラムの書き方が悪いのではなく
IE等の方が問題なのでしょうか?

そうしますと多分、修正は出来ないですよね?


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

Name: dic  ..熟練のプログラマー(58,268ポイント)   Date: 2010/03/26(金) 16:11   No:49758     
Title: Re:.netで指定したURLをブラウザで開く    
.NETを持ってないのでなんとも言えないのですが
悪意あるプログラムと見なされて はじかれてる ってことではないでしょうか
IEの問題かどうかはわからないです
これ以上は私からは言えないです
すいません



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

Name: セレン  ..ぴよぴよ(617ポイント)   Date: 2010/03/26(金) 16:16   No:49760     
Title: Re:.netで指定したURLをブラウザで開く    
いえいえ。
環境がないのにお付き合いありがとうございました。
とても親切で助かりました。

自分なりに少し調べてみます。
ありがとうございました。


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



Name: K.MURAKAMI  ..かけだし(1,417ポイント)   Date: 2010/03/26(金) 10:34   No:49735       
Title: 物体の跳ね返りについて    
こんにちは。
今、ブロック崩しみたいなゲーム作ってます。
普通の壁の跳ね返りなら、
[入射角=反射角]
を使えばできるんですけど、
斜めの壁とかも作りたいんです。
でも、斜めの場合だと、↑の式が使えません。
斜めの壁の跳ね返りは作れないんでしょうか?


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


Name: たいちう  ..熟練のプログラマー(62,975ポイント)   Date: 2010/03/26(金) 10:52   No:49736     
Title: Re:物体の跳ね返りについて    
> 普通の壁の跳ね返りなら、
> [入射角=反射角]
> を使えばできるんですけど、
> 斜めの壁とかも作りたいんです。
> でも、斜めの場合だと、↑の式が使えません。

> 斜めの壁の跳ね返りは作れないんでしょうか?

作れないわけがないと思いませんか?
斜めの壁でも、壁に対しての角度で[入射角=反射角]です。
図に描いてイメージを持ってください。


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

Name: K.MURAKAMI  ..かけだし(1,419ポイント)   Date: 2010/03/26(金) 12:14   No:49742     
Title: Re:物体の跳ね返りについて    
たいちうさん、ありがとうございます。
たしかに、斜めの壁もつくれますね。
でも、画像のAときの?の部分はどういう数値になるのでしょうか?
座標の計算方法が分かりません。
教えてください。


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

Name: Ma  ..熟練のプログラマー(62,098ポイント)   Date: 2010/03/26(金) 12:29   No:49743     
Title: Re:物体の跳ね返りについて    
いろんな方法があるとは思いますが、私なら移動方向のベクトルを反転させて壁の法線ベクトルに対して反転させますね。
反転は行列を使うといいかも。

こちらを参考に。
http://yamasv.blog92.fc2.com/blog-entry-147.html


とはいえ、これは高3レベルになってしまうので、他にも簡単な方法がありそうですが。


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

Name: たかぎ [URL]  ..ハッカー(172,167ポイント)   Date: 2010/03/26(金) 12:40   No:49745     
Title: Re:物体の跳ね返りについて    
K.MURAKAMIがおいくつなのか知りませんが、高校の物理で習う通りです。
一般的には非弾性衝突になりますので、反発係数を設定する必要がありますが、ブロック崩しならそこまで考えなくてもよいでしょうね。


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

Name: たいちう  ..熟練のプログラマー(63,392ポイント)   Date: 2010/03/26(金) 12:52   No:49746     
Title: Re:物体の跳ね返りについて    
> でも、画像のAときの?の部分はどういう数値になるのでしょうか?

それを答えるには、座標系の定義と壁の傾きが必要です。
(a, b)というのは速度ベクトルを表しているという理解で良いのかな?

座標系の定義は、x軸は右向きを正、y軸は上向きを正とする、
とか定義してください。
壁の傾きも、40度、とかではなく、水平から時計回りに40度、とか。

# このような説明ができるならば、問題の大半は解決したようなものです。
# このような説明なしには、手伝いは困難です。


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



Name: セレン  ..ぴよぴよ(35ポイント)   Date: 2010/03/25(木) 08:55   No:49692       
Title: .netで指定したURLをブラウザで開く    
指定したURLをブラウザで開く
http://dobon.net/vb/dotnet/process/openbrowser.html

上記のURLを見て指定したURLをブラウザで開くことは出来たのですが
タブが使えるブラウザだと一つのタブでしか使えません。

これを新しいタブを自動的に開いてURLを開くようには出来ないでしょうか?


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


Name: YuO  ..熟練のプログラマー(43,265ポイント)   Date: 2010/03/25(木) 11:44   No:49700     
Title: Re:.netで指定したURLをブラウザで開く    
特定のブラウザ用であれば,そのブラウザが対応していれば可能です。
Process::Startによる方法は関連付けを開いているのですから,関連付いたブラウザに依存します。
# 私が使えるIE 8環境では,新しくタブが開きますが。


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

Name: セレン  ..ぴよぴよ(117ポイント)   Date: 2010/03/26(金) 02:02   No:49725     
Title: Re:.netで指定したURLをブラウザで開く    
そうなんですか。
IE7を使っているのですが一番最後に開いたタブが更新されて開いてしまう為
2つのサイトを開きたい場合など複数行書いても駄目でした。
※同じタブで開かれてしまう為

これを回避したいのですがIE側で何か設定をすればよいのでしょうか?


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

Name: バグ  ..ハッカー(194,176ポイント)   Date: 2010/03/26(金) 09:37   No:49733     
Title: Re:.netで指定したURLをブラウザで開く    
「ツール」
  ↓
「インターネットオプション」
  ↓
「全般タブ」
  ↓
「タブの項目内」の「設定」
  ↓
「他のプログラムのリンクを開く方法」というグループボックスの
「現在のウィンドウの新しいタブ」をチェック
  ↓
IEを再起動



これでどうでしょうか?


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

Name: セレン  ..ぴよぴよ(165ポイント)   Date: 2010/03/26(金) 11:17   No:49737 解決!     
Title: Re:.netで指定したURLをブラウザで開く    
バグ様

出来ました><
ありがとうございます。
初歩的な質問で失礼しました。



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



Name: pon  ..かけだし(1,009ポイント)   Date: 2010/03/24(水) 23:12   No:49668       
Title: 無題    
すいません。今度は
http://www.ioi-jp.org/joi/2009/2010-yo-prob_and_sol/2010-yo-t3/2010-yo-t3.html
この問題なのですが、


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


Name: pon  ..かけだし(1,074ポイント)   Date: 2010/03/24(水) 23:13   No:49669     
Title: さっきの投稿の続きです。    
このようなプログラムを組んだのですが、入力1に対しては正しい答えを導いたのですが、他の入力に対して見当違いな答えを返します。何故でしょうか。
お願いします


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

Name: softya [URL]  ..ハッカー(137,944ポイント)   Date: 2010/03/24(水) 23:49   No:49672     
Title: Re:さっきの投稿の続きです。    
このままだと先程のやりとりの繰り返しになってしまいますので、自分でできることはやってみませんか?
先程も指摘されていましたが、作りっぱなしで基本的なデバッグさえされているように見受けられません。
(1)ちゃんとデータが入力されていることを確認すること。
(2)最初のループで目的のデータが抽出されているか確認すること。
(3)同様に途中のループでも確認。


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

Name: mnkr  ..入門者(4,589ポイント)   Date: 2010/03/24(水) 23:52   No:49675     
Title: Re:さっきの投稿の続きです。    
途中にブレイクポイントを仕掛けて変数の中身を覗いたり、
途中にprintf(変数)というような感じで変数の中身を覗いたりして
値の推移を見ながらコーディングするとはかどりますよ


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

Name: pon  ..かけだし(1,139ポイント)   Date: 2010/03/25(木) 08:21   No:49690     
Title: Re:さっきの投稿の続きです。    
最初のforはnまででなくmまでですね。すいません

そうすると、入力1に対しては正しい結果が入力2〜5に対しては+1の結果が得られます。どうしてでしょう


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

Name: たいちう  ..熟練のプログラマー(62,360ポイント)   Date: 2010/03/25(木) 08:43   No:49691     
Title: Re:さっきの投稿の続きです。    
> そうすると、入力1に対しては正しい結果が入力2〜5に対しては+1の結果が得られます。
> どうしてでしょう

あなたがそのように作ったからです。
結果が気に入らなければデバッグしましょう。


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

Name: pon  ..かけだし(1,167ポイント)   Date: 2010/03/25(木) 09:09   No:49693     
Title: Re:さっきの投稿の続きです。    
どこが違うんでしょうか…自分でも結構考えてみたのですが全然分かりません…

あとintやcharを文中に入れるとコンパイルに失敗し、それを文頭に移動したら、うまくいくのは何故でしょう


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

Name: fatens  ..中級者(10,195ポイント)   Date: 2010/03/25(木) 09:21   No:49695     
Title: Re:さっきの投稿の続きです。    
>あとintやcharを文中に入れるとコンパイルに失敗し、それを文頭に移動したら、うまくいくのは何故でしょう

それがCの規則だからです。
一応、C99からはOKになったはずですが。


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

Name: たいちう  ..熟練のプログラマー(62,420ポイント)   Date: 2010/03/25(木) 10:08   No:49696     
Title: Re:さっきの投稿の続きです。    
C++で作った結果。答え合わせ用。
っていうか間違っているかもしれないので、要答え合わせ。

input1.txt : 7
input2.txt : 39
input3.txt : 72
input4.txt : 83
input5.txt : 475


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

Name: たいちう  ..熟練のプログラマー(62,457ポイント)   Date: 2010/03/25(木) 10:12   No:49697     
Title: Re:さっきの投稿の続きです。    
ponさんのプログラムは、どのような手順で書かれているのですか?
順番に説明してください。


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

Name: fatens  ..中級者(10,320ポイント)   Date: 2010/03/25(木) 12:33   No:49701     
Title: Re:さっきの投稿の続きです。    
>C++で作った結果。答え合わせ用。
>っていうか間違っているかもしれないので、要答え合わせ。

私はこうなりました。
入力1 : 6
入力2 : 25
入力3 : 50
入力4 : 57
入力5 : 336

少なくとも入力1と入力2については検算もしてみたので正しいはず...


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

Name: たいちう  ..熟練のプログラマー(62,536ポイント)   Date: 2010/03/25(木) 12:48   No:49705     
Title: Re:さっきの投稿の続きです。    
fatensさんありがとうございます。

入力1については、簡単に検証できますね。

10
10
4 10
7 10
3 7
6 8
1 7
1 6
1 5
1 9
2 4
3 8

友達       : 5, 6, 7, 9
友達の友達 : 3, 8, 10

もしかして3が抜けているのではないですか?


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

Name: softya [URL]  ..ハッカー(138,496ポイント)   Date: 2010/03/25(木) 12:57   No:49706     
Title: Re:さっきの投稿の続きです。    
正しい答えは、こちらにあります。
http://www.ioi-jp.org/joi/2009/2010-yo-prob_and_sol/
input1.txt : 7
input2.txt : 39
input3.txt : 72
input4.txt : 83
input5.txt : 475
たいちろうさんのが正解ですね。


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

Name: fatens  ..中級者(10,410ポイント)   Date: 2010/03/25(木) 13:07   No:49707     
Title: Re:さっきの投稿の続きです。    
>たいちうさん
>softyaさん
>もしかして3が抜けているのではないですか?

その通りです。
問題の解釈の間違いに気づき修正していたところでした。
失礼しました。


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

Name: バグ  ..ハッカー(194,063ポイント)   Date: 2010/03/25(木) 14:17   No:49711     
Title: Re:さっきの投稿の続きです。    
頭の体操な感じですね。
皆さんの解法が気になります(^-^)
とりあえず、見苦しいですが私のソースを…
もう少し綺麗にまとめられそうにも思うのですが、ベタで分かり易い書き方でやってみました。


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

#define N    500

int main(void)
{
    int i = 0, j = 0;            /* 汎用変数 */
    int number = 0;                /* 生徒人数 */
    int count = 0;                /* データリスト数 */
    int pair1 = 0;                /* ペア情報一時保持用バッファ */
    int pair2 = 0;                /* ペア情報一時保持用バッファ */
    int check[N][N];            /* 友人関係保持用配列 */
    int friend1[N];                /* 招待客情報用配列 */
    int friend2[N];                /* 友人の友人情報用配列 */
    int result = 0;                /* 招待客の人数 */
    FILE* file = NULL;            /* ファイルポインタ */

    /* ファイルのオープン処理 */
    if ((file = fopen("input1.txt", "r")) == NULL)
    {
        /* ファイルのオープンに失敗 */
        return -1;
    }

    /* 人数とデータ数を取得 */
    fscanf(file, "%d", &number);
    fscanf(file, "%d", &count);

    /* 配列の初期化 */
    memset(check, 0, sizeof(int) * N * N);
    memset(friend1, 0, sizeof(int) * N);
    memset(friend2, 0, sizeof(int) * N);

    /* ペア情報の取得をしながら1の招待客を検出 */
    for (i = 0; i < count; ++i)
    {
        fscanf(file, "%d%d", &pair1, &pair2);
        check[pair1 - 1][pair2 - 1] = 1;
        check[pair2 - 1][pair1 - 1] = 1;

        /* 1の招待客の情報を保持する */
        if (pair1 == 1)
        {
            friend1[pair2 - 1] = 1;
        }
        else if (pair2 == 1)
        {
            friend1[pair1 - 1] = 1;
        }
    }

    /* ファイルをクローズする */
    fclose(file);

    /* 友達の友達を検出 */
    for (i = 0; i < number; ++i)
    {
        /* 1の招待客かどうか? */
        if (friend1[i] == 1)
        {
            for (j = 0; j < number; ++j)
            {
                /* 1の招待客の友達で、なおかつ1の招待客ではない場合に友達の友達とする */
                if (check[i][j] == 1 && friend1[j] == 0)
                {
                    friend2[j] = 1;
                }
            }
        }
    }

    /* 最終カウント */
    for (i = 1; i < number; ++i)
    {
        /* 1の招待客、1の招待客の友達か? */
        if (friend1[i] == 1 || friend2[i] == 1)
        {
            /* 人数をインクリメント */
            ++result;
        }
    }

    /* 人数を表示 */
    printf("%d\n", result);

    return 0;
}



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

Name: たいちう  ..熟練のプログラマー(62,915ポイント)   Date: 2010/03/25(木) 14:29   No:49712     
Title: Re:さっきの投稿の続きです。    
> 皆さんの解法が気になります(^- ^)

C++でよければどうぞ。


#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <set>

using namespace std;

typedef vector<pair<int, int> > vp;
typedef vp::iterator vpit;

void check(const string &fileName) {
    fstream ifs(fileName.c_str());
    int n, len;
    ifs >> n;
    ifs >> len;
    vp data;
    for (int i = 0; i < len; i++) {
        int a, b;
        ifs >> a >> b;
        data.push_back(pair<int, int>(a, b));
    }

    set<int> f;
    f.insert(1);

    for (int i = 0; i < 2; i++) {
        set<int> temp;
        for (vpit it = data.begin(); it != data.end(); it++) {
            if (f.find(it->first) != f.end())
                temp.insert(it->second);
            else if (f.find(it->second) != f.end())
                temp.insert(it->first);
        }
        f.insert(temp.begin(), temp.end());
    }

    cout << fileName << " : " << static_cast<int>(f.size()) - 1 << endl;
}

int main() {
    check("input1.txt");
    return 0;
}


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

Name: softya [URL]  ..ハッカー(138,911ポイント)   Date: 2010/03/25(木) 15:01   No:49714     
Title: Re:さっきの投稿の続きです。    
ざざざっと書いたのでバグっているかも。
※ 最初友達の友達の友達がNGだと言う事に気付かなかった。


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

#define MAX_FRI    500+1
typedef struct {
    int count;
    int friend_no[MAX_FRI];
    int mark;
} t_friend;

t_friend fri_table[MAX_FRI] = { {0,0,0} };

void friend_mark(int n,int nest)
{
    int l;
    if( nest < 3 ) {
        for( l=0 ; l<fri_table[n].count ; l++ ) {
//            printf( "%d->%d\n", n, fri_table[n].friend_no[l] );
            friend_mark( fri_table[n].friend_no[l],nest+1 );
        }
    }
    fri_table[n].mark = 1;
}

int main()
{
    int n;
    int m;
    int a;
    int answer = 0;
    scanf("%d",&n);
    scanf("%d",&m);
    for(a=0;a<m;a++)
    {
        int studentA,studentB;
        scanf("%d%d",&studentA,&studentB);
        fri_table[studentA].friend_no[fri_table[studentA].count] = studentB;
        fri_table[studentA].count++;
        fri_table[studentB].friend_no[fri_table[studentB].count] = studentA;
        fri_table[studentB].count++;
    }
    friend_mark(1,1);
    for(a=2;a<=n;a++) {
        if( fri_table[a].mark == 1 ) {
            answer++;
//            printf("[%d] %d\n",a, answer);
        }
    }
    printf("%d",answer);
}


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

Name: フリオ  ..プログラマー(32,797ポイント)   Date: 2010/03/26(金) 07:42   No:49731     
Title: Re:さっきの投稿の続きです。    
 
 考えてみました

#include <stdio.h>

void make_table(int table[][500])
{
    int m;
    
    scanf("%d", &m);
    while(m --){
        int a, b;
        
        scanf("%d %d", &a, &b);
        table[a - 1][b - 1] = table[b - 1][a - 1] = 1;
    }
}

int count_guest(int table[][500], int n)
{
    int list[500] = {0}, sum = 0, i;
    
    for(i = 1; i < n; ++ i){
        if(table[0][i]){
            int j;
            
            if(!list[i]){
                ++ sum;
                list[i] = 1;
            }
            for(j = 1; j < n; ++ j){
                if(table[i][j] && !list[j]){
                    ++ sum;
                    list[j] = 1;
                }
            }
        }
    }
    return sum;
}

int main(void)
{
    int table[500][500] = {0}, n;
    
    scanf("%d", &n);
    make_table(table);
    printf("%d\n", count_guest(table, n));
    return 0;
}

 編集済み


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



Name:  ..ぴよぴよ(59ポイント)   Date: 2010/03/25(木) 09:20   No:49694       
Title: 回転度に応じた特定の点Aの座標    

とあるゲ―ムを作っておりどうしてもわからないことがあったので質問させて頂きました。

中心点Oは0〜360度回転します。
回転度に応じた特定の点Aの座標を求めたいです。

float rot = float(map.rot/180.0f*M_PI);    // map.rotが中心点Oの回転度 0〜360です。

Pos.x = cos(rot) * r;    // rは半径です。
Pos.y = sin(rot) * r;

この様に書いてみて点の位置を描画してみたのですがどうも上手く動いていないようです。


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


Name: Justy  ..伝説なるハッカー(514,343ポイント)   Date: 2010/03/25(木) 21:19   No:49719     
Title: Re:回転度に応じた特定の点Aの座標    
>上手く動いていないようです
 具体的にどううまく動いていないよくわかりません。

 その式で(どこを基準としどっちに向かって回転するかはともかく)
回転度に応じた特定の点を求めることはできるはずです。

 ひょっとすると点の描画の仕方に問題があることも考えられるので、
テストしたコードがどういうものだったのか補足して下さい。


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

Name: Ma  ..熟練のプログラマー(61,723ポイント)   Date: 2010/03/26(金) 04:32   No:49728     
Title: Re:回転度に応じた特定の点Aの座標    
実は原点がウィンドウ左下で、上向きの上昇すると勘違いしているとか?

だとしたら、下向き上昇なので、左周りの回転なら
Pos.y = -sin(rot) * r;

(ただし、rotは上昇するとする。)

あとは、Oを中心にするなら、 Oの座標を足すべき。ということぐらい。 編集済み


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



Name: nnn  ..ぴよぴよ(65ポイント)   Date: 2010/03/25(木) 13:17   No:49708       
Title: あるゲームのジャンプと降下について    
初めまして、このサイトを見ながら勉強させてもらってます。

さっそく本題ですが、I wanna be the guy というゲームの、ジャンプと降下の式が分かりません。

難しかった面、楽しかった面を再現したり、改造したりして友達と遊ぶ用に作っているのですが、ジャンプ,二段ジャンプと降下がいまいちどのような式で書けばいいのかわかりません。
物理的に考えようと思いましたが、明らかに降下時は等速で落ちているので・・・
WindowsXP,Visual C++ 2008,DXライブラリを使用しています。

ご教授お願いしますm(_ _)m

一応公式HP書いておきます
ttp://kayin.pyoko.org/iwbtg/
ここのDOWNLOADSにあります。


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


Name: Dixq (管理人)  ..ウィザード(1,162,086ポイント)   Date: 2010/03/25(木) 13:41   No:49709     
Title: Re:あるゲームのジャンプと降下について    
y方向の速度を変数に入れておいて
例えばジャンプした瞬間10を代入し、空中にいる間は0.5を減算しつづけ。-10より少なくはならないように、みたいにしてはどうでしょう?
(マジックナンバーは適当)


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

Name: nnn  ..ぴよぴよ(128ポイント)   Date: 2010/03/25(木) 23:48   No:49723     
Title: Re:あるゲームのジャンプと降下について    
返事遅れました。
とりあえず色々数値を変えながら試してみます。
完成したり、問題が出たらまた詳しく書き込もうと思います。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,162,403ポイント)   Date: 2010/03/26(金) 00:17   No:49724     
Title: Re:あるゲームのジャンプと降下について    
携帯から投稿したので、結構いい加減な回答になってしましました。すみません。

今座標(x,y)にキャラがいるとしましょう。
で、y方向の速度はVyとします。
この時、マイフレームごとに

y += Vy;

します。するとマイフレームVyほどy方向に移動します。
では、今、ジャンプした瞬間例えば

Vy = 10;

を代入したとしましょう。するとyは10加算されるので、少し上に移動しますね。
Vyは常に負の力を受けるようにしたいので、
マイフレーム例えば

Vy -= 0.5;

すると、段々速度が遅くなっていきます。
負になった瞬間から落ちるモーションに変化するでしょう。
ある程度以上負の速度を出したくないならば例えば

if( Vy > -10 ){
    Vy -= 0.5;
}

とやってあげれば-10よりも小さくはなりません。
一番速いスピードでも10pix/flameの速さでしか落ちません。
このパラメータは良い値に調整してやればいいと思います。


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



Name: くりあ  ..初心者(7,041ポイント)   Date: 2010/03/18(木) 11:43   No:49377       
Title: 質問です    
前回は、ありがとうございました。
またboost::anyで分からないことが出てしまいました。
前回のを解決にしてしまったので新規に作りました。
すいません。

DXライブラリの
FileRead_open()
関数に、
boost::any
に入った文字列を渡したいのですが、エラーが出てしまいました。
FileRead_open(boost::any_cast<char>(aaa))
としてみたのですが、
DxLib::FileRead_open' : 1 番目の引数を 'char' から 'const char *' に変換できません。
とのことです。
どのようにしたら、正常に動いてくれるでしょうか?


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


Name: fatens  ..初心者(8,761ポイント)   Date: 2010/03/18(木) 12:02   No:49378     
Title: Re:質問です    
boostは抜きにして、文字列は何型か理解していますか?
エラーメッセージの通りだと思いますが。


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

Name: たかぎ [URL]  ..ハッカー(170,880ポイント)   Date: 2010/03/18(木) 12:09   No:49379     
Title: Re:質問です    
> boostは抜きにして、文字列は何型か理解していますか? 

それもありますが、ポインタが指している文字列はすでに生存期間を終えている可能性がありますね。


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

Name: くりあ  ..初心者(7,094ポイント)   Date: 2010/03/18(木) 14:34   No:49380     
Title: Re:質問です    
ポインタということですか?
charの部分を変えれば何とかなるのでしょうか?
変えたらメモリのアクセス違反か何かで警告が出ました。


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

Name: Justy  ..伝説なるハッカー(510,898ポイント)   Date: 2010/03/18(木) 23:17   No:49411     
Title: Re:質問です    
>boost::any に入った文字列
 問題は anyに入った文字列の型です。
 何の型で入っていますか?
 どうやって代入しましたか?

>変えたらメモリのアクセス違反か何かで警告が出ました
 完全に情報が不足しています。
 何をどう変えたら、何のエラーが出たのですか?


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

Name: くりあ  ..初心者(7,129ポイント)   Date: 2010/03/19(金) 00:15   No:49420     
Title: Re:質問です    
char aaa[500]に入っている文字列を関数からreturnで戻して、
=で直接代入しました。


boost::any_cast<char>(aaa)
の、          ↑のchar部分を、const char *にしてみたりしました。
すると、0x7679fbae でハンドルされていない例外が発生しました。と、警告が出てきました。


この他に足りない情報はありますでしょうか?


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

Name: たかぎ [URL]  ..ハッカー(171,209ポイント)   Date: 2010/03/19(金) 00:31   No:49423     
Title: Re:質問です    
> char aaa[500]に入っている文字列を関数からreturnで戻して、 
> =で直接代入しました。 

予想通りのことが起きているような気がします。
いや、それ以上ですね。
この部分のコードを貼ってみてください。


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

Name: くりあ  ..初心者(7,320ポイント)   Date: 2010/03/19(金) 13:32   No:49439     
Title: Re:質問です    
char* tesuto(){

   aaa[500] = "";
   std::string deeta;

   std::ifstream ofs( "tesuto.txt" );

   getline(ofs,deeta);

   strcpy(aaa,deeta.c_str());

   return  a
}

main(){

  boost::any a;

  a = tesuto();

  FileRead_open(boost::any_cast<char *>(a)) ;
 ・
 ・
 ・
}




こんな感じになっってると思います。
すいません。元がぐちゃぐちゃしてるので抜き出してみたのですが、
どこか変になってるかもしれません。


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

Name: たかぎ [URL]  ..ハッカー(171,240ポイント)   Date: 2010/03/19(金) 14:09   No:49441     
Title: Re:質問です    
元の通りのものを貼ってもらわないと、どうしようもありません。


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

Name: くりあ  ..初心者(7,495ポイント)   Date: 2010/03/19(金) 16:29   No:49458     
Title: Re:質問です    
すいません。 return  a; じゃないですね。 return  aaa;ですね。
間違えました。やっていることは変わらないと思います。
あと、少し違っているとすれば、boost::anyが構造体になっているくらいだと思うのですが……
非常に勝手なのは分かっていますが、これで何とかならないでしょうか?
質問には出来る限りお答えしますので、何とか……本当にすいません。


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

Name: fatens  ..中級者(9,196ポイント)   Date: 2010/03/19(金) 17:05   No:49461     
Title: Re:質問です    
実際のコードを提示するのが解決への一番の近道だと思いますが……
とりあえず、以下のコードの問題点が分かりますか?

#include <stdio.h>

int *func(void)
{
    int a = 10;
    return &a;
}

int main(void)
{
    int *p = func();
    printf("%d", *p);
    return 0;
}


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

Name: たかぎ [URL]  ..ハッカー(171,282ポイント)   Date: 2010/03/19(金) 17:51   No:49462     
Title: Re:質問です    
結局は、以前に指摘したように...

ポインタが指している文字列はすでに生存期間を終えている。

ということです。


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

Name: くりあ  ..初心者(7,564ポイント)   Date: 2010/03/19(金) 21:27   No:49468     
Title: Re:質問です    
引数にポインタを渡して、そこに書き込むようにしたらいいのでしょうか?

通常はこのような場合どのように処理するのが一般的なのでしょうか?


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

Name: たかぎ [URL]  ..ハッカー(171,344ポイント)   Date: 2010/03/20(土) 00:17   No:49473     
Title: Re:質問です    
> 通常はこのような場合どのように処理するのが一般的なのでしょうか?

std::string型で返すのが普通です。
そして、boost::anyに代入するときも、std::string型のまま代入します。

ただ、tesuto関数に関して強い例外安全保障を目指すのであれば、std::auto_ptr<std::string>を返すとか、std::stringを参照やポインタで渡すなどの対策が必要になるかと思います。
tesutoの結果を常にboost::anyに代入するのであれば、最初からboost::anyで返す方がよいかもしれません。


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

Name: くりあ  ..初心者(7,632ポイント)   Date: 2010/03/20(土) 14:12   No:49485     
Title: Re:質問です    
何度もお答えいただきありがとうございます。
また質問で申し訳ありませんが、
return型クラスにする場合は、どのように宣言したらよいのでしょう?


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

Name: くりあ  ..初心者(7,650ポイント)   Date: 2010/03/20(土) 14:14   No:49486     
Title: Re:質問です    
fatensさんの回答に何もお答えしないで申し訳ありませんでした。
気が付かないうちに飛ばして読んでいてしまっていたようです。
本当に申し訳ありませんでした。


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

Name: softya [URL]  ..ハッカー(135,876ポイント)   Date: 2010/03/20(土) 15:51   No:49487     
Title: Re:質問です    
とりあえず混乱しているようですから整理して見ましょう。
まず、問題が再現するコンパクトなソースコードを作って添付してみてください。
コンパクトにする場合、元の構造体やクラス?関数?の構造はできるだけ残してください。

前回のお話でC++的に作っているとの事でしたが、
http://www.play21.jp/board/formz.cgi?action=res&resno=48823&page=&lognum=150&id=dixq&rln=48867
char *型などメモリスコープをC言語的に管理なければいけないデータ型を使ってC++的なstd::string型を使わない理由を伺ってよろしいですか? 編集済み


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

Name: fatens  ..中級者(9,301ポイント)   Date: 2010/03/20(土) 18:42   No:49499     
Title: Re:質問です    
>fatensさんの回答に何もお答えしないで申し訳ありませんでした。

いえ、とくに気にしてませんが、先のコードの問題点も把握しておくと良いとは思います。


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

Name: くりあ  ..初心者(8,088ポイント)   Date: 2010/03/21(日) 22:02   No:49521     
Title: Re:質問です    
softyaさんのいっているソースコードを作ってコンパイルしたら、リンクの時他のライブラリと競合しています。などとエラー大量に出てきてしまってもう分かりません。自分はいったい何をしたんでしょうか……

しかも、作っていたら明らかにおかしいところもりましたし。
もう自分が何したいのか分からなくなってきました。
頭が付いていけません。自分が今、何が分からないのか分かりません。

ここまで来て、申し訳ありませんが、質問を変える、というか、自分の聞きたいことを整理します。
本当にすいません。

関数の戻り値にstd::ifstreamで開いたファイルから読み込んだ文字列を指定して、その文字を構造体の中のboost::anyに代入したいのです。最終的にこの文字列をDXライブラリのFileRead_open()関数に渡したいのです。
なぜ、boost::anyかというと、これをプログラム内で使いまわしたいからです。あと、boost::anyの使い方の勉強も兼ねています。この場合、どのようにするのがいいでしょうか?

大まかな流れ的にはどのような処理になるのでしょうか?

ということを聞きたいです。
本当に申し訳ありません。


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

Name: softya [URL]  ..ハッカー(137,235ポイント)   Date: 2010/03/21(日) 22:16   No:49522     
Title: Re:質問です    
>関数の戻り値に std::ifstreamで開いたファイルから読み込んだ文字列を指定して、その文字を構造体の中のboost::anyに代入したいのです。最終的にこの文字列をDXライブラリのFileRead_open()関数に渡したいのです。
なぜ、boost::anyかというと、これをプログラム内で使いまわしたいからです。あと、boost::anyの使い方の勉強も兼ねています。この場合、どのようにするのがいいでしょうか? 

その説明だけだとstd::string型じゃなくて、boost::anyじゃないとダメない理由がわかりませんね。
たしか数値も代入するという所からboost::anyになったはずですが?

それと、関数の戻り値にchar *型を使う場合はローカル変数のスコープやメモリの動的確保をちゃんと理解していない使えないことを理解してください。今まで提示されたコートはfatensさんのサンプルコードが提示している問題を理解出来ないと直せませんよ。


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

Name: たかぎ [URL]  ..ハッカー(171,531ポイント)   Date: 2010/03/22(月) 00:27   No:49525     
Title: Re:質問です    
> 頭が付いていけません。自分が今、何が分からないのか分かりません。

本人が分からなければ、他人はもっとわかりませんし、ついてもいけません。
小手先のテクニックではなく、そもそも何をしたいのかをもう一度整理してください。


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

Name: くりあ  ..初心者(8,504ポイント)   Date: 2010/03/25(木) 00:42   No:49685     
Title: Re:質問です    
とりあえず、頭を冷やしてきてたつもりです。

>fatensさんのサンプルコードが提示している問題を理解出来ないと直せませんよ。

関数内で利用したint aのメモリ領域は、関数が終了すると自動的に解放されてしまうため、その領域のアドレスを返しても、指している場所にはもうデータは残っていないために、正常に動かないから間違っている。と解釈したのですが合っていますでしょうか?



>その説明だけだとstd::string型じゃなくて、boost::anyじゃないとダメない理由がわかりませんね。 
たしか数値も代入するという所からboost::anyになったはずですが? 

FileRead_open()だけでなく、他の部分でも使う予定でいます。その中には数値も入る場所があるのでboost::anyを使いたいのです。言葉が足りず、申し訳ありません。




>本人が分からなければ、他人はもっとわかりませんし、ついてもいけません。 
小手先のテクニックではなく、そもそも何をしたいのかをもう一度整理してください。

その通りですね。本当に申し訳あしません。自分では、イメージできているのと思ったのに、実際は全然出来ていなかったです。


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

Name: softya [URL]  ..ハッカー(138,384ポイント)   Date: 2010/03/25(木) 11:13   No:49698     
Title: Re:質問です    
>関数内で利用したint aのメモリ領域は、関数が終了すると自動的に解放されてしまうため、その領域のアドレスを返しても、指している場所にはもうデータは残っていないために、正常に動かないから間違っている。と解釈したのですが合っていますでしょうか?

あっています。
だったら別の方法があるはずですよね。

>FileRead_open()だけでなく、他の部分でも使う予定でいます。その中には数値も入る場所があるのでboost::anyを使いたいのです。言葉が足りず、申し訳ありません。

私だったら型は、ポリモーフィズムでクラスに隠蔽しますね。boost::any_cast<>とかも表面に出てこなくなるので、扱いやすくなると思いますよ。とりあえず必要な型は、std::string型とint型だけですかね。
そう言えば、データと名前がセットになっているとか言ってませんでした?


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

Name: たかぎ [URL]  ..ハッカー(172,024ポイント)   Date: 2010/03/25(木) 11:21   No:49699     
Title: Re:質問です    
以前の質問を前提にされても追跡しきれませんし、結局何がやりたいのかもよくわかりません。
疑問点を整理した上で、十分な情報を添えて再質問されることをお勧めします。


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

Name: くりあ  ..初心者(8,618ポイント)   Date: 2010/03/25(木) 22:20   No:49722 解決!     
Title: Re:質問です    
>疑問点を整理した上で、十分な情報を添えて再質問されることをお勧めします。

分かりました。グダグダと長くなってしまって申し訳ありませんでした。
自分の頭の中を整理して、もう一度質問し直すことにします。
ここまで答えてくださってありがとうございました。
そして、すいませんでした。次に質問するときは、よろしくお願いします。


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



Name: ぬっち  ..中級者(11,326ポイント)   Date: 2010/03/19(金) 23:16   No:49472       
Title: C++でのメンバ関数ポインタの扱い方について    
こんばんは。
今回は、C++でのメンバ関数のポインタについて困ったことがあったのでここで質問させていただきます。

C++でメンバ関数のポインタをメンバ変数に以下のように最初に代入しました。
namespace Foo
{
    class hoge
    {
        //...(略)
        bool ( hoge::*m_phogeFunc )();
    public:
        //...(略)
        bool hogeFunc();
        void start();
    };

    //コンストラクタ
    hoge::hoge()
    {
        m_phogeFunc = &hoge::hogeFunc;
    }

    void hoge::start()
    {
        loop( m_phogeFunc )
    }
}

また、startという関数でグローバルスコープの関数ポインタを引数に取るloopという関数を呼び出すことにします。
すると、loopの引数をFoo::hoge::*から*に変換できませんと出てコンパイルエラーとなります。

スコープの違いで出るエラーだと思うのですが・・・。
これを解決する手段はないのでしょうか?


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


Name: たかぎ [URL]  ..ハッカー(171,460ポイント)   Date: 2010/03/20(土) 00:22   No:49474     
Title: Re:C++でのメンバ関数ポインタの扱い方について    
> スコープの違いで出るエラーだと思うのですが・・・。 

違います。
loop関数の仕様が不明なので正確なことはいえませんが、非静的メンバ関数へのポインタと通常の関数へのポインタの間には互換性がありません。
暗黙的にthisに相当する情報を渡す/渡さないの違いだけを考えても、そのあたりは理解できるはずです。


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

Name: ぬっち  ..中級者(11,412ポイント)   Date: 2010/03/20(土) 08:38   No:49482     
Title: Re:C++でのメンバ関数ポインタの扱い方について    
返信ありがとうございます。

>非静的メンバ関数へのポインタと通常の関数へのポインタの間には互換性がありません。 
なるほど、つまりオブジェクトの実体が存在するかがわからないので問題があり、staticにすることによって、プログラム開始時に実体が生成されるため問題が起こらないということでしょうか?

そうなると、やはり無理そうですね。


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

Name: たいちう  ..熟練のプログラマー(60,393ポイント)   Date: 2010/03/20(土) 09:04   No:49483     
Title: Re:C++でのメンバ関数ポインタの扱い方について    
> そうなると、やはり無理そうですね。

何をしたいのかが私には伝わってこないので、
無理かどうか判断できません。

背景等も含め、やりたいことを整理して説明してみませんか。


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

Name: ぬっち  ..中級者(11,663ポイント)   Date: 2010/03/20(土) 19:15   No:49501     
Title: Re:C++でのメンバ関数ポインタの扱い方について    
返信ありがとうございます。

実は自作のDirectXのライブラリの中でloopという関数があり、その関数に関数ポインタを渡すことにより、渡した関数ポインタの関数がメインループとして使われるという仕様になっています。
例:
loop( draw );
この時はdraw関数がメインループとして使用されます。
つまり、draw関数内に記述したものがループする仕組みになっています。

この自作のDirectXのライブラリは基本的にC言語だけの知識で使えるということを目標にしていました。(つまり、DXライブラリのような感じです。)
そのため、C++で使われることを前提に作成していませんでした。
そして今回クラスのメソッド内にある起動関数で、同じクラスにある描画関数のポインタを先ほどの関数loopに渡して呼び出すことにしようと思ってたらエラーが出たわけです。

最終的にはC++用のライブラリを作成しようと思っているのですが、C用に作ったライブラリで今回は作成して見ようと考えたわけです。
最悪の場合、メインループ処理の部分をクラス化しないでプログラムを書こうと思っています。


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

Name: たいちう  ..熟練のプログラマー(60,606ポイント)   Date: 2010/03/23(火) 13:35   No:49569     
Title: Re:C++でのメンバ関数ポインタの扱い方について    
時間が空いてしまったので、もう見てないかもしれませんが、
このような事がしたかったのでしょうか?
#include <iostream>

typedef void (*PFUNC)();

void loop(PFUNC f) {
    for (int i = 0; i < 5; i++)
        f();
}

class hoge {
    static void draw() {
        std::cout << "hoge::draw!" << std::endl;
    }
    PFUNC func_;
public:
    hoge() {
        func_ = draw;
    }
    void start() {
        loop(func_);
    }
};

int main() {
    hoge h;
    h.start();

    return 0;
}


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

Name: ぬっち  ..中級者(11,685ポイント)   Date: 2010/03/25(木) 20:37   No:49718 解決!     
Title: Re:C++でのメンバ関数ポインタの扱い方について    
返答ありがとうございます。

まさにたいちうさんがおっしゃったことをしたかったのです。
やはりdraw関数はstaticにする必要があるみたいですね。

あの後loop部分を完全に書き換え、関数ポインタを使わずにC言語だけでのライブラリを作成することに成功しまして、問題となっていたクラスを使っての方法も実現することができました。

いろいろ勉強になりました。ありがとうとうございます。
今後もよろしくお願いします^^


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



Name: K.MURAKAMI  ..ぴよぴよ(162ポイント)   Date: 2010/03/24(水) 11:31   No:49624       
Title: 感想ください!!    
DXライブラリではじめてゲームを作りました。
C言語でプログラミングしたことはあったのですが、
ゲームを作ったのははじめてです。
で、この前はじめてゲームを作ったので感想をください。
ダウンロードリンクは下です。
http://www.megaupload.com/?d=5B1K98OB
プログラムを見ればわかると思いますが、
裏コマンドも作って見ました。
ぜひ遊んでください。
あと、飽きたらフォルダごと消しちゃってください。


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


Name: Tororo  ..初心者(5,411ポイント)   Date: 2010/03/24(水) 12:08   No:49628     
Title: Re:感想ください!!    
116匹でした。
いまいちやり方がわからないです。
せめてRead meに操作方法を書いてほしいです。
後、ところどころ重いです。
以上です。


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

Name: K.MURAKAMI  ..ぴよぴよ(518ポイント)   Date: 2010/03/24(水) 12:13   No:49630     
Title: Re:感想ください!!    
>     116匹でした。
> いまいちやり方がわからないです。
> せめてRead meに操作方法を書いてほしいです。
> 後、ところどころ重いです。
> 以上です。

回答ありがとうございます!!
やり方をRead Meにも詳しく書いてみようと思います。

> 後、ところどころ重いです。

これを解決するには、どうすればいいのでしょうか?
プログラムのコード数を短くすれば、軽くなるでしょうか?


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

Name: Tororo  ..初心者(5,468ポイント)   Date: 2010/03/24(水) 12:42   No:49632     
Title: Re:感想ください!!    
自分のところで、コードは変換できなかったので
見ていません^^;

スタートメニューでエンターを押したら、一時的にとまります。
最後の終わったところで停止します。


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

Name: K.MURAKAMI  ..ぴよぴよ(527ポイント)   Date: 2010/03/24(水) 13:00   No:49633     
Title: Re:感想ください!!    
> スタートメニューでエンターを押したら、一時的にとまります。
> 最後の終わったところで停止します。

僕も自分でプレイするとそうなります。
何ででしょうかね?

音楽とか画像とか大量に読み込んでると、
結果的にそうなっちゃうんですかね?


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

Name: kazuoni [URL]  ..ハッカー(140,902ポイント)   Date: 2010/03/24(水) 13:17   No:49635     
Title: Re:感想ください!!    
遊ばせてもらいました。
ゲーム性に多少工夫が必要かなと思いました。
モグラが出現し射的した後でも、
もう一度打ててしまい、ポイントになってしまいます。
はっきり言えば、テンキ―全押ししていれば500点は簡単に取れてしまいます。
一度打たれた敵はすぐ引っ込める方がいいかなと思います。
ボーナス敵として、連射可能な敵がいても面白いと思いますが。
あと、打ってはいけない敵を出現させて、打ってしまったら減点とか。

コードの書きかたですが、じっくり見ていないのでわかりませんが、
関数moguraでは、毎ループLoad系関数を使用する可能性はありませんか?
もしそうならば、これはまずいです。
ロードしっぱなしなので、無駄なメモリをどんどん食っていきます。
Load系は一回と統一するようにしましょう。
また、関数ごとに
while( !ProcessMessage() && ... ){ ... ScreenFlip(); }
は書かなくて済むようにした方が管理しやすいかと思います。
この辺りは管理人さんのサンプルを参考にしてみると、
流れがつかみやすいかと思います。


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

Name: K.MURAKAMI  ..かけだし(1,184ポイント)   Date: 2010/03/24(水) 13:57   No:49640     
Title: Re:感想ください!!    
感想ありがとうございます。

> 遊ばせてもらいました。
> ゲーム性に多少工夫が必要かなと思いました。
> モグラが出現し射的した後でも、
> もう一度打ててしまい、ポイントになってしまいます。
> はっきり言えば、テンキ―全押ししていれば500点は簡単に取れてしまいます。
> 一度打たれた敵はすぐ引っ込める方がいいかなと思います。

一応このゲームは、もぐら叩きと連打の要素をあわせて作ったつもりなんです…(苦笑)。

> ボーナス敵として、連射可能な敵がいても面白いと思いますが。
> あと、打ってはいけない敵を出現させて、打ってしまったら減点とか。

コレはいいですね。
ぜひ入れてみようと思います。

> 関数moguraでは、毎ループLoad系関数を使用する可能性はありませんか?
> もしそうならば、これはまずいです。
> ロードしっぱなしなので、無駄なメモリをどんどん食っていきます。
> Load系は一回と統一するようにしましょう。 

そうなんですか。
無駄にメモリを消費するなんて知りませんでした。
コレを改善したら、軽くなるかもしれませんね。

> while( !ProcessMessage() && ... ){ ... ScreenFlip(); }
> は書かなくて済むようにした方が管理しやすいかと思います。
> この辺りは管理人さんのサンプルを参考にしてみると、
> 流れがつかみやすいかと思います。

そうですよね。
自分でも見難かったです。
この辺はまだ未熟ですから、どんどん改善しようと思います。


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

Name: ideyan  ..入門者(2,946ポイント)   Date: 2010/03/24(水) 14:55   No:49643     
Title: Re:感想ください!!    
遊んでみました。
コード読むまでゲーム開始方法がわからなかった^^;

> スタートメニューでエンターを押したら、一時的にとまります。 
PlaySoundMem(sound3 , DX_PLAYTYPE_NORMAL );
sound3にロードされている9.datは最後1秒ぐらい無音みたいなので
それが原因でとまってるように見えるんじゃないでしょうか?

> 最後の終わったところで停止します。
最後の終わったところというのがどこかよくわからないのですが 
WaitTimer(5000);
が関数Endの最後に入っています。

後、kazuoniさんがループ毎にLoadしている可能性を
指摘してくれてるのでコードを見てみましたが、ロードしちゃってますね^^;
タスクマネージャを起動しながらやると
メモリをガリガリと食っていくのがわかります。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,160,595ポイント)   Date: 2010/03/24(水) 18:54   No:49656     
Title: Re:感想ください!!    
遊んでみました。
久しぶりに指がつりそうになりました^^;

コードは見ていませんが、気になった点を。

まず、@0秒になった瞬間ノンアクティブにすると、画像のようにマイナスになり、減り続けます。
また、テンキー無茶苦茶連打すると999になってしまうのはゲーム的にはもうちょっと改善の余地がありそうですね。
kazuoniさんが仰るように一度出た敵はカウントしないようにした方が良いと思います。

後、メモリ使用量が1.8Gとかになってますね^^;
画像のロードは一度だけで良いですよ。

ではゲーム制作頑張ってください☆


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

Name: K.MURAKAMI  ..かけだし(1,290ポイント)   Date: 2010/03/25(木) 12:38   No:49702     
Title: Re:感想ください!!    
皆さんご感想ありがとうございます。
いろんなバグがあって、まだまだ改善が必要ですね。
自分の未熟さが、思い知らされました…。
自分で言うのもなんですけど、これからもゲーム作成がんばりますので、
応援よろしくお願いします。


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

Name: K.MURAKAMI  ..かけだし(1,303ポイント)   Date: 2010/03/25(木) 12:40   No:49704 解決!     
Title: Re:感想ください!!    
もう解決したんで、閉鎖します。

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



Name: ★たじちゃん(@u@)ノ★  ..ぴよぴよ(19ポイント)   Date: 2010/03/24(水) 09:48   No:49618       
Title: 四聖龍神録Plus    
四聖龍神録PlusをPSPgoバージョン6.20に移植出来ませんか?



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


Name: たかぎ [URL]  ..ハッカー(172,149ポイント)   Date: 2010/03/24(水) 23:55   No:49676     
Title: Re:四聖龍神録Plus    
できるかどうかでいえば、できるでしょう。


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

Name: softya [URL]  ..ハッカー(137,916ポイント)   Date: 2010/03/25(木) 00:02   No:49678     
Title: Re:四聖龍神録Plus    
管理人さんによると四聖龍神録Plusのソースコードは失われているとの事ですので、★たじちゃん(@u@)ノ★さんが見た目移植するって事なら行けるんじゃないですか。


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

Name: sizuma [URL]  ..プログラマー(37,667ポイント)   Date: 2010/03/25(木) 00:03   No:49679     
Title: Re:四聖龍神録Plus    
PSPgoについては知りませんが、簡単に移植はできないと思いますよ。
専門的な知識がないのであれば、PSPで動かすためのエミュレータを誰かが作ってくれるまでは出来ないでしょう。
パソコンとPSPではハードウェアの構造が違うので。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,161,849ポイント)   Date: 2010/03/25(木) 00:07   No:49681     
Title: Re:四聖龍神録Plus    
レス遅れました^^;

私がするかどうかと言うことでしたら申し訳ないですけど、しません。
でもDXライブラリポータブルなどで可能なようです。
いくつかニコニコに龍神録のプログラムを参考にしたと書いてある動画がアップされています。

http://www.nicovideo.jp/watch/sm6620783

http://www.nicovideo.jp/watch/sm8262244

http://www.nicovideo.jp/watch/sm5640183


> softyaさん

泣きながら少しずつ直していき先日やっと元に戻せました・・^^;
最終リリースから数か月前のバックアップならあったので、
気長に直そうと思っていて、先日やっと直りました。
でもあちこちバグがあるので、ベクターになかなか登録できません・・。


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

Name: softya [URL]  ..ハッカー(138,031ポイント)   Date: 2010/03/25(木) 00:15   No:49682     
Title: Re:四聖龍神録Plus    
>泣きながら少しずつ直していき先日やっと元に戻せました・・^^; 

うわっ、私はやりたくないですね(汗)
たぶん、やったとしてもZEROから作りなおすでしょう。
私はソース消失は怖いので、別ドライブにsubversionで世代管理しつつNASで更にレポジトリとソース本体を毎日バックアップをしています。 編集済み


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,162,021ポイント)   Date: 2010/03/25(木) 00:26   No:49684     
Title: Re:四聖龍神録Plus    
やっぱそうですよね〜。
私もLinux側にはSubversion入れてるんですが、windowsには入れてなくて・・・てかwindowsでもSubversion使える事自体最近知りました^^;

次から気をつけますw

龍神録の修復したバージョンはダウンロードボタンの下に小さくzipでリンク貼ってるんですが、
そういえばコンフィグの実行ファイルも作り直しか・・と意気消沈している今日この頃です^^;
(コンフィグがwindows7で動かないという報告あり)


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



Name: kazuoni [URL]  ..ハッカー(140,716ポイント)   Date: 2010/03/24(水) 11:17   No:49621       
Title: gccでのtemplateとfriend    
お邪魔します。

自分は常にVC 9.0でコンパイルしていて、以下のクラスはコンパイルできていました。

template< typename T >
class Template{
typedef Template<T> super_type;
...
};

class A : public Template<A>{
friend super_type;
...
};


しかし、gccでは以下のエラーではじかれます。

1>error: a class-key must be used when declaring a friend
1>error: friend declaration does not name a class or function
...

いろいろなサイトを見た結果、次のような解決策がありました。が、すべてダメでした。

1.    friend class super_type;
結果  1>error: using typedef-name 'Template<A>::super_type' after 'class'

2.    friend class Template<A>::super_type;
結果  1>error: using typedef-name 'Template<A>::super_type' after 'class'

gccのバージョンは3.4.4、4.3.0どちらもダメでした。

解決するにはどうしたらよいでしょうか?
よろしくお願いします。


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


Name: たかぎ [URL]  ..ハッカー(171,594ポイント)   Date: 2010/03/24(水) 11:46   No:49625     
Title: Re:gccでのtemplateとfriend    
super_typeはprivateなので、VC++でもコンパイルできないはずです。
正確なソースを貼ってください。


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

Name: kazuoni [URL]  ..ハッカー(140,746ポイント)   Date: 2010/03/24(水) 12:01   No:49627     
Title: Re:gccでのtemplateとfriend    
とても大切な事を記述していませんでした。
super_typeはprotectedです。

一応、ソースをあげておきます。

#追記
あげたコードはtypenameとか使ってますが、
あがいた結果ですので気にしないでください^^; 編集済み


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

Name: YuO  ..熟練のプログラマー(43,079ポイント)   Date: 2010/03/24(水) 15:21   No:49646     
Title: Re:gccでのtemplateとfriend    
規格の11.4 Friendsに,
> An elaborated-type-specifier shall be used in a friend declaration for a class
とあります。ちなみに,elaborated-type-specifierは以下のようになります。
elaborated-type-specifier:
  class-key '::'(opt) nested-name-specifieropt identifier
  class-key '::'(opt) nested-name-specifier(opt) template(opt) template-id
  'enum' '::'(opt) nested-name-specifier(opt) identifier
  typename '::'(opt) nested-name-specifier identifier
  typename '::'(opt) nested-name-specifier template(opt) template-id
# 非装飾の文字は原文斜体,''で括られた文字は原文では非装飾,(opt)は原文ではoptが下付き。

さらに,7.1.5.3 Elaborated type specifiersには
> If the identifier resolves to a typedef name or a template type-parameter, the elaborated-type-specifier is ill-formed.
とあり,friendにはtypedef名は使えないことになります。

このため,typedef名はあきらめ,Template<A>をfriendにした方がよいでしょう。
# というか,色々面倒なのでfriendを使わなくて済むようにするとか……。


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

Name: kazuoni [URL]  ..ハッカー(141,077ポイント)   Date: 2010/03/24(水) 17:38   No:49654 解決!     
Title: Re:gccでのtemplateとfriend    
ご指摘いただいたように、typedefを用いなければ、うまくいきました。
新しいものばかり使っているので、この辺りは全く分かりませんでした。
規格は読まないといけませんね。。(英語嫌いの自分には敷居はかなり高いですが・・・)

> #というか,色々面倒なのでfriendを使わなくて済むようにするとか……。 
正直、テンプレートを使わなくて済むようにするのが最善なのかもしれません。。

自分の問題は解決したので、これで解決とさせていただきます。
ご回答していただきありがとうございました。

次回もよろしくお願いします。 編集済み


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

Name: たかぎ [URL]  ..ハッカー(171,685ポイント)   Date: 2010/03/24(水) 22:35   No:49659     
Title: Re:gccでのtemplateとfriend    
外回りしている間に解決したようですが...

いっそのこと、

template <class T>
class TemplateForSingleton : public T
{
  ...
};

class A
{
  ...
};

typedef TemplateForSingleton<A> SingletonA;

のようにすると、うまくいく場合があります。


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



Name:  ..かけだし(1,118ポイント)   Date: 2010/03/23(火) 16:03   No:49581       
Title: スクロールゲームについて    
こんにちは。鴨と申します。C言語歴2年です。(1年:独学、もう1年:学校にて)

私は今、マリオみたいな横スクロールゲームを制作中でプログラム例を参考にしながらも「歩きながらジャンプさせる」ことに成功(@)し、次に地形を追加しようと考えています。

しかし、どうしても「ジャンプして目の前の壁を飛び越える」事が出来ません。プログラムを作ると、どうしても空中で静止してしまいます。そもそも背景を一次元か二次元のどちらにすればよいかも分かりません。

@のプログラムは以下の通りです。これにどんなことを付け足したら上手く「ジャンプして目の前の壁を飛び越える」事が出来るでしょうか。よろしくお願いします。(見づらくて申し訳ありません。。)


#include "DxLib.h"
#include <math.h>
 
#define g 9.8067
#define y_max 0.500
 
typedef struct{
    int x,y,img,muki,walking_flag;
}ch_t;
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        
    int image[16],y,time1,time2,flag=0;
    char Key[256];
    double t;                                    

    ch_t ch;
 

  if(ChangeWindowMode(TRUE)!=DX_CHANGESCREEN_OK||DxLib_Init()==-1)return -1;//ウィンドウ化と初期化処理
 
    ch.x  =0;
    ch.walking_flag=0;
    ch.muki=3;

    SetDrawScreen( DX_SCREEN_BACK );//描画先を裏画面に設定
    LoadDivGraph( "char.png" , 16 , 4 , 4 , 32 , 32 , image );//画像を分割してimage配列に保存

  while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){

    if(ch.x%32==0){         //座標がで割り切れたら入力可能
      ch.walking_flag=1;         //歩くフラグを立てる。
      if   ( Key[ KEY_INPUT_LEFT ]  == 1 )  //左ボタンが押されたら
          ch.muki=1;         //左向きフラグを立てる
      else if ( Key[ KEY_INPUT_RIGHT]  == 1 )  //右ボタンが押されたら
          ch.muki=3;         //右向きフラグを立てる
      else                                    //何のボタンも押されてなかったら
          ch.walking_flag=0; //歩かないフラグを立てる
    }
 
    if(ch.walking_flag==1){        //歩くフラグが立っていたら
      if(ch.muki==1)        //左向きならch.x座標を減らす
        ch.x = ch.x - 2;
    else if (ch.muki==3)        //右向きならch.x座標を増やす
        ch.x = ch.x + 2;
    }
 
    ch.img=image[ch.x%32/8 + ch.muki*4];            //画像をセット
 
    DrawGraph( ch.x , 32*10 , ch.img , TRUE ) ;//画像を描画
 
    if( Key[ KEY_INPUT_RETURN ]  == 1 ){ //エンターが押されたら
      time1 = GetNowCount();//time1にエンターが押された時の時間を格納
      flag=1;                          //飛び上がりフラグを立てる。
    }
    if(flag==1){
      ClearDrawScreen();                         // 画面をクリア 
      time2 = GetNowCount() ;                  // 現在経過時間を得る
      t = (double)(time2 - time1) / 1000.000;  // ミリ秒を秒に変換して、エンターが押されてからの経過時間を計算
      y = (int)((sqrt(2.000*g*y_max)*t-0.500*g*t*t)*160.000/y_max);//y座標を計算
       if(y>=0)
        DrawGraph( ch.x , 32*10-y , ch.img , TRUE );// 画像を描画
       else
        flag=0;                              // 飛び上がりフラグを戻す
                            
      }
            
   ScreenFlip();//裏画面を表画面に反映

  }
 
  DxLib_End();
  return 0;
}



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


Name:  ..かけだし(1,157ポイント)   Date: 2010/03/23(火) 16:26   No:49585     
Title: Re:スクロールゲームについて    
すいません、書き忘れです。

私が使っているのは「Microsoft Visual C++ 2008 Express Edition」です。


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

Name: wint  ..ぴよぴよ(181ポイント)   Date: 2010/03/24(水) 12:09   No:49629     
Title: Re:スクロールゲームについて    
元にしているサンプルはたぶんRPG用だと思われます。
if(ch.x%32==0){  //座標がで割り切れたら入力可能
という条件があると32単位でしかキャラが動きません。
それを直すと、すべてを書き換えなければなりません。
また、ジャンプももっとシンプルでいいと思います。

本家の「DXライブラリ置き場」に求めるようなサンプルがあります。

私もそれを元に作りました。
がんばってくださいね。


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

Name: wing  ..初心者(6,713ポイント)   Date: 2010/03/24(水) 12:33   No:49631     
Title: Re:スクロールゲームについて    
自分の名前、間違えました。
wingです。失礼しました。


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

Name:  ..かけだし(1,189ポイント)   Date: 2010/03/24(水) 19:21   No:49657 解決!     
Title: Re:スクロールゲームについて    
wingさん、ありがとうございます。
完成しましたらまた報告させてもらいます。
頑張ります。


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



Name: pon  ..ぴよぴよ(112ポイント)   Date: 2010/03/22(月) 23:35   No:49542       
Title: 初心者です。    
このprogramming(C言語)の間違いを指摘してください。お願いします。

http://www1.axfc.net/uploader/Sc/so/95276.c

このprogramは情報オリンピック2009-2010の予選4
(http://www.ioi-jp.org/joi/2009/2010-yo-prob_and_sol/2010-yo-t4/2010...を解こうと作ったのですが、全く正常に動きません。
Errorログを見て、自分で分かる限り書き変えたのですが、これ以上分からないので、よろしくお願いします。


自分がやりたいこととしては、くっつけてできるすべての数を配列にいれて、配列をあとで昇順に並べて同じのを省いて個数を数えるということをしたいのですが
まだ、配列を昇順に並べて〜は実装していません。


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


Name: softya [URL]  ..ハッカー(137,644ポイント)   Date: 2010/03/23(火) 09:03   No:49554     
Title: Re:初心者です。    
マルチポストですよね?
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1138396526
ここの規約を見直してみてください。


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

Name: pon  ..ぴよぴよ(137ポイント)   Date: 2010/03/23(火) 10:12   No:49556     
Title: Re:初心者です。    
すいません。マルチポストです、と明記するのを忘れていました…

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

Name: softya [URL]  ..ハッカー(137,605ポイント)   Date: 2010/03/23(火) 10:18   No:49557     
Title: Re:初心者です。    
規約に書いてあると思いますが、こちらだけでなく知恵袋にも明記してください。


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

Name: pon  ..ぴよぴよ(161ポイント)   Date: 2010/03/23(火) 11:16   No:49561     
Title: Re:初心者です。    
知恵袋にマルチの件補足させていただきました

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

Name: softya [URL]  ..ハッカー(137,784ポイント)   Date: 2010/03/23(火) 11:33   No:49563     
Title: Re:初心者です。    
まず、問題のリンクが参照出来ませんのでちゃんとリンクをお願いします。
問題文が分からないで何をしたいか分かりません。

それと、ぱっと見た限りは、文字と文字列の区別が出来ていません。どのぐらいC言語で勉強したか教えてください。現状、この問題を解くにはC言語の経験不足としか思えません。

下記のサイトの14章の文字列を扱う方法を読んでください。
http://homepage3.nifty.com/mmgames/c_guide/
14章の練習問題は簡単に解けますか? 編集済み


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

Name: pon  ..ぴよぴよ(230ポイント)   Date: 2010/03/23(火) 13:22   No:49567     
Title: Re:初心者です。    
http://www.ioi-jp.org/joi/2009/2010-yo-prob_and_sol/2010-yo-t4/2010-yo-t4.html
すいません。コレです

strcatではなく、sprintfを使えば良いのでしょうか?
sprintfを使えばあらかじめk*k!個の予備を作る必要がなさそうですが


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

Name: pon  ..ぴよぴよ(287ポイント)   Date: 2010/03/23(火) 13:47   No:49570     
Title: Re:初心者です。    
http://www1.axfc.net/uploader/Sc/so/95478.c
上のlinkを読んで作った改訂版です。
何がいけないのでしょうか


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

Name: たいちう  ..熟練のプログラマー(60,641ポイント)   Date: 2010/03/23(火) 13:55   No:49571     
Title: Re:初心者です。    
予選とはいえナントカオリンピックの問題なので初心者には難しいでしょう。
いきなり完璧なものを作ろうとしないで、まずは(n, k) = (4, 2)の場合専用の
プログラムを作ってはいかがでしょうか。

# 面白い問題を紹介してくれてありがとうございます。


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

Name: たいちう  ..熟練のプログラマー(60,718ポイント)   Date: 2010/03/23(火) 14:08   No:49572     
Title: Re:初心者です。    
scanf("%d",n);

scanf("%d",&n);

sprintf(answer[e],"%s%s%s%s",a,b,c,d);

sprintf(answer[e],"%d%d%d%d",card[a],card[b],card[c],card[d]);

試してませんが、この類の間違いを直せば、正しい答えにずいぶん近づくと思います。
それとソートがデタラメ。


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

Name: dic  ..熟練のプログラマー(57,896ポイント)   Date: 2010/03/23(火) 14:34   No:49577     
Title: Re:初心者です。    
VC++6 ではコンパイルできませんがC
Cだとできるのかな?・・・


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

Name: softya [URL]  ..ハッカー(138,014ポイント)   Date: 2010/03/23(火) 15:13   No:49578     
Title: Re:初心者です。    
間違っているところ。
(1)コンパイルエラー
for文の対応が間違ってます。

(2)ローカル変数が巨大すぎる。
char answer[10000][10000];

(3)値受け取り時の書き方が間違い。
scanf("%d",&n);
scanf("%d",&k);

(4)値受け取り時の書き方が間違い。
char card[15];
scanf("%s",&card[i]);
cardは15個の文字を受け取る配列であって、15個の文字列を受け取る配列ではありません。

(5)sprintfの使い方の間違い。
sprintf(answer[e],"%s%s",a,b);
 ↓
sprintf(answer[e],"%s%s",card[a],card[b]);

(6)カード4毎の時に同じカードが出ないガードが無い。

(7)ソート?している理由が分からない。
同じ数値を排除するのが目的ですよね?
まず、文字列はstrcmpで同じかどうか比較してください。
アルゴリズムとしては、自分より後に同じ数値が出てこない数値をカウントすれば個数を求めることが出来ると思います。


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

Name: たいちう  ..熟練のプログラマー(60,796ポイント)   Date: 2010/03/23(火) 15:38   No:49580     
Title: Re:初心者です。    
入力部分以外のプログラムは作ったけど、
一枚のcardはcharやcharの配列ではなく、
1つの整数で表す方が簡単だと思うな。
行き詰ったら試してみてください。


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

Name: pon  ..ぴよぴよ(433ポイント)   Date: 2010/03/23(火) 18:02   No:49591     
Title: Re:初心者です。    
みなさんありがとうございます。
配列を先に並び替えることで配列の次の番号のと等しいかを比べていくだけで良いので手数が減るかなと思ったのと等しいのは数えず異なるのだけ数えるのが大変に思えたのですが
まず、配列の比較する方法は配列の1から比較する、で良いですか?

forの間違いとは何ですか?

配列の数が大きいのはあとでなおすよていですが、エラーを取り除こうと思っていたので。ご指摘ありがとうございます。
このプログラムにおけるcharとintの違いは何ですか?


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

Name: pon  ..ぴよぴよ(509ポイント)   Date: 2010/03/23(火) 18:51   No:49593     
Title: Re:初心者です。    
http://www1.axfc.net/uploader/Sc/so/95551.c

一応コンパイルできるようになりましたが、かなり遅いです。
どうすれば効率の良いプログラムになるでしょうか


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

Name: たいちう  ..熟練のプログラマー(60,999ポイント)   Date: 2010/03/23(火) 20:29   No:49594     
Title: Re:初心者です。    
> forの間違いとは何ですか?

"2010/03/23(火) 13:47"のリンク先のプログラムはコンパイルが通りませんでしたので、
そのことでしょう。


> このプログラムにおけるcharと intの違いは何ですか?

元のプログラムでは、1つのカードをchar型の変数で表すつもりなのか、
char型の配列、つまり文字列で表すつもりなのか、不明でした。
(どっちとみなしても間違いがありました)
そのため文字列で扱うよりも整数で扱った方が楽だよ、という意味でした。


> 一応コンパイルできるようになりましたが、かなり遅いです。
> どうすれば効率の良いプログラムになるでしょうか

効率の話の前に確認ですが、コンパイルが通っただけですか?
正しい答えが出せるようになったのですか?
原則として、効率の事を考える前に正しく動くプログラムを作る必要があります。


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

Name: pon  ..ぴよぴよ(515ポイント)   Date: 2010/03/23(火) 20:37   No:49595     
Title: Re:初心者です。    
コンパイルは通りました。プログラムが全然終了しないので、もう少し効率の良いプログラムにしないといけないのかと。

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

Name: たいちう  ..熟練のプログラマー(61,001ポイント)   Date: 2010/03/23(火) 20:41   No:49596     
Title: Re:初心者です。    
> コンパイルは通りました。プログラムが全然終了しないので、
> もう少し効率の良いプログラムにしないといけないのかと。

効率が悪いから終了しないのですか?
正しいプログラムではないから終了しないのではないですか?
どうやって確認します?


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

Name: pon  ..ぴよぴよ(568ポイント)   Date: 2010/03/23(火) 20:52   No:49597     
Title: Re:初心者です。    
確認の仕方は全く分かりませんが、最後のprintf〜を除いても終了しませんでした
ループ関数が無限ループしているところはなさそうなのですが 


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

Name: たいちう  ..熟練のプログラマー(61,017ポイント)   Date: 2010/03/23(火) 22:01   No:49601     
Title: Re:初心者です。    
↓こんなのがありましたが。

for(b=a+1;b<e;a++)


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

Name: GannRock  ..ぴよぴよ(137ポイント)   Date: 2010/03/23(火) 22:44   No:49605     
Title: Re:初心者です。    
最新のtest.cを入手致しました。

まず、基本的な問題としてコードが醜いです。
main()内に全て実装しているし、
コメントも無いので解読が困難です。

関数化し、適宜コメントを付けてください。

配列境界を超えている個所があります。

106行目の

for(b=a+1;b<e;a++)
でbの代わりに誤ってaをインクリメントしている為

110行目の
if(answer[a][c] != answer[b][c])

が不正な所をアクセスします。

この種のバグを素早く検出する為に
assertを使って境界チェックすべきです
http://www.geocities.jp/ky_webid/c/059.html

例えば
110行の前に

assert(a < 6000 && b < 6000 && c < 10);

と入れておくのです。
すると条件が成立していないとプログラムが停止し
行番号も表示されます。

これを配列アクセスの随所に入れておきます。
これだけで随分デバッグ効率上がります。

ヘッダとして
<assert.h>
をインクルードしてください。

動作確認ができたら
NDEBUGマクロを定義すると
assertは空になり、無害となります。


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

Name: pon  ..ぴよぴよ(657ポイント)   Date: 2010/03/23(火) 22:56   No:49606     
Title: Re:初心者です。    
すべてmain関数に入れない方法が分からないうえに、自分のレベルだとすべてmain関数に入れて問題が発生しないので・・・すいません。

あと110行目の何がいけないのか教えていただけませんか?
配列の10番目までないものが存在するということでしょうか


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

Name: GannRock  ..ぴよぴよ(330ポイント)   Date: 2010/03/23(火) 23:16   No:49608     
Title: Re:初心者です。    
110行目に問題はありません。

106行目の
for(b=a+1;b<e;a++) 
が原因で
110行目実行時に
とんでもない場所をアクセスするということです。

106行目を修正する必要があります。

>すべてmain関数に入れない方法が分からないうえに

かなり無謀だと思います。
「急がば回れ」と言うこともあります。

関数を作ったり
コメントをいれたり
assert()を入れたり

これらは、時間もかかるし、
一見無駄な様に思えます。

確かに「大天才」であれば不要かも知れません。

私も含め、凡人は必ず過ちを犯すので
予防線を張っておくのです。

そうしないと、この様にデバックで大騒ぎするのです。


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

Name: box  ..ハッカー(151,276ポイント)   Date: 2010/03/23(火) 23:19   No:49609     
Title: Re:初心者です。    
>for(b=a+1;b<e;a++) 

bの初期値をa+1とします。
bがeより小さい間、何かの処理を繰り返します。
何かの処理が終わって、繰り返しをする前に、「a」をインクリメントします。→本当に正しいですか?

という、ご指摘が寄せられているのです。
 編集済み


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

Name: GannRock  ..ぴよぴよ(595ポイント)   Date: 2010/03/24(水) 07:56   No:49615     
Title: Re:初心者です。    
106行目
for(b=a+1;b<e;a++)  


ほぼ確実に

for(b=a+1;b<e;b++)  

の誤りです。

修正前のループでは
bは一切変化せずにaがどんどん増加します。
つまり
b < eは成立せずに無限ループとなってしまいます。
一方でaはどんどん増加するので
いつかはaが6000以上になります。

そのタイミングで
110行目の 
if(answer[a][c] != answer[b][c]) 
を実行すると

answer[a][c]はchar answer[6000][10];
の外をアクセスしています。

どうなるか保証はありません。


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

Name: たいちう  ..熟練のプログラマー(61,145ポイント)   Date: 2010/03/24(水) 09:07   No:49616     
Title: Re:初心者です。    
最後にUpされているプログラムをデバッグしてみましたが、
完成はそれほど先の事ではないですよ。
細かい点を3箇所ほど直せば、重複ありでなら表示ができます。
まず、ここまでやってしまいましょう。

その後、重複を数えないようにするために一工夫したら完成です。

更にその後で元気があるならば、プログラムを改善しましょう。


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

Name: pon  ..ぴよぴよ(689ポイント)   Date: 2010/03/24(水) 11:20   No:49622     
Title: Re:初心者です。    
コンパイルもでき、実行もできたのですが、結果が負になってしまいました…



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

Name: fatens  ..中級者(10,092ポイント)   Date: 2010/03/24(水) 11:48   No:49626     
Title: Re:初心者です。    
>コンパイルもでき、実行もできたのですが、結果が負になってしまいました…

私も関数に分けて、コメントも入れた方が良いと思います。
そうすればおかしな結果になったときに修正しやすいです。

一応作ってみたものを添付するので、よければ見て下さい。
ponさんが文字列で作っているので、私は数値で作ってみたのですが、
これはこれで、条件演算子が酷いことになってます。
たぶん動くと思うんですが、間違ってたら誰か指摘して下さい。

if(k==2)
{
    for(a=0;a<n;a++)
    {
        for(b=0;b<n;b++)
        {
            if(a != b)
            {
                sprintf(answer[e],"%d%d",card[a],card[b]);
                sprintf(answer[e+1],"%d%d",card[b],card[a]);
                e=e+2;
            }
        }
    }
}

ところでこのループですが、例えば n = 4 の場合を考えると、
(a, b) = (0, 1), (0, 2), (0, 3), (1, 0), (1, 2), (1, 3)
         (2, 0), (2, 1), (2, 3), (3, 0), (3, 1), (3, 2)
のようになるので、二度目のsprintf 関数の呼び出しは不要で、eも一つ増やすだけで良いと思います。
同様のことが k == 3, k == 4 の場合にも言えるので、それも削れるかと。


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

Name: たいちう  ..熟練のプログラマー(61,336ポイント)   Date: 2010/03/24(水) 13:12   No:49634     
Title: Re:初心者です。    
> これはこれで、条件演算子が酷いことになってます。
> たぶん動くと思うんですが、間違ってたら誰か指摘して下さい。

動かして試したわけではありませんが、このように書くことができます。

data[i] = cards[a];
data[i] = data[i] * (cards[b] >= 10 ? 100 : 10) + card[b];
data[i] = data[i] * (cards[c] >= 10 ? 100 : 10) + card[c];
data[i] = data[i] * (cards[d] >= 10 ? 100 : 10) + card[d];


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

Name: たいちう  ..熟練のプログラマー(61,471ポイント)   Date: 2010/03/24(水) 13:35   No:49638     
Title: Re:初心者です。    
> コンパイルもでき、実行もできたのですが、
> 結果が負になってしまいました…

デバッグの仕方を勉強しましょう。
デバッガの使い方を覚えるか、要所要所にprintfで値を表示してみるかです。
後者について簡単に説明します。

ponさんは結果しか気にしていないようですが、
内部的に途中経過があって最終的に結果が表示されています。
途中経過はプログラマが想定した過程を通るはずですが、
最終結果が想定と違うならば、途中経過のどこかで、
意図していない事態になったわけです。

結果が負になったということですが、
結果に何が代入されているか、各段階でprintfで確認する事で、
想定と違う事態がいつ発生したかを突き止めます。
これがデバッグです。

今回はkosuuの初期化が問題だと思いますが、
今説明したprintfを使ったデバッグで、どのように気付くことが
できたかを考えてみてください。


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

Name: fatens  ..中級者(10,126ポイント)   Date: 2010/03/24(水) 13:42   No:49639     
Title: Re:初心者です。    
>動かして試したわけではありませんが、このように書くことができます。
元の数を次の数の桁数におおじて左にシフトさせる感じですね。
私のコードよりはるかにわかりやすいです。
勉強になりました。

これを踏まえて修正したものを添付しておきます。
 編集済み


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

Name: pon  ..ぴよぴよ(811ポイント)   Date: 2010/03/24(水) 14:34   No:49641     
Title: Re:初心者です。    
>>fatensさん
そうですね。自分でループさせたのにそれを忘れていました。ご指摘ありがとうございます。

>>たいちうさん
kosuu=0;と入れるのを忘れているということですね。ご指摘ありがとうございます。

これでokと思ったのですが、kosuu関数が常に0になっているようです。
eの数は合っているのですが、何故kosuuが0になってしまうのでしょう。
御指摘通りいろいろprintfを入れたのですがよく分かりませんでした。


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

Name: たいちう  ..熟練のプログラマー(61,522ポイント)   Date: 2010/03/24(水) 14:52   No:49642     
Title: Re:初心者です。    
> 御指摘通りいろいろprintfを入れたのですが
> よく分かりませんでした。

適当に入れても仕方ないですよ。
kosuu++が呼ばれていないのが症状なので、
どうしてそうなるのかを突き止めるわけです。

で、少なくとも次のことを突き止める必要があったのです。

× : if(flag[a]=0)
○ : if(flag[a]==0)


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

Name: pon  ..ぴよぴよ(776ポイント)   Date: 2010/03/24(水) 14:58   No:49644     
Title: Re:初心者です。    
あ、そうですね。ご指摘ありがとうございます。
今度は全てflagが0になってしまいました


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

Name: たいちう  ..熟練のプログラマー(62,135ポイント)   Date: 2010/03/24(水) 15:17   No:49645     
Title: Re:初心者です。    
kosuu = 0;
for(a=0;a<e;a++)
{
    flag1=1;         // 数字aを数える必要があることを表すフラグ
    for(b=0;b<a;b++) // 既に数えたかどうかを判定するため、b < aについて調べる
    {
        flag2 = 1;   // 数字a == 数字bを表すフラグ
        for(c=0;c<10;c++)
        {
            if(answer[a][c] != answer[b][c])
            {
                flag2=0;  // 数字a != 数字b
            }
        }
        if (flag2 == 1) // 既に数字bを数えているはずなので
            flag1 = 0;  // 数字aは数える必要がない
    }
    if(flag1==1)
    {
        kosuu++;
    }
}
printf("kosuu = %d\n", kosuu);
それと文字列の比較にはstrcmpを使った方が良いでしょう。 それとC++ならばこんなに簡単という例。色々手抜きですが。 重複除去以外はCでも同じように書けます。
#include <iostream>
#include <set>

using namespace std;

int used;
set<int> numbers;
int card[10];

void sub(int n, int k, int work) {
    if (k == 0) {
        numbers.insert(work);
    } else {
        for (int i = 0; i < n; i++) {
            int bit = 1 << i;
            if ((used & bit) == 0) {
                used |= bit;
                if (card[i] < 10)
                    sub(n, k - 1, work * 10 + card[i]);
                else
                    sub(n, k - 1, work * 100 + card[i]);
                used &= ~bit;
            }
        }
    }
}

int main() {
    // 入力例2
    int n = 6;
    int k = 3;
    card[0] = 72;
    card[1] = 2;
    card[2] = 12;
    card[3] = 7;
    card[4] = 2;
    card[5] = 1;

    sub(n, k, 0);
    cout << static_cast<int>(numbers.size()) << endl;

    return 0;
}


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

Name: pon  ..ぴよぴよ(811ポイント)   Date: 2010/03/24(水) 16:07   No:49648     
Title: Re:初心者です。    
>>たいちうさん
やっぱりだめです
この方法と自分の方法は同じではありませんか?


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

Name: たいちう  ..熟練のプログラマー(62,145ポイント)   Date: 2010/03/24(水) 16:25   No:49649     
Title: Re:初心者です。    
> やっぱりだめです
> この方法と自分の方法は同じではありませんか?

違いますよ。
試したソースコードを添付してください。


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

Name: pon  ..ぴよぴよ(865ポイント)   Date: 2010/03/24(水) 16:29   No:49650     
Title: Re:初心者です。    
すいません。int flag2の後に;を入れ忘れていただけで、入れたら出来ました。
でも、自分の方法と何が違うのでしょうか
前を調べるかと後ろを調べるのとは同じではありませんか?


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

Name: たいちう  ..熟練のプログラマー(62,287ポイント)   Date: 2010/03/24(水) 16:41   No:49651     
Title: Re:初心者です。    
for(a=0;a<e;a++)
{
    flag[a]=0;
    for(b=a+1;b<e;b++)
    {
        for(c=0;c<10;c++)
        {
            if(answer[a][c] != answer[b][c])
            {
                flag[a]=1;
            }
        }
    }
    if(flag[a]==0)
    {
        kosuu++;
        printf("%d\n",flag[a]);
    }
}

ponさんの条件では、aより後の全てのbと比較して、
1つでも(数字a != 数字b)ならば数えない、としています。
結局この条件を満たすのは最後のデータ(aより後のbが存在しないから)のみとなり、
kosuuが1になってしまいます。


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

Name: たいちう  ..熟練のプログラマー(62,337ポイント)   Date: 2010/03/24(水) 16:44   No:49652     
Title: Re:初心者です。    
一組のトランプをシャッフルして10枚ほど取り、
何種類の数字が現れたか数える方法を考えると良いでしょう。
自分の手で数える場合にどのようにやるかをプログラムにするだけです。


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

Name: pon  ..ぴよぴよ(975ポイント)   Date: 2010/03/24(水) 17:02   No:49653 解決!     
Title: Re:初心者です。    
そうですね。アルゴリズムを自分で全く理解していませんでした。

みなさん長くなりましたがありがとうございました


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



Name: sky  ..ぴよぴよ(518ポイント)   Date: 2010/03/17(水) 08:54   No:49298       
Title: fgets関数に関して    
はじめましてskyです。fgets関数を用いてpgmファイルの始めの2行(添付ファイルの場合, P2, 304,322)をそれぞれ、変数header, width, heightに格納するプログラムを考えているのですがfgets関数は一行ずつ読み込む関数ですよね?304,322は同じ行にあるのにこれを別々の変数に格納する方法がよくわかりません。

サイトや参考書を見て以下までできました。これからどうしたら良いか行き詰ってます。
OS:UNIX,コンパイル:gcc

#include<stdio.h>
#define BUFFER_SIZE 200
void main(){
    char  buffer[BUFFER_SIZE];
    FILE *fp;
    fp = fopen("test_barbarar.pgm", "r");

    // ファイルオープン失敗か?
    if ( !fp ){
        printf("ファイルオープンエラー\n");
        return;
    }

    // 1行ずつ読み込んで表示する
    while( fgets(buffer, BUFFER_SIZE, fp) ){
        printf("%s", buffer);
    }

    // ファイルクローズ
    fclose(fp);
}

添付ファイルtest_barbarar.のサイズが大きくて貼れなかったので、初めの4行は以下のようになってます。
P2
304 322
255
161 162 162 161 161 162 160 160 157 158 165 163 161 164 163 165 164 162 


長々と失礼しました。どうかよろしくお願いします。


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


Name: バグ  ..ハッカー(192,130ポイント)   Date: 2010/03/17(水) 09:02   No:49299     
Title: Re:fgets関数に関して    
fscanf関数を使用してはいかがでしょうか?


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

Name: バグ  ..ハッカー(192,439ポイント)   Date: 2010/03/17(水) 09:17   No:49300     
Title: Re:fgets関数に関して    
#include<stdio.h>

#define BUFFER_SIZE 200
#define HEADER_SIZE 8

int main(void)
{
    char buffer[BUFFER_SIZE] = {0, };
    char header[HEADER_SIZE] = {0, };
    int width = 0, height = 0;
    FILE *fp;

    // ファイルオープン
    fp = fopen("test_barbarar.pgm", "r");

    // ファイルオープン失敗か?
    if (fp == NULL)
    {
        printf("ファイルオープンエラー\n");
        return;
    }

    // header, width, heightを読み込む
    fscanf(fp, "%s", header);
    fscanf(fp, "%d%d", &width, &height);

    // header, width, heightを表示する
    printf("header = %s\n", header);
    printf("width  = %d\n", width);
    printf("height = %d\n", height);

    // ファイルクローズ
    fclose(fp);

    return 0;
}



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

Name: バグ  ..ハッカー(192,446ポイント)   Date: 2010/03/17(水) 09:18   No:49301     
Title: Re:fgets関数に関して    
おっと、ファイルオープンに失敗した際の戻り値を設定するのを忘れておりましたm(__)m

#include<stdio.h>

#define BUFFER_SIZE 200
#define HEADER_SIZE 8

int main(void)
{
    char buffer[BUFFER_SIZE] = {0, };
    char header[HEADER_SIZE] = {0, };
    int width = 0, height = 0;
    FILE *fp;

    // ファイルオープン
    fp = fopen("test_barbarar.pgm", "r");

    // ファイルオープン失敗か?
    if (fp == NULL)
    {
        printf("ファイルオープンエラー\n");
        return -1;
    }

    // header, width, heightを読み込む
    fscanf(fp, "%s", header);
    fscanf(fp, "%d%d", &width, &height);

    // header, width, heightを表示する
    printf("header = %s\n", header);
    printf("width  = %d\n", width);
    printf("height = %d\n", height);

    // ファイルクローズ
    fclose(fp);

    return 0;
}


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

Name: sky  ..ぴよぴよ(654ポイント)   Date: 2010/03/17(水) 12:14   No:49303     
Title: Re:fgets関数に関して    
バグさん、丁寧にご回答まことにありがとうございます。
一応課題でfgetsを使うことを指定されています。fgetsは一行ずつファイルから読み込む関数と解釈しているのですが添付ファイルの2行目が304 322となってるので これをそれぞれ違う変数に格納するやり方を教えて頂ければ幸いです。私の記述の仕方が悪かったです。本当にすみません。


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

Name: non  ..比類無きプログラマー(96,119ポイント)   Date: 2010/03/17(水) 12:18   No:49304     
Title: Re:fgets関数に関して    
fgetsをした後で、sscanfを使う方法があります。


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

Name: たかぎ [URL]  ..ハッカー(170,441ポイント)   Date: 2010/03/17(水) 13:37   No:49305     
Title: Re:fgets関数に関して    
ちがう変数とのことですが、どんな変数でしょうか?
例えば、文字列として扱えばよいのであれば、sscanfよりstrtokの方がむしろ楽です。
整数値として扱うのであれば、strtolやstrtoulを使うべきです(もちろん、strtollやstrtoimaxが使えるなら、それでもOK)。



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

Name: sky  ..ぴよぴよ(956ポイント)   Date: 2010/03/17(水) 14:13   No:49306     
Title: Re:fgets関数に関して    
nonさん>>
ありがとうございます。fgets関数で2行分だけ読み込みsscanfを用いるということでしょうか。
2行分だけ読み込むことは可能なんですかね?

たかぎさん>>
お手数おかけします。返答ありがとうございます。
304と322という整数をそれぞれ widthとheightに格納するということです。

問題がfgets関数を用いてpgmファイルの始めの2行(添付ファイルの場合, P2, 304,322)をそれぞれ、変数header, width, heightに格納するプログラムを作成せよ。
ってなっててstrtolやstrtoulはまだ習ってないです。ホントにすみません。 編集済み


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

Name: バグ  ..ハッカー(192,585ポイント)   Date: 2010/03/17(水) 14:39   No:49308     
Title: Re:fgets関数に関して    
それならば、nonさんの言われるように、fgets関数でいったん文字列としてファイルの内容を取得しておいて、sscanf関数を使用して、文字列→数値へ変換してやればいいと思いますよ。
これらの手間を一度に行えるのがfscanf関数なので、結局同じことではあるのですが…(^_^;)

sscanf関数の使い方が分からなければ、下記URLを参照ください。
http://www.bohyoh.com/CandCPP/C/Library/sscanf.html


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

Name: sky  ..かけだし(1,014ポイント)   Date: 2010/03/17(水) 14:49   No:49309     
Title: Re:fgets関数に関して    
バグさん本当にありがとございます。
プログラム苦手なので考えるのに時間がかかりますけどやってみます。
また分からないことがあればよろしくお願いします。


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

Name: sky  ..かけだし(1,058ポイント)   Date: 2010/03/17(水) 15:41   No:49311     
Title: Re:fgets関数に関して    
今先生に確認をしたところfgetsのみでやりなさい(fscanfやsscanf使わないでやって)。と言われました汗
すみません。 編集済み


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

Name: Blue  ..中級者(12,022ポイント)   Date: 2010/03/17(水) 16:00   No:49313     
Title: Re:fgets関数に関して    
トークン分割用:strtok
  数値変換用:strtolやatoi(はあまりよろしくないけど)

はつかってもよい?

そもそも
>304と322という整数をそれぞれ widthとheightに格納するということです。
widthとheightは何型?
char型の配列であれば、strtolとかは不要。

 編集済み


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

Name: sky  ..かけだし(1,100ポイント)   Date: 2010/03/17(水) 16:09   No:49315     
Title: Re:fgets関数に関して    
Blueさん
strtokも使ってはいけないみたいです。widthとheightは何型か特に指定されていないです。 編集済み


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

Name: Blue  ..中級者(12,283ポイント)   Date: 2010/03/17(水) 16:18   No:49316     
Title: Re:fgets関数に関して    
>widthとheightは何型か特に指定されていない
のであれば、char型配列にしてしまえばw

2行目は先頭から空白の手前までをwidthに、空白の後ろから改行もしくは終端までをheightに
入れるような処理を書けばよいですね。

未検証だけどこんな感じ?
char width[8] = ""; // サイズは適当
char height[8] = "";
char* p; // 検索用
int i;   // 格納用

i = 0;
for (p = buffer; *p != ' ' && *p != '\0'; ++p, ++i) {
    width[i] = *p;
}
width[i] = '\0';

if (*p != '\0')
{
    ++p;
    i = 0;
    for (; *p != '\0' && *p != '\n'; ++p, ++i) {
        height[i] = *p;
    }
    height[i] = '\0';
}

 編集済み


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

Name: sky  ..かけだし(1,162ポイント)   Date: 2010/03/18(木) 08:22   No:49372     
Title: Re:fgets関数に関して    
Blueさん>>
ありがとうございます。すこしお尋ねしたいのですが…
width[i] = *p;
}
width[i] = '\0';←これはどういう意味ですかね?


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

Name: Blue  ..中級者(12,330ポイント)   Date: 2010/03/18(木) 08:43   No:49373     
Title: Re:fgets関数に関して    
>width[i] = '\0';←これはどういう意味ですかね? 
文字列の終端文字を格納しているだけです。


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

Name: sky  ..かけだし(1,193ポイント)   Date: 2010/03/18(木) 08:54   No:49374     
Title: Re:fgets関数に関して    
全体的なのがまだできてないのでもうすこし考えてみます。
丁寧にご回答ありがとうございました。


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

Name: sky  ..かけだし(1,363ポイント)   Date: 2010/03/24(水) 10:52   No:49620     
Title: Re:fgets関数に関して    
Blueさん>>
参考にさせてもらいました。以下のようにしたのですが…
#include <stdio.h>

#define BUFFER_SIZE 200

void main(){
  char buffer[BUFFER_SIZE];
  char header[10];
  char width[10]="",height[10]="",space[10];//格納
  char *p;
  int i;
  
  FILE *fp ;
  FILE *new;

  fp = fopen("test_barbarar.pgm", "r");
  
  // ファイルオープン失敗か?
  if ( !fp ){
    printf("ファイルオープンエラー\n");
    return;
  }
  
 
  fgets(header, BUFFER_SIZE, fp);
  printf("header=%s", header);
  
 fgets(buffer, BUFFER_SIZE, fp);
  i = 0;
for (p = buffer; *p != ' ' && *p != '\0'; ++p, ++i) {
    width[i] = *p;
}
width[i] = '\0';

if (*p != '\0')
{
    ++p;
    i = 0;
    for (; *p != '\0' && *p != '\n'; ++p, ++i) {
        height[i] = *p;
    }
    height[i] = '\0';
}

   printf("width=%s", width[i]);
    printf("height=%s", header[i]);
  
  // ファイルクローズ
  fclose(fp);
  }

実行結果
header=p2
width=(null)header=(null)
となってしまいます。何がいけなかったのでしょうか?何度もすみません。


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

Name: fatens  ..中級者(10,196ポイント)   Date: 2010/03/24(水) 13:26   No:49637     
Title: Re:fgets関数に関して    
>fgets(header, BUFFER_SIZE, fp); 
header[]のサイズは10なのに、関係のないBUFFER_SIZEを渡すのはどうかと。
10 または、sizeof(header) / sizeof(header[0]) にするほうが良いと思います。

>printf("width=%s", width[i]);
>printf("height=%s", header[i]);
printf 関数に渡すべきは文字列の先頭アドレスなのに、文字を渡しています。
また、このときのiは何を意図しているのでしょう?


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



Name: エネン  ..ぴよぴよ(370ポイント)   Date: 2010/03/23(火) 02:58   No:49548       
Title: ゲームの流れについて    
はじめて質問させていただきます。
現在、
「14歳からはじめるC++わくわくゲームプログラミング」
という本を参考にシューティングゲーム作成を行っています。

1面が出来たので2面を作ろうと思っていますが、
音楽や画像のロードはどのタイミングで行うのかがわからず、悩んでいます。
(DXライブラリの関数「LoadGraph」「LoadDivGraph」「LoadSoundMem」を使用しています) 

現在は、ゲーム起動時に、1面2面の音楽・画像をまとめてロードしています。
(ゲーム起動→全画像音楽ロード→1面描画→2面描画……という流れです)

今は問題は有りませんが、将来3面、4面……と続いたときに、メモリを圧迫しないか心配です。
そのため、ロードはまとめてではなく、その都度読み込む形に変更をしたいのです。
(ゲーム起動→1面の画像音楽ロード→1面描画→データ解放→2面の→2面描画→データ解放……
という流れにしたいのです)
データの解放関数は
InitGraph 、DeleteGraph……と有るようですが、どちらの関数を使用するべきかわかりません。

皆様はデータの読み込みと解放をどのように行っていますか?
教えてください。 

また、このような「面形式」のゲームフレームで、参考になる書籍、サイトが有れば紹介して下さい。


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


Name: ひよこ  ..比類無きプログラマー(80,912ポイント)   Date: 2010/03/23(火) 12:26   No:49565     
Title: Re:ゲームの流れについて    
InitGraphは読み込んだ画像ハンドルをDeleteGraphは指定した画像ハンドルを削除します。シューティングで、弾が変わらないし、自機が変わらないで敵だけ変わるのだったら
面で読んで削除をすればいいと思います。

簡単にいえばずっと使うものを最初に読み込み、ある所しか使わないようなものをそのたびに読み込み
いらなくなったら削除をすればいいと思います。


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

Name: エネン  ..ぴよぴよ(506ポイント)   Date: 2010/03/24(水) 11:31   No:49623 解決!     
Title: Re:ゲームの流れについて    
早くのご返答ありがとうございます。

>簡単にいえばずっと使うものを最初に読み込み、ある所しか使わないようなものをそのたびに読み込み 
>いらなくなったら削除をすればいいと思います。

なるほど。

DeleteGraphの使用を前提とした場合、
グラフィックハンドルの寿命を考慮する構造にする必要があるようですね。
必要なものまで間違って消さないように。
ただLodaDivGraphなど、「グラフィックハンドルを分割して読み込む」タイプの管理がややこしそうです。
……現状の自分のコード管理が甘いだけなのかもしれませんが。

グラフィックハンドルを管理するクラスを作って対応してみます。
>簡単にいえばずっと使うものを最初に読み込み、ある所しか使わないようなものをそのたびに読み込み 
いらなくなったら削除をすればいいと思います。


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



Name: dic  ..熟練のプログラマー(57,514ポイント)   Date: 2010/03/20(土) 20:30   No:49503       
Title: ソフト制作について    
ソフト制作について聞きたいです

仕様書を書きたいのですが
自分にしっくりした仕様書が作成できないです
UMLツールなど試しましたが、どうしてもテクニックに走ってしまって
完成しないです

できれば、全体図を眺めれて、ソースコードを管理できるツールなど
ないでしょうか?

現在は、テクニックに走るのではなく
完成を目標とした、関数だけからなるソースコードで統一しようと
考えてます

しかし、関数がたくさんできあがって、これまた管理が
複雑になり、また完成せずということになってます

簡素でいて、全体図を見渡せ、修正もできる
そんなツールはないでしょうか?

あるいは、「私はこうやって関数を管理してます」とかないでしょうか?


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


Name: softya [URL]  ..ハッカー(136,511ポイント)   Date: 2010/03/21(日) 00:23   No:49506     
Title: Re:ソフト制作について    
万能のツールは知らないですね。
私はひとりで作るものなら、紙と鉛筆を基本としてExcelやWordで書けるもの程度で作っています。
半年から一年かかるもののでも困ったことはありませんし、モジュール分割やクラス構築をちゃんとやっていけば多すぎる関数やクラスで混乱したことは今まで無いですね。

そもそもモジュール単位に必要な関数が入っていれば良いでの、モジュールごとの機能を先に定義するだけで基本設計は出来ると思います。その時に最低限必要なインターフェイス関数を決めておくだけで良いと思いますよ。


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

Name: dic  ..熟練のプログラマー(57,514ポイント)   Date: 2010/03/21(日) 17:47   No:49516     
Title: Re:ソフト制作について    
C++でオブジェクト指向をいきなりやってたものだから
いろんなところで色んな変数がいきなりでてきたり
オブジェクト指向前の構造化をしっかりやればいいかもしれないですね

基礎(基本設計)を固めてから中身を作っていくように
すればいいのかな

フローチャートだと、ちょっと、分岐が多くて把握しきれなくなって
UMLだと、ちょっと、把握できる量が多すぎて、頭がついていかず
プログラムを把握する方法として、上の中間点はないでしょうか?


Name: softya [URL]  ..ハッカー(136,619ポイント)   Date: 2010/03/21(日) 19:17   No:49519     
Title: Re:ソフト制作について    
UMLは基本設計だけで各クラスのインターフェイスだけを設計するレベルで留めるべきだと思います。
フローチャートはオブジェクト指向の設計に向いていませんので、使わない方向で。
各クラスの詳細は、メモ書きするぐらいで十分だと思うんですけどね。
他の人の意見は違うかも知れませんが。


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

Name: dic  ..熟練のプログラマー(57,661ポイント)   Date: 2010/03/23(火) 13:34   No:49568 解決!     
Title: Re:ソフト制作について    
意見をありがとうございます
参考になりました
また、自分に合ったやり方も色々試してみます

参考までに私が作ったのは
画像ファイルのように、関数名を統一させ
関数の呼び出しを複雑にならないように
シンプルに設計してます

これだと、私にとっては数日たっても
すぐに全体の処理状態が把握しやすいです


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

Name: softya [URL]  ..ハッカー(137,987ポイント)   Date: 2010/03/23(火) 14:22   No:49576     
Title: Re:ソフト制作について    
これだとクラス図ではなく、構造化プログラミングのモジュール関連図ですね。
少なくともクラス化するなら、
(1)メインループ、システム初期化、システム解放は同じクラスのメンバに。
(2)ステージの初期化とゲームループは同じクラスに。
だと思いますが。

それともクラスを使わないで、C言語として組む予定でしょうか?
だとしたら基本構成要素が不足している以外はOKです。気になるのは、自機、敵、ボス、弾、ゲームオーバーとかが無いんですよね。


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

Name: dic  ..熟練のプログラマー(58,059ポイント)   Date: 2010/03/23(火) 21:52   No:49600     
Title: Re:ソフト制作について    
STL利用するんで、正確にはC/C++になります
構造化プログラミングの手法で、条件、分岐、繰り返しで組もうと考えてます

ゲームオーバーは考えていなかったです
他のゲームもやって、参考にし、不足してる機能を補いたいと考えてます

自機、敵、ボスなどはグローバル変数でやろうかと考えてました

クラスを使わないでやっていこうかと考えてます



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

Name: softya [URL]  ..ハッカー(138,494ポイント)   Date: 2010/03/23(火) 22:03   No:49602     
Title: Re:ソフト制作について    
>クラスを使わないでやっていこうかと考えてます 

ベターCとしての使い方ですね。了解しました。

>自機、敵、ボスなどはグローバル変数でやろうかと考えてました 

構造化プログラミング的にも専用モジュールに分けることをおすすめしますね。少なくとも今あるモジュールと関連性が無いですよね。クラスの独立性を重視するように、構造化プログラミングではモジュールの独立性を重視します。その意味にではクラスとモジュールは似ているのです。

そうそう、今気づきましたがエンディングはあるのでしょうか?




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

Name: dic  ..熟練のプログラマー(58,121ポイント)   Date: 2010/03/24(水) 07:32   No:49614     
Title: Re:ソフト制作について    
>そうそう、今気づきましたがエンディングはあるのでしょうか?
スタッフロール全部自分になるんで・・・ないです・・・orz


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

Name: たいちう  ..熟練のプログラマー(61,206ポイント)   Date: 2010/03/24(水) 09:15   No:49617     
Title: Re:ソフト制作について    
> スタッフロール全部自分になるんで・・・ないです・・・orz

それはそれであっても良いかと。
私の実力ではクリアできないんだけど、
東方のエンディングってどうなってるんでしょうか?


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

Name: 御津凪 [URL]  ..ハッカー(140,918ポイント)   Date: 2010/03/24(水) 10:22   No:49619     
Title: Re:ソフト制作について    
> 東方のエンディングってどうなってるんでしょうか?

エンディングクレジットでは自身が製作した部分等は一つに纏めてますね。
あとは製作に関係した方々のクレジットを出しているようです。(テストプレイヤーとか)

それと、良く見てみると工夫の凝らした演出もなされているようですよ。


※「お世話になった方々」として、ここの掲示板をクレジットに出すのもいいですね。


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



Name: LEGZE  ..ぴよぴよ(119ポイント)   Date: 2010/03/23(火) 07:23   No:49553       
Title: 3dsMAX 9.0のプラグイン(X-ファイル)    
以前、8.0でモデルを作りプラグインを使いx-ファイルにて吐き出していたのですが
新しく9.0なってからプラグインが見つからず困っております。
C言語に関係ない質問なのですがどなたかDL出来る場所をご存知でしたら教えては頂けないでしょうか?




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


Name: LEGZE  ..ぴよぴよ(157ポイント)   Date: 2010/03/23(火) 18:42   No:49592     
Title: Re:3dsMAX 9.0のプラグイン(X-ファイル)    
あれから探してみたのですが見つかりませんでした・・・。
9.0のはないのでしょうか?


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

Name: Justy  ..伝説なるハッカー(514,220ポイント)   Date: 2010/03/23(火) 23:36   No:49610     
Title: Re:3dsMAX 9.0のプラグイン(X-ファイル)    
 ちょっと検索しただけでそれっぽいものが幾つか見つかりましたけど。
 まー、どこまで使えるのかは判りませんが……。


ACTINIA Software DirectX 9.0c X-File Exporter 
http://actinia-software.com/actinia_software_download.html

OgreMax Scene Exporter - PukiWiki
http://mononoco.hobby-site.org/pukiwiki/index.php?OgreMax%20Scene%20Exporter

Pandasoft
http://www.andytather.co.uk/Panda/directxmax_downloads.aspx

ペケポータ(XPorter)
http://www.maxuser.com/cgi-bin/plugin/detail.php?id=2588

kW X-porter | Get kW X-porter at SourceForge.net
http://sourceforge.net/projects/kwxport/


 


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

Name: LEGZE  ..ぴよぴよ(57ポイント)   Date: 2010/03/24(水) 03:22   No:49613 解決!     
Title: Re:3dsMAX 9.0のプラグイン(X-ファイル)    
Justy様
そんなにあるのですかΣ
お探しありがとうございました。

ACTINIA Software DirectX 9.0c X-File Exporter  
からDLしたものを使ったところ警告がありましたがキチンと吐き出しが出来ました。
ありがとうございました。


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



Name: SHIM  ..ぴよぴよ(263ポイント)   Date: 2010/03/23(火) 07:18   No:49551       
Title: 3Dゲームでカメラの位置    
DXライブラリにて3Dゲームを作ろうと思っております。
3Dゲームの制作は少しだけ触れたことがあり原理等は理解しております。

今回ご質問させて頂いたのは座標(0,0,0)に表示してあるものオブジェクトを
画面に捉えるのにどのくらいの位置からカメラで見ればよいかお聞きしたいです。

下記の様に書くと物凄い小さい物体が表示されます。
MV1SetPosition( ChrModelH, VGet( 0.0f, 0.0f, 80.0f ) ) ;

SetCameraPositionAndTarget_UpVecY関数を使おうかと思うのですが
皆様がこの関数を使う場合どの程度の値を入れておりますでしょうか?
現在は1ドット程度のサイズでしか捉えていないので
物体がわかるくらいのサイズですと助かります。
※自分で値を入れてみたのですが表示されませんでした・・・。

質問が下手で申し訳御座いません。

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

VECTOR A,B ;

A.x = 
A.y = 
A.z = 

B.x = 0
B.y = 0
B.z = 0

SetCameraPositionAndTarget_UpVecY( A, B ) ;






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


Name: softya [URL]  ..ハッカー(137,706ポイント)   Date: 2010/03/23(火) 11:15   No:49560     
Title: Re:3Dゲームでカメラの位置    
現状物体が小さく表示されるのは、カメラの距離に対して物体のスケールが小さすぎるためです。
ただ、SHIMさんがアリを撮っているのか、象を撮っているのか分からない現状では、適切なカメラの距離をアドバイスする事が出来ませんので、物体に関してすべての情報を提示しもらう必要があります。よろしいでしょうか?


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

Name: SHIM  ..ぴよぴよ(351ポイント)   Date: 2010/03/23(火) 17:35   No:49590     
Title: Re:3Dゲームでカメラの位置    
softya様
回答ありがとうございます。
x-fileを添付させて頂きます。

これは小さいのでしょうか?
普通のサイズがわからないのですがどれくらいが適正なのでしょうか?


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

Name: softya [URL]  ..ハッカー(137,705ポイント)   Date: 2010/03/23(火) 22:40   No:49604     
Title: Re:3Dゲームでカメラの位置    
DXライブラリ置き場のサンプルを改造して表示してみました。
やはり小さいですね。DXライブラリのデフォルトのカメラで扱うには、この数十倍のモデルスケールが欲しいです。
とりあえず単位はcm(メートル)だと仮定して話しますが、このプログラムは100cm上(Z方向)からXY平面を見下ろしています。
カーソルでX,Y方向にカメラが移動しますが、注視点は(0,0,0)です。
XY平面を表すメッシュは10cm単位で書いてあります。
お試しください。

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
    int ModelHandle ;
    VECTOR CameraPos ;

    // DXライブラリの初期化
    if( DxLib_Init() < 0 )
    {
        // エラーが発生したら直ちに終了
        return -1 ;
    }

    // モデルの読み込み
    ModelHandle = MV1LoadModel( "chr.x" ) ;
    //MV1SetScale(ModelHandle,VGet(20.0,20.0,20.0));

    // 描画先を裏画面にする
    SetDrawScreen( DX_SCREEN_BACK ) ;

    // カメラの座標を初期化
    CameraPos.x = 0.0f ;
    CameraPos.y = 0.0f ;
    CameraPos.z = 100.0f ;

    // ESCキーが押されるかウインドウが閉じられるまでループ
    while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
    {
        clsDx();
        // 画面をクリア
        ClearDrawScreen() ;

        // 方向キーでカメラの座標を移動
        if( CheckHitKey( KEY_INPUT_UP ) == 1 )
        {
            CameraPos.y += 1.0f ;
        }
        if( CheckHitKey( KEY_INPUT_DOWN ) == 1 )
        {
            CameraPos.y -= 1.0f ;
        }
        if( CheckHitKey( KEY_INPUT_LEFT ) == 1 )
        {
            CameraPos.x -= 1.0f ;
        }
        if( CheckHitKey( KEY_INPUT_RIGHT ) == 1 )
        {
            CameraPos.x += 1.0f ;
        }
        printfDx( "camera(%f,%f,%f)\n" , CameraPos.x, CameraPos.y, CameraPos.z );

        // カメラの位置と注視点をセット、注視点は原点
        SetCameraPositionAndTarget_UpVecY( CameraPos, VGet( 0.0f, 0.0f, 0.0f ) ) ;

        //    XY平面を描画
        for( float x= -100.0f ; x<=100.0f ; x+=10.0f ) {
            DrawLine3D( VGet( x, -100.0f, 0.0f ), VGet( x, 100.0f, 0.0f ), GetColor( 255,255,255 ) ) ;
        }
        for( float y= -100.0f ; y<=100.0f ; y+=10.0f ) {
            DrawLine3D( VGet( -100.0f, y, 0.0f  ), VGet( 100.0f, y, 0.0f ), GetColor( 255,255,255 ) ) ;
        }
        //        DrawLine3D( VGet( 0.0f, 0.0f, -100.0f ), VGet( 0.0f, 0.0f,  100.0f ), GetColor( 255,255,255 ) ) ;

        // モデルの描画
        MV1DrawModel( ModelHandle ) ;

        // 裏画面の内容を表画面に反映
        ScreenFlip() ;
    }

    // DXライブラリの後始末
    DxLib_End() ;

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


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

Name: SHIM  ..ぴよぴよ(387ポイント)   Date: 2010/03/24(水) 03:03   No:49611     
Title: Re:3Dゲームでカメラの位置    
出来ました><
ありがとうございます。
これからは物体を大きくして表示します。
ありがとうございました。


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



Name:  ..ぴよぴよ(380ポイント)   Date: 2010/03/23(火) 22:04   No:49603       
Title: DXライブラリで3Dの表示    
0,0,0にある物体を表示する為にカメラをセットしたいのですが表示されません。

DrawLine3D( VGet( 0.0f, 0.0f, 0.0f ), VGet( 300.0f, 300.0f, 0.0f ), GetColor( 255,255,255 ) ) ;
だと線が表示されるのですが


    CameraPos.x = 10.0f ;
    CameraPos.y = 10.0f ;
    CameraPos.z = 4.0f ;

    SetCameraPositionAndTarget_UpVecY( CameraPos, VGet( 0.0f, 0.0f, 0.0f ) ) ;
DrawLine3D( VGet( 0.0f, 0.0f, 0.0f ), VGet( 300.0f, 300.0f, 0.0f ), GetColor( 255,255,255 ) ) ;
だと表示されません・・・。
なぜなのでしょうか・・・。


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


Name: softya [URL]  ..ハッカー(137,737ポイント)   Date: 2010/03/23(火) 22:58   No:49607     
Title: Re:DXライブラリで3Dの表示    
たぶん、近すぎるかと。
CameraPos.z = 100.0f ; 
としてみてください。


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



Name: FOX  ..入門者(3,089ポイント)   Date: 2010/03/23(火) 16:40   No:49586       
Title: たすけてくださいまし    
新しいプロジェクトを、
Win32コンソールアプリケーション⇒Windowsアプリケーション,空のプロジェクトにチェック
で作り、プロパティを押して、
Release構成の文字セットをマルチバイト文字セットに
Release構成のランタイムライブラリをマルチスレッドに

Debug構成の文字セットをマルチバイト文字セットに
Debug構成のランタイムライブラリをマルチスレッドデバッグ
にしました。

その状況で、一番簡単なプログラム↓
#include <stdio.h>

int main(void)
{
    return 0;
}
をつくりましたが、
1>LIBCMT.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です。
1>C:\Documents and Settings\******\My Documents\Visual Studio 2008\Projects\test\Release\test.exe : fatal error LNK1120: 外部参照 1 が未解決です。
というエラーがでてしまいます。
ソースに全く問題はないので、またもやリンクの問題だとおもいますが、どうやったら直るのかなどわからないです;;

以上です。お願いします。
 編集済み


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


Name: softya [URL]  ..ハッカー(138,196ポイント)   Date: 2010/03/23(火) 16:45   No:49587     
Title: Re:たすけてくださいまし    
Windowsアプリケーションですので、mainでは無くWinMainが最初に呼び出される関数となります。
理由もなく、Win32コンソールアプリケーションからWindowsアプリケーションに変えるのはやめた方が良いと思いますが。


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

Name: FOX  ..入門者(3,162ポイント)   Date: 2010/03/23(火) 17:04   No:49589 解決!     
Title: Re:たすけてくださいまし    
毎度ご返答ありがとうございます。
そのとおりでした。いつものようにWindowsアプリケーションを選んでしまったのが原因でした。
ありがとうございました。


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



Name: くぼ  ..ぴよぴよ(276ポイント)   Date: 2010/03/23(火) 14:18   No:49575       
Title: ファイル名の入力を要求する複数の実行ファイルを一度に実行する方法    
ファイル名の入力を要求する
複数の実行ファイルを
一度に実行する方法を教えて下さい。

コンパイラはgccです。

例えば、a.exeとb.exeという二つの実行ファイルがあり、
それぞれa.txt、b.txtというファイル名の入力を実行後に
要求してくるとします。

仮に、

./a.exe;./b.exe

と入力すると、実行は可能ですが、
もし、a.exeとb.exeがともに
パラメータ等を記載したファイル名の入力を要求している場合では、
このままでは、いちいちファイル名を入力せねばならず
効率的ではありません。

これを一度に実行する何かよい方法を教えていただけませんか?
初心者な僕ですが、よろしくお願いします。



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


Name: softya [URL]  ..ハッカー(138,048ポイント)   Date: 2010/03/23(火) 15:21   No:49579     
Title: Re:ファイル名の入力を要求する複数の実行ファイルを一度に実行する方法    
stdinからの入力ならリダイレクトすればよろしいかと。
./a.exe <ina.txt;./b.exe  <inb.txt


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

Name: くぼ  ..ぴよぴよ(431ポイント)   Date: 2010/03/23(火) 16:05   No:49582     
Title: Re:ファイル名の入力を要求する複数の実行ファイルを一度に実行する方法    
返信ありがとうございます!!
しかしながら、

./a.exe < a.txt;./b.exe < b.txt

(ina.txtのinは誤字ですよね?)

ではファイルを読んでくれませんでした...

(説明:なお、僕の作った実行ファイルでは
      ./a.exeで実行後、
      "ファイル名を入力しなさい。"という文章の表示後に
      char str[100];
      scanf("%s",str);
      でパラメータファイル名を読み見込むようにしています.)

何故..?


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

Name: softya [URL]  ..ハッカー(138,101ポイント)   Date: 2010/03/23(火) 16:16   No:49584     
Title: Re:ファイル名の入力を要求する複数の実行ファイルを一度に実行する方法    
違いますよ。入力のリダイレクトですので、
ina.txtに中に
a.txt
inb.txtに中に
b.txt
と書いてください。

./a.exe < a.txt;
と書くとa.txtの中身をscanf("%s",str); に入力する事になります。


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

Name: くぼ  ..ぴよぴよ(525ポイント)   Date: 2010/03/23(火) 16:54   No:49588 解決!     
Title: Re:ファイル名の入力を要求する複数の実行ファイルを一度に実行する方法    
なるほど!
パラメータを記載したファイル以外に
パラメータ名を記載したファイル(a.txtとする)を用意して

./a.exe < a.txt

とやる方法ですね。
これで新たにファイル生成は必要ですが
目的は達成せきますね。
ありがとうございました!


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



Name: -ion  ..ぴよぴよ(77ポイント)   Date: 2010/03/22(月) 17:38   No:49536       
Title: 「ゲームプログラミングの館」のNo22の質問    
プログラミング初心者です。
「ゲームプログラミングの館」を読んで勉強させてもらっています。
質問ですが、No22の「キャラを四方向に歩かせる」の
ch.img=image[(ch.x%32+ch.y%32)/8 + ch.muki*4];の所で、
「ch.muki*4」がよくわかりません。
特に「*4」の所です。「*」は演算子なのですか?



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


Name: kazuoni [URL]  ..ハッカー(140,041ポイント)   Date: 2010/03/22(月) 17:58   No:49538     
Title: Re:「ゲームプログラミングの館」のNo22の質問    
「*」はC言語では乗算です。
他にもたくさんありますので、以下を参考にしてみてください。

目指せプログラマー! - 第5章. 演算子 -
http://www5c.biglobe.ne.jp/~ecb/c/05_01.html


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

Name: -ion  ..ぴよぴよ(100ポイント)   Date: 2010/03/22(月) 21:06   No:49539     
Title: Re:「ゲームプログラミングの館」のNo22の質問    
では「ch.muki*4」は向き×4で向きは4つあるって意味ですか?

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

Name: kazuoni [URL]  ..ハッカー(140,082ポイント)   Date: 2010/03/22(月) 23:01   No:49541     
Title: Re:「ゲームプログラミングの館」のNo22の質問    
以前同様の質問がありましたので、参考に

http://www.play21.jp/board/formz.cgi?action=res&resno=45100&page=&lognum=138&id=dixq&rln=45186


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

Name: -ion  ..ぴよぴよ(128ポイント)   Date: 2010/03/23(火) 16:14   No:49583 解決!     
Title: Re:「ゲームプログラミングの館」のNo22の質問    
ありがとうございます!分かりました!
これからは過去ログもしっかり見てから質問します!


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



Name: ベース  ..入門者(3,669ポイント)   Date: 2010/03/22(月) 21:09   No:49540       
Title: テキストファイルに出力    
テキストファイルに全角文字を出力したいのですがテキストファイルには???と出力されてしまいます。
どうしたらちゃんと出力されるでしょうか?
#include<windows.h>
#include<TCHAR.h>
int WINAPI _tWinMain(HINSTANCE hInstance,HINSTANCE hprevInst,LPTSTR nCmdLine,int nCmdShow)
{
    FILE* fp;
    
    fp=_wfopen(_T("takoyaki.txt"),_T("w"));
    if(fp==NULL)
    {
        MessageBox(NULL,_T("ファイルが開きません"),_T("エラー"),MB_OK);
    }
    fwprintf(fp,_T("%s"),_T("おはよう。"));    
    return 0;
}

環境はWinXP pro、
開発環境はVC++2005です。
よろしくお願いします。


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


Name: たかぎ [URL]  ..ハッカー(171,545ポイント)   Date: 2010/03/23(火) 04:55   No:49549     
Title: Re:テキストファイルに出力    
ロケールはどこで設定しているのでしょう?

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

Name: たかぎ [URL]  ..ハッカー(171,563ポイント)   Date: 2010/03/23(火) 04:58   No:49550     
Title: Re:テキストファイルに出力    
マルチか...
http://oshiete1.goo.ne.jp/qa5772465.html


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

Name: たいちう  ..熟練のプログラマー(60,345ポイント)   Date: 2010/03/23(火) 12:58   No:49566     
Title: Re:テキストファイルに出力    
この掲示板でも同じ質問がありました。

http://www.play21.jp/board/formz.cgi?action=res&resno=49356&page=30&lognum=&id=dixq&rln=49402

仮に別人だとしても参考にしてください。


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

Name: dic  ..熟練のプログラマー(57,838ポイント)   Date: 2010/03/23(火) 14:09   No:49573     
Title: Re:テキストファイルに出力    
VC++6 では動きました
#define    _UNICODE
#include    <windows.h>
#include    <stdio.h>
#include    <TCHAR.h>
#include    <locale.h>

int    main()
{
    FILE    *fp;

    _wsetlocale(LC_ALL, L"");
    fp = _wfopen( _T("test.txt"), _T("wt") );
    fwprintf( fp, _T("おはよう") );
    fclose( fp );

    return 0;
}


flocse() 忘れてません?


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

Name: dic  ..熟練のプログラマー(57,872ポイント)   Date: 2010/03/23(火) 14:11   No:49574     
Title: Re:テキストファイルに出力    
>flocse() 忘れてません? 
fclose() ですね
タイプミスです


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



Name:  ..ぴよぴよ(843ポイント)   Date: 2010/03/23(火) 01:03   No:49545       
Title: 質問です    
こんばんわ、先日は御世話になりました
再び質問させて頂きます、今回はプログラミングの館とは関係ありません

例えば、「おはよう」「こんにちは」「こんばんわ」という文があったとします
Aという関数が1ならば「おはよう」のみ、2ならば「おはよう」「こんにちは」を表示
3以上ならば全てを表示するにはどのような式になるでしょうか?

if文を使うことも考えましたが、
if (A = 1)          printfDx("おはよう");
else if (A = 2)     printfDx("おはよう、こんにちは");
else                printfDx("おはよう、こんにちは、こんばんわ");
と3つなら短いのですが数が増えると同じことを何度も書く羽目になってしまいます

if    (A = 1)     printfDx("おはよう");
else if (A = 2)     printfDx("おはよう、こんにちは");
else if (A = 3)     printfDx("おはよう、こんにちは、こんばんわ");
else if (A = 4)     printfDx("おはよう、こんにちは、こんばんわ、さようなら");
else if (A = 5)     printfDx("おはよう、こんにちは、こんばんわ、さようなら、また明日");
else if (A = ……

--ここから追記--
又、文字ではなく関数の場合も御助力お願いします

if      (A() == 1)   example_1();
else if (A() == 2)   example_1(); example_2();
else if (A() == 3)   example_1(); example_2(); example_3();
else if (A() == ……
--ここまで追記--

何方か御力添えをお願いします

 編集済み


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


Name: フリオ  ..プログラマー(32,183ポイント)   Date: 2010/03/23(火) 01:31   No:49546     
Title: Re:質問です    
 
 こんな感じでしょうか。
#include <stdio.h>

int main(void)
{
    char *s[] = {"おはよう", "こんにちは", "こんばんわ", "さようなら" ,"また明日"};
    int n = sizeof s / sizeof(char *), i;
    
    for(i = 0; i < 10; ++ i){
        int j;
        
        printf("%d ", i);
        for(j = 0; j < n && j < i; ++ j) printf("%s ", s[j]);
        putchar('\n');
    }
    return 0;
}

 


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

Name:  ..ぴよぴよ(877ポイント)   Date: 2010/03/23(火) 09:14   No:49555     
Title: Re:質問です    
ありがとうございます
10のところがAに当たるのですね

因みに、これが文字ではなく関数の時も使えますか?


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

Name: conio [URL]  ..比類無きプログラマー(81,177ポイント)   Date: 2010/03/23(火) 10:18   No:49558     
Title: Re:質問です    
---------------------------------------------------------------------------------------
if    (A = 1)     printfDx("おはよう"); 
else if (A = 2)     printfDx("おはよう、こんにちは"); 
else if (A = 3)     printfDx("おはよう、こんにちは、こんばんわ"); 
else if (A = 4)     printfDx("おはよう、こんにちは、こんばんわ、さようなら"); 
else if (A = 5)     printfDx("おはよう、こんにちは、こんばんわ、さようなら、また明日"); 
else if (A = …… 
---------------------------------------------------------------------------------------
とりあえず、上記のコードでは値を代入してしまっているので、修正する必要があると思います。

※関数Aの戻り値を判定するのであれば、
代入演算子(=)ではなく 等価演算子(==)を用います。
(if(A() == 1) みたいな。)


で、要するに指定した値の数だけ文字列を表示する、と言うことで宜しいでしょうか?
それならば、for文で指定した値を終了判定に用いて 繰り返し表示させれば良いと思います。
(添え字の範囲チェックもする。)
----------------------------------------------------------------------------------------
#include <iostream>

char *str[] = {"おはよう", "こんにちは", "こんばんは", "さようなら", "また明日"};
const int StrNum = sizeof(str) / sizeof(str[0]);

int A(int num){
    return(num);
}

void DispStr(int num)
{
    for(int i = 0; i < StrNum && i < num; i++){
        std::cout << str[i] << std::endl;
    }
}

int main(void)
{
    int input = 0;
    
    do{
        std::cin >> input;
        DispStr(A(input));
    }while(input != 999);    //999で終了
    return 0;
}
----------------------------------------------------------------------------------------
 編集済み


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

Name:  ..かけだし(1,023ポイント)   Date: 2010/03/23(火) 11:02   No:49559     
Title: Re:質問です    
C言語では==でしたね、失念していました
どうにも数学と混じってしまいます、ありがとうございました

iostreamというのは初めて聞きましたが、考え方はわかりました
それで、49555と同じことなのですが、文字ではなく関数の時にも使えるでしょうか?

済みません、新規投稿の時点で書くべきでした
遅いかもしれませんが、追記しておきます


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

Name: fatens  ..中級者(9,558ポイント)   Date: 2010/03/23(火) 11:18   No:49562     
Title: Re:質問です    
>文字ではなく関数の時にも使えるでしょうか? 

下のような関数ポインタを使ったことがしたいのでしょうか?

#include <stdio.h>

void funcA(void) {puts("関数A");}
void funcB(void) {puts("関数B");}
void funcC(void) {puts("関数C");}
void funcD(void) {puts("関数D");}
void funcE(void) {puts("関数E");}

int main(void)
{
    void (*pfunc[])(void) = {funcA, funcB, funcC, funcD, funcE};
    int i, n = 3;

    for (i = 0; i < n; ++i)
        (*pfunc[i])();

    return 0;
}


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

Name:  ..かけだし(1,064ポイント)   Date: 2010/03/23(火) 12:17   No:49564 解決!     
Title: Re:質問です    
はい、そんな感じです
こちらは関数ポインタという物を使えばよかったのですね

フリオさん、conioさん、fatensさん、ありがとうございました


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



Name: 真由美  ..入門者(2,948ポイント)   Date: 2010/03/20(土) 18:18   No:49498       
Title: XMLの取得について    
先日、VC++でのXMLについて質問させて頂きました者です。
とあるXMLからname要素を全て取り出す為に
下記の様に記載しているのですが上手く出来ません・・・。
どこがどの様に間違えているのか指摘頂けないでしょうか?

//////////////////////////////////////////////////
ソース
//////////////////////////////////////////////////

System::Xml::XmlDocument^ doc = gcnew System::Xml::XmlDocument();
doc->Load("ここにURLを入れております。");

System::Xml::XmlNodeList^ node = doc->SelectNodes("/user");
String^ textBoxStr = "";
Xml::XmlNodeList^ itemNode = doc->SelectNodes("/user");

for each(Xml::XmlElement^ item in itemNode){
String^ str = ""; 

Xml::XmlNode^ xeTitle = item->SelectSingleNode("name"); 
    if(xeTitle == nullptr || String::IsNullOrEmpty(xeTitle->InnerText)) 
}
//////////////////////////////////////////////////
XML
//////////////////////////////////////////////////

<?xml version="1.0" encoding="UTF-8" ?> 
- <users type="array">

    - <user>
      <id>1121</id> 
      <name>あああ</name> 
      </user>
      
    - <user>
      <id>1282</id> 
      <name>いいい</name> 
      <screen_name>ううう</screen_name> 
      </user>
      
    - <user>
      <id>1860</id> 
      <name>えええ</name> 
      <screen_name>おおお</screen_name> 
      </user>
      
    - <user>
      <id>9563</id> 
      <name>かかか</name> 
      </user>
  </users>



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


Name: Justy  ..伝説なるハッカー(512,754ポイント)   Date: 2010/03/20(土) 21:53   No:49505     
Title: Re:XMLの取得について    
>下記の様に記載しているのですが上手く出来ません・・・
 XPath式は理解していますか?

XPath 構文
ttp://msdn.microsoft.com/ja-jp/library/ms256471(VS.80).aspx

XML Path Language (XPath)
http://www.w3.org/TR/xpath/

XMLパス言語 (XPath)
http://www.doraneko.org/xml/xpath10/19991116/Overview.html

@IT:XML文書内の位置を正確に指し示すXPath
http://www.atmarkit.co.jp/fxml/rensai/rexml08/rexml08.html


 "/user"で取得できるノードはルートが userであるノードだけです。
 しかし提示された xmlのルートは usersで userではありません。
 ルートusers直下の userノードを指定するのでれば "/users/user"とする必要があります。


>とあるXMLからname要素を全て取り出す為
 無条件に nameノードだけを取り出すのであれば、 "//name"として下さい。


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

Name: 真由美  ..入門者(3,197ポイント)   Date: 2010/03/21(日) 01:28   No:49508     
Title: Re:XMLの取得について    
ご回答ありがとうございます。
ご丁寧にリンクまでありがとうございます。

理解度は30%程度です。
何となくと言いますか雰囲気しかわかっておりません。
申し訳御座いません・・・。
教えて頂きましたリンクを見てみたのですが
やはり何となくしか理解できません・・・。
ソースを書きながら勉強していきます。

こういうことでしょうか?
System::Xml::XmlNodeList^ node = doc->SelectNodes("/users/user");
                 String^ textBoxStr = "";
                 Xml::XmlNodeList^ itemNode = doc->SelectNodes("/users/user");
                 
                 for each(Xml::XmlElement^ item in itemNode){
                     String^ str = ""; 
                     
                     Xml::XmlNode^ xeTitle = item->SelectSingleNode("//name"); 
                     if(xeTitle == nullptr || String::IsNullOrEmpty(xeTitle->InnerText)) 
                         continue; 
                     str += "title : " + xeTitle->InnerText + "\r\n"; 
                 }
                 this->textBoxXML->Text = textBoxStr; 

現在このようなソースになっているのですが値が取れておりません・・・。


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

Name: Justy  ..伝説なるハッカー(513,116ポイント)   Date: 2010/03/21(日) 01:51   No:49510     
Title: Re:XMLの取得について    
>何となくと言いますか雰囲気しかわかっておりません
 ここは頑張ってもらうしかないですね。


>こういうことでしょうか?
 何故 SelectNodes("/users/user")が2回あるのかは置いておくとして、
多分 xmlの処理的には合っています。
 ただ、最後のテキストボックスに流し込んでいる textBoxStr変数に入っている文字列が
“空”なだけじゃないでしょうか。

 textBoxStr変数は最初に ""で初期化した後、何もしないまま textBoxMLに流し込んでいるように
見えますよ。

 デバッガでそれぞれの値がどうなっているか確認して見て下さい。


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

Name: 真由美  ..入門者(3,493ポイント)   Date: 2010/03/21(日) 02:10   No:49511     
Title: Re:XMLの取得について    
ご回答ありがとうございます。

すみません、初歩的なミスです。
下記の様に記載して値を取得することは出来ました。
しかし全て同じ行の値を引っ張ってきてしまっております・・・。
配列みたいに[i]の様に書いてみたのですが上手く取得できませんでした。
これを取得することができないでしょうか・・・。

また問題が御座いましたtry-catchを使うと
warning C4101: 'ex' : ローカル変数は 1 度も使われていません。
という警告が出てしまいます。
これを解除する方法はないでしょうか? ※#waning~とかは書かずに

                 try{
                     doc->Load(url);

                     String^ textBoxStr = "";
                     Xml::XmlNodeList^ itemNode = doc->SelectNodes("/users/user");
                     
                     String^ str = ""; 
                     for each(Xml::XmlElement^ item in itemNode){
                         
                         Xml::XmlNode^ xeTitle = item->SelectSingleNode("//name"); 
                         if(xeTitle == nullptr || String::IsNullOrEmpty(xeTitle->InnerText)) 
                             continue; 
                         str += xeTitle->InnerText + "\r\n"; 
                     }
                     this->textBoxXML->Text = str;
                 }catch(Exception^ ex){
                     MessageBox::Show("IDかパスワードが違います。","警告");
                 }



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

Name: Justy  ..伝説なるハッカー(513,448ポイント)   Date: 2010/03/21(日) 03:19   No:49512     
Title: Re:XMLの取得について    
 やはりきちんと XPath式を理解するのが先決でしょう。
 
 //が先頭についた場合、ルートとその全ての子孫ノードの要素すべてにマッチします。
 つまり本来複数ヒットする可能性があるわけですが、SelectSingleNode()を使っているので
一番最初のノードだけが返ります。
 その為、毎回同じノードを差しているわけです。

 今回の場合単純に各 /users/userノードの子である nameタグを拾えればいいので
for each内の SelectSingleNodeのところを
 "//name"  -> "name"
として下さい。



>という警告が出てしまいます
 使わない変数なら書かなければいいのです。
 これは C/C++と同じです。

    catch(Exception^)


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

Name: 真由美  ..入門者(3,561ポイント)   Date: 2010/03/23(火) 07:19   No:49552     
Title: Re:XMLの取得について    
ご回答ありがとうございました。
どちらも問題なく出来ました><

XMLについてはまだ分からないところが多いので調べさせて頂きます。
今回も本当にありがとうございました。


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



Name: ハル  ..ぴよぴよ(46ポイント)   Date: 2010/03/22(月) 13:35   No:49531       
Title: Tatuさんの作ったsinカーブ弾幕について    
Tatuさんにどうしても聞きたいことがあり、投稿させていただきました。

http://www.play21.jp/board/formz.cgi?action=res&resno=49046&page=60&lognum=&id=dixq&rln=49201
のsinカーブについてですが、
描画の際に角度が変わらず、米粒弾や矢印弾を撃った時
全ての弾が同じ向きを向いてしまいます。
目的は進行方向に弾を向かせたいのです。

一応、atan2を使って

double x=boss_shot.bullet[i].x;//座標を記録
double y=boss_shot.bullet[i].y;//座標を記録
boss_shot.bullet[i].x-=sin(boss_shot.bullet[i].angle)*PI2*cos(PI2/160*boss_shot.bullet[i].cnt); 
boss_shot.bullet[i].y+=cos(boss_shot.bullet[i].angle)*PI2*cos(PI2/160*boss_shot.bullet[i].cnt); 
boss_shot.bullet[i].graph_angle = atan2( boss_shot.bullet[i].y-y , boss_shot.bullet[i].x-x );
変化前と変化後の位置から描画角度を求めてみて、graph_angleを使って画像を描画させてみたのですが、
変わりませんでした…。

進行方向に向かせる方法はどうすればいいでしょうか?


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


Name: Tatu  ..プログラマー(35,433ポイント)   Date: 2010/03/22(月) 23:58   No:49543     
Title: Re:Tatuさんの作ったsinカーブ弾幕について    
以前の弾幕から波を描く弾の向きを進行方向に向くように変えました。

以前は弾の持つ一定のspdとangleで動かし、
さらに弾幕関数内で波を描かせるためにずらしてましたが、

今回は弾幕関数内部のみで弾の軌道を計算させています。
弾のspdを0にし、cntが0のときの角度を記憶したのちに
その値とcntで軌道を計算させています。
その後、移動量に応じて角度を計算しています。

ハルさんのコードでは弾幕関数内でどのくらいずらしたかだけで
角度を計算させているのでもとの弾幕での弾の向きに対し
垂直な向きにしかならないはずです。

弾幕関数は長くなり、そのまま投稿することができなくなったので
次のレスで添付します。 編集済み


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

Name: Tatu  ..プログラマー(35,446ポイント)   Date: 2010/03/23(火) 00:02   No:49544     
Title: Re:Tatuさんの作ったsinカーブ弾幕について    
弾幕関数を書いたテキストファイルです。

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

Name: ハル  ..ぴよぴよ(112ポイント)   Date: 2010/03/23(火) 02:28   No:49547 解決!     
Title: Re:Tatuさんの作ったsinカーブ弾幕について    
なるほど!
計算に不足があったことについてすごくわかりました。
勉強になります。

なにからなにまで
本当にありがとうございます


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



Name: あいろん  ..ぴよぴよ(740ポイント)   Date: 2010/03/22(月) 08:28   No:49528       
Title: 改行の仕方について    
サウンドノベル風文字列表示法についてお聞きしたいことがあります
改行ができないのですが、改行するにはどうしたらいいのでしょうか?
今の所、二次元配列をもう一個作って、改行前が描画し終わったら
改行後を描画を開始するみたいなアルゴリズムを考えていますが
改行一つにどことなく非効率的な感じがするので何かもっといい方法とかありますか?


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


Name: kazuoni [URL]  ..ハッカー(139,971ポイント)   Date: 2010/03/22(月) 16:17   No:49533     
Title: Re:改行の仕方について    
管理人さんの作成された
http://dixq.net/g/50.html
の事でしょうか?

とりあえず、自分の考えで作成してみてください。
改行にアルゴリズムが必要なのか想像がつきませんが・・・
一度作成してみてから、質問すると、より明確な方針が見えてくるかと思います。


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

Name: array [URL]  ..熟練のプログラマー(64,933ポイント)   Date: 2010/03/22(月) 16:47   No:49534     
Title: Re:改行の仕方について    
> 改行一つにどことなく非効率的な感じがする

非効率的に感じたプログラムをのせてもらえると回答しやすいと思います。


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



Name: yskey  ..入門者(4,774ポイント)   Date: 2010/03/22(月) 00:06   No:49524       
Title: 龍神録プログラミングの館のプロジェクトファイルについて    
龍神録プログラミングの館で配布されている、projectのなかのRyuJin.slnを開くと
RyuJinの下に「ソースファイル」「ヘッダーファイル」「リソースファイル」
がありますが、リソースファイルとはなんのためにあるのでしょうか?
見た感じDxLibのライブラリがありますが、これは何のためにあるんですか?



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


Name: Justy  ..伝説なるハッカー(513,839ポイント)   Date: 2010/03/22(月) 02:56   No:49526     
Title: Re:龍神録プログラミングの館のプロジェクトファイルについて    
>リソースファイルとはなんのためにあるのでしょうか?
 そのフィルタは VisualStudioでプロジェクトを新規に作成すると自動的に作成されるもので
Windowsアプリで使われるリソースファイルを登録する為に存在します。
 
 拡張子で言うと rc, ico, cur, bmp, gif, jpg, wav等が挙げられ、
アプリのバージョン・著作権者の情報やメニュー・ダイアログなどの構成の情報、
その他アイコン・カーソルなどの画像・サウンドデータなどがそれに当てはまります。

リソース ファイル (Visual Studio)
http://msdn.microsoft.com/ja-jp/library/7zxb70x7(VS.80).aspx


>見た感じDxLibのライブラリがありますが、これは何のためにあるんですか?
 ソリューションエクスプローラにDXライブラリのヘッダを登録しておかなければならない理由は
特にないので、多分 DxLib.hを素早く参照(ランチャ的な意味合い)するために登録して
あるのではないでしょうか。


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

Name: yskey  ..入門者(4,806ポイント)   Date: 2010/03/22(月) 11:26   No:49530     
Title: Re:龍神録プログラミングの館のプロジェクトファイルについて    
Justyさん、ご返信どうもありがとうございます。
つまり製作中のアプリケーションのソースとは直接的には関係ないものなんですね。


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

Name: Justy  ..伝説なるハッカー(513,990ポイント)   Date: 2010/03/22(月) 15:10   No:49532     
Title: Re:龍神録プログラミングの館のプロジェクトファイルについて    
>DXライブラリのヘッダを登録しておかなければならない理由
 あーよくみたら、他にも重大な理由がありました。
 60章を除いて、DXライブラリをプログラムにリンクさせる為に登録しています。
 60章だけはライブラリへのパスを設定する方式でリンクしているようです。


>つまり製作中のアプリケーションのソースとは直接的には関係ないものなんですね
 龍神録に限って言えばソースコードとは直接関連するような使い方はしていませんが、
ものによっては関係することもあります。


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



Name: もこ  ..ぴよぴよ(273ポイント)   Date: 2010/03/22(月) 08:23   No:49527       
Title: ノベルスクリプトを作りたいんですが・・・    
DXライブラリ公式サイトの[サウンドノベル風文字列描画、テキストバッファ使用バージョン]を参考にノベルスクリプトを作ろうと思うんですがファイル入出力関連のプログラムは初挑戦なので悪戦苦闘しているところです。
char String[][ 256 ] =
{
    " ゲームプログラムを習得するための一番の近道はとにかく沢山プログラムを組む",
    "ことである。B" ,
}
上の部分をテキストを読み込み表示させていきたいんですが
意味不明な文字列がでてきてしまいうまくいきません。

char String[][ 256 ] = {0};
file_read = FileRead_open( "script/00.txt" );
FileRead_gets(*String, 256,file_read);    
これ以外は[サウンドノベル風文字列描画]とほとんど同じです。
改行もしてくれなければクリック待ちもしてくれません…。

どなたかご教授おねがいします。


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


Name: nayo  ..上級者(15,035ポイント)   Date: 2010/03/22(月) 11:14   No:49529     
Title: Re:ノベルスクリプトを作りたいんですが・・・    
1バイトずつ全角文字を描画しようとしてるからではないでしょうか
全角文字か半角文字か判定しながら2バイト分の配列に文字を格納しながら1文字ずつ描画してやれば良い気がします
検討違いなこと言ってたらすみません


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



Name: FOX  ..入門者(2,621ポイント)   Date: 2010/03/21(日) 14:11   No:49514       
Title: printfDXについて    
現在、「C言語ゲームプログラミング教室」という参考書で、C言語を勉強させてもらってます。
そこで、デバッグライト(プログラムを動作させながら、変数の中身などを確認)という手法が掲載されており
printf関数はコンソールアプリケーションでしか使用できないので、DXライブラリでは代わりに
printfDX関数を使用する。とあり、
printfDX関数の使用方法は、printf関数と同じです。と書いてありました。
ですが、printfDX関数を、printf関数と同じようにつかってみると、
定義の仕方が違います。のようなエラーがでます。
どのように使えばいいのでしょうか?
ややこしい文章ですみませんが、よろしくお願いします。 編集済み


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


Name: softya [URL]  ..ハッカー(136,479ポイント)   Date: 2010/03/21(日) 14:36   No:49515     
Title: Re:printfDXについて    
どの様に書いたか、貼りつけてもらえますか。正確なエラーメッセージもお願いします。

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

Name: FOX  ..入門者(2,988ポイント)   Date: 2010/03/21(日) 19:05   No:49518     
Title: Re:printfDXについて    
ちょっと書き方をかえたら、エラーの内容が変わりました。プログラムのソースが長いので、全部は載せれませんが、
その周辺だけ載せます。
エラーの内容は
1>mymain.obj : error LNK2005: "int g_akey_previous" (?g_akey_previous@@3HA) は既に myhelper.obj で定義されています。
1>C:\Documents and Settings\****\My Documents\Visual Studio 2008\Projects\chap4\Release\chap4.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
です。
このプロジェクトはmymain.h,mymain.cpp,myhelper.h,myhelper.cppの4つからなっています。
g_akey_previousは
mymain.h内で、
BOOL g_akey_previous = FALSE;//Aキーの状態

そして、myhelper.cppで
while(ProcessMessage()==0 && CheckHitKey(KEY_INPUT_ESCAPE)==0){
        ClsDrawScreen();    //画面を消去
        MyMain();
        printfDx("Aのボタン%d",g_akey_previous);
        ScreenFlip();        //画面を切り替え
        //1ループにかかった時間を計測
        int curtime = GetNowCount() & INT_MAX;
        g_frametime = (float)(curtime - g_lasttime) / 1000.0f;
        g_lasttime = curtime;
        if (g_frametime > 0.03f) g_frametime = 0.03f;
    }
と使用されています。
尚、myhelper.hにはg_akey_previousに関することは何も書かれていません。

以上です。
もし、リンクの問題ならば、解決法を詳しくお願いします。
初心者なので、○○を□□すればよいといわれても、
○○する方法がわかんなかったりします;;
よろしくおねがいします。

 編集済み


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

Name: softya [URL]  ..ハッカー(136,905ポイント)   Date: 2010/03/21(日) 19:32   No:49520     
Title: Re:printfDXについて    
ヘッダの書き方が間違っていますね。
BOOL g_akey_previous = FALSE;//Aキーの状態 
これだと実体の定義ですので、ヘッダでやっては行けませんよ。
実体はmymain.cppで書いてください。
ヘッダでは、
extern BOOL g_akey_previous;
と書きます。

参考にしてください。分割コンパイル
http://www.geocities.jp/ky_webid/c/032.html


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

Name: FOX  ..入門者(3,033ポイント)   Date: 2010/03/22(月) 00:03   No:49523 解決!     
Title: Re:printfDXについて    
ありがとうございます!!
HPを参考にして、おっしゃられたとおりに書き直したらできました。
いつもありがとうございます^^
またおねがいします!


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



Name: kazuoni [URL]  ..ハッカー(137,679ポイント)   Date: 2010/03/13(土) 06:02   No:49127       
Title: DXライブラリ用ウィンドウ生成クラス    
お邪魔します。

以前から、たまに「DXライブラリで二窓はできないのか?」
と質問が見受けられました。
解決方法は基本的にはNOですので、なんとかできないかと思い、
自作してみました。まだ未実装の部分ばかりですが、
一度、雰囲気を見てもらい、改善部分または、根本的な修正を提示していただきたく思います。

今回作成する窓は、DXライブラリで生成されるウィンドウ内でしか移動ができません。
はい、要するに二窓ではないんです。。
ウィンドウ画面をちょっとでも効率よく使おうって感じです。
デバッグの際に変数の動きをみるのに使えるかな?程度です。

(正直、管理に当たって、独自のMouseクラスを用いているので
この時点で一般ユーザー向けの作りではないのですが・・・)

今の段階での主な機能は
・ウィンドウのタイトルバー化
・ウィンドウの移動
のみです。今後は、
・閉じる
・ウィンドウの拡大・縮小
・タイトルバーの右クリック対応
などを予定しています。

使用方法は添付したテキストファイルに記述してある通りです。
以前、考えの段階で一度質問をしましたが、結局はウィンドウクラスと管理クラスの
二種類で作成してしまいました。

・このあたりはもっと細分化したほうがいい
・こんな機能があったら便利だろう
・自分だったら〜〜のように管理するだろう

など何でもよいのでご意見をいただきたいです。
ソースの添付しましたが、解説はほとんどついていないので、
何か説明が必要なところは説明します。

よろしくお願いします。

DL key : kazuoni
http://www1.axfc.net/uploader/Sc/so/91928


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


Name: Ma  ..熟練のプログラマー(60,662ポイント)   Date: 2010/03/13(土) 07:33   No:49128     
Title: Re:DXライブラリ用ウィンドウ生成クラス    
目的がちょっと不明ですが、とりあえず不具合

タイトルバーをドラッグで、移動を意図したのにウィンドウ自体が縮小する。


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

Name: Justy  ..伝説なるハッカー(506,823ポイント)   Date: 2010/03/13(土) 12:14   No:49134     
Title: Re:DXライブラリ用ウィンドウ生成クラス    
 使う側としては main関数内でこのウインドウの表示の為に WManager::SetDrawScreen()や
DxLib::SetDrawScreen(DX_SCREEN_BACK)を何度も呼んだりして表示をしていますが
このあたりはシステムで吸収する・(ウインドウ内の描画を)コールバックに纏めるなどして、
main関数側では WManager::Draw()の一命令で済ませたいところですね。

 それから keyが各ウインドウのハンドルなのであれば、keyを使ってできる
ウインドウの(位置、サイズなどの)システム情報の取得や設定できる関数を増やすとか。


 あとは問題かどうか断定はできませんが、クラスのメソッド内での static変数が幾つかあるようです。
 これはクラスの生成・破棄をした後、再度生成した時でも正常に動作するよう設計されていると
考えてよろしいですか?


>デバッグの際に変数の動きをみるのに使えるかな
 それをやるなら(このシステムとは別の設計になるとは思いますが)こんな感じの機能も
あると便利だと思いますよ。
http://www.play21.jp/board/formz.cgi?action=res&resno=14753&page=&lognum=47&id=dixq&rln=14822#14760


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

Name: dic  ..熟練のプログラマー(56,965ポイント)   Date: 2010/03/13(土) 21:51   No:49146     
Title: Re:DXライブラリ用ウィンドウ生成クラス    
こ、これは・・・私が最近javaに浮気をしていることを知っての作成か・・・w

javaだと 利用するだけでいいんだよね
C/C++だと、一から作らなきゃいけないけど、それが楽しかったり苦しかったり

DxLibもバージョンアップしてるんですね

VC6 だと 下のところだけコンパイル通らないですね
        WData data1 = { 320, 240, 300, 200, p1, "Chara Para" };
        WData data2 = { 350, 200, 32*c_width, 32*c_height, p2, "Chara Working" };
main.cpp(50) : error C2552: 'data1' : 初期化子リストによる個別の識別子の初期化に誤りがあります。
main.cpp(51) : error C2552: 'data2' : 初期化子リストによる個別の識別子の初期化に誤りがあります。


わたくしごとですが
OSごとに動作管理するの大変なのでjavaにいこうかと考えてるんですよ
98,98SE,2000,NT,ME,XP,VISTA,7...
OS購入しないといけないし、動作も確認しないといけないし・・・


欲しい機能としては
タイマー機能があったらいいなと思います
タイマーってDxLib側で管理してるのかな?


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

Name: kazuoni [URL]  ..ハッカー(138,672ポイント)   Date: 2010/03/14(日) 04:22   No:49161     
Title: Re:DXライブラリ用ウィンドウ生成クラス    
返信が遅れて申し訳ありませんでした。

ご回答ありがとうございます。

Maさん
> タイトルバーをドラッグで、移動を意図したのにウィンドウ自体が縮小する。

確かにその通りでした。
修正しました。ご指摘ありがとうございます。


Justyさん
> WManager::SetDrawScreen()やDxLib::SetDrawScreen(DX_SCREEN_BACK)を
> 何度も呼んだりして表示をしている

これは自分もかなり違和感のあったところです。
ユーザーが画面を切り替えるための手続きが
少しでもDXライブラリっぽくできればいいかなと思い、
あんな醜い形にしてしまいました。
ラップして以下の様にする事にしました。
WManager::Order()->SetDrawScreen(key1,e_IN);
WManager::Order()->ClearDrawScreen();
// 描写等
WManager::Order()->SetDrawScreenBack();

WManager::Order()->Draw();


> main関数側では WManager::Draw()の一命令で済ませたいところですね。 

申し訳ありません。「関数WManager::Drawの一命令にする」が想像できません。
例えばユーザーが画面の切り替えの手続きを行うにはどうすればよいのでしょうか?

> ウインドウの(位置、サイズなどの)システム情報の取得や設定できる関数

あ、完全に忘れていました。。
原案の段階ではあったのに、いつの間にか忘れ去っていました。

> クラスのメソッド内での static変数が幾つかあるようです。 

よく考えてみれば、とてもよろしくないです。
なるべく使わない方向にもっていきます。
っというか、普通は使わない方がbetterですよね。(?)

> デバッグ関連

個人的にデバッグに特化したウィンドウも別途で作成しようと思っていたので、
大変参考になります。
外部でパラメータ操作でき、プログラマでなくても調整できるというのは
かなり大きなメリットですね。
個人的に「ソフトリセット」に興味があるので、またいずれか
質問させていただくかと思います^^;


> dicさん
> こ、これは・・・私が最近javaに浮気をしていることを知っての作成か・・・w 

・・・暇だったからですw

> VC6 だと 下のところだけコンパイル通らないですね
すみません。。思いっきり環境依存でしたね。
こういうことがちょくちょくあるんです。
今後は-Wallも用いて、環境依存を減らすよう、努力します。

> タイマー機能があったらいいなと思います
御提案ありがとうございます。
(目的にもよりますが)DxLib.hをみる限り、
時間関連に特化している印象はないような気がします。
やはりWINAPIと絡めないといけませんかね。 編集済み


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

Name: Justy  ..伝説なるハッカー(508,414ポイント)   Date: 2010/03/14(日) 15:42   No:49180     
Title: Re:DXライブラリ用ウィンドウ生成クラス    

> 「関数WManager::Drawの一命令にする」が想像できません。 
> 例えばユーザーが画面の切り替えの手続きを行うにはどうすればよいのでしょうか?

    WManager::Order()->SetDrawScreen(key1,e_IN);
    WManager::Order()->ClearDrawScreen();
    // 描写等
    WManager::Order()->SetDrawScreenBack();
    WManager::Order()->Draw();

 この処理の「描写等」以外の処理はすべて定型ではないでしょうか?
 であれば、登録処理(Entry)は勿論どこかで必要になりますが、描画周りの定型的な処理を
システムの方でラップしてしまえば、ユーザーは描写などの部分だけを書けばよくなるかな、と
思ったわけです。

 例えばイメージですが、Cっぽく書くならこんな感じでしょうか。

void key1_in_func(int key, void *p)
{
    DrawCharaPara(chara.walking_flag==1);
}
void key2_in_func(int key, void *p)
{
    RandomWalking();
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
    ...(略)...
    WData data1 = { 320, 240, 300, 200, p1, "Chara Para" , key1_in_func, NULL, NULL, NULL};
    WData data2 = { 350, 200, 32*c_width, 32*c_height, p2, "Chara Working", key2_in_func, NULL, NULL, NULL };
    WManager::Order()->Entry(data1);
    WManager::Order()->Entry(data2);
    ...(略)...
}


 WDataに追加されているのは e_IN / e_OUTそれぞれの処理の時に呼び出される関数ポインタと
引数となる voidポインタです。

 指定された関数ポインタなどの情報は WDataの中に入っているので、WManager::Draw()の中で

    if(wdata.func_out)
    {
        SetDrawScreen(key,e_OUT);
        DxLib::ClearDrawScreen();
        wdata.func_out(key, wdata.func_out_param);
    }
    
    if(wdata.func_in)
    {
        SetDrawScreen(key,e_IN);
        DxLib::ClearDrawScreen();
        wdata.func_in(key, wdata.func_in_param);
    }
    
    DxLib::SetDrawScreen(DX_SCREEN_BACK);

    if(win->Draw()!=-1)


 のような感じで呼び出せばメインループは

    while(  DxLib::ProcessMessage()==0 && DxLib::ClearDrawScreen()==0 && 
            Keyboard::Order()->Refresh()==true && Keyboard::Order()->GetPress(KEY_INPUT_ESCAPE)!=true &&
            Mouse::Order()->Refresh() && WManager::Order()->Refresh() )
    {
        DrawBox(0,0,640,480,0xffffff,TRUE);
        
        WManager::Order()->Draw();
        DxLib::ScreenFlip();
    }


となり、簡潔になるのではないでしょうか。

 こうなると Refleshと Drawも分ける意味があまりないような気もするので統合してしまうといいのかもしれません。


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

Name: kazuoni [URL]  ..ハッカー(139,211ポイント)   Date: 2010/03/15(月) 22:52   No:49249     
Title: Re:DXライブラリ用ウィンドウ生成クラス    
またまた返事が遅くなってしまい、申し訳ありませんでした。

なるほど。各ウィンドウにmain関数を持たせるみたいな感じですね。
ということで、早速実装してみました。
これならばユーザーはいちいち手続きを書かなくても済み、
コードも管理しやすそうです。一応、Refreshにまとめておきました。


異なるウィンドウ間で共有する変数の管理方法って大変ですね。。
個人的には、ウィンドウで実行されるメソッド、共有したいメンバ等を
クラスで管理し、他のウィンドウから参照するにはアクセッサでいいのかな
と思いましたが、これだと再利用のためのクラスではなく、
お得意のシングルトンクラスになりそうです。
最近思ったのが、シングルトンクラスって再利用性がないのに頻出していいものなのでしょうか?
個人的には便利で使い勝手がいいような気もするのですが。


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

Name: Justy  ..伝説なるハッカー(509,585ポイント)   Date: 2010/03/16(火) 00:43   No:49252     
Title: Re:DXライブラリ用ウィンドウ生成クラス    
>異なるウィンドウ間で共有する変数の管理方法って大変ですね。。 
>〜(略)〜
>お得意のシングルトンクラスになりそうです
 えーと、あんまりよく理解できなかったのですがそこでどうして
シングルトンになってしまうのでしょう?

 単純にウインドウAにはクラスAを、ウインドウBにはクラスBを作って、
共有するクラスSをクラスA・Bにポインタなり参照なりで持たせるだけ、
ですよね?


>シングルトンクラスって再利用性がないのに頻出していいものなのでしょうか?
 それが本当にインスタンスの個数を制限しなければならない妥当な理由があるのであれば
別に構わないと思います。
 ただグローバル的にアクセスしたいとかが理由であれば、否です。


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

Name: Justy  ..伝説なるハッカー(509,678ポイント)   Date: 2010/03/16(火) 01:02   No:49253     
Title: Re:DXライブラリ用ウィンドウ生成クラス    
 あ、あと WManagerクラスの実装はもうちょっとなんとかした方がいいです。

 vectorの1本化とか、ループを整数カウンタでなくiteratorで回すとか、
何回も vec.atでアクセスしないで一時変数に代入してから使うとか、
順番の入れ替えは std::iter_swapが使えないかとか、newした Windowが deleteされていないとかとか。


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

Name: kazuoni [URL]  ..ハッカー(139,632ポイント)   Date: 2010/03/17(水) 06:01   No:49297     
Title: Re:DXライブラリ用ウィンドウ生成クラス    
とりあえずご指摘いただいたところを直してみました。
vectorを使い始めたのが最近なゆえ、どの様に扱うのかがイマイチ分かりませんが・・・。

あとvoidポインタもほとんど初めて実装しますが、大変便利な半面、
しっかり仕様を書いておかないと大変なことになりそうです^^;

DL key : kazuoni
http://www1.axfc.net/uploader/Sc/so/93358


#追記
メソッド内のstaticの変数がそのままになっていました・・・。
ここはメンバ変数に変更しました。

#さらに追記
ダブルクリックのほうもまだおかしかったので、修正しました。 編集済み


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

Name: lbfuvab  ..プログラマー(25,086ポイント)   Date: 2010/03/17(水) 14:23   No:49307     
Title: Re:DXライブラリ用ウィンドウ生成クラス    
DxLibってAllocConsole使えませんでしたっけ?
デバッグ用に2窓にするならAllocConsole+freopenで十分な気も・・・


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

Name: kazuoni [URL]  ..ハッカー(139,395ポイント)   Date: 2010/03/17(水) 21:21   No:49345     
Title: Re:DXライブラリ用ウィンドウ生成クラス    
> DxLibってAllocConsole使えませんでしたっけ?

確か使えたと思います。
ただ今回は、一応グラフィック描写も含めたウィンドウを
目標としているので、わざわざ面倒な事をしてます^^;


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

Name: Justy  ..伝説なるハッカー(510,126ポイント)   Date: 2010/03/18(木) 03:14   No:49364     
Title: Re:DXライブラリ用ウィンドウ生成クラス    
 ウインドウを3枚以上だすと挙動がおかしくなるようです。
 移動した後、別のウインドウを移動しようとすると元のウインドウが移動してしまいます。

 ソースを正しく把握はしていないので推測ですが、ウィンドウの優先順位変更の
if(vec.size()>1)の中って、単純に 
    iter_swap(vec.begin(),it_vec);
だけでいいような気がするのですが、どうなんでしょう?


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

Name: kazuoni [URL]  ..ハッカー(139,595ポイント)   Date: 2010/03/18(木) 05:21   No:49365     
Title: Re:DXライブラリ用ウィンドウ生成クラス    
申し訳ありませんでした。。
ここが明らかにおかしかったです。
else // ウィンドウの優先順位変更
{
    ...
        iter_swap(temp_it_vec,it_vec);
        if(i>=i-1) // ×
    ...

}

else // ウィンドウの優先順位変更
{
    ...
        iter_swap(temp_it_vec,it_vec);
        if(i>=dis-1) // ○
    ...

}



> 単純にiter_swap(vec.begin(),it_vec);
それでも得には支障はないと思いますが、
一応優先順位順にしておいた方が無難かなと思いまして。
0 1 2 3 4 // 3を先頭に

0 1 3 2 4

0 3 1 2 4

3 0 1 2 4


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

Name: Justy  ..伝説なるハッカー(512,433ポイント)   Date: 2010/03/20(土) 03:16   No:49479     
Title: Re:DXライブラリ用ウィンドウ生成クラス    
 遅くなりました。

>一応優先順位順にしておいた方が無難かなと思いまして
 なるほど、確かにそうですね。
 なら代わりに
    std::rotate(vec.begin(), it_vec, it_vec+1);
でも同じことができそうな気がします。


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

Name: kazuoni [URL]  ..ハッカー(139,731ポイント)   Date: 2010/03/21(日) 18:55   No:49517 解決!     
Title: Re:DXライブラリ用ウィンドウ生成クラス    
> std::rotate(vec.begin(), it_vec, it_vec+1); 
素晴らしいです・・・。
stdには本当に便利なものがあるんですね。

何度もご回答していただき、本当にありがとうございました。
今回はこれで解決とさせていただきます。
また、ある程度仕上がったら報告させていただきます。
その時はよろしくお願いします。

次回もよろしくお願いします 編集済み


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



Name: situmon  ..熟練のプログラマー(48,419ポイント)   Date: 2010/03/16(火) 22:26   No:49287       
Title: ぬえの弾幕のつくりかた    
お久しぶりです。いつも親切なお答えを下さりありがとうございます。
前々からきになっていたのですが、東方の封獣ぬえの弾幕はどうつくるのか?がきになりました。
特に、弾幕キメラと鵺的スネークショーの二つの作り方を教えてください。
弾幕キメラは、レーザーが弾に、弾がレーザーになるという弾幕はどうつくればいいのか、
鵺的スネークショーは、あのつながった緑色のレーザー(?)はどう作ればいいのか教えてください。
あのレーザーはこの掲示板で、ほかの方が質問されているトピックをみたとき、
弾をつなげて作っていると書いてありましたが、
詳しく教えてください。
もしつなげたとしてもなぜあのようなつなぎ目が見えない、レーザーになるのでしょうか?
またレーザーに使う一つ一つの弾の画像はどう書けばいいでしょうか?
それと、じっくり見ると先のほうが割と白く後ろのほうは緑色になっていました。
どうすればいいでしょうか?
質問ばかりで申し訳ないですがどうかお願いします。


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


Name: Tatu  ..プログラマー(33,884ポイント)   Date: 2010/03/17(水) 00:54   No:49294     
Title: Re:ぬえの弾幕のつくりかた    
弾幕キメラのような弾幕の関数を作ってみました。

レーザーと弾の切り替えの代わりに
弾の種類boss_shot.bullet[i].kndを変更しています。


/*
弾発射関数
way個のknd番目の種類のcol番目の色の弾を座標(x,y)からb_angleの方向を中心に発射角度をそれぞれd_angleだけずらし、
(ただし、偶数弾などb_angleの方向に撃ちたくないときはb_angleの値をd_angle/2.0だけ大きくする)
angle方向に速度をspd,vxの値をvx,vyの値をvyに(vx,vyはそのままでは機能しない),
状態をstateにしてとばす。この弾はtillまで画面外に出ても消えず、
effが1ならば加算ブレンドして描画され、sflagが1ならば発射音がなる。
*/
void boss_bullet_on(int way,int knd,int col,int cnt,double x,double y,double b_angle,double d_angle,double spd,double vx,double vy,int state,int till,int eff=0,int sflag=1){
    int i=0,k;
    for(i=0;i<way;i++){
        if((k=search_boss_shot())!=-1){
            boss_shot.bullet[k].flag  = 1;
            boss_shot.bullet[k].knd   = knd;//弾の種類
            if(knd==7) boss_shot.bullet[k].kaiten=1;
            else boss_shot.bullet[k].kaiten=0;
            boss_shot.bullet[k].col   = col;//弾の色
            boss_shot.bullet[k].cnt   = cnt;
            boss_shot.bullet[k].x     = x;//座標
            boss_shot.bullet[k].y     = y;
            boss_shot.bullet[k].angle = b_angle+d_angle*(i - way/2);//角度:bが基準、dが間隔
            boss_shot.bullet[k].spd   = spd;//angle方向のスピード
            boss_shot.bullet[k].vx    = vx;//x方向の速度
            boss_shot.bullet[k].vy    = vy;//y方向の速度
            boss_shot.bullet[k].state = state;//弾の状態
            boss_shot.bullet[k].till  = till;//弾が画面外に出ても消えない時間
            boss_shot.bullet[k].eff      = eff;
            if(sflag==1)se_flag[0]=1;
        }
    }
}

void boss_shot_bulletT131(){
    int i,t=boss_shot.cnt%180;
    double x,y,r,angle,angle2;

    if(boss_shot.cnt==0){
        boss.x=FMX/2;
        boss.y=FMY/2-40;
    }

    if(t==0){
        boss_shot.base_angle[0]=bossatan2();
    }
    if(t<60){
        if((boss_shot.cnt/180)%2==0){
            if(t%12==0){
                boss_bullet_on(16,8,1,0,boss.x,boss.y,boss_shot.base_angle[0],PI2/16,2,0,0,1,1200,1,1);
            }
            else if(t%12==6){
                boss_bullet_on(16,8,1,0,boss.x,boss.y,boss_shot.base_angle[0],PI2/16,2,0,0,2,1200,1,1);
            }
        }
        else{
            if(t%12==0){
                boss_bullet_on(16,8,1,0,boss.x,boss.y,boss_shot.base_angle[0]+PI2/32,PI2/16,2,0,0,1,1200,1,1);
            }
            else if(t%12==6){
                boss_bullet_on(16,8,1,0,boss.x,boss.y,boss_shot.base_angle[0]+PI2/32,PI2/16,2,0,0,2,1200,1,1);
            }
        }
    }

    if(t==60){
        for(i=0;i<BOSS_BULLET_MAX;i++){
            if(boss_shot.bullet[i].flag == 1 && (boss_shot.bullet[i].state == 1 || boss_shot.bullet[i].state == 2) ){
                boss_shot.bullet[i].knd=1;
                boss_shot.bullet[i].spd=0;
            }
        }
    }

    if(t>=60){
        for(i=0;i<BOSS_BULLET_MAX;i++){
            if(boss_shot.bullet[i].flag ==1){
                switch(boss_shot.bullet[i].state){
                    case 1:
                        x=boss_shot.bullet[i].x-boss.x;
                        y=boss_shot.bullet[i].y-boss.y;
                        r=sqrt(x*x+y*y);

                        angle=boss_shot.bullet[i].angle;
                        if(t<120){
                            angle2=PI/19200*(t-60);
                        }
                        else
                            angle2=PI/19200*(180-t);

                        boss_shot.bullet[i].angle=angle-angle2;
                        boss_shot.bullet[i].x=boss.x+r*cos(boss_shot.bullet[i].angle);
                        boss_shot.bullet[i].y=boss.y+r*sin(boss_shot.bullet[i].angle);
                        break;
                    case 2:
                        x=boss_shot.bullet[i].x-boss.x;
                        y=boss_shot.bullet[i].y-boss.y;
                        r=sqrt(x*x+y*y);

                        angle=boss_shot.bullet[i].angle;
                        if(t<120){
                            angle2=PI/19200*(t-60);
                        }
                        else
                            angle2=PI/19200*(180-t);

                        boss_shot.bullet[i].angle=angle+angle2;
                        boss_shot.bullet[i].x=boss.x+r*cos(boss_shot.bullet[i].angle);
                        boss_shot.bullet[i].y=boss.y+r*sin(boss_shot.bullet[i].angle);
                        break;
                }
            }
        }
    }

    if(t==179){
        for(i=0;i<BOSS_BULLET_MAX;i++){
            if(boss_shot.bullet[i].flag == 1 && (boss_shot.bullet[i].state == 1 || boss_shot.bullet[i].state == 2)){
                boss_shot.bullet[i].knd=8;
                boss_shot.bullet[i].spd=2;
            }
        }
    }
}


1,089ポイント を落としてしまった。

Name: Tatu  ..プログラマー(35,172ポイント)   Date: 2010/03/17(水) 12:05   No:49302     
Title: Re:ぬえの弾幕のつくりかた    
鵺的スネークショーのような弾幕関数です。

boss_shot.bullet[i].effが1の弾を
重ねることで先端を白くしました。

void boss_shot_bulletT133(){
    int i,t=boss_shot.cnt%180;
    if(t==0){
        boss_shot.base_angle[0]=bossatan2()+rang(PI/256);
    }
    if(t<30 && t%3==0){
        if((boss_shot.cnt/180)%2==0){
            boss_bullet_on(32,10,3,0,boss.x,boss.y,boss_shot.base_angle[0],PI2/32,2,0,0,1,0,1,1);
            boss_bullet_on(32,10,3,0,boss.x,boss.y,boss_shot.base_angle[0]+PI2/64,PI2/32,2,0,0,2,0,1,1);
            if(t<15){
                boss_bullet_on(32,10,3,0,boss.x,boss.y,boss_shot.base_angle[0],PI2/32,2,0,0,1,0,1,1);
                boss_bullet_on(32,10,3,0,boss.x,boss.y,boss_shot.base_angle[0]+PI2/64,PI2/32,2,0,0,2,0,1,1);
            }
        }
        else{
            boss_bullet_on(32,10,3,0,boss.x,boss.y,boss_shot.base_angle[0],PI2/32,2,0,0,3,0,1,1);
            boss_bullet_on(32,10,3,0,boss.x,boss.y,boss_shot.base_angle[0]+PI2/64,PI2/32,2,0,0,4,0,1,1);
            if(t<15){
                boss_bullet_on(32,10,3,0,boss.x,boss.y,boss_shot.base_angle[0],PI2/32,2,0,0,3,0,1,1);
                boss_bullet_on(32,10,3,0,boss.x,boss.y,boss_shot.base_angle[0]+PI2/64,PI2/32,2,0,0,4,0,1,1);
            }
        }
    }

    for(i=0;i<BOSS_BULLET_MAX;i++){
        if(boss_shot.bullet[i].flag == 1){
            switch(boss_shot.bullet[i].state){
                case 1:
                    boss_shot.bullet[i].x-=sin(boss_shot.bullet[i].angle)*PI/3*cos(PI2/48*boss_shot.bullet[i].cnt);
                    boss_shot.bullet[i].y+=cos(boss_shot.bullet[i].angle)*PI/3*cos(PI2/48*boss_shot.bullet[i].cnt);
                    break;
                case 2:
                    if(boss_shot.bullet[i].cnt>=96 && boss_shot.bullet[i].cnt<192){
                        boss_shot.bullet[i].angle+=PI2/96;
                    }
                    else{
                        boss_shot.bullet[i].x-=sin(boss_shot.bullet[i].angle)*PI/3*cos(PI2/48*boss_shot.bullet[i].cnt);
                        boss_shot.bullet[i].y+=cos(boss_shot.bullet[i].angle)*PI/3*cos(PI2/48*boss_shot.bullet[i].cnt);
                    }
                    break;
                case 3:
                    boss_shot.bullet[i].x+=sin(boss_shot.bullet[i].angle)*PI/3*cos(PI2/48*boss_shot.bullet[i].cnt);
                    boss_shot.bullet[i].y-=cos(boss_shot.bullet[i].angle)*PI/3*cos(PI2/48*boss_shot.bullet[i].cnt);
                    break;
                case 4:
                    if(boss_shot.bullet[i].cnt>=96 && boss_shot.bullet[i].cnt<192){
                        boss_shot.bullet[i].angle-=PI2/96;
                    }
                    else{
                        boss_shot.bullet[i].x+=sin(boss_shot.bullet[i].angle)*PI/3*cos(PI2/48*boss_shot.bullet[i].cnt);
                        boss_shot.bullet[i].y-=cos(boss_shot.bullet[i].angle)*PI/3*cos(PI2/48*boss_shot.bullet[i].cnt);
                    }
                    break;
            }
        }
    }
}


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

Name: situmon  ..熟練のプログラマー(48,477ポイント)   Date: 2010/03/18(木) 23:13   No:49410     
Title: Re:ぬえの弾幕のつくりかた    
ありがとうございます。
わかりましたが、
スネークショーの弾を東方のように弾と弾との間がみえず、とてもきれいに、
するにはどうすればいいでしょうか?

追加、
>スネークショーの弾を東方のように弾と弾との間がみえず、とてもきれいに、
>するにはどうすればいいでしょうか?
えっとわかりやすくいうと、弾の画像はどうすればいいでしょうか・・・という質問です。

ブレンドモードを使えば、きれいにできますか?それは知っていたのですが、
先端だけエフェクトフラグというのは思いつきませんでした・・・
ご丁寧にありがとうございます。
 編集済み


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

Name: situmon  ..熟練のプログラマー(48,623ポイント)   Date: 2010/03/21(日) 11:16   No:49513     
Title: Re:ぬえの弾幕のつくりかた    
一度試してみてからもし何かあったら聞きたいので、
画像の件は自己解決にしておきます。
Tatuさん、どうもありがとうございました。


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



Name: サンタクロース  ..初心者(6,885ポイント)   Date: 2010/03/20(土) 19:32   No:49502       
Title: ボスの魔法陣?(後ろで回ってる)について    
こんにちは。
早速ですが、東方の本家みたいにボスの後ろでくるくる回っている魔法陣?
を時間の経過とともにどんどん小さくするにはどうすればよいでしょうか?
いちおう
    DrawRotaGraphF(boss.dx+FX,   boss.dy+FY,boss.endtime/3600,                             i/500,2*PI*(count%340)/340,img_etc[2],    TRUE);
    SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0) ;
としてみたのですが最初の60cntしか描画されませんでした


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


Name: Justy  ..伝説なるハッカー(512,961ポイント)   Date: 2010/03/21(日) 01:09   No:49507     
Title: Re:ボスの魔法陣?(後ろで回ってる)について    
 情報が少ないので憶測ですが。

 DrawRotaGraphF関数では表示スケールは3番めの引数にて double型で指定します。
 その例ですと boss.endtime/3600がそれにあたりますが、まず entimeメンバの型を確認して下さい。

 ここでもし endtimeメンバが int型などの整数型だったりすると、boss.endtime/3600の
演算結果は整数になります。

 つまり boss.endtimeが 0〜3599はどの値であっても結果は 0、3600〜7199で 1になります。
  0と 1の間は決して(滑らかに)補完されることはなく、 boss.endtimeの値が減っていくのであれば
スケール 1だったものが突如として 0になるということがあり得ます。

 これが原因だった場合、対処方としては演算を浮動小数点数で行えば解決するはずです。

 まずはメンバの型を確認してみて下さい。
 編集済み


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

Name: サンタクロース  ..初心者(6,931ポイント)   Date: 2010/03/21(日) 01:47   No:49509 解決!     
Title: Re:ボスの魔法陣?(後ろで回ってる)について    
回答ありがとうございます。そして原因はまさにそのとおりだったようです。
自分はてっきりDrawRotaGraphFの仮引数がfloatなものだから小数点以下もOKだと思っていました
おかげでまた一歩本家のSTGに近づけた気がします(笑)


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



Name: sf4oresama  ..ぴよぴよ(40ポイント)   Date: 2010/03/20(土) 16:11   No:49488       
Title: 中1でも、ゲームプログラミングってできますか?    
このごろ、将来のためにゲームプログラミングをやり始めたのですが。
最初でつまずいてしまいました、そのときに中1じゃあできないんじゃないかと、
思いました。
中1で、プログラミングってできるのでしょうか。


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


Name: sf4oresama  ..ぴよぴよ(45ポイント)   Date: 2010/03/20(土) 16:30   No:49491     
Title: Re:中1でも、ゲームプログラミングってできますか?    
> このごろ、将来のためにゲームプログラミングをやり始めたのですが。
> 最初でつまずいてしまいました、そのときに中1じゃあできないんじゃないかと、
> 思いました。
> 中1で、プログラミングってできるのでしょうか。


 編集済み


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

Name: softya [URL]  ..ハッカー(136,058ポイント)   Date: 2010/03/20(土) 16:33   No:49492     
Title: Re:中1でも、ゲームプログラミングってできますか?    
この掲示板で小学生(まもなく中学生)でゲームプログラミングしている人はいますので、
http://www.play21.jp/board/formz.cgi?action=res&resno=48042&page=&lognum=151&id=dixq&rln=49076
出来ないはずはないと思いますよ。
確かに習っていない数学の事で困ることはあると思いますが、こちらの掲示板で相談してもらえばと思います。
※ 習っていないから出来ないなんて事はありません。流石に中一だと早いかも知れない数学レベルもありますが、代用出来る案も出せると思います。



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

Name: sf4oresama  ..ぴよぴよ(71ポイント)   Date: 2010/03/20(土) 16:35   No:49493 解決!     
Title: Re:中1でも、ゲームプログラミングってできますか?    
softyaさんありがとうございます。
何か、自信がついてきました。


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

Name: Tororo  ..初心者(5,258ポイント)   Date: 2010/03/20(土) 16:45   No:49494     
Title: Re:中1でも、ゲームプログラミングってできますか?    
呼ばれましたかw?

年は、あまり関係ないと思います。
きっと出来ますよ!
間違いなく出来ます!


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

Name: situmon  ..熟練のプログラマー(48,571ポイント)   Date: 2010/03/20(土) 21:01   No:49504     
Title: Re:中1でも、ゲームプログラミングってできますか?    
中2です。
解決されたみたいですが、一応。

中1からやりはじめましたが、できますよ。
今までは素材をうまく作れるように練習してましたが。
今はゲームをつくってます。


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



Name: ふぇす  ..ぴよぴよ(217ポイント)   Date: 2010/03/20(土) 16:25   No:49489       
Title: またまた失礼いたします。    
龍神録プログラミングの館にて、今『自機にショットを打たせてみよう』の項目をやっています。

書いてある通りに記述はしているものの、

1>c:\users\@@@\desktop\project\project\1章\mydat\source\cshot.cpp(56) : error C2039: 'shot_cnt' : 'ch_t' のメンバではありません。
1>        c:\users\@@@\desktop\project\project\1章\mydat\include\struct.h(12) : 'ch_t' の宣言を確認してください。
1>c:\users\@@@\desktop\project\project\1章\mydat\source\cshot.cpp(57) : error C2039: 'shot_cnt' : 'ch_t' のメンバではありません。
1>        c:\users\@@@\desktop\project\project\1章\mydat\include\struct.h(12) : 'ch_t' の宣言を確認してください。
1>c:\users\@@@\desktop\project\project\1章\mydat\source\cshot.cpp(65) : error C2039: 'shot_cnt' : 'ch_t' のメンバではありません。
1>        c:\users\@@@\desktop\project\project\1章\mydat\include\struct.h(12) : 'ch_t' の宣言を確認してください。

とエラーが出てしまいます。
先ほどからいろいろと試してはいるのですが・・・

どなたか解説をお願いします。


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


Name: softya [URL]  ..ハッカー(136,260ポイント)   Date: 2010/03/20(土) 17:21   No:49497     
Title: Re:またまた失礼いたします。    
まずコンパイル・エラーの見方を紹介します。
「C2039」と言うコードがエラーの種類を表しています。
http://msdn.microsoft.com/ja-jp/library/fdwb3fd7%28VS.80%29.aspx
このサイトではエラーの詳細な説明を受けることが出来ます。他のエラーも、このサイトで確認できますのでエラーが出たらまず読んでみてください。
さて、このエラーは書かれている通りshot_cntのメンバ変数がcn_t構造体の宣言に含まれていませんと言うことです。一括ダウンロード出来るソースコードと自分のソースコードでcn_t構造体違いを確認してみてください。
http://dixq.net/rp/zip/project.zip
 編集済み


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

Name: ふぇす  ..ぴよぴよ(232ポイント)   Date: 2010/03/20(土) 18:59   No:49500 解決!     
Title: Re:またまた失礼いたします。    
わざわざありがとうございます!

またお願いいたします。


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



Name: Tororo  ..初心者(5,182ポイント)   Date: 2010/03/17(水) 19:44   No:49333       
Title: 無題    
http://www1.axfc.net/uploader/Li/so/61752
pass Tororo

前のスレは質問をして、解決にしてしまったので
新規投降させていただきます。

ステージを15面になりました、限りなくオカシナあたり判定は無くなりました。
感想をいただきたいです。


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


Name: Tororo  ..初心者(5,226ポイント)   Date: 2010/03/17(水) 19:47   No:49334     
Title: Re:無題    
しまった無題にしてしまったw
ショウガナイノデこのまま続けようと思います。

Dixqさんへ
 出来ればでいいのでタイトルを[作品公開]等に変えて頂けませんか?


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

Name: Tororo  ..初心者(5,319ポイント)   Date: 2010/03/20(土) 17:02   No:49495     
Title: 作品公開    
http://www1.axfc.net/uploader/Sc/so/94322
pass Tororo
簡単な弾幕シュミレータを作って見ました。
まだ設定の項目は少ないですが、上手にパラメータを変えれば、
きれいな弾幕が作れるかもですw


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

Name: Tororo  ..初心者(5,355ポイント)   Date: 2010/03/20(土) 17:03   No:49496     
Title: Re:作品公開    
間違えましたw
pass tororoです
最初は小文字です。
失礼しましたm(_ _)m


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



Name: ふぇす  ..ぴよぴよ(190ポイント)   Date: 2010/03/19(金) 16:45   No:49459       
Title: 無題    
先ほどはありがとうございます。

また問題が発生したので質問します。

『敵にショットを打たせよう』の節で、書いてある通りに記述したのですが、『SHOT_BULLET_MAX' : 定義されていない識別子です。』になってしまい、解決方法を模索しながらいろいろ変えて実行しても結果が変わりません。

何が原因なのでしょうか?


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


Name: fatens  ..中級者(9,034ポイント)   Date: 2010/03/19(金) 16:54   No:49460     
Title: Re:無題    
つい最近、同じ質問がありました。
http://www.play21.jp/board/formz.cgi?action=res&resno=49278&page=&lognum=&id=dixq&rln=49290


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

Name: ふぇす  ..ぴよぴよ(224ポイント)   Date: 2010/03/20(土) 16:26   No:49490 解決!     
Title: Re:無題    
ありがとうございました!

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



Name: TKOZ  ..熟練のプログラマー(47,128ポイント)   Date: 2010/03/17(水) 18:02   No:49320       
Title: マップチップの坂道について    
こんばんは、TKOZです。

数ヶ月前に同じような質問をしたのですが、スレッドが下がってしまったのと、
また作りたくなったので質問します。

マップチップ内の当たり判定で坂道を移動させているのですが、どうしても
下記のP点でAの坂道にはまってしまいます。
  P凵ゥB □
 凵ゥA □□
□□□□□□

どうすれば自然に坂道を登る事が出来ますでしょうか?
アドバイスください。

あと、マップチップの番号が3のとき(右下り45度の坂)の時の判定が判定されるのですが、
地面にめり込んでしまいます。
これは何故なんでしょうか?

void Hit()
{
    int i,j;
    static int hitflag[100]={0};
    static int yy[100]={0};

    if(Map[(int)(Player.y+63)/32][(int)(Player.x+31)/32]==2)//Mapは2なら
    {
        //高さを計算
        int h = ((int)(Player.x+31)%32) * -1;
        
        if((Player.y+63) >= (Player.y+63)+h)
        {
            //1回しか代入しないようにする
            if(hitflag[0]==0)
            {
                yy[0] = Player.y;
            }
            //高さを加算する
            Player.y = yy[0] + h;
            //フラグを1にする(これは、他の処理で使用する)
            hitflag[0]=1;
        }
    }
    else if(Map[(int)(Player.y+63)/32][(int)(Player.x)/32]==3)//Mapは3なら
    {
        //高さを計算
        int h = ((int)(Player.x)%32);
        
        if((Player.y+63) <= (Player.y+63)+h)
        {
            //1回しか代入しないようにする
            if(hitflag[1]==0)
            {
                yy[1] = Player.y;
            }
            //高さを加算する
            Player.y = yy[1] + h;
            //フラグを1にする(これは、他の処理で使用する)
            hitflag[1]=1;
        }
    }
    else
    {
        hitflag[1]=0;
        hitflag[0]=0;
    }
    
    
    //DrawFormatString(0,0,GetColor(255,255,255),"height=%d",-1*mx);
}
 編集済み


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


Name: TKOZ  ..熟練のプログラマー(47,168ポイント)   Date: 2010/03/17(水) 18:09   No:49321     
Title: Re:マップチップの坂道について    
ソースコードをアップします。
お願いします。


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

Name: mera  ..ぴよぴよ(197ポイント)   Date: 2010/03/17(水) 22:45   No:49353     
Title: Re:マップチップの坂道について    
ソースをしっかり読んでいないのではっきりとは言えませんが、
三角形は上に行く程幅がせまくなりますよね。
だから坂の上のほうでは三角形を素通りして次のブロックとあたり判定をするんではないかと。
今回のケースだと、隣のブロックも三角形なので、空中とのあたり判定になってしまって、
そのまま移動してしまうんだと思います。
解決策としては坂を構成する場合、三角形だけで作るのではなく、表面(?)だけ三角形で
中身は四角でびっしり埋めないとだめなんだと思います。

見当違いのことを言っているようでしたらすみません。


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

Name: TKOZ  ..熟練のプログラマー(47,276ポイント)   Date: 2010/03/18(木) 16:29   No:49385     
Title: Re:マップチップの坂道について    
meraさんへ

なんとなく分かりました。
チップの種類を細かく分ければいいんですね?
普通のまっすぐなチップは32ドットで、
坂道だけは1ドットずつのチップにすれば解決しそうです。

しかし、そのためのデータ構造が複雑化しそうですね。

さて、どうしますか…。



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

Name: softya [URL]  ..ハッカー(135,194ポイント)   Date: 2010/03/18(木) 17:06   No:49387     
Title: Re:マップチップの坂道について    
すいません。アレ時間がなくてから検討できてません。

>坂道だけは1ドットずつのチップにすれば解決しそうです。 

仮想的なものなので実際にチップ化する必要は無いと思いますが、とりあえず1ドット化を試してみてはどうでしょうか?現実にやると重いと思います。

>そのためのデータ構造が複雑化しそうですね。 

グラフィックデータのカラーを直接使う手はありますね。速度を無視してあくまで実験という意味ですが。


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

Name: mera  ..ぴよぴよ(244ポイント)   Date: 2010/03/18(木) 17:28   No:49390     
Title: Re:マップチップの坂道について    
>TKOZさん
あ〜すみません。わかりにくかったですね。
要は今

 
刧凵@  となっているものを

 


にするだけで大丈夫だと思います。


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

Name: TKOZ  ..熟練のプログラマー(49,077ポイント)   Date: 2010/03/18(木) 18:23   No:49391     
Title: Re:マップチップの坂道について    
問題は解決しました。まあ、まだ完全ではないですが…。
ソースコードを書きます。

ソースコードの中にサイト名「Javaでゲーム作りますが何か?」の中のコードを引用しています。
URLを下記に示します。
http://javagame.skr.jp/index.php?FrontPage#u1b27b69


#include"DxLib.h"
#include<math.h>

typedef struct P{
    float x;
    float y;
    int width;
    int height;
    int jumpflag;
    float vx;
    float vy;
    bool onGround;
}P;

typedef struct SLOPE{
    int number;//番号
    int imagedata;//坂道データ
}SLOPE;
int ScreenHandle;

SLOPE Chip[6]={0};

class Point{
public:
    int x;
    int y;
    Point()
    {
        x=0;
        y=0;
    }
    Point(int xx,int yy)
    {
        x=xx;
        y=yy;
    }
};

P Player={0};

int Map[15][20]={
    {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0},
    {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0},
    {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0},
    {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0},
    {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0},
    
    {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0},
    {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0},
    {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0},
    {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0},
    {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0},
    
    {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0},
    {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0},
    {0,0,0,0,0, 0,2,3,0,4, 5,1,1,6,7, 0,0,0,0,0},
    {1,3,0,0,0, 2,1,1,3,0, 0,0,2,3,0, 0,2,3,0,1},
    {1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1}
};


int pixelsToTiles(double pixels)
{
    return (int)floor(pixels / 32);
}
int tilesToPixels(int tiles)
{
    return tiles * 32;
}
int CheckHit(int px,int py,int tx1,int ty1,int tx2,int ty2,int tx3,int ty3)
{
    HITRESULT_LINE a;
    
    a=HitCheck_Line_Triangle(VGet(px,py, 0 ), VGet(px,py,0), 
        VGet(tx1,ty1,0), VGet(tx2,ty2,0), VGet(tx3,ty3,0) ) ;
    if(a.HitFlag==1)
    {
        return 1;    
    }
    return 0;
}

void Init()
{
    Player.x= 320;
    Player.y = 0;
    Player.jumpflag = 1;
    Player.width = 32;
    Player.height = 64;
    Player.vx=1;
    Player.vy=1;

    int i,j,k;
    char str[100];
    
    ScreenHandle=MakeARGB8ColorSoftImage(640,480) ;

    for(i=0;i<6;i++)
    {
        Chip[i].number =i;
        sprintf(str,"./Data/%d.bmp",i);
        Chip[i].imagedata = LoadSoftImage(str) ;//0.bmpは右上45度
        //1.bmpは右下45度、2.bmpと3.bmpは右上30度、4.bmpと5.bmpは右下30度
    }
}

Point gettile(int xx,int yy)
{
        int newX = ceil(xx);
        int newY = ceil(yy);

        double fromX = min(Player.x, newX);
        double fromY = min(Player.y, newY);
        double toX = max(Player.x, newX);
        double toY = max(Player.y, newY);
        
        int fromTileX = pixelsToTiles(fromX);
        int fromTileY = pixelsToTiles(fromY);
        int toTileX = pixelsToTiles(toX + Player.width-1);
        int toTileY = pixelsToTiles(toY + Player.height - 1);

        // 衝突しているか調べる
        for (int x = fromTileX; x <= toTileX; x++) {
            for (int y = fromTileY; y <= toTileY; y++) {
                // 画面外は衝突
                if (x < 0 || x >= 20) {
                    return Point(x, y);
                }
                if (y < 0 || y >= 15) {
                    return Point(x, y);
                }
                // ブロックがあったら衝突
                if (Map[y][x] == 1) {
                    return Point(x, y);
                }
            }
        }
        
        return Point(-1,-1);
}

 編集済み


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

Name: TKOZ  ..熟練のプログラマー(50,026ポイント)   Date: 2010/03/18(木) 18:25   No:49392     
Title: Re:マップチップの坂道について    
2/3です。(ソースコード)

void DrawMap()
{
    int i,j;
    FillSoftImage(ScreenHandle,0,0,0,0) ;
    for(i=0;i<15;i++)
    {
        for(j=0;j<20;j++)
        {
            if(Map[i][j]==1)
            {
                DrawBox(j*32 , i*32 , j*32+32 , i*32+32 ,
                    GetColor(255,255,255) , TRUE ) ;
            }
            if(Map[i][j]==2)
            {
                DrawTriangle( j*32, i*32+32, j*32+32, i*32+32,
                    j*32+32, i*32, GetColor(255,0,0) , TRUE ) ;
                BltSoftImage( 0, 0, 32, 32, Chip[0].imagedata , 
                    j*32, i*32, ScreenHandle ) ;

            }
            if(Map[i][j]==3)
            {
                DrawTriangle( j*32,i*32,j*32,i*32+32,
                    j*32+32,i*32+32,GetColor(0,255,0),TRUE);
                BltSoftImage( 0, 0, 32, 32, Chip[1].imagedata , 
                    j*32, i*32, ScreenHandle ) ;
            }
            if(Map[i][j]==4)
            {
                DrawTriangle(j*32,i*32+32,j*32+64,i*32,
                    j*32+64,i*32+32,GetColor(255,0,255),TRUE);
                BltSoftImage(0,0,32,32,Chip[2].imagedata ,
                    j*32,i*32,ScreenHandle);
            }
            if(Map[i][j]==5)
            {
                BltSoftImage(0,0,32,32,Chip[3].imagedata,
                    j*32,i*32,ScreenHandle);
            }
            if(Map[i][j]==6)
            {
                DrawTriangle(j*32,i*32+32,j*32+64,i*32+32,
                    j*32,i*32,GetColor(255,255,0),TRUE);
                BltSoftImage(0,0,32,32,Chip[4].imagedata ,
                    j*32,i*32,ScreenHandle);
            }
            if(Map[i][j]==7)
            {
                BltSoftImage(0,0,32,32,Chip[5].imagedata ,
                    j*32,i*32,ScreenHandle);
            }
        }
    }
}

int GetCol(int handle,int x,int y)
{
    int r,g,b,a;

    GetPixelSoftImage(handle,  x, y, &r, &g, &b, &a );
    return GetColor(r,g,b);
}

void Hit()
{
    
    
    if(GetCol(ScreenHandle,Player.x+31,Player.y+63)==GetColor(255,0,0))
    {
        Player.y-=3;
        Player.vy=0;
    }
    if(GetCol(ScreenHandle,Player.x,Player.y+63)==GetColor(255,0,0))
    {
        Player.y-=3;
        Player.vy=0;
    }


    
    
    
}




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

Name: TKOZ  ..熟練のプログラマー(50,179ポイント)   Date: 2010/03/18(木) 18:26   No:49393     
Title: Re:マップチップの坂道について    
3/3です。(終わり)

void DrawPlayer()
{
    static int prev=0;

    DrawBox(Player.x,Player.y,Player.x+Player.width ,Player.y+Player.height ,
        GetColor(0,0,255),TRUE);

    if(CheckHitKey(KEY_INPUT_RIGHT))
    {
        Player.vx+=0.2;
        if(Player.vx>2) Player.vx=2;
    }
    if(CheckHitKey(KEY_INPUT_LEFT))
    {
        Player.vx-=0.2;
        if(Player.vx<-2) Player.vx=-2;
    }
    if(!CheckHitKey(KEY_INPUT_RIGHT) && !CheckHitKey(KEY_INPUT_LEFT))
    {
        Player.vx=0;
    }
    Player.x+=Player.vx;
    if(!prev && CheckHitKey(KEY_INPUT_X))
    {
        Player.vy=-16;
        Player.jumpflag = 1;
        Player.onGround = false;
    }

    prev=(CheckHitKey(KEY_INPUT_X));

}

bool equal(Point a,Point b)
{
    if(a.x=b.x && a.y==b.y)
        return true;
    else
        return false;
}



void UpDate()
{
    // 重力で下向きに加速度がかかる
        Player.vy += 1;

        // x方向の当たり判定
        // 移動先座標を求める
        double newX = Player.x + Player.vx;
        // 移動先座標で衝突するタイルの位置を取得
        // x方向だけ考えるのでy座標は変化しないと仮定
        Point tile;
        
        tile = gettile(newX, Player.y);
        
        if (equal(tile,Point(-1,-1) )) {
            // 衝突するタイルがなければ移動
            Player.x = newX;
        } else {
            // 衝突するタイルがある場合
            if (Player.vx > 0) { // 右へ移動中なので右のブロックと衝突
                // ブロックにめりこむ or 隙間がないように位置調整
                Player.x = tilesToPixels(tile.x) - 32;//32→WIDTH
            } else if (Player.vx < 0) { // 左へ移動中なので左のブロックと衝突
                // 位置調整
                Player.x = tilesToPixels(tile.x + 1);
            }
            Player.vx = 0;
        }

        // y方向の当たり判定
        // 移動先座標を求める
        double newY = Player.y + Player.vy;
        // 移動先座標で衝突するタイルの位置を取得
        // y方向だけ考えるのでx座標は変化しないと仮定
            tile = gettile(Player.x, newY);
            
        if (equal(tile,Point(-1,-1))) {
            // 衝突するタイルがなければ移動
            Player.y = newY;
            // 衝突してないということは空中
            Player.onGround = false;
        } else {
            // 衝突するタイルがある場合
            if (Player.vy > 0) { // 下へ移動中なので下のブロックと衝突(着地)
                // 位置調整
                Player.y = tilesToPixels(tile.y) - 64;//32→HEIGHT
                // 着地したのでy方向速度を0に
                Player.vy = 0;
                // 着地
                Player.onGround = true;
            } else if (Player.vy < 0) { // 上へ移動中なので上のブロックと衝突(天井ごん!)
                // 位置調整
                Player.y = tilesToPixels(tile.y + 1);
                // 天井にぶつかったのでy方向速度を0に
                Player.vy = 0;
            }
        }
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hP,LPSTR lpC,int nC)
{
    
    SetGraphMode(640,480,32);
    ChangeWindowMode(TRUE) ;
    SetMainWindowText("斜め坂(当たり判定チェック)"); //ウィンドウのタイトル
    if(DxLib_Init() == -1) return (-1);    //DXライブラリ初期化
    
    //データ読み込み中と表示する
    DrawString( 0 , 0 , "データ読み込み中" , GetColor(255,255,255) );

    //各種変数の初期化など
    Init();
    //乱数の初期化
    srand((unsigned)GetTickCount());
    
    //メインループ
    while( ProcessMessage()==0 && CheckHitKey(KEY_INPUT_ESCAPE)==0){
        
        ProcessMessage();
        ClsDrawScreen();            //画面を初期化

        DrawMap();
        
        //DrawSoftImage( 0, 0, ScreenHandle ) ;

        DrawFormatString(0,0,GetColor(255,255,255),"Player.y=%d",Player.y);
        DrawPlayer();
        UpDate();
        Hit();
        

        ScreenFlip();                //フリップする
    }
    
    DxLib_End();    //DXライブラリ終了処理
    return (0);        //終了
}
 編集済み


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

Name: TKOZ  ..熟練のプログラマー(50,680ポイント)   Date: 2010/03/18(木) 18:38   No:49394     
Title: Re:マップチップの坂道について    
softyaさんへ

>グラフィックデータのカラーを直接使う手はありますね。速度を無視してあくまで実験という意味ですが。
グラフィックデータ使いましたよ。その前のコードは、
typedef struct CHIP{
   int kind;
   int data[32][32];
}CHIP;
CHIP Chip[5]={
    {0,
    0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
  略(ry
    },
    {1,
    0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1,
    略(ry
};
とひたすら0と1の羅列が配列に代入されてました。(笑)


>meraさんへ
>要は今 

  
刧凵@  となっているものを 

  
凵 

>にするだけで大丈夫だと思います。 

僕のアルゴリズムでは、それだけでは駄目みたいでした。
せっかくの助言ありがとうございます。


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

Name: TKOZ  ..熟練のプログラマー(50,768ポイント)   Date: 2010/03/20(土) 12:59   No:49484 解決!     
Title: Re:マップチップの坂道について    
今度、「14歳からはじめる C言語わくわくゲームプログラミング教室 Visual Studio 2008編」
という本を買うことにしました。
ベクトルでの坂道の実装に興味が沸いたからです。

それでは、みなさま、ありがとうございました。
解決にします。


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



Name:  ..ぴよぴよ(130ポイント)   Date: 2010/03/19(金) 15:26   No:49451       
Title: 無題    
現在、VC++でフリーソフトを作っております。
起動時に別のフォームからメインフォームに値を渡すという作業を行おうと思っております。
調べてみるとゲッター?ということをすれば出来るみたいということまでは理解できました。

しかし上手く値を取得できません・・・。
Form1のIDという変数にサブフォームの値を入力したいです。

//ID = Set->GetID();

根本的に間違えているのでしょうか?


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


Name:  ..ぴよぴよ(176ポイント)   Date: 2010/03/19(金) 15:27   No:49452     
Title: Re:無題    
無題で投稿してしまい申し訳御座いません。
タイトルは「サブフォームからの値の受け渡し」でお願いします。


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

Name:  ..ぴよぴよ(202ポイント)   Date: 2010/03/20(土) 02:19   No:49477     
Title: Re:無題    
色々と弄ってみたのですができません・・・。
私の理解が間違えているのでしょうか?


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

Name: Justy  ..伝説なるハッカー(512,433ポイント)   Date: 2010/03/20(土) 03:28   No:49481     
Title: Re:無題    
 コードみた限りだと

× SetUp::Form^ Set;
○ SetUp^ Set;

 なのでは? 編集済み




Name: mera  ..ぴよぴよ(0ポイント)   Date: 2010/03/17(水) 22:15   No:49351       
Title: へにょりレーザー    
またお世話になります。
タイトルの通り、へにょりレーザーの実装の仕方がわからなくて悩んでいます。
あたり判定のほうは見えないので力技で近似することもできないこともないんですけど
曲がるレーザーの描画の仕方がわかりません。
普通の弾を連続して表示してもどうしても線がボコボコになってしまいますし、
曲率半径ごとに画像を用意してDrawRectGraphで表示したり(苦笑)いろいろ試してはいるのですが
なかなかきれいに表示できないので質問させてもらいました。

具体的なことだけでなく、こうしてみるのはどうだろう的なことでも全然かまいませんので
どうかよろしくお願いします。

もしかすると既出の質問かもしれませんが、もしそうなら解答してあるページのurlを
貼っていただけるとありがたいです。


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


Name: situmon  ..熟練のプログラマー(48,500ポイント)   Date: 2010/03/18(木) 23:17   No:49413     
Title: Re:へにょりレーザー    
自分も聞いていますが、どうやら、丸い弾同士をつなげるみたいです。
アルファ値や、加算(たしか)値などの画像の表示の仕方に工夫をするみたいです。
SetDrawBlendModeは試しましたか?
DXライブラリのリファレンスで調べてみてください。

すいません聞いたばかりで明確なことはいえませんが・・・



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

Name: あ〜る  ..上級者(17,120ポイント)   Date: 2010/03/19(金) 10:10   No:49434     
Title: Re:へにょりレーザー    
龍神録の館の、ケロちゃん雨風に負けずのとこに書いてある弾がギラつくエフェクトで描画したら一応繋がって見えるようになりました
ただ描画速度の問題や、透明感が無いのでまだまだ要改良ですが…(-.-;)


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

Name: Dixq(管理人)  ..ぴよぴよ(282ポイント)   Date: 2010/03/19(金) 12:42   No:49438     
Title: Re:へにょりレーザー    
弾を重ねても1ピクセル単位で連続させないとキレイに繋がらないと思います。
それは不可能ですし、繋がってない部分はどう加算しても繋がって見えません。

レーザーの画像をModigraphで軌跡をつなげてはいかがでしょう


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

Name: mera  ..ぴよぴよ(388ポイント)   Date: 2010/03/20(土) 01:54   No:49475 解決!     
Title: Re:へにょりレーザー    
みなさんいろいろご指摘ありがとうございます。

あれからいろいろ試行錯誤した結果
弾同士をDrawModiGraphでうまく連結する方法を考えました。
・・・と思ったら上で全く同じ方法を管理人さんが提案して下さってたのですね。


今までの方法に比べればかなり満足のいく結果が得られました。
画像をアップしておきます。

もうこれ以上の方法は(画像を曲げて表示する方法でもない限り)ないように思いますので
(改良という意味ではまだまだ奥が深そうですが)一応これで解決ということにさせてもらいます。
どうもありがとうございました



(編集)色をわかりやすくするために画像を差し替えました 編集済み


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

Name: mera  ..ぴよぴよ(490ポイント)   Date: 2010/03/20(土) 02:03   No:49476     
Title: Re:へにょりレーザー    
>あ〜るさん

この方法でも完全な曲線は描けないのでその方法を使えばもっときれいに描画できそうですね!
試してみます。アドバイスありがとうございます。 編集済み


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

Name: mera  ..ぴよぴよ(976ポイント)   Date: 2010/03/20(土) 02:38   No:49478     
Title: Re:へにょりレーザー    
--- 編集済み

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

Name: mera  ..ぴよぴよ(855ポイント)   Date: 2010/03/20(土) 03:18   No:49480     
Title: Re:へにょりレーザー    
-- 編集済み

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



Name: FOX  ..ぴよぴよ(627ポイント)   Date: 2010/03/18(木) 23:23   No:49414       
Title: 困っています    
<font color="Navy">ソースにはミスがないのに、エラー(↓)がでてしまいます。<font>

1>libjpeg.lib(jpegtran.obj) : error LNK2001: 外部シンボル "_jtransform_execute_transformation" は未解決です。
1>libjpeg.lib(jpegtran.obj) : error LNK2001: 外部シンボル "_jcopy_markers_execute" は未解決です。
1>libjpeg.lib(jpegtran.obj) : error LNK2001: 外部シンボル "_jtransform_adjust_parameters" は未解決です。
1>libjpeg.lib(jpegtran.obj) : error LNK2001: 外部シンボル "_jtransform_request_workspace" は未解決です。
1>libjpeg.lib(jpegtran.obj) : error LNK2001: 外部シンボル "_jcopy_markers_setup" は未解決です。
1>libjpeg.lib(jpegtran.obj) : error LNK2001: 外部シンボル "_write_stdout" は未解決です。
1>libjpeg.lib(jpegtran.obj) : error LNK2001: 外部シンボル "_read_stdin" は未解決です。
1>libjpeg.lib(jpegtran.obj) : error LNK2001: 外部シンボル "_read_scan_script" は未解決です。
1>libjpeg.lib(jpegtran.obj) : error LNK2001: 外部シンボル "_keymatch" は未解決です。
1>C:\Documents and Settings\takuma\My Documents\Visual Studio 2008\Projects\chap4\Release\chap4.exe : fatal error LNK1120: 外部参照 9 が未解決です。


Release構成でデバックしています。
見てのとおりVisualStudio 2008です。
初心者なので何のエラーなのかさっぱりわかりません;;。助けてもらえると光栄です。
どうかお願します。


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


Name: softya [URL]  ..ハッカー(135,500ポイント)   Date: 2010/03/19(金) 00:02   No:49418     
Title: Re:困っています    
これは、リンクのエラーですね。
Debugビルドが成功していてReleaseビルドに失敗したと言うことでしょうか?
Debugビルドで成功しているなら、ライブラリの設定がReleaseビルドでされていないだけではないでしょうか。オプションでリンクの再確認してみてください。
ちなみにMy Documentsの処に名前が見えてますので、気になるなら投稿の修正をおすすめします。


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

Name: FOX  ..ぴよぴよ(672ポイント)   Date: 2010/03/19(金) 00:28   No:49421     
Title: Re:困っています    
返答ありがとうございます^^
名前は本名と違うんで^^;大丈夫です。
Debugビルドもこれと同じエラーでビルド失敗するんですが・・・


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

Name: Justy  ..伝説なるハッカー(510,903ポイント)   Date: 2010/03/19(金) 00:45   No:49424     
Title: Re:困っています    
 DXライブラリ環境ですか?
 リンカのサブシステムの項目が Windows (/SUBSYSTEM:WINDOWS)になっているか
確認してみて下さい。


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

Name: softya [URL]  ..ハッカー(135,611ポイント)   Date: 2010/03/19(金) 01:44   No:49427     
Title: Re:困っています    
標準ライブラリでもなく、WindowsAPIでもなく、DXライブラリでも無いライブラリが使われていますね。
使用しているソースコードの参考としたWEBサイトか書籍を教えてください。もし、使っているラブラリがわかるなら、その名前を教えてください。


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

Name: Justy  ..伝説なるハッカー(512,341ポイント)   Date: 2010/03/19(金) 03:05   No:49432     
Title: Re:困っています    
>WEBサイトか書籍を
 勝手な推測ですが「C言語わくわくゲームプログラミング教室」が元のコードじゃないかと
思われます。
 検索したら出てきました。

ビルドエラーについて
http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=1136


 DXライブラリ付属の libjpeg.libは jpegtran.cをリンクしている為 main関数を
内包するものになっています(多分ビルドミス)。

 それが原因でDXライブラリ使用時、付属のlibjpeg.libをそのまま使って
リンカの設定を間違えると、上記のようなシンボルのエラーが出ることがあるので、
それじゃないかな、と。


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

Name: FOX  ..かけだし(2,134ポイント)   Date: 2010/03/19(金) 22:29   No:49469     
Title: Re:困っています    
みなさん返答ありがとうございます。

>DXライブラリ環境ですか? 
リンカのサブシステムの項目が Windows (/SUBSYSTEM:WINDOWS)になっているか確認してみて下さい。


すみません、初心者なので、確認方法がいまいちです。教えていただけると光栄です。

>標準ライブラリでもなく、WindowsAPIでもなく、DXライブラリでも無いライブラリが使われていますね。 
使用しているソースコードの参考としたWEBサイトか書籍を教えてください。もし、使っているラブラリがわかるなら、その名前を教えてください。


Justy様の言う通り「C言語わくわくゲームプログラミング教室」という本からです。
ビルドエラーについて 
http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=1136 
も参照しましたが、このHPの返答で、貼り付けていただいたエラー出力はプロジェクトの作成時に
「Win32 コンソール アプリケーション」を選択してしまった際に出力されるものです
「Win32 プロジェクト」を選択してプロジェクトを作成し直してみてください
( DXライブラリを使用したプログラムでは main 関数の代わりに WinMain という関数を使う Win32 アプリケーションとなります )


と記述してありましたが、
本書ではWin32 コンソールアプリケーションを選ぶようになっています。

>DXライブラリ付属の libjpeg.libは jpegtran.cをリンクしている為 main関数を 
内包するものになっています(多分ビルドミス)。 
 それが原因でDXライブラリ使用時、付属のlibjpeg.libをそのまま使って 
リンカの設定を間違えると、上記のようなシンボルのエラーが出ることがあるので、 
それじゃないかな、と。

う〜ん・・難しくてよくわからないのですが、やっぱりリンカの設定がおかしいのかもしれません。
設定の仕方をおしえてくださいますか?

長々とすみません。読んで下さってありがとうございます。


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

Name: FOX  ..かけだし(2,354ポイント)   Date: 2010/03/19(金) 22:45   No:49470     
Title: Re:困っています    
皆さんすみません。
自己解決しました。
よくわからないのですが、プロジェクトをつくりなおし、
同じソースコードを書いて、
Release構成の文字セットをUnicodeからマルチバイト文字セットに、
Release構成のランタイムライブラリをマルチスレッドDLLからマルチスレッドに
設定を変更したところ、エラーひとつでませんでした。
なぜこれだけで直ったのか・・理解不能ですが、
皆さんに多大な迷惑をかけてしまったことを非常に後悔しております。
本当にすみませんでした。

また困ったことがおきるかもしれません。
そのときにまたよろしくお願いします。
お二方ありがとうございました。


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

Name: FOX  ..かけだし(2,359ポイント)   Date: 2010/03/19(金) 22:47   No:49471 解決!     
Title: Re:困っています    
 

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



Name: dm  ..ぴよぴよ(94ポイント)   Date: 2010/03/18(木) 22:00   No:49407       
Title: このサイトについて    
このサイトにおいてある四聖龍神録やAERO BERT PLASは無料ですか?

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


Name: Dixq (管理人) [URL]  ..ウィザード(1,160,325ポイント)   Date: 2010/03/18(木) 23:50   No:49417     
Title: Re:このサイトについて    
> dmさん

こんばんは。もちろん無料ですよ^^
ドメインdixq.net内のページには有料コンテンツはありませんので、気軽にご覧ください。

私のHPに限らず、仮にダウンロードページの片隅に「ダウンロードしたら1万円請求します」みたいな記述が書かれていたとしても、支払義務は発生しません。
クリックしただけで支払義務が発生するような詐欺をワンクリック詐欺と言いますよね。

ネットサーフィンをしていると時々そのような悪質サイトがあるので、神経質になってしまうかもしれませんが、
電子消費者契約及び電子承諾通知に関する民法の特例に関する法律という法律で守られているので安心して下さい。

また、わずかに限定される個人情報を掲示してあたかも特定しているかのような警告が出るサイトもありますが、アクセスしただけで個人情報が特定出来たりはしません。
私が頑張って特定しようとしたとしてもせいぜい解る情報は

・住んでいる都道府県、市町村(マンション名や番地は解りません)
・使っているプロバイダ
・使っているモニタ解像度、ブラウザ、どこからアクセスしたか
・会社からアクセスしているなら会社名、大学からアクセスしているなら学校名
・etc

位のもので、住所や電話番号、名前などは解りません。
会社からアクセスしている場合で、固定IPアドレスで使用している場合などは、会社に連絡することで誰か限定することは出来るかも知れませんが、
まぁ会社でそんな危険なサイトうろうろしたりしませんよね。

いずれにしても法律上支払義務はないし、個人は特定されないしで危険な事はありません。
安心してHPをご覧ください^^


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

Name: たかぎ [URL]  ..ハッカー(171,183ポイント)   Date: 2010/03/19(金) 00:28   No:49422     
Title: Re:このサイトについて    
こういうことを書くのはどうかと思いますが...

> 電子消費者契約及び電子承諾通知に関する民法の特例に関する法律という法律で守られているので安心して下さい。 

法律は過信すべきではありません。
いくら法律があっても、それを守らない人はいます。仮に犯罪に巻き込まれた場合、凶悪犯罪以外の検挙率は非常に低いのです。
それに、犯人が逮捕されて有罪が確定しても、それは刑事上のことです。
損害賠償を求めるには、民事裁判を起こさないといけませんし、賠償命令が出ても、賠償金の回収は自分で行わないといけません。
法律があるから安心できるのであれば、ウェブシステムのセキュリティなんか何も考える必要はありませんからね。
というわけで、自分の身は自分で守るのが原則です。

まあ、日本人が相手なら遵法意識も高いですし、そもそも法律がなくても、そんな悪事を働く人はごく例外的にしかいません。
しかし、外国人と外国人のメンタリティに毒された人の犯罪が増えたために、現在のようなこまった状況があります。

もちろん、過度に不安になる必要はありません。このサイトも(クラッキングされていなければ)問題ありません。
ただし、アダルトサイトとか、常識ではあり得ないような儲け話とか、不法行為(著作権侵害の幇助など)の温床になっているようなサイトに出入する場合は要注意です。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,160,425ポイント)   Date: 2010/03/19(金) 07:46   No:49433     
Title: Re:このサイトについて    
クリックしただけで支払義務が発生する事はないですよと言う事が言いたかったので、
訴訟を起こしたりするような話は想定していませんでした。

もちろん問題が起こらないように意識を持つことは必要ですよね。


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

Name: dm  ..ぴよぴよ(36ポイント)   Date: 2010/03/19(金) 18:39   No:49467     
Title: Re:このサイトについて    
みなさん、ご丁寧な回答ありがとうございました!

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



Name: 佐藤 渦雷(さとう からい)  ..ぴよぴよ(140ポイント)   Date: 2010/03/19(金) 14:41   No:49443       
Title: Visual C++ 2008 プログラムコード入力画面の背景をブラックに設定する方法を教えて下さい。    
今私は組込み技術者を目指してC++に取り組んでいて、

どうせ勉強するならば楽しく学ぼうとゲームを作りながら勉強している者です。

環境は、無償のVisual C++ 2008 を使用しています。

文字を見やすくするため背景をブラックにしたいのですが、やり方がわかりません。

プログラムコード入力画面の背景をブラックに設定する方法を教えて下さい。

宜しくお願い致します。



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


Name: tk  ..入門者(3,498ポイント)   Date: 2010/03/19(金) 14:48   No:49445     
Title: Re:Visual C++ 2008 プログラムコード入力画面の背景をブラックに設定する方法を教えて下さい。    
メニューから
ツール⇒オプション⇒環境⇒フォントおよび色
表示項目はテキスト形式です。
前景色が文字色、背景色が背景の色になります。

ただ、文字と背景色を変えただけではかなり見にくいので
ほかのキーワードや、コメントの色も変えたほうがいいですね。


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

Name: 佐藤 渦雷(さとう からい)  ..ぴよぴよ(195ポイント)   Date: 2010/03/19(金) 18:23   No:49465     
Title: Re:Visual C++ 2008 プログラムコード入力画面の背景をブラックに設定する方法を教えて下さい。    
tk 様

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

見やすくて、少し出来る人っぽい画面になり!

素人(のアソコ)に毛が生えた程度だったのが、(アソコの毛が)少しだけ濃くなりました。


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

Name: 佐藤 渦雷(さとう からい)  ..ぴよぴよ(216ポイント)   Date: 2010/03/19(金) 18:26   No:49466 解決!     
Title: Re:Visual C++ 2008 プログラムコード入力画面の背景をブラックに設定する方法を教えて下さい。    
解決!に check 入れるの忘れてました。

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




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +