C言語何でも質問掲示板


Total hit  今日  昨日  

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

 
   ファイル処理について   
     ・[49063] Tatu 
     ・[49064] tk 
     ・[49065] くりく 
     ・[49067] tk 
     ・[49068] くりく 
   memset関数について   
     ・[49004] ちゃお 
     ・[49049] オレンジ 
     ・[49056] tk 
   WindowsAPI ポップアッ ....   
     ・[48976] Ma 
     ・[48977] たいちう 
     ・[48979] Ma 
     ・[48980] Ma 
     ・[49017] Ma 
     ・[49018] たいちう 
     ・[49019] Ma 
     ・[49032] softya 
     ・[49037] Ma 
     ・[49051] Ma 
   xercesのインストール ....   
     ・[49014] やんち 
     ・[49015] Justy 
     ・[49047] 組木紙織 
   斜めに動けない   
     ・[49043] lbfuvab 
     ・[49044] 天空橋 
     ・[49045] okusi 
   C言語の参考書につい ....   
     ・[48986] たかぎ 
     ・[48987] softya 
     ・[48988] レッドリ 
     ・[48989] たかぎ 
     ・[49027] レッドリ 
     ・[49028] たかぎ 
     ・[49029] softya 
     ・[49030] たかぎ 
     ・[49034] レッドリ 
     ・[49035] たかぎ 
     ・[49036] softya 
     ・[49041] レッドリ 
   DirectXの板ポリゴンの ....   
     ・[49003] 天空橋 
     ・[49008] conio 
     ・[49011] 天空橋 
     ・[49013] Justy 
     ・[49020] conio 
     ・[49039] 天空橋 
     ・[49040] 天空橋 
   構造体内のデータが変 ....   
     ・[48920] no 
     ・[48922] たかぎ 
     ・[48926] no 
     ・[48931] softya 
     ・[48935] no 
     ・[48957] Justy 
     ・[48968] Col 
     ・[48970] no 
     ・[49038] Col 
   入力について・・・・   
     ・[48916] やんち 
     ・[48954] ガジェット 
     ・[48956] ひよこ 
     ・[48978] グレイトフルデッド 
     ・[49033] ガジェット 
   物理の問題で   
     ・[49024] たかぎ 
     ・[49025] no 
     ・[49031] たかぎ 
   operatorについて   
     ・[48991] たかぎ 
     ・[48993] fatens 
     ・[49026] ジュンヤ 
   ケロちゃんなどのブレ ....   
     ・[48940] ひよこ 
     ・[48943] no 
     ・[48955] ひよこ 
     ・[49022] no 
   C/C++でつかえるXMLパ ....   
     ・[48912] ぽこ 
     ・[48913] 組木紙織 
     ・[48914] やんち 
     ・[49010] 組木紙織 
   33. 選択画面の作り方 ....   
     ・[49009] kazuoni 
   アクションパズルゲー ....   
     ・[48264] Dixq (管理人) 
     ・[48307] Tatu 
     ・[48335] DVDM 
     ・[48344] Dixq (管理人) 
     ・[48381] Tatu 
     ・[48430] DVDM 
     ・[48497] Tatu 
     ・[48529] バグ 
     ・[48577] Tatu 
     ・[48663] Tatu 
     ・[48782] Tatu 
     ・[48886] Tatu 
     ・[49007] Tatu 
   RPGについて   
     ・[48971] softya 
     ・[48972] setuna 
     ・[48973] setuna 
     ・[48981] softya 
     ・[48982] setuna 
     ・[48983] setuna 
     ・[48984] softya 
     ・[48992] setuna 
     ・[48994] softya 
     ・[48995] setuna 
     ・[48996] softya 
     ・[48999] setuna 
     ・[49000] conio 
     ・[49005] softya 
   エラー   
     ・[48965] Justy 
     ・[48997] hit 
   こういう3D背景を作り ....   
     ・[48904] Justy 
     ・[48906] Justy 
     ・[48925] レッドリ 
     ・[48959] Justy 
     ・[48962] Justy 
     ・[48963] レッドリ 
     ・[48964] レッドリ 
     ・[48966] Justy 
     ・[48967] レッドリ 
   3D モデルのαブレン ....   
     ・[48960] Justy 
     ・[48961] レッドリ 
   無題   
     ・[48942] たいちう 
     ・[48953] TKOZ 
   当たり判定で   
     ・[48944] DVDM 
     ・[48952] okusi 
   パソコンスペックにつ ....   
     ・[48939] たかぎ 
     ・[48945] softya 
     ・[48946] DVDM 
     ・[48947] dm 
     ・[48948] DVDM 
     ・[48949] softya 
     ・[48950] dm 
   rand関数の値を保存   
     ・[48921] えーや 
     ・[48930] Ma 
     ・[48941] HIT 
   デスクトップアクセサ ....   
     ・[48929] Ma 
     ・[48932] softya 
     ・[489271269247091] 匿名 
   龍神録プログラミング ....   
     ・[48905] Justy 
     ・[48907] mkk 
     ・[48909] Justy 
     ・[48923] mkk 
     ・[48924] Justy 
   無題   
     ・[48885] たかぎ 
     ・[48888] non 
     ・[48901] HIT 
     ・[48902] As soon aS 
     ・[48903] fatens 
     ・[48908] TKOZ 
     ・[48917] HIT 
   スーパーマリコ とい ....   
     ・[48748] Tatu 
     ・[48750] kazuoni 
     ・[48752] wing 
     ・[48753] aya 
     ・[48754] wing 
     ・[48755] aya 
     ・[48840] ゼド 
     ・[48861] wing 
     ・[48893] situmon 
     ・[48900] wing 
   無題   
     ・[48899] nawa 
   無題   
     ・[48825] kazuoni 
     ・[48827] softya 
     ・[48873] apam 
     ・[48878] softya 
     ・[48894] apam 
   マリオ的な横スクロー ....   
     ・[48618] kazuoni 
     ・[48626] sizuma 
     ・[48641] SS 
     ・[48812] TKOZ 
     ・[48816] dic 
     ・[48820] SS 
     ・[48892] situmon 
   DxLibで   
     ・[48887] mnkr 
     ・[48889] okusi 
   単発質問になって申し ....   
     ・[48779] Dixq (管理人) 
     ・[48884] レッドリ 
   操作があるまでループ ....   
     ・[48880] softya 
     ・[48881] 山崎 
   背景を変える方法   
     ・[48877] バグ 
   無題   
     ・[48736] Tororo 
     ・[48740] とかげ 
     ・[48763] Tororo 
     ・[48766] tokage 
     ・[48767] Tororo 
     ・[48769] MNS 
     ・[48770] tokage 
     ・[48772] MNS 
     ・[48777] tokage 
     ・[48859] tokage 
     ・[48865] Justy 
     ・[48874] tokage 
     ・[48875] tokage 
   VC++.netで最小化した ....   
     ・[48796] たかぎ 
     ・[48797] 真由美 
     ・[48798] 真由美 
     ・[48822] pooka 
     ・[48824] 真由美 
     ・[48860] 真由美 
     ・[48868] Justy 
     ・[48869] 真由美 
     ・[48870] Justy 
     ・[48872] 真由美 
   ポケコンで   
     ・[48841] たかぎ 
     ・[48844] softya 
     ・[48845] ゼド 
     ・[48846] softya 
     ・[48847] たかぎ 
     ・[48848] softya 
     ・[48849] ゼド 
     ・[48850] softya 
     ・[48851] バグ 
     ・[48852] ゼド 
     ・[48853] ムンバ 
     ・[48855] softya 
     ・[48856] たかぎ 
     ・[48857] 通りすがり 
     ・[48858] たかぎ 
     ・[48871] 7A 
   変数   
     ・[48826] softya 
     ・[48828] たかぎ 
     ・[48829] くりあ 
     ・[48830] バグ 
     ・[48831] 山崎 
     ・[48832] softya 
     ・[48833] たかぎ 
     ・[48854] dic 
     ・[48867] くりあ 
   「12、画像を動かす ....   
     ・[48863] 通りすがり 
     ・[48864] KAZUKI . S 
     ・[48866] Dixq (管理人) 
   2面を作りたい   
     ・[48843] Ma 
   おもい(-_-;)   
     ・[48835] Mikan 
     ・[48836] softya 
     ・[48837] okusi 
     ・[48838] okusi 
   マルチブート環境を作 ....   
     ・[48739] たかぎ 
     ・[48741] dic 
     ・[48742] たかぎ 
     ・[48743] Dixq (管理人) 
     ・[48746] softya 
     ・[48747] dic 
     ・[48761] Mikan 
     ・[48762] Mikan 
     ・[48775] dic 
     ・[48778] dic 
     ・[48780] softya 
     ・[48804] dic 
     ・[48805] softya 
     ・[48807] dic 
     ・[48808] dic 
     ・[48809] softya 
     ・[48810] dic 
     ・[48811] softya 
     ・[48813] dic 
     ・[48814] dic 
     ・[48815] dic 
     ・[48817] softya 
     ・[48819] dic 
   やっぱりDLLの使い方が ....   
     ・[48800] softya 
     ・[48801] Ma 
     ・[48802] Ma 
     ・[48803] softya 
     ・[48806] Ma 
   ファイルの属性につい ....   
     ・[48790] たかぎ 
     ・[48794] 天和 
   龍神録プログラミング ....   
     ・[48793] Justy 
   FileRead_openが途中で ....   
     ・[48781] Justy 
     ・[48785] Yuno 
     ・[48788] Yuno 
     ・[48792] Justy 
   弾幕について   
     ・[48705] jay 
     ・[48710] Tatu 
     ・[48711] jay 
     ・[48784] no 
   STGで死ぬときの処理に ....   
     ・[48783] Justy 
   【雑談】変数名のご相 ....   
     ・[48757] たかぎ 
     ・[48758] やんち 
     ・[48760] tk 
     ・[48774] たいちう 
   敵の出現   
     ・[48733] ひよこ 
     ・[48734] 星史朗 
     ・[48759] 星史朗 
   タスクシステムの実装 ....   
     ・[48701] Justy 
     ・[48712] dic 
     ・[48713] dic 
     ・[48714] Justy 
     ・[48716] dic 
     ・[48717] koki 
     ・[48720] Justy 
     ・[48749] koki 
   無題   
     ・[48745] Yuno 
   こんにちわ   
     ・[48724] 山崎 
     ・[48725] バグ 
     ・[48726] 通りすがり 
     ・[48727] Dixq (管理人) 
     ・[48728] バグ 
     ・[48729] たかぎ 
     ・[48731] Dixq (管理人) 
     ・[48735] たかぎ 
   壁との当たり判定   
     ・[48723] 白い時空 
   マップエディタ   
     ・[48533] バグ 
     ・[48534] ★ 
     ・[48588] ★ 
     ・[48591] kazuoni 
     ・[48592] ★ 
     ・[48601] kazuoni 
     ・[48608] ★ 
     ・[48609] kazuoni 
     ・[48610] ★ 
     ・[48611] バグ 
     ・[48612] kazuoni 
     ・[48613] ★ 
     ・[48614] バグ 
     ・[48617] ★ 
     ・[48619] バグ 
     ・[48620] ★ 
     ・[48642] ★ 
     ・[48643] kazuoni 
     ・[48651] ★ 
     ・[48682] ★ 
     ・[48684] kazuoni 
     ・[48686] ★ 
     ・[48687] ru-pu 
     ・[48688] ★ 
     ・[48690] ★ 
     ・[48691] ru-pu 
     ・[48692] kazuoni 
     ・[48694] ★ 
     ・[48697] ★ 
     ・[48719] ru-pu 

Name: くりく  ..ぴよぴよ(337ポイント)   Date: 2010/03/11(木) 13:09   No:49061       
Title: ファイル処理について    
いまゲームプログラミングの館で勉強しているのですが、t0のセーブデータの作り方のところで
コピペで実行すると下のようなエラーがでてできないのですが、これは何が原因なのでしょうか?

LIBCMTD.lib(wincrt0.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
C:\シューティング\test\Debug\C言語プログラミングの館.exe : fatal error LNK1120: 外部参照 1 が未解決です。


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


Name: Tatu  ..プログラマー(29,925ポイント)   Date: 2010/03/11(木) 13:36   No:49063     
Title: Re:ファイル処理について    
t0のページには注意書きはありませんが
ここで挙げられているサンプルは

それまでのと同じウインドウズアプリケーション用ではなく、
コンソールアプリケーション用のコードだからです。

このことはメイン関数がそれまでのWinMainではなく、
mainとなっていることからわかります。

ウインドウズアプリケーションのメイン関数は
WinMainなのにそれが定義されてないので
WinMainが未解決というエラーが出ます。

コンソールアプリケーション用のプロジェクトを作り、試してください。


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

Name: tk  ..かけだし(2,131ポイント)   Date: 2010/03/11(木) 13:39   No:49064     
Title: Re:ファイル処理について    
http://www.a.math.ryukoku.ac.jp/~hig/course/compsci2_2005/man/faq.html
上記URLの下のほうの現象と一緒じゃないですか?

一度試してみてください。


Windowsではコンソールアプリケーションとウィンドウアプリケーションの2つ実行形式があります。
コンソールアプリケーションではエントリポイントがmain、ウィンドウアプリケーションではWinMainになります。
ですので今回「セーブデータの作り方」のソースでは、mainが使われていますので、コンソールアプリケーションで作らないとエラーがでます。


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

Name: くりく  ..ぴよぴよ(387ポイント)   Date: 2010/03/11(木) 13:41   No:49065     
Title: Re:ファイル処理について    
できましたありがとうございます!

ということは、
このコンソールアプリケーションとウィンドウズアプリケーションを一つのプログラムで実行するということは無理なんでしょうか? 編集済み


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

Name: tk  ..かけだし(2,229ポイント)   Date: 2010/03/11(木) 14:22   No:49067     
Title: Re:ファイル処理について    
> ということは、
> このコンソールアプリケーションとウィンドウズアプリケーションを一つのプログラムで実行するということは無理なんでしょうか?

コンソールアプリケーションとウィンドウズアプリケーションを一緒くたにすることは無理だと思います。

ただし、
例えば、コンソールアプリで、デスクトップのインスタンスハンドルを取得してウィンドウを表示させる・・・ということは可能です。


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

Name: くりく  ..ぴよぴよ(400ポイント)   Date: 2010/03/11(木) 14:48   No:49068 解決!     
Title: Re:ファイル処理について    
ご丁寧にありがとうございます^^
たすかりました


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



Name: オレンジ  ..ぴよぴよ(38ポイント)   Date: 2010/03/09(火) 23:21   No:49002       
Title: memset関数について    
龍神録を参考にDXライブラリを使ってSTGを作っているのですが
10章の中で出てくるmemset関数の意味がわかりません
初期化をする関数、というのはわかるのですが、なぜ搭載されているのかがわかりません
回答よろしくお願いします


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


Name: ちゃお  ..入門者(4,857ポイント)   Date: 2010/03/09(火) 23:47   No:49004     
Title: Re:memset関数について    
初期化してなかったらエラー起こるから。

たとえば、
#include<stdio.h>

int main(void)
{
int a,b,c;

c = a + b; //a,bを初期化せずにcに代入

printf("%d",c);
return 0;
}
とかしたときに
aとbに値を入れてないのに計算してしまうとおかしな数字が出る(エラーを引き起こす)。

C言語プログラミングにおける基礎だと思います。
だから、初期化しないとだめってこと。


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

Name: オレンジ  ..ぴよぴよ(113ポイント)   Date: 2010/03/11(木) 04:51   No:49049     
Title: なるほどなるほど    
わかりました
初期化って大事ですね
ではmemset関数ってどうやって使うんですか?
それと、判例でよくあるsizeof演算子の意味もよろしくお願いします


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

Name: tk  ..かけだし(2,356ポイント)   Date: 2010/03/11(木) 09:37   No:49056     
Title: Re:なるほどなるほど    
memsetは以下の通りです。(MSDNライブラリより)

void *memset( void *dest, int c, size_t count );
dest : 対象となるバッファへのポインタ
c : 設定する文字
count : 文字数

destの最初からcount分、cで初期化するものです。

例)
char str[10];
memset( str, '\0', sizeof( str ) );

これでstrはすべて\0で初期化されます。


ここでsizeof演算子ですが、これはsizeofに渡された型や変数のメモリサイズを調べるものです。

例)
sizeof( char );        // charのサイズ(=1)
sizeof( int );         // intのサイズ
sizeof( double );      // doubleのサイズ(=8)
sizeof( str );         // 上記の例のstr(char10個の配列なので =10)



まだ分からないことがあればリファレンスなり見てください。
以上です。






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



Name: Ma  ..熟練のプログラマー(59,347ポイント)   Date: 2010/03/09(火) 09:45   No:48975       
Title: WindowsAPI ポップアップメニュー    
DXライブラリで作られたプログラムに、右クリックで表示されるポップアップメニュー作ろうと思ってます。

環境
VC++ 2008 Express Edition

Windows API についての知識は、
http://wisdom.sakura.ne.jp/system/winapi/win32/index.html
ここの60章ぐらいまで軽く読んだ程度です。
(長くて、なかなか最後まで読めない^^;)


で、
最初はここにつき
http://www.ne.jp/asahi/hishidama/home/tech/vcpp/popmenu.html
これを見てまねてみようと思ったが、CView クラスがみつからないし、何をインクルードするべきかがあやふやだし、
とりあえずもう少し初心者用のページを探すことに。


http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_MENUpopup.html
ここにつき、やっぱりリソースいじったほうがよさそうなのが分かりました。
(BCCでアイコンを使う時以外でリソースをいじったことありません)

それで、リソースにメニューってどうやって作るんだろうってことでたどりついたのがこちらのサイト
http://homepage2.nifty.com/c_lang/resource.htm
環境が古くて、あまり参考にならない。。。。orz


調べていくうちに、ソリューションエクスプローラーのリソースにメニューを追加することから始めればいいことがわかったんですが、
リソースフォルダー(フィルター?)は表示されているのだが、メニュー追加の項目がない・・・
ソリューションエクスプローラーのプロジェクト右クリックし、追加→リソースがあるのですが
なぜか、無効化していてクリックできない。
リソースフィルターを右クリックし、追加→でやると新しい項目にはWindowsフォームやプロパティシートがでてくる。


VC++ のヘルプで検索してみるが、やはり関連ページ見つけるのに一苦労して、見つけても必要がない情報が多かったり、難しくて何をいっているのかよくわからないことがおおい。orz


このような状況ですが、私に役立ちそうなサイトの紹介、または次のステップを教えてください。
(やっぱり、基礎からの学習でしょうかね^^;) 編集済み


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


Name: Ma  ..熟練のプログラマー(59,240ポイント)   Date: 2010/03/09(火) 09:54   No:48976     
Title: Re:新規メニューボタンはどこ・・・orz    
あぁ、すいません。
よくよく見たら、自分がAPI勉強用に使っていたページにポップアップがありました。
http://wisdom.sakura.ne.jp/system/winapi/win32/win78.html
つい、チェックし忘れてました。

これを読んでみて、わからなかったらもう一度聞きますね。それまで解決にしておきます。 編集済み


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

Name: たいちう  ..熟練のプログラマー(58,991ポイント)   Date: 2010/03/09(火) 09:56   No:48977     
Title: Re:新規メニューボタンはどこ・・・orz    
> これを見てまねてみようと思ったが、CView クラスがみつからないし、
> 何をインクルードするべきかがあやふやだし、
> とりあえずもう少し初心者用のページを探すことに。

CViewはMFCのクラスでして、無料であるExpress Editionには含まれません。
リソースエディタも無いんじゃなかったかな。
私は普通のテキストエディタで作成し、VCでコンパイルしています。

コンテキストメニューのサンプル
http://homepage2.nifty.com/c_lang/sdk/sdk_44.htm


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

Name: Ma  ..熟練のプログラマー(59,401ポイント)   Date: 2010/03/09(火) 10:25   No:48979     
Title: Re:新規メニューボタンはどこ・・・orz    
>たいちうさん
回答ありがとうございます。
やっぱり某サイトにもありましたか、今つまづいている問題を解決次第しっかり読んでいこうと思います。

>私は普通のテキストエディタで作成し、VCでコンパイルしています。 
ようやく、スタートラインにたてた感じですw
さきほど、.rcファイル作ってアイコンの変更に成功したので、このままつきすすんでいきますよ!(笑

また問題にぶちあたったら質問しますので、そのときはよろしくおねがいします。


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

Name: Ma  ..熟練のプログラマー(59,938ポイント)   Date: 2010/03/09(火) 10:47   No:48980     
Title: Re:新規メニューボタンはどこ・・・orz    
HMENU hmenu = LoadMenu(GetTaskInstance(), "MYPOPUP");


こうやってロードしたんですが、戻り値が エラー、評価できません になってしまいました。

リソースコードは以下のとおり


#include <windows.h>
#include "resource.h"

/////////////////////////////////////////////////////////////////////////////
//
// Menu
//

MYPOPUP MENU DISCARDABLE 
BEGIN
    POPUP "表示されません"
    BEGIN
        MENUITEM "終了\tShift + Ctrl + X",      IDM_END
        POPUP "オプション"
        BEGIN
            MENUITEM "猫の絵\tF1",                  IDM_CAT
            MENUITEM "犬の絵\tF2",                  IDM_DOG
            MENUITEM "ネズミの絵\tF3",              IDM_RAT
            MENUITEM "消去\tEsc",                   IDM_CLR
        END
    END
END


何か間違っていますか?
(ちなみにコンパイルはしっかりとおりました。)


表示部分は
            HMENU hmenu = LoadMenu(GetTaskInstance(), TEXT("MYPOPUP"));
            HMENU hSubmenu = GetSubMenu(hmenu, 0);
            TrackPopupMenu(hSubmenu, TPM_LEFTALIGN, MousePosX, MousePosY, 0, GetMainWindowHandle(), NULL);
            DestroyMenu(hmenu);
このように実装するつもりでした。


何か、問題点としておもいつくことはないでしょうか? 編集済み


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

Name: Ma  ..熟練のプログラマー(60,019ポイント)   Date: 2010/03/10(水) 05:39   No:49017     
Title: Re:新規メニューボタンはどこ・・・orz    
DXライブラリとの相性もありそうなので、DXライブラリ掲示板とのマルチポストさせていただきます。
ただし、リンクの配置、また両方を確認する前提で行いますので、ご了承お願いします。

http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1657


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

Name: たいちう  ..熟練のプログラマー(59,061ポイント)   Date: 2010/03/10(水) 08:43   No:49018     
Title: Re:新規メニューボタンはどこ・・・orz    
レスがないですね。
私も帰宅しないと試せる環境にないのですが、
昨日も深夜帰宅で気力がありませんでした。

DXライブラリを使わずに、ポップアップの表示だけ行うことはできましたか?


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

Name: Ma  ..熟練のプログラマー(60,120ポイント)   Date: 2010/03/10(水) 09:53   No:49019     
Title: Re:新規メニューボタンはどこ・・・orz    
>DXライブラリを使わずに、ポップアップの表示だけ行うことはできましたか?

できるだろう。なんておもっていてやってみたら、同じエラーが出ました^^;
ということは、やり方に問題があるわけで。。。。

リソースファイルを使う時って、プロジェクトの設定に何かしないといけなかったりしますか?
いっそのことプロジェクトアップしたほうがいいでしょうか?

どうせ短いので、やっぱりこぴぺします。

//Resource.h
#define MYPOPUP 101
#define IDM_END 102
#define IDM_CAT 103
#define IDM_DOG 104
#define IDM_RAT 105
#define IDM_CLR 106


//main.cpp
#include <windows.h>

LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
    POINT po;
    static HMENU tmp , hmenuR , hmenuL;

    switch (msg) {
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    case WM_CREATE:
        tmp = LoadMenu(((LPCREATESTRUCT)(lp))->hInstance , TEXT("MYPOPUP"));
        hmenuR = GetSubMenu(tmp , 0);
        hmenuL = GetSubMenu(tmp , 1);
        return 0;
    case WM_RBUTTONUP:
        po.x = LOWORD(lp);
        po.y = HIWORD(lp);
        ClientToScreen(hwnd , &po);
        TrackPopupMenu(hmenuR , TPM_LEFTALIGN | TPM_BOTTOMALIGN ,
            po.x , po.y , 0 , hwnd , NULL
        );
        return 0;
    case WM_LBUTTONUP:
        po.x = LOWORD(lp);
        po.y = HIWORD(lp);
        ClientToScreen(hwnd , &po);
        TrackPopupMenu(hmenuL , TPM_LEFTALIGN | TPM_BOTTOMALIGN ,
            po.x , po.y , 0 , hwnd , NULL
        );
        return 0;
    }
    return DefWindowProc(hwnd , msg , wp , lp);
}

int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
            PSTR lpCmdLine , int nCmdShow ) {
    HWND hwnd;
    MSG msg;
    WNDCLASS winc;

    winc.style        = CS_HREDRAW | CS_VREDRAW;
    winc.lpfnWndProc    = WndProc;
    winc.cbClsExtra    = winc.cbWndExtra    = 0;
    winc.hInstance        = hInstance;
    winc.hIcon        = LoadIcon(NULL , IDI_APPLICATION);
    winc.hCursor        = LoadCursor(NULL , IDC_ARROW);
    winc.hbrBackground    = (HBRUSH)GetStockObject(WHITE_BRUSH);
    winc.lpszMenuName    = NULL;
    winc.lpszClassName    = TEXT("KITTY");

    if (!RegisterClass(&winc)) return -1;

    hwnd = CreateWindow(
            TEXT("KITTY") , TEXT("Kitty on your lap") ,
            WS_OVERLAPPEDWINDOW | WS_VISIBLE ,
            CW_USEDEFAULT , CW_USEDEFAULT ,
            CW_USEDEFAULT , CW_USEDEFAULT ,
            NULL , NULL ,
            hInstance , NULL
    );

    if (hwnd == NULL) return -1;

    while(GetMessage(&msg , NULL , 0 , 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}



//Resource.rc
#include <windows.h>
#include "Resource.h"


MYPOPUP MENU DISCARDABLE 
BEGIN
    POPUP "表示されません"
    BEGIN
        MENUITEM "終了\tShift + Ctrl + X",      IDM_END
        POPUP "オプション"
        BEGIN
            MENUITEM "猫の絵\tF1",                  IDM_CAT
            MENUITEM "犬の絵\tF2",                  IDM_DOG
            MENUITEM "ネズミの絵\tF3",              IDM_RAT
            MENUITEM "消去\tEsc",                   IDM_CLR
        END
    END
END
 編集済み


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

Name: softya [URL]  ..ハッカー(131,168ポイント)   Date: 2010/03/10(水) 19:20   No:49032     
Title: Re:新規メニューボタンはどこ・・・orz    
こうすれば動きますよ。
ポイントは、LoadMenuのMAKEINTRESOURCE()です。
http://wisdom.sakura.ne.jp/system/winapi/win32/win72.html

#include <windows.h>
#include "resource.h"

LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
    POINT po;
    static HMENU tmp , hmenuR , hmenuL;

    switch (msg) {
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    case WM_CREATE:
        tmp = LoadMenu(((LPCREATESTRUCT)(lp))->hInstance , MAKEINTRESOURCE(MYPOPUP));
        hmenuR = GetSubMenu(tmp , 0);
        hmenuL = GetSubMenu(tmp , 1);
        return 0;
    case WM_RBUTTONUP:
        po.x = LOWORD(lp);
        po.y = HIWORD(lp);
        ClientToScreen(hwnd , &po);
        TrackPopupMenu(hmenuR , TPM_LEFTALIGN | TPM_BOTTOMALIGN ,
            po.x , po.y , 0 , hwnd , NULL
        );
        return 0;
    case WM_LBUTTONUP:
        po.x = LOWORD(lp);
        po.y = HIWORD(lp);
        ClientToScreen(hwnd , &po);
        TrackPopupMenu(hmenuL , TPM_LEFTALIGN | TPM_BOTTOMALIGN ,
            po.x , po.y , 0 , hwnd , NULL
        );
        return 0;
    }
    return DefWindowProc(hwnd , msg , wp , lp);
}

int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
            PSTR lpCmdLine , int nCmdShow ) {
    HWND hwnd;
    MSG msg;
    WNDCLASS winc;

    winc.style        = CS_HREDRAW | CS_VREDRAW;
    winc.lpfnWndProc    = WndProc;
    winc.cbClsExtra    = winc.cbWndExtra    = 0;
    winc.hInstance        = hInstance;
    winc.hIcon        = LoadIcon(NULL , IDI_APPLICATION);
    winc.hCursor        = LoadCursor(NULL , IDC_ARROW);
    winc.hbrBackground    = (HBRUSH)GetStockObject(WHITE_BRUSH);
    winc.lpszMenuName    = NULL;
    winc.lpszClassName    = TEXT("KITTY");

    if (!RegisterClass(&winc)) return -1;

    hwnd = CreateWindow(
            TEXT("KITTY") , TEXT("Kitty on your lap") ,
            WS_OVERLAPPEDWINDOW | WS_VISIBLE ,
            CW_USEDEFAULT , CW_USEDEFAULT ,
            CW_USEDEFAULT , CW_USEDEFAULT ,
            NULL , NULL ,
            hInstance , NULL
    );

    if (hwnd == NULL) return -1;

    while(GetMessage(&msg , NULL , 0 , 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;



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

Name: Ma  ..熟練のプログラマー(60,202ポイント)   Date: 2010/03/10(水) 21:49   No:49037     
Title: Re:新規メニューボタンはどこ・・・orz    
できました!
なるほどー、だからTEXTじゃぁだめだったのか。
時間あるときに、DXライブラリのバージョンでも試してみます。(いまはちょっと時間なくて^^;)

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


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

Name: Ma  ..熟練のプログラマー(60,136ポイント)   Date: 2010/03/11(木) 05:06   No:49051 解決!     
Title: Re:新規メニューボタンはどこ・・・orz    
全部うまくいきました!
ありがとうございました。
やはり、WindowsはCを覚えるようには簡単にいきませんね^^;

もう片方のスレでも報告してきます。 編集済み


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



Name: 組木紙織  ..比類無きプログラマー(78,665ポイント)   Date: 2010/03/10(水) 01:02   No:49012       
Title: xercesのインストール方法    
http://www.play21.jp/board/formz.cgi?action=res&resno=48911&page=&id=dixq&rln=49010
の続きですが、内容が異なっているので新しく立てました。
xercesをインストールしようとしてみましたが、テストコードがリンクエラーになってどうにもなりません
解決策を求めています。

[現状]
1:http://xerces.apache.org/xerces-c/download.cgiから下記のzipファイルをダウンロード&展開をした。
   xerces-c-3.1.0.zip
2:xerces-c-3.1.0\projects\Win32\VC8\xerces-all\xerces-all.slnを開きXercesLibのみビルド
  ここまではOK。

3:別に新しくプロジェクトを作成[xml.slnとする]
4:xerces-c-3.1.0\tests\src\XSValueTest中のXSValueTest.cpp,XSValueTest.hppをテストコードとして
  xml.slnに追加。
5:2でビルドによってでてきたxerces-c_3D.libをxml.slnの追加のライブラリディレクトリから見れるようにする。

6:xerces-c-3.1.0\srcをxml.slnのインクルードディレクトリに追加。
7:xml.slnをコンパイル。
 ここでリンクエラーが起きる。

[リンクエラーの内容]

1>------ ビルド開始: プロジェクト: xml, 構成: Debug Win32 ------
1>リンクしています...
1>XSValueTest.obj : error LNK2019: 未解決の外部シンボル "__declspec(dllimport) public: static bool __cdecl xercesc_3_1::XSValue::validate(wchar_t const * const,enum xercesc_3_1::XSValue::DataType,enum xercesc_3_1::XSValue::Status &,enum xercesc_3_1::XSValue::XMLVersion,class xercesc_3_1::MemoryManager * const)" (__imp_?validate@XSValue@xercesc_3_1@@SA_NQB_WW4DataType@12@AAW4Status@12@W4XMLVersion@12@QAVMemoryManager@2@@Z) が関数 "void __cdecl VALIDATE_TEST(char const * const,enum xercesc_3_1::XSValue::DataType,bool,enum xercesc_3_1::XSValue::Status)" (?VALIDATE_TEST@@YAXQBDW4DataType@XSValue@xercesc_3_1@@_NW4Status@23@@Z) で参照されました。
1>XSValueTest.obj : error LNK2001: 外部シンボル ""__declspec(dllimport) public: static class xercesc_3_1::MemoryManager * xercesc_3_1::XMLPlatformUtils::fgMemoryManager" (__imp_?fgMemoryManager@XMLPlatformUtils@xercesc_3_1@@2PAVMemoryManager@2@A)" は未解決です。
...............................................................
........................(中略).........................
...................................
public: static char const * const xercesc_3_1::XMLUni::fgXercescDefaultLocale" (__imp_?fgXercescDefaultLocale@XMLUni@xercesc_3_1@@2QBDB)" は未解決です。
1>D:\cpp\xml\Debug\xml.exe : fatal error LNK1120: 外部参照 63 が未解決です。
1>ビルドログは "file://d:\cpp\xml\xml\Debug\BuildLog.htm" に保存されました。
1>xml - エラー 64、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========

[コンパイルオプション]
/Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Fo"Debug\\" /Fd"Debug\vc80.pdb" /W3 /nologo /c /Wp64 /ZI /TP /errorReport:prompt

[リンカオプション]
/OUT:"D:\cpp\xml\Debug\xml.exe" /INCREMENTAL /NOLOGO /LIBPATH:"D:\cpp\xml\xml\lib" /MANIFEST /MANIFESTFILE:"Debug\xml.exe.intermediate.manifest" /DEBUG /PDB:"d:\cpp\xml\debug\xml.pdb" /SUBSYSTEM:CONSOLE /MACHINE:X86 /ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib


[環境]
Microsoft Visual Studio 2005
Version 8.0.50727.867  (vsvista.050727-8600)
Microsoft .NET Framework
Version 2.0.50727 SP2

インストールされている Edition: Standard

[備考]
自分でコンパイル&ビルドせずに、公開されているバイナリを持ってきても、ほぼ同じエラーがでます。

#導入で何ともならなかったのは初めてです。
#今までは大体パス通すだけでなんとかなったのに。。。。。


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


Name: やんち  ..ぴよぴよ(405ポイント)   Date: 2010/03/10(水) 02:07   No:49014     
Title: Re:xercesのインストール方法    
こちらには、環境がないので、試してないんですけど、
リンカオプションを見たところ、必要なライブラリが指定されてないように見えるので、
そこから調べてみてはいかがでしょう。

表示されているエラーも、リンクエラーの様子ですし。

後、Xerces-C に付いている、サンプルプログラムが動作するかも、確認して
みると良いかと思われます。


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

Name: Justy  ..伝説なるハッカー(505,969ポイント)   Date: 2010/03/10(水) 02:18   No:49015     
Title: Re:xercesのインストール方法    

> 今までは大体パス通すだけでなんとかなったのに

 ここですね、原因は。
 オープンソースのライブラリはパスを通すだけで勝手にリンクしてくれるものと
してくれないものがあり、xercesは後者です。

 なので、リンカにどの libをリンクするか指定してあげてください。

 まぁ VisualC++のようなので、それが面倒なら以下のようなソースをどこかに
(xerces_autolink.cppとか適当に)おいてビルドするのもいいでしょう。


#ifdef _MSC_VER

    // デバッグ
    #if defined(_DEBUG)
        #define XERCES_LIB_DEBUG_OPT "D"
    #else
        #define XERCES_LIB_DEBUG_OPT
    #endif
    
    // CRT
    #if defined(_DLL)
        #define XERCES_LIB_CRT_OPT
    #elif defined(XERCES_STATIC_LIBRARY)
        #define XERCES_LIB_CRT_OPT "static_"
    #else
        #error not defined "XERCES_STATIC_LIBRARY"
    #endif
    
    // バージョン
    #define XERCES_MJVER    "3"
    
    // リンクするライブラリ名
    #define XERCES_LIB_LINK_NAME    \
                "xerces-c_" \
                XERCES_LIB_CRT_OPT XERCES_MJVER XERCES_LIB_DEBUG_OPT \
                ".lib"
    
    
    // 自動リンク
    #pragma comment(lib, XERCES_LIB_LINK_NAME)
    
    // リンクファイル名表示
    #if defined(XERCES_LIB_DIAGNOSTIC)
        #pragma message("xerces : linking to lib file: " XERCES_LIB_LINK_NAME)
    #endif
    
#endif  // _MSC_VER


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

Name: 組木紙織  ..比類無きプログラマー(78,784ポイント)   Date: 2010/03/11(木) 02:53   No:49047 解決!     
Title: Re:xercesのインストール方法    
やんちさん、Justyさん回答ありがとうございます。
リンカに指定することで解決しました。
プロパティ->リンカ->追加の依存ファイルに
debugではxerces-c_3D.lib
Releaseではxerces-c_3.lib
をそれぞれ追加することで解決しました。

ありがとうございます。


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



Name: okusi  ..ぴよぴよ(244ポイント)   Date: 2010/03/11(木) 00:32   No:49042       
Title: 斜めに動けない    
たびたびすいません。

Dxlibでシューティングゲームを作っています。
自機をキーボードの矢印キーで動かしていてスペースキーでショットが打てます。

ショットを打っていない時(スペースキーを押していない時)に矢印の上と横といったような感じで
押すと斜めに進みます。

ここで問題なんですが、ショットを打っている時(スペースキーを押している時)に斜めに進もうとすると
右上と左上には進めますが、右下と左下には進めません。
なぜでしょうか?右上と左上にも進めなかったら少しは納得するんですが・・・。

プログラム

//自機の移動操作
    if( CheckHitKey( KEY_INPUT_UP ) == 1 ) ship_y -= 3 ;
    if( CheckHitKey( KEY_INPUT_DOWN ) == 1 ) ship_y += 3 ;
    if( CheckHitKey( KEY_INPUT_LEFT ) == 1 ) ship_x -= 3 ;
    if( CheckHitKey( KEY_INPUT_RIGHT ) == 1 ) ship_x += 3 ;
//ショット            
    if( CheckHitKey( KEY_INPUT_SPACE ) ==1 ){
        ショットをうつプログラム
         }

たぶんおかしいのはこの辺のプログラムだと思います。
ちなみに ship_x ,ship_y が自機画像のx,y座標です。

なんでもいいのでこうじゃないか?など思いついた方
返答お願いしますm(_ _)m


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


Name: lbfuvab  ..プログラマー(25,051ポイント)   Date: 2010/03/11(木) 00:39   No:49043     
Title: Re:斜めに動けない    
キーボードの相性ですかね。
意外と良くある事ですよ。


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

Name: 天空橋  ..ぴよぴよ(936ポイント)   Date: 2010/03/11(木) 00:46   No:49044     
Title: Re:斜めに動けない    
始めまして、天空橋と申します。

的外れかもしれませんが、プログラムに問題があるのではなく、
キーボードに問題がある気がします。
ノートPCなどに特に多いのですが、キーの同時に押すパターンや、数に制限があるケースがあります。
全てのボタンの値をコンソールなどに出力して、そもそも、スペースを押しながら、
右下を押したときにKEY_INPUT_DOWN、KEY_INPUT_RIGHT、KEY_INPUT_SPACEの値が1になっているか、
確認してみてはいかがでしょうか?


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

Name: okusi  ..ぴよぴよ(397ポイント)   Date: 2010/03/11(木) 01:13   No:49045 解決!     
Title: Re:斜めに動けない    
lbfuvabさん 天空橋さん ご返答ありがとうございます。

プログラムには問題なかったみたいです。
矢印キーをアルファベットのキーにしてみたら右下にも左下にも動きました。
もちろんスペースを押したままで。^o^/
相性ってあるんですね。

質問してよかったです。
ありがとうございました。m(_ _)m


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



Name: レッドリ  ..かけだし(1,523ポイント)   Date: 2010/03/09(火) 14:44   No:48985       
Title: C言語の参考書について    
今、自分は
「新訂 新C言語入門 ビギナー編 著・林晴比古」
の内容が全て理解できました。
なのでこの次のステップに進みたいです。

将来、プログラマやエンジニアになりたいので
この職業に就くためにこの次にやるべきことはありますか?

これのシニア編は分厚すぎてちょっと買いませんでした。
おすすめ書籍もしくはサイトを教えてもらえないでしょうか。

コンパイラはVC++EE2008で
WindowsXP Professionalです。 編集済み


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


Name: たかぎ [URL]  ..ハッカー(168,352ポイント)   Date: 2010/03/09(火) 15:25   No:48986     
Title: Re:C言語の参考書について    
せめて今がどんな立場なのかぐらいは書いてください。
小中学生と高校生と大学生と専門学校生と失業者では、アドバイスのしかたも変わってきます。


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

Name: softya [URL]  ..ハッカー(131,608ポイント)   Date: 2010/03/09(火) 15:31   No:48987     
Title: Re:C言語の参考書について    
まず、ここのサイトの練習問題に挑戦してみて下さい。
http://homepage3.nifty.com/mmgames/c_guide/

アルゴリズムとデータ構造も重要なので、サイトを紹介しておきます。
http://www5c.biglobe.ne.jp/~ecb/algorithm/algorithm00.html
http://www.geocities.jp/ky_webid/algorithm/index.html

>これのシニア編は分厚すぎてちょっと買いませんでした。 
値段の問題ですか?それとも別の理由があります?
本を紹介するにしても、理由が分からないと紹介し辛いです。

>将来、プログラマやエンジニアになりたいので 
先々を考えれば、設計とかオブジェクト指向とかは必須でしょうね。
言語としては、C++やJavaを覚えることでしょう。
当面の目標としては、C言語で規模と複雑さのあるプログラムを作れるようになることだと思います。


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

Name: レッドリ  ..かけだし(1,308ポイント)   Date: 2010/03/09(火) 18:12   No:48988     
Title: Re:C言語の参考書について    
回答ありがとうございます。

>たかぎさん
失礼しました。
情報系の大学に通っています。今年で三回生になります。

>softyaさん
苦Cの練習問題17までやりました。
ファイル処理関係でちょっと手こずりました。
ひきつづきやってみます。

アルゴリズムとデータ構造ですね。授業で
抽象データ型、スタック、待ち行列、リスト、ポインタ、連結リスト、再帰的関数、二分木、二分探索木
をやっていました。これ以外のことはまだ、手を付けてない状態です。
例えば、ハッシュテーブルや双方向リスト、循環リストなどは手を付けてない状態です。

シニア編は分厚すぎて挫折しそうだと思いました。
ビギナー編くらいの量は大丈夫です。

設計とかオブジェクト指向とC++とJAVAですね。
これらについては、JAVAだけ、授業で1年前にやりましたが、
まだ、他は1つも手をつけてないです。 編集済み


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

Name: たかぎ [URL]  ..ハッカー(168,418ポイント)   Date: 2010/03/09(火) 18:15   No:48989     
Title: Re:C言語の参考書について    
とりあえず下手くそでもかまわないので、何かひとつ、そこそこの規模のプログラムを完成させてください。
そうすれば、その過程で必要なことが見えてくるはずです。


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

Name: レッドリ  ..かけだし(1,416ポイント)   Date: 2010/03/10(水) 17:59   No:49027     
Title: Re:C言語の参考書について    
>たかぎさん
わかりました。完成させてみます。
ところで、それはCだけで組んでもいいですか?
また、CとDXライブラリでゲームを今作っていますが、
DirectXでゲーム作りはしなくても大丈夫でしょうか?。
もしくは、ゲームではないウィンドウズアプリケーションの方を作った方がいいんでしょうか?
 編集済み


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

Name: たかぎ [URL]  ..ハッカー(168,516ポイント)   Date: 2010/03/10(水) 18:32   No:49028     
Title: Re:C言語の参考書について    
> ところで、それはCだけで組んでもいいですか? 

それでもかまいません。
モチベーションさえ維持できるのであれば、足元を確実に固めながら先に進むのが理想です。


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

Name: softya [URL]  ..ハッカー(131,904ポイント)   Date: 2010/03/10(水) 18:33   No:49029     
Title: Re:C言語の参考書について    
>シニア編は分厚すぎて挫折しそうだと思いました。
>ビギナー編くらいの量は大丈夫です。 

そう言うのが苦手なら実際にプログラムを作る過程で学んだ方が良いでしょうね。

>ところで、それはCだけで組んでもいいですか? 
Cだけ、C+DXライブラリ、C+Win32APIのどれかで構わないと思います。
ただし、構造化プログラミング、モジュール化を意識したプログラミングを心がけて下さい。
それとほぼZEROからプログラム構造を構築することも重要だと思います。
ゲームやツールで作ってみたいものはありますか?


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

Name: たかぎ [URL]  ..ハッカー(168,571ポイント)   Date: 2010/03/10(水) 18:37   No:49030     
Title: Re:C言語の参考書について    
> ただし、構造化プログラミング、モジュール化を意識したプログラミングを心がけて下さい。

私としては、それも気にしなくてよいと思います。
一度汚いコードを書けば、それを改善する具体策として、それらの手法の重要性が実感できるはずですから。


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

Name: レッドリ  ..かけだし(2,012ポイント)   Date: 2010/03/10(水) 21:15   No:49034     
Title: Re:C言語の参考書について    
>softyaさん
作りたいものはゲームでは弾幕STGやマリオ系アクションです。
Win系ではメモリ最適化系統を作ってみたいです。

今、龍神録を改造しすぎてソースも規模もほとんど別物になってしまいましたが、
今作っているものを構造化プログラミング、モジュール化やアルゴリズムを意識したものを
ふまえたものを作り替えるのも力になりますか?
例えば、弾の処理をリスト化したり…という感じです。

>たかぎさん
モチベーションに関しては大丈夫です。
プログラマやエンジニアになれるのならがんばります。

コードに関してですが、アルゴリズムを使っていなくて
新C言語入門ビギナー編レベルで散らばっています。
管理人さんの考えた検索、登録、計算、描画のプロセスは心がけています。
まだまだ他の部分は汚いですが…。

ところで、memsetは使わない方がいいんでしょうか? 編集済み


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

Name: たかぎ [URL]  ..ハッカー(168,596ポイント)   Date: 2010/03/10(水) 21:22   No:49035     
Title: Re:C言語の参考書について    
> ところで、memsetは使わない方がいいんでしょうか?

状況次第です。


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

Name: softya [URL]  ..ハッカー(131,496ポイント)   Date: 2010/03/10(水) 21:28   No:49036     
Title: Re:C言語の参考書について    
>今、龍神録を改造しすぎてソースも規模もほとんど別物になってしまいましたが、
>今作っているものを構造化プログラミング、モジュール化やアルゴリズムを意識したものをふまえたものを作り替えるのも力になりますか?
>例えば、弾の処理をリスト化したり…という感じです。 

やはり、ZEROから作るのが一番だと思います。
マリオ系アクションをゼロから作ってみてはどうでしょうか?
なるべく、ゲームプログラミングの館は見ないで作りましょう。

それとは別に、作り替えもやった方が力が付くでしょう。
龍神録は参考程度に留めて、ゲームのシステムをタスクシステムでオリジナル構築するのはどうでしょう?
もちろん構造化やモジュール化も徹底的に行います。
タスクシステムについては、こちら。
http://homepage3.nifty.com/moha/programming.html

>Win系ではメモリ最適化系統を作ってみたいです。
これは規模が大きくならないのと、効果に付いては私は疑問視してます。
ちょっとした練習にしかならないと思いますので、後で良いんじゃないでしょうか。


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

Name: レッドリ  ..かけだし(2,270ポイント)   Date: 2010/03/10(水) 23:36   No:49041 解決!     
Title: Re:C言語の参考書について    
>たかぎさん
なるほどです。では、たかぎさんのサイトのmemsetの記事で勉強させて頂きます。

>softyaさん
了解しました。
まずは、タスクシステムで1から作り替えしてみます。
URLありがとうございます。
メモリ最適化は後回しすることにします。

今はCでタスクシステムとモジュール化やアルゴリズムを徹底的に使った規模の大きいプログラムを作り、
その次にC++に進みます。
書籍は買わずに、教えて頂いたサイトを活用することにします。

たかぎさん、softyaさん
こんなに多くのアドバイスをして頂いて本当にありがとうございました。 編集済み


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



Name: 天空橋  ..ぴよぴよ(541ポイント)   Date: 2010/03/09(火) 23:11   No:49001       
Title: DirectXの板ポリゴンの回転のさせかたについて    
はじめまして、天空橋と申します。

DirectXの板ポリゴンの回転のさせかたについて質問があります。

2DシューティングゲームをVisual C++2008とDirectXにて作成しようとしています。
そこで、テクスチャを読み込んで、板状のポリゴンに貼り付けて、表示することはできました。
次に、2D描画のスーパーファミコン的な基本として拡大、縮小、回転機能を実装しようとしたのですが、
拡大、縮小は出来たのですが、どうにも、回転だけ巧くできませんでした。

ソースは、以下のようになっています。

///////////////////////////////// ここから

  D3DXMATRIX rot;
  D3DXMatrixRotationZ(&rot, roll);  //回転

  // モデル座標
  D3DXVECTOR4 vect[4];
  vect[0].x = -1;  vect[0].y = -1;  vect[0].z = 0;
  vect[1].x =  1;  vect[1].y = -1;  vect[1].z = 0;
  vect[2].x = -1;  vect[2].y =  1;  vect[2].z = 0;
  vect[3].x =  1;  vect[3].y =  1;  vect[3].z = 0;

  // 回転用の行列を積算
  for (int i = 0; i < 4; i++) {
    vect[i].x = (vect[i].x * rot._11) + (vect[i].y * rot._21) + (vect[i].z * rot._31) + rot._41;
    vect[i].y = (vect[i].x * rot._12) + (vect[i].y * rot._22) + (vect[i].z * rot._32) + rot._42;
    vect[i].z = (vect[i].x * rot._13) + (vect[i].y * rot._23) + (vect[i].z * rot._33) + rot._43;
    vect[i].w = (vect[i].x * rot._14) + (vect[i].y * rot._24) + (vect[i].z * rot._34) + rot._44;
  }

  // 書き込む頂点情報の作成
  Vertex v[6] = {
      {vect[0].x, vect[0].y, vect[0].z, D3DCOLOR_ARGB(255, 255, 255, 255), 0, 0},
      {vect[1].x, vect[1].y, vect[1].z, D3DCOLOR_ARGB(255, 255, 255, 255), 1, 0},
      {vect[2].x, vect[2].y, vect[2].z, D3DCOLOR_ARGB(255, 255, 255, 255), 0, 1},
      {vect[3].x, vect[3].y, vect[3].z, D3DCOLOR_ARGB(255, 255, 255, 255), 1, 1},
      {vect[2].x, vect[2].y, vect[2].z, D3DCOLOR_ARGB(255, 255, 255, 255), 0, 1},
      {vect[1].x, vect[1].y, vect[1].z, D3DCOLOR_ARGB(255, 255, 255, 255), 1, 0},
    };

  pD3DDevice->SetTexture(0, texture);
  pD3DDevice->SetFVF(D3DFVF_VERTEX);
  pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);

  // World 座標の設定
  D3DXMatrixIdentity(&matWorld);
  pD3DDevice->SetTransform(D3DTS_WORLD, &matWorld);
  
  //View 座標の設定
  D3DXMatrixIdentity(&matView);
  D3DXMatrixLookAtLH(&matView, &D3DXVECTOR3(0,  0, 30), &D3DXVECTOR3(0,  0,  0), &D3DXVECTOR3(0, -1,  0));
  pD3DDevice->SetTransform(D3DTS_VIEW, &matView);
  
  //透視変換の設定
  D3DXMatrixIdentity(&matProj);
  D3DXMatrixPerspectiveFovLH(&matProj,D3DX_PI / 4, 800.0f / 600.0f, 0.0f, 100.0f);
  pD3DDevice->SetTransform(D3DTS_PROJECTION, &matProj);
  
  pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 2, v, sizeof(Vertex));

///////////////////////////////// ここまで


なお、上記のソースは、World座標を自前で、計算しているつもりです。
DirectXの場合、DrawPrimitiveの回数を極力減らしたほうが良いと本に書いてありました。
そこで、シューティングゲームとして、弾を沢山描画することになるので、描画処理を速くする必要があると思い、
回転させる都度SetTransform関数にてWorld座標を計算すると、その都度、DrawPrimitiveをするため、
遅くなると思い、上記のようにしているつもりです。

なお、上記の回転処理をSetTransformで計算すると期待通りにきれいな回転をします。

より、詳細なソースと、SetTransformを用いて正しく回転するソース添付いたします。

やりたいことは、基本的な描画機能を高速におこなうことです。
なお、C言語は読むのに困らない程度は理解しているが、書くのはあまり得意ではありません。
また、今回のソースは微妙にC++になっていたりします。
DirectXは、ほぼ未経験となります。

皆様、ご教授おねがいいたします。


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


Name: 天空橋  ..ぴよぴよ(551ポイント)   Date: 2010/03/09(火) 23:31   No:49003     
Title: Re:DirectXの板ポリゴンの回転のさせかたについて    
おかしい回転というのがどのようなものか、伝えづらかったので、おかしい回転をしているアプリを添付してみました。

多分、DirectXのランタイムがある環境にて、解凍して、実行すれば動作するかと思います。

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


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

Name: conio [URL]  ..比類無きプログラマー(79,009ポイント)   Date: 2010/03/10(水) 00:13   No:49008     
Title: Re:DirectXの板ポリゴンの回転のさせかたについて    
逆に「上手く行った回転」とはどういうものでしょうか?


「テクスチャの中心座標を中心としたZ軸方向の回転」という事でしょうか?
(観覧車を真正面から見たような回転)


とりあえず、こんな感じでどうでしょうか。
---------------------------------------------------------------
D3DXQUATERNION q(0,0,0,1); // 単位クォータニオン'q'を生成
D3DXVECTOR3 NAxis( 0, 0, 1); // 任意の中心軸
D3DXMATRIX TurnMat; // 回転行列
D3DXMATRIX mat; //平行移動行列
static int d;

//何もしない行列を作る
D3DXMatrixIdentity(&mat);
D3DXMatrixIdentity(&TurnMat);

//板状のポリゴンの中心座標は、(x = 3, y = 3)とする。
D3DXMatrixTranslation(&mat,3,3,0);

//z軸を中心に 0〜360度 回転するクォータニオン'q'を生成
D3DXQuaternionRotationAxis( &q, &NAxis, D3DXToRadian(d = (d + 1) % 360));
//クォータニオンを行列に変換。
D3DXMatrixRotationQuaternion(&TurnMat, &q);
//行列をかける(回転させた後、行列'mat'で平行移動させる)
TurnMat*=mat;
pD3DDevice->SetTransform( D3DTS_WORLD, &TurnMat);
---------------------------------------------------------------
上のコードを描画ループの部分に入れれば多分 想定した回転はするんじゃないかな、と。 編集済み


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

Name: 天空橋  ..かけだし(1,070ポイント)   Date: 2010/03/10(水) 00:53   No:49011     
Title: Re:DirectXの板ポリゴンの回転のさせかたについて    
conio さん ご回答ありがとうございます。

「上手くいった回転」とは、conioさんがおっしゃるとおり、
「観覧車を真正面から見たような回転」のことです。
頂いたソースを試したところ、「上手くいった回転」が行えました。

ただ、頂いた実装だと、実際にゲームを作る際に、
角度の異なる画像ごとに、SetTransform(D3DTS_WORLD)関数及び、
DrawPrimitiveUP関数を呼び出すことになると思っています。

たとえば、弾を1度刻みで360度ばら撒く敵がいた場合、
360回のDrawPrimitiveUP関数を呼び出すこととなります。
これを、回避するにはどうにかして、SetTransformを用いずに、
頂点情報を直接World変換する必要があるのだと思っています。
そして、直接World変換した頂点を以下のような形で書き出せば、
360枚の角度の異なる画像を一回のDrawPrimitiveUPで行えるのではと、思っています。

    // spriteCountは書き出す画像の数 (今回だと360)
    // vには360 * 6 の頂点情報が格納されている
    pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST, spriteCount * 2, v, sizeof(Vertex));

上記のような、アプローチのときに、画像を回転させる良い方法はないでしょうか?
または、アプローチが既に間違っていたりするのでしょうか?
たとえば、

  ・実は、DrawPrimitiveUPは板ポリゴンの枚数分行うのが普通
  ・モデル座標の頂点に自前で回転を行うなんて出来ない

などなど。


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

Name: Justy  ..伝説なるハッカー(504,735ポイント)   Date: 2010/03/10(水) 01:42   No:49013     
Title: Re:DirectXの板ポリゴンの回転のさせかたについて    
 conioさんの方法で行列だけ求めた後、SetTransform()の代わりに
頂点座標を D3DXVec3TransformCoord()とか D3DXVec3TransformCoordArray()で
座標を変換すればいいのでは?


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

Name: conio [URL]  ..比類無きプログラマー(79,968ポイント)   Date: 2010/03/10(水) 14:13   No:49020     
Title: Re:DirectXの板ポリゴンの回転のさせかたについて    
>>360枚の角度の異なる画像を一回のDrawPrimitiveUPで行えるのではと、思っています。
これは、出来ます。
その前に、プリミティブタイプはD3DPT_TRIANGLESTRIPの方が良いんじゃないかなと思います。
(D3DPT_TRIANGLELISTだと、頂点が重複して数が多くなってしまうので)

※「離れたポリゴンを描画するには、LISTじゃないと無理」という理由でLISTにされたのであれば、
STRIPに変更した方が良いかと思います。
STRIPでも離れたポリゴンを描画できるやり方があります。


やり方は 1つの配列に全ての板ポリゴンのデータを入れればOKです。
ただし、入れる際は板ポリゴンのデータとデータの間に 2つの頂点を挟みます。
(縮退三角形により、離れた板ポリゴン同士を繋がせるため)

2つの頂点は、
---------------------------------
1番目が、直前の板ポリゴンの右下
2番目が、直後の板ポリゴンの左上
---------------------------------
となります。

コードにすると下記の様な感じです。
--------------------------------------------------------------------
#define MY_VERTEX_FVF  (D3DFVF_XYZ | D3DFVF_DIFFUSE)
struct MY_VERTEX{
    D3DXVECTOR3 p;
    DWORD color;
};
MY_VERTEX mv[] = {    { D3DXVECTOR3(-1, 1, 0), 0xffff0000},  //板ポリゴンA 左上
        { D3DXVECTOR3( 1, 1, 0), 0xff00ff00},  //板ポリゴンA 右上
        { D3DXVECTOR3(-1,-1, 0), 0xff0000ff},  //板ポリゴンA 左下
        { D3DXVECTOR3( 1,-1, 0), 0xffffffff},  //板ポリゴンA 右下

        { D3DXVECTOR3( 1,-1, 0), 0xffffffff},  //板ポリゴンA 右下
        { D3DXVECTOR3(-1, 1, 0), 0xffff0000},  //板ポリゴンB 左上

        { D3DXVECTOR3(-1, 1, 0), 0xffff0000},  //板ポリゴンB 左上
        { D3DXVECTOR3( 1, 1, 0), 0xff00ff00},  //板ポリゴンB 右上
        { D3DXVECTOR3(-1,-1, 0), 0xff0000ff},  //板ポリゴンB 左下
        { D3DXVECTOR3( 1,-1, 0), 0xffffffff},  //板ポリゴンB 右下
    };
--------------------------------------------------------------------


それと、下のが
別々に動かすために作った まぁ適当なコードです。
-----------------------------------------------------------
pD3DDevice->SetTransform(D3DTS_WORLD, &mat);
pD3DDevice->SetFVF(MY_VERTEX_FVF);

static float x2 = 1.0f/1000;
mv[0].p.x += x2;
mv[1].p.x += x2;
mv[2].p.x += x2;
mv[3].p.x += x2;
mv[4].p.x += x2;

mv[5].p.x += -x2;
mv[6].p.x += -x2;
mv[7].p.x += -x2;
mv[8].p.x += -x2;
mv[9].p.x += -x2;

pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 8, mv, sizeof(MY_VERTEX));
-----------------------------------------------------------

※縮退三角形を一回用いるたびに、三角ポリゴンの数が4つ増えます。


その為、
-----------------------------------------------------------------------
板ポリゴンA(2つ) + 板ポリゴンB(2つ) + 縮退三角形の分(4つ)
-----------------------------------------------------------------------
の、8を三角ポリゴンの数として指定しています。


最後に。
テクスチャーが異なる場合は、 描画処理を分ける必要があります。
一度に描画している以上、SetTexture関数を呼ぶと全ての板ポリゴンに適用される為です。

なので、下記の様にテクスチャごとに一次元配列を用意し、描画する必要があります。
(DrawPrimitiveUP関数の呼び出しの数 = テクスチャの種類の数)
-----------------------------------------------------------------------------
pD3DDevice->SetTexture(省略);
pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 8, mv, sizeof(MY_VERTEX2)); //テクスチャAの板ポリゴン全て
pD3DDevice->SetTexture(省略);
pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 8, mv2, sizeof(MY_VERTEX2)); //テクスチャBの板ポリゴン全て
----------------------------------------------------------------------------- 編集済み


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

Name: 天空橋  ..ぴよぴよ(782ポイント)   Date: 2010/03/10(水) 23:32   No:49039     
Title: Re:DirectXの板ポリゴンの回転のさせかたについて    
>> Justy さん

ご回答ありがとうございます。
ご指摘の方法で、無事やりたい回転を行うことが出来ました。

ちなみに、私の行列計算だと、「w=1に射影する」計算が完全に抜けていたのですね。

でも、この間違いのために、一週間近く悩んでいましたw
本当にありがとうございました。

>> conio さん

丁寧な解説ありがとうございます。

> ※「離れたポリゴンを描画するには、LISTじゃないと無理」

これは、まさに、そのとおりです。
離れたところのポリゴンを描画するにはLISTじゃないとだめだと思って、LISTで実装しました。
実は、最初は頂点数が減るだろうと、安易にSTRIPで実装したところ、
板と板との間に微妙な三角形が表示されて、LISTにしたという、経緯がありました。

ということから、conioさんが書かれた、縮退三角形を使うことによって、
STRIPで表示することができるというのは、目から鱗の大発明でした!
HPの方も拝見させていただき、より詳細かつわかりやすく、書かれているのに感動しました!

早速実装してみたところ、STRIPを使って一括で板ポリゴンを描画してみたところ、
きれいに描画することができました。

> テクスチャーが異なる場合は、 描画処理を分ける必要があります。 

こちらは、なんとなく、気づいていました。
そのため、できる限りテクスチャを変えないように、一つのテクスチャに複数の画像を含め、
UV座標を変更することによって対応しようと考えています。

色々と、教えていただきありがとうございます。

本件、クローズしたいと思います。


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

Name: 天空橋  ..ぴよぴよ(810ポイント)   Date: 2010/03/10(水) 23:33   No:49040 解決!     
Title: Re:DirectXの板ポリゴンの回転のさせかたについて    
すいません。解決をチェックし忘れてしまいました。

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



Name: no  ..初心者(5,925ポイント)   Date: 2010/03/08(月) 00:18   No:48919       
Title: 構造体内のデータが変化する現象について    
こんにちは、一日考えてわからなかったので質問します。
以下の構造体があるとします。

typedef struct{
    double x,y;
    int flag,counter,maxhp,hp,pattern;
}BODY_enemy_t;
これらの数値を以下の関数を用いて初期化しました。
void ini(){
  enemy.flag=0;
  enemy.hp=11000;
  enemy.maxhp=11000;    
}
この段階では指示通りに変数が代入されます。しかし、 "hp"の前に何らかの変数を追加すると"hp"の値がini関数を通しているのにも関わらず"0"になってしまいます。 たとえば、以下に●を追加すると、hpの中の数値が"0"になります。ini関数通過後も、です。 例をあげると、以下のパターンです。
typedef struct{
    double x,y;
    int flag,●,counter,maxhp,hp,pattern;
}BODY_enemy_t;
typedef struct{
    double x,y,●;
    int flag,counter,maxhp,hp,pattern;
}BODY_enemy_t;


で、hpのあとに●を追加した場合はhpが0にならず、想定どおりに動作します。


*ここでいう想定どおりとは「hpに11000」が代入されるという意味です。
*●は半角英字とお考え下さい。

このように、構造体に箱を追加した後に、そのデータが変化してしまうのはどういった理由が考えられますか?
よろしくお願いします。

環境はvc++2008、winXPです。


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


Name: no  ..初心者(5,889ポイント)   Date: 2010/03/08(月) 00:20   No:48920     
Title: Re:構造体内のデータが変化する現象について    
>で、hpのあとに●を追加した場合はhpが0にならず、想定どおりに動作します。 

とは、

typedef struct{
    double x,y;
    int flag,counter,maxhp,hp,●,pattern;
}BODY_enemy_t;

このような状態のことです。
こちらの場合はini関数通過後、11000が代入されています。


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

Name: たかぎ [URL]  ..ハッカー(168,293ポイント)   Date: 2010/03/08(月) 01:01   No:48922     
Title: Re:構造体内のデータが変化する現象について    
ソースもなければ詳しい状況もわからないので推測の域を出ませんが...

一番可能性が高いのは、翻訳単位間で構造体の定義が矛盾していることかと思います。



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

Name: no  ..初心者(6,822ポイント)   Date: 2010/03/08(月) 02:58   No:48926     
Title: Re:構造体内のデータが変化する現象について    
定義の矛盾なのかはわかりませんが、現在以下のようにしています。

sp.h-------------------------
//構造体
    //プレイヤーに関する構造体
typedef struct{
    double x,y;
    int status,counter;
    int shot[11][15];
    int hp,mp,maxhp,maxmp;
}BODY_player_t;
extern BODY_player_t Player;

typedef struct{
    double x,y,angle;
    int flag,atari;
}SHOT_T;
extern SHOT_T PlayerShot[PLAYER_MAX_SHOT1][PLAYER_MAX_SHOT2];

    //敵に関する構造体
typedef struct{
    double x,y;
    int flag,counter,maxhp,hp,pattern;
}BODY_enemy_t;
extern BODY_enemy_t enemy; 
    
    //敵の弾に関する構造体A
typedef struct{
    int flag,spead;
    double x,y;
}ENEMY_SHOTS_t;

    //敵の弾に関する構造体B
typedef struct{
    int flag,pattern,counter,img;
    double mem_ex , mem_ey , mem_px , mem_py , Angle[ENEMY_TOTAL_SHOT_NUM]; //200
    ENEMY_SHOTS_t EnemyShots[ENEMY_TOTAL_SHOT_NUM][TOTAL_SHOT_KND]; //200
}ENEMY_SHOT_t;
extern ENEMY_SHOT_t EnemyShot;
----------------------------- これをすべての.cppにインクルードし、 1.cpp------------------------
    BODY_player_t Player; 
    BODY_enemy_t enemy;
    SHOT_T PlayerShot[PLAYER_MAX_SHOT1][PLAYER_MAX_SHOT2];
    ENEMY_SHOTS_t EnemyShots[ENEMY_TOTAL_SHOT_NUM];
    ENEMY_SHOT_t EnemyShot;

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

としています。

sp.hで、DxLib.hをインクルードし、
仕様している.cppのすべてにsp.hをインクルードしている状態です。

感想を述べますと、ちょっと構造体の使用方法が異なったため「おや?」と思いましたが、今まで問題なく動作していたのでこのまま作業していました。

ですがもしかしたら、水面下で問題が起きていたのにもかかわらず表面にでていなかった、そしてそれが今回表面上にでた、というものなのでしょうか。

もしこれらの開示情報で読み取れる問題点などあれば指摘下さい。
他に、開示して欲しい情報があれば記していただくと助かります。



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

Name: softya [URL]  ..ハッカー(129,732ポイント)   Date: 2010/03/08(月) 10:44   No:48931     
Title: Re:構造体内のデータが変化する現象について    
ヘッダファイルがソリューションエクスプローラに登録されていないと、ビルド時にヘッダが変更されてもビルドされません。それでじゃないですか?

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

Name: no  ..初心者(6,949ポイント)   Date: 2010/03/08(月) 13:26   No:48935     
Title: Re:構造体内のデータが変化する現象について    
ソリューションエクスプローラに登録している、とは、ソリューションエクスプローラ内に該当のヘッダファイルがある、と同義ですか?

ソリューションエクスプローラの、プロジェクトの中に該当ヘッダファイルは存在します。
もし違うのでしたら、申し訳ありませんがどのようにすればよいか教えてもらえますか?

ただ今までこのヘッダファイルを数ヶ月ずっと使ってきて、突然このような現象が起きて困っています。



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

Name: Justy  ..伝説なるハッカー(504,470ポイント)   Date: 2010/03/08(月) 20:50   No:48957     
Title: Re:構造体内のデータが変化する現象について    
 リビルドしてみては?

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

Name: Col  ..ぴよぴよ(22ポイント)   Date: 2010/03/08(月) 22:26   No:48968     
Title: Re:構造体内のデータが変化する現象について    
vcならばメモリを覗けば一発で原因が分かるでしょう

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

Name: no  ..初心者(7,178ポイント)   Date: 2010/03/09(火) 00:29   No:48970 解決!     
Title: Re:構造体内のデータが変化する現象について    
みなさん、ありがとうございました。
リビルドしたところ、解決しました。
ビルドやリビルド、ヘッダの数値などの認識が甘いようなので、少し勉強してみたいと思います。

ただ、今後の発展の為お聞きしますが、メモリを覗く、とは具体的にどのような方法でしょう?
DrawFormatStringなどの関数で値を確認するという意味でしょうか?



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

Name: Col  ..ぴよぴよ(249ポイント)   Date: 2010/03/10(水) 23:06   No:49038     
Title: Re:構造体内のデータが変化する現象について    
enemy変数をクイックウォッチで単純に参照するのもありだし
ini関数を
void ini(){
  BODY_enemy_t *p = &enemy; ← これ追加
  enemy.flag=0;
  enemy.hp=11000;
  enemy.maxhp=11000;
}
こうしておいて、
[デバッグ]→[ウィンドウ]→[メモリ]→[メモリ1]
でメモリのウィンドウを開きます
デバッグビルドでini関数をステップ実行してpのアドレスのメモリをみると
構造体の各メンバの領域が順番に初期化されていく様子が分かると思います
間違っていたらごめんなさいね


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



Name: ガジェット  ..ぴよぴよ(96ポイント)   Date: 2010/03/07(日) 23:35   No:48915       
Title: 入力について・・・・    
どうも、このサイトを見てやってみようと考えたような全くのド素人です。質問ですが、基礎編のサンプル
ソースを真似して入力してみたのですが、エラーが発生してしまいます・・・・ちゃんと確かめてみたんですが
、間違っているところは特にありません。どうすればいいのですか?長い文ですいません・・・・


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


Name: やんち  ..ぴよぴよ(302ポイント)   Date: 2010/03/07(日) 23:47   No:48916     
Title: Re:入力について・・・・    
まさか、「規約と注意事項」を読んでないなんて事はないかと思いますが、
もう一度、「規約と注意事項」を読み直して、質問内容を修正してみると良いかと忠告しておきます。


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

Name: ガジェット  ..ぴよぴよ(202ポイント)   Date: 2010/03/08(月) 19:15   No:48954     
Title: Re:入力について・・・・    
すいません 質問の方法が悪かったですね・・・ 今後気をつけます・・・
さて、本題に入りますが、自分が困っているのは以下のことです。
1,1 文字の書き方
1,2 このサイト(3)と同じ書き方で
1,3 同じように書いているが、起動しない。
1,4 文字の入力はどうしたらいいのか。 

2,1 WindowsXP
2,2 Visual C++ 2008

3,1 ほとんど理解できていない状態

です。 よろしくお願いします・・・(頼りっぱなしですいません・・・)


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

Name: ひよこ  ..比類無きプログラマー(80,822ポイント)   Date: 2010/03/08(月) 19:43   No:48956     
Title: Re:入力について・・・・    
エラーコードとか書かないとわかりません。

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

Name: グレイトフルデッド  ..ぴよぴよ(67ポイント)   Date: 2010/03/09(火) 10:05   No:48978     
Title: Re:入力について・・・・    
VCを使っているのならデバッグをした時、エラー一覧という形でエラーの内容が出ます
それをよく読んでいくと、エラーの内容、エラーの起きた行が書いてあるので通常はそれを見て直していきます
ただ、初心者には分からないエラーが起きる場合があるので、そういう時は質問しましょう
簡単なエラーならエラー一覧からコピー&ペーストしてくるだけでほとんどの人は分かります


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

Name: ガジェット  ..ぴよぴよ(325ポイント)   Date: 2010/03/10(水) 20:41   No:49033 解決!     
Title: Re:入力について・・・・    
グレイトフルデッドさん
わざわざ僕のために丁寧な指導ありがとうございます!!どうもありがとうございました。
ひよこさん
すいません 次はもっと正確に書けるようにしたいです・・・ありがとうございました。
やんちさん
ご指導ありがとうございました。これからは気をつけたいです。


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



Name: さやちょん  ..ぴよぴよ(426ポイント)   Date: 2010/03/10(水) 16:30   No:49023       
Title: 物理の問題で    

今テスト期間中なのですが、
物理が全然理解できません><

ばねのことについてなんですが、
先生の問題プリントで


ばねに100gのおもりをつるすと、
ばねののびは2.0cmであった。
このばね定数は何N/mか。
また、バネののびを5.0cmにするためには、
ばねに何Nの力を加えなければいけないか。


とあって、
解答には49N/m、0.25N
とかいてあるだけで、
どのようにして答えを出せば良いのか
分かりません。


F=kxを使って出せばよいのでしょうか?


教えてください。


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


Name: たかぎ [URL]  ..ハッカー(168,478ポイント)   Date: 2010/03/10(水) 16:36   No:49024     
Title: Re:物理の問題で    
> 解答には49N/m、0.25N 

2.5Nの間違いでは?


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

Name: no  ..初心者(7,965ポイント)   Date: 2010/03/10(水) 17:07   No:49025     
Title: Re:物理の問題で    
常識といえば、常識の話ではありますが、単位自体が式を表しています。
バネ定数を求めたければ、バネ定数の単位が式になっています。


//ばねに100gのおもりをつるすと、 
//ばねののびは2.0cmであった。 
//このばね定数は何N/mか。 

バネ定数[N/m]=N * 1/m
上の式は、単位が式そのものをあらわしていることを示しています。

mの値はすでに、 2.0[cm] となっていますね。
しかしここで必要なのは、[m]なので、メートルになおします。
[cm]の[c]は10のマイナス二乗(10^-2)をあらわしているので、
mの値は 2.0*10^-2 = 0.02[m]となります。

次に N の値を導出します。
100[g]は0.1[kg]です。
吊るすとは即ち、重力がかかるということなので、 f(重力加速度) をかけてやる必要があります。

よって、 0.1*f[kg] と求めることが出来ます。
しかし、N の単位は [N] なので、これではいけません。  
1*f[kg] = 9.8[N]という換算式があるので、これを使います。
今回は、 0.1*f[kg] = 0.98[N] となります。

これを
バネ定数[N/m]=N * 1/m
に代入すると、

バネ定数[N/m]= 0.98*1/0.02 = 49[N/m]

この分野で大事なのは、

・1*f[kg] = 9.8[N]
・バネ定数[N/m]

この二つですね。
単位が式を表しています。
m  を求めたければ、N/m と N 
N/m を求めたければ、N  と m 
N    を求めたければ、N/m と  m
が、それぞれ必要となります。

単位は必ずメートルにしましょう。
1kgの物体をぶら下げると、1*fkgグラムになります。
1*fkgは、9.8ニュートンです。

私の書いた文章で2問目も解けるはずなので、そちらは自力でやってみてください。

あと、たかぎさんの指摘している通り二問目の答えは2.5[N]です。


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

Name: たかぎ [URL]  ..ハッカー(168,588ポイント)   Date: 2010/03/10(水) 18:37   No:49031     
Title: Re:物理の問題で    
> 私の書いた文章で2問目も解けるはずなので、

あとは有効数字の扱いぐらいでしょうね。


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



Name: ジュンヤ  ..入門者(3,171ポイント)   Date: 2010/03/09(火) 18:16   No:48990       
Title: operatorについて    
「ゲームプログラマになる前に覚えておきたい技術」という本で勉強しているのですが、
わからない部分があったので、質問させていただきます。
template< class T > class Array2D{
public:
    Array2D() : mArray( 0 ){}
    ~Array2D(){
        delete[] mArray;
        mArray = 0;
    }
    void setSize( int size0, int size1 ){
        mSize0 = size0;
        mSize1 = size1;
        mArray = new T[ size0 * size1 ];
    }
    T& operator()( int index0, int index1 ){
        return mArray[ index1 * mSize0 + index0 ];
    }
    const T& operator()( int index0, int index1 ) const {
        return mArray[ index1 * mSize0 + index0 ];
    }
private:
    T* mArray;
    int mSize0;
    int mSize1;
};


このクラスで、operatorが使われている部分の
T& operator()( int index0, int index1 ){
    return mArray[ index1 * mSize0 + index0 ];
}
const T& operator()( int index0, int index1 ) const {
    return mArray[ index1 * mSize0 + index0 ];
}

と定義されているメンバ関数は、どの様な意味になるのかわかりません。
この場合のoperatorは、演算子のオーバーロードとは、まったく関係ないのでしょうか?
どなたか知っている方がいましたら、よろしくお願いします。


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


Name: たかぎ [URL]  ..ハッカー(168,467ポイント)   Date: 2010/03/09(火) 18:25   No:48991     
Title: Re:operatorについて    
これは関数呼出し演算子の多重定義です。
ファンクタ(関数オブジェクト)を作るために定義しています。


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

Name: fatens  ..初心者(8,167ポイント)   Date: 2010/03/09(火) 18:43   No:48993     
Title: Re:operatorについて    
23・24ページにどのように使えるか説明があります。
既読でしたら無視してください。


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

Name: ジュンヤ  ..入門者(3,213ポイント)   Date: 2010/03/10(水) 17:40   No:49026 解決!     
Title: Re:operatorについて    
関数呼出し演算子の存在を知りませんでした。
おかげ様で調べることができました。
たかぎさん、fatensさん
ありがとうございました。


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



Name: no  ..初心者(7,016ポイント)   Date: 2010/03/08(月) 14:35   No:48937       
Title: ケロちゃんなどのブレンドについて    
ケロちゃん雨風に負けずの上部のような弾自体を輝かせる方法についてお聞きします。
αブレンドを使うのか、と思い実装してみましたが、あのように綺麗な輝きは表現できませんでした。
あれはどのような値でブレンド、あるいは実装しているのでしょうか?


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


Name: ひよこ  ..比類無きプログラマー(80,661ポイント)   Date: 2010/03/08(月) 15:14   No:48940     
Title: Re:ケロちゃんなどのブレンドについて    
龍神録の館にありますよ。
加算ブレンドをランダムな値でして、光らせているようです。


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

Name: no  ..初心者(7,086ポイント)   Date: 2010/03/08(月) 15:42   No:48943     
Title: Re:ケロちゃんなどのブレンドについて    
うーん、全ページ「ブレンド」で検索かけてみましたが、ヒットしませんでした。
単なる見落としという可能性もありますが……。

何章に記述されています?


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

Name: ひよこ  ..比類無きプログラマー(80,814ポイント)   Date: 2010/03/08(月) 19:40   No:48955     
Title: Re:ケロちゃんなどのブレンドについて    
すみません、加算とかブレンドは書いてませんでした。
if(boss_shot.bullet[j].eff_detail==1){//風雨にも負けず用弾エフェクト

                    SetDrawBlendMode( DX_BLENDMODE_ADD, 100+GetRand(155)),eff=1 ;
                    DrawRotaGraphFdF(
                        boss_shot.bullet[j].x, boss_shot.bullet[j].y,
                        1.3, disp_angle,
                        img_bullet[boss_shot.bullet[j].knd][boss_shot.bullet[j].col],TRUE);
                }
48章のソースには上のように書いてあったので、そう答えました。


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

Name: no  ..初心者(7,246ポイント)   Date: 2010/03/10(水) 15:27   No:49022 解決!     
Title: Re:ケロちゃんなどのブレンドについて    
SetDrawBlendMode( DX_BLENDMODE_ADD, 100+GetRand(155))
この部分ですね。
なるほど、皆さんとても賢いものです。

参考にさせていただきます。ありがとうございました。


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



Name: 組木紙織  ..比類無きプログラマー(77,308ポイント)   Date: 2010/03/07(日) 19:13   No:48911       
Title: C/C++でつかえるXMLパーサーは?    
現在XMLで描かれた国土地理院の数値地図のデータをもちいて、GMTというソフトで地図を描こうとしています。
GMTのデータは数値地図のデータに対応していないのでデータを変換することが必要です。
そこで、無料で使えるXMLのパーサーを探しています。

軽く調べたところパーサーには、XMLのデータ構造をメモリ上にすべて展開するパーサーと、そうでなパーサーがあるようです。
データ量が非常に多いことが予想されるので、メモリ上にすべて展開しない形式の、比較的使いやすい
XMLのパーサーを知りませんでしょうか?


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


Name: ぽこ  ..初心者(7,423ポイント)   Date: 2010/03/07(日) 19:30   No:48912     
Title: Re:C/C++でつかえるXMLパーサーは?    
有名どこでxercesとかどうでしょうか?

http://xerces.apache.org/xerces-c/


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

Name: 組木紙織  ..比類無きプログラマー(77,394ポイント)   Date: 2010/03/07(日) 22:29   No:48913     
Title: Re:C/C++でつかえるXMLパーサーは?    
ぽこさんありがとうございます。
とりあえずxercesをインストールしてみました。

使い方がまだ全然分からないので、サンプル探しながら使い方を調べていこうと思います。


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

Name: やんち  ..ぴよぴよ(379ポイント)   Date: 2010/03/07(日) 22:37   No:48914     
Title: Re:C/C++でつかえるXMLパーサーは?    
・libxml
http://xmlsoft.org/

・xerces-c

・Expat
http://expat.sourceforge.net/

Expat は処理が速くて、コンパクトだけど、機能が貧弱。
libxmlは依存関係が複雑。

なので、xerces-c をお勧めしておきます。


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

Name: 組木紙織  ..比類無きプログラマー(77,506ポイント)   Date: 2010/03/10(水) 00:33   No:49010     
Title: Re:C/C++でつかえるXMLパーサーは?    
やんちさん
ほかのライブラリの例ありがうございます。

ぽこさんと同じくxercesが使い安いという解釈でいいでしょうか?
余裕があればほかのライブラリに手を出してもいいとは思いますがとりあえずxercesを使えるようにしていきます。


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



Name: rolf  ..ぴよぴよ(85ポイント)   Date: 2010/03/09(火) 22:05   No:48998       
Title: 33. 選択画面の作り方。    
ゲームプログラミングの館の   33. 選択画面の作り方。 で

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

がいまいちわからないです 言葉で説明していただけませんか?


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


Name: kazuoni [URL]  ..ハッカー(136,643ポイント)   Date: 2010/03/10(水) 00:18   No:49009     
Title: Re:33. 選択画面の作り方。    
int GetHitKeyStateAll_2(int KeyStateBuf[]){
    char GetHitKeyStateAll_Key[256]; // 予備
    GetHitKeyStateAll( GetHitKeyStateAll_Key ); // 元状態のキー状態を予備に保存(配列に入る数字は0 or 1)
    for(int i=0;i<256;i++)
    {
        if(GetHitKeyStateAll_Key[i]==1) // 入力があればインクリメント
            KeyStateBuf[i]++;
        else                
            KeyStateBuf[i]=0;
    }
    return 0; 
}


結局は、
「入力が0か1か」
ではなく、
「何フレーム間押されているか」
を監査しています。
こうする事によって、押された瞬間は[Key]=1 , 長押しは[Key]>40
などとすることができ、便利です。


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



Name: Tatu  ..プログラマー(27,372ポイント)   Date: 2010/02/20(土) 00:09   No:48257       
Title: アクションパズルゲームを作りました    
名前は「パネル変化大作戦」

アップローダー http://www1.axfc.net/uploader/Li/so/59454&key=PaneHen

公開期間は1ヵ月です。

「パネポン」のパネル入れ替えをパネルの色変えに変えたようなゲームです。
色を変えて同じ色のパネルを3つ以上縦か横に並べると消えます。
たくさん連鎖や同時消しをすることで高得点をめざせ。
しかし、パネルはせりあがってくるのでのんびりしていると
あっという間にゲームオーバー。

前のスレッドでも公開していたのですが、
公開していたのがわかりにくかったかと思い、
新しくスレッドをたてました。

前回からの変更点
  連鎖・同時消しの表示を追加
  スタート時に勝手に消えないようにした
  せり上げ時に横に3個以上並ばないようにした

今までの作品も同梱してあります。
  星と陰陽玉:「東方靈異伝」風ブロック崩し
  星追う旅人:「マリオ」風アクション、ステージエディターつき
  八方位シューティング:敵をどれだけ速く倒せるかを競うシューティング
  緑三角の冒険:剣を使い、洞窟のボスを倒すアクション

さらに「緑三角の冒険」のクリア動画もつけておきます。

あと、ニコニコ動画でこんな動画を見つけました。

C&DxLibでパネポンもどきを作りたい
今のところ6まであります。

1. http://www.nicovideo.jp/watch/sm5343398
2. http://www.nicovideo.jp/watch/sm5607931
3. http://www.nicovideo.jp/watch/sm5875905
4. http://www.nicovideo.jp/watch/sm6000097
5. http://www.nicovideo.jp/watch/sm6670171
6. http://www.nicovideo.jp/watch/sm9268569



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


Name: Dixq (管理人) [URL]  ..ウィザード(1,152,609ポイント)   Date: 2010/02/20(土) 00:52   No:48264     
Title: Re:アクションパズルゲームを作りました    
お〜面白いですね^^
しかし・・・終わらない・・(汗
これ段々早くせりあがってくるようにならないと無限に続いてしまいますね;
下の方で消すと高得点とか、あるといいなと思いました。

とりあえず1万点で体力が尽きたので終わってしまったのですが、10万点上限とか何かクリア的なものはあるのでしょうか?


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

Name: Tatu  ..プログラマー(27,800ポイント)   Date: 2010/02/20(土) 19:14   No:48307     
Title: Re:アクションパズルゲームを作りました    
「パズル変化大作戦」を更新しました。
中身はこのゲームのみで1ヵ月の公開です。
アップローダー http://www1.axfc.net/uploader/Sc/so/84864&key=PaneHen


レベル機能を追加しました。
これに伴い、初期の色の数と
せり上げ速度を減らすことで、
最初のほうをよりやさしくし、
レベルが上昇すると今よりも
もっと難しくなるようにしています。
そのかわり、レベルが上がるとパネルを消したときの
得点が増えるようになっています。


また、

無黄黄無
無緑緑黄
赤赤赤緑
のとき3連鎖扱いになり、

無黄黄
無他他黄
無緑緑他
赤赤赤緑
のとき2連鎖目で黄色が消えない

バグを修正しました。

>Dixq さん

プレイありがとうございます。
1万点をこえるとは結構うまいですね。
色が6色もあるし、せり上げも遅くはないと思ったのですが。

得点は普通にたどり着けるような上限
(現在はunsigned __int64でこれをこえると0になる)
をつけるつもりはありません。
難しさは今回の更新でレベルが100をこえたときに最高になるようにしました。
今のところ、クリア演出はありません。


>下のほうで高得点
落ちものパズルで上のほうで消すと
得点が上がるルールがあるものがありましたが、
このゲームでは下のほうで消すと
その分落下するパネルが増え、
連鎖や同時消しが起こりやすくなるため、
特に変更を加える必要性を感じないので、
そのままにしておきます。


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

Name: DVDM [URL]  ..熟練のプログラマー(51,642ポイント)   Date: 2010/02/21(日) 03:12   No:48335     
Title: Re:アクションパズルゲームを作りました    
久しぶりに見ると楽しそうなものが上がってますね。

お久しぶり?です。
先日メダル泥棒でタイムを競ってたDVDMです。
しばらく忙しかったのでメダルの記録はあのまま終わってしまい過去ログにいっちゃいました;
途中でどっかいってすいませんでした;



さてこのゲームについてですが、要望?とかは受け付けてるんでしょうか。


一応書いときます。

・BGM、SEを入れるだけで雰囲気がごろっと変わると思います
・今までに取った最高得点や連鎖数、消したパネルの数なども表示されているといいかなぁ〜とか
・現在プレイしている中での最高連鎖数を表示


とりあえず、消したパネル数が2500手前まで行ったあとお手洗いに行こうと思い
一時中断しようとESCキーを押したら終了しました;



プレイしていて気になった・・・といっても大したことはないと思うのですが
パネルが消えているエフェクト中に、そこにブロックが落下した時
そこでも連鎖の判定を行ってるのでしょうか?


個人的な感覚としては
エフェクト中にブロックが落下する→ その時に消えれば普通に消える→ その次に消えたら連鎖がつながる
という感覚でしたので仕様でしたらすいません。


パネルを消した後、落下した時に繋がっていれば連鎖できるので運任せではなく
狙って5〜10連鎖くらいできるのが気持ちいです。
ほんと、効果音つけるだけでもやってみてほしいっす;


自分の中でのジャンル一位がパズルゲームですので凄く楽しかったです。
レベルが100まであるそうなので行けそうなら頑張ってみますかな・・・。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,155,090ポイント)   Date: 2010/02/21(日) 10:43   No:48344     
Title: Re:アクションパズルゲームを作りました    
お〜面白くなりましたね^^
レベル40↑からのあの緊張感がいいですw


いつの間にか一列だけせり上がっててゲームオーバーになってました^^;
う〜む悔しい・・。
個人的にはレベル50になるまでに時間がかかるので、もっと早くレベルが上がってくれたらなと思いました。


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

Name: Tatu  ..プログラマー(28,345ポイント)   Date: 2010/02/21(日) 22:06   No:48381     
Title: Re:アクションパズルゲームを作りました    
「パネル変化大作戦」の更新です。
例によって1ヵ月の公開となっております。

アップローダー http://www1.axfc.net/uploader/Sc/so/85296&key=PaneHen

最高のスコア、連鎖数、同時消し数、消去数を
タイトルに表示するようにし、それらをセーブする機能も付けました。
そのプレイ中最高の連鎖も表示するようにしました。


>DVDM さん
お久しぶりです。
上記の通り更新しましたがどうでしょうか?

>BGM,SE
その「雰囲気が変わる」というのが問題なんですよね。
下手に音をつけるぐらいならばつけないほうがよいかもしれませんし。
まあ、できれば音のON/OFF切り替え機能と一緒に実装したいと思います。

>消去エフェクトと連鎖の関係

たとえば

無緑緑
1黄黄緑
2赤赤他

のようになっていた時

1,2で示したパネルをそれぞれ黄、赤と変えて消したとき、
黄の上に乗っていた緑が消去中の赤の上に落ちて消え、連鎖に
なるというような場合のことですか?それならば仕様です。

>運任せではなく狙って連鎖ができるのが気持ちいい
それでしたら元ネタである任天堂のパネポンも楽しめるでしょうね。
それとも、もうやったことがありますか?


>Dixqさん
>もっと早くレベルが上がってほしい
スタート時のレベルセレクトの導入を考えています。
今はレベルを上げるのに必要なパネルの数を減らすつもりはありませんが
もしかしたら減らすかもしれません。


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

Name: DVDM [URL]  ..熟練のプログラマー(52,102ポイント)   Date: 2010/02/22(月) 00:56   No:48430     
Title: Re:アクションパズルゲームを作りました    
>>Tatuさん
>その「雰囲気が変わる」というのが問題なんですよね。
音を出している方が消したとかが視覚だけでなく、聴覚にも訴えかけてくるので
より操作感が出るのではないかな・・・という意味合いで言ってみただけでございます。



>消去エフェクトと連鎖の関係
仕様でしたか。ならば問題なしっす。


>それでしたら元ネタである任天堂のパネポンも楽しめるでしょうね。
>それとも、もうやったことがありますか? 

私がパズルゲームをやり始めるきっかけになったゲームなのでそうとうな時間やりこんでいます。
絵がきれいになったゲームキューブ版をやりたいがためにキューブを買ったくらい大好きです。


リアルタイム連鎖というのが操作している感じが出ていて凄くいいと思います。
おじゃまをパネルを使わないでのパネポンの最大連鎖数は21連鎖。
連鎖中にせり上げとかできたらもっと大連鎖できるのでさらに神ゲーになってた気がします。


では、更新されたみたいなので頑張ってみますね。


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

Name: Tatu  ..プログラマー(28,723ポイント)   Date: 2010/02/23(火) 17:42   No:48497     
Title: Re:アクションパズルゲームを作りました    
「パネル変化大作戦」を更新しました。
ポーズ、スタート時のカウントダウン
fps制御、そのプレイでのプレイ時間の表示を追加しました。
ただし、ポーズにするのはSPACEキーで、
ESCで終了なのはそのままなので注意してください。


アップローダー http://www1.axfc.net/uploader/Sc/so/85843&key=PaneHen


>DVDM さん

私が初めてパネポンをやったのは
小学生の時にGB版の「ヨッシーのパネポン」を友達に
貸してもらったときですね。
その後しばらくしてゲームキューブで「NINTENDOパズルコレクション」
(ドクターマリオ、パネルでポン、ヨッシーのクッキーの3本のパズルが遊べるソフト)
が出たのでそれを買って「やっぱり面白い」と思いました。
おじゃまを使わないでできた最大連鎖は17連鎖ぐらいだったような気がします。
コンピューター戦はいちばん難しいV-HARDをクリアできました。

>連鎖中のせり上げ
そういえばゲームキューブからGBAにデータを移すことで遊べるものでは
そういう設定もできるようになっていましたね。


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

Name: バグ  ..ハッカー(190,095ポイント)   Date: 2010/02/24(水) 08:32   No:48529     
Title: Re:アクションパズルゲームを作りました    
こういうパズルが大好きな私が来ましたよ(笑)
一見、パネポンっぽいですが、中身は別物なんですね。
面白いんで、黙々と遊んでしまいました(笑)
他の環境に移植とかしちゃってもいいですか?


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

Name: Tatu  ..プログラマー(28,648ポイント)   Date: 2010/02/25(木) 20:05   No:48577     
Title: Re:アクションパズルゲームを作りました    
レベルセレクトとパネルの消去音、音の有無の切り替え機能を実装しました。
今回はコードも同梱してあります。(.sln,.vcproj,sourceフォルダに.cpp,.h)

アップローダー http://www1.axfc.net/uploader/Sc/so/86457&key=PaneHen

>>バグ さん
  他の環境用に作ってもいいですよ。


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

Name: Tatu  ..プログラマー(29,045ポイント)   Date: 2010/02/27(土) 23:48   No:48663     
Title: Re:アクションパズルゲームを作りました    
今回はタイムアタックモードとパネルの模様を追加しました。

アップローダー http://www1.axfc.net/uploader/Sc/so/87210&key=PaneHen


タイムアタックモードはレベル固定の2分間でスコアを競うものになっています。
ただし、記録は保存されません。

パネルの模様は一種類のみの追加で今までのものと
追加したものの2つから選べるようになっています。


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

Name: Tatu  ..プログラマー(29,595ポイント)   Date: 2010/03/03(水) 23:47   No:48782     
Title: Re:アクションパズルゲームを作りました    
今回の更新は
ストップ機能、ノンストップモード、
スタート時のカウントダウンの音
パネルの模様の追加です。
また、せり上げ速度がレベル100をこえても
上がり続けるようにしました。

アップローダー http://www1.axfc.net/uploader/Sc/so/88538&key=Panehen

ストップ機能は連鎖や同時消しを行ったときに
パネルのせり上げを止める機能です。

ノンストップモードはパネルの消去によって
せり上げを止めることができない難しいモードです。
ただし、いちばん上までパネルがいってせり上げが止まった状態でも
パネルを消していない状態が1秒続かなければゲームオーバーにはなりません。

パネルの模様は二種類追加しました。


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

Name: Tatu  ..プログラマー(29,681ポイント)   Date: 2010/03/06(土) 15:26   No:48886     
Title: Re:アクションパズルゲームを作りました    
今回は作成途中のおじゃまモードを追加しました。

アップローダー:http://www1.axfc.net/uploader/Sc/so/89534&key=PaneHen


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

Name: Tatu  ..プログラマー(29,555ポイント)   Date: 2010/03/10(水) 00:05   No:49007     
Title: Re:アクションパズルゲームを作りました    
おじゃまモードができました。
また、パネルの模様、BGM、ポーズメニュー、各モードのハイスコア表示画面を追加しました。
今回はソース付きです。

アップローダー http://www1.axfc.net/uploader/Sc/so/90861&key=PaneHen





最近、サンプルプログラミングの館より
AerobeatPlus公式ページのほうがこのサイトの5本柱の一つとして
ふさわしくなっていると思う。


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



Name: setuna [URL]  ..ぴよぴよ(95ポイント)   Date: 2010/03/09(火) 00:05   No:48969       
Title: RPGについて    
今、卒業制作でRPGを作っていて4方向スクロールとマップは出来ているのですが戦闘シーンの入り方と戦闘のシステムの作り方がわかりません。
一様今、考えている戦闘システムはFFみたいなサイドビューで攻撃の仕方はドラクエみたいなターン制にしてみたいと思っています。後、通常攻撃と魔法が使えるようにしたいです。

長文になってごめんなさい。
こんな贅沢な事を言ってすみません…。どなたか助けてください。


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


Name: softya [URL]  ..ハッカー(130,090ポイント)   Date: 2010/03/09(火) 00:33   No:48971     
Title: Re:RPGについて    
>卒業制作でRPGを作っていて4方向スクロールとマップは出来ているのですが
この時季に卒業制作ですか?
それはRPGが出来ている内には入りませんよ。
下に思いつくものを書きましたので何処まで完成していて、何処が残っているか教えてください。
それに、卒業制作の締切りの日付も教えてください。

[プログラム作業]ざっと考えただけでも次のものが必要です。
・フィールド処理(移動・エンカウント・街人表示・イベント処理など)
→マップを作成するツールも必要。
・バトル処理(バトル突入エフェクト、メニュー、攻撃処理、魔法処理、敵の思考ルーチン、経験値処理、アイテム処理)。
・成長システムの処理。
・アイテムや装備などの処理
・買い物のSHOP処理
・シナリオを実行するスクリプト処理。
・メニューやセーブロードなど。

[プログラミング以外の作業]
・シナリオ。
・シナリオを実行するスクリプトコード。
・フィールド背景データ。
・主人公や町人などのフィールド・キャラクタデータ
・戦闘背景データ。
・戦闘キャラクタデータ。
・音楽や効果音データ。
・アイテムや主人公、敵キャラなどのデータ、パラメータ。

ちなみにバトルシステムだけでも一ヶ月以上は見た方が良いです。
初めてなら2ヶ月以上はかかるでしょう。 編集済み


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

Name: setuna [URL]  ..ぴよぴよ(168ポイント)   Date: 2010/03/09(火) 01:28   No:48972     
Title: Re:RPGについて    
softyaさん、お返事ありがとうございます。

・フィールド処理(移動・エンカウント)までしか出来ていません。
卒業作品の締切は6月中旬です。ちなみに制作はチームでやっていてグラフィッカーとシナリオとプログラマー(自分)です。


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

Name: setuna [URL]  ..ぴよぴよ(175ポイント)   Date: 2010/03/09(火) 01:52   No:48973     
Title: Re:RPGについて    
自分が組んだプログラムです。 編集済み

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

Name: softya [URL]  ..ハッカー(130,829ポイント)   Date: 2010/03/09(火) 11:53   No:48981     
Title: Re:RPGについて    
えーと、プログラムが入っていませんでした(画像データだけでした)。
RPGのシステムを作ることは片手間では出来ませので、アイデアや軽いお手伝いしか出来ませので、ご了承下さい。

さて、残り3ヶ月ですよね。残りでどれだけのものを作るか決めてますか?
ドラクエ1レベルでさえ、後1年ぐらい必要だと思いますので、3ヶ月だとかなりの省略が必要です。私が出来そうだと思うシステムは。
(1)街はない方向で。
→フィールドに家のアイコンがあって、入るとSHOPや街人との会話になっているぐらいのレベル。
(2)ダンジョン数個。特に仕掛けとかはしない。宝箱ぐらい?→宝箱も諦めた方が良いかも。
(3)パーティはいない。プレイヤーはひとりだけ。パラメータの成長もレベルに合わせて計算だけで処理。
パラメータも極力少なく。HP、MP、攻撃力、防御力ぐらい。
(4)アイテムや装備は出来るだけシンプルに。回復アイテムと鎧と剣だけとか。
(5)セーブは一箇所だけ。
(6)メニューも極力シンプルに装備、アイテム使う、ステータス確認ぐらい。
(7)シナリオは、C言語のプログラムで記述する。出来てもcsv記述の簡単なもの。
→Lua組み込みや、簡易スクリプト作る暇が無い。
(8)バトルシステムは、ドラクエ1程度にする。FFだとアニメとかが有り難易度が高いため。
魔法も回復魔法だけ。特殊魔法は無し。
これでも初心者が3ヶ月だと、ほぼ無理なレベルですよ。それぞれにかかる時間を自分なりに見積もって、ここに書いてもらえますか?それで間に合うかどうか分かると思います。残り3ヶ月有ると言っても最後の2週間ぐらいはデバッグですので、それも(9)として計算に入れて置いて下さい。
あと、パラメータとかバトルバランスは誰が担当するのか、今のうちに決めておいた方が良いです。なんとかくプログラマーが担当すると、後で痛い目を見ますよ。

さて、バトルシステムの件ですが、バトルシステムだけのキャラクタを表示しない物は作れますか?まず、そこから始めて見ましょう。

ちなみに、ここの管理人さんが作ったRPGの部分的なサンプルですが、どれだけ大変かソースコード見てもらうと分かります。
http://dixq.net/sm/d10.html





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

Name: setuna [URL]  ..ぴよぴよ(341ポイント)   Date: 2010/03/09(火) 13:58   No:48982     
Title: Re:RPGについて    
すみません。プログラムはTXT形式で渡しますね。

一通り見ましたが自分だと2、3年かかると思います。でも、なんとか頑張ってRPGを完成させたいです。

>さて、バトルシステムの件ですが、バトルシステムだけのキャラクタを表示しない物は作れますか?まず、そこから始めて見ましょう。

すみません。出来そうにないです…。 編集済み


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

Name: setuna [URL]  ..ぴよぴよ(355ポイント)   Date: 2010/03/09(火) 14:09   No:48983     
Title: Re:RPGについて    
すみませんマップです。

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

Name: softya [URL]  ..ハッカー(131,094ポイント)   Date: 2010/03/09(火) 14:14   No:48984     
Title: Re:RPGについて    
うーん。厳しいことを言いますが、冷静に物事を判断出来ない人はプログラムを完成させることは出来ません。
>一通り見ましたが自分だと2、3年かかると思います。でも、なんとか頑張ってRPGを完成させたいです。 
これは根性論でしかなく、デスマーチ理論です。
まず、作業時間を見積りして、そこから出来ること出来ないとを判断して行くのがプログラマのやるべき事です。
あなたがそんな状態では他の人(グラフィッカーとシナリオ担当)に大変迷惑を掛けることになりますよ。
時間的に無理な物は絶対に完成しないので、他のシューティングとかADVとか路線変更すれば完成出来るかもしれないのに、無理を通すことで半端な未完成品しか出来ずに終わってしまう可能性が高いわけです。

まず、(1)から(9)を1つづつ今の段階で分かる範囲で作業時間を見積もって下さい。


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

Name: setuna [URL]  ..ぴよぴよ(645ポイント)   Date: 2010/03/09(火) 18:34   No:48992     
Title: Re:RPGについて    
難しい事を言ってすみませんでした。
冷静に考えて見積もってみました。

1、1週間ぐらい

2、3〜4日

3、2週間ぐらい

4、1週間ぐらい

5、2日

6、5〜6日

7、csv記述を調べたんですがよくわからなかったです。

8、4週間ぐらい

9、2週間ぐらい

こんな感じです。


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

Name: softya [URL]  ..ハッカー(131,747ポイント)   Date: 2010/03/09(火) 19:59   No:48994     
Title: Re:RPGについて    
setunaさんのプログラムコードがやけにキレイだと思ってたら。ふと思い当たる節があり調べてみました。
↓下記サイトのプログラムのほぼそのままですね?
http://inu.harisen.jp/top.html
あと、誰かの協力で組み替えていませんか?
この場合は、自分が何処まやったのかを明確にしてください。
力量が分からないと見積りが正しいか判断出来ませんので。

※ ここまでを自力で完成出来なかったのなら、これから先は更に高難易度です。参考サイトもあまりないので、自力で組む力が無いと完成など不可能だとだけ先に言っておきます。


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

Name: setuna [URL]  ..ぴよぴよ(727ポイント)   Date: 2010/03/09(火) 20:36   No:48995     
Title: Re:RPGについて    
正直に言うとプログラム全体はサイトを参考に作りました。
後のエンカウントとタイトル画面表示は友達と一緒にプログラムを組んで、自分で組んだ所はタイトル画面のフェードイン、フェードアウトと戦闘画面の表示だけです。


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

Name: softya [URL]  ..ハッカー(131,740ポイント)   Date: 2010/03/09(火) 21:08   No:48996     
Title: Re:RPGについて    
>後のエンカウントとタイトル画面表示は友達と一緒にプログラムを組んで、自分で組んだ所はタイトル画面のフェードイン、フェードアウトと戦闘画面の表示だけです。

その友達には手伝ってもらえないんですか?
今のままだと、どう考えてもsetunaさんの技量で完成するとは思えません。二人で作業しても、ほぼ時間的に無理だと思いますが、友達の技量しだいでは超簡易RPGなら完成するかも知れません。
それが無理なら、チームメンバーと相談して方針変更など話し合われた方が良いと思います。

例えば下記サイトには未完成ながらADVのシステムの講座があります。
http://karetta.jp/book-cover/game-programming
これの未完成部分を補って自力でADVシステムを完成出来るでしょうか?
RPGを作ると言うことは、これより難しい物を作ると言うことです。


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

Name: setuna [URL]  ..ぴよぴよ(746ポイント)   Date: 2010/03/09(火) 22:13   No:48999     
Title: Re:RPGについて    
その友達はまた違うチームなので無理だと思います。

RPGはチームと話し合ってみて方針をかえてみたいと思います。
それとこの三ヶ月間で出来そうなゲームのジャンルを教えていただけますか?

 編集済み


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

Name: conio [URL]  ..比類無きプログラマー(78,628ポイント)   Date: 2010/03/09(火) 22:39   No:49000     
Title: Re:RPGについて    
>>それとこの三ヶ月間で出来そうなゲームのジャンルを教えていただけますか?

画像や内容ともに満足の行く出来になりそうなものは 
----------------
・インベーダー
・ブロック崩し
・ぷよぷよ
・倉庫番
----------------
などの、パズルゲーム(ミニゲーム)などでしょうか。

勿論 完成するか 未完成になるかは、
ゲーム自体の仕様と、開発作業スピード で変わると思います。 編集済み


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

Name: softya [URL]  ..ハッカー(131,641ポイント)   Date: 2010/03/09(火) 23:55   No:49005     
Title: Re:RPGについて    
今作っているシステムにシナリオが搭載出来るなら、戦闘の無いファンタジーADVには出来ると思います。
ただ、今までの話からマップチェンジとか、NPCとか、イベントの発生部分とかを作れるのかっての疑問が有ります。どうでしょう、作り方は分かりますか?


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



Name: HIT  ..かけだし(2,086ポイント)   Date: 2010/03/08(月) 16:45   No:48951       
Title: エラー    
以下のソースを実行することはできるのですが、新しくつくる 1キー   やめる 2キー   この猫で戦う 3キー で数字ではない文字を打つとエラーになって高速文字打ち出しのループみたいなかんじになってしまいます・・・INT型でやっているからだとはおもうのですが、文字、数字対応の型はありませんか?詳しくえて下さい(ソースには無駄が多いとおもいますがそこは勘弁してください・・・)長文ごめんなさい(戦闘力は見かけだけで勝敗とはかかわっていません)




#include<iostream>
#include<string>
#include <cstdlib>
#include <ctime>

using namespace std;

class neko{
    string name;
public:
    neko(string);
void naku() const;

};

neko::neko(string s) : name(s){}

void neko::naku() const{
    
    cout<<"あなたがご主人様なのにゃ?"<<endl;
      cout<<" "<<endl;
    cout<<"ぼくは"<< name <<"なのにゃ! よろしくにゃ!"<<endl;
    cout<<" "<<endl;
     
    
int x = rand()%10 + 1;
    cout<<"戦闘力"<<x<<"の猫が作成されました"<<endl;
    cout<<" "<<endl;
    }


int main(){

while(1){

string s;

int ans;

int ans3;


string ans2;

srand( (unsigned)time( NULL ) );

cout<<"猫を作成します 名前を付けてあげて下さい"<<endl;

cout<<" "<<endl;
    
cin>>s;

cout<<" "<<endl;

cout<<"猫がやってきました"<<endl;

cout<<" "<<endl;
    



neko first(s);

    first.naku();

    cout<<"この猫で戦いますか? または この猫を消去して新しい猫をつくりますか?"<<endl;

    cout<<" "<<endl;

while(1){

    cout<<endl;
    cout<<" "<<endl;
    cout<<"新しくつくる 1キー   やめる 2キー   この猫で戦う 3キー"<<endl;
    cout<<" "<<endl;
    
    cin>>ans;
    
    if(ans == 1){

    break;
                }

else if(ans == 2){

    break;
                 }

else if(ans ==3){

    cout<<" "<<endl;

    cout<<"相手の猫を作成します 名前を付けてあげて下さい"<<endl;

    cout<<" "<<endl;
    
    cin>>ans2;

    

cout<<" "<<endl;

    cout<<s<<"と"<<ans2<<"のバトル!"<<endl;

    

    if (rand() % 2 + 1 == 1){
cout<<" "<<endl;
        cout<<s<<"が先制攻撃!"<<endl;

        cout<<" "<<endl;
    }

    else if (rand() % 2 + 1 == 2){
cout<<" "<<endl;
        cout<<ans2<<"が先制攻撃!"<<endl;
        
        cout<<" "<<endl;

    }
if (rand() % 2 + 1 == 1){
cout<<" "<<endl;
    cout<<s<<"の勝利!"<<endl;

}



else{cout<<" "<<endl;
cout<<ans2<<"の勝利!"<<endl;}

}
else{
    cout<<" "<<endl;
    cout<<"不適切な数字です"<<endl;
    cout<<" "<<endl;
    cout<<"まだ猫をつくりますか?"<<endl;
    }

}
if(ans == 2){

    break;
            }
}
cout<<" "<<endl;
cout<<" "<<endl;
cout<<"終了します"<<endl;
system("PAUSE");
}


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


Name: Justy  ..伝説なるハッカー(504,634ポイント)   Date: 2010/03/08(月) 21:45   No:48965     
Title: Re:エラー    
 cin >> ans が成功したかどうかは cin.fail()の戻り値で調べることができますので、
失敗していたら適切に対処すればいいかと思います。


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

Name: hit  ..初心者(5,338ポイント)   Date: 2010/03/09(火) 21:38   No:48997 解決!     
Title: Re:エラー    
ありがとです

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



Name: レッドリ  ..ぴよぴよ(737ポイント)   Date: 2010/03/07(日) 01:34   No:48890       
Title: こういう3D背景を作りたいのですが…    
ぼくはVC++EE2008,DXライブラリでゲームを作っています。
こんな感じの背景を作りたいのです。
柱と地面がこちらにむかってくる背景です。
確か、yuさんが以前公開されていた東方紅魔館EXのSTGのような背景にしたいと思っています。

龍神録では、壁が連続で表示されているので
これを、少し間を空けて表示させたいのですが、
どうすればできるでしょうか?

60章のここを変更してみたのですが、あまり変化しませんでした。
   Ob->ObchindMax = OBCHILD_MAX;
    if( Ob->Type >= 0 ){// デフォルトではif( Ob->Type == 0 )
        Ob->ObchindMax = ObchildMax;
    }

OBCHILD_MAXを小さくしても画像が伸びるだけで、できませんでした…。

 編集済み


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


Name: Justy  ..伝説なるハッカー(503,906ポイント)   Date: 2010/03/07(日) 16:50   No:48904     
Title: Re:こういう3D背景を作りたいのですが…    

> 実行してみたのですが、結果は変わらず、 
> 壁が連続して表示されていました。 

 その修正方法の是非はともかく、Ob->ObchindMaxが表示するポリゴンの数を制御するものなのは
確かだと思います。

 ただ 60章のコードは、最終的にポリゴンが連なって表示された時の長さが常に一定になるよう
1ポリゴン毎のZ方向のサイズを調整したはずです。
 この状態では最終的に表示される奥行きなどは変化しません。
 ただ個々のポリゴンに目を向ければマッピングされているテクスチャが引き延ばされたり
圧縮されたりと何らかの変化があるはずです。

 そのあたり確認してみてください。


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

Name: Justy  ..伝説なるハッカー(504,169ポイント)   Date: 2010/03/07(日) 17:00   No:48906     
Title: Re:こういう3D背景を作りたいのですが…    
 書き忘れました。
> 東方紅魔館EXのSTGのような背景にしたい 
 そういう3Dモデルを作って表示した方が調整も楽ですし、手っ取り早いと思いますよ。


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

Name: レッドリ  ..かけだし(1,122ポイント)   Date: 2010/03/08(月) 02:46   No:48925 解決!     
Title: Re:こういう3D背景を作りたいのですが…    
Justyさんの言うとおりに、柱モデルを作って、
龍神録と同じような近づいてくる描画はできました。
本当にありがとうございます。

このスレッドの項目は達成できたので解決にします。 編集済み


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

Name: Justy  ..伝説なるハッカー(504,549ポイント)   Date: 2010/03/08(月) 21:30   No:48959     
Title: Re:こういう3D背景を作りたいのですが…    

> これが3Dモデルをαブレンドする関数でしょうか? 

 そうですが、MV1SetOpacityRate()を使った方がもっと楽だと思います。
 勿論加算とかするなら、ブレンド関数の方でないとだめですが。


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

Name: Justy  ..伝説なるハッカー(504,591ポイント)   Date: 2010/03/08(月) 21:36   No:48962     
Title: Re:こういう3D背景を作りたいのですが…    
 ああ、2Dと違って3Dの透明描画は結構厄介です。
 3Dモデルの多くは普通に半透明で表示すると描画が破綻することがあります。
 その場合はまた別のアプローチが必要になるかもしれません。


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

Name: レッドリ  ..かけだし(1,341ポイント)   Date: 2010/03/08(月) 21:41   No:48963 解決!     
Title: Re:こういう3D背景を作りたいのですが…    
ありがとうございます。
新スレ立ててややこしいことしてすみません。
MV1SetOpacityRate( int MHandle, float Rate ) ;
でできました。
本当にありがとうございます。


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

Name: レッドリ  ..かけだし(1,372ポイント)   Date: 2010/03/08(月) 21:43   No:48964     
Title: Re:こういう3D背景を作りたいのですが…    
おおっと、再び重なってしまいました。

そうなんですか。
その場合はバイネリア法を指定すればいいのかな…。
また調べてみます。 編集済み


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

Name: Justy  ..伝説なるハッカー(504,658ポイント)   Date: 2010/03/08(月) 21:47   No:48966     
Title: Re:こういう3D背景を作りたいのですが…    
>その場合はバイネリア法を指定すればいいのかな…。 
 いえ、破綻に対する対策としては無意味ですが、どちらにしても3Dモデルにテクスチャが
貼られているならバイリニアは指定しておいた方がいいでしょう。


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

Name: レッドリ  ..かけだし(1,419ポイント)   Date: 2010/03/08(月) 21:50   No:48967     
Title: Re:こういう3D背景を作りたいのですが…    
そうなんですか。
一応、六角形の柱のモデルに
フォトショで作成した木のテクスチャを張り付けてあるので、
念のためバイリニア指定しておきます。


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



Name: レッドリ  ..かけだし(1,186ポイント)   Date: 2010/03/08(月) 21:28   No:48958       
Title: 3D モデルのαブレンド方法    
justyさんに教えてもらって、3Dモデルを作って龍神録の背景のように動かすのはできました。
ありがとうございます。

問題にぶちあたったので質問なのですが、
3Dモデルをαブレンドってできますか?
リファレンスに関数が見当たらないのです。
 編集済み


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


Name: Justy  ..伝説なるハッカー(504,576ポイント)   Date: 2010/03/08(月) 21:31   No:48960     
Title: Re:3D モデルのαブレンド方法    
 なんというタイミング。
 元のスレの方にレスしました。


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

Name: レッドリ  ..かけだし(1,267ポイント)   Date: 2010/03/08(月) 21:35   No:48961 解決!     
Title: Re:3D モデルのαブレンド方法    
おお、すみません。
感謝いたします。
3Dモデル作ってやると、プログラム側がすごく楽で驚きました。
3Dの世界にいざなってくださったjustyさんに本当に感謝します。


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



Name: apam  ..ぴよぴよ(852ポイント)   Date: 2010/03/08(月) 14:56   No:48938       
Title: 無題    
C言語初心者です。初歩的な質問で申し訳ありませんがどなたかご教授お願いします。

char型の配列に"SPAM"という単語を20個分格納して表示するプログラムを作成しなさい。


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

char     str[100];
int      i;

for( i = 0 ; i < 20 ; i++ ){
    str[i*4] = 'S';
    str[(i*4)+1] = 'P';
    str[(i*4)+2] = 'A';
    str[(i*4)+3] = 'M';
    str[(i*4)+4] = 0;
}

printf( "%s", str ); 


というプログラムなんですが、str[i*4]というところの4をかけているところの理屈がどうしてもわかりません。よろしくお願いします<(_ _)>


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


Name: たいちう  ..熟練のプログラマー(58,878ポイント)   Date: 2010/03/08(月) 15:36   No:48942     
Title: Re:無題    
> str[i*4]というところの4をかけているところの理屈がどうしてもわかりません。

あなたが作ったプログラムでないならば、作った人に聞いてみたら良いでしょう。

憶測することはできます。
4の代わりに、3や2や1をかけるとどのような結果になりますか?
順番に試してみてください。


# titleを書きましょう。
#
# 以前のマルチポスト先も放置しないようにしましょう。
# www2.realint.com/cgi-bin/tarticles.cgi?pointc+33605
#
# 掲示板を使うときには、その掲示板のルールを熟読しましょう、ということです。


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

Name: TKOZ  ..熟練のプログラマー(46,626ポイント)   Date: 2010/03/08(月) 18:23   No:48953     
Title: Re:無題    
#include<stdio.h>

int main()
{
    char     str[81]; 
    int      i; 
    
    for( i = 0 ; i < 20 ; i++ ){ 
        str[i*4] = 'S'; 
        str[(i*4)+1] = 'P'; 
        str[(i*4)+2] = 'A'; 
        str[(i*4)+3] = 'M'; 
        str[(i*4)+4] = 0; 
    }
    //というfor文をばらせば分かります。
    /*
    str[0*4]='S';//0
    str[(0*4)+1]='P';//1
    str[(0*4)+2]='A';//2 
    str[(0*4)+3]='M';//3
    str[(0*4)+4]='\0';//4
    
    str[1*4]='S';//4
    str[(1*4)+1]='P';//5
    str[(1*4)+2]='A';//6 
    str[(1*4)+3]='M';//7
    str[(1*4)+4]='\0';//8
    
    str[2*4]='S';//8
    str[(2*4)+1]='P';//9
    str[(2*4)+2]='A';//10 
    str[(2*4)+3]='M';//11
    str[(2*4)+4]='\0';//12
    …
    str[18*4]='S';//72
    str[(18*4)+1]='P';//73
    str[(18*4)+2]='A';//74 
    str[(18*4)+3]='M';//75
    str[(18*4)+4]='\0';//76
    
    str[19*4]='S';//76
    str[(19*4)+1]='P';//77
    str[(19*4)+2]='A';//78 
    str[(19*4)+3]='M';//79
    str[(19*4)+4]='\0';//80
    */
    printf( "%s", str );
    
    return 0;  
}


こうして見ると、4の倍数の添え字の時に'\0'と文字列の先頭である'S'が重なっています。
となると、5を掛けたい所ですが、\0を代入すると、文字列の終端になってしまうため、
4を掛けているのではないでしょうか?


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



Name: okusi  ..ぴよぴよ(0ポイント)   Date: 2010/03/08(月) 12:04   No:48934       
Title: 当たり判定で    
Dxlibでシューティングゲームを作っています。

自機のHPを1000にしていて敵が自機に当たったら敵のフラグを0にして自機のHPを100減らそうとしています。
しかしHPの画像を表示させようとすると一気にHPが減ってしまいます。(敵の画像は消えてくれます)

for(i=0;i<ENEMY_MAX;i++){
   if(当たり){
         enemy_flag[i]=0;
         ship_hp -= 100;
    }
}

    for(z=1;z<=10;z++){
        if(ship_hp==100*z){
            DrawGraph( 428,    434 ,img_hp[z],FALSE);
        }
    }

HPが1000のときの画像がimg_hp[10]
HPが900のときの画像がimg_hp[9]
というようになっていてHPが0のときは考えていません。

zはほかのところでは使っていない変数です。

なぜちゃんとと表示されないのでしょうか?教えてください。


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


Name: DVDM [URL]  ..熟練のプログラマー(51,961ポイント)   Date: 2010/03/08(月) 15:48   No:48944     
Title: Re:当たり判定で    
>>okusiさん
>if(当たり){
ここの条件式が良く解らないので憶測になりますが、
当たり続けている間 ship_hpが -100され続けているのではないでしょうか。

if( (自機と敵の当たり判定) && (enemy_flag[i]!=0) )
条件式をこのように変えてみるとうまくいく可能性があります。


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

Name: okusi  ..ぴよぴよ(14ポイント)   Date: 2010/03/08(月) 17:11   No:48952 解決!     
Title: Re:当たり判定で    
うまくいきました

ありがとうございますm(_ _)m


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



Name: dm  ..ぴよぴよ(69ポイント)   Date: 2010/03/08(月) 14:33   No:48936       
Title: パソコンスペックについて    
ゲームのプログラミングをするには最低でもどんなスペックが必要でしょうか? ちなみに2Dの格闘ゲームが作りたいです。 ご回答よろしくお願いします。

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


Name: たかぎ [URL]  ..ハッカー(168,312ポイント)   Date: 2010/03/08(月) 15:04   No:48939     
Title: Re:パソコンスペックについて    
開発ツールの最低動作環境としか回答のしようがありません。


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

Name: softya [URL]  ..ハッカー(130,123ポイント)   Date: 2010/03/08(月) 15:56   No:48945     
Title: Re:パソコンスペックについて    
2Dの格闘ゲームならノートPCでも開発出来ますよ。配布する相手のことを考えれば、低スペックで十分に動くソフトを開発した方が多くの人に遊んでもらえますよね。
ただ、開発環境が低スペックすぎると開発が大変なので、そこはある程度のスペックを必要とします。
Windows7なら、
CPU:Atomよりは上のモノ。市販価格6000円以上なら、問題なし。
GPU:内蔵グラフィックか、5000円程度のビデオカード
メモリ:2GB
HDD:最低200GBぐらい。
あたりが快適に作れる下限じゃないでしょうか。
ただし、VisualStudio2010は重いらしいです。


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

Name: DVDM [URL]  ..熟練のプログラマー(52,061ポイント)   Date: 2010/03/08(月) 16:08   No:48946     
Title: Re:パソコンスペックについて    
>>dmさん
OS:XP
CPU:シングルコア 1.8GHz
メモリ:256MB
グラフィックカード:NVIDIA GeForce 6200
コンパイラ:VC++2008 Express Edition

起動した段階でメモリを230MB使ってるPCでしたが
こんな環境でもDirectX + C/C++ でプログラムを組んで実行しているだけなら全然大丈夫でした。
ネットで調べ物を〜となった時が非常に重たくなりましたけど。


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

Name: dm  ..ぴよぴよ(96ポイント)   Date: 2010/03/08(月) 16:32   No:48947     
Title: Re:パソコンスペックについて    
pentium4 3.0Ghzやcoreなどは作れますでしょうか?

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

Name: DVDM [URL]  ..熟練のプログラマー(52,149ポイント)   Date: 2010/03/08(月) 16:36   No:48948     
Title: Re:パソコンスペックについて    
>>dmさん
パソコンの性能はCPUだけで決まるものではないですが、基本的にどんなPCでも開発はできますよ〜
とりあえず必要なソフトをダウンロードしてみて開発してみてはいかがでしょうか。


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

Name: softya [URL]  ..ハッカー(130,033ポイント)   Date: 2010/03/08(月) 16:40   No:48949     
Title: Re:パソコンスペックについて    
>pentium4 3.0Ghzやcoreなどは作れますでしょうか?
それはCPUの事でしか有りません。coreシリーズは、下は一万円ぐらいから上は10万円オーバーまで幅がありすぎて答えようが無いです。
ゲームは、CPU、GPU、メモリのバランスを考えないとだめですよ。


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

Name: dm  ..ぴよぴよ(17ポイント)   Date: 2010/03/08(月) 16:45   No:48950     
Title: Re:パソコンスペックについて    
皆様、わかりやすいご回答ありがとうございました!


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



Name: HIT  ..ぴよぴよ(739ポイント)   Date: 2010/03/07(日) 23:57   No:48918       
Title: rand関数の値を保存    
C++なのですが、rand関数の値を保存するにはどうしたらいいのでしょうか?

以下のソースの途中は省きます


int x;

rand(x) % 2 + 1;

cout<<x<<endl;

こんな感じで書くと オーバーロードが何とかとでてしまいます・・・


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


Name: えーや  ..ぴよぴよ(682ポイント)   Date: 2010/03/08(月) 00:47   No:48921     
Title: Re:rand関数の値を保存    
rand関数に引数は必要ありません。
必要というよりは引数を与えてはいけません。
結果はint型で戻り値として帰ってくるのでそれをxに代入してやれば良いと思います。


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

Name: Ma  ..熟練のプログラマー(58,481ポイント)   Date: 2010/03/08(月) 09:42   No:48930     
Title: Re:rand関数の値を保存    
int x = rand()%2 +1;
cout<<x<<endl; 


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

Name: HIT  ..ぴよぴよ(747ポイント)   Date: 2010/03/08(月) 15:34   No:48941 解決!     
Title: Re:rand関数の値を保存    
ありがとうございます!!!

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



Name: 匿名  ..上級者(20,566ポイント)   Date: 2010/03/08(月) 04:03   No:48927       
Title: デスクトップアクセサリ    
以前にも質問したのですが。
しばらく掲示板を見ることが出来ず流れてしまったみたいですので、
質問いたします。

簡単なデスクトップアクセサリを製作したいと思っています。
画面をうろうろするものが作りたいです。
しかし、ウインドウを狭めることは出来るのですが。
ウインドウを消してキャラだけを残すやり方がどうしてもわからず苦戦しております。

どうかご教授お願いします。


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


Name: Ma  ..熟練のプログラマー(58,461ポイント)   Date: 2010/03/08(月) 09:37   No:48929     
Title: Re:デスクトップアクセサリ    
最近、DXライブラリに透過機能が登場したみたいですよー^^
わたしもはやいうちに使ってみたいな。

http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1616


あぁ、DXライブラリが駄目っていうなら、サンプルがいろいろころがってますよ。
この前のスレしかり。


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

Name: softya [URL]  ..ハッカー(129,785ポイント)   Date: 2010/03/08(月) 10:47   No:48932     
Title: Re:デスクトップアクセサリ    
リージョンで好きな形にウィンドウを切り取ることが出来ますよ。
あとは、使っているライブラリが不明なので答えづらいですが。


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

Name: 匿名   Date: 2010/03/22(月) 17:38   No:489271269247091     
Title: Re:デスクトップアクセサリ    
返信送れて申し訳ないです、

ライブラリはDXライブラリです。
リージョンで検索かけたのですが、いまいちどのように記述すればいいのかわからないです。
どうか、ご教授お願いします。




Name: mkk  ..ぴよぴよ(18ポイント)   Date: 2010/03/07(日) 03:29   No:48895       
Title: 龍神録プログラミングの館の第4章について    
第4章に書かれてある通りに書いたはずなのに

error C2371: 'ch_t' : 再定義されています。異なる基本型です。  struct.h

といったエラーが出ます;

    
これはどういう事なんでしょうか?

教えてください;


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


Name: Justy  ..伝説なるハッカー(504,083ポイント)   Date: 2010/03/07(日) 16:54   No:48905     
Title: Re:龍神録プログラミングの館の第4章について    
 基本的にはエラーメッセージの通りで、型の再定義が行われたのでしょう。

 情報が不足しているので具体的にどこがどう、などとは言えませんが、
struct.hが二回以上インクルードされているとか、ch_tの定義が複数箇所のソースに書かれている等の理由で、
ch_tが複数定義されてしまっているのでしょう。

 もう一度修正箇所や本文を見直すか、プロジェクトファイル一式をダウンロードして見比べてみてください。


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

Name: mkk  ..ぴよぴよ(331ポイント)   Date: 2010/03/07(日) 17:25   No:48907     
Title: Re:龍神録プログラミングの館の第4章について    
お答ありがとうございます。

何度も確認してるのですが、なぜかできなくて;

//キャラクターに関する構造体
typedef struct{
        int flag;       //フラグ
        int cnt;        //カウンタ
        int power;      //パワー
        int point;      //ポイント
        int score;      //スコア
        int num;        //残機数
        int mutekicnt;  //無敵状態とカウント
        int shot_mode;  //ショットモード
        int money;      //お金
        int img;        //画像
        int slow;       //スローかどうか
        double x,y;     //座標
}ch_t;

これをstruct.hに書き込むとエラーが出るんですよ;;


確認してみましたが、ch_tの定義は他の箇所では書いていませんでした。


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

Name: Justy  ..伝説なるハッカー(504,388ポイント)   Date: 2010/03/07(日) 18:23   No:48909     
Title: Re:龍神録プログラミングの館の第4章について    
 だとすると struct.hが複数箇所でインクルードされていませんか?

 試しに struct.hを

#if !defined(STRUCT_H_INCLUDED)
#define STRUCT_H_INCLUDED


typedef struct
{
    ... // ch_tの定義
}ch_t;

#endif // !defined(STRUCT_H_INCLUDED)

と先頭と末尾に #ifdef〜#endifを入れたらどうなりますか?


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

Name: mkk  ..ぴよぴよ(349ポイント)   Date: 2010/03/08(月) 01:58   No:48923 解決!     
Title: Re:龍神録プログラミングの館の第4章について    
おぉ!できました!

ありがとうございました!m(_ _)m 編集済み


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

Name: Justy  ..伝説なるハッカー(504,458ポイント)   Date: 2010/03/08(月) 02:10   No:48924     
Title: Re:龍神録プログラミングの館の第4章について    
 ということは、どこかで struct.hを2回以上インクルードしているということですね。
 そのまま #ifdef〜#endifを入れたままでも構いませんが(むしろ本来は推奨)、
龍神録のソースと合わせるなら、どこで余計なインクルードをしているのか
探しておいた方がいいのかもしれません。


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



Name: HIT  ..ぴよぴよ(569ポイント)   Date: 2010/03/06(土) 14:27   No:48883       
Title: 無題    
以下のソースをコンパイルしてEXEをつくり、起動させてみると、ちゃんと実行はされるのですが、
名前を入力した直後、終了してしまいます・・・どうすればいいですかね? わかりやすく教えて下さい。



#include<iostream>
#include<string>

using namespace std;

class neko{
    string name;
public:
    neko(string);

    void naku() const;

};

neko::neko(string s) : name(s){}

void neko::naku() const{
    
    cout<<"あなたがご主人様なのにゃ?"<<endl;
      cout<<"ぼくは"<< name <<"なのにゃ! よろしくにゃ!"<<endl;
}


int main(){
string s;

cout<<"猫を作成します 名前を付けてあげて下さい"<<endl;
    cin>>s;
cout<<"猫がやってきました"<<endl;
    neko first(s);

    first.naku();
}


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


Name: たかぎ [URL]  ..ハッカー(168,216ポイント)   Date: 2010/03/06(土) 14:41   No:48885     
Title: Re:無題    
> どうすればいいですかね?

どうなって欲しいのでしょうか?


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

Name: non  ..比類無きプログラマー(96,094ポイント)   Date: 2010/03/06(土) 19:46   No:48888     
Title: Re:無題    
実行したらコマンド窓がすぐに閉じてしまうのでしたら
環境を示してもらうか、標準入力待ち(キー待ち)の関数を
いれます。


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

Name: HIT  ..ぴよぴよ(631ポイント)   Date: 2010/03/07(日) 15:24   No:48901     
Title: Re:無題    
標準入力待ち(キー待ち)の関数・・・詳しくおしえてください!

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

Name: As soon aS [URL]  ..ぴよぴよ(29ポイント)   Date: 2010/03/07(日) 15:45   No:48902 解決!     
Title: Re:無題    
WaitKey() ;

ですよw

キー待ちさせたい処理の後にこの関数を書いてください


char Key[256];

とかの宣言はいりませんよ


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

Name: fatens  ..初心者(8,124ポイント)   Date: 2010/03/07(日) 16:03   No:48903     
Title: Re:無題    
>As soon aS さん
解決!マークは質問者が付けるもので、回答者が付けるべきものではありません。
また、おそらくDXライブラリは使用していないと思われます。
 編集済み


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

Name: TKOZ  ..熟練のプログラマー(46,147ポイント)   Date: 2010/03/07(日) 17:59   No:48908     
Title: Re:無題    
ソースがコンソールのC++みたいなので
int tekitou;
cin << tekitou;
を入れてあげてください。


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

Name: HIT  ..ぴよぴよ(673ポイント)   Date: 2010/03/07(日) 23:52   No:48917 解決!     
Title: Re:無題    
ありがとうございます!
できました!


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



Name: wing  ..初心者(6,255ポイント)   Date: 2010/03/02(火) 16:36   No:48737       
Title: スーパーマリコ というゲームを作りました    
よろしければ遊んでみてください。
キーワードは7777です。
http://www1.axfc.net/uploader/H/so/101122

はじめてアップロードするのでなにか手違いがあるかも
知れませんので、そのときはご指摘ください。


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


Name: Tatu  ..プログラマー(29,470ポイント)   Date: 2010/03/02(火) 17:36   No:48748     
Title: Re:スーパーマリコ というゲームを作りました    
一通りプレイしてみました。
良くできていると思います。

ただ、ゲームを公開するときは誰がダウンロードするかわからないので
実行ファイルと使用するデータのみを公開したほうがよいですよ。
今回の場合はsuperMariko.exeとdataフォルダ、mapフォルダ、Read me.txtだけで十分そうです。


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

Name: kazuoni [URL]  ..ハッカー(136,245ポイント)   Date: 2010/03/02(火) 20:38   No:48750     
Title: Re:スーパーマリコ というゲームを作りました    
DLさせていただきました。

今コイン拾いゲーが流行ってますねw

ちょっと気になったのですが、ダッシュ時、
右ジャンプはできるのですが、左ジャンプができません。
これが一番気になりました。
このレトロ感がgoodです。

製作お疲れ様でした!

#最近.map .qmpって良く見かけますけど、
どのソフトで生成されるファイル形式なんでしょう?
マップエディタ関連だとは思いますが・・・

自分も春休みにコイン拾い(+α)ゲームを作ってみようかなぁ・・・ 編集済み


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

Name: wing  ..初心者(6,381ポイント)   Date: 2010/03/02(火) 21:32   No:48752     
Title: Re:スーパーマリコ というゲームを作りました    
Tatuさん、ありがとうございます。
Releaseホルダをアップすればいいのかと思っていました。
参考にさせていただきます。

kazuoniさん、ありがとうございます。
MapEditer Quoyle Ver0.8 というフリーのソフトを使ってます。
TEAM NAVA分室様のサイトで使い方の解説があったので
そこで勉強させていただきました。

ダッシュは、(左キー&&Xキー)または(右キー&&Xキー)で
スピードを1.5倍にしているだけです。
3つキーを同時に押した時のことの考えなければいけないのかもしれませんね。


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

Name: aya  ..ぴよぴよ(0ポイント)   Date: 2010/03/02(火) 22:14   No:48753     
Title: Re:スーパーマリコ というゲームを作りました    
wingさんへ
早くダウンロードサイトから消したほうがいいよ
BuildLog.htm参照のこと


Name: wing  ..初心者(6,444ポイント)   Date: 2010/03/02(火) 23:07   No:48754     
Title: Re:スーパーマリコ というゲームを作りました    
ayaさん、どうもです。
名前出ていましたね。
自分としてはあまり気にならないんですが、
掲示板は匿名が基本ですから、やっぱりいけませんね。

削除しておきました。
気を使わせてしまって申し訳ありませんでした。
これからは気をつけたいと思います。


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

Name: aya  ..ぴよぴよ(68ポイント)   Date: 2010/03/03(水) 07:19   No:48755     
Title: Re:スーパーマリコ というゲームを作りました    
本名が出ていても気にしないんですね
それなら消した方がいいよ、なんて言う必要ありませんでしたね
よければまたアップロードしてもらえれば他の人も楽しんでくれると思いますよ


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

Name: ゼド  ..ぴよぴよ(35ポイント)   Date: 2010/03/05(金) 13:23   No:48840     
Title: Re:スーパーマリコ というゲームを作りました    
僕もダウンロードしたかった


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

Name: wing  ..初心者(6,586ポイント)   Date: 2010/03/05(金) 19:15   No:48861     
Title: Re:スーパーマリコ というゲームを作りました    
また、アップしました。
よろしければ遊んでみてください。
3面と4面は製作者しかできないと思うんですが。

3面4面がメインで、5面6面はスーパーマリコ2として
作っていたんですが、アップするので一緒にしました。

すべての面は必ず最初の場所に戻れるようになっています。

キーは7777です。

http://www1.axfc.net/uploader/H/so/101374.zip&key=7777


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

Name: situmon  ..熟練のプログラマー(48,063ポイント)   Date: 2010/03/07(日) 01:59   No:48893     
Title: Re:スーパーマリコ というゲームを作りました    
やらせていただきましたが難しかったです!!
しかし曲からなにまで、とてもよかったです。
懐かしい!?感じとはこのことですね。
別にログを見ましたが本名は載っていませんでしたが、
修正されたのですか?それならばきちんと修正できてますよ。
あと6面からはじめるときの表示に脱字(?)があります。


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

Name: wing  ..初心者(6,690ポイント)   Date: 2010/03/07(日) 13:53   No:48900     
Title: Re:スーパーマリコ というゲームを作りました    
situmonさん、ありがとうございます。
脱字、気がつきませんでした。
曲はPANICPUMPKINさんのサイトからお借りしました。
たくさんあるんですが、どれも一度聞いただけで好きになりました。

今回はアップの仕方も学ばせていただきました。


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



Name: nawa  ..ぴよぴよ(65ポイント)   Date: 2010/03/07(日) 12:36   No:48898       
Title: 無題    
質問というよりは訂正依頼です。
23. 行けない所を作る。〜1D〜で上記プログラム蘭では左向きの場合hantei[x/32+1]となっていますが、
下記のサンプルプログラム蘭ではhantei[x/32-1]と逆になっています。
おそらく下記のサンプルの方が正しいと思うのですが、混乱してしまう方もいると思うのでよろしくお願いします。


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


Name: nawa  ..ぴよぴよ(79ポイント)   Date: 2010/03/07(日) 12:53   No:48899     
Title: 訂正依頼    
無題になってしまいました汗…スイマセン。。。

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



Name: apam  ..ぴよぴよ(63ポイント)   Date: 2010/03/05(金) 01:08   No:48821       
Title: 無題    
C言語勉強中の素人(一か月)です。
今現在、入門書を一通り終わら、次のステップに進みたいと思います。
そこで、お薦めの書籍や勉強法がありましたらご教授お願いいたします。




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


Name: kazuoni [URL]  ..ハッカー(136,323ポイント)   Date: 2010/03/05(金) 08:58   No:48825     
Title: Re:無題    
覚えた言語を用いて何をしたいかで回答は大きく変わってくると思いますよ。
windowsアプリケーションならばMFC,WINAPIなどの勉強に進む、
DirectX,OpenGLなどを用いてグラフィックの勉強に進む
などですかね。


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

Name: softya [URL]  ..ハッカー(127,753ポイント)   Date: 2010/03/05(金) 09:26   No:48827     
Title: Re:無題    
いくつかお聞きします。
1)基本的なアルゴリズムは学習されましたか?
2)1000行程度のプログラムを実際に組んで見ましたか?
3)下記サイトの全部の練習問題を解く事は出来そうですか?
「苦しんで覚えるC言語(苦C)」
http://homepage3.nifty.com/mmgames/c_guide/


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

Name: apam  ..ぴよぴよ(613ポイント)   Date: 2010/03/06(土) 07:09   No:48873     
Title: Re:無題    
ここ数日、PCを使えなくて返信が遅くなりすみませんでした。



>kazuoniさん
MFC,WINAPIなど知らなかったので調べてみたんですが今の自分の知識では理解できそうにないんで基礎固めを
しっかりしようと思います。返事ありがとうございました。

softyaさん
>1)基本的なアルゴリズムは学習されましたか? 
2)1000行程度のプログラムを実際に組んで見ましたか? 
3)下記サイトの全部の練習問題を解く事は出来そうですか?

アルゴリズムは秀和システムの「図解でわかるアルゴリズムの基本と仕組み」というのを入門書と並行してやっていました。
1000行程度のアルゴリズムは書いたことはありません。どうやって書いたらいいかもわかりません。
苦Cは入門書に入る前にやっていました。練習問題はぜんぶ解けないと思います。


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

Name: softya [URL]  ..ハッカー(129,543ポイント)   Date: 2010/03/06(土) 11:09   No:48878     
Title: Re:無題    
>アルゴリズムは秀和システムの「図解でわかるアルゴリズムの基本と仕組み」というのを入門書と並行してやっていました。 
目次を見ましたが、少しものたらない感じですかね。
サイトを紹介しておきますので、勉強の参考にしてください。
http://www.geocities.jp/ky_webid/algorithm/index.html
http://www.codereading.com/algo_and_ds/
こちらは、かなり高度なものが含まれます。
http://www2.starcat.ne.jp/~fussy/algo/index.htm
ゲームに関係するアルゴリズムです。こちらも高度なものを含みます。
http://itpro.nikkeibp.co.jp/article/COLUMN/20070109/258278/?ST=develop
http://www.ic-net.or.jp/home/takaken/pz/index.html

>1000行程度のアルゴリズムは書いたことはありません。どうやって書いたらいいかもわかりません。
大きなプログラムを作ることは良い勉強になりますよ。
こちらを参考に↓オリジナルのテキストゲームなどに挑戦してみては?
http://hp.vector.co.jp/authors/VA016117/cprog/index.html

>苦Cは入門書に入る前にやっていました。練習問題はぜんぶ解けないと思います。
プログラミング上達は数をこなすことと、弱点を克服して行くことなんで練習問題に挑戦してみて下さい。
練習問題のあるサイトも紹介しておきます。
http://akabas.net/%28S%28taliry45fkng1j55hxqqv045%29%29/lib/CExercise.aspx?AspxAutoDetectCookieSupport=1
http://akabas.net/%28S%28mlrkxl451pmm1z45zl4pbwa2%29%29/lib/CTask.aspx
http://www.geocities.jp/kenji_y0328/crenshu/index.html

上達のためにサイトも紹介しておきます。
「Cプログラミング診断室」悪いプログラムを例にあげて、どう問題があるかを解説しています。
最初に本が書かれていますが、ページの下のほうに行くとWEB版として公開されています。
http://www.pro.or.jp/~fuji/mybooks/cdiag/
人のプログラムの解読は良い勉強になります。

上と同じ方のサイトですが、「Cパズルプログラミング-再帰編」です。トレーニングにどうぞ。
http://karetta.jp/book-cover/cpuzzle-recursion

あと、こんな本はどうでしょう?
「美しいCプログラミング見本帖―ポインタ手習い指南」
http://www.amazon.co.jp/dp/4798106313/


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

Name: apam  ..ぴよぴよ(691ポイント)   Date: 2010/03/07(日) 02:38   No:48894 解決!     
Title: Re:無題    
>softyaさん

色々教えていただきありがとうございました。
これから紹介していただいたサイトや本を利用してもっと上達できるように頑張りたいです。
本当にありがとうございました。


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



Name: SS  ..ぴよぴよ(84ポイント)   Date: 2010/02/26(金) 18:49   No:48615       
Title: マリオ的な横スクロール    
素人で、つまらない質問をして申し訳ないのですが、
マリオ的な横スクロールはどうやればいいのでしょうか?
ゲームプログラミングの館にもスクロールについての解説はありませんでしたし、
参考になりそうなゲームCurse'sSoulも配布されておらず、
また、どこの解説サイトでもスクロールについての情報が少なく、詰まっています。

初めからキャラの座標を中央に固定するなら簡単そうですが、
だいだいキャラが中央にきた時にスクロールされますよね。


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


Name: kazuoni [URL]  ..ハッカー(135,783ポイント)   Date: 2010/02/26(金) 19:03   No:48618     
Title: Re:マリオ的な横スクロール    
単純に考えて、
・始端、終端〜中央まではキャラが移動
・キャラが中央にきたらキャラ固定で、その他が移動
でよいのではないでしょうか?


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

Name: sizuma [URL]  ..プログラマー(36,080ポイント)   Date: 2010/02/26(金) 22:16   No:48626     
Title: Re:マリオ的な横スクロール    
http://javagame.skr.jp/
ここは詳しそうかな。
コードはJavaだけど解説はしてるので参考になると。

kazuoniさんが書かれてるような方法みたいですね。
こういうのってまずは自分で考えて書いてみてから調べること推奨です。


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

Name: SS  ..ぴよぴよ(157ポイント)   Date: 2010/02/27(土) 03:23   No:48641     
Title: Re:マリオ的な横スクロール    
回答ありがとうございます。
eclipseが起動しなかったんですが、改めてjava再インストールしたらできましたので、
ひとまずリンクのサイト参考にしてやってみます。


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

Name: TKOZ  ..熟練のプログラマー(46,118ポイント)   Date: 2010/03/04(木) 13:35   No:48812     
Title: Re:マリオ的な横スクロール    
当たり判定はともかく、スクロールだけならこれで十分だと思います。

void DrawChip(int Number,int x,int y)
{
    int Dx=ChipSize*(Number%22);
    int Dy=ChipSize*(Number/22);
    DrawRectGraph(x,y,Dx,Dy,ChipSize,ChipSize,GraphHandle,TRUE,FALSE);
}

void DrawBG()
{
    int StartX,StartY,EndX,EndY;
    StartX=ScrollX/ChipSize;
    StartY=ScrollY/ChipSize;
    EndX=(ScrollX+ScreenWidth-1)/ChipSize;
    EndY=(ScrollY+ScreenHeight-1)/ChipSize;
    
    for(i=StartY;i<EndY;i++)
    {
        for(j=StartX;j<EndX;j++)
        {
            DrawChip(Map[j][i],j*ChipSize-ScrollX,i*ChipSize-ScrollY);
        }
    }
}

void CalcScroll()
{
    ScrollX=Jiki.X-(ScreenWidth/2);
    int MapWidth=ChipSize*200; //マップの幅
    int MapHeight=ChipSize*30; //マップの高さ

    if(ScrollX<0) ScrollX=0;//左に来た時
    if(ScrollX>MapWidth-ScreenWidth) ScrollX=MapWidth-ScreenWidth;
    //右に来た時
    
    if(ScrollY<0) ScrollY=0;//上に来た時
    if(ScrollY>MapHeight-ScreenHeight)ScrollY=MapHeight-ScreenHeight;
    //下に来た時
}


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

Name: dic  ..熟練のプログラマー(56,277ポイント)   Date: 2010/03/04(木) 14:24   No:48816     
Title: Re:マリオ的な横スクロール    
私の場合だと 最初に全体の座標を定義して、
表示するのはその一部分って考えでしょうかね


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

Name: SS  ..ぴよぴよ(265ポイント)   Date: 2010/03/04(木) 22:40   No:48820     
Title: Re:マリオ的な横スクロール    
TKOZさん、dicさんありがとうございます。
普段「なるほど」なんて言わないんですが、本当になるほどと思いました。
TKOZさんのコードをみてやっと意味がわかりました、ありがとうございます。
とりあえず今のところキャラの座標固定で、マップ、敵、弾などはキー入力からの値に依存するようにしたのですが、また助言を参考にして研究してみます。


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

Name: situmon  ..熟練のプログラマー(47,914ポイント)   Date: 2010/03/07(日) 01:52   No:48892     
Title: Re:マリオ的な横スクロール    
えっと、もう解決されたかもしれませんが、
DXライブラリのサンプルプログラミングに、マップスクロール基本についてのってます。
以外に自分の知りたいことがのってたりします。


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



Name: okusi  ..ぴよぴよ(155ポイント)   Date: 2010/03/06(土) 14:01   No:48882       
Title: DxLibで    
DxLibでエクセルからデータを1次元配列4つに数字データをいれたいのですが、

どうすればいいですか?教えてくださいm(_ _)m


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


Name: mnkr  ..入門者(4,546ポイント)   Date: 2010/03/06(土) 19:24   No:48887     
Title: Re:DxLibで    
エクセルのデータというのは.xlsのことでしょうか?
それでしたら恐らく読込できないと思います。

.csvでしたら11章(http://dixq.net/rp/11.html)参照です。


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

Name: okusi  ..ぴよぴよ(177ポイント)   Date: 2010/03/07(日) 00:16   No:48889 解決!     
Title: Re:DxLibで    
ありがとうございます

解決しましたm(_ _)m


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



Name: レッドリ  ..ぴよぴよ(283ポイント)   Date: 2010/03/03(水) 18:35   No:48773       
Title: 単発質問になって申し訳ないのですがリプレイ機能についてで…    
リプレイ機能は、キーの入力情報のみを
保存するので、乱数をつかった弾幕だと、
再生した時コロコロ変わるのですが、その解決策は
乱数をあらかじめ決めて固定したりすればいいんでしょうか。

また、みなさんはどのように解決されましたか?

乱数をつかった弾幕というのは
例えば
http://dixq.net/rp/14.html
ばらまきショットです。
rang()を使っているので角度がランダムになります。

環境はDXライブラリでVC++EE2008です。 編集済み


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


Name: Dixq (管理人)  ..ウィザード(1,158,311ポイント)   Date: 2010/03/03(水) 21:54   No:48779     
Title: Re:単発質問になって申し訳ないのですがリプレイ機能についてで…    
乱数は初期値が設定できます。

乱数 初期値または初期化

でググってみてください


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

Name: レッドリ  ..ぴよぴよ(312ポイント)   Date: 2010/03/06(土) 14:32   No:48884 解決!     
Title: Re:単発質問になって申し訳ないのですがリプレイ機能についてで…    
そういう方法があったのですか。

ありがとうございます。
これでなんとかできそうです。


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



Name: 山崎  ..プログラマー(37,881ポイント)   Date: 2010/03/06(土) 12:03   No:48879       
Title: 操作があるまでループし続けるには    
こんにちは、お世話になっております、山崎です。
今回は、DXライブラリを使わずに、whileループ内の処理をキーボードなどからの操作があるまで
繰り返す処理の仕方について伺いに参りました。

現在、カメラとあるセンサーからの出力を、任意の時間 ファイルに記録し続ける、
というプログラムを作ろうとしております。
なお、環境はXPにVisualStudio2008です。

そこで、次のような流れのプログラムを作ろうと考えております。
1.プログラムを開始させる
2.一定時間ごとに、カメラとセンサーからの出力を自動でファイルに保存する
3.キーボードの何かのキーが押された時、プログラムを終了する

上の2の処理は、whileループを使って繰り返し出力を得たいと思っています。
しかし、whileループを実行している時、プログラムの実行を停止させることなく
キーボードからの入力を待つ、というのをどうすれば実現できるのかわかりません。

このプログラムは趣味のゲームプログラムではないので、
DXライブラリの使用はなるべく避けたいと思っています。

どのようにすれば、ループの処理を止めずに、
キーボードからの入力を受け付けられるのでしょうか。


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


Name: softya [URL]  ..ハッカー(129,672ポイント)   Date: 2010/03/06(土) 12:23   No:48880     
Title: Re:操作があるまでループし続けるには    
ウィンドウアプリならMFCかWin32APIでWM_TIMERメッセージを使った処理を作れば良いと思います。
WM_TIMERメッセージの周期を設定するには、SetTimer()を使用します。
http://msdn.microsoft.com/ja-jp/library/cc411200.aspx
キーボードの入力も同様にメッセージとして受け取ります。

コンソールアプリなら、Whileループ中にSleep(100)ぐらいでスリープしないと無限ループとOSに思われてしまうので、まずSleep()をループの中に入れて下さい。
で、キーボードはkbhit()で押されたことを検知します。
↓使い方。
http://www.orchid.co.jp/computer/cgame/cgm7.html


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

Name: 山崎  ..プログラマー(38,142ポイント)   Date: 2010/03/06(土) 12:34   No:48881 解決!     
Title: Re:操作があるまでループし続けるには    
softyaさん
ご返信、誠にありがとうございます。
コンソールのプログラムであることも明記しておくべきでした、お手数をおかけしました。
しかしウィンドウズアプリケーションの場合での方法も知ることができ、大変感謝しております。
ちょっと諸事情あり、今すぐそのプログラムを組んで試すことはできないのですが、
きっとお教え頂いたページのサンプルがあれば実装できることと思います。

kbhit()なんて関数があるのですね…。初めて知りました。
私の愛用しているC/C++リファレンスに無い関数だと、
なかなか知る機会がなくてたまに苦労します。

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


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



Name: 蓮薫  ..ぴよぴよ(276ポイント)   Date: 2010/03/06(土) 10:19   No:48876       
Title: 背景を変える方法    
言語はVC++だと思います。
背景を変えられるアプリケーションを作っております。

背景が固定ならリソースなどに組み込んで下記の様に書けばいいのですが

this->BackgroundImage = (cli::safe_cast<System::Drawing::Image^  >(resources->GetObject(L"$this.BackgroundImage")));

動的に読み込みに行く場合これでは出来ないかと思います。
例).exeファイルと同じディレクトリにあるimage.jpgを読み込みたいです。

どの様に実装すればよいのでしょうか?
調べたのですが私の力では見つけることが出来ませんでした。
ご教授願えないでしょうか?


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


Name: バグ  ..ハッカー(191,655ポイント)   Date: 2010/03/06(土) 11:02   No:48877     
Title: Re:背景を変える方法    
.NETなら、Bitmapクラスが使えるんじゃないかな?

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



Name: tokage  ..かけだし(1,947ポイント)   Date: 2010/03/02(火) 13:37   No:48730       
Title: 無題    
DXライブラリで一人称視点ゲームを作っているのですが、
カメラの向いている方向にカメラを移動させるやり方がよくわかりません。
サンプルの3Dアクション基本を見たのですがよくわかりませんでした。

環境はWindows7,VC++2008EE,DXライブラリ
プログラミング歴は4か月くらいです。

現在のプログラム

#include "DxLib.h"
#include <math.h>
//関数宣言
void CAM_Init();//カメラ初期化
void CAM_Proc();//カメラ処理
void Rend_Proc();//描画処理
void Input_Proc();//入力処理
void ST_Init();//ステージ初期化
void ST_Ter();//ステージ後始末

#define CAM_SPEED        0.1f//カメラ旋回速度
#define CAM_MSPEED        50.0f
//入力情報
struct KEYINPUT
{
    int        NInput;//現在
    int        EInput;//過去
};
KEYINPUT inp;//キー入力実態宣言
//カメラ情報構造体
struct CAM
{
    float        AH;//水平
    float        AV;//垂直
    VECTOR        Tt;//注視点
    VECTOR        ZA;//座標
};
CAM cam;//カメラ実体宣言
//-----------------------------------------------------------------------------------
void Input_Proc()//入力処理
{
    int O;
    O=inp.NInput;
    inp.NInput=GetJoypadInputState(DX_INPUT_KEY_PAD1);
    inp.EInput=inp.NInput&~O;
}
//-----------------------------------------------------------------------------------
struct ST//ステージ情報構造体
{
    int MHandle;
};
ST st;
//-----------------------------------------------------------------------------------
void ST_Init()//ステージ初期化
{
    st.MHandle=MV1LoadModel("s1.mqo");
    MV1SetupCollInfo(st.MHandle,-1);
}
void ST_Ter()//ステージ後始末
{
    MV1DeleteModel(st.MHandle);
}
//-----------------------------------------------------------------------------------
void CAM_Init()//カメラ初期化
{
    cam.ZA.x=0.0f;
    cam.ZA.y=0.0f;
    cam.ZA.z=0.0f;
}
void CAM_Proc()//カメラ処理
{
    int CS;
    CS=1;//カメラ固定フラグ
    int    mpx,mpy;//マウス座標
    float TR;
    TR=0.0f;//ねじれ角度
    float ms;//角度変更量
    ms=0.01f;
    float smx,smy,smz;//移動量
    smx=0.0f;
    smy=50.0f;
    smz=50.0f;
    float cx,cz;//
    cx=0;
    cz=50;
    GetMousePoint(&mpx,&mpy);
    //-------------------------------------
    //-------------------------------------
    if((GetMouseInput()&MOUSE_INPUT_RIGHT)!=0)
    {
        CS = 2;
    }
    //--------^^^^^^\\~~~~~~~~~~~~~~~~~~~~~~~
    if(CS!= 2 && 200<mpy)//下----------
    {
        cam.AV+=ms;
    }
    if(CS!= 2 && 10<mpy)
    {
        cam.AV+=ms+0.02f;
    }

    if(CS!= 2 && 300>mpy)//上-----------
    {
        cam.AV-=ms;
    }
    if(CS!= 2 && 490>mpy)
    {
        cam.AV-=ms+0.02f;
    }

    if(CS!= 2 && 400<mpx)//右-----------
    {
        cam.AH+=ms;
    }
    if(CS!= 2 && 590<mpx)
    {
        cam.AH+=ms+0.02f;
    }

    if(CS!= 2 && 200>mpx)//左-----------
    {
        cam.AH-=ms;
    }
    if(CS!= 2 && 10>mpx)
    {
        cam.AH-=ms+0.02f;
    }
    //---------------------
    if(CheckHitKey(KEY_INPUT_R))
    {
        TR+=1.57f;
    }
    //-----------------------
//---------------------------------
    if(CheckHitKey(KEY_INPUT_W)==1)
    {
        cam.ZA.z+=smz;
        cam.ZA.x+=smx;
    }
    if(CheckHitKey(KEY_INPUT_S)==1)
    {
        cam.ZA.z-=50.0f;
    }
    if(CheckHitKey(KEY_INPUT_A)==1)
    {
        cam.ZA.x-=50.0f;
    }
    if(CheckHitKey(KEY_INPUT_D)==1)
    {
        cam.ZA.x+=50.0f;
    }
    if(CheckHitKey(KEY_INPUT_SPACE)==1)
    {
        cam.ZA.y+=smy;
    }
    if(CheckHitKey(KEY_INPUT_F)==1)
    {
        cam.ZA.y-=smy;
    }
    SetCameraPositionAndAngle(VGet(cam.ZA.x,cam.ZA.y,cam.ZA.z),cam.AV,cam.AH,TR);
}
//-----------------------------------------------------------------------------------
void Rend_Proc()//描画処理
{
    int x,y;
    GetMousePoint(&x,&y);//照準
    SetTransColor(255,255,255);//透明色
    int AG;//照準
    AG=LoadGraph("pred.bmp");
    SetFogEnable(TRUE);//霧 オン オフ
    SetFogColor(0,0,0);//霧カラー
    SetFogStartEnd(0.0f,5000.0f);//霧 距離
    //--------------------------------
    float sms;                        //ステージ透明度
    sms=1.0f;
    if(CheckHitKey(KEY_INPUT_C)==1)//透視
    {
        sms-=0.8f;
    }
    MV1SetOpacityRate(st.MHandle,sms);//ステージ透明度
    //-----------------------------
    DrawBox(0,0,640,480,GetColor(0,0,0),TRUE);//背景とかの色 その他
    MV1DrawModel(st.MHandle);
    DrawGraph(x-24,y-24,AG,TRUE);
    SetMouseDispFlag(FALSE);
}
//-----------------------------------------------------------------------------------
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
    ChangeWindowMode(TRUE);//ウインドウモード
    if(DxLib_Init()<0)//ライブラリ初期化
    return -1;
    CAM_Init();//カメラ初期化
    SetDrawScreen(DX_SCREEN_BACK);//描画先を裏
    ST_Init();
    while(ProcessMessage()==0 && CheckHitKey(KEY_INPUT_ESCAPE)==0)//ESCキーかウインドウが閉じられるまでループ
    {
        ClearDrawScreen();//画面クリア
        Input_Proc();//入力処理
        CAM_Proc();//カメラ処理
        Rend_Proc();//描画処理
        ScreenFlip();//裏の内容を表に出す
    }
    ST_Ter();
    DxLib_End();//ライブラリ後始末
    return 0;//終了
}
これをどう変更したらカメラの向きに進めるかおしえてください。


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


Name: Tororo  ..入門者(4,179ポイント)   Date: 2010/03/02(火) 16:11   No:48736     
Title: Re:無題    
CAM_Proc()で毎回初期化しているからではないですか?

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

Name: とかげ  ..ぴよぴよ(16ポイント)   Date: 2010/03/02(火) 16:48   No:48740     
Title: Re:無題    
Tototoさん 回答ありがとうございます。
理解力がなくてすみませんが
どうしたら毎回初期化しなくて済むのかおしえてくれませんか。


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

Name: Tororo  ..入門者(4,344ポイント)   Date: 2010/03/03(水) 14:56   No:48763     
Title: Re:無題    
    int CS; 
    CS=1
    float TR; 
    TR=0.0f;//ねじれ角度 
    float ms;//角度変更量 
    ms=0.01f; 
    float smx,smy,smz;//移動量 
    smx=0.0f; 
    smy=50.0f; 
    smz=50.0f; 
    float cx,cz;// 
    cx=0; 
    cz=50; 
ここら辺毎回読まれる所なので
毎回初期化されているんです。
グローバルにして、初期化関数を作ってみてはどうでしょうか?


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

Name: tokage  ..入門者(2,767ポイント)   Date: 2010/03/03(水) 17:11   No:48766     
Title: Re:無題    
詳しい説明ありがとうございます。
とりあえず現状のプログラムですが、前に載せえたのが長かったと思うので短くしました。
#include "DxLib.h"
#include <math.h>

//関数宣言
void CAM_Init()  ;/*カメラ初期化*/void CAM_Proc() ;/*カメラ処理*/
void Rend_Proc() ;/*描画処理*/
void Input_Proc();/*入力処理*/
void ST_Init()   ;/*ステージ初期化*/void ST_Ter();/*ステージ後始末*/
#define CAM_SPEED        0.1f//カメラ旋回速度
#define CAM_MSPEED        50.0f//カメラ移動速度

//入力情報
struct KEYINPUT {    int    NInput ;/*現在*/ int EInput ;/*過去*/ } ;    KEYINPUT inp;//キー入力実態宣言
struct CAM/*カメラ情報構造体*/{ float AH;/*水平*/ float AV;/*垂直*/ VECTOR Tt;/*注視点*/ VECTOR ZA;/*座標*/ 
    float TR;/*ねじれ角度*/ float smx , smy , smz ; /*移動量*/    int CS;//カメラ固定フラグ
    int    mpx,mpy;//マウス座標
    float ms;//角度変更量
    float cx , cz ;    } ; CAM cam ; //カメラ実体宣言
//-----------------------------------------------------------------------------------
void Input_Proc()//入力処理
{    int O ; O = inp.NInput ;
    inp.NInput = GetJoypadInputState ( DX_INPUT_KEY_PAD1 ) ; inp.EInput = inp.NInput & ~ O ; }
//-----------------------------------------------------------------------------------
struct ST//ステージ情報構造体
{ int MHandle ; } ;
ST st;
//-----------------------------------------------------------------------------------
void ST_Init()//ステージ初期化
{    st.MHandle = MV1LoadModel ( "s1.mqo" ) ;
    MV1SetupCollInfo ( st.MHandle , -1 ) ; }
void ST_Ter()//ステージ後始末
{    MV1DeleteModel ( st.MHandle ) ; }
//-----------------------------------------------------------------------------------
void CAM_Init()//カメラ初期化
{    cam.ZA.x = 0.0f ; cam.ZA.y =  0.0f ; cam.ZA.z = 0.0f  ;        cam.smx = 0.0f ; cam.smy = 50.0f ; cam.smz = 50.0f ;
    cam.CS   = 1    ; cam.TR   =  0.0f ; cam.ms   = 0.01f ;        cam.smx = 0.0f ; cam.smy = 50.0f ; cam.smz = 50.0f ;
    cam.cx   = 0    ; cam.cz   = 50 ; }
void CAM_Proc()//カメラ処理
{    GetMousePoint ( &cam.mpx , &cam.mpy ) ;
    if( ( GetMouseInput() & MOUSE_INPUT_RIGHT ) != 0 ) { cam.CS = 2 ; }
    if( cam.CS != 2 && 200 < cam.mpy ) { cam.AV += cam.ms ; }//下------------------------
    if( cam.CS != 2 && 50  < cam.mpy ) { cam.AV += cam.ms + 0.02f ; }
    if( cam.CS != 2 && 300 > cam.mpy ) { cam.AV -= cam.ms ; }//上------------------------
    if( cam.CS != 2 && 470 > cam.mpy ) { cam.AV -= cam.ms+0.02f ; }
    if( cam.CS != 2 && 400 < cam.mpx ) { cam.AH += cam.ms ; }//右------------------------
    if( cam.CS != 2 && 570 < cam.mpx ) { cam.AH += cam.ms+0.02f ; }
    if( cam.CS != 2 && 200 > cam.mpx ) { cam.AH -= cam.ms ; }//左------------------------
    if( cam.CS != 2 && 30  > cam.mpx ) { cam.AH -= cam.ms + 0.02f ; }
//---------------------------------
    if( CheckHitKey ( KEY_INPUT_W      ) == 1 ) { cam.ZA.z += cam.smz ; cam.ZA.x += cam.smx ; }
    if( CheckHitKey ( KEY_INPUT_S     ) == 1 ) { cam.ZA.z -= 50.0f   ; }
    if( CheckHitKey ( KEY_INPUT_A     ) == 1 ) { cam.ZA.x -= 50.0f   ; }
    if( CheckHitKey ( KEY_INPUT_D     ) == 1 ) { cam.ZA.x += 50.0f   ; }
    if( CheckHitKey ( KEY_INPUT_SPACE ) == 1 ) { cam.ZA.y += cam.smy ; }
    if( CheckHitKey ( KEY_INPUT_F     ) == 1 ) { cam.ZA.y -= cam.smy ; }

    SetCameraPositionAndAngle( VGet ( cam.ZA.x , cam.ZA.y , cam.ZA.z ) , cam.AV , cam.AH , cam.TR ) ;
}
void Rend_Proc()//描画処理-----------------------------------------
{
    MV1DrawModel ( st.MHandle ) ; //ステージ
}

int WINAPIからさきは同じなので省かせていただきます。

一応こうなっているんですがこれでいいんでしょうか。


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

Name: Tororo  ..入門者(4,454ポイント)   Date: 2010/03/03(水) 17:19   No:48767     
Title: Re:無題    
まぁそんな感じです^^

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

Name: MNS  ..プログラマー(33,674ポイント)   Date: 2010/03/03(水) 17:33   No:48769     
Title: Re:無題    
DXライブラリの3D機能、というよりは、3Dの処理全般はよく知らないのですが、
座標から注視点へのベクトルが、カメラの向きと考えてよいのでしょうか?
完全に的はずれなことを言っているかもしれませんが、
(Tt-ZA)を適当にスケーリングして、ZAに加算すれば良いと思います。

少なからず、私はCAM_Proc関数はなんら問題はなかったと思いますよ。 編集済み


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

Name: tokage  ..入門者(2,653ポイント)   Date: 2010/03/03(水) 18:12   No:48770     
Title: Re:無題    
MNSさんありがとうございます。
とりあえずやってみますが時間がかかると思います。

tororoさん
これで毎回初期化はなくなったと思います。ありがとうございました。

関係ないですがシューティングゲームやってみました。
まだ最後までやっていませんがボス戦が好きなので楽しいです。


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

Name: MNS  ..プログラマー(34,097ポイント)   Date: 2010/03/03(水) 18:23   No:48772     
Title: Re:無題    
一応、コードを適当に弄ったら出来た(?)ので書いて置きます。

void ST_Init()//ステージ初期化 

    st.MHandle=MV1LoadModel("s1.mqo"); 
    MV1SetupCollInfo(st.MHandle,-1); 
    MV1SetPosition( st.MHandle, VGet( 0.0f, 0.0f, 100.0f ) ) ;
}
座標がセットされてなかったので、試験的に(0,0,100)にします。

void CAM_Init()//カメラ初期化 

    cam.ZA.x=0.0f; 
    cam.ZA.y=0.0f; 
    cam.ZA.z=0.0f; 
    cam.Tt = VGet(0.0,0.0,100.0);

注視点を先の座標と同じところに設定します。

void CAM_Proc()//カメラ処理 

    〜略〜

    if(CheckHitKey(KEY_INPUT_W)==1) 
    { 
        cam.ZA = VAdd(cam.ZA, VNorm(VSub(cam.Tt, cam.ZA)));
    } 
    if(CheckHitKey(KEY_INPUT_S)==1) 
    { 
        cam.ZA = VSub(cam.ZA, VNorm(VSub(cam.Tt, cam.ZA)));
    } 

    〜略〜
}
Wキーをおしたときには、
カメラの座標=カメラの座標+正規化ベクトル(カメラの注視点ーカメラの座標)
を行い、
Sキーをおしたときには減算します。

一応、これでカメラの方向に移動すると思いますが、
座標に対応させて注視点の値も変えなければならないのかもしれません。

まあ、詳しい人が解説してくれると思うので、
とりあえず動かしてみたい場合には上のようなコードで出来る…と思います。


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

Name: tokage  ..入門者(2,731ポイント)   Date: 2010/03/03(水) 20:30   No:48777     
Title: Re:無題    
どうやら座標に対応して注視点を変えなければならないようです。
(ステージの中心を見たまま移動している)
注視点を変化させるためにいろいろいじってみます。


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

Name: tokage  ..入門者(2,825ポイント)   Date: 2010/03/05(金) 18:24   No:48859     
Title: カメラの向いている方向に移動    
いろいろやってみましたが結局状況は変わりませんでした。
現状カメラはとりあえず動くのですが、カメラが向いている方向に移動に
移動することができません。
いろいろなサイトをみて試したりはしたのですが注視点に関する情報を
見つけることができませんでした。

注視点を変える方法が分かる人、ぜひ教えてください。
お願いします。


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

Name: Justy  ..伝説なるハッカー(503,692ポイント)   Date: 2010/03/05(金) 22:18   No:48865     
Title: Re:カメラの向いている方向に移動    

> 現状カメラはとりあえず動くのですが、カメラが向いている方向に移動に 
> 移動することができません。

 tokageさんのカメラは角度ベースで管理しており注視点ベースではないので
厳密に注視点を出すことはできませんが、カメラの向きは GetCameraTarget()で取得することが
出来ますので、カメラの座標にそれを足せばそれを注視点としてしまってもいいかと思います。


 ただ、コードを見る限りカメラの向きを基本として、前後だけでなく左右上下にも
移動するようなので、

    VECTOR v = { 0 };
    if(CheckHitKey(KEY_INPUT_W) == 1)
        v.z += cam.smz;
    
    if(CheckHitKey(KEY_INPUT_S) == 1)
        v.z -= cam.smz;
    
    if(CheckHitKey(KEY_INPUT_A) == 1)
        v.x -= cam.smx;

    if(CheckHitKey(KEY_INPUT_D) == 1)
        v.x += cam.smx;

    if(CheckHitKey(KEY_INPUT_SPACE) == 1)
        v.y += cam.smy;

    if(CheckHitKey(KEY_INPUT_F) == 1)
        v.y -= cam.smy;
    
    MATRIX m;
    CreateIdentityMatrix(&m);
    CreateRotationXYZMatrix(&m, cam.AV, cam.AH, cam.TR);
    VectorTransform(&v, &v, &m);
    cam.ZA = VAdd(v, cam.ZA);

のようにカメラのローカルの姿勢をベースに移動量を決めて、後でカメラの姿勢を元に変換し、
cam.ZAに足し込めばいいんじゃないかと思います。

 どうでしょう?


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

Name: tokage  ..入門者(2,847ポイント)   Date: 2010/03/06(土) 09:01   No:48874     
Title: Re:カメラの向いている方向に移動    
おかげでカメラの向きに移動することができました。
これをもとにゲームを作っていこうと思います、
本当にありがとうございました。

移動できたので解決にします。


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

Name: tokage  ..入門者(2,864ポイント)   Date: 2010/03/06(土) 09:04   No:48875 解決!     
Title: Re:カメラの向いている方向に移動    
解決にし忘れたのでしておきます。

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



Name: 真由美  ..ぴよぴよ(507ポイント)   Date: 2010/03/04(木) 09:09   No:48795       
Title: VC++.netで最小化した時に・・・(他質問あり)    
今までC++でプログラムを書いてきました。
次のステップに進む為にVC++.netでアプリを作っております。 VS2005

そこで問題が出てきました。WindowsAPI等で書いていた時は
ウインドウズのスタイルを変えたりして出来たのですが.netではどのようにかけばよいのかがわかりません。

VC++.netで最小化した時にタスクバー?にいくのではなく
右下の時計とか表示してある画面に移動させたいです。

・ウインドウズのサイズ変更が出来ないようにする。
・フォーム名?が表示されているウインドウズバーを消す。

この3点が調べたのですがわかりませんでした。
その為質問させて頂きます。

VCについては大体は理解しておりますので
これらのプロパティ名を教えて頂けますと助かります。
例)lavel->text みたいな感じで

お手数おかけいたしますが宜しくお願い致します。


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


Name: たかぎ [URL]  ..ハッカー(167,605ポイント)   Date: 2010/03/04(木) 09:18   No:48796     
Title: Re:VC++.netで最小化した時に・・・(他質問あり)    
他にもいろいろ疑問が出てきそうですので...

http://dobon.net/vb/dotnet/index.html
↑でも参考にしてください。
C#とVBのサンプルしかありませんが、C++/CLIでも似たようなもんです。


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

Name: 真由美  ..ぴよぴよ(798ポイント)   Date: 2010/03/04(木) 10:29   No:48797     
Title: Re:VC++.netで最小化した時に・・・(他質問あり)    
たかぎ様
ご回答ありがとうございます。
さらにわかりやすいサイトまでありがとうございました。

サイズの変更についてはわかったのですが
タイトルバーを持たないフォームの時、
マウスでの移動?が上手くいきません。

エラーは出ずに
if (e->Button == System::Windows::Forms::MouseButtons::Left)については実行出来てるみたいです。
ラベルの値を変えるようなプログラムを書いて実行したら反応が御座いました。

    private: System::Void Form1_MouseDown(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) {
                 if (e->Button == System::Windows::Forms::MouseButtons::Left){
                     mousePoint = Point(e->X, e->Y);
                  }
             }
    private: System::Void Form1_MouseMove(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) {
                 if (e->Button == System::Windows::Forms::MouseButtons::Left){
                     Form1::Left += e->X - mousePoint.X;
                     Form1::Top +=    e->Y - mousePoint.Y;
                 }
             }


お手数おかけいたしますがご回答頂けないでしょうか?


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

Name: 真由美  ..ぴよぴよ(893ポイント)   Date: 2010/03/04(木) 10:38   No:48798     
Title: Re:VC++.netで最小化した時に・・・(他質問あり)    
すみません。
抜けておりました。
    private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
             Form1::MouseDown += MouseEventHandler(Form1_MouseDown());
             Form1::MouseMove += MouseEventHandler(Form1_MouseMove());

         }

これを書くと引数がないとエラーが出ます。
ただ引数に何を入れればよいのかがわかりません・・・。


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

Name: pooka [URL]  ..上級者(21,802ポイント)   Date: 2010/03/05(金) 01:36   No:48822     
Title: Re:VC++.netで最小化した時に・・・(他質問あり)    
>Form1::MouseDown += MouseEventHandler(Form1_MouseDown());
>Form1::MouseMove += MouseEventHandler(Form1_MouseMove());

ここは
this->MouseDown += gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::Form1_MouseDown);
this->MouseMove += gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::Form1_MouseMove);
ではないかと。

あとイベントハンドラの追加は
http://dobon.net/vb/dotnet/beginner/eventhandle.html
こちらのページのC#のところが参考になるかもしれません。


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

Name: 真由美  ..ぴよぴよ(921ポイント)   Date: 2010/03/05(金) 06:46   No:48824     
Title: Re:VC++.netで最小化した時に・・・(他質問あり)    
ご回答ありがとうございます。
エラーが出ずに出来ました。
ただ問題が御座いまして枠ぎりぎりの所を選択していないと動かないのと
かなりピクピク動きます。
クリックした位置から離れるともはやどこに止まるかわかりません。

ソースが間違えているのでしょうか?

ウインドウのどこをドラック&ドロップしても
スムーズに移動するような仕様にしたいです。



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

Name: 真由美  ..ぴよぴよ(971ポイント)   Date: 2010/03/05(金) 19:12   No:48860     
Title: Re:VC++.netで最小化した時に・・・(他質問あり)    
すみません・・・。色々と挑戦してみたのですがやはり
ピクピクするのがとれません・・・・。
どうか教えては頂けないでしょうか?


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

Name: Justy  ..伝説なるハッカー(503,735ポイント)   Date: 2010/03/06(土) 01:38   No:48868     
Title: Re:VC++.netで最小化した時に・・・(他質問あり)    
 同一のイベントハンドラに対して同一のメソッドを多重登録しているのが原因だったりしませんか?

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

Name: 真由美  ..かけだし(1,083ポイント)   Date: 2010/03/06(土) 02:27   No:48869     
Title: Re:VC++.netで最小化した時に・・・(他質問あり)    
Justy様
ご回答ありがとうございます。
どうやらそうだったみたいです><

よく見てみるとラベルの上でドラック&ドロップしても反応しないみたいです。
フォームの何もないところでしたらスムーズに移動しました。

ラベルの上では反応しないのでしょうか。


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

Name: Justy  ..伝説なるハッカー(503,774ポイント)   Date: 2010/03/06(土) 02:42   No:48870     
Title: Re:VC++.netで最小化した時に・・・(他質問あり)    
 そのラベルにもフォームと同じマウス関連のイベントを登録してあげれば動くと思いますよ。

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

Name: 真由美  ..かけだし(1,145ポイント)   Date: 2010/03/06(土) 03:21   No:48872     
Title: Re:VC++.netで最小化した時に・・・(他質問あり)    
出来ました><
登録してあげないとだめなんですね。

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


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



Name: ゼド  ..ぴよぴよ(24ポイント)   Date: 2010/03/05(金) 13:20   No:48839       
Title: ポケコンで    
すみません。
ポケコンで、東方のシューティングゲームを作りたいんですが、プログラムが考えられないんで、プログラムを考えてもらえないでしょうか。


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


Name: たかぎ [URL]  ..ハッカー(167,969ポイント)   Date: 2010/03/05(金) 13:29   No:48841     
Title: Re:ポケコンで    
それは、作りたいのではなくて、作ってほしいの間違いでは?


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

Name: softya [URL]  ..ハッカー(128,184ポイント)   Date: 2010/03/05(金) 14:31   No:48844     
Title: Re:ポケコンで    
最近のポケコンって高度なグラフィック表示出来るんですか?
色も出ないし、超低解像度で、グラフィックの表示も激烈に重かったはずですよ。
最近のポケコン詳しくないんですが、ポケコンの詳細を教えて下さい。
私の記憶が確かなら、Z80という超ローテクCPUを使っているため速度がまったく出ないはずです。
スペースインベーダーでも難しいのでは? 編集済み


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

Name: ゼド  ..ぴよぴよ(63ポイント)   Date: 2010/03/05(金) 14:44   No:48845     
Title: Re:ポケコンで    
すみません。
作ってください。

ポケコンは、SHARPのPC-G850Vです。

よろしくお願いします。


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

Name: softya [URL]  ..ハッカー(128,300ポイント)   Date: 2010/03/05(金) 14:51   No:48846     
Title: Re:ポケコンで    
>ポケコンは、SHARPのPC-G850Vです
ハード的に無理ですし、この掲示板サイトはお手伝いを基本としています。
それにポケコンを持っている人が、この掲示板にいないんじゃ?

>作ってください。 
たかぎさんに依頼すれば作ってくれますよ(仕事としての料金が発生しますが)。


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

Name: たかぎ [URL]  ..ハッカー(167,986ポイント)   Date: 2010/03/05(金) 14:52   No:48847     
Title: Re:ポケコンで    
> たかぎさんに依頼すれば作ってくれますよ(仕事としての料金が発生しますが)。

技術的に不可能なものは、いくらお金を積まれても無理ですけどね。


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

Name: softya [URL]  ..ハッカー(128,385ポイント)   Date: 2010/03/05(金) 15:04   No:48848     
Title: Re:ポケコンで    
>技術的に不可能なものは、いくらお金を積まれても無理ですけどね。 

たしかに。
なんなら、PC-G850VのIOポートにCPUを載せた拡張基板を接続してそちらでゲームを動かすと言う・・・(価格度外視の仕様)。



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

Name: ゼド  ..ぴよぴよ(74ポイント)   Date: 2010/03/05(金) 15:09   No:48849     
Title: Re:ポケコンで    
無理そうですか


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

Name: softya [URL]  ..ハッカー(128,437ポイント)   Date: 2010/03/05(金) 15:34   No:48850     
Title: Re:ポケコンで    
ここにあるシューティングが限界です。
http://www16.ocn.ne.jp/~ver0/g800/index.html
すごく、がんばっている方だと思いますが。


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

Name: バグ  ..ハッカー(191,640ポイント)   Date: 2010/03/05(金) 15:41   No:48851     
Title: Re:ポケコンで    
処理速度云々よりも、容量で弾かれそうな…
しかし、私が学生時代に所有していたVX4というカシオのポケコンと比べると、随分スペックが上がってきてるんですねぇ…(^_^;)


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

Name: ゼド  ..ぴよぴよ(89ポイント)   Date: 2010/03/05(金) 15:46   No:48852     
Title: Re:ポケコンで    
you tubu にあったゲームつくった人もサイトですね


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

Name: ムンバ  ..プログラマー(28,582ポイント)   Date: 2010/03/05(金) 15:48   No:48853     
Title: Re:ポケコンで    
こんにちは!
横スレ、すみません。

↓こちらのページも参考にされては如何でしょうか?^^

http://orange.kakiko.com/cosmopatrol/link/linkk2.html


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

Name: softya [URL]  ..ハッカー(128,692ポイント)   Date: 2010/03/05(金) 16:37   No:48855     
Title: Re:ポケコンで    
とりあえずまとめると、東方レベルはハード的に難しいです。
↓このレベルならマシン語を駆使するなら作れます。
http://www.youtube.com/watch?gl=JP&hl=ja&v=Qnk2mc25Hjk
開発期間を1ヶ月と考えて、開発依頼すると30〜100万円(要相談)です。期間も適当です。
自力で作る気なら、無料でこの掲示板で出来る分はみんながお手伝いします(作ってくれは出来ません)。
ただし、ポケコン所有者はいないので細かいレベルはサポートできませんし、ソースコードの添削も短いものに限ります。Z80のアセンブラを分かる人は、あまりいません。
って所ですかね。


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

Name: たかぎ [URL]  ..ハッカー(168,175ポイント)   Date: 2010/03/05(金) 16:50   No:48856     
Title: Re:ポケコンで    
> 開発期間を1ヶ月と考えて

1ヶ月は無理でしょう。
ポケコンを取り寄せる時間は含まないとしても、仕様を調査したり、実験を行ったりする期間が最低でも半月ぐらい必要かと思います。
ここをしっかりやっておかないと、容量や速度面で無理な設計をしてしまったりします。
未知のハードを制御する場合、予期しない事態が発生する確率が高いので、どんなに少なく見積もっても3ヶ月ぐらいは必要だと思います。
もちろん、依頼を受けて作るのではなく、自分で好きなように作れるなら、1ヶ月でもなんとかなるかもしれません。

> Z80のアセンブラを分かる人は、あまりいません。 

Z80のアセンブラより、ペリフェラルの仕様がわからないのと、それに対する経験がないところが重要です。
まあ、組込み開発なんかは常にこういう状況ですが。


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

Name: 通りすがり  ..上級者(20,837ポイント)   Date: 2010/03/05(金) 17:16   No:48857     
Title: Re:ポケコンで    
文章からして小学生でしょ。難しい事言ってもわからないと思いますよ。
子供が「あれ作って〜」と言って来ているのに対してどう答えるかですよ。


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

Name: たかぎ [URL]  ..ハッカー(168,207ポイント)   Date: 2010/03/05(金) 17:34   No:48858     
Title: Re:ポケコンで    
> 文章からして小学生でしょ。

最近は、大学生とか社会人でも小学生並みの文章の人が少なくありませんからね。
本人がそういってくれないかぎり、何ともいえないでしょう。


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

Name: 7A  ..ぴよぴよ(336ポイント)   Date: 2010/03/06(土) 02:43   No:48871     
Title: Re:ポケコンで    
初書き込みになりますかな・・。

SHARPのG850V・・・私が高校で使っていた型と同じです。
高校の時ベーシックでそのポケコンにプログラムを打ち込んで
授業中に遊んでいたのはいい思い出です。

さて、私の話はともかくゼドさんに対してです。
私はなぜポケコンでゲームを作って欲しいのか と言うのが非常に気になります。
持ち運びできるゲームとしてでしたらDSやPSPなどに弾幕系STGがあるような気もしますし
ポケコンでゲームを動かしたいと言うのであればソースは探せばいくらでもあります。(弾幕STGはないと思います。ハード的に・・・・)

作って下さいと言われれば大体の人は「No」と答えると思います。
その方法以外で目的を達成するのも良いと思うので なぜポケコンでゲームを作って欲しいのか理由が聞きたいです。
言って頂ければアドバイス出来るかもしれません。


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



Name: くりあ  ..初心者(5,768ポイント)   Date: 2010/03/05(金) 03:57   No:48823       
Title: 変数    
何度か、質問させていただいているものです。初心者です。
VC++を使っています。

質問なのですが、構造体を作りました。その中に(メンバっていうのですか?)変数を入れていくのですが、
そのうちの1つに何の型が入るか分からない変数が必要になりまして、この変数を、なんでも入るような型にする事は可能ですか?void*型?がそんな働きをするようなのですが、これはポインタですし、char型とか、int型とかは、直接入らないらないからできないような。出来るんですかね?分かりずらくて申し訳ありません。
何が入るか分からないといっても、int型やchar型など3〜4個などで、全部つくってもいいような気もするのですが、無駄が多いような気がするので、良い方法を探しています。お願いします。


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


Name: softya [URL]  ..ハッカー(127,529ポイント)   Date: 2010/03/05(金) 09:19   No:48826     
Title: Re:変数    
C言語だけなのか、C++の文法を使ってよいのかで話は大分変わってきます。
C言語なら、unionを使って同じメモリ領域を別の型にすることができます。ただし、ここまでしてメモリ領域を節約する必要があるのはマイコンぐらいです。全部メンバを作った方が後々の問題も少ないです。
C++ならクラスでポリモーフィズムを使えば解決します。

なぜ、同じメンバ名で違う型のデータを扱いたいか説明してもらうと良い答えが得られると思いますがお聞かせ願えませんか?


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

Name: たかぎ [URL]  ..ハッカー(167,782ポイント)   Date: 2010/03/05(金) 09:34   No:48828     
Title: Re:変数    
> int型やchar型など3〜4個などで、

全部整数型なら、一番大きなものにあわせておくのも一つの手です。
具体的にどんな型があるのか書いていただくと、もう少し気の利いた回答ができるかもしれません。

C++であれば、一般的にはboost::anyを使うべきです。
本当のCなら共用体でもよいのですが、C++をCのように使っているだけであれば、C互換型(POD型)かどうかの判断が正確にできるのでないかぎり、共用体は使うべきではありません。


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

Name: くりあ  ..初心者(6,099ポイント)   Date: 2010/03/05(金) 10:10   No:48829     
Title: Re:変数    
softyaさん、たかぎさん、ていねいな回答ありがとうございます。
C++の文法で作成しているつもりです。
プログラムを実行して入力されたデータを変数のようにして扱えるプログラムを作りたいんです。
実行者に変数名とデータを入力してもらい構造体に変数の名前と、データのメンバを作ってそこに情報入れたいのです。変数名は文字列が入るのでchar型でいいのですが、データのほうは、文字列か数字(整数以外も含む)かなどがわからない(ただ、ポインタは入らないです)ので、このような質問をしたのですが、まだ理解が浅くいい方法が分かりませんでした。このようなプログラムの場合、どのようにするのが効率がいいのでしょうか?

ポリモーフィズムを調べてみたのですが、どういうものなのか分かりませんでした。

boost::anyも調べてみたのですが、使う時にキャスト?しなければいけないとのことなのですが、どのようにすればいいのか分かりませんでした。キャストはどうやればいいのでしょうか?

>>本当のCなら共用体でもよいのですが、C++をCのように使っているだけであれば、C互換型(POD型)かどうかの判断が正確にできるのでないかぎり、共用体は使うべきではありません。 

もうこの文章が何を意味しているのか分からないので使わないほうがいいんですね。たぶん。


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

Name: バグ  ..ハッカー(191,570ポイント)   Date: 2010/03/05(金) 10:28   No:48830     
Title: Re:変数    
入力された値に応じて、その時々で自動的に型を変更したいってこと?
入力される情報に型に関する情報も含まれているというのであれば簡単でしょうけど…


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

Name: 山崎  ..プログラマー(37,486ポイント)   Date: 2010/03/05(金) 11:00   No:48831     
Title: Re:変数    
おはようございます。

変数名とデータは、どのように入力されるのでしょうか?
もしscanfを使うのならば以下の方法はいかがでしょう。

変数名もデータもとりあえず文字列として保存します。
データの方は、入力された文字列に文字が含まれるか小数点が含まれるか
数字だけの文字列かというのをチェックします。
そのチェックに応じた型のメンバをnewします。
そのnewした領域に、文字列として保存しておいたデータを型変換して代入します。

入力されたデータも変数名もどちらも文字列として保存しておいて、
使う時になったらデータを適切な型にする、というのも手な気がしますね。


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

Name: softya [URL]  ..ハッカー(127,953ポイント)   Date: 2010/03/05(金) 11:39   No:48832     
Title: Re:変数    
>変数名は文字列が入るのでchar型でいいのですが、データのほうは、文字列か数字(整数以外も含む)かなどがわからない

なるほど、スクリプト言語の様な物を作っているのですね。
私は別々のメンバにするのを推奨します。文字列なら構造体に入れる場合、stringとかクラスを使ったほうが良いですね。数値は、int型とdouble型で十分じゃないでしょうか。
今使っている型は、構造体中に型を記録するメンバ変数を追加してください。
それと、変数名も文字列ですが検索する必要があると思うので、stlのmapとかを使ったほうがスマートになると思います。
連想配列(map)。たかぎさんのサイトより。
http://www.kijineko.co.jp/tech/cppsamples/map.html

それと、一番スッキリするのは構造体自体を変数処理クラスにして全てカプセル化する事ですかね。 編集済み


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

Name: たかぎ [URL]  ..ハッカー(167,953ポイント)   Date: 2010/03/05(金) 12:32   No:48833     
Title: Re:変数    
> boost::anyも調べてみたのですが、使う時にキャスト?しなければいけないとのことなのですが、どのようにすればいいのか分かりませんでした。キャストはどうやればいいのでしょうか? 

boost::any x = 123;
int y = boost::any_cast<int>(x);
x = std::string("abc");
std::string s = boost::any_cast<std::string>(x);

上記のように行います。

いっそのことデータは文字列で持って、取り出すときにboost::lexical_castを使うのも一つの手です。
こんなかんじです。

std::map<std::string, std::string> var;
std::string name = "変数名";
std::string value = "123";

var[name] = value;
int x = boost::lexical_cast<int>(var[name]);


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

Name: dic  ..熟練のプログラマー(56,331ポイント)   Date: 2010/03/05(金) 16:29   No:48854     
Title: Re:変数    
1.文字列を整数に変換する関数 atoi
2.数字を文字列に変換する関数 itoa
をMSDNで調べればいいかと思います

int i;
char str[10] = "256";

i = atoi( str );
printf( "%d\n"< i );


(2はあんまり使わないんでタイプミスあるかもしれません)



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

Name: くりあ  ..初心者(6,230ポイント)   Date: 2010/03/05(金) 22:45   No:48867 解決!     
Title: Re:変数    
皆様、回答ありがとうございます。
いろいろな方法があるのですね。
もっと勉強しなくてはと感じました。
どの方法をとるかは、プログラムのほかの部分との相性などから決めたいと思います。
分からない事があれば、また聞きに来ようと思います。
最初は、こんなぐちゃぐちゃな文では、「もっと具体的にに決めて来い!!」と怒られるかと思ったのですが、
みなさん本当に親切に分かりやすくお答えしていただき、本当にありがとうございました。


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



Name: KAZUKI . S  ..ぴよぴよ(39ポイント)   Date: 2010/03/05(金) 21:09   No:48862       
Title: 「12、画像を動かす」のところがうまく処理されない。    
プログラミング初心者ですが、

入門編の「12、画像を動かす」に書いてあるソースを書いてコンパイルしても、動かないで動いた後だけ表示されます。コピペでやっても同じ結果でした。なにが問題なのでしょうか?
「12、画像を動かす」のソースはすべて試しましたが、ダメでした。


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


Name: 通りすがり  ..上級者(20,849ポイント)   Date: 2010/03/05(金) 21:29   No:48863     
Title: Re:「12、画像を動かす」のところがうまく処理されない。    
前にも似たような質問ありましたね。
12章をよく読んだらわかります


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

Name: KAZUKI . S  ..ぴよぴよ(57ポイント)   Date: 2010/03/05(金) 21:56   No:48864 解決!     
Title: Re:「12、画像を動かす」のところがうまく処理されない。    
ありがとうございます!!本当でした・・・。
次からはしっかり読んで調べてから質問します!!


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

Name: Dixq (管理人)  ..ウィザード(1,158,366ポイント)   Date: 2010/03/05(金) 22:21   No:48866     
Title: Re:「12、画像を動かす」のところがうまく処理されない。    
やはり12章はわかりにくいようですねf^_^;
最初に注意を促すなど、改善したいと思います。

もし「ここわかりにくいんだけど」みたいなご意見あれば気軽にコメント下さい^^


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



Name: ロース  ..ぴよぴよ(136ポイント)   Date: 2010/03/05(金) 13:29   No:48842       
Title: 2面を作りたい    
今、龍神録の館を参考にしてシューティングを作成しているのですが
弾幕類は頑張って作れるとして、ステージ2へ移る手段がいまいち作成できません。
ボスが倒されたらフラグを立てて、新しく2面のデータをロードして初期化する。
ような処理でいいのでしょうか?
東方っぽい感じでやりたいと思っていました。

C#が出来るのでプログラミングの基本は分かりますが
C/C++はあまり分かっていない面が多いのでよろしくお願いします。
龍神録は50章あたりまではしっかりと読みました。 編集済み


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


Name: Ma  ..熟練のプログラマー(58,326ポイント)   Date: 2010/03/05(金) 13:59   No:48843     
Title: Re:2面を作りたい    
>ような処理でいいのでしょうか? 
「仕様に大きく左右されます」が、だいたいあっているとおもいます。
より、詳しい情報がほしいなら、よくわからない原因だとか、どのような仕様を実装するのが難しいのか
具体的に説明しないと答えにくいです。
(東方のまんまでいい、などなど…。)

疑問に思っただけなら質問するだけでいいと思いますが、もし自分のゲーム用に実装する方針ならば
読む/聞くんじゃなくて実際にやってみるのが一番早いとおもいますよ。


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



Name: okusi  ..ぴよぴよ(39ポイント)   Date: 2010/03/05(金) 12:49   No:48834       
Title: おもい(-_-;)    
VC++を使ってシューティングゲームを作っています。

実行すると初めの2〜3秒あたりで動きが遅くなってしまいます。

どのような理由が考えられますか?


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


Name: Mikan [URL]  ..中級者(11,456ポイント)   Date: 2010/03/05(金) 12:57   No:48835     
Title: Re:おもい(-_-;)    
もう少し詳しく情報を載せると正しい回答がえられますよ。

ゲームということなので、推測で回答させてもらうと、
グラフィックのロードや、Dxlibを使ってる場合ですと初期化等じゃないですか?

処理の間で時間を測定することをお勧めします。


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

Name: softya [URL]  ..ハッカー(128,051ポイント)   Date: 2010/03/05(金) 13:00   No:48836     
Title: Re:おもい(-_-;)    
情報不足なので、色々考えられます。
(1)使っている描画ライブラリが重い。
(2)無駄なループがある。
(3)重なったor見えないキャラクタを描画している。
(4)透明部分が異様に多いスプライトを描画している。
(5)単純に描画が多い。
(6)処理ループ中にロードなどがある。


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

Name: okusi  ..ぴよぴよ(72ポイント)   Date: 2010/03/05(金) 13:03   No:48837     
Title: 無題    
コメントありがとうございます

はい。Dxlibを使っています。

アドバイスを試してから出来なかったらまた来ます


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

Name: okusi  ..ぴよぴよ(123ポイント)   Date: 2010/03/05(金) 13:12   No:48838 解決!     
Title: Re:無題    
解決できました!

グラフィックをロードするとき変な所にあったのが原因みたいでした。

コメントをくれた方ありがとうございました。m(_ _)m


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



Name: dic  ..熟練のプログラマー(54,639ポイント)   Date: 2010/03/02(火) 16:43   No:48738       
Title: マルチブート環境を作りたい(オフトピックス    
Linux関連の知識も取得しようかと思い
タイトルの通りOSを色々切り替えて起動したいのです
マルチブートのGRUBをインストールしたのですが、
最初のOSを選択する画面で、どのOSを起動するのかを
選べる状態なのですが、キーボードが反応しません
'e' edit と書いてあるので、eキーを押しても反応してません

マウスはPS2接続のにUSB接続に変換してるのですが、
インストール始めはキーボードも反応し、
OSを選択できてたのですが
なぜか、今はキーボードが反応しません

GRUBのバージョンは0.98で
VineLinux5.0の付属しているものです
起動するOSを選べる方法を
分かる方いらっしゃらないでしょうか?


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


Name: たかぎ [URL]  ..ハッカー(167,072ポイント)   Date: 2010/03/02(火) 16:45   No:48739     
Title: Re:マルチブート環境を作りたい(オフトピックス    
上下のキーで選べませんか?

マルチブートもよいですが、VMwareでも使ったほうが便利な気がします。


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

Name: dic  ..熟練のプログラマー(54,757ポイント)   Date: 2010/03/02(火) 16:56   No:48741     
Title: Re:マルチブート環境を作りたい(オフトピックス    
>上下のキーで選べませんか?
選べないです(;ω;)

>マルチブートもよいですが、VMwareでも使ったほうが便利な気がします。
非常に魅力的ですが、コストが・・・orz
たとえ手に入っても扱えるかどうかマニュアル理解できるか・・・orzorzorz


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

Name: たかぎ [URL]  ..ハッカー(167,117ポイント)   Date: 2010/03/02(火) 16:59   No:48742     
Title: Re:マルチブート環境を作りたい(オフトピックス    
> >上下のキーで選べませんか? 
> 選べないです(;ω;) 

状況がよくわからないですね。

> 非常に魅力的ですが、コストが・・・orz 

VMware Playerなら無償です。適当なLinuxの環境をダウンロードすればそれで使えます。
私はMacなので、WindowsもLinuxもVMware Fusionで動かしています。


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

Name: Dixq (管理人)  ..ウィザード(1,158,269ポイント)   Date: 2010/03/02(火) 17:05   No:48743     
Title: Re:マルチブート環境を作りたい(オフトピックス    
VMウェア、何かと勘違いされてませんか?
私も使ってますが、ダウンロードしてインストールしたらいいだけですよ。
VM用のLinuxダウンロードすれば、便利なツール関連が有効になってるので使いやすいですよ。
コピペも出来るし。
ただ、VMウェアではウブンツの視覚エフェクトが有効にならないようなので、エフェクト好きな私としてはそこだけネックですが、まぁ大した問題じゃないですね^_^;


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

Name: softya [URL]  ..ハッカー(126,671ポイント)   Date: 2010/03/02(火) 17:13   No:48746     
Title: Re:マルチブート環境を作りたい(オフトピックス    
私も無償のVMwarePlayerを使っています。
今入れてあるのは、Windows7RC版ですね。
マルチブートは失敗するとメインのOSが使えなくなるので、最近は使っていません。

VMwarePlayerの環境の作り方は色々ありますが、VineLinuxなら下記の方法などどうでしょう。
http://blog.goo.ne.jp/justice_gray/e/0ede5678b719dac183caee09caa45745


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

Name: dic  ..熟練のプログラマー(54,813ポイント)   Date: 2010/03/02(火) 17:18   No:48747     
Title: Re:マルチブート環境を作りたい(オフトピックス    
ようしゃなく英語ですねw
ちょっとWMwarePlayerの方をいろいろいじってみます


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

Name: Mikan [URL]  ..中級者(11,343ポイント)   Date: 2010/03/03(水) 12:47   No:48761     
Title: Re:マルチブート環境を作りたい(オフトピックス    
VirtualPCはどうでしょうか?(MS製品ですが、無償です)
非常にセットアップしやすかったイメージがあります。
私の環境でもVineLinuxが入っていますが、あまりつかってません^^;

http://www.microsoft.com/japan/windows/virtual-pc/default.aspx


余談ですが、私はPCが2台あるので、1台をメインでWindowsXPが入っていて、
サブは、CentOSでキーボードもマウスもモニタもつながっていません。
VNCとかSSH経由でサブPCを操作しています。
まぁこんな方法もあるということでw



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

Name: Mikan [URL]  ..中級者(11,349ポイント)   Date: 2010/03/03(水) 13:01   No:48762     
Title: Re:マルチブート環境を作りたい(オフトピックス    
>VNCとかSSH経由でサブPCを操作しています。 
SSH→TeraTermでした^^;


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

Name: dic  ..熟練のプログラマー(55,015ポイント)   Date: 2010/03/03(水) 19:01   No:48775     
Title: Re:マルチブート環境を作りたい(オフトピックス    
WMwareためしにインストールしてみました
そしたら、WMware Network Adapter VMhet1 と WMware Network Adapter VMhet8
がインストールされ
仮想OSからはインターネットできるのですが
最初の起動しているOSからはインターネットができなくなりました
OSはXPなんで、自動でインターネットに接続されるので、
その機能でインターネットにつないでいました
なので、このWMware Network Adapter VMnet1
が上書きされたことによってインターネットができない状態です

ホストOSで、インターネット接続するにはどうすればいいのでしょうか?
コントロールパネル → ネットワーク接続 → 新しい接続を作成する
まではいけるのですが、ここから先の手続きがわからないです

サポートに電話したほうがいいでしょうか?

ちなみに今は、仮想OSからの書き込みです


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

Name: dic  ..熟練のプログラマー(55,067ポイント)   Date: 2010/03/03(水) 21:05   No:48778     
Title: Re:マルチブート環境を作りたい(オフトピックス    
モデムの場合はわかるのですが
常時接続ADSL回線なのです


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

Name: softya [URL]  ..ハッカー(126,837ポイント)   Date: 2010/03/03(水) 22:10   No:48780     
Title: Re:マルチブート環境を作りたい(オフトピックス    
質問ですが、ネットワークデバイスとしてはLAN接続デバイスは認識されてますか?
>コントロールパネル → ネットワーク接続
で現状がどうなっているか教えてください。

こちらを参考に確認もお願いします。
http://nobumasa-web.hp.infoseek.co.jp/multi_boot/vmware/vmware.html
気になっているのは、ルーターとかが無いモデム直結状態で仮想PCを「ブリッジ構成」で接続していないかって事です。その場合は、IPアドレスが足らなくなるので接続出来なくなるんじゃないかと危惧されます。


>サポートに電話したほうがいいでしょうか? 
マイクロソフトもVMwareもサポートしてくれないと思います。
WMwareの購入ユーザーでも無いですし。


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

Name: dic  ..熟練のプログラマー(55,405ポイント)   Date: 2010/03/04(木) 12:23   No:48804     
Title: Re:マルチブート環境を作りたい(オフトピックス    
ネットワーク状態ですが
LANまたは高速インターネット      種類                               状態
ローカルエリア接続              LANまたは高速インターネット  接続、ファイアウォール
WMware Network Adapter VMnet1  LANまたは高速インターネット 接続、共有、ファイアウォール
WMware Network Adapter RMnet8  LANまたは高速インターネット 接続、ファイアウォール

となってます
モデムに対しても接続できないので
ネットワークアダプタが正常に動いてないかもしれないので
デバイスマネージャーを開いて調べましたが
正常に動作しているようでした

推測として、インターネット接続よりも、このWMware Network Adapter WMnet1,8
が優先的に利用されているのではと考えてます


>気になっているのは、ルーターとかが無いモデム直結状態で仮想PCを「ブリッジ構成」で接続していないかって事で>す。その場合は、IPアドレスが足らなくなるので接続出来なくなるんじゃないかと危惧されます。 
その可能性が高いですね

リンク先見ようとするんですが、仮想OSだとブラウザ落ちるんですよ(;ω;)


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

Name: softya [URL]  ..ハッカー(127,172ポイント)   Date: 2010/03/04(木) 12:34   No:48805     
Title: Re:マルチブート環境を作りたい(オフトピックス    
インターネットとの接続がルーターが無い構成なんですね?
だとしたら、仮想PC側のネットワーク設定をブリッジからNATに切り替えてみて下さい。
VMwarePlayerのウィンドウの下のほうにネットワークアイコンがあるので右クリックして、設定を選ぶと設定ウィンドウが開くので変更出来ます。


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

Name: dic  ..熟練のプログラマー(55,645ポイント)   Date: 2010/03/04(木) 12:57   No:48807     
Title: Re:マルチブート環境を作りたい(オフトピックス    
そうです
インターネットの間にルーターがない状態です
仮想PCのネットワークをブリッジからNATに変更したところ
基本PCではネットワークに接続できませんでした
仮想PCもネットワークに接続できませんでした

NATの状態で基本PCが接続できないので、
メッセンジャーに付属している診断ツールを使うと
○IP
×既存のゲートウェイ
 IEのオフライン設定
 ホストファイル
 DNS
 プロキシサーバー
 キーボード
 ワイヤレス

となってて、エラーのメッセージが
お使いのゲートウェイがオフラインになっている可能性があります
とでてます

ちなみに、これは仮想PCからブリッジで書き込みです
NATだと仮想PCも繋がりません まったくわかりません・・・orz


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

Name: dic  ..熟練のプログラマー(55,758ポイント)   Date: 2010/03/04(木) 13:02   No:48808     
Title: Re:マルチブート環境を作りたい(オフトピックス    
タスクマネージャのネットワークタブでは
WMware Player をインストールする前だと
たしか アダプタ名が「ローカル接続」 だったんですが
WMware Player をインストールすると
アダプタ名が「WMware Network Adapter VMnet8」
となっていてます


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

Name: softya [URL]  ..ハッカー(127,268ポイント)   Date: 2010/03/04(木) 13:05   No:48809     
Title: Re:マルチブート環境を作りたい(オフトピックス    
じゃあ、とりあえずネットワークアダプタのWMware Network Adapter VMhet1 と WMware Network Adapter VMhet8のIPアドレスを適当な値で固定で割り当ててみて下さい。192.168.1.1と192.168.1.2辺りで良いでしょう。

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

Name: dic  ..熟練のプログラマー(55,842ポイント)   Date: 2010/03/04(木) 13:17   No:48810     
Title: Re:マルチブート環境を作りたい(オフトピックス    
ネットワークアダプタのWMware Network Adapter VMhet1 と WMware Network Adapter VMhet8
にどうやってIPを割り当てるのでしょうか?
ネットワーク関連は弱くてすいません OTL


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

Name: softya [URL]  ..ハッカー(127,294ポイント)   Date: 2010/03/04(木) 13:28   No:48811     
Title: Re:マルチブート環境を作りたい(オフトピックス    
このサイト見れますかね。
http://www.akakagemaru.info/port/xpIPKOTEI.html


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

Name: dic  ..熟練のプログラマー(55,887ポイント)   Date: 2010/03/04(木) 13:42   No:48813     
Title: Re:マルチブート環境を作りたい(オフトピックス    
指定されたサイトは見れます (・∀・)

そのサイトを参考にしているのですが
インターネットプロトコルTCP/IPをクリックして選択し「プロパティ」をクリックします
というところで「TCP/IPを構成するには、ネットワークアダプタカードをインストールし、有効にしてください」
とエラーがでて先に進めない状態です


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

Name: dic  ..熟練のプログラマー(56,217ポイント)   Date: 2010/03/04(木) 13:52   No:48814     
Title: Re:マルチブート環境を作りたい(オフトピックス    
基本PCで ipconfig を起動すると
Ethernet adapter WMware Network Adapter VMnet8:

  Connection-specific DNS Suffix :
  IP Address.....................: 192.168.60.1
  Subnet Mask....................: 255.255.255.0
  IP Address.....................:fe80::250:56ff:fec0:8%8
  Default Gateway................:

Ethenet adapter VMware Network Adapter VMnet1:

  Connection-specific DNS Suffix
  IP Address.....................: fe80:250:56ff:fec0:1%9
  Default Gateway................:

Tunnel adapter Terodo Tunneling Pseudo-Interface:

  Connection-specific DNS Suffix
  IP Address....................:fe80:ffff:ffff:ffffd%7
  Default Gateway...............:

Ethernet adapter ローカル エリア接続:

  Connection-specific DNS Suffix
  IP Address....................: fe80:216:ecff:fe2e:2bb3%6
  Default Gateway...............:

Tunnel adapter Automatic Tunneling Pseudo-Interface:

  Connection-specific DNS Suffix
  IP Address....................: fe80::5efe:192.168.60.1%2
  Default Gateway...............:


と出ます
IPアドレスが0〜255でないので IPv6?
よくわかんないです・・・orz


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

Name: dic  ..熟練のプログラマー(56,255ポイント)   Date: 2010/03/04(木) 14:22   No:48815     
Title: Re:マルチブート環境を作りたい(オフトピックス    
Windowsコンポーネントの追加と削除で
ネットワークサービスをセットアップし、再起動もしてみたのですが
同じところでエラーがでます


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

Name: softya [URL]  ..ハッカー(127,416ポイント)   Date: 2010/03/04(木) 15:29   No:48817     
Title: Re:マルチブート環境を作りたい(オフトピックス    
調べてみたところ、ブリッジ接続ならVMware Network Adapter VMnet1とVMware Network Adapter VMnet8のデバイスは無効にして良いみたいなので無効にしてもらえますか。

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

Name: dic  ..熟練のプログラマー(56,197ポイント)   Date: 2010/03/04(木) 16:24   No:48819     
Title: Re:マルチブート環境を作りたい(オフトピックス    
無効にしてみて、再起動もしてみましたが、インターネットに接続できませんでした
オフトピックにここまでつきあわせるのも なんなんで
パソコンのサポートにメールで直接聞こうかと思います


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



Name: Ma  ..熟練のプログラマー(57,764ポイント)   Date: 2010/03/04(木) 11:20   No:48799       
Title: やっぱりDLLの使い方が分からないorz    
いつもおせわになってます><
今回DLLを使って録音機能をDXライブラリ(VC++2008 Express Editon)で作ったソフトに加えようと思っています。

で、

http://www.vector.co.jp/soft/winnt/prog/se341363.html

こちらにある、WAVE録音/再生用のDLLを使おうと思っています。
ところが、C#で作られていて、サンプルを見てもC#での使い方しかありませんでした。
(C++から呼び出せますよね?)


C#は少ししか理解していないので、ソースを見てもどう応用すればいいか検討もつきません。

DLLについての簡単な知識は
http://www.ne.jp/asahi/hishidama/home/tech/vcpp/dll.html
こちらのサイトを読んだくらいです。
あとは、他のDLLを使った回数は1,2回しかありません。
しかも、いままでは関数を利用したことしかなく、dllからのクラスを扱ったことがありません。
そのときは、CかC++でのサンプルだったのでわかりやすかったのですが。。。

今回は、libファイルがないことから明示的・動的リンク であることはわかりましたが、
↑のサイトではdllからの関数を利用する方法しかかかれていないので、クラスの場合がよく分かりません。
(さらにいえば、詳しいリファレンスがない(または私が見つけられない)ので、どこをみれば関数名やクラス名がわかるのか、あいまいです。)



私が参考になるものだと思ったのをSampleRecorder というサンプルプログラムのソースコードから転載させていただきます。




====PCMRecorder[メタデータから]====
using System;
using System.Windows.Forms;

namespace LIB
{
    public class PCMRecorder
    {
        public PCMRecorder(Form form, IPCMRecorder ipr);
        public PCMRecorder(Form form, IPCMRecorder2 ipr2);
        public PCMRecorder(Form form, IPCMRecorder2 ipr2, int bufSize, int numberOfBuf);

        public void Close();
        public void Start(int ch, int hz);
        public void Stop();
    }
}



====WavWriter[メタデータから]====

using MMSYSTEM;
using System;
using System.IO;

namespace RIFF
{
    public class WavWriter
    {
        public WavWriter(Stream stream, WAVEFORMATEX format);
        public WavWriter(string path, WAVEFORMATEX format);

        public void Close();
        public void Rewind();
        public void Write(byte[] wave, int size);
        public void Write(short[] wave, int size);
        public void WriteEnd();
    }
}




このdllを使って、WAVE録音する手順を教えてください。

具体的には、
1.特別にプロジェクトファイルを設定する必要があるか。(プロジェクトのプロパティだとか、ツール→オプション内など。)
2.またあるなら、どの項目をどのように変更すればいいのか。
3.C++のプログラム内での利用方法。
(とくにクラス名だとか関数名は、C#プログラムのどこをみればいいのかよくわからない。↑がそれっぽいと思ったんですが、どう呼び出せば良いのか。。。)
(4. サンプルがあると、さらにうれしいです) 編集済み


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


Name: softya [URL]  ..ハッカー(126,967ポイント)   Date: 2010/03/04(木) 11:38   No:48800     
Title: Re:やっぱりDLLの使い方が分からないorz    
マネージドとアンマネージのリンクは結構厄介です。
出来上がったプログラムの配布に、.NET FrameWorkの再配布ランタイムを付けるのも面倒ですけどね。

ここら辺が参考になるかと思います。
http://q.hatena.ne.jp/1090560857
ちなみに、私はやったことがありませんので深く追求されると分かりません。


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

Name: Ma  ..熟練のプログラマー(57,831ポイント)   Date: 2010/03/04(木) 11:55   No:48801     
Title: Re:やっぱりDLLの使い方が分からないorz    
>http://q.hatena.ne.jp/1090560857
正直、私の理解レベルを超えてて、何を言っているのかあまりわからないです・・・。

他の方法を探したほうがいいかなーって思ったんですが、WindowsAPI を使っても難しそうな気配が・・・。


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

Name: Ma  ..熟練のプログラマー(57,912ポイント)   Date: 2010/03/04(木) 12:04   No:48802     
Title: Re:やっぱりDLLの使い方が分からないorz    
http://www.codeproject.com/KB/audio-video/VoiceRecording.aspx
このライブラリを利用するのが、(難易度的に)難しいようなら、ここのサイトの方法を使ってみようともいます。
(まだ未チェック)


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

Name: softya [URL]  ..ハッカー(127,065ポイント)   Date: 2010/03/04(木) 12:12   No:48803     
Title: Re:やっぱりDLLの使い方が分からないorz    
アンマネージド(C++)とマネージド(C#)の中間インターフェイスにマネージド(C++/CLI)を使う方法もありますが、どちらにしても覚えることが多くて面倒です。

WindowsAPIならこちら。
http://wisdom.sakura.ne.jp/system/winapi/media/index.html

http://www.codeproject.com/KB/audio-video/VoiceRecording.aspx
このライブラリなら使うのは簡単そうですね。


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

Name: Ma  ..熟練のプログラマー(58,300ポイント)   Date: 2010/03/04(木) 12:39   No:48806 解決!     
Title: Re:やっぱりDLLの使い方が分からないorz    
(解決押し忘れてた。)

 あ、windowsAPI 、読んでみたら一番簡単でしたw
数行で実現したのでびっくりです。

一応書いておくと
グローバル変数として以下追加

MCI_OPEN_PARMS mop;
MCI_SAVE_PARMS msp;


初期化
mop.dwCallback = NULL;
mop.lpstrDeviceType = (LPCSTR)MCI_DEVTYPE_WAVEFORM_AUDIO;
mop.lpstrElementName = TEXT("");
mciSendCommand(0 , MCI_OPEN , MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID |MCI_OPEN_ELEMENT , (DWORD)&mop);


録音開始
mciSendCommand(mop.wDeviceID , MCI_RECORD , 0 , 0);

録音終了
msp.dwCallback = NULL;
msp.lpfilename = "testYeah.wav";
mciSendCommand(mop.wDeviceID , MCI_STOP , MCI_WAIT , 0);
mciSendCommand(mop.wDeviceID , MCI_SAVE ,MCI_WAIT | MCI_SAVE_FILE , (DWORD)&msp);


以上でできました


ありがとうございます。
例のサイトは、なんだかMFC使っていてエラーがでたのでやめました。
お手伝いありがとうございました。 編集済み


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



Name: 天和  ..上級者(16,793ポイント)   Date: 2010/03/04(木) 01:09   No:48786       
Title: ファイルの属性について    
OSはXP, コンパイラBorland5.5になります。

指定したディレクトリ以下のファイル検索を行いたいのですが、
if (fd.attrib & _A_SUBDIR) ※ fdはファイルハンドルです
というような記述をみかけまして、この記述は指定されたファイルがディレクトリの場合
実行するという意味ということは理解できたのですが、fd.attribについて意味がわからなかったため
質問させていただきました。

fd.attribを記述しないとディレクトリではないファイルも条件に入ってしまいます。
何故なんでしょうか?

attribが属性を表すというところまでは調べられたのですが。。。

よろしくお願いします。



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


Name: たかぎ [URL]  ..ハッカー(167,530ポイント)   Date: 2010/03/04(木) 01:26   No:48790     
Title: Re:ファイルの属性について    
> fdはファイルハンドルです 

この部分が事実誤認のような気がします。
struct finddata_t型とかではないのですか?


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

Name: 天和  ..上級者(16,833ポイント)   Date: 2010/03/04(木) 09:08   No:48794     
Title: Re:ファイルの属性について    
たかぎさん申し訳ありません。

事実誤認です。おっしゃる通りstruct finddata_t型でした。
すみません。


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



Name: ys  ..ぴよぴよ(70ポイント)   Date: 2010/03/04(木) 01:19   No:48787       
Title: 龍神録プログラミングの館第5章について    
はじめまして。昨日よりここのお世話になっております。
タイトルにもあります第5章についてわからない点があります。

#ifdefを使うことによってGLOBAL_INSTANCEが定義されている場合(main.cpp)はGLOBALを空白に、
定義されていない場合(他.cpp)はGLOBALをexternにしてグローバル変数をうまく取り扱うというのは理解できたのですが、
同時に関数の宣言の場合は逆にmain.cppではexternをつけて宣言しないといけないし、
他.cppでは宣言いらないしで、上の#ifdefの文にあわない気がして納得が出来ません。

どういう仕組みになっているのか、もしよろしければご教授お願いいたします。


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


Name: Justy  ..伝説なるハッカー(503,130ポイント)   Date: 2010/03/04(木) 03:00   No:48793     
Title: Re:龍神録プログラミングの館第5章について    
 関数のプロトタイプ宣言で externや staticなどの記憶域クラス指定子がついていない場合、
その宣言には externをついているものとして扱われます。

 つまり、
    extern void boss_shot_main();
    void boss_shot_main();
のどちらで書いても同じ扱いとなります。

 試しに function.hの各プロトタイプ宣言から GLOBALを取り除いてみて下さい。
 問題なくコンパイルはできるはずです。


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



Name: Yuno  ..かけだし(2,041ポイント)   Date: 2010/03/03(水) 18:20   No:48771       
Title: FileRead_openが途中で利かなくなる    
こんにちはYunoです
DXアーカイブを読み込むため、
下記の関数をファイル読み込みで毎回呼んでいるのですが
途中でFileRead系の関数が利かなくなって0ばっかり返してきます

void DxAPath(char *APath){
    static int flag=0;
    static int fhandle,fsize;
    static int *buf;
    SetUseDXArchiveFlag( TRUE ) ;
    SetDXArchiveExtension( "dat" ) ;
    SetDXArchiveKeyString( "****" ) ;//passは保護のため****に置き換えています
    fhandle=FileRead_open(APath);<-問題の場所
    fsize=FileRead_size(APath);
    if(fhandle==0){
        CString stra;
        stra.Format(_T("Read error!\nNow Process = SetDecryptG\n%s"),APath);
        ::MessageBox(NULL,stra,_T("ERROR"),MB_OK);
        DxLib_End();
    }
    buf=(int *)malloc(fsize*sizeof(int));
    FileRead_read(buf,fsize,fhandle);
    FileRead_close(fhandle);//<--close
    SetUseDXArchiveFlag(FALSE);
    SetDXArchiveKeyString() ;
    file_load.buf=buf;
    file_load.fsize=fsize;
    flag=1;
}

いったいどうすれば正常に読み込めるでしょうか?
このコードはなんか変なんでしょうか?
教えてください 編集済み


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


Name: Justy  ..伝説なるハッカー(502,424ポイント)   Date: 2010/03/03(水) 22:16   No:48781     
Title: Re:FileRead_openが途中で利かなくなる    
 デバッグ向けに出力される Log.txtは確認してみましたか?


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

Name: Yuno  ..入門者(3,097ポイント)   Date: 2010/03/04(木) 00:33   No:48785     
Title: Re:FileRead_openが途中で利かなくなる    
Log.txtには特にそれらしきものは見つかりませんでした
いつも通りです

ちなみにこの関数はちょいとした暗号化を解くための読み込み関数で
暗号化の解除自体は下記の関数で行います
だから実際DXアーカイブから暗号化されたファイルを読もうとするとLoadGraphの代わりに
DxAPath("...");
DecryptionReadingG("...");
といった感じで毎回呼び出しています
ほかにもGV,WAV,Oggに対する同様の処理があります

とにかくその関数です
void DxAPath(const char *path){
    static int flag=0;
    static int fhandle,fsize;
    SetUseDXArchiveFlag( TRUE ) ;
    SetDXArchiveExtension( "dat" ) ;
    SetDXArchiveKeyString( "****" ) ;
    fsize=FileRead_size(path);
    file_load.buf=(int *)malloc(fsize*sizeof(int));
    fhandle=FileRead_open(path);
    if(fhandle==0){
        CString stra;
        stra.Format(_T("Read error!\nNow Process = SetDecryptG\n%s"),path);
        ::MessageBox(NULL,stra,_T("ERROR"),MB_OK);
        DxLib_End();
    }
    FileRead_read(file_load.buf,fsize,fhandle);
    FileRead_close(fhandle);//<--close
    SetUseDXArchiveFlag(FALSE);
    SetDXArchiveKeyString() ;
    file_load.fsize=fsize;
    flag=1;
}

int DecryptionReadingG(char *path){
    static int num;
    FILE *fp ;
    int set[]={137,80,78,71};
    int ret;
    if(IsFolderExist(_T("C:\\Program Files\\thM01\\temps"))==false){
        bool ok;
        ok=CreateFolderBySHCreateDirectoryEx(_T("C:\\Program Files\\thM01\\temps"));
        if(ok==false){
            CAtlString str;
            str.Format(_T("初期化に失敗しました\nof %dst place"),num);
            ::MessageBox(NULL,str,_T("初期化エラー"),MB_OK);
        }
    }
    string fn;
    fn=SplitFullPath(path);
    string s;
    char c[DECRY_MAX];
    s="C:\\Program Files\\thM01\\temps\\"+fn+"\0";
    strcpy(c,s.c_str());
    fp = fopen(c,"wb");//##open
    //復号化開始
    int open_s=Decode(file_load.buf,NULL);
    char *dec;
    dec=(char *)malloc((open_s+1)*sizeof(char));
    Decode(file_load.buf,dec);
    free(file_load.buf);
    //free(buf);
    int r=fwrite( dec , sizeof( char ) ,open_s, fp ) ;
    free(dec);
    char gph[DECRY_MAX];
    strcpy(gph,s.c_str());
    fclose( fp ) ;
    fp = fopen( gph,"rb+"); 
    fwrite( " PNG" , sizeof( char ) , 4 , fp );
    const int a=137;
    rewind(fp); 
    fclose(fp);
    fp = fopen( gph,"rb+");
    fwrite( &a , sizeof( char ) , 1 , fp );
    fclose( fp ) ;//<-close
line:
    ret=LoadGraph(gph);
    printfDx("%d\n",ret);
    remove(gph);
    num++;
    if(ret==-1)
    {
        static int k;
        if(k<50)
            goto line;
    }
    return ret;
}

  編集済み


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

Name: Yuno  ..入門者(3,256ポイント)   Date: 2010/03/04(木) 01:26   No:48788     
Title: Re:FileRead_openが途中で利かなくなる    
呼び出している構造はこんな感じです
main.cpp
├Load.cpp
│ここで大抵の呼び出しが終わる
├ini.cpp
│ここで3D背景の初期化やらなんやら現在ここの3D背景読み込みでその状態になる
 :
 :
├title.cpp&music.cpp
 :音楽の読み込み...まだここにたどり着けない
 :


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

Name: Justy  ..伝説なるハッカー(503,021ポイント)   Date: 2010/03/04(木) 02:37   No:48792     
Title: Re:FileRead_openが途中で利かなくなる    
 ログにないとなると、ちょっと厄介ですね。
 
 記載されているコード的には
・ FileRead_size()の結果が 0だった場合、malloc(0)となり処理系定義の動作となる
・ FileRead_open()の結果が 0だった場合、メモリがリークする
・ エラー発生時の処理が不適切
といった問題やら意図不明な処理が幾つかありますが、PCでしょうし、ん百MBとかの規模で
派手にリークしない限り今回の原因とは関係なさそうです。


 となるとここに記載されている以外の部分に問題があるのかもしれません。
 考えられる理由としては

・ 同時に開ける最大ファイル数を越えた(たしか 512ファイル)
・ ファイル情報を格納するメモリの確保に失敗した
・ そもそもファイルが読み取れない(存在しない、権限がない等)

くらいなのですが、再現可能なサンプルでもないとこちらではわかりません。


 そこで提案ですが、再現可能なサンプルを添付していただくか、或いは
DXライブラリはオープンソースなので、libを直接リンクするのではなく、
ライブラリソースからコンパイルしてこのプロジェクトとリンクするよう設定し、
FileRead_open()のどこで、0を戻しているのかステップ実行して調べてみてはどうでしょうか?


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



Name: no  ..入門者(4,584ポイント)   Date: 2010/02/28(日) 23:38   No:48696       
Title: 弾幕について    
こんにちは。
現在弾幕をいくつか作成しておりまして、おおまかに理解することが出来ました。
そこでひとつ疑問に思ったんですが、各段幕を組合わせるにはどうすればよいのでしょう。

たとえば、
void EnemyShotPattern3(){
     for(int j=0;j<10;j++){//計10発撃つ
         if(EnemyShot.counter==20*j){
            EnemyShot.EnemyShots[j].flag=1;
            EnemyShot.EnemyShots[j].x=EnemyShot.mem_ex;//敵の現在のx座標を記憶
            EnemyShot.EnemyShots[j].y=EnemyShot.mem_ey;//敵の現在のy座標を記憶
            EnemyShot.Angle[j]=atan2(EnemyShot.mem_py -EnemyShot.mem_ey ,EnemyShot.mem_px - EnemyShot.mem_ex);//角度を習得
         }
     }
     EnemyShot.EnemyShots[j].x += 1*cos(EnemyShot.Angle[j]);//cosがx座標の移動数値
     EnemyShot.EnemyShots[j].y += 1*sin(EnemyShot.Angle[j]);//sinがy座標の移動数値
}


上記のような弾幕は敵座標と自座標の座標位置を求め、atan2関数で角度を導出し、
sin,cosに当てはめることで弾のx,yの移動量を加えています。

この弾幕が終了した後、まったく同じ弾幕をうたせようとしました。
正直同じ関数を使い廻せばいいだけの話ですが、今後の発展のため、EnemyShotPattern3関数のみで
実装したいです。

自分なりに考えてみたのは以下のコードです。
しかしながら、後者がおそらく反応していません。
問題点、もしくは手法など教授お願いします。


void EnemyShotPattern3(){
     for(int j=0;j<10;j++){//計10発撃つ
         if(EnemyShot.counter==20*j){
            EnemyShot.EnemyShots[j].flag=1;
            EnemyShot.EnemyShots[j].x=EnemyShot.mem_ex;//敵の現在のx座標を記憶
            EnemyShot.EnemyShots[j].y=EnemyShot.mem_ey;//敵の現在のy座標を記憶
            EnemyShot.Angle[j]=atan2(EnemyShot.mem_py - EnemyShot.mem_ey ,EnemyShot.mem_px - EnemyShot.mem_ex);//角度を習得
         }
     }
     for(j=10;j<20;j++){
         if(EnemyShot.counter==20*j){
             EnemyShot.EnemyShots[j].flag=1;
             EnemyShot.EnemyShots[j].x=EnemyShot.mem_ex;//敵の現在のx座標を記憶
             EnemyShot.EnemyShots[j].y=EnemyShot.mem_ey;//敵の現在のy座標を記憶
             EnemyShot.Angle[j]=atan2(EnemyShot.mem_py -EnemyShot.mem_ey ,EnemyShot.mem_px - EnemyShot.mem_ex);//角度を習得
         }
     }
         EnemyShot.EnemyShots[j].x += 1*cos(EnemyShot.Angle[j]);//x座標の移動量
         EnemyShot.EnemyShots[j].y += 1*sin(EnemyShot.Angle[j]);//y座標の移動量
}
 編集済み


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


Name: jay  ..上級者(16,866ポイント)   Date: 2010/03/01(月) 15:02   No:48705     
Title: Re:弾幕について    
これは、おそらくとしか言えませんが・・・

if(EnemyShot.counter==20*j){
と言うことは20カウント起きに弾を出す、と言うことですね。

しかし前半も後半も
if(EnemyShot.counter==20*j){
になっているので、全く同時に弾を出しているのではないかと思います。

つまり、後半の”EnemyShot.counter==20*j”の値を修正すればいいと思います。


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

Name: Tatu  ..プログラマー(29,340ポイント)   Date: 2010/03/01(月) 16:15   No:48710     
Title: Re:弾幕について    
シューティングゲームの館のコードですね。

コンパイルエラーは出なかったのですか?

あなたの書き方では「先に発射された10発は問題なく動いている」と
いうように読めますがどうなのですか?

また、プログラムの作成に何を使用していますか?

回答の前に書いておきます。

シューティングゲームの館のトップに
「効率的、汎用的、拡張的であるよりも
わかりやすいことを重視している」と書いてあるが
「本格的なゲーム制作には向きません」とも書いてあり、
それ以降の弾幕関数に関しては龍神録プログラミングの館よりも
わかりにくく、面倒なものとなっていくので
だいたいわかったのならば、龍神録プログラミングの館を
見ることをお勧めします。





では、投稿されたコードがうまく動かない理由を書きます。

一回目のfor文ではjが宣言されていますが、
このjはこのfor文の中だけでしか使えません。

しかも弾の座標を動かす処理が
for文の中に入っておらず、
撃った後弾が動かないようになっています。

よって、動くようにするには
二回目のfor文でも宣言を行うようにするか
for文の前だけでjを宣言するかして
それぞれのfor文に弾を動かす処理を入れておくか

あるいは一つのfor文にまとめるかしてください。


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

Name: jay  ..上級者(16,945ポイント)   Date: 2010/03/01(月) 17:03   No:48711     
Title: Re:弾幕について    
あっ、ホントですね。
時間がなかったからよくコード読んで無かったです(←アドバイサー失格)
すいません。

手っ取り早いのは
for(int j=0;j<20;j++)

こうすることですね。
弾を動かす処理も必要のようですが。


龍神録の方が色々と充実していてコードも読みやすいので、僕もそちらをオススメしますよ。


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

Name: no  ..入門者(4,728ポイント)   Date: 2010/03/04(木) 00:18   No:48784     
Title: Re:弾幕について    
お返事ありがとうございました。
両名の返信の内容を吟味したところ、理由がわかりました。

もう半年以上前の話ではありますが、龍神録のコードが難しかったためシューティングゲームの館をメインで読むことにしたクチです。

しかしながら最近眼で追えるようになってきたので龍神のほうに移るという選択肢もありですね。



まあどちらにせよ、不明な部分が解明したことはありがたいことです。
ありがとうございました。


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



Name: 少年X  ..入門者(2,982ポイント)   Date: 2010/03/03(水) 19:48   No:48776       
Title: STGで死ぬときの処理について    
東方みたいなシューティングゲームを目指しています。今自機が死んだときのエフェクトなどを表現しようとしています。東方では赤い輪の模様が広がっていき、その輪に触れた弾が消滅します。
僕は倍率を変えるだけだと思ったら、輪の輪郭が太くなったり、弾とのあたり判定もよくわからなくなってしまいました。
これをどのように表現すればいいのでしょうか? 教えてください。



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


Name: Justy  ..伝説なるハッカー(502,651ポイント)   Date: 2010/03/04(木) 00:15   No:48783     
Title: Re:STGで死ぬときの処理について    

>あたり判定

 赤い輪とやらの外周と内周の差が輪郭の太さになるわけですが、
その外周・内周のプレイヤーからの距離(つまり半径)とプレイヤーと各弾との距離を
比較して、弾が輪の外周と内周の間にあればヒットです。


>倍率を変えるだけだと思ったら、輪の輪郭が太くなったり

 その現物を見たこと無いんでなんとも言えませんが、多分(トライアングルストリップのような)
ポリゴンで太さを持った円を(各頂点の位置を動かしながら)表現しているのではないでしょうか。


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



Name: たいちう  ..熟練のプログラマー(58,790ポイント)   Date: 2010/03/03(水) 10:18   No:48756       
Title: 【雑談】変数名のご相談    
雑談半分なのですが、変数名の相談をさせてください。
質問の目的は、私のコーディングスタイルの洗練です。
私は次のような書き方をしばしばします。

int getValue() {
    int ret = 0; // 初期値・デフォルト値
    
    ret = ...; // retを計算
    
    return ret;
}

void sub() {
    ...
    
    int ret = getValue();
    
    if (ret == ...) {
        ...
    }
}


ループ変数にi, jを使うように、戻り値にはretを使うことが多いのです。
上の2つの関数内で、変数retはどちらも同じ戻り値を扱いますが、
一方は自分が戻す戻り値を、他方は戻ってきた戻り値を扱っています。

ここでsubを変更します。getValue()の戻り値も参照しながら自分自身も戻り値を
返すように変更する場合、上述の2つの意味の戻り値を扱う必要があります。

そこで質問なのですが、両者を区別できる適当な名前はないでしょうか?
基本的に変数名等は英語で付けていますので、できれば英語でお願いします。

<回答例>
自分が戻す値:result
戻ってきた値:ret

回答例のretはreturnの略で、resultと本質的には変わらないのですが、
このような自分ルールを付けることで、ルールを知る自分では区別がつき、
ルールを知らない人にも違和感がないということで、
今私が思いつく中では最良です。

斬新なアイディアをお待ちします。
もしあれば熱き思いも書いちゃってください。
月並みな意見もOKです。


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


Name: たかぎ [URL]  ..ハッカー(167,489ポイント)   Date: 2010/03/03(水) 10:50   No:48757     
Title: Re:【雑談】変数名のご相談    
私が普段やっている方法を書きます。

関数が自分で返す値にはresultを使っています。
これは、返却値でも引数経由でも同じですが、両方ある場合は臨機応変に対応しています。
返ってきた値にretやresultを使うことは、それ自体をさらに自分の返却値として使うのでない限りありません。
なぜなら、自分が返す値がどういったものかは、その関数内部の共通認識としてあるわけですが、呼び出した関数が返す値がどういったものなのかはもっと明示的な名前を付けてあげないとわからないからです。


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

Name: やんち  ..ぴよぴよ(314ポイント)   Date: 2010/03/03(水) 11:49   No:48758     
Title: Re:【雑談】変数名のご相談    
/*
 * output 出力
 * input  入力
 * return 処理結果(0:成功, 0以外:失敗)
 */
int calc(char *output, const char *input)
{
    int iResult = 0; // 結果
    
    // inputを使って、処理を実行、outputへ出力
    // 途中処理に失敗したら、iResult にエラーコードを設定。
    
    return iResult;
}

void sub()
{
    char input[] = "input data";
    char output[100];
    int iResult = 0;
    
    iResult = calc(output, input);
    if (iResult)
    {
        // エラー処理
    }
    
}


単に処理結果コードを戻すだけの場合は、iResult とか result とする
場合が私は多いです。

関数名が getValue とか結果コード以外の意味を持つ値を戻す場合には、
value 等、の名前にしていますよ。


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

Name: tk  ..かけだし(2,030ポイント)   Date: 2010/03/03(水) 12:30   No:48760     
Title: Re:【雑談】変数名のご相談    
自分のやり方ですが、

・関数内での戻値 「ret」 で統一
・関数からの戻値 「関数名_ret」で統一

たいちうさんの例でいうなら

int getValue() {
    int ret = 0; // 初期値・デフォルト値
    
    ret = ...; // retを計算
    
    return ret;
}

void sub() {
    ...
    
    int getval_ret = getValue();   // ←getValueの戻値なのでgetval_retで受け取る
    
    if (getval_ret == ...) {
        ...
    }
}


といった感じです。

スコープと似てるかな?
関数(オブジェクト)内からなら、関数名_(スコープ)を付けなくてもいい。
ただし、別の関数(オブジェクト)にアクセス(判別)するには、関数名_(スコープ)をつけましょう。
要は関数名(オブジェクト名) + _(::) + ret(メンバ)です。


追記
質問とは関係ないですけど、
書き込みに時間かけるとポイント落とすんですね。
昼ごはん食べながら40~50分かけて書いてたらポイントが^^; 編集済み


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

Name: たいちう  ..熟練のプログラマー(58,846ポイント)   Date: 2010/03/03(水) 18:50   No:48774 解決!     
Title: Re:【雑談】変数名のご相談    
確かに関数の中で"戻り値"が何を指すかといえば、
自分自身の戻り値ですね。自分が受け取る戻り値は、
数あるローカル変数の1つでしかない、と。

すっきりしました。ご回答ありがとうございました。

tkさん
> 書き込みに時間かけるとポイント落とすんですね。
> 昼ごはん食べながら40~50分かけて書いてたらポイントが^^;

たまたまではないでしょうか。


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



Name: 星史朗  ..ぴよぴよ(106ポイント)   Date: 2010/03/02(火) 14:20   No:48732       
Title: 敵の出現    
龍神録プログラミングの館のソースを元に弄らせていただいているのですがcsvで敵を出現させる時507行(敵の数505体)以上になると画像が読めなくなったり異常に重くなったりします。
どうしてなのでしょうか?


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


Name: ひよこ  ..比類無きプログラマー(80,629ポイント)   Date: 2010/03/02(火) 14:38   No:48733     
Title: Re:敵の出現    
敵の出現情報は
//敵の出現情報最大数
#define ENEMY_ORDER_MAX 500
で500までなのでメモリ破壊が起きているのかもしれません。


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

Name: 星史朗  ..ぴよぴよ(159ポイント)   Date: 2010/03/02(火) 14:58   No:48734     
Title: Re:敵の出現    
敵の出現情報最大数の数字を増やしてみても変わらないのですが他に何か原因に成っているようなものはないでしょうか?

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

Name: 星史朗  ..ぴよぴよ(168ポイント)   Date: 2010/03/03(水) 12:29   No:48759 解決!     
Title: Re:敵の出現    
できました。有難う御座いました。

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



Name: koki  ..ぴよぴよ(333ポイント)   Date: 2010/02/28(日) 23:33   No:48693       
Title: タスクシステムの実装について    
龍神録プログラミングの館の解説を参考に、STLのdequeとstack、
そしてplacement newを使ったタスクシステムを実装した形にアレンジしたいと思っています。

具体的には、弾クラスと同じサイズのchar配列を使う弾の数だけnewし、その先頭アドレスをstackに順次格納。
必要に応じて格納したアドレスをstackからdequeに持って行っていき、そのアドレスを使って
placement newして弾オブジェクトを生成、必要なくなればオブジェクトを破棄してdequeからstackに戻す、
という手順を踏んでいます。

自機とボスを作り、弾を打ち出すところまでは出来たのですが、
敵の打ち出す弾の数があまり多くない状態でも処理落ちが酷くなってしまいます。

以下がプロジェクトファイルです。
http://www1.axfc.net/uploader/H/so/100995&key=koki

何が原因なのか分からず困っています。
どなたか教えていただけないでしょうか。
宜しくお願いします。 編集済み


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


Name: Justy  ..伝説なるハッカー(501,992ポイント)   Date: 2010/03/01(月) 02:26   No:48701     
Title: Re:タスクシステムの実装について    
 実際に計測したわけではないので確かではないですが、
bmanage変数で operator[]を使って多数のアクセスをしていますよね?

 環境不明なので推測ですが、これは環境によってはデバッグビルドだと
ちょっと遅い処理になるかもしれません。

 なので、これを止めてみる、或いは最小限にしてみてはどうでしょうか?

 forなどによるループで使用するときには

    for(int i = 0; i < (int)bmanage.size(); ++i)
    {
        Bullet *bullet = bmanage[i];
        ...
    }
のように一旦 Bulletクラスのポインタで受け、以後はそのポインタを使ってアクセスをする、とか。

 あぁ、operator[]ではなくイテレータを使うとやはり環境によっては更に少し速くなるかもしれません。


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

Name: dic  ..熟練のプログラマー(54,365ポイント)   Date: 2010/03/01(月) 17:38   No:48712     
Title: Re:タスクシステムの実装について    
イテレータを使って実装してみました
もとのスピードが遅いので、早くなった感覚はあまりしませんが
改善はされてます

//ここで弾の移動処理を行う。
    std::deque<Bullet*>::iterator p;

    p = bmanage.begin();
    while( p != bmanage.end() )
    {
        (*p)->x += cos((*p)->angle*(*p)->spd);
        (*p)->y += sin((*p)->angle*(*p)->spd);
        (*p)->cnt++;
        if( (*p)->cnt > (*p)->till ){
            if( (*p)->x < -50 || (*p)->x > FIELD_MAX_X+50 ||
                (*p)->y < -50 || (*p)->y > FIELD_MAX_Y+50 ){
                    (*p)->flag = 0;
            }
        }
        p++;
    }
    /*
    for(int i = 0; i < (int)bmanage.size(); ++i) {
        if(bmanage[i]->flag > 0){    //その弾が登録されていたら
        bmanage[i]->x += cos(bmanage[i]->angle)*bmanage[i]->spd;
        bmanage[i]->y += sin(bmanage[i]->angle)*bmanage[i]->spd;
        bmanage[i]->cnt++;
            if(bmanage[i]->cnt>bmanage[i]->till){
                if(bmanage[i]->x<-50 || bmanage[i]->x>FIELD_MAX_X+50 ||
                        bmanage[i]->y<-50 || bmanage[i]->y>FIELD_MAX_Y+50){//画面から外れたら
                                bmanage[i]->flag=0;//消す
                }
            }
        }
    }
    */

//弾のflagが0なら登録を解除する
    p = bmanage.begin();
    while( p != bmanage.end() )
    {
        if( (*p)->flag == 0 )
        {
            (*p)->~Bullet();
            p = bmanage.erase(p);
        }
        else
            p++;
    }
    /*
    for(int j = 0; j < (int)bmanage.size(); ++j) {
        if((bmanage[j]->flag) == 0) {
            bmanage[j]->~Bullet();
            char* memory = (char*)bmanage[j];
            //delete bmanage[j];
            bmanage.erase(bmanage.begin() + j);
            bmem.push(memory);
            memory = 0;
            --j;
        }
    }
    */


//ボスの弾幕描画
void Boss::DrawBossBullet(){
    SetDrawMode( DX_DRAWMODE_BILINEAR ) ;//線形補完描画
    std::deque<Bullet*>::iterator p;
    p = bmanage.begin();
    while( p != bmanage.end() )
    {
        DrawRotaGraphF(
            (*p)->x+FIELD_X, (*p)->y+FIELD_Y,
            1.0, (*p)->angle+PI/2,
            img_bullet[(*p)->knd][(*p)->col], TRUE );

        if( (*p)->eff == 1 )
            SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0 );
        p++;
    }
    /*
    for(int l = 0; l < (int)bmanage.size(); ++l) {
        DrawRotaGraphF(
        bmanage[l]->x + FIELD_X, bmanage[l]->y + FIELD_Y,
        1.0, bmanage[l]->angle + PI/2,
        img_bullet[bmanage[l]->knd][bmanage[l]->col],TRUE);

    if(bmanage[l]->eff==1)
        SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0) ;
    }
    */
    SetDrawMode(DX_DRAWMODE_NEAREST);//描画形式を戻す
}



これで結構速くなったのですが、まだまだ改善するところはあるようです
boss->Move( stage_count, player );
のところです


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

Name: dic  ..熟練のプログラマー(54,285ポイント)   Date: 2010/03/01(月) 18:05   No:48713     
Title: Re:タスクシステムの実装について    
>これで結構速くなったのですが、まだまだ改善するところはあるようです 
>boss->Move( stage_count, player ); 
>のところです
おもいっきり同じところ言ってますねw
これ以上はアルゴリズムを考えるしか私には思いつきません
deque(STL)使わないとか
私もSTL使ってるんですが、結構重いですね


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

Name: Justy  ..伝説なるハッカー(502,039ポイント)   Date: 2010/03/01(月) 18:10   No:48714     
Title: Re:タスクシステムの実装について    
>イテレータを使って実装してみました 
 イテレータから Bullet *に取り出してからアクセスすると
もう少し早くなるかもしれません。

 とはいえ、Releaseで処理落ちなければ気にすることはないと思います。


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

Name: dic  ..熟練のプログラマー(54,365ポイント)   Date: 2010/03/01(月) 19:05   No:48716     
Title: Re:タスクシステムの実装について    
たしかにReleaseでは処理落ちしないですね
私の実装したソースでは30秒くらいでバグが起きます

ってVCメモリ食いすぎ・・・
遅いのは私の環境のメモリ不足の可能性もあるかも


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

Name: koki  ..ぴよぴよ(510ポイント)   Date: 2010/03/01(月) 20:22   No:48717 解決!     
Title: Re:タスクシステムの実装について    
質問の際に環境を書いていなかったですね。申し訳ないです。
私はVisualC++2008を使っています。

operator[]を使って多数のアクセスをしていたことが原因だったのですね。
イテレータに関する理解が今一つ浅く、使用するのに不安があった事と、forループを回す際に
見た目に分かりやすいという理由から使っていたものだったのですが、それが仇になってしまっていたとは…。
とても勉強になりました。ご回答ありがとうございました。


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

Name: Justy  ..伝説なるハッカー(502,406ポイント)   Date: 2010/03/01(月) 23:53   No:48720     
Title: Re:タスクシステムの実装について    
>dicさん
> たしかにReleaseでは処理落ちしないですね

 デバッグビルドで処理落ちするのは、Windowsに限らずよくある話なんですよね。
 デバッグビルドなのに自分の担当分のところだけ最適化を切ってそれ以外は最適化を
かけておくとか。


>kokiさん
> operator[]を使って多数のアクセスをしていたことが原因だったのですね

 これは環境・状況次第なところもありますが、普通の配列でも同じだったりします。
 bmanageが普通の Bullet*の配列だったとしても毎回 bmanage[i]->xとアクセスするより、
一旦 bmanage[i]をポインタで受けて そのポインタ経由で pBman->xとした方が
(ほんの僅かかもしれませんが)速いことが多いです。



> 私はVisualC++2008を使っています

 なら

    for each(Bullet *b in bmanage)
    {
        b->x += cos(b->angle) * b->spd;
        ...
    }

なんて書き方もできますね。
http://msdn.microsoft.com/ja-jp/library/ms177203.aspx


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

Name: koki  ..ぴよぴよ(552ポイント)   Date: 2010/03/02(火) 19:46   No:48749     
Title: Re:タスクシステムの実装について    
環境によって別の書き方が出来る場合もあるんですね。
参考になります。ありがとうございます。


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



Name: Yuno  ..かけだし(1,714ポイント)   Date: 2010/03/02(火) 17:09   No:48744       
Title: 無題    
こんにちはYunoです
今回Dxアーカイブを設定したものの
関数に渡した引数が変更されてしまって困っています
どうにかならないでしょうか?

問題のコード

void DxAPath(char *APath){ここの関数で読み込んだはいいけど読み込み元のpathに影響が出る
    int fhandle,fsize;
    int *buf;
    SetUseDXArchiveFlag( TRUE ) ;
    SetDXArchiveExtension( "dat" ) ;
    SetDXArchiveKeyString( "Iris_Yuno_Product" ) ;
    fhandle=FileRead_open(APath);
    fsize=FileRead_size(APath);
    buf=(int *)malloc(fsize*sizeof(int));
    if(fhandle==0){
        ::MessageBox(NULL,_T("Read error!\nNow Process = SetDecryptG"),_T("ERROR"),MB_OK);
        DxLib_End();
    }
    FileRead_read(buf,fsize,fhandle);
    FileRead_close(fhandle);//<--close
    SetUseDXArchiveFlag(FALSE);
    SetDXArchiveKeyString() ;
    file_load.buf=buf;
    file_load.fsize=fsize;
}

//#-----G処理---------------------------------------------------#

int DecryptionReadingG(char *path){
    DxAPath(path);
         :
         :
    _splitpath(path,NULL,NULL,pszFile,pszExtent);<-文字列がバグって正しく分割されない


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


Name: Yuno  ..かけだし(1,747ポイント)   Date: 2010/03/02(火) 17:11   No:48745     
Title: Re:無題    
すみません
題を忘れていました
題は
Dxアーカイブで読み込むと引数に影響が出る
です


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



Name: らぁ  ..ぴよぴよ(16ポイント)   Date: 2010/03/02(火) 08:27   No:48722       
Title: こんにちわ    
DXライブラリを用いて北海道の某工業大学のサークルでアクションゲーム作りをしているものです。
最近はIRCなどで色々な人と交流して知識を蓄えています。
音ゲーやシューティングなど多彩なゲームを作られているキューさんにぜひコンタクトを取りたくてこちらに書かせて戴きました。
良い返事をお待ちしています。



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


Name: 山崎  ..プログラマー(37,202ポイント)   Date: 2010/03/02(火) 11:42   No:48724     
Title: Re:こんにちわ    
どうもこんにちは、私は山崎と申します。

管理人さん以外の我々は眼中にないのでしょうか?

…なんて質問はちょっと意地悪でしょうか ^^;


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

Name: バグ  ..ハッカー(191,511ポイント)   Date: 2010/03/02(火) 12:25   No:48725     
Title: Re:こんにちわ    
メールでは駄目なんだろうか…(^_^;)

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

Name: 通りすがり  ..上級者(20,786ポイント)   Date: 2010/03/02(火) 12:40   No:48726     
Title: Re:こんにちわ    
良い返事ってどんな返事なんだろう

Name: Dixq (管理人)  ..ウィザード(1,157,981ポイント)   Date: 2010/03/02(火) 13:10   No:48727     
Title: Re:こんにちわ    
らぁさん、こんにちは^^。管理人です。

北海道ですか、私もついこの前から北海道に住んでいます。
寒いですね〜、先日車に乗った時に車内温度がマイナス12度だったのにはビックリしました^_^;


大学のサークルでゲームを作っていらっしゃるのですね。
良いゲームが完成出来るといいですね。
社会人になると時間がなくなるので学生のうちに存分にサークルを始め学生生活を満喫して下さい^^


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

Name: バグ  ..ハッカー(191,528ポイント)   Date: 2010/03/02(火) 13:29   No:48728     
Title: Re:こんにちわ    
>>管理人さん
あら?北海道にいるのって、一応秘密じゃなかったっけ?(笑)


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

Name: たかぎ [URL]  ..ハッカー(167,018ポイント)   Date: 2010/03/02(火) 13:32   No:48729     
Title: Re:こんにちわ    
> あら?北海道にいるのって、一応秘密じゃなかったっけ?(笑)

ブログを見れば誰でもわかりますよ。


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

Name: Dixq (管理人)  ..ウィザード(1,158,114ポイント)   Date: 2010/03/02(火) 13:53   No:48731     
Title: Re:こんにちわ    
一応ここでは社名出してないのでいいかと^_^;

まぁ会社からは一応秘密だと言われましたけど、スキーに行ったとかツーリングに行ったとか、いろいろ書いてるうちに住んでるとこ位わかってしまうしそこまで縛られるのもなんか違うなぁと…。

何万人も社員がいるうちの一人が北海道にいる事がわかったところで…ってのは私が勝手に判断することじゃないですね

とりあえず、社名出してないのでいいって事にしといて下さい^_^;


#
しかし、良い返事というのはあれでよかったのだろうか^_^;


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

Name: たかぎ [URL]  ..ハッカー(167,026ポイント)   Date: 2010/03/02(火) 15:23   No:48735     
Title: Re:こんにちわ    
まあ、ネット上の公開情報だけで、母校は確実に、勤務先もほぼ正確にわかってしまうんですが...
母校については、あれだけ堂々と大学のサイトに掲載されていれば、その気になればすぐわかりますね。
# こういう情報は流すとまずいですね。


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



Name: kameo  ..入門者(2,939ポイント)   Date: 2010/03/01(月) 00:47   No:48699       
Title: 壁との当たり判定    
こんにちは kameoです。
今度はキャラクターの当たり判定についての質問があります。

次のようなプログラムを作成したいと思います。
@プレイヤーが移動量が4*fで動いている。
A通常ならば、f=1
Bもし、壁に衝突するならば、
Cf=0にする。

実際のサンプルコードはこのようになりました。(壁衝突判定はhttp://dixq.net/g/26.htmlのを使わせてもらいました)

#include "DxLib.h" 

typedef struct{ //プレイヤー 
int x,y,img; 
}ch_t; 
int image[9];//画像イメージ 
char Key[256]; 
ch_t ch;

int hantei[15][20] = {
        { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
        { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
        { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
        { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
        { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
        { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
        { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
        { 1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1 },
        { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
        { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
        { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
        { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
        { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
        { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
        { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
};

int can_or_cannot(int x,int y,int muki){//進めるかを判定する
        if(muki==0)//上向きなら
                if(hantei[y/32-1][x/32]==1)//進めるか判定
                        return 1;//エラー
        if(muki==3)//左向きなら
                if(hantei[y/32][x/32-1]==1)
                        return 1;
        if(muki==1)//下向きなら
                if(hantei[y/32+1][x/32]==1)
                        return 1;
        if(muki==4)//右向きなら
                if(hantei[y/32][x/32+1]==1)
                        return 1;
        return 0;//正常
}
 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ 


if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理 
//プレイヤー座標及び向き 
ch.x =32; 
ch.y =32; 
int muki=0;
int i,j;

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

while(1){ 
ClearDrawScreen(); 
GetHitKeyStateAll(Key); 
if(ProcessMessage()==-1)break; 

for(i=0;i<15;i++)//障害物描写
                        for(j=0;j<20;j++)
                                if(hantei[i][j]==1)
                                        DrawBox(j*32,i*32,(j+1)*32,(i+1)*32,GetColor(255,255,255),TRUE);

if (can_or_cannot(ch.x,ch.y,muki)==1) f=0; //上記BC参考
else f=1; 


//移動 
if( Key[ KEY_INPUT_RIGHT ] == 1 ) { 
ch.x+=4*f ; 
muki=4; 

if( Key[ KEY_INPUT_LEFT ] == 1 ) { 
ch.x-=4*f ; 
muki=3; 

if( Key[ KEY_INPUT_UP ] == 1 ) { 
ch.y-=4*f ; 
muki=0; 

if( Key[ KEY_INPUT_DOWN ] == 1 ) { 
ch.y+=4*f ; 
muki=1; 


//プレイヤー描写 
ch.img=image[muki]; 

DrawGraph( ch.x , ch.y, ch.img , TRUE ) ; 


if (Key[KEY_INPUT_ESCAPE]==1) break; 
ScreenFlip();//裏画面を表画面に反映 


DxLib_End(); 
return 0; 


このプログラムを実行したとき、壁によってはプレイヤーがすり抜けてしまったり、壁にぶつかっていないにも
関わらず、動作が途中で止まってしまったりしています。
どうしてこのような現象が起こるのでしょうか?
アドバイスお願いします。


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


Name: 白い時空  ..ぴよぴよ(13ポイント)   Date: 2010/03/02(火) 10:41   No:48723     
Title: Re:壁との当たり判定    
はじめまして、白い時空といいます。
卒業して暇になったので質問に答えたいと思います。

111111
000人00

このとき左向きとし、上を押すと、向き(mukiの値)はまだ左なので
can_or_cannot()で0が返ってしまいf=1で上に移動してしまいます。

このとき上向きとし、左を押すと、向きはまだ上なので
can_or_cannot()で1が返ってしまいf=0で移動できません。

mukiはcan_or_cannot()の前で変更するべきです。


あと、移動のif文ですがelse if文にしないと斜め移動します。
斜め移動がしたいなら、上下と左右の移動判定を別々にするべきです。


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



Name:  ..ぴよぴよ(498ポイント)   Date: 2010/02/24(水) 15:56   No:48532       
Title: マップエディタ    
RPG○クールのような、
マップエディタを
VC++2008、windowsXP
で、作りたいと考えています。

画像の表示方法はわかっているのですが、
クリックしたところに応じて
画像を上書きする?
みたいなのは、できますか?

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


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


Name: バグ  ..ハッカー(190,162ポイント)   Date: 2010/02/24(水) 16:09   No:48533     
Title: Re:マップエディタ    
画像の表示方法は分かっているんですよね?
それならば、画像の表示場所をマウスカーソルの位置へ変更してやれば良いですよ。

マウスに関する事は下記URL参照で…

http://www.geocities.jp/ky_webid/win32c/007.html


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

Name:  ..ぴよぴよ(519ポイント)   Date: 2010/02/24(水) 16:34   No:48534     
Title: Re:マップエディタ    
わかりました。
早速やってみます


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

Name:  ..かけだし(1,171ポイント)   Date: 2010/02/25(木) 23:02   No:48588     
Title: Re:マップエディタ    
いきなり画像を表示しようとすると
なかなかうまくいきそうにないと思ったので、
とりあえず、ドット(点)を
クリックした位置に表示してみようとしました。
とりあえずこんな感じで作ってみたのですが・・・・・・
#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
         LPSTR lpCmdLine, int nCmdShow )
{
    int MouseX , MouseY ;
    int Cr ;
    ChangeWindowMode( TRUE ) ;
    if( DxLib_Init() == -1 )
    {
         return -1;
    }

    SetMouseDispFlag( TRUE ) ;

    Cr = GetColor( 255 , 255 , 255 ) ;

    while( CheckHitKeyAll() == 0 )
    {
        GetMousePoint( &MouseX , &MouseY ) ;

        DrawPixel( MouseX , MouseY , Cr ) ;

        if( ProcessMessage() == -1 )
        {
            break ;    
        }

    }

    DxLib_End() ;

    return 0 ;
}

これでは、
『クリックした場所』
ではなく、
『マウスカーソルがある位置』
にドット(点)が表示されるようになってしまいます。

どうすればいいですか?
よろしくお願いします。


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

Name: kazuoni [URL]  ..ハッカー(135,853ポイント)   Date: 2010/02/25(木) 23:17   No:48591     
Title: Re:マップエディタ    
if(左クリックがあったら)
  DrawPixel();

とすればよいです。


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

Name:  ..かけだし(1,213ポイント)   Date: 2010/02/25(木) 23:20   No:48592     
Title: Re:マップエディタ    
すいません、
どこに入れればいいのでしょうか?
詳しく教えていただけませんか?
似たようなことは何度かやってみたのですが・・・・・・
 編集済み


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

Name: kazuoni [URL]  ..ハッカー(135,877ポイント)   Date: 2010/02/26(金) 04:39   No:48601     
Title: Re:マップエディタ    
本家をご覧ください。
ttp://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_input.html#R5N8


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

Name:  ..かけだし(1,379ポイント)   Date: 2010/02/26(金) 16:47   No:48608     
Title: Re:マップエディタ    
返事が遅れてすいません
時間がなかったもので・・・・・・

おかげでできました!
ありがとうございます。


今、別のウィンドウを開いて画像を表示しようと
思っているのですが、本体とは別のウィンドウを表示するには、
どうすればいいのでしょうか?

連続で質問してすいません。
どうかよろしくお願いいたします。


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

Name: kazuoni [URL]  ..ハッカー(135,734ポイント)   Date: 2010/02/26(金) 17:09   No:48609     
Title: Re:マップエディタ    
本来、DXライブラリは同時に複数のウィンドウへの描画をサポートしていません。

マップエディタが本来の目的なので、
DXライブラリを使用しない方向に転換したほうが一番の解決策かと思います。
WINAPIで独立したウィンドウの生成はさほど難しくないので。
ただ、WNIAPIを使いこなすことが結構大変です。
まとめサイトは数多くあるので、気長にがんばってください。


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

Name:  ..かけだし(1,479ポイント)   Date: 2010/02/26(金) 17:18   No:48610     
Title: Re:マップエディタ    
Dxライブラリではできないのですか・・・・・・
これが一番簡単で
自由に作れると思って使っていたのですが・・・・・・

ありがとうございました。
がんばってみます。
ところで、
WINAPIのまとめサイトで
お勧めのサイトってありますか?
今検索していて、たくさんあったので・・・・・・
教えていただけるとありがたいです。


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

Name: バグ  ..ハッカー(190,931ポイント)   Date: 2010/02/26(金) 17:27   No:48611     
Title: Re:マップエディタ    
別のWindowを開かないで済むように仕様変更をするという方法もありますね。
例えば、別のWindowに描画しようとしているものを、画面の端の方に描画してやるとか…


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

Name: kazuoni [URL]  ..ハッカー(135,742ポイント)   Date: 2010/02/26(金) 17:28   No:48612     
Title: Re:マップエディタ    
自分は

WisdomSoft
http://wisdom.sakura.ne.jp/

のWin32 API入門を一通り見ました。


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

Name:  ..かけだし(1,710ポイント)   Date: 2010/02/26(金) 17:49   No:48613     
Title: Re:マップエディタ    
お二方、どうもありがとうございます。

 バグさん
その方法はいいですね。
まったく思いつきませんでした。
ただ、それだとマップチップみたいなのを
表示する部分と作ったマップを表示する部分が違うので
処理を二つに分けてそれぞれ表示するようになると思うのですが、
どのようにしてはければいいのですか?
X座標の○〜○の部分をクリックしたら・・・・・・
みたいな感じになるのですか?
お願いします。

 kazuoniさん
ありがとうございます。
確かにここならわかりやすそうですね。
ですが、やはりバグさんの方法が
自分にはやりやすいように思います。
なので、すみませんがバグさんの方にお願いすることにします。
ここのサイトはいいと思いますので、
お気に入りに保存しておいて、
後で困ったとき、見るようにしたいと思います。
本当にありがとうございました。


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

Name: バグ  ..ハッカー(191,179ポイント)   Date: 2010/02/26(金) 18:05   No:48614     
Title: Re:マップエディタ    
うーん、お願いしますと言われても…(苦笑)

>>ただ、それだとマップチップみたいなのを 
>>表示する部分と作ったマップを表示する部分が違うので 
>>処理を二つに分けてそれぞれ表示するようになると思うのですが、 
>>どのようにしてはければいいのですか? 
>>X座標の○〜○の部分をクリックしたら・・・・・・ 
>>みたいな感じになるのですか? 


そうですね、おおむねそんな感じだと思います。
クリックされた位置情報から何を行うべきなのかをこちらで判断してやるといった感じですね。


とりあえず、私が作るんだったら、エディットマップ描画部、マップチップ選択部、メニュー選択部みたいに細かく分けて考えますね。


エディットマップ描画部がクリックされたら現在選択されているマップチップを選択された場所へ置く。

マップチップ選択部がクリックされたら、選択されているマップチップを切り替える。

メニュー選択部がクリックされたら、選択された処理(セーブやロードとか?)を行う。


かなり大雑把ではありますけどね(^_^;)


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

Name:  ..かけだし(1,800ポイント)   Date: 2010/02/26(金) 18:56   No:48617     
Title: Re:マップエディタ    
if( ( GetMouseInput() & MOUSE_INPUT_LEFT ) != 0 )
{
    ・・・・・・・・・・・・
}
こんな感じで
クリックした位置のX座標とY座標の位置を取得する方法はわかるのですが、
どうすればいいのですか?
if でいいのですか? 編集済み


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

Name: バグ  ..ハッカー(191,208ポイント)   Date: 2010/02/26(金) 19:15   No:48619     
Title: Re:マップエディタ    
それで良いかどうかは何をしたいかによって変わります。
まずは、自分のやりたい事を細かく分析して箇条書きにしてみてください。
そして、それを実現するにはどうしたらよいかを考えてください。
考えがまとまったら、プログラムを書いてください。
実行してみて意図しない動きをしたのならば、その原因を考えてみてください。
それでも駄目ならば、質問してください。何でもかんでも質問しないで、トライ&エラーを繰り返し経験しないと実力はつきませんよ。


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

Name:  ..かけだし(1,832ポイント)   Date: 2010/02/26(金) 19:46   No:48620     
Title: Re:マップエディタ    
確かにそうですね。
すいません。
がんばってみます。


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

Name:  ..かけだし(2,167ポイント)   Date: 2010/02/27(土) 09:23   No:48642     
Title: Re:マップエディタ    
バグさんのイメージが、
自分の考えていたイメージに似ていたので、
イメージ通りになるように考えてみました。

画面を分けるために、

            if( ( MouseX ) >= 250 )
            {
                DrawPixel( MouseX , MouseY , Cr ) ;
            }

こんな感じでうまくいったのですが、

マップチップの選択方法について、
悩んでいて・・・・・・
画像のような一まとめにしたマップチップの画像の一部を
マップチップ選択部をクリックし、
16×16位の小さな画像に分割・メモリに保存/上書きして、
マップ描画部で、クリックしたところに描画する。

LoadDivGraph を使って分割して読み込めば、
いけると思ったのですが、どうもうまくいきません。
というより、そのようなことは可能ですか?


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

Name: kazuoni [URL]  ..ハッカー(135,844ポイント)   Date: 2010/02/27(土) 10:34   No:48643     
Title: Re:マップエディタ    
LoadDivGraphでできるはずです。
ファイルのパスをしっかり確認してください。
使い方は本家参照で。
http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_graph.html#R3N3


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

Name:  ..かけだし(2,197ポイント)   Date: 2010/02/27(土) 17:23   No:48651     
Title: Re:マップエディタ    
返事が遅くなってすいません

わかりました。
しっかり確認してみます。


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

Name:  ..かけだし(2,454ポイント)   Date: 2010/02/28(日) 19:12   No:48682     
Title: Re:マップエディタ    
kazuoniさんの言うとおり、
ファイルのパスがどこかおかしかったみたいで、
表示できるようになりました。
ですが、今表示しているのは、
[ 3 ]のようにあらかじめ設定してある
部分だけです。
なので、[ i ]のように、
あらかじめ変数を設定しておき、
クリックした位置によって、
変数"i"を変更できれば、うまくいくと思っています。

ですが、クリックした位置によって分割した画像を
変更する方法に困っています、
ifを使えば解決すると思ったのですが、
コードが長くなり、大変です。

どうしたらいいですか?
素直にifですべていくしかないのでしょうか?


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

Name: kazuoni [URL]  ..ハッカー(136,008ポイント)   Date: 2010/02/28(日) 20:34   No:48684     
Title: Re:マップエディタ    
一番の質問が良く理解できません。

>クリックした位置によって分割した画像を変更する方法

int image[16];
DrawGraph(... , image[i],TRUE);

なんてやっているならば、iを変更するだけで画像は変わりますよね。
iの変更方法で詰まっているのかな?と感じます。
例えばクリックしたときマウスの座標が
x=100 y=100
のとき、iは何番になるんだと。
それはそれを判別するプログラム(関数)をゴリゴリ書くしかありません。

雰囲気書いてみました。動作確認していないので悪しからず。


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

Name:  ..入門者(2,624ポイント)   Date: 2010/02/28(日) 20:48   No:48686     
Title: Re:マップエディタ    
すいません
書き方が悪かったです。
つまり、

マップチップ表示部の、
描画したいマップチップをクリック

例えば X=16〜32、Y=0〜16 画像の左上のほうの
「たたみ」の部分をクリックする。
   ↓
「たたみ」の部分の分割した番号〔この場合は1〕をiに保存
   ↓
DrawGraph( MouseX , MouseY , Mp_testchip[ i ] , TRUE ) ;
こういう感じでポインタの位置に表示できるように
用意しておき、クリックと同時に描画する。

 編集済み


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

Name: ru-pu  ..ぴよぴよ(458ポイント)   Date: 2010/02/28(日) 21:09   No:48687     
Title: Re:マップエディタ    
int MouseX,MouseY;
GetMousePoint(&MouseX,&MouseY);
i=MouseX/16+MouseY/16*8;

/*補足 i=MouseX/画像横幅+MouseY/画像縦幅*一行辺りの画像数; */

こういうことですか?


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

Name:  ..入門者(2,642ポイント)   Date: 2010/02/28(日) 21:25   No:48688     
Title: Re:マップエディタ    
ru-pu さん
ありがとうございました!!
無事解決しました!!



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

Name:  ..入門者(2,974ポイント)   Date: 2010/02/28(日) 22:41   No:48690     
Title: Re:マップエディタ    
もう、マップエディタのほうは
ほとんど完成しました。
ただ、今のままだとクリックした場所
すべてにマップチップが表示されてしまうことになるので、
きれいに描画するのが、難しくなってしまいます。

そこで、描画画面を
┼┼┼┼┼┼┼┼┼┼
┼┼┼┼╋╋┼┼┼┼
┼┼┼┼╋╋┼┼┼┼
┼┼┼┼┼┼┼┼┼┼
こんな感じのマス目のように考えて、
ここの
╋━━╋
┃● ┃
┃ ■┃
╋━━╋
●や■の部分など、
1つのマス目の中ならどこをクリックしても
マス目の部分にマップチップを描画するようにする

というようなことは出来ますか?

最初は、マップチップを選択する要領でいけると
思っていたのですが、
どうも出来そうになさそうなので、
質問させていただきます。


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

Name: ru-pu  ..ぴよぴよ(589ポイント)   Date: 2010/02/28(日) 23:11   No:48691     
Title: Re:マップエディタ    
int MouseX,MouseY; 
int MapX,MapY;
GetMousePoint(&MouseX,&MouseY); 
MapX=MouseX/16;
MapY=MouseY/16;
DrawGraph(MapX*16,MapY*16,Mp_testchip[i],TRUE);

/*補足 MapX=マス単位のX座標 MapY=マス単位のY座標*/

こういうことですか?


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

Name: kazuoni [URL]  ..ハッカー(136,091ポイント)   Date: 2010/02/28(日) 23:19   No:48692     
Title: Re:マップエディタ    
> ただ、今のままだとクリックした場所
> すべてにマップチップが表示されてしまう

この状況が良くわかりませんが、雰囲気で考えると、
クリックした場所が左上頂点として描写されるってことでしょか?

とりあえず、自分ならば以下のように実装します。


マップチップ描写エリアを確保し、
そのデータ保存のためのメモリを配列で確保

クリックした場所が描写エリアのどの場所に相当するのか
条件分岐で求める

配列に画像データのハンドルを渡す
(画像データハンドルよりは画像データハンドルを格納しているデータ番号のほうがよいかも)


マップの描写は画像データハンドルの有無で分岐すればよいです。


#いずれか「ちゃんと考えたの?」なんて突込みが入りそうですが・・・


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

Name:  ..入門者(2,995ポイント)   Date: 2010/02/28(日) 23:33   No:48694     
Title: Re:マップエディタ    
ru-puさん
すごいです!!
すごすぎです!!


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

Name:  ..入門者(3,068ポイント)   Date: 2010/02/28(日) 23:43   No:48697     
Title: Re:マップエディタ    
消去や保存

描画したマップ(画面右側)だけを
消去・保存するには、どうすればいいですか?

消去・保存しようとすると、
画面すべてが実行されてしまいます。


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

Name: ru-pu  ..ぴよぴよ(919ポイント)   Date: 2010/03/01(月) 23:48   No:48719     
Title: Re:マップエディタ    
消去はDrawBoxで画面右側だけを黒か何かで塗りつぶせば良いと思います
保存はマウスがクリックされたときにチップ番号を二次元配列に記録すれば良いと思います

配列に記憶
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
int Map[256][256];
int MouseX,MouseY;  
int MapX,MapY; 
GetMousePoint(&MouseX,&MouseY);  
MapX=MouseX/16; 
MapY=MouseY/16; 
DrawGraph(MapX*16,MapY*16,Mp_testchip[i],TRUE); 
Map[MapY][MapX]=i;//←配列に記憶
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

ファイルに保存
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
FILE *fp;
fp=fopen("map.bin","wb");
fwrite(Map,256*256*sizeof(int),1,fp);
fclose(fp);
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

ファイルから読み込み
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
FILE *fp;
fp=fopen("map.bin","rb");
fread(Map,256*256*sizeof(int),1,fp);
fclose(fp);
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

読み込んだマップを描画
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
int i,j;
for(i=0;i<256;i++)
{
    for(j=0;j<256;j++)
    {
        DrawGraph(j*16,i*16,Mp_testchip[Map[i][j]],TRUE);
    }
}
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

画面が実行されるってなんのことを指しているのでしょうか?


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




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +