C言語何でも質問掲示板


アンケートにご協力下さい → >> アンケートフォーム <<

規約と使い方

 
   構造体をchar型の変数 ....   
     ・[10060] Blue 
     ・[10063] Chii☆ 
     ・[10064] Blue 
     ・[10065] Chii☆ 
     ・[10066] Blue 
     ・[10105] Chii☆ 
   未解決の外部シンボル ....   
     ・[10101] Justy 
     ・[10104] 尚之 
   Windowsアプリケーショ ....   
     ・[10099] 管理人 
     ・[10102] tkmakwins15 
     ・[10103] ひろゆき 
   MS Visual studio Bet ....   
     ・[10081] へろり 
     ・[10082] GPGA 
     ・[10085] DDK 
     ・[10086] Justy 
     ・[10087] GPGA 
     ・[10088] Hermit 
     ・[10089] GPGA 
     ・[10090] GPGA 
     ・[10093] DDK 
     ・[10094] YuO 
     ・[10095] DDK 
   シューティングゲーム ....   
     ・[10091] 管理人 
   シューティングサンプ ....   
     ・[10061] 管理人 
     ・[10067] はらわた宏 
     ・[10077] 管理人 
   ロケールの設定につい ....   
     ・[10071] たかぎ 
     ・[10072] tkmakwins15 
     ・[10073] YuO 
     ・[10074] tkmakwins15 
   動的にobjectのclassを ....   
     ・[10019] tkmakwins15 
     ・[10021] バグ 
     ・[10027] tkmakwins15 
     ・[10034] たかぎ 
     ・[10042] DDK 
     ・[10044] たかぎ 
     ・[10045] ほら 
     ・[10046] たかぎ 
     ・[10053] DDK 
     ・[10054] たかぎ 
     ・[10062] DDK 
   プロセス一覧取得   
     ・[10056] たかぎ 
     ・[10058] ごぜん 
   無題   
     ・[10049] Blue 
     ・[10050] Chii☆ 
     ・[10051] Blue 
     ・[10052] Chii☆ 
   変数のスコープなんで ....   
     ・[10018] Hermit 
     ・[10020] tkmakwins15 
     ・[10022] Justy 
     ・[10023] toyo 
     ・[10024] Justy 
     ・[10025] Hermit 
     ・[10026] tkmakwins15 
     ・[10028] Justy 
     ・[10029] Hermit 
     ・[10033] tkmakwins15 
     ・[10035] たかぎ 
     ・[10038] まだまだ 
     ・[10039] たかぎ 
     ・[10040] まだまだ 
     ・[10041] GPGA 
     ・[10043] たかぎ 
     ・[10047] GPGA 
   無題   
     ・[10031] box 
     ・[10032] kaka 
     ・[10036] へろり 
     ・[10037] たかぎ 
   BGMについて   
     ・[9990] Justy 
     ・[9992] C言語勉強中! 
     ・[9995] Justy 
     ・[10016] C言語勉強中! 
   違うclass間のメンバー ....   
     ・[9993] Justy 
     ・[9994] Blue 
     ・[9996] まだまだ 
     ・[9997] Blue 
     ・[9998] Blue 
     ・[9999] Justy 
     ・[10001] まだまだ 
     ・[10002] Justy 
     ・[10006] Blue 
     ・[10007] Justy 
     ・[10008] Blue 
     ・[10009] Justy 
     ・[10011] たかぎ 
     ・[10012] たかぎ 
     ・[10014] ま 
   VC++のリストビュー ....   
     ・[10010] へろり 
     ・[10013] Chii☆ 
   データの読み出しでア ....   
     ・[10004] Justy 
     ・[10005] 雷 
   ファイル操作で構造体 ....   
     ・[9985] Justy 
     ・[9986] Justy 
     ・[9988] 雷 
   5. 分割コンパイル   
     ・[9974] toyo 
     ・[9978] 管理人 
     ・[9987] ゆら 
   シューティングゲーム ....   
     ・[9975] Justy 
     ・[9977] UN 
     ・[9982] Justy 
     ・[9983] UN 
   意味不明の警告   
     ・[9979] box 
     ・[9980] tkmakwins15 
     ・[9981] まだ 
   日本は、主体性の無い ....   
     ・[9933] バグ 
     ・[9935] 管理人 
     ・[9938] tkmakwins15 
     ・[9939] たかぎ 
     ・[9948] アベちゃん 
     ・[9949] 管理人 
     ・[9950] tkmakwins15 
     ・[9951] たかぎ 
     ・[9952] 管理人 
     ・[9954] tkmakwins15 
     ・[9955] 管理人 
     ・[9957] tkmakwins15 
     ・[9958] 管理人 
     ・[9959] tkmakwins15 
     ・[9960] 管理人 
     ・[9961] tkmakwins15 
     ・[9962] 管理人 
     ・[9963] tkmakwins15 
     ・[9964] ま〜く 
     ・[9965] 管理人 
     ・[9967] asd 
     ・[9972] tkmakwins15 
   sscanfで構造体へ格納 ....   
     ・[9969] バグ 
     ・[9970] box 
     ・[9971] 雷 
   キャラクターの透過処 ....   
     ・[9943] 管理人 
     ・[9944] UN 
     ・[9946] 管理人 
     ・[9947] UN 
     ・[9956] 管理人 
   戦闘のプログラム作っ ....   
     ・[9910] Justy 
     ・[9911] 雷 
     ・[9926] Justy 
     ・[9929] 雷 
     ・[9934] Justy 
     ・[9940] 雷 
     ・[9945] Justy 
     ・[9953] 雷 
   パイプについて   
     ・[9856] たかぎ 
     ・[9859] Lbfuvab 
     ・[9894] たかぎ 
     ・[9942] Lbfuvab 
   ゲーム作りました〜^ ....   
     ・[9692] null 
     ・[9697] Justy 
     ・[9704] 管理人 
     ・[9716] null 
     ・[9721] 管理人 
     ・[9722] null 
     ・[9723] tkmakwins15 
     ・[9725] 管理人 
     ・[9726] tkmakwins15 
     ・[9727] 通りすがり 
     ・[9728] 管理人 
     ・[9730] tkmakwins15 
     ・[9733] 管理人 
     ・[9735] 管理人 
     ・[9741] tkmakwins15 
     ・[9760] 管理人 
     ・[9764] tkmakwins15 
     ・[9768] 宇都宮 
     ・[9769] 管理人 
     ・[9771] tkmakwins15 
     ・[9773] 管理人 
     ・[9774] tkmakwins15 
     ・[9776] 管理人 
     ・[9777] tkmakwins15 
     ・[9783] けるびん 
     ・[9788] たかぎ 
     ・[9789] バグ 
     ・[9795] 管理人 
     ・[9796] tkmakwins15 
     ・[9797] バグ 
     ・[9798] tkmakwins15 
     ・[9800] 管理人 
     ・[9806] tkmakwins15 
     ・[9816] 管理人 
     ・[9821] tkmakwins15 
     ・[9822] ぷ〜 
     ・[9826] 管理人 
     ・[9831] tkmakwins15 
     ・[9833] 管理人 
     ・[9834] tkmakwins15 
     ・[9835] 管理人 
     ・[9837] tkmakwins15 
     ・[9848] 管理人 
     ・[9851] tkmakwins15 
     ・[9852] 管理人 
     ・[9853] tkmakwins15 
     ・[9861] 零 
     ・[9862] 管理人 
     ・[9863] けるびん 
     ・[9865] tkmakwins15 
     ・[9869] 管理人 
     ・[9873] 雷 
     ・[9874] 管理人 
     ・[9892] tkmakwins15 
     ・[9893] 管理人 
     ・[9895] tkmakwins15 
     ・[9896] 管理人 
     ・[9897] Justy 
     ・[9898] tkmakwins15 
     ・[9900] 雷 
     ・[9902] 管理人 
     ・[9903] YuO 
     ・[9904] tkmakwins15 
     ・[9905] 管理人 
     ・[9906] tkmakwins15 
     ・[9907] 雷 
     ・[9909] tkmakwins15 
     ・[9912] YuO 
     ・[9915] tkmakwins15 
     ・[9917] YuO 
     ・[9919] tkmakwins15 
     ・[9920] Justy 
     ・[9922] tkmakwins15 
     ・[9931] 雷 
     ・[9937] tkmakwins15 
   「17. カウンターを使 ....   
     ・[9928] ゆら 
     ・[9930] 雷 
     ・[9936] ゆら 
   保存について   
     ・[9918] Blue 
     ・[9921] もうじ 
     ・[9923] Blue 
     ・[9924] もうじ 
     ・[9925] Blue 
   書き方が悪かったです ....   
     ・[9908] Blue 
     ・[9913] もうじ 
     ・[9914] もうじ 
   これだと不都合でしょ ....   
     ・[9867] たかぎ 
     ・[9870] まだまだ 
     ・[9871] たかぎ 
     ・[9872] まだまだ 
     ・[9890] たかぎ 
     ・[9891] まだまだ 
   インデント。   
     ・[9886] バグ 
     ・[9887] 管理人 
     ・[9888] Hermit 
     ・[9889] バグ 
   テキストファイルのあ ....   
     ・[9881] box 
     ・[9882] ぱひゅーん 
     ・[9883] 通りすが 
     ・[9884] ぱひゅーん 
   リソースの使い方   
     ・[9876] Justy 
     ・[9877] 白 
     ・[9878] Justy 
     ・[9879] 白 
   クォータービュー視点 ....   
     ・[9801] PINO 
     ・[9802] 管理人 
     ・[9803] PINO 
     ・[9804] bin 
     ・[9805] PINO 
     ・[9809] YuO 
     ・[9810] Justy 
     ・[9840] PIKO 
     ・[9849] PIKO 
     ・[9850] PINO 
     ・[9857] Justy 
     ・[9858] PINO 
     ・[9864] Justy 
     ・[9868] Justy 
   画像データの暗号化に ....   
     ・[9663] tkmakwins15 
     ・[9666] Justy 
     ・[9668] 新人 
     ・[9669] Justy 
     ・[9672] 新人 
     ・[9673] Justy 
     ・[9675] 新人 
     ・[9676] 新人 
     ・[9677] 新人 
     ・[9690] Justy 
     ・[9701] tkmakwins15 
     ・[9702] 新人 
     ・[9705] tkmakwins15 
     ・[9724] GPGA 
     ・[9734] Justy 
     ・[9743] tkmakwins15 
     ・[9746] Justy 
     ・[9749] tkmakwins15 
     ・[9752] 蘇我入鹿 
     ・[9756] tkmakwins15 
     ・[9860] Lbfuvab 
   C(またはC++)のinline ....   
     ・[9808] たかぎ 
     ・[9811] null 
     ・[9812] たかぎ 
     ・[9815] まだまだ 
     ・[9823] null 
     ・[9827] たかぎ 
     ・[9841] まだまだ 
     ・[9843] たかぎ 
     ・[9847] まだまだ 
     ・[9854] まだまだ 
   サンプルのエラー   
     ・[9794] tkmakwins15 
     ・[9828] kuma 
     ・[9829] 管理人 
     ・[9832] tkmakwins15 
     ・[9836] 管理人 
     ・[9838] tkmakwins15 
     ・[9839] バグ 
     ・[9842] Justy 
     ・[9844] tkmakwins15 
     ・[9845] YuO 
     ・[9846] Justy 
   分からなくて困ってい ....   
     ・[9814] へろり 
     ・[9817] ぷ〜 
     ・[9818] ed 
     ・[9819] ぷ〜 
     ・[9820] ed 
     ・[9824] フリオ 
     ・[9825] へろり 
     ・[9830] ed 
   strcatについて   
     ・[9784] へろり 
     ・[9785] tkmakwins15 
     ・[9786] たかぎ 
     ・[9787] toyo 
     ・[9792] けるびん 
   画面の切り替えについ ....   
     ・[9791] しりうす〜 
   BCCDeveloperでのエラ ....   
     ・[9770] 管理人 
     ・[9772] tkmakwins15 
     ・[9781] Justy 
   エラーの内容について   
     ・[9755] box 
     ・[9757] たかぎ 
     ・[9775] null 
     ・[9780] Chii☆ 
   VC2005でウィンドウ画 ....   
     ・[9779] tkmakwins15 
   オススメの本   
     ・[9759] たかぎ 
     ・[9761] 管理人 
     ・[9762] けるびん 
     ・[9763] tkmakwins15 
     ・[9765] バグ 
     ・[9766] けるびん 
   なんにもわからんので ....   
     ・[9688] null 
     ・[9700] tkmakwins15 
     ・[9754] じゃが 
   噂なんですけど   
     ・[9737] たかぎ 
     ・[9739] tkmakwins15 
     ・[9747] DDK 
     ・[9748] tkmakwins15 
     ・[9750] たかぎ 
     ・[9751] DDK 
   mapクラスの使用法   
     ・[9731] YuO 
     ・[9732] Justy 
     ・[9738] tkmakwins15 
     ・[9740] YuO 
     ・[9742] tkmakwins15 
     ・[9744] Justy 
     ・[9745] tkmakwins15 
   グラフの絵画   
     ・[9712] たかぎ 
     ・[9713] びーの 
     ・[9714] たかぎ 
     ・[9715] tkmakwins15 
     ・[9717] びーの 
     ・[9718] びーの 
     ・[9719] たかぎ 
     ・[9720] びーの 
   構造体etc   
     ・[9706] box 
     ・[9707] たかぎ 
     ・[9710] びーの 
   無題   
     ・[9696] box 
     ・[9699] tkmakwins15 
     ・[9708] myzk 
     ・[9709] 組木紙織 
   無題   
     ・[9627] toyo 
     ・[9629] ナガレ 
     ・[9630] myzk 
     ・[9633] toyo 
     ・[9639] tkmakwins15 
     ・[9643] YuO 
     ・[9644] たかぎ 
     ・[9695] myzk 
   急に実行できなくなり ....   
     ・[9648] 組木紙織 
     ・[9649] tkmakwins15 
     ・[9650] YuO 
     ・[9651] 組木紙織 
     ・[9652] tkmakwins15 
     ・[9656] myzk 
     ・[9657] 組木紙織 
     ・[9659] tkmakwins15 
     ・[9694] myzk 
   無題   
     ・[9687] Justy 
     ・[9689] オス豚 
   ホームページの作り方 ....   
     ・[9667] たかぎ 
     ・[9670] box 
     ・[9671] 管理人 
     ・[9678] tkmakwins15 
     ・[9684] Chii☆ 
   C/C++ CHAR型変数操作 ....   
     ・[9680] 組木紙織 
     ・[9681] box 
     ・[9682] at 
     ・[9683] たかぎ 
   **pのアドレスの進め方 ....   
     ・[9660] Justy 
     ・[9664] tkmakwins15 
     ・[9674] けるびん 
   Cのプログラムでシェ ....   
     ・[9654] ナガレ 
     ・[9661] たかぎ 
   画像データの保存順番 ....   
     ・[9634] toyo 
     ・[9635] ぷ〜 
     ・[9636] aa 
     ・[9645] DDK 
     ・[9646] TT414 
     ・[9655] DDK 
   無題   
     ・[9642] 組木紙織 
   Alt+F4について   
     ・[9637] aa 
     ・[9638] aa 
     ・[9641] Justy 
   クイックソートのアル ....   
     ・[9504] toyo 
     ・[9508] ワタル 
     ・[9514] Hermit 
     ・[9516] ワタル 
     ・[9517] Hermit 
     ・[9607] ワタル 
     ・[9617] Hermit 
     ・[9628] ワタル 
   無題   
     ・[9616] 管理人 
     ・[9619] myzk 
     ・[9622] tkmakwins15 
     ・[9626] myzk 
   printfについて   
     ・[9603] バグ 
     ・[9620] myzk 
     ・[9621] tkmakwins15 
     ・[9624] myzk 
   無題   
     ・[9596] 管理人 
     ・[9597] myzk 
     ・[9598] 組木紙織 
     ・[9599] myzk 
     ・[9600] 組木紙織 
     ・[9601] myzk 
     ・[9604] ナガレ 
     ・[9605] 管理人 
     ・[9606] 管理人 
     ・[9608] myzk 
     ・[9609] ぷ〜 
     ・[9611] 管理人 
     ・[9612] myzk 
     ・[9615] 管理人 
     ・[9618] myzk 
     ・[9623] tkmakwins15 
   後一歩でデバッグの終 ....   
     ・[9575] box 
     ・[9576] tai 
     ・[9577] box 
     ・[9578] バグ 
     ・[9579] tkmakwins15 
     ・[9580] tai 
     ・[9581] box 
     ・[9582] tai 
     ・[9583] tai 
     ・[9584] tkmakwins15 
     ・[9585] tai 
     ・[9586] tai 
     ・[9587] tai 
     ・[9593] tkmakwins15 
     ・[9613] tai 
   リスト操作を使って素 ....   
     ・[9554] tws 
     ・[9560] box 
     ・[9568] tws 
     ・[9571] box 
     ・[9572] box 
     ・[9594] tws 
     ・[9610] フリオ 
   DialogBoxのテキストに ....   
     ・[9487] Justy 
     ・[9488] tkmakwins15 
     ・[9489] Justy 
     ・[9491] tkmakwins15 
     ・[9492] Justy 
     ・[9493] tkmakwins15 
     ・[9541] tkmakwins15 
     ・[9542] Justy 
     ・[9543] tkmakwins15 
     ・[9546] Justy 
     ・[9549] tkmakwins15 
     ・[9562] Justy 
     ・[9563] tkmakwins15 
     ・[9588] Justy 
     ・[9589] tkmakwins15 
     ・[9591] Justy 
     ・[9592] tkmakwins15 

Name: Chii☆  ..かけだし(1,756ポイント)   Date: 2007/08/27(月) 00:17   No:10059       
Title: 構造体をchar型の変数へ格納    
いつもお世話になってぃます!!
Chii☆と申します!!!

質問お願いします☆


typedef struct a
{
a[2];
b[3];
c[3];
d[7];
e[5];
f[4];
g[3];
}a;

void main()
{
a st_a;
char str[] = {2374858373848 3848 28482848 2};
}


構造体をchar型の変数へ格納(空白は飛ばして数字のみ格納)したぃのですが、

a[2]・・・23
b[3]・・・748
c[3]・・・583
  ・
  ・
  ・

というような具合に代入して行きたいのですが、
一つ一つ、

memcpy()などで

memcpy(st_a.a,・・・
memcpy(st_a.b,・・・
memcpy(st_a.c,・・・
  ・
  ・
  ・

というように代入していくと効率が悪いので、
効率良く代入していきたぃのですが、なかなかできません・・

どなたか、ご教授お願いします!!!

VC++ 6.0を使用しています!!

宜しくお願ぃします。


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


Name: Blue  ..入門者(2,798ポイント)   Date: 2007/08/27(月) 01:33   No:10060     
Title: Re:構造体をchar型の変数へ格納    
示されたコードはコンパイルがまったく通らないようですが。。。
(イメージならイメージですと明記しておいたほうが良いでしょう)

数値なのか文字列として格納したいのかどちらなんでしょうか?
空白を消してからmemcpyすればとりあえず(終端文字を含まない)文字列としては
格納できますが。

もっとも数値に最終的に変換する場合でも終端文字は必要になりますが。


(数値を入れるとして)
>効率良く代入
memcpyではなく空白を消してsscanfぐらいでしょうか。
前メンバを書き出す必要はありますが。

MFCのCStringを使ってもいいなら
#include <afx.h>


struct Hoge
{
int a, b, c, d, e, f, g;
};

int main()
{
Hoge h;
char str[] = "2374858373848 3848 28482848 2";
CString buff(str);

buff.Replace(" ", "");

sscanf(buff, "%2d%3d%3d%7d%5d%4d%3d", &h.a, &h.b, &h.c, &h.d, &h.e, &h.f, &h.g);

printf("%s\n", buff);
printf("h.a = %d\n", h.a);
printf("h.b = %d\n", h.b);
printf("h.c = %d\n", h.c);
printf("h.d = %d\n", h.d);
printf("h.e = %d\n", h.e);
printf("h.f = %d\n", h.f);
printf("h.g = %d\n", h.g);

return 0;
}

てな感じで。
(memcpy見たいに一気に格納は無理でしょう)



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

Name: Chii☆  ..かけだし(1,924ポイント)   Date: 2007/08/27(月) 10:56   No:10063     
Title: Re:構造体をchar型の変数へ格納    
Blueさん解答ありがとうござます!!


>示されたコードはコンパイルがまったく通らないようですが。。。
>(イメージならイメージですと明記しておいたほうが良いでしょう)

申し訳ありません。イメージでした・・


>数値なのか文字列として格納したいのかどちらなんでしょうか?
>空白を消してからmemcpyすればとりあえず(終端文字を含まない)文字列としては
>格納できますが。

>もっとも数値に最終的に変換する場合でも終端文字は必要になりますが。


数値ではなくて文字列として格納したいです・・


説明不足で申し訳ありませんでした!!!

よろしくお願ぃします!!!


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

Name: Blue  ..入門者(3,202ポイント)   Date: 2007/08/27(月) 11:18   No:10064     
Title: Re:構造体をchar型の変数へ格納    
終端文字を含まないといけないので、
(なくてもできるけど、普通の文字列と同等には扱えない。
→printf("%s", a.h);とかatoi(a.h)とか出来ない)
>char str[] = "2374858373848 3848 28482848 2";
というバイナリの適所に'\0'を入れないとmemcpyで一気には無理でしょう。

それか、sscanfを使って
#include <afx.h>


struct Hoge
{
char a[2 + 1];
char b[3 + 1];
char c[3 + 1];
char d[7 + 1];
char e[5 + 1];
char f[4 + 1];
char g[3 + 1];
};

int main()
{
Hoge h;
char str[] = "2374858373848 3848 28482848 2";
CString buff(str);

buff.Replace(" ", "");

sscanf(buff, "%2s%3s%3s%7s%5s%4s%3s", h.a, h.b, h.c, h.d, h.e, h.f, h.g);

printf("%s\n", buff);
printf("h.a = %s\n", h.a);
printf("h.b = %s\n", h.b);
printf("h.c = %s\n", h.c);
printf("h.d = %s\n", h.d);
printf("h.e = %s\n", h.e);
printf("h.f = %s\n", h.f);
printf("h.g = %s\n", h.g);

return 0;
}


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

Name: Chii☆  ..入門者(3,450ポイント)   Date: 2007/08/27(月) 14:28   No:10065     
Title: Re:構造体をchar型の変数へ格納    
Bleuさん
解答ありがとうござぃます。

>終端文字を含まないといけないので、
>(なくてもできるけど、普通の文字列と同等には扱えない。
>→printf("%s", a.h);とかatoi(a.h)とか出来ない)
>>char str[] = "2374858373848 3848 28482848 2";
>というバイナリの適所に'\0'を入れないとmemcpyで一気には無理でしょう。

では、一つ一つに終端文字を入れる必要があるようですね。


すいません、私の質問の仕方が悪かったみたぃで・・

質問の意味としては、構造体に格納する際に、

st_a.a
st_a.b
st_a.c

などをいちいち書いていたら日が暮れてしまうので、

下のソースのような(コンパイルはしておらず、あくまでイメージです!!)

typedef struct a
{
a[2];
b[3];
c[3];
d[7];
e[5];
f[4];
g[3];
}a;

void main()
{
a st_a;
char str[] = {2374858373848 3848 28482848 2};
int num [] = {2,3,3,7,5,4,3}//格配列の要素数をループなどで回す時に使用

int n=0;
     for(int i=0; int =<7 ;i++)
{
memcpy((a+Loop[i]+n), (str+num[i]+n), num[i+1]);
printf(格納した文字列を表示)
}
}


memcpy((&stBase+Loop[i]+Num), (ss+Loop[i]+Num), Loop[i+1]);

&stBase+Loop[i]+Num

ように書くことができれば、

st_a.a
st_a.b
st_a.c
 ・
 ・
 ・

と記述しなくていいので簡単に書くことができると思うのですが、
なかなか良い方法が思い浮かびません・・

私が今書いたソースと全く違うものでもいいので、ご教授願います。

質問の仕方が悪くて申し訳ありませんでした!!


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

Name: Blue  ..入門者(3,303ポイント)   Date: 2007/08/27(月) 14:37   No:10066     
Title: Re:構造体をchar型の変数へ格納    
#include <afx.h>


struct Hoge
{
char a[2 + 1];
char b[3 + 1];
char c[3 + 1];
char d[7 + 1];
char e[5 + 1];
char f[4 + 1];
char g[3 + 1];
};

int main()
{
Hoge h;
char str[] = "2374858373848 3848 28482848 2";
CString buff(str);

buff.Replace(" ", "");

const int sizes[] =
{
sizeof(h.a) - 1,
sizeof(h.b) - 1,
sizeof(h.c) - 1,
sizeof(h.d) - 1,
sizeof(h.e) - 1,
sizeof(h.f) - 1,
sizeof(h.g) - 1
};
const char* p = buff;
char* target = (char*)&h;
for (int i = 0; i < sizeof(sizes) / sizeof(sizes[0]); ++i)
{
memcpy(target, p, sizes[i]);
target[sizes[i]] = '\0';

printf("%s\n", target);

p += sizes[i];
target += sizes[i];
}

return 0;
}


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

Name: Chii☆  ..入門者(3,540ポイント)   Date: 2007/09/01(土) 23:02   No:10105 解決!     
Title: Re:構造体をchar型の変数へ格納    
お礼の返事送れて申し訳ありません!!

おけげ様で無事プログラムが完成できました☆
丁寧な解説、ありがとうございました!!
とても感謝致します。

また何かありましたらよろしくお願いします!!

それでは短いですがお礼とさせて頂きます。


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



Name: 尚之  ..ぴよぴよ(270ポイント)   Date: 2007/09/01(土) 00:57   No:10100       
Title: 未解決の外部シンボルのエラー    
初めまして、尚之と申します
初めて自分でゲームを作ろうと思い
DXライブラリとVisual Studio 2005を使ってプログラムを組んでいるのですが
ビルドをすると下の様なエラーがでてしまいます

エラー 2 error LNK2019: 未解決の外部シンボル __CrtDbgReportW が関数 "public: __thiscall std::_Vector_const_iterator<struct AnimDraw::animpat,class std::allocator<struct AnimDraw::animpat> >::_Vector_const_iterator<struct AnimDraw::animpat,class std::allocator<struct AnimDraw::animpat> >(struct AnimDraw::animpat *,class std::_Container_base const *)" (??0?$_Vector_const_iterator@Uanimpat@AnimDraw@@V?$allocator@Uanimpat@AnimDraw@@@std@@@std@@QAE@PAUanimpat@AnimDraw@@PBV_Container_base@1@@Z) で参照されました。 main.obj
エラー 3 error LNK2001: 外部シンボル "__CrtDbgReportW" は未解決です。 animdraw.obj
エラー 4 error LNK2001: 外部シンボル "__CrtDbgReportW" は未解決です。 jiki.obj
エラー 5 error LNK2001: 外部シンボル "__CrtDbgReportW" は未解決です。 libcpmtd.lib
エラー 6 error LNK2019: 未解決の外部シンボル __malloc_dbg が関数 "void * __cdecl operator new(unsigned int,struct std::_DebugHeapTag_t const &,char *,int)" (??2@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z) で参照されました。 libcpmtd.lib
エラー 7 error LNK2019: 未解決の外部シンボル __free_dbg が関数 "void __cdecl operator delete(void *,struct std::_DebugHeapTag_t const &,char *,int)" (??3@YAXPAXABU_DebugHeapTag_t@std@@PADH@Z) で参照されました。 libcpmtd.lib
エラー 8 fatal error LNK1120: 外部参照 3 が未解決です。

初心者な者でエラーの意味がよくわからなくて困ってます
どなたか解決の仕方を教えてもらえませんでしょうか?
よろしくお願い致します。


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


Name: Justy  ..ハッカー(156,136ポイント)   Date: 2007/09/01(土) 01:28   No:10101     
Title: Re:未解決の外部シンボルのエラー    
 DxLib.hの DX_USE_VISUALC_MEM_DEBUGの定義がコメントアウトされていたら
それを有効にして、ビルドの設定の使用するランタイムライブラリのところを
マルチスレッド デバッグにしてみて下さい。

 それで解決するかもしれません。


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

Name: 尚之  ..ぴよぴよ(319ポイント)   Date: 2007/09/01(土) 22:19   No:10104 解決!     
Title: Re:未解決の外部シンボルのエラー    
Justyさん回答ありがとうございます
教えて頂いた通りやらせてもらいましたら解決しました、助かりました
本当にありがとうございました。


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



Name: ひろゆき  ..ぴよぴよ(437ポイント)   Date: 2007/08/31(金) 16:43   No:10096       
Title: Windowsアプリケーションについて    
今僕は、コンソールアプリケーションを作っているのですが、この出力をコンソールではなく、GUI上にしたいのです。
また、出力する前にボタンや、ダウンメニューをつけていきたいのですが、これはWin32APIでつくるほうがいいのでしょうか?また、
そうであればWin32APIに関する書籍、サイトを教えてください。なお、Windowsプログラミングという、ゲームを作る方の本は持っているのですが、
VSでフォームを元々作成してあるものから手を加えていきたいのです。どうすればいいでしょうか?お教えください。よろしくおねがいします。


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


Name: 管理人 [URL]  ..伝説のハッカー(394,103ポイント)   Date: 2007/08/31(金) 21:52   No:10099     
Title: Re:Windowsアプリケーションについて    
Win32APIについてのサイトを教えてくださいと言う事ですが、
ググるだけで結構見つかりますよ。

http://www.google.co.jp/search?hl=ja&q=Win32API&lr=

最近は書籍を買わなくてもかなりウェブで勉強できるので、ウェブで少し勉強して
入門部分を理解した後、大きな書店などで色々立ち読みして自分にあったものを決めるといいのではないでしょうか。


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

Name: tkmakwins15 [URL]  ..上級者(17,017ポイント)   Date: 2007/09/01(土) 02:17   No:10102     
Title: Re:Windowsアプリケーションについて    
>VSでフォームを元々作成してあるものから手を加えていきたいのです。

最初のほうは、フォームから作成するというのはやめといたほうがいいですよ。Windows APIをしっかりと理解するためには、
フォームからしっかりとプログラミングできるようにしたほうが、後々役に立ちますよ。

入門の有名なところではここがいいのではないでしょうか。

http://www.kumei.ne.jp/c_lang/index.html


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

Name: ひろゆき  ..ぴよぴよ(482ポイント)   Date: 2007/09/01(土) 17:52   No:10103 解決!     
Title: Re:Windowsアプリケーションについて    
フォームから作成はやめといたほうがいいですか。。。そうですね。では、ちゃんとフォームを作る段階からできるようにします。

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



Name: DDK  ..ぴよぴよ(977ポイント)   Date: 2007/08/30(木) 14:18   No:10080       
Title: MS Visual studio Beta 2のインストールにQ    
つい、夢のVisual studio 2008をダウンロードしたが
なんとimg拡張子のファイルになっていて、クリックしたら、いつも画像表示ソフトが
起動されて、どうすればインストールができるのでしょうか。

ダウンロードしたファイル名↓
orcasbeta2prox1394646.img


教えてくださーい!!!


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


Name: へろり  ..ぴよぴよ(360ポイント)   Date: 2007/08/30(木) 14:58   No:10081     
Title: Re:MS Visual studio Beta 2のインストールにQ    
おそらくはCDイメージかと。
適当な仮想CDが使えるソフトを使えば幸せになれるでしょう。


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

Name: GPGA  ..プログラマー(34,566ポイント)   Date: 2007/08/30(木) 15:03   No:10082     
Title: Re:MS Visual studio Beta 2のインストールにQ    
ここからダウンロードしてもよいかと。
http://www.microsoft.com/japan/msdn/vstudio/future/download.aspx


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

Name: DDK  ..かけだし(1,034ポイント)   Date: 2007/08/30(木) 17:00   No:10085     
Title: Re:MS Visual studio Beta 2のインストールにQ    
これはダウンロードしたファイルです
orcasbeta2prox1394646.img


このファイルを使ってインストール方法は分からないのです。
ご存知の方いらっしゃませんか



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

Name: Justy  ..ハッカー(156,036ポイント)   Date: 2007/08/30(木) 17:14   No:10086     
Title: Re:MS Visual studio Beta 2のインストールにQ    
 ダウンロードした MSのサイトに書いてあった or 詳細ページへのリンクがあったと思いましたが、
ありませんでしたか?

 へろりさんが書かれているようにそのファイルは ISO-9660形式のイメージファイルなので、
そのファイル単体ではどうにもなりません。

 CD/DVDなどのメディアにそのイメージを焼くか、仮想ドライブとしてマウントすることで
インストールできます。


 とりあえず、ダウンロードした MSのサイトに説明(あるいはそのページへのリンク)があると思うので、
それを読んでみて下さい。


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

Name: GPGA  ..プログラマー(34,965ポイント)   Date: 2007/08/30(木) 21:37   No:10087     
Title: Re:MS Visual studio Beta 2のインストールにQ    
日本語版だと、VB,C++,C#,J#のどれかを単体で落とすしかないけど
英語版だとProfessional EditionのBata2がダウンロードできたんですね。
ダウンロードページにインストール手順が書かれていました。

Instructions
Download instructions

1. Click on the image download available on this page and save to your hard drive in a temporary directory.

Because this file is large, we recommend that you use a download manager to download it.

If you do not have a download manager or are unsure, click here for a facilitated download.
2. Rename downloaded .img files to .iso file extension and follow the ISO handling instructions below.


Options for handling downloaded ISO Images.
Following 2 options are available for DVD image handling.

1. Write the image file to blank DVD (Recommended)
2. Mount image file virtually as DVD devices.
For details of the options listed above, see "What are ISO image files and how do I use them?" topic available on this FAQ page.

Installation Instructions

1. On the DVD, locate Setup.exe and double click to initiate installation.
2. Follow the Setup Wizard instructions to completion.
3. After the Beta 2 installation has finished, you should run this script to ensure that the installation of .NET Framework 3.5 Beta 2 will not affect the development of ASP.NET AJAX 1.0 applications.
 
拡張子を「.img」から「.iso」に変更して、空のDVDに書き込み、そのあとSetup.exeを起動して
インストールするようにと書いてあるようです。


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

Name: Hermit  ..中級者(13,540ポイント)   Date: 2007/08/30(木) 21:39   No:10088     
Title: Re:MS Visual studio Beta 2のインストールにQ    
DVD に書き込むのももったいないので、
DAEMONTOOLS くらいでいいのでは。


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

Name: GPGA  ..プログラマー(34,974ポイント)   Date: 2007/08/30(木) 21:42   No:10089     
Title: Re:MS Visual studio Beta 2のインストールにQ    
ISOですからWinRARでもいけますね。

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

Name: GPGA  ..プログラマー(35,060ポイント)   Date: 2007/08/30(木) 21:52   No:10090     
Title: Re:MS Visual studio Beta 2のインストールにQ    
ちょっと修正
× 拡張子を「.img」から「.iso」に変更して
○ 拡張子を「.img」から「.iso」に改名して

後、VS2008のBate2をアンインストールしたときに
VS2005を修復セットアップを行うように、readmeに書いてあるらしいので注意。


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

Name: DDK  ..かけだし(1,143ポイント)   Date: 2007/08/31(金) 13:14   No:10093     
Title: Re:MS Visual studio Beta 2のインストールにQ    
丁寧なご教授有難うございます。

> 1. Write the image file to blank DVD (Recommended)
> 1. On the DVD, locate Setup.exe and double click to initiate installation.

ダウンロードしたファイル:
orcasbeta2prox1394646.img を
orcasbeta2prox1394646.isoに改名して
DVDに複製したが、
DVDの中でもorcasbeta2prox1394646.isoはそのままで
なにも Setup.exeファイルは存在しません。
だから
「On the DVD, locate Setup.exe」云々意味不明ですね。

そもそもMSは何でこんな面倒くさいことをしたいですね。
MSの社員は残業代稼ぎたい?








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

Name: YuO  ..中級者(11,146ポイント)   Date: 2007/08/31(金) 13:41   No:10094     
Title: Re:MS Visual studio Beta 2のインストールにQ    
ISOイメージファイルというのは,CDやDVDに実際に書き込む情報そのものです。
ISOイメージファイルをファイルとしてDVDに書き込むのではなく,
DVD Writerの「イメージファイルから書き込む」のような機能を利用して書き込みます。

> そもそもMSは何でこんな面倒くさいことをしたいですね。
ISOイメージファイルの方が使いやすくて便利ですが。
MSDN SubscriptionでDVDが送られてきても,DownloadサイトからISOイメージ落としてそれ使うこともよくありますし。
# Daemon-toolsとかCloneDVDとかでマウントできますし,Virtual PC/Virtual Serverでは物理ドライブのキャプチャのかわりに使えます。


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

Name: DDK  ..かけだし(1,263ポイント)   Date: 2007/08/31(金) 15:45   No:10095     
Title: Re:MS Visual studio Beta 2のインストールにQ    
GPGA様、 YuO様
ありがとうございます

> ISOイメージファイルをファイルとしてDVDに書き込むのではなく,
> DVD Writerの「イメージファイルから書き込む」のような機能を利用して書き込みます。

ちょっと確かめたいですが
いまの
orcasbeta2prox1394646.img を orcasbeta2prox1394646.isoに改名したファイルは
"イメージファイル"に該当するのでしょうか。

うちのDVD Writer(Roxio Creator Plus - Dell Edition)は「イメージファイルから書き込む」ではないんですが、その代わりに「イメージファイルを書き込む」選択項目があって、
orcasbeta2prox1394646.isoを選択して書き込む途中いつも失敗しました。
また何か仕掛けあるのでようか。


宜しくお願い致します。


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



Name: アキラ  ..ぴよぴよ(73ポイント)   Date: 2007/08/29(水) 19:38   No:10075       
Title: シューティングゲーム・敵の動作の判定にて    
初めまして、このサイトを見てプログラムの勉強をしています。
ところで、敵動作の判定にて敵が画面の外へ出た時に、出現フラグを戻すための判定にて、

if(enemy[i].x<0.0-MONSTER1_X_SIZE/2.0*enemy[i].size || enemy[i].x>420.0+MONSTER1_X_SIZE/2.0*
enemy[i].size || enemy[i].y<0.0-MONSTER1_Y_SIZE/2.0*enemy[i].size || enemy[i].y<0.0-MONSTER1_Y_SIZE/2.0*enemy[i].size)

と書かれていますが、Y軸方向の計算が一緒なので下画面外にでても
フラグが戻らないかと思います。

if(enemy[i].x<0.0-MONSTER1_X_SIZE/2.0*enemy[i].size || enemy[i].x>420.0+MONSTER1_X_SIZE/2.0*
enemy[i].size || enemy[i].y<0.0-MONSTER1_Y_SIZE/2.0*enemy[i].size || enemy[i].y>680.0+
MONSTER1_Y_SIZE/2.0*enemy[i].size)

多分、こっちが正解(本当!?)一度確認してみてください。(生意気ってすみません><)


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


Name: 管理人 [URL]  ..伝説のハッカー(393,829ポイント)   Date: 2007/08/31(金) 02:29   No:10091     
Title: Re:シューティングゲーム・敵の動作の判定にて    
こんばんは。管理人です。
ホントだっ!
すみません、仰るとおりです!
現在実家に帰省中の為、修正できないのですが、戻ったら修正させていただきます!
ご報告ありがとうございました☆


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



Name: はらわた宏  ..ぴよぴよ(320ポイント)   Date: 2007/08/26(日) 01:58   No:10057       
Title: シューティングサンプルプログラムを見たのですが・・・    
処理を見ていて理解できる部分も多くなったのですが、敵弾と自キャラの当たり判定の実装の仕方が分かりま
せん。敵との当たり判定の応用というか同じような処理だとは思うのですがイマイチ理解できなくて困っています。
一応自分なりに考えて横シューティングの時は以下のようなこういう処理を作ったのですがサンプルでの縦シューティングではどうすればいいのでしょう?特に弾幕を避けるためプレイヤーの当たり判定が極めて小さいなどの処理とか含めて。分かりにくい質問ですがまとめるとサンプルの縦シューティングの敵弾とプレイヤーの当たり判定の実装方法が聞きたいです。
// ------------------------------------------------
// 敵弾幕とプレイヤーの当たり
// ------------------------------------------------
void EbeamShipHit(void)
{
int i;

for ( i=0; i<EBEAM_MAX; i++ )
{
if(gEbeam[i].flg==ON)// 敵弾幕が存在していれば
{
if (gEbeam[i].x+EBEAM_XSIZE > gShip.x && // 敵弾幕の右>プレイヤーの左
gEbeam[i].x < gShip.x+SHIP_XSIZE &&// 敵ビームの左<プレイヤーの右
gEbeam[i].y+EBEAM_YSIZE > gShip.y && //敵弾幕の 下>プレイヤーの上
gEbeam[i].y < gShip.y+SHIP_YSIZE ) //敵弾幕の 上<プレイヤーの下
{
gEbeam[i].flg = OFF; // 敵弾幕が存在しない
gShip.hp--; // プレイヤーのHP減少
gShip.cnt=1; // プレイヤーをダメージ中に
}
}
}
}


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


Name: 管理人 [URL]  ..伝説のハッカー(393,645ポイント)   Date: 2007/08/27(月) 06:45   No:10061     
Title: Re:シューティングサンプルプログラムを見たのですが・・・    
弾幕との当たり判定は三平方の定理を利用すればいいですよ!
弾の当たり判定距離を.distか何か構造体に用意しておき、例えば10とか入れておきます。
プレイヤーの当たり判定範囲も.distか何か構造体に用意しておき、例えば15とか入れておきます。


(弾.x-プレイヤー.x)*(弾.x-プレイヤー.x) + (弾.y-プレイヤー.y)*(弾.y-プレイヤー.y) < (弾.dist+プレイヤー.dist)*(弾.dist+プレイヤー.dist)

この条件にマッチする時こそ、弾と自機の距離が25以内なのであたったと判定できますよ!
簡単な方法は総当りで判定させていくことですが、弾幕数が多くなってくると総当りで判定していると毎回数十万をこえる比較が必要になってくる場合も多くなってくるので、
もし本格的に作るなら発射した弾は登録して使うなど、工夫してみてください。


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

Name: はらわた宏  ..ぴよぴよ(422ポイント)   Date: 2007/08/27(月) 21:51   No:10067     
Title: Re:シューティングサンプルプログラムを見たのですが・・・    
管理人様ありがとうございます。

もう少し聞きたいのですが実際の処理としてはどの項目にどう組み込めばいいのでしょうか?
その辺も理解に苦しんでいるので大まかな処理を記述していただけるとありがたいのですが・・・


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

Name: 管理人 [URL]  ..伝説のハッカー(393,750ポイント)   Date: 2007/08/30(木) 00:29   No:10077     
Title: Re:シューティングサンプルプログラムを見たのですが・・・    
すみません、現在なかなかPCが手元にないもので(_ _|||)
関数を呼ぶ場所は最初のうちはどこでもいいと思いますよ。
極端な話、描画した後計算したとしても、次のターンで描画しなおされるわけですから。
判定する関数を一つ作っておき、自分の好きなところからお呼びいただければ大丈夫だと思います。


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



Name: tkmakwins15 [URL]  ..上級者(16,492ポイント)   Date: 2007/08/29(水) 11:05   No:10070       
Title: ロケールの設定について    
C++で、setlocale関数に"japanese_japan.51932"と指定してEUC_JPコードでテキストを扱おうと思ったのですが、
そのロケール設定が失敗します。

#include<cstdio>
#include<locale>
using namespace std;

int main()
{
wchar_t wstr[100]={L"EUC文書"};
FILE *file;
if(setlocale(LC_CTYPE,"japanese_japan.51932")==NULL){
printf("失敗");
return -1;
}
file=fopen("euc.txt","w");
if(file==NULL)return -1;
fputws(wstr,file);
fclose(file);
return 0;
}

環境はWinXP SP2,BCC5.5です。もしかしてWindowsではEUC_JPコードは使えないのでしょうか。
よろしくお願いします。


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


Name: たかぎ [URL]  ..初心者(5,553ポイント)   Date: 2007/08/29(水) 11:25   No:10071     
Title: Re:ロケールの設定について    
.51932ではなく、.20932を使ってみてください。


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

Name: tkmakwins15 [URL]  ..上級者(16,594ポイント)   Date: 2007/08/29(水) 13:14   No:10072     
Title: Re:ロケールの設定について    
設定はできたのですが、コンソール画面出力において日本語文字の文字化けが出ました。
 EUCコード が EUC・ウ。シ・ノ など
(半角カタカナの使用は申し訳ありません。文字化けを再現するために仕方なくこうしました)


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

Name: YuO  ..中級者(11,116ポイント)   Date: 2007/08/29(水) 13:38   No:10073     
Title: Re:ロケールの設定について    
コンソール画面で
CHCP 20932
としてみてください。

setlocaleによって,ワイド文字列をコードページ20932に従って従来コードに変換してコンソールへ出力しているため,
コンソールもコードページ20932にしておく必要があります。

fputwsなどのワイド文字列によるファイル入出力は,マルチバイト文字列 (ここではEUC) で入出力することに注意が必要です。


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

Name: tkmakwins15 [URL]  ..上級者(16,786ポイント)   Date: 2007/08/29(水) 14:08   No:10074     
Title: Re:ロケールの設定について    
>コンソール画面で
>CHCP 20932
>としてみてください。

これは、Windowsのコマンドプロンプトから CHCP 20932 と打てばいいのでしょうか。それとも、コマンドライン引数を
引き渡すようにして起動すればいいのでしょうか。

>fputwsなどのワイド文字列によるファイル入出力は,マルチバイト文字列 (ここではEUC) で入出力することに注意が必要です。

これはその出力先ファイルはEUCコード形式で記録されてるということですよね。


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



Name: DDK  ..ぴよぴよ(647ポイント)   Date: 2007/08/23(木) 19:19   No:10017       
Title: 動的にobjectのclassを判定したいですが    
お久しぶりです。

最近すごい悩んでいることあります。
何かというと
例えば、
void * pt;
を定義して

class A, class B, class C
のobject(即ちinstance)のpointerをptに代入して、
実行するとき(run time)に ptが指しているobjectが
class Aのものか、Bのものか確認できるようにしたいですが、
typeid だといつも「void *」として判定されるようですね。

なにかいい方法あるのでしょうか。

環境:VC2005

お願いします!








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


Name: tkmakwins15 [URL]  ..上級者(16,034ポイント)   Date: 2007/08/23(木) 19:45   No:10019     
Title: Re:動的にobjectのclassを判定したいですが    
void*はポインタを格納する以外に情報(型に関する)がないので、それは無理だと思います。型に関する情報と言うのは
ポインタを参照する時に型が分からないと参照できないので、int*のintには、これはint型へのポインタであるということ
を、識別させる役割があるのです。void*が参照できないのはそういうわけがあり、そこには何かしらのポインタ値以外の
情報はありません、なので、void*に入っているポインタ値から型を判別するのは、たぶん無理、または相当の難易度となると思います。


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

Name: バグ  ..熟練のプログラマー(54,872ポイント)   Date: 2007/08/23(木) 19:52   No:10021     
Title: Re:動的にobjectのclassを判定したいですが    
いっその事、各クラスに同名の判別用のメンバ関数を追加して戻り値で判別するとかどうでしょう…面倒か…(笑)

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

Name: tkmakwins15 [URL]  ..上級者(16,224ポイント)   Date: 2007/08/23(木) 22:26   No:10027     
Title: Re:動的にobjectのclassを判定したいですが    
>いっその事、各クラスに同名の判別用のメンバ関数を追加して戻り値で判別するとかどうでしょう…面倒か…(笑)
たぶんvoid*から取り出すにはキャストが必要だと思うんですけど。たぶんキャストが必要な時点でそれはできなくなると思います。


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

Name: たかぎ [URL]  ..初心者(5,194ポイント)   Date: 2007/08/24(金) 00:55   No:10034     
Title: Re:動的にobjectのclassを判定したいですが    
一度void*に変換してしまうと、元の型情報は失われてしまいます。
元の型情報を保存したいのであれば、別に管理する以外にありません。
例えば、

#include <utility>
#include <typeinfo>
using namespace std;

class A
{
...
} a;

std::pair<void*, const std::type_info*> x(&a, &typeid(a));


のようにです。


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

Name: DDK  ..ぴよぴよ(758ポイント)   Date: 2007/08/24(金) 11:35   No:10042     
Title: Re:動的にobjectのclassを判定したいですが    
みなさんのご返答をお伺いしますと
現時点のC++言語仕様自身には解決の仕組みはないということですね?
VC2005のような拡張したC++にも動的にobjectの中身(本当の所属class)を確定する文は
ないでしょうか。

VC2005の拡張仕様に詳しい方いらっしゃいましたら、一言でも
お願い致します





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

Name: たかぎ [URL]  ..初心者(5,353ポイント)   Date: 2007/08/24(金) 12:05   No:10044     
Title: Re:動的にobjectのclassを判定したいですが    
> VC2005のような拡張したC++にも動的にobjectの中身(本当の所属class)を確定する文は
> ないでしょうか。

拡張というのは、(原則として)規格厳密合致プログラムの挙動を変えることはありません。
その意味で、一度void*に変換してしまえば型情報は必ず落ちます。


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

Name: ほら  ..ぴよぴよ(24ポイント)   Date: 2007/08/24(金) 13:00   No:10045     
Title: Re:動的にobjectのclassを判定したいですが    
横取り申し訳ない、
void * pointer だめなら、
ほかに、何かなんでも入れられるようなもの(handler? container? ----名前は知らないだけど)
も存在するのでしょうか。


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

Name: たかぎ [URL]  ..初心者(5,368ポイント)   Date: 2007/08/24(金) 13:05   No:10046     
Title: Re:動的にobjectのclassを判定したいですが    
> ほかに、何かなんでも入れられるようなもの(handler? container? ----名前は知らないだけど)
> も存在するのでしょうか。

boost::anyがそうです。
これならポインタに限らず、コピーコンストラクタを持ち、代入可能なあらゆるオブジェクト型を扱えます。


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

Name: DDK  ..ぴよぴよ(877ポイント)   Date: 2007/08/24(金) 17:29   No:10053     
Title: Re:動的にobjectのclassを判定したいですが    
たかぎさん
お世話になっております。
>boost::anyがそうです。

1点だけ確認させていただきます。
boost::anyを利用する場合、代入してから、
ある時(run time)その代入しているobjectの所属classを知ることができますか。

宜しくお願いします


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

Name: たかぎ [URL]  ..初心者(5,434ポイント)   Date: 2007/08/24(金) 17:37   No:10054     
Title: Re:動的にobjectのclassを判定したいですが    
> ある時(run time)その代入しているobjectの所属classを知ることができますか。

できます。
boost::any::typeメンバ関数を使えば、そのとき格納されているオブジェクトの型に応じた、std::type_infoのconst参照を返します。


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

Name: DDK  ..ぴよぴよ(895ポイント)   Date: 2007/08/27(月) 09:11   No:10062 解決!     
Title: Re:動的にobjectのclassを判定したいですが(お礼)    
たかぎ さま
よくわかりました。
最終的な決め手はやはりtype_infoですね!

ありがとうございました


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



Name: ごぜん  ..ぴよぴよ(192ポイント)   Date: 2007/08/25(土) 06:30   No:10055       
Title: プロセス一覧取得    
初めまして、ごぜんと申します。

環境
Linux RedHat ES

現在、オラクルにアクセスする、PG群を作成しており、接続数の関係から、
起動している関連PG数を取得して、一定以上ならば起動を制限するために、
プロセス一覧を取得したいと考えております。

現状、/proc/下のディレクトリーを取得し、PID以下のstateから
情報を取得しようかと思っております。

他に、よい方法などありましたら、教えてください。


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


Name: たかぎ [URL]  ..初心者(5,481ポイント)   Date: 2007/08/25(土) 10:33   No:10056     
Title: Re:プロセス一覧取得    
セマフォは使えないのですか?
http://www.linux.or.jp/JM/html/LDP_man-pages/man7/sem_overview.7.html


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

Name: ごぜん  ..ぴよぴよ(245ポイント)   Date: 2007/08/26(日) 22:14   No:10058 解決!     
Title: Re:プロセス一覧取得    
たかぎさん、レスありがとうございます。

セマフォですか。恥ずかしいかな初耳です。
テスト環境が、現状ないので、何ともいえませんが、
機能的に実現が出来そうです。

ありがとうございます。


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



Name: Chii☆  ..かけだし(1,129ポイント)   Date: 2007/08/24(金) 15:25   No:10048       
Title: 無題    
いつもお世話になってます!!!
Chii☆です。

VC++の
ReadStringでファイルから読み込みをしたいのですが、
ReadStringで読み込んだものをどうすればchar型に
の配列に格納できるのでしょうか??



char ss[500];
int i = sizeof(ss);

CStdioFile fin( mydlg.GetPathName(), CFile::modeRead );

(fin.ReadString(ss,i);



どなたかご教授下さぃ!!

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


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


Name: Blue  ..かけだし(2,388ポイント)   Date: 2007/08/24(金) 15:33   No:10049     
Title: Re:無題    
>VC++の
って2005でしょうか?

2005でなければ、プロジェクトのプロパティをいじっていなければそのコードで
char型配列で値が取れるはずですが、、、


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

Name: Chii☆  ..かけだし(1,261ポイント)   Date: 2007/08/24(金) 15:42   No:10050     
Title: Re:無題    
解答ありがとうございます!!!

VC++ 6.0を使っています。


>2005でなければ、プロジェクトのプロパティをいじっていなければそのコードで
>char型配列で値が取れるはずですが、、、


プロジェクトのプロパティのどこの部分でしょうか??
基本的にはいじってぃないはずですが。。。もしかしたら。。

ちなみにcharではなくCStringでは正常に値を取得できました。

宜しくお願いします!!


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

Name: Blue  ..かけだし(2,420ポイント)   Date: 2007/08/24(金) 15:58   No:10051     
Title: Re:無題    
これって単に
>(fin.ReadString(ss,i);
の頭の ( がおかしいだけとか?


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

Name: Chii☆  ..かけだし(1,351ポイント)   Date: 2007/08/24(金) 16:31   No:10052     
Title: Re:無題    
Blueさん

そうでした^^;

私の注意不足で申し訳ありませんでした。

こんな問題に丸1日もかかってしまいました・・orz

ありがとうござぃました!!!


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



Name: まだ  ..ぴよぴよ(342ポイント)   Date: 2007/08/23(木) 15:43   No:10015       
Title: 変数のスコープなんですけど    
早速ですが
例えば、
for(int j; j<N; j++){
.....;
}

のような文で、loop変数jの定義はいったいforの中にあるとみなすべきか
for文の外にあるとみなすべきでしょうか。
あるいはどっかの設定(コンパイラ環境)に決めるもんでしょうか。
時々変わるような感じで、どういうわけでしょうか。
CとC++とは違う?
C++であっても、バージョーンにもよる?

頭混乱してます。

ご教授お願い致します








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


Name: Hermit  ..中級者(13,292ポイント)   Date: 2007/08/23(木) 19:22   No:10018     
Title: Re:変数のスコープなんですけど    
C++ では、昔は for の外でしたが、
現在は、for の中の様です。
確か、ANSI だったかの変更があってから変わったはずです。
どの時点だったかは忘れましたが、BC++ Ver5.5.1 でも中だけなので、だいぶ昔の事の様です。
#include <stdio.h>


int main()
{
for (int i = 0; i < 10; i++)
printf("%d\n",i);
// printf("%d\n",i); //ここを有効にするとエラーになるかどうかで分かりますよね。
return 0;
}

C では、gcc Ver3.4.2 で、
foo.c:5: error: 'for' loop initial declaration used outside C99 mode
となるので、ANSI C99 でもたぶんエラーだと思われます。


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

Name: tkmakwins15 [URL]  ..上級者(16,064ポイント)   Date: 2007/08/23(木) 19:50   No:10020     
Title: Re:変数のスコープなんですけど    
VC++2005ではエラーになりましたが。これは中ということになりそうです。

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

Name: Justy  ..ハッカー(155,844ポイント)   Date: 2007/08/23(木) 20:35   No:10022     
Title: Re:変数のスコープなんですけど    
 ちなみに MSVCはコンパイラオプションで挙動を選べます。 (/Zc:forScope)
http://www.ailight.jp/blog/sha256/archive/2005/05/04/6683.aspx


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

Name: toyo  ..入門者(4,700ポイント)   Date: 2007/08/23(木) 21:14   No:10023     
Title: Re:変数のスコープなんですけど    
Cでは変数の宣言ができるのはブロックの先頭だけですよね

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

Name: Justy  ..ハッカー(155,873ポイント)   Date: 2007/08/23(木) 21:34   No:10024     
Title: Re:変数のスコープなんですけど    
>ブロックの先頭だけ
 古いCなら。
 新しいCは C++と同じように宣言できます。

http://seclan.dll.jp/c99d/c99d07.htm#dt19990927


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

Name: Hermit  ..中級者(13,454ポイント)   Date: 2007/08/23(木) 22:12   No:10025     
Title: Re:変数のスコープなんですけど    
>新しいCは C++と同じように宣言できます。
for(int i = 0;;) の様な宣言は、
gcc Ver3.4.2 では出来ないんですけど、
前に書いたように、
error: 'for' loop initial declaration used outside C99 mode
となるのだけど・・・・
#include <stdio.h>

int main()
{
int i;
for (i = 0; i < 10; i++)
printf("%d\n",i);
int j;
for (j = 0; j < 10; j++)
printf("%d\n",j);
return 0;
}

の様にならコンパイル出来たんですが。
MinGW の gcc のバグでしょうか?


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

Name: tkmakwins15 [URL]  ..上級者(16,134ポイント)   Date: 2007/08/23(木) 22:23   No:10026     
Title: Re:変数のスコープなんですけど    
ちなみに、VC++2005の既定の状態でやりました。C99ならば制御文のブロック化が導入されたので、そのブロック
の中扱いということで良いんじゃないでしょうか。


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

Name: Justy  ..ハッカー(155,872ポイント)   Date: 2007/08/23(木) 22:34   No:10028     
Title: Re:変数のスコープなんですけど    
gcc Ver3.4.2 では出来ないんですけど
 -std=c99の指定は付けてますか?
 gccは記憶がたしかなら 3.3あたりから使えたような気がします


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

Name: Hermit  ..中級者(13,510ポイント)   Date: 2007/08/23(木) 22:40   No:10029     
Title: Re:変数のスコープなんですけど    
おお、そのオプションが必要だったのですね。
gcc は、Ver3 あたりからはデフォルトで ANSI C99 なのかと思っていた(^^;


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

Name: tkmakwins15 [URL]  ..上級者(16,269ポイント)   Date: 2007/08/24(金) 00:28   No:10033     
Title: Re:変数のスコープなんですけど    
たぶん…
C89→エラー
C99→中
従C++→たぶん外
現C++→たぶん中
ということになるんじゃないでしょうか?


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

Name: たかぎ [URL]  ..初心者(5,236ポイント)   Date: 2007/08/24(金) 00:59   No:10035     
Title: Re:変数のスコープなんですけど    
> C89→エラー
> C99→中
> 従C++→たぶん外
> 現C++→たぶん中

これであっています。
C++では、ARMでは外でしたが、標準C++では中になっています。
古い仕様(ARMとそれ以前)に準拠した処理系(代表的なのはVC6)では外になっています。


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

Name: まだまだ  ..入門者(3,483ポイント)   Date: 2007/08/24(金) 10:27   No:10038 解決!     
Title: お礼    
皆様
いい勉強になりました。

中か外か
これから変更されないように祈ります。

どうも有難うございました。






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

Name: たかぎ [URL]  ..初心者(5,271ポイント)   Date: 2007/08/24(金) 10:37   No:10039     
Title: Re:お礼    
> 中か外か
> これから変更されないように祈ります。

処理系のバグや、古い仕様の復刻版のようなものでない限り、今後変更される可能性はまずありません。

ところで、「外」になる古い処理系では、
#define for if(0);else for



といったマクロを定義して、強制的に「中」にするのが定番の手法です。


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

Name: まだまだ  ..入門者(3,626ポイント)   Date: 2007/08/24(金) 10:48   No:10040 解決!     
Title: 追伸    
>#define for if(0);else for
>といったマクロを定義して、強制的に「中」にするのが定番の手法です

すごいテクニックですね。
いつも勉強させていただいています。

でも、コンパイラスイッチで変更できるような仕様も含めて、
個人的には好ましくないような感じ、、、

また宜しくお願いします。


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

Name: GPGA  ..プログラマー(34,558ポイント)   Date: 2007/08/24(金) 11:21   No:10041     
Title: Re:追伸    
>C++では、ARMでは外でしたが、標準C++では中になっています。
現在仕事でARMを使用しているのですが、armcpp.exeでコンパイルを行ったところ、中と判断されました。
armcpp.exeに -v オプションがないので、正確なバージョンがわからないのですが
armcpp.exeのみで起動すると

ARM C++ Compiler, ADS1.2 [Build 838]
 
と表示されるので、おそらくVer1.2かと。


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

Name: たかぎ [URL]  ..初心者(5,313ポイント)   Date: 2007/08/24(金) 12:03   No:10043     
Title: Re:追伸    
> 現在仕事でARMを使用しているのですが、armcpp.exeでコンパイルを行ったところ、中と判断されました。

ARM違いです。
ここでいうARMは、The Annotated C++ Reference Manual(邦訳, 注解 C++リファレンスマニュアル)のことです。
http://www.research.att.com/~bs/arm.html


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

Name: GPGA  ..プログラマー(34,535ポイント)   Date: 2007/08/24(金) 14:53   No:10047     
Title: Re:追伸    
>ARM違いです。
ARM違いでしたか。


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



Name: kaka  ..ぴよぴよ(28ポイント)   Date: 2007/08/23(木) 23:45   No:10030       
Title: 無題    
C言語で関数「syslog_r」の戻り値を取得する方法を教えてください。

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


Name: box  ..比類無きプログラマー(84,784ポイント)   Date: 2007/08/24(金) 00:01   No:10031     
Title: Re:無題    
その関数の「引数の並び」と「戻り値の型」を教えてください。


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

Name: kaka  ..ぴよぴよ(70ポイント)   Date: 2007/08/24(金) 00:16   No:10032     
Title: Re:無題    
引数の並び:syslog_r(int priority, struct syslog_data *data, const char *message,...);
戻り値の型:void
です。


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

Name: へろり  ..ぴよぴよ(311ポイント)   Date: 2007/08/24(金) 06:56   No:10036     
Title: Re:無題    
void型は規格上不完全型に分類されます。
故に件の関数の戻り値を取ることは出来ません。


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

Name: たかぎ [URL]  ..初心者(5,264ポイント)   Date: 2007/08/24(金) 10:20   No:10037     
Title: Re:無題    
そもそもsyslog_rは標準関数ではないので、まずは環境を明確にしてください。


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



Name: C言語勉強中!  ..ぴよぴよ(150ポイント)   Date: 2007/08/22(水) 13:00   No:9989       
Title: BGMについて    
 こんにちは。
 私は2〜3ヶ程月前に貴HPを発見し、C言語の勉強を始めました。とてもわかりやすく解説されているのでとてもありがたく活用させていただいております。

 私もゲームを作りたいと思い、今少しずつプログラムを組んでいるのですが、BGMを鳴らすところでいきずづまっ
てしまいました。

 始めは容量の少ない「midi」の音楽を鳴らそうと思い、「PlayMusic」関数を使って曲を流してみました。
 しかし、次の曲に切り替えようとすると、明らかに判るくらい間が空いてしまいました。
 そこで、曲を「ogg」にしてメモリに読み込ませて再生したら綺麗に音がつながりました。
 しかし、「ogg」や「mp3」のような圧縮されたデータは、メモリ上にどのように格納されているのでしょうか?曲の長さにもよるのでしょうが、展開された状態で入るのでしょうか?
 もしそうだとすると、あまりたくさんの曲データをいれてしまうととんでもないことになるので、対処法を考えない
といけません。皆さんがゲームを作るときはどのようにされているのでしょうか?
 是非アドバイスください。宜しくお願いします。


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


Name: Justy  ..ハッカー(151,490ポイント)   Date: 2007/08/22(水) 14:27   No:9990     
Title: Re:BGMについて    
「ogg」や「mp3」のような圧縮されたデータは、メモリ上にどのように格納されているのでしょうか?
 これは Dxライブラリの話と考えていいのでしょうか?

 仮にそうだとして、 PlayMusic()/PlaySound()関数の mp3/oggなどの再生は
内部で指定したファイルを丸ごとメモリに読み込んで、それから再生を始めます。

 再生処理そのものは DirectSoundで行っており、多分ですが再生している
ところより少し先を mp3/oggから生の wavに変換して順次再生しているはずです。

 なので、mp3/oggファイルそのものはメモリに展開されていますが、
直で再生可能なナマの wavへの展開は再生に必要な部分だけとなります。



もしそうだとすると、あまりたくさんの曲データをいれてしまうと
とんでもないことになるので
 ハードディスクの方はたくさん曲があると大変なことになるかもしれませんが、
PlayMusic()/PlaySound()に限って言えば、同時に1曲しか再生できない仕様になっていて、
その制限から、過去に再生していたデータはメモリ上から消していますので、
メモリ的には1曲分しか消費しません。
 なので、1曲が数十MB以上あるとかじゃない限り、そうそう心配はないかと思います。

(PlayMusic()ではなく、PlaySoundMem()などの自分でサウンドの状態を管理する場合は
勝手にメモリから消えたりはしないので注意が必要です。)


皆さんがゲームを作るときはどのようにされているのでしょうか?
 Dxライブラリはほとんどまともに使ったことがないので、参考になるかどうかわかりませんが。
 Midiにするか mp3にするかは音質とゲームの総容量と相談ですね。

 メモリに対する基本戦略はとりあえず本当に必要になるまで読み込まないか、
問答無用で全部最初に読み込んでおく、のどちらかになるかと思います。

 どちらも一長一短ですが、個人的には無駄なメモリを喰わない&後から
「メモリ食い過ぎ!」状態になって後悔する可能性が低そうな前者の手法が
いいと思います。


 それからサウンドの制御で PlayMusic()/PlaySound()の一発コールで
再生ができるタイプと PlaySoundMem()などのサウンドハンドルを用いるタイプと
2つの選択肢がありますが、いろいろ考えると細かくパラメータを制御できる
サウンドハンドルを用いた方法の方がいいでしょう。

 ただ、サウンドデータのメモリへの読み込みに LoadSoundMem()を使ってしまうと
曲ファイルの読み込みが完了復帰(読み込みが全て完了するまでメインの処理が
全て停まる)で処理されるので、スレッドを立てて自前でメインの処理を止めないように
メモリに読み込み、LoadSoundMemByMemImage()を使ってサウンドハンドル化する、
という方法にする必要がありそうです。


 あとはゲームにおける曲の切り換えはフェードイン・フェードアウトを伴うことが
比較的多いかと思います。
 更には同時にフェードイン・フェードアウトが発生することもありそうです。

 例えば曲1(M1)を再生中に曲2(M2)の曲を再生する場合、M2をメモリに
読み込んでから M1の曲のボリュームを 100%から 0%に向かって下げつつ、
同時に M2のボリュームを 0%から 100%に上げる、とか。

 なので、曲制御のシステムは(ゲームで使われそうな)そういう用途を念頭に置いて
設計した方がいいと思います。


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

Name: C言語勉強中!  ..ぴよぴよ(453ポイント)   Date: 2007/08/22(水) 15:54   No:9992     
Title: Re:BGMについて    
 早速の回答ありがとうございます!
 私はDXライブラリを使用しています。

>サウンドデータのメモリへの読み込みに LoadSoundMem()を使ってしまうと
曲ファイルの読み込みが完了復帰(読み込みが全て完了するまでメインの処理が
全て停まる)で処理される

 音楽ファイルを必要な時にのみ読込むようにすると、目に見える形で動きが止まっていたのはそういうことだった
んですね。

>メインの処理を止めないようにメモリに読み込み

 ファイルから数バイト読み込んで、メインループに戻すという作業を繰り返す・・・ということでOKでしょうか?
こういう作業はまだやったことがないのですが、難しそうですね。


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

Name: Justy  ..ハッカー(152,225ポイント)   Date: 2007/08/22(水) 17:18   No:9995     
Title: Re:BGMについて    
ファイルから数バイト読み込んで、メインループに戻すという作業を繰り返す・・・ということでOKでしょうか?
 それでもいいのですが、それだと1回に何バイト読み込めばいいのかを決めるのに苦労しそうです。

 なので「マルチスレッド」を使って、メインの処理に影響の無い範囲で
メインの処理と並列に(厳密には並列ではないですが)ファイルを読むと
いいんじゃないだろうか、ということです。
 詳しくはマルチスレッド、CreateThreadなどでググってみて下さい。

 ただ、ちょっと難しい処理ですし、ゲームの本筋とは関係ない部分もないので、
ここで悩むよりゲーム本編の処理で悩んだ方がよっぽど為になります。
 最初の内は気にしないで普通に(多少画面が止まっても気にしないで)組んでみた方が
いいと思います。


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

Name: C言語勉強中!  ..ぴよぴよ(470ポイント)   Date: 2007/08/23(木) 17:27   No:10016     
Title: Re:BGMについて    
 さっそく「マルチスレッド」でググッてみました。
 書いてある事(理屈)は何となくわかるのですが、難しそうですね。
  Justy さんのおっしゃる通り、とりあえず今は後回しにします。
 もう少しメインの処理をしっかりさせて、経験を積んでから勉強しなおしたいと思います。
 ありがとうございました。


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



Name: まだ  ..ぴよぴよ(302ポイント)   Date: 2007/08/22(水) 14:54   No:9991       
Title: 違うclass間のメンバー関数の代入に関する質問    
暑中お見舞い申し上げます

あるクラスのobjectから別のクラスに関数のポインターを設定したいですが、
繰り返し試してみたが、いつもコンパイラエラーでした。

具体に、クラスclassAのコンストラクタの中に
クラスBのobjectを生成します。

classA{

void (*funcp)(int,char);

};

classB{

public:
void bfunc(int i, char c)
{
.....
}

};



classA:: classA{

classB *objb = new classB();

funcp = objb->bfunc;

}

これでうまくできなかったし、ほかのやりかたもだめだったんです。

宜しくお願い申し上げます




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


Name: Justy  ..ハッカー(151,874ポイント)   Date: 2007/08/22(水) 16:36   No:9993     
Title: Re:違うclass間のメンバー関数の代入に関する質問    
 classB::bfuncは「メンバ関数」であって、「関数」ではありません。
 なので、根本的に関数へのポインタである funcpに入れることはできません。

 そこで、このメンバ変数を関数へのポインタから classBクラスのメンバ関数へのポインタに
修正する必要があります。
 又、他にもメンバ関数へのポインタの取り出し方とかも間違っています。




#include <iostream>

class classB
{
public:
void bfunc(int, char)
{
std::cout << "classB::bfunc()" << std::endl;
}
};

class classA
{
public:
classA()
{
std::cout << "classA::classA()" << std::endl;
m_pb = new classB();
m_funcp = &classB::bfunc;
}



void callB(int i, char c)
{
std::cout << "classA::callB()" << std::endl;
if(m_pb && m_funcp)
(m_pb->*m_funcp)(i, c);
}

private:
classB * m_pb;
void (classB::*m_funcp)(int,char);
};

int main(int , char *[])
{
classA a;
a.callB(100, 'A');
return 0;
}


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

Name: Blue  ..かけだし(1,723ポイント)   Date: 2007/08/22(水) 16:38   No:9994     
Title: Re:違うclass間のメンバー関数の代入に関する質問    
>void (*funcp)(int,char);
関数の型が違います。(static関数ならあっているけど。)
また仮に代入できたとしても、実行時にはclassBのインスタンスが必要になります。
(だったら、関数ポインタにして入れる必要性がなさそうかと)

>classB *objb = new classB();
objbはいつdeleteするのでしょうか?
メンバ変数にしてなくてもいい?


一応類似スレ
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200707/07070008.txt


一応適当に。
#include <iostream>


class B
{
public:
void func(int i, char c) { std::cout << "B::func" << std::endl; }
};

class A
{
B m_b;
void (B::*m_func)(int, char);

public:
A() : m_func(m_b.func) {}
void Test() { (m_b.*m_func)(0, 0); }
};


int main()
{
A a;
a.Test();

return 0;
}



追記)


むっちゃかぶりました。orz



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

Name: まだまだ  ..入門者(2,905ポイント)   Date: 2007/08/22(水) 17:29   No:9996     
Title: Re:違うclass間のメンバー関数の代入に関する質問    
さっそくご返答ありがとうございます。

こちらの説明不足で申し訳ございませんが、
関数の所属classについてclassAは予め分かるわけではないのです。
(そもそも、「無所属」のグローバル的な関数かもしれません)
したがって、classAの中にclassBに関する情報を入れるのは不可能です。

条件を改めてから
もう一度ご教授お願いできれば幸いと思います。


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

Name: Blue  ..かけだし(1,857ポイント)   Date: 2007/08/22(水) 17:39   No:9997     
Title: Re:違うclass間のメンバー関数の代入に関する質問    
C++の言語仕様上無理そうだけど。
# VS2005のC++/CLIのデリゲードであれば可能なのになぁと。


>classB{
>
>public:
>void bfunc(int i, char c)
>{
>.....
>}
>
>};
のbfuncはBのインスタンスを必要としない(メンバ変数やメンバ関数を使わない)のであれば
static関数化してしまえば実現は可能でしょうけど。(というのはもう既に指摘済み)


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

Name: Blue  ..かけだし(2,209ポイント)   Date: 2007/08/22(水) 17:56   No:9998     
Title: Re:違うclass間のメンバー関数の代入に関する質問    
別案として引数としてインスタンスを渡すようにして、使う側でキャストするとか。
(というかこんなのだったら既定クラスを作って仮想関数呼ぶほうが普通だろうと。)

#include <iostream>


class A
{
public:
void (*m_func)(void* data);

void Exec(void* data)
{
(*m_func)(data);
}
};

class B
{
public:
static void func(void* data)
{
((B*)data)->Hoge();
}
private:
void Hoge()
{
std::cout << "B::Hoge" << std::endl;
}
};

class C
{
public:
static void func(void* data)
{
((C*)data)->Hoge();
}
private:
void Hoge()
{
std::cout << "C::Hoge" << std::endl;
}
};

int main()
{
A a;
B b;
C c;

a.m_func = b.func;
a.Exec(&b);

a.m_func = c.func;
a.Exec(&c);

return 0;
}



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

Name: Justy  ..ハッカー(153,155ポイント)   Date: 2007/08/22(水) 18:06   No:9999     
Title: Re:違うclass間のメンバー関数の代入に関する質問    
というかこんなのだったら既定クラスを作って仮想関数呼ぶほうが普通だろうと
 これがベストでしょうね。


そもそも、「無所属」のグローバル的な関数かもしれません)
したがって、classAの中にclassBに関する情報を入れるのは不可能です
 つまり呼び出し時の引数と戻り値が同じだけど、グローバルな関数かもしれないし
クラスのメンバかもしれない、と。
 
 んー、ポインタではないですが、boostを使えば見た目近いことは
出来なくはないですが、さすがにちょっと・・・。


#include <iostream>

#include <boost/function.hpp>
#include <boost/bind.hpp>

class classB1
{
public:
void b1func(int i, char c)
{
std::cout << i << " " << c << " classB1::bfunc()" << std::endl;
}
};

class classB2
{
public:
void b2func(int i, char c)
{
std::cout << i << " " << c << " classB2::bfunc()" << std::endl;
}
};

void func(int i, char c)
{
std::cout << i << " " << c << " ::func()" << std::endl;
}


class classA
{
public:

template <typename T>
void register_function(T func)
{
m_function = func;
}

void call(int i, char c)
{
if(m_function)
m_function(i, c);
}

private:
boost::function<void (int , char)> m_function;
};

int main(int , char *[])
{
classA a;
a.register_function(&func);
a.call(1, 'A');

classB1 b1;
a.register_function(boost::bind(&classB1::b1func, &b1, _1, _2));
a.call(2, 'B');

classB2 b2;
a.register_function(boost::bind(&classB2::b2func, &b2, _1, _2));
a.call(3, 'C');

return 0;
}


 実行すると


1 A ::func()
2 B classB1::bfunc()
3 C classB2::bfunc()


 となります。


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

Name: まだまだ  ..入門者(3,433ポイント)   Date: 2007/08/22(水) 19:44   No:10001     
Title: Re:違うclass間のメンバー関数の代入に関する質問    
Blue様、Justy様
丁寧なご指導本当にありがとうございます。

どの例も大変参考になります。

なぜこんなことをやれたいといいますと、
classAは基本機能の提供者として、いろんな不特定のクライアントに利用されたいです。
ただ、ほんの一部の処理はクライアント側に自由に定義できるようにしなければなりません。
この「ほんの一部の処理」を関数の形でまとめて、各クライアント自身が用意しております。

classAとクライアントclass B, calss C, class D...の間は処理レベルのinterface (即ち関数)しかお互い知らないので、
お互いに継承関係になりません(作れません)。
main()関数の中で、はじめてお互いが関数レベル(処理レベル)での交流(関数ポインターの引渡し)ができるようにしたいですが、、、

ごく普通な要望だと思いましたが、C++という超パワフルな言語はこんなに苦手?
知りませんでした。

Justy様へ
boostをご紹介下さって、そして詳しい例コードも組んでいただきまして
非常に感謝します。
ただ、私はすぐboostを利用できるようなレベルになっていないし、時間かけて勉強する必要です。

また何かアイディアあれば是非お願いします。


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

Name: Justy  ..ハッカー(155,643ポイント)   Date: 2007/08/22(水) 23:08   No:10002     
Title: Re:違うclass間のメンバー関数の代入に関する質問    
ごく普通な要望だと思いましたが、C++という超パワフルな言語はこんなに苦手?
 どういう状況なのか今ひとつわかりませんが、関数は関数ポインタだけで済みますが、
メンバ関数はインスタンスとメンバ関数ポインタの2つが必要になりますし、C++は型が強い(?)ので
なかなか共通化するのは面倒なんですよね。


また何かアイディアあれば是非お願いします
 が、手がないわけではありません。
 これならどうでしょう?
 仮想関数をうまく使って、メンバ関数タイプと関数タイプと内部では分けていますが、
インターフェースは共通化されています。




#include <iostream>

// ----- テスト用クラス・関数
class classB1
{
public:
void b1func(int i, char c)
{
std::cout << i << " " << c << " classB1::bfunc()" << std::endl;
}
};

class classB2
{
public:
void b2func(int i, char c)
{
std::cout << i << " " << c << " classB2::bfunc()" << std::endl;
}
};

void NormalFunc(int i, char c)
{
std::cout << i << " " << c << " ::NormalFunc()" << std::endl;
}


// ----- 汎用呼び出しクラス
class Caller
{
public:

// コンストラクタ
Caller() : m_holder() {}

// デストラクタ
~Caller()
{
delete m_holder;
}

// メンバ関数設定
template <class T>
void SetFunction(T &instance, void (T::*func)(int, char))
{
delete m_holder;
m_holder = new MFuncHolder<T>(instance, func);
}

// 関数設定
void SetFunction(void (*func)(int, char))
{
delete m_holder;
m_holder = new FuncHolder(func);
}

// 呼び出し
void Execute(int i, char c)
{
if(m_holder)
m_holder->Execute(i, c);
}


private:

class HolderBase
{
public:
virtual ~HolderBase()
{
}

virtual void Execute(int, char) = 0;
};

// メンバ関数用
template<class T>
class MFuncHolder
: public HolderBase
{
public:
MFuncHolder(T &instance, void (T::*func)(int, char))
: m_instance(instance), m_pMFunc(func)
{
}

public:
virtual void Execute(int i, char c)
{
if(m_pMFunc)
(m_instance.*m_pMFunc)(i, c);
}

private:
T& m_instance;
void (T::*m_pMFunc)(int, char);

MFuncHolder& operator=(const MFuncHolder &);
};

// 関数用
class FuncHolder
: public HolderBase
{
public:
FuncHolder(void (*func)(int, char))
: m_pFunc(func)
{
}

public:
virtual void Execute(int i, char c)
{
if(m_pFunc)
(*m_pFunc)(i, c);
}

private:
void (*m_pFunc)(int, char);
};

HolderBase * m_holder;

// 一応コピー禁止
Caller& operator=(const Caller &);
Caller(const Caller &);
};


int main(int , char *[])
{
Caller caller;

caller.SetFunction(&NormalFunc);
caller.Execute(1, 'A');

classB1 b1;
caller.SetFunction(b1, &classB1::b1func);
caller.Execute(2, 'B');

classB2 b2;
caller.SetFunction(b2, &classB2::b2func);
caller.Execute(3, 'C');

return 0;
}



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

Name: Blue  ..かけだし(2,296ポイント)   Date: 2007/08/23(木) 00:05   No:10006     
Title: Re:違うclass間のメンバー関数の代入に関する質問    
質問者ではないですが、カナリ勉強になりました。

VC++6.0じゃ
>void (T::*m_pMFunc)(int, char);
が理解できないようですね。
(VS2005でビルド/実行しました。
ほかのコンパイラは昔は入れていたけどOS入れなおしたときに面倒になって入れていないw)


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

Name: Justy  ..ハッカー(155,724ポイント)   Date: 2007/08/23(木) 00:22   No:10007     
Title: Re:違うclass間のメンバー関数の代入に関する質問    
 あー、うちは 7.1で、6.0は持ってないので判りませんが・・・6.0では厳しいかもしれませんねぇ。


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

Name: Blue  ..かけだし(2,349ポイント)   Date: 2007/08/23(木) 00:29   No:10008     
Title: Re:違うclass間のメンバー関数の代入に関する質問    
ついでに、boost::functionも6.0じゃ理解できなかったです。

boost::function2<void, int , char>
として対応。


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

Name: Justy  ..ハッカー(155,796ポイント)   Date: 2007/08/23(木) 00:31   No:10009     
Title: Re:違うclass間のメンバー関数の代入に関する質問    
> ついでに、boost::functionも6.0じゃ理解できなかったです。
 たしかに。


# あ、あと本格的に使うなら operator=の定義とか、コンストラクタ周りとか、
CV修飾されたメンバ関数対応とかもしないといけないですね。


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

Name: たかぎ [URL]  ..入門者(4,624ポイント)   Date: 2007/08/23(木) 10:50   No:10011     
Title: Re:違うclass間のメンバー関数の代入に関する質問    
やりたいことの確認ですが、classAと他のクラスは動的に結びつける必要があるのでしょうか?

静的に結びつけるだけであれば、Boost C++ Librariesを使わなくても、標準ライブラリのmem_funファミリやbind1st/bind2nd等を駆使すればどうにかなります。
動的にやりたいなら、原則としてコールバック側を仮想関数にするしかありません(もっと強引な方法はありますが...)。

デリゲートと同じことをしたいなら、boost::signalsを使うのが一番です。

> ただ、私はすぐboostを利用できるようなレベルになっていないし、時間かけて勉強する必要です。

リファレンスを読む手間を惜しむなら、何倍もの労力を払って自力で実装するしかありません。
急ぎであれば、なおさら既存のライブラリを使うべきです。

> ごく普通な要望だと思いましたが、C++という超パワフルな言語はこんなに苦手?
> 知りませんでした。

苦手というより、やりたいことがはっきりしないので、適切なアドバイスが出来ないだけでは?
それから、デリゲートはC++では必ずしも普通の要望ではありません。



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

Name: たかぎ [URL]  ..初心者(5,074ポイント)   Date: 2007/08/23(木) 11:15   No:10012     
Title: Re:違うclass間のメンバー関数の代入に関する質問    
一応、静的にも動的にもなるように考えてみました。
望んでいることと違うようならご指摘ください。

#include <cstdio>

class B
{
public:
void bfunc(int i, char c)
{
std::printf("B::bfunc(%d, %c);\n", i, c);
}
};

void bfunc(int i, char c)
{
std::printf("::bfunc(%d, %c);\n", i, c);
}

class defalt_policy
{
protected:
~defalt_policy() {}
};

class polymorphic_A
{
public:
virtual void operator()(int i, char c) = 0;
virtual ~polymorphic_A() {}
};

template<class T, class P = defalt_policy>
class A : public P
{
T o_;
void (T::*pmf_)(int, char);
public:
explicit A(void (T::*pmf)(int, char)) : pmf_(pmf) {}
void operator()(int i, char c) { (o_.*pmf_)(i, c); }
};

template<class P>
class A<void, P> : public P
{
void (*pf_)(int, char);
public:
explicit A(void (*pf)(int, char)) : pf_(pf) {}
void operator()(int i, char c) { pf_(i, c); }
};

int main()
{
A<B> a1(&B::bfunc);
a1(123, 'a');

A<void> a2(&::bfunc);
a2(456, 'b');

polymorphic_A* pa1 = new A<B, polymorphic_A>(&B::bfunc);
(*pa1)(100, 'c');
delete pa1;

polymorphic_A* pa2 = new A<void, polymorphic_A>(&::bfunc);
(*pa2)(200, 'd');
delete pa2;

return 0;
}


これなら、後からいくらでも異なるクラスと関連付けられますし、非メンバ関数でも同じように扱えます(第1テンプレート引数にvoidを指定)。


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

Name:  ..ぴよぴよ(179ポイント)   Date: 2007/08/23(木) 15:19   No:10014 解決!     
Title: Re:違うclass間のメンバー関数の代入に関する質問    
Justy様、たかぎ様

大変お世話になっております。それに
みなさんのわざの高さにいつも感服します。
いただいているサンプルコードをいまの問題の解決に如何にうまく利用するかを
現在一生懸命に考えています。

本件に限らず、たくさんの英知に富んでいるコードを
これからも是非ご参考させていただきたいのです。
(大体分かったつもりですが、その真髄を完全に身につけるには少々時間かかりそうです)

boostに関してはいずれ利用したいのです。
C++だけではやはり物足りない感じ(MFCには少々抵触感あります)。

皆さんに心からお礼を申し上げます。


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



Name: Chii☆  ..ぴよぴよ(952ポイント)   Date: 2007/08/22(水) 19:02   No:10000       
Title: VC++のリストビュー カラムについて・・    
質問お願ぃ致します。

VC++6.0をしようしています。

列を作り、列タイトルを表示したいのですが、表示されません。。

どこがおかしいかご教授下さぃ!!!

もしくはもっと良いやり方があるのならばご教授願います。

宜しくお願いしまぁす!!!

以下、ソース


*m_contentsはリストビューのメンバ変数です☆

LVCOLUMN myColumn;

myColumn.mask = LVCF_TEXT|LVCF_WIDTH;
RECT myRect;
m_contents.GetClientRect(&myRect);
myColumn.cx = (myRect.right - myRect.left / 3);
myColumn.pszText = "No.";
m_contents.InsertColumn(0,&myColumn);
m_contents.SetItem();


myColumn.cx = (myRect.right - myRect.left)* 2 / 3;
myColumn.pszText = "内容";
m_contents.InsertColumn(1,&myColumn);


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


Name: へろり  ..ぴよぴよ(215ポイント)   Date: 2007/08/23(木) 08:42   No:10010     
Title: Re:VC++のリストビュー カラムについて・・    
> 質問お願ぃ致します。
>
> VC++6.0をしようしています。
>
> 列を作り、列タイトルを表示したいのですが、表示されません。。
>
> どこがおかしいかご教授下さぃ!!!
>
> もしくはもっと良いやり方があるのならばご教授願います。
>
> 宜しくお願いしまぁす!!!
>
> 以下、ソース
>
>
そのリストビューは、スタイルにLVS_REPORTを持っていますか。


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

Name: Chii☆  ..かけだし(1,013ポイント)   Date: 2007/08/23(木) 13:37   No:10013 解決!     
Title: Re:VC++のリストビュー カラムについて・・    
へろりさんありがとうございました。

おかげ様で解決しました。


また何かありましたら宜しくお願い致します!!!



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



Name:  ..中級者(10,034ポイント)   Date: 2007/08/22(水) 23:15   No:10003       
Title: データの読み出しでアクセス違反が起こります…    

main.cpp内で敵キャラ(E)のHPを参照しようとしたところ、エラーになってしまいます。
Battle.cppの方ではきちんと参照されているので、値が無いわけではないと思うのですが、
RQ.exe の 0x004162fe で初回の例外が発生しました : 0xC0000005: 場所 0x00000064 を読み込み中にアクセス違反が発生しました。 。
RQ.exe の 0x004162fe でハンドルされていない例外が発生しました : 0xC0000005: 場所 0x00000064 を読み込み中にアクセス違反が発生しました。 。

とエラーが出てきます。output.cが呼び出されてそこでエラーとなっているのですが、その内容はさっぱり分かりません。

--main.cpp--
for(i=0; i <4; i++){
printf("E[%d].HP = %s\n", i, E[i].HP);
}

で読み出そうとしています。

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


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


Name: Justy  ..ハッカー(155,695ポイント)   Date: 2007/08/22(水) 23:23   No:10004     
Title: Re:データの読み出しでアクセス違反が起こります…    
 その原因なのかどうかはわかりませんが、%sで表示しようとしているメンバ HPは文字列なのですか?

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

Name:  ..中級者(10,063ポイント)   Date: 2007/08/22(水) 23:28   No:10005 解決!     
Title: Re:データの読み出しでアクセス違反が起こります…    
%sが原因でした。

つまらない質問をしてしまい申し訳ありませんでした。

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


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



Name:  ..中級者(9,604ポイント)   Date: 2007/08/21(火) 22:01   No:9984       
Title: ファイル操作で構造体をしよう…    

構造体を使用して、敵と味方のデータを簡単に変更できる様にするため、テキストファイルからデータを読込む
そして、配布時にデータを変更されないように .dat ファイルとして保存してそれから読込むようにしようと考えてやっています。
.dat ファイルへの書き込みは character.cpp で成功していると思うのですが、読込んでもらえません。
読込み予定ファイルは、chara.dat enemy.dat です。
main.cppで enemy_status(); と chara_status(); の順番を逆にすると表示がエラーになるのが関係しているのかもしれませんが、
そちらのエラーの原因も見つけることが出来ませんでした。

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

--以下問題があると思われそうなところ--

--Save.cpp--内の関数(読込み処理を行っているところ)--
void Load_Every_Status()
{
FILE *fout_chara, *fout_enemy;
char r_f_c_name[] = "chara.dat";
char r_f_e_name[] = "enemy.dat";
int count;
int i;

if( (fout_chara = fopen(r_f_c_name, "r")) == NULL) {
printf("キャラクターデータの読み込みに失敗しました。");
exit(1);
}
if( (fout_enemy = fopen(r_f_e_name, "r")) == NULL) {
printf("敵データの読み込みに失敗しました。");
exit(1);
}

fseek(fout_chara, -1L, SEEK_END);
fscanf(fout_chara, "%d", &count);
#if SAVE
printf("c_count = %d\n",count);
#endif
fread(C, sizeof(STATUS), count, fout_chara);

fseek(fout_enemy, -1L, SEEK_END);
fscanf(fout_enemy, "%d", &count);
#if SAVE
printf("e_count = %d\n",count);
#endif
fread(E, sizeof(STATUS), count, fout_enemy);

fclose(fout_chara);
fclose(fout_enemy);
}


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


Name: Justy  ..ハッカー(149,986ポイント)   Date: 2007/08/21(火) 22:39   No:9985     
Title: Re:ファイル操作で構造体をしよう…    
読込んでもらえません
 各 freadの戻り値(読み込んだデータ数)を見るとわかりますが、0になっており、
全く読めていません。

 理由は fseek(fout_chara, -1L, SEEK_END) によってストリーム内のファイルの位置が最後の1つ前にあり、
更に countを読み込んだ後はファイルの一番最後を指している状態になっています。
 この状態で count分の情報を読みとろうと思っても、もう読み込むものがありません。

 なので、countを読み込んだ後、位置をファイルの先頭に戻しておく必要があります。


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

Name: Justy  ..ハッカー(150,050ポイント)   Date: 2007/08/21(火) 22:59   No:9986     
Title: Re:ファイル操作で構造体をしよう…    
 あと、/順番を逆にすると云々というのは、エネミーのバッファが数 (ENEMY_TOTAL)が3しかないのに
4つ分のデータを読みとっているのが原因ではないでしょうか。


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

Name:  ..中級者(9,573ポイント)   Date: 2007/08/22(水) 05:44   No:9988 解決!     
Title: Re:ファイル操作で構造体をしよう…    
ご回答ありがとうございます。

言われている通り治したところうまくいきました。
本当にありがとうございました。


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



Name: ゆら  ..ぴよぴよ(329ポイント)   Date: 2007/08/20(月) 04:56   No:9966       
Title: 5. 分割コンパイル    
シューティングゲームの館の5の分割コンパイルを行ったところ
下記のようなエラーが出てしまうのですが何が原因なのでしょうか?

LIBCMT.lib(wincrt0.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。


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


Name: toyo  ..入門者(4,676ポイント)   Date: 2007/08/21(火) 12:58   No:9974     
Title: Re:5. 分割コンパイル    
Windowsアプリケーションとコンソールアプリケーションの違いでしょう
WinMain( )関数のプログラムはWindowsアプリケーションでコンパイル
main( )関数のプログラムはコンソールアプリケーションでコンパイルしないといけません。


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

Name: 管理人 [URL]  ..伝説のハッカー(393,355ポイント)   Date: 2007/08/21(火) 17:22   No:9978     
Title: Re:5. 分割コンパイル    
プロジェクトの新規作成においてWindowsアプリケーションにしなかったのかもしれませんね。
後の章でプロジェクトごとダウンロードできますので、どうしても解決できなければそちらのプロジェクトを利用してみてください。


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

Name: ゆら  ..ぴよぴよ(388ポイント)   Date: 2007/08/21(火) 23:34   No:9987 解決!     
Title: Re:5. 分割コンパイル    
回答ありがとうございます。

コンソールアプリケーションで作成したところ
実行することが出来ました。ありがとうございました。


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



Name: UN  ..ぴよぴよ(137ポイント)   Date: 2007/08/21(火) 11:26   No:9973       
Title: シューティングゲームの敵弾について    
たびたびお世話になっております。
サンプルを参考にしつつ敵の弾まで実装できたわけですがその際の処理で敵弾発射中にプレイヤー側が攻撃を開始すると敵が消滅しているのにもかかわらずタイムラグが発生して消滅した敵の付近から残りの弾だけが発射されています。これを解消したいのですがどうすれば良いのでしょうか?



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


Name: Justy  ..ハッカー(149,835ポイント)   Date: 2007/08/21(火) 16:03   No:9975     
Title: Re:シューティングゲームの敵弾について    
敵が消滅しているのにもかかわらずタイムラグが発生して消滅した
敵の付近から残りの弾だけが発射されています
 どういうソースを書かれているのかわからないので、正確には答えられませんが、
敵が死んでいるかどうか見分けて、死んでいるなら敵から弾の発射をしなければ
いいのではないでしょうか?


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

Name: UN  ..ぴよぴよ(235ポイント)   Date: 2007/08/21(火) 17:01   No:9977     
Title: Re:シューティングゲームの敵弾について    
回答誠にありがとうございます。
敵弾のソースはここのサンプルプログラムと現在の所同一です。
フラグで死んでいるならファルス、生きているならトルーといった感じで指定をしたいのですが細かいところが不明でして。


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

Name: Justy  ..ハッカー(149,979ポイント)   Date: 2007/08/21(火) 19:00   No:9982     
Title: Re:シューティングゲームの敵弾について    
 ざっくりとサンプルプログラムを修正してみました。

http://up.img5.net/index.html
up9070.zip

 です。


 このプログラム構造からすると、一番簡単な方法は
弾の構造体に発射したエネミーの番号を入れて(構造体のメンバに enemy_idを追加)、
弾の発射開始処理をするところで、そのエネミーの番号からエネミーが生きているかどうかを
調べて、発射をするかどうか決めます。

 一応その処理は IsAliveEnemy()という関数にしてあります。


 オリジナルとの差分は添付の pngファイルを参照してください。


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

Name: UN  ..ぴよぴよ(262ポイント)   Date: 2007/08/21(火) 19:38   No:9983     
Title: Re:シューティングゲームの敵弾について    
誠にありがとうございました。
参考にしてみます。


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



Name: まだまだ  ..入門者(2,763ポイント)   Date: 2007/08/21(火) 16:57   No:9976       
Title: 意味不明の警告    
こんにちは
さっそく質問ですが
環境:MS Visual Studio 2005
コンパイルしたとき下記のようなメッセージが出ました。

warning C4717: 'MyClass::getXXX' : すべてのコントロールのパス、関数を回帰するとランタイム スタック オーバーフローが発生します。


Q1:
「スタック オーバーフローの発生」って、実行する時の話ではないか、なぜコンパイル段階で出たのでしょうか。


MS Visual Studio 2005 help を調べたら、以下のように書いております。
/********** MS Visual Studio 2005 help:*************/

コンパイラの警告 (レベル 1) C4717

言語のフィルタ : すべて 言語のフィルタ : 複数 言語のフィルタ : Visual Basic 言語のフィルタ : C# 言語のフィルタ : C++ 言語のフィルタ : J# 言語のフィルタ : JScript
Visual Basic (宣言)
Visual Basic (使用法)
C#
C++
J#
JScript

エラー メッセージ
'function' : すべてのコントロールのパス、関数を回帰するとランタイム スタック オーバーフローが発生します。


関数を通るすべてのパスに、その関数の呼び出しが含まれています。この関数は、それ自体を再帰的に呼び出してからでなければ終了できないため、この関数は終了しません。

次の例では C4717 警告が生成されます。

コードのコピー
// C4717.cpp
// compile with: /W1 /c
// C4717 expected
int func(int x) {
if (x > 1)
return func(x - 1); // recursive call
else {
int y = func(0) + 1; // recursive call
return y;
}
}

int main(){
func(1);
}


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

Q2:
この例で何を説明したいでしょうか。(どこに悪いの?)

ご教授お願いします。


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


Name: box  ..比類無きプログラマー(84,760ポイント)   Date: 2007/08/21(火) 17:55   No:9979     
Title: Re:意味不明の警告    
main関数から func(1); を実行すると、
func関数のelse句を実行しますね。戻り値はfunc(0)+1です。

さて今度は、func(0)を実行する必要が出ました。
func(0)を実行すると、func関数のelse句を実行しますね。戻り値はfunc(0)+1です。

またまた、func(0)を実行する必要が出ました。
func(0)を実行すると、func関数のelse句を実行しますね。戻り値はfunc(0)+1です。

またまたまた、func(0)を実行する必要が出ました。
func(0)を実行すると、func関数のelse句を実行しますね。戻り値はfunc(0)+1です。

... 以下、永久に続く。

これは大いにまずいですね。


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

Name: tkmakwins15 [URL]  ..上級者(15,917ポイント)   Date: 2007/08/21(火) 18:00   No:9980     
Title: Re:意味不明の警告    
>この例で何を説明したいでしょうか。(どこに悪いの?)

このコードでは、プログラムが終了せずに永遠にfanc()が呼ばれ続けます。なぜならば

(以下ソースコード引用)

int func(int x) {
if (x > 1)
return func(x - 1); // recursive call
else {
int y = func(0) + 1; // recursive call
return y;
}
}

条件分岐のところで、どの条件に該当してもfuncが呼ばれてますよね。これでは、func()がどんな時も
呼び出される事になり、結局このループを抜けられないのです。
(func呼び出し→再帰的にfunc呼び出し→再帰的にfunc呼び出し………)
ちなみに、これをコンパイルしてできた実行ファイルは絶対に実行しないで下さい。最悪の場合はPCが
フリーズします。


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

Name: まだ  ..ぴよぴよ(20ポイント)   Date: 2007/08/21(火) 18:37   No:9981 解決!     
Title: Re:意味不明の警告(お礼)    
boxさま、 tkmakwins15さま
さっそくご返答ありがとうございました。

よくわかりました。
いまどきのコンパイラは賢いですね。

また宜しくお願いします


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



Name: アベちゃん  ..ぴよぴよ(462ポイント)   Date: 2007/08/18(土) 11:08   No:9932       
Title: 日本は、主体性の無い文化だ。    
 昔から日本ほど、これが、伝統と言っているが、主体性の無いサブカルチャー文化の国だと言える。戦国時代の後期から起こった人形浄瑠璃、歌舞伎、江戸時代から派生した狂言、室町時代からの随筆(私小説)は、その時代の欲求された文化では、無くて、その時代に喰うに困った方が、それで生業として糧を得る為の手段である。
 今流行のグルメ、ファッション、スポーツ、新興宗教(スピリチャアル)等の生活スタイルと何ら変りが無いのである。
 この掲示板もそうだ。C言語と言っても、その技術の意見交換をするわけでもなくて、只、学校の部活(文科系)程度の寄せ集めで、意味の無い事ばかりが、掲示されている。その意見に対して検証の掲示すらないのが、残念だ。
 C言語の基礎技術である、配列、ポインタ、ビット演算子、アドレス制御に関しての記述やコードが、皆無が、その証拠だ。プログラミング言語の基本的な制御(ループ、IF文、構造体、関数、ライブラリィ関数)に関しての議論が、全く無い。只、その場で思いついた事を載せているだけだ。実に不毛だ。
 現実の世界は、ITと言ってもそれ程日常の生活で必要に迫られるものでは無く大概が、大手のソフトウェア会社から提供されるパッケージ製品で事足りるのだ。
 Winny事件の意見交換もないし、技術についての意見の記載も無い。
 この掲示板に限らず、皆さんの意見発表は、その場の欲求不満のガス抜きでしかなく、何かを変えよう、新技術を生み出そうとの骨のある方すらいないのが、残念だ。それは、そこ等への街で喚いている左翼の反戦運動と同じだ。
 つまり、議論できないのだ。皆さん、ここは、あなた方のガス抜きの場では、ありません。
 ここは、コンピューター内のメモリの中の仮想空間であって、現実の世界では、ありません。しっかりしましょう。
 
 

 
 


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


Name: バグ  ..熟練のプログラマー(54,781ポイント)   Date: 2007/08/18(土) 12:27   No:9933     
Title: Re:日本は、主体性の無い文化だ。    
こういうのは、とりあえずスルーです。どうせ、マルチでしょうし…

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

Name: 管理人 [URL]  ..伝説のハッカー(392,047ポイント)   Date: 2007/08/18(土) 14:40   No:9935     
Title: Re:日本は、主体性の無い文化だ。    
>バグさん
何がしたいんでしょう^^;
C言語系の掲示板に端からコピペしてるんでしょうか?最後どんな結論になるのかと思ったら「しっかりしましょう」で終わってたのでちょっと笑いましたw


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

Name: tkmakwins15 [URL]  ..中級者(14,778ポイント)   Date: 2007/08/18(土) 17:15   No:9938     
Title: Re:日本は、主体性の無い文化だ。    
要はこの掲示板において議論がしたいわけですか?たぶんそのテーマを絞って問題提起すれば議論になるでしょう。自然と。

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

Name: たかぎ [URL]  ..入門者(4,366ポイント)   Date: 2007/08/18(土) 19:37   No:9939     
Title: Re:日本は、主体性の無い文化だ。    
主張の真偽はともかく、「こうあるべき」という理想があるのなら、まずは自らが実践するのが筋ですね。
それを怠って、ケチを付けるだけなら誰にでも出来ますし、まさに主体性のない姿勢そのものです。


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

Name: アベちゃん  ..ぴよぴよ(516ポイント)   Date: 2007/08/19(日) 13:21   No:9948     
Title: 2部探索法の議論から入りましょうよ。    
 2部探索法の議論から入りましょうよ。
 本格的なプログラミングの技法を学ぶ事こそ実務的な物が作れる
 第一歩です。頑張りましょう。


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

Name: 管理人 [URL]  ..伝説のハッカー(392,217ポイント)   Date: 2007/08/19(日) 14:26   No:9949     
Title: Re:2部探索法の議論から入りましょうよ。    
二分探索法なら知ってますが^^;
議論したいのなら何を議論したいのか、、例えば探索の速さ比較だったりコードの可読性だったり、他のアルゴリズムとの比較であったり歴史であったり・・何か自分の議論したいテーマがあると思うのですが、
まず自分がとことん掘り下げて言及してそこに意見求めるのが普通じゃないでしょうか・・。
別にみんなは今それについて議論したいわけじゃないんですから「さぁこれについて話せ」と言っても困るんじゃないでしょうか・・・。

ってバグさんの意見を思いっきり無視ってすみません^^;


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

Name: tkmakwins15 [URL]  ..中級者(14,859ポイント)   Date: 2007/08/19(日) 14:34   No:9950     
Title: Re:2部探索法の議論から入りましょうよ。    
2分検索法の趣旨はソートされたデータ内からデータを取り出すと言うものですね。クイックソートと同じように
中央あたりにマークをつけてそのどっちにあるかを探し出すと言うものでしたが、さてそこからどのように議論すればいいのでしょう?


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

Name: たかぎ [URL]  ..入門者(4,425ポイント)   Date: 2007/08/19(日) 14:54   No:9951     
Title: Re:2部探索法の議論から入りましょうよ。    

template<int A0, int A1, ..., int AN>
struct foo { ... };


から、静的に探索可能なメタ関数の実装方法とかなら興味があります。


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

Name: 管理人 [URL]  ..伝説のハッカー(392,232ポイント)   Date: 2007/08/19(日) 14:58   No:9952     
Title: Re:2部探索法の議論から入りましょうよ。    
いや〜しかしtkさんよくご存知ですねぇ、全部独学ですか?

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

Name: tkmakwins15 [URL]  ..中級者(14,961ポイント)   Date: 2007/08/19(日) 20:27   No:9954     
Title: Re:2部探索法の議論から入りましょうよ。    
>いや〜しかしtkさんよくご存知ですねぇ、全部独学ですか?

基本的には本とインターネットの独学です。ただし本に頼るのはプログラミング技法で、ほとんどアルゴリズム
あたりについてはネットですね。

計算速度はO(log<small>2n)でしたよね。結構高速なほうのアルゴリズムではないでしょうか。欠点はソートされていない
データには使えないところでしょうか。


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

Name: 管理人 [URL]  ..伝説のハッカー(392,348ポイント)   Date: 2007/08/19(日) 21:04   No:9955     
Title: Re:2部探索法の議論から入りましょうよ。    
最近はネットでも十分勉強できますからねぇ。
細かい部分はやはり本ですが、普段使い方忘れたような関数検索するのはネットの方が早いですし、コピペも出来て便利ですよね。

てかログの計算とか確か中学生では習いませんよね・・;
tkさん将来有望ですね〜^^;
私もがんばらなくては><;


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

Name: tkmakwins15 [URL]  ..上級者(15,057ポイント)   Date: 2007/08/19(日) 22:04   No:9957     
Title: Re:2部探索法の議論から入りましょうよ。    
>てかログの計算とか確か中学生では習いませんよね・・;

軽い微積分ができます。中2で習得しました。

ただし、同じデータが2つ以上あると問題なんですよ、実装によっては同じデータが一致しないということもあります。


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

Name: 管理人 [URL]  ..伝説のハッカー(392,542ポイント)   Date: 2007/08/19(日) 22:51   No:9958     
Title: Re:2部探索法の議論から入りましょうよ。    
うはぁ教科書以上の事をするなんて自分には想像も付きません^^;
教科書準拠の問題集を家でテスト対策にやっていたくらいでしょうか(汗
ビセキなんて大学1年以来見ていません・・。


Name: tkmakwins15 [URL]  ..上級者(15,169ポイント)   Date: 2007/08/20(月) 00:53   No:9959     
Title: Re:2部探索法の議論から入りましょうよ。    
周りはみんなそうですよ。たぶん、それが一番効率的というか、必要ないことはやらない的な人結構いますよ。

さて二分検索法の議論ですが、一回コード書いてそのコードについて議論すると言うやり方が一番良いんじゃないでしょうか。
と言うわけでいったん僕がコードを書きますのでそれについてという形を取りませんか?

template <typename TYPE>
int search(TYPE terget,TYPE *element,int size)//引数は検索対象、検索配列。配列サイズ
{
int mark=size/2; //マークの要素
int searchsize=size; //残っている検索対象のサイズ
while(1){
if(searchsize==0){
return -1; //検索対象がなくなると-1を返して終了
}else if(element[mark]==terget){
break; //見つかると終了。
}else if(element[mark]>terget){//検索対象がマークより大きい場合
searchsize-=mark+1; //検索サイズを減らす
mark=mark+seachsize/2;//検索サイズの半分に前回のマーク番号を足した値が新たなマーク
}else if(element[mark]<terget){//検索対象がマークより小さい場合
searchsize-=mark+1; //検索サイズを減らす
mark/=2; //前回のマーク番号の半分の値のが新たなマーク番号
}
}
return mark;
}

これでたぶん大丈夫だと思います。


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

Name: 管理人 [URL]  ..伝説のハッカー(392,569ポイント)   Date: 2007/08/20(月) 01:11   No:9960     
Title: Re:2部探索法の議論から入りましょうよ。    
おそらくバグさんのおっしゃっているとおり、トピ主は議論したいわけじゃないと思いますよ‥。

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

Name: tkmakwins15 [URL]  ..上級者(15,489ポイント)   Date: 2007/08/20(月) 01:20   No:9961     
Title: Re:2部探索法の議論から入りましょうよ。    
>2部探索法の議論から入りましょうよ。

とトピ主のスレに書いてあったので議論を展開しようと代わりに実行してみたのですが…、どうすればいいのでしょうか、
僕の場合、「対話」と言うものを大事にしようとするタイプの人間なので、どうしても解決と言うか、理解を深めると言うか…
そういうことを中心に物事を進めていくタイプなんです。


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

Name: 管理人 [URL]  ..伝説のハッカー(392,959ポイント)   Date: 2007/08/20(月) 01:31   No:9962     
Title: Re:2部探索法の議論から入りましょうよ。    
律儀ですね^^;
そうですねぇ、登録・検索というアルゴリズム二部探索にしてもハッシュ法にしても理論を聞けばなんだと思いますが、思いつくかといわれたら思いつかないですよねぇ。
ソートなんかも「自分で思いついた!」と思うアルゴリズムはせいぜい単純ソート位だったりして^^;
クイックソートを考えた人はすごいなぁと思います。
以前色んなソートを実際にやってみて早さ計ったんですがクイックソートはもちろんですが、
基数ソートも結構高速なんですね。

しかしクイックソートを理解するのは苦労しました・・。当時再帰関数もよくわかってなかったので、何がどうなってるのかさっぱりで・・。
その辺苦労した思い出があったのでクイックソート解説アプリを作ったわけですが。
あ、あのアプリはプログラムに悩んでいる後輩に勧めたら好評でした^^
テスト前どうしようかわからなくてひぃひぃ言ってた奴もあれみて理解してくれたようです☆
あんなアプリを色んなジャンルで作って一つのC言語教育ソフトとして完成させたいんですけど、なかなかねぇ・・。
ゲームは作っても売り物になりませんけど、今度教育ソフト完成させて販売しようかなw


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

Name: tkmakwins15 [URL]  ..上級者(15,654ポイント)   Date: 2007/08/20(月) 01:52   No:9963     
Title: Re:2部探索法の議論から入りましょうよ。    
販売………ってできるんでしょうか?ソフトの完成後の手続きが面倒だったりするんじゃないでしょうか。
しかし全ての物事はチャレンジ精神ですよね。やりたくて失敗してもいいことはどんどん実行!という精神
を基に生活しています。
アルゴリズムの速度といえば、前に一度お遊びで10,000,000までの素数を全て求めるプログラムを組んで、
(と言うよりも最大数は入力でしたが…)処理時間を計ったことがあるのですが…、CPU:Pentium2 333MHz、メモリ192MB、OS:Windows 2000 SP4でなんと4日と5時間29分33秒かかりました(遅!!)
ちなみにアルゴリズムは試し割りです。


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

Name: ま〜く  ..入門者(4,152ポイント)   Date: 2007/08/20(月) 02:44   No:9964     
Title: Re:2部探索法の議論から入りましょうよ。    
あら〜w
スルーしそうな感じだったのに、結構つづいてますね^^


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

Name: 管理人 [URL]  ..伝説のハッカー(393,273ポイント)   Date: 2007/08/20(月) 04:38   No:9965     
Title: Re:2部探索法の議論から入りましょうよ。    
>ま〜くさん
なんかバグさんのご意思を無視しているようで申し訳ない^^;

>tkさん
売った総額が10万以内なら役場に届ける必要も無いですし、別に「1つ980円!振込みはこちら!」ってやったら普通に販売になりますよね?
ベクターとかに登録したりクレジットカード決済が出来るようにするなら色々ややこしいでしょうけど。
ま〜売るったって結局何本売れるんだって話ですよねw
全部で10本売れたらいいほうじゃないでしょうかw
オファー一件もなかったりして^^;

計算プログラムと言えばフィボナッチ数列(知ってますか?)を計算するプログラムを再帰関数でやろうとしたら44項だったかな?どこかで止まってしまった覚えがありますw
しかし4日も良く頑張りましたね^^;

素数を求めるのは時間かかりますよねぇ。その性質を使って暗号って作られてるそうですね。


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

Name: asd  ..上級者(16,855ポイント)   Date: 2007/08/20(月) 11:44   No:9967     
Title: Re:2部探索法の議論から入りましょうよ。    
最初の投稿文に二分探索法については触れられていないし、そもそも投稿文の最後の二行、

>つまり、議論できないのだ。皆さん、ここは、あなた方のガス抜きの場では、ありません。
>ここは、コンピューター内のメモリの中の仮想空間であって、現実の世界では、ありません。しっかりしましょう。

ここが一番重要なところと考えます。

簡単にまとめると「ここは現実の世界ではないからここで議論することはできない」と言っているわけです。
そんなスレ主が追記で「二部探索法について議論しましょうよ」ということ自体論理破綻しています。

過去にも「蘇我入鹿氏による問題提起文書き逃げ」がありましたがその類と思いますので
あまり本気になさらないほうがいいと思います。

>スレ主殿

二部探索法の何について議論したいのかもう少し明確にしていただけますか?


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

Name: tkmakwins15 [URL]  ..上級者(15,795ポイント)   Date: 2007/08/21(火) 07:56   No:9972     
Title: Re:2部探索法の議論から入りましょうよ。    
>簡単にまとめると「ここは現実の世界ではないからここで議論することはできない」と言っているわけです。
>そんなスレ主が追記で「二部探索法について議論しましょうよ」ということ自体論理破綻しています

たぶんそれは僕の最初の回答において、議論がしたいのかどうかの真偽を確かめたのが原因ではないかと。

本気にしないほうが良いんでしょうか?


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



Name:  ..中級者(9,034ポイント)   Date: 2007/08/20(月) 12:39   No:9968       
Title: sscanfで構造体へ格納したいのですが…    

main.cppでoriginal.txtを読み込んで構造体に移そうとしたのですが、
コンパイルは成功するのですが、実行をするとエラーが発生してしまいます。
コメント化してある方ではうまくいくので、ファイルの受け渡しに問題があるかと思うのですが、
分かりませんでした。
ご助力お願いします。

--original.txt--
たお 22,1
たおう 12,2
っかい 45,3
-- --

--main.cpp--
#include <stdio.h>
#include <stdlib.h>

#define N1 64
#define N2 256

typedef struct person {
char name[10];
int age;
} Person;

void File(char s1[][N2], int count);


int main()
{
FILE *fin, *fout;
char r_f_name[N2] = "original.txt";
char w_f_name[N2] = "txt.txt";
char s1[N1][N2], s2[N1][N2], s3[N1][N2];
int count=0, i, j, s;

if( (fin = fopen(r_f_name, "r")) ==NULL ){
printf("ファイルが見つかりません。");
exit(1);
}

if( (fout = fopen(w_f_name, "w")) ==NULL ){
printf("ファイルへの書き出しが失敗しました。");
exit(1);
}

while ( fgets(s1[count++], N2, fin ) !=NULL);
File(s1, count-1);


fclose(fin);
fclose(fout);

return 0;
}

void File(char s1[][N2], int count)
{
int i;
char name[20];
int age, ag;
Person p[3];


for(i=0; i < count; i++){
sscanf(s1[i],"%s %d,%d", p[i].name, p[i].age, &ag);
printf("%s : %d %d\n",p[i].name, p[i].age, ag);
}
}
/*
//成功
void File(char s1[][N2], int count)
{
int i;
char name[20];
int age, ag;

for(i=0; i < count; i++){
sscanf(s1[i],"%s %d,%d", name, &age, &ag);
printf("%s : %d %d\n",name, age, ag);
}
}
*/
-----------------------------------------------------------------------



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


Name: バグ  ..熟練のプログラマー(54,839ポイント)   Date: 2007/08/20(月) 13:20   No:9969     
Title: Re:sscanfで構造体へ格納したいのですが…    
細かいところまでは見ていませんので、まだあるかもしれませんが、とりあえず…

ここの部分は…
sscanf(s1[i],"%s %d,%d", p[i].name, p[i].age, &ag);


こうかな?と思います。
sscanf(s1[i],"%s %d,%d", p[i].name, &p[i].age, &ag);


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

Name: box  ..比類無きプログラマー(84,563ポイント)   Date: 2007/08/20(月) 14:17   No:9970     
Title: Re:sscanfで構造体へ格納したいのですが…    

> File(s1, count-1);

第2引数を-1するのは不要かもしれません。


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

Name:  ..中級者(9,136ポイント)   Date: 2007/08/20(月) 18:41   No:9971 解決!     
Title: Re:sscanfで構造体へ格納したいのですが…    
ご回答ありがとうございます。

>バグ様
そこをなおしたところうまくいきました。


>box様
countを-1し無いとエラーになってしまいます。
多分、
while ( fgets(s1[count++], N2, fin ) !=NULL);
では、予定より一つ多く読み込まれるからだと思います。

お二方ともありがとうございました!


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



Name: UN  ..ぴよぴよ(86ポイント)   Date: 2007/08/18(土) 23:35   No:9941       
Title: キャラクターの透過処理について    
お初です。早速なんですがキャラクターの透過処理で質問です。
シューティングゲームのサンプルゲームのキャラクター画像を使うと背景が綺麗に透過処理されるのですが自作したドットキャラクターを使うと白い部分が透過処理が行われません。どこをどう指定すればよいのでしょうか?なおサンプルと同じキャラクターの大きさではありません。

画像を添付します。



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


Name: 管理人 [URL]  ..伝説のハッカー(392,369ポイント)   Date: 2007/08/18(土) 23:55   No:9943     
Title: Re:キャラクターの透過処理について    
画像は何のソフトで作っていらっしゃいますか?
http://siriasu.s10.xrea.com/webtips/tips03.htm
こちら参考になると思います。
私はXPの環境でペイントで透過処理したこと無いのですが、DXライブラリでの透過処理に限り、透過させたいところは「真っ黒にすれば透過処理される」という仕様ですので、ペイントでも透過処理させることは出来ます。
http://homepage2.nifty.com/natupaji/DxLib/dxfunc.html#R3N1
(windows98のペイントのみ、GIFが透過処理できますが、それ以降はライセンスの関係で透過処理できなくなったらしいです。)


フォトショップ、GIMP、PictBearなどの高機能ソフトなら普通に範囲指定→カットすることで透過処理できます。(背景を透過処理する設定にする必要あり(上記リンク参照))

ちなみにペイントで透過処理させるならこう(背景真っ黒)



高機能ソフトで透過処理させるならこのようになります。



最初のうちは「真っ黒」にする事で透過処理させるほうが簡単かと思います。(少しでも色が混ざった黒だと透過処理されません。輝度はR,G,B,=0,0,0にしてください)そのうちボカシやアルファブレンドを使いたくなってくると思いますのでその時高機能ソフトで編集してもいいと思います。


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

Name: UN  ..ぴよぴよ(0ポイント)   Date: 2007/08/19(日) 00:40   No:9944     
Title: Re:キャラクターの透過処理について    
丁寧な回答ありがとうございました。高機能ソフト(GIMP)で透過処理をさせる事が出来ました。
もう一つ質問なのですが選択できるタイトル画面を製作する場合はどのようにすればよいのでしょうか?
例えばエンターキーを押して開始する(エンターを押さなければデモに移項)だけのゲームでは以下のような記述をしています。
void TitleMain(void)
{
// エンターが押されたらば
if ( DDGetKeyInfo(VK_RETURN) == DDGETKEYINFO_DOWN )
{
gGameMode =MODE_GAME;// モードをゲーム中へ
PlayInit(); // 1ゲーム初期化
}
// 1200カウントでデモスタート
if (gDemoCnt>1200)
{
gGameMode = MODE_GAME; // モードをゲーム中へ
PlayInit(); // 1ゲーム初期化
gDemoMode=ON;
gDemoCnt=0;
gShip.dir=3;
}
// ボス移動
if (gDemoCnt%120==0)
{
gBoss.x=rand()%(WIDHMAX-BOSS_XSIZE);
gBoss.y=rand()%(HEIGHTMAX-BOSS_YSIZE);
}

}



void TitleDraw(void){
int sy;
DDRectBlt(DDSCREEN,0,0,sBG);
// ボスの表示
if (gDemoCnt>300) // デモカウントが300以上で
{

if (gDemoCnt%20>=10)
DDRectBltSprite( DDSCREEN, (int)gBoss.x, (int)gBoss.y,
BOSS_XSIZE, BOSS_YSIZE,
sBoss, 0, BOSS_YSIZE,
BOSS_XSIZE, BOSS_YSIZE );
else // 通常
DDRectBltSprite( DDSCREEN, (int)gBoss.x, (int)gBoss.y,
BOSS_XSIZE, BOSS_YSIZE,
sBoss, 0, 0,
BOSS_XSIZE, BOSS_YSIZE );
}

// タイトルの表示
// カウンタにより縮小表示
sy = gDemoCnt/2+1;
if (sy>TITLE_YSIZE)
sy=TITLE_YSIZE;
DDRectBltSprite( DDSCREEN, 70, 50,TITLE_XSIZE, sy,
sTitle1, 0, 0, TITLE_XSIZE, TITLE_YSIZE );

DDRectBltSprite(DDSCREEN,170,250,sTitle2);
}
// ------------------------------------------------
// タイトル 初期化
// ------------------------------------------------
void TitleInit(void)
{
gDemoMode=OFF;
gDemoCnt=0;
}

void GameMain()
{
ShipMove();
BeamMove();
BeamSet();
Beam2Set();
EnemySet();
EnemyMove();
BeamEnemyHit();
EbeamMove();
EbeamSet();
EbeamShipHit();
EnemyShipHit();
BGScroll();
BossMove();
BossSet();
BossBeamSet();
BeamBossHit();
ShipBossHit();

// エンターが押されたら
if (DDGetKeyInfo(VK_RETURN) == DDGETKEYINFO_DOWN )
{
gGameMode = MODE_OVER; // モードをタイトルへ
DAPlaySE( sndSE3, false );
TitleInit();
}
// シップのヒットポイントが0以下になったらば

if (gShip.hp<=0)
{
gGameMode = MODE_OVER; // モードをゲームオーバーへ
DAStop( sndBGM );
gDemoCnt = 0; // デモカウンタをクリア
}
if (gDemoMode==ON && gShip.hp<=0)
{
gGameMode = MODE_TITLE; // モードをゲームオーバーへ
DAStop( sndBGM );
gDemoCnt = 0; // デモカウンタをクリア
gDemoMode=OFF;
}
// デモ中にエンターが押されたら
if ( gDemoMode==ON && DDGetKeyInfo(VK_RETURN) == DDGETKEYINFO_DOWN )
{
gGameMode = MODE_TITLE; // モードをタイトルへ
DAPlaySE( sndSE3, false );
TitleInit();
}
}


1,093ポイント を落としてしまった。

Name: 管理人 [URL]  ..伝説のハッカー(392,464ポイント)   Date: 2007/08/19(日) 02:50   No:9946     
Title: Re:キャラクターの透過処理について    
すみません、つまり今何が出来なくて困っていますか?
選択項目を表示して選択させる場合はゲームプログラミングの館の33章
http://dixq.net/g/#33
等を参考にされてみてはいかがでしょうか。
回答が希望するものじゃなかったらすみません(_ _|||)


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

Name: UN  ..ぴよぴよ(5ポイント)   Date: 2007/08/19(日) 07:16   No:9947 解決!     
Title: Re:キャラクターの透過処理について    
まさにこれですお手数掛けましてありがとうございます。

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

Name: 管理人 [URL]  ..伝説のハッカー(392,542ポイント)   Date: 2007/08/19(日) 21:09   No:9956     
Title: Re:キャラクターの透過処理について    
解決してよかったですね。
押している=1
押していない=0
だけでは「たった今押された」という判定が出来ませんよね。
これ我流なんで、いい方法かどうか解りませんけど、「たった今押した」ってことは
前回の入力状態が0で今の入力状態が1のときですよね。つまり

GetHitKeyStateAll( Key ) ;

で得た入力状態をstatic char old_Key[256]に前の状態として保存しておく事で判定出来、

if( old_Key[○○]==0 && Key[○○]==1 )

の時

Key[○○]=2;

とする関数を一つ作っておくんです。
するとKey[○○]に2が入っているとたった今入力した事がわかり、1回のプッシュで1回の処理が出来ます。

いい方法かどうかわかりませんが参考までに。


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



Name:  ..初心者(5,782ポイント)   Date: 2007/08/16(木) 12:42   No:9901       
Title: 戦闘のプログラム作ってるのですが…    
戦闘のプログラムを作っているのですが、敵2の攻撃時にエラーになってしまいます。
原因の個所が全く分からないので力添えお願いします。
また、他にご指摘がありましたらそれもお願いします!
ZIPファイル添付


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


Name: Justy  ..ハッカー(147,475ポイント)   Date: 2007/08/16(木) 22:44   No:9910     
Title: Re:戦闘のプログラム作ってるのですが…    
原因の個所が全く分からないので力添えお願いします
 ざっと見ましたが、敵2だけじゃなく1でも起こりませんか?

 Random_Numbers(set_chara - 1)

 set_charaが1の場合、内部の処理で "% 0"と0除算が行われています。
 これはまずいです。



他にご指摘がありましたらそれもお願いします

 細かく見るといろいろあるのですが、あからさまにまずそうなのは2点です。

・ Random_Numbers() / Round_Off()関数が2つのファイルそれぞれで
(内容は同じですが)関数を定義してます。
 どっちか1つで定義するようにして下さい。
(普通はリンク時に文句を言われるはずなのですが・・・)

 ヘッダに実装を書くのは普通はインライン関数かテンプレート関数くらいで、
Random_Numbers()とかのような普通の関数を複数の cppソースでインクルードする
こと場合、実装をヘッダに書くのは止めた方がいいでしょう。


・ set.hなどヘッダファイルのインクルードガードを書きましょう。
 それをしておかないと、後々インクルード順番とか二重定義で苦しめらる可能性があります。


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

Name:  ..初心者(6,740ポイント)   Date: 2007/08/17(金) 03:07   No:9911 解決!     
Title: Re:戦闘のプログラム作ってるのですが…    
↑修正したファイルです

ご回答ありがとうございます。

> Random_Numbers(set_chara - 1)
> set_charaが1の場合、内部の処理で "% 0"と0除算が行われています。
> これはまずいです。


悩んでいたところが解消されました。


> 細かく見るといろいろあるのですが、あからさまにまずそうなのは2点です。

もし、お時間があれば細かいところも注意していただけないでしょうか?


>・ Random_Numbers() / Round_Off()関数が2つのファイルそれぞれで
>(内容は同じですが)関数を定義してます。
> どっちか1つで定義するようにして下さい。
>(普通はリンク時に文句を言われるはずなのですが・・・)

> ヘッダに実装を書くのは普通はインライン関数かテンプレート関数くらいで、
>Random_Numbers()とかのような普通の関数を複数の cppソースでインクルードする
>こと場合、実装をヘッダに書くのは止めた方がいいでしょう。


Random_Numbers() / Round_Off() の両方をset.cppに移して、Extern.hでexternの
宣言をするように変えてみましたが、こういう解釈でよかったでしょうか?


>・ set.hなどヘッダファイルのインクルードガードを書きましょう。
> それをしておかないと、後々インクルード順番とか二重定義で苦しめらる可能性があります。


二重定義のエラーで、苦しめられていました。
見てみれば納得できることでしたが、思いつけませんでした。
ご指摘、ありがとうございます。


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

Name: Justy  ..ハッカー(149,358ポイント)   Date: 2007/08/17(金) 18:39   No:9926     
Title: Re:戦闘のプログラム作ってるのですが…    
 コンパイルしてみるとわかりますが、あちこちがおかしくなっています。

・ インクルードガード
 "set.h"は合っていますが、"extern.h"や "character.h"は記述がインクルードガードの間違っているので
中身が全て無効になってしまっています。


・ プロトタイプ宣言
 "extern.h"のプロトタイプ宣言ですが、各行の最後に ";"がないのでエラーになります。



set.cppに移して、Extern.hでexternの
宣言をするように変えてみましたが、こういう解釈でよかったでしょうか?
 それでいいと思いますが、";"がないのでエラーになっていますし、
set.hはもう使わないのであれば消しておいた方がいいと思います。


細かいところも注意していただけないでしょうか

・ extern.hの役割

 なんか見ていると全てを extern.hに集めようとしているように見えます。
 
 まだこれくらいの小規模ならそういうやりかたも選択肢として無くはないとは思いますが、
できれば各 .cppに対応した .hを用意してそれぞれの独立性を高くしておいた方が
後々の為にもいいかと思います。

 battle.cppに対応した battle.hを用意して、Battle_Set()のプロトタイプ宣言を書きます。
 同時に battle.hを battle.cppの先頭でインクルードします。
 で、main.cppは battle.hをインクルードすれば main.cppで Battle_Set()が呼び出せます。

 この方法の利点は修正時のミスが減ったり、別のプロジェクトでの使い回しも楽になるところです。



・ void main()
 mainの戻り値は基本的に intです。


・ グローバル変数 Cと E
 そもそもグローバル変数を使う必要があるのかどうかという疑問もありますが、
これは定義と extern宣言が別々になっていますね。

 管理する上で、別々になっているとミスが発生しやすいです。
http://www.pro.or.jp/~fuji/mybooks/cdiag/index.html
 の第5章で触れられているようなマクロを使って、extern宣言と実体の定義を1行で
やってみてはどうでしょうか。


・ character.hの ifdef MAIN_の中
 main.cppからだけ使えるようにしていますが、ここにそれを書くくらいなら
main.cppに static関数として入れてしまった方がいいのではないでしょうか。


・ scanf
 戻り値を必ずチェックして下さい。
 又、必要なら入力ストリームをクリアして下さい。
 それを行わないと、ユーザーが不正文字(数字入力のところでアルファベットを入力するとか)を
力した段階で異常動作が発生します。


・ C+set_chara
 ポインタと整数値の演算が多数ありますが、少々読みにくいと感じます。
 好みの問題かもしれませんが、(C+set_chara)->Lvと書くくらいなら C[set_chara]->Lvとした方が
判りやすくないでしょうか?

 或いは例えば


static void Battle_Avoid(int set_chara, int set_enemy)
{
STATUS *ts = C+set_chara;
int set = ts->AV;

ts->AV = ts->AV*2;
Battle_Attack(E, set_enemy, C, set_chara);
ts->AV = set;
}

 のように一時変数にポインタ値を計算しておいてから使うとか。


・ Battle_Commandのコマンド値
 数値によって if文で分岐していますが、ここで数値を直接直値と比較しています。
 複数の箇所で使いそうな直値は defineか enumで名前を付けておいた方がいいかと思います。
 今後増えたり、値を変更したくなったときに数値を "名前"にしておくと
楽です。

#define BTL_CMD_ATTACK   1

#define BTL_CMD_DEFENCE 2
#define BTL_CMD_AVOID 3

if(set == BTL_CMD_ATTACK){
Battle_Attack(C, set_chara, E, set_enemy);
}else if(set == BTL_CMD_DEFENCE){
Battle_Defence(set_chara, set_enemy);
}else if(set == BTL_CMD_AVOID){
Battle_Avoid(set_chara, set_enemy);
}

 とか。


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

Name:  ..初心者(8,112ポイント)   Date: 2007/08/18(土) 04:50   No:9929     
Title: Re:戦闘のプログラム作ってるのですが…    
↑変更後のファイル

ご回答ありがとうございます。

・Battle.hで extern void Battel_Set();を宣言すると、VC++で
『'extern void ' : 予期されないストレージ クラスまたは型指定子です。無視されます』
と表示されてしまいます。
ストレージクラスの方は全く理解できていないのですが、型指定子にvoidはあるはずなので問題は無いと思うのですが…
これは、どのような意味のエラーなのでしょうか?

ストレージクラスは
http://spring.cc.kyushu-u.ac.jp/scp/system/general/kyu-cc/manual/Fortran/language-reference/ja/html/lr36.htm
3.デフォルトより
static or automatic になっていると思われるのですがどうなんでしょうか?

どの様にすれば解決できるのでしょうか?

以下のものは上記のエラーのため確認が取れて居ないものがあります。
申し訳ございません。

> コンパイルしてみるとわかりますが、あちこちがおかしくなっています。
申し訳ありませんでした。
アップ後にミスに気づいて治したのですが、再度アップの方法をミスったようです。


>・ extern.hの役割
> なんか見ていると全てを extern.hに集めようとしているように見えます。

集めた方が楽になると思ったのですが、独立性が必要であり、それを失っている
ことに全く気づいていませんでした

> まだこれくらいの小規模ならそういうやりかたも選択肢として無くはないとは思いますが、
>できれば各 .cppに対応した .hを用意してそれぞれの独立性を高くしておいた方が
>後々の為にもいいかと思います。


はい、これから気おつけたいと思います。

> この方法の利点は修正時のミスが減ったり、別のプロジェクトでの使い回しも楽になるところです。
これを聞いたら、やらずに居られません!


>・ character.hの ifdef MAIN_の中
> main.cppからだけ使えるようにしていますが、ここにそれを書くくらいなら
>main.cppに static関数として入れてしまった方がいいのではないでしょうか。


かなり長くなる予定なので、分散させたいと思いこんな感じで設定しています。
あまり良くない方法だったでしょうか?


>・ scanf
> 戻り値を必ずチェックして下さい


↓これでチェックが成立していると思うのですがどうでしょうか?
for(scanf_test =0; scanf_test == 0;){
scanf_test = scanf("%d",&set);
if(scanf_test != 1)
scanf_test =0;
}

>・ C+set_chara
> ポインタと整数値の演算が多数ありますが、少々読みにくいと感じます。
> 好みの問題かもしれませんが、(C+set_chara)->Lvと書くくらいなら C[set_chara]->Lvとした方が
>判りやすくないでしょうか?


はい、その通りです。
ですが、(C+set_chara)をC[set_chara]に置き換えるとエラーとなってしまいます。
どの様にすればそのように使うことが出来るようになるのでしょうか?

>・ Battle_Commandのコマンド値

Win32に移動させる予定で、その時変更しようかどうするか悩んでる最中でした(汗
今現在は、上記の
printf("戦う:1 防御:2 回避:3 逃げる:4\n→");
と対応させて設定を行っていたので、あまり必要性を感じませんでしたので…。


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

Name: Justy  ..ハッカー(149,689ポイント)   Date: 2007/08/18(土) 13:30   No:9934     
Title: Re:戦闘のプログラム作ってるのですが…    
予期されないストレージ クラスまたは型指定子です
 これは "character.h"のプロトタイプ宣言に問題がある(宣言の最後に ;がない)からです。


あまり良くない方法だったでしょうか
 main.cppだけでしか絶対に使わないのならいいのですが、
今後、main.cpp以外から使いたい、とか或いは そういう xxx.cppだけでしか使わない関数が
別のヘッダ・関数とかで増えていったりすると見づらくなったりしませんか?


>>・ scanf
>> 戻り値を必ずチェックして下さい
↓これでチェックが成立していると思うのですがどうでしょうか?
 戻り値のチェックとしてはOKです。
 あとは、数字以外が入力されたときの対処でしょうか。


>>(C+set_chara)->Lvと書くくらいなら C[set_chara]->Lvとした方
、(C+set_chara)をC[set_chara]に置き換えるとエラー.p
 失礼しました。
 C[set_chara]
.Lvでした。
 これでうまくいくかと。


>>と対応させて設定を行っていたので、あまり必要性を感じませんでしたので
 修正の手間とバグの軽減の為の問題なので、必要になったらでもいいと思います。



 とりあえず、ざっくりとですが全体のインクルードや宣言周りを整理してみました。
http://up.img5.net/index.html
up8900.zip (428KB、オリジナルファイル名 my_source.zip)

 変更点は changeフォルダに unifide diff形式のテキストと変更点を表示した pngファイルを添付してありますが、
ヘッダがすっきりし、重複した記述が減っていると思います。

 基本方針としてはcppに対応した機能・サービスを提供する最小限のヘッダになるようにしてあります。
 
 グローバル変数もステータス用のグローバル変数ヘッダとして gv_status.hに移動しました。
 character.hの関数については1つは main.cppでしか多分使われないので、そちらに移動し、
chara_status()に関してはその処理の内容から他のソースからも呼ばれる可能性が高そうだったので、
関数としてそのまま残しました。
 又、入力周りも数字を入力する専用の関数を utility.hに作ってあります。
 あと、Battle_Start()には未初期化変数へ読みとりのアクセスする可能性があるようですが、
そちらは修正していません。

 ご参考までに。


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

Name:  ..初心者(8,249ポイント)   Date: 2007/08/18(土) 22:59   No:9940     
Title: Re:戦闘のプログラム作ってるのですが…    
とても凄いものをありがとうございます。

unifide diff形式のテキストは何か見れるソフトがあるのでしょうか?
diffで調べた結果は比較ソフトしか出てこなかったので、見方が良く分かりませんでした。

すばやい回答本当にありがとうございました。


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

Name: Justy  ..ハッカー(149,718ポイント)   Date: 2007/08/19(日) 01:44   No:9945     
Title: Re:戦闘のプログラム作ってるのですが…    
unifide diff形式のテキストは何か見れるソフトがあるのでしょうか?
 うーん、ただの比較結果のテキストファイルなのでテキストエディタくらいしか知らないです。


diffで調べた結果は比較ソフトしか出てこなかったので、見方が良く分かりませんでした
 pngの方で見て頂くということで(^^;


# 微妙にスペルが間違って(unified diff)ました・・・orz


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

Name:  ..初心者(8,339ポイント)   Date: 2007/08/19(日) 19:40   No:9953 解決!     
Title: Re:戦闘のプログラム作ってるのですが…    
>pngの方で見て頂くということで(^^;

わかりました!
調べてたら、ハイパーリンクがどーたらこーたらとあったので、もしかして何かあるのかな?
と思ったけれど、見つけれなかったので質問したしだいです^^;

本当にありがとうございました


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



Name: Lbfuvab  ..入門者(4,981ポイント)   Date: 2007/08/11(土) 15:51   No:9855       
Title: パイプについて    
パイプを使って対話型のコンソールアプリケーションと話がしたいのですが、
どういう風にすればいいのかが良く分かりません。
感じ的には、
@パイプStdinPipe、StdOutPipeをpipe関数で作る。//モードが良く分からない…
Adup関数で標準入出力をコピーする。
Bdup2で標準入出力にパイプを組み込む      //自作のストリームに組み込めたらfputsとか使えるのに・・・
C子プロセスを起こす                //どの関数を使えばいいのだろう・・・多すぎる
Ddup2で標準入出力を戻す
Ereadやwriteでプロセスと話す。
でいいんでしょうか。
例えば、下のTest.exeと言うプログラムと話すにはどうすればいいのでしょうか?(Test.exeが出力したものを画面に出力してユーザーの入力をTest.exeに渡す

//--------------------------------
// Test.exe
//--------------------------------

#include<stdio.h>

int main(){
char name[125];
int ch,i=0;

printf("Hello. What your name?\n");
gets(name);
printf("Hello,%s\n",name);
return 0;
}




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


Name: たかぎ [URL]  ..入門者(3,508ポイント)   Date: 2007/08/11(土) 19:36   No:9856     
Title: Re:パイプについて    
> パイプを使って対話型のコンソールアプリケーションと話がしたいのですが、
> どういう風にすればいいのかが良く分かりません。

処理系に依存せずにパイプを使う方法はありません。


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

Name: Lbfuvab  ..初心者(5,006ポイント)   Date: 2007/08/11(土) 22:17   No:9859     
Title: Re:パイプについて    
Windows XP上で動けばいいんです。
頼みます。



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

Name: たかぎ [URL]  ..入門者(4,264ポイント)   Date: 2007/08/16(木) 01:08   No:9894     
Title: Re:パイプについて    
CreatePipe
http://msdn2.microsoft.com/en-us/library/aa365152.aspx
または
CreateNamedPipe
http://msdn2.microsoft.com/en-us/library/aa365150.aspx
について調べてみましょう。


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

Name: Lbfuvab  ..初心者(5,090ポイント)   Date: 2007/08/18(土) 23:40   No:9942     
Title: Re:パイプについて    
有難うございました

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



Name: 管理人 [URL]  ..伝説のハッカー(386,228ポイント)   Date: 2007/08/04(土) 19:30   No:9691       
Title: ゲーム作りました〜^^    
皆さんお久しぶりです!
雑談版も立てず、すっかりご無沙汰で申し訳ないです(_ _|||)

スーパーボムマンに引き続き、時間を見つけてチクチク作った別のゲームが完成したので紹介します〜^^



こちらからダウンロード出来ます^^

http://dixq.net/BLACKHP/invite_a.html


どんなゲームかは画像を見ていただければ一目瞭然かと思います。
画像の赤で、書いた部分が独自の要素です☆詳しい説明をご覧になりたい方はリンク先の説明をご覧下さい。

もし遊んでいただけたら、ご意見ご感想などいただけると光栄に思います^^

(ダウンロード可能期間は1週間です。あまりにそっくりなので、SEGAに許可の申請を出してみてよければ正式配布します。)


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


Name: null  ..ぴよぴよ(120ポイント)   Date: 2007/08/04(土) 21:49   No:9692     
Title: Re:ゲーム作りました〜^^    
Vistaで動作確認してますか???
なんか、サイドバイサイドが云々とダイアログが出て実行できないんですけど…


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

Name: Justy  ..ハッカー(146,347ポイント)   Date: 2007/08/04(土) 22:30   No:9697     
Title: Re:ゲーム作りました〜^^    
 exeを解析したら、MSVC8 SP1でビルドされていますね。
 MSVC8の SP1用の再頒布可能パッケージをインストールすれば動くのではないでしょうか。


Visual C++ ライブラリの共有 side-by-side アセンブリとしての配布
http://msdn2.microsoft.com/ja-jp/library/ms235624(VS.80).aspx

Visual Studio User Group > フォーラム
VS2005 SP1でコンパイルしたバイナリが他のマシンでは実行できません。
http://vsug.jp/tabid/63/forumid/46/postid/9109/view/topic/Default.aspx


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

Name: 管理人 [URL]  ..伝説のハッカー(386,317ポイント)   Date: 2007/08/05(日) 01:35   No:9704     
Title: Re:ゲーム作りました〜^^    
改めました〜!すみません!ご指摘ありがとうございます。

VCインストールしていないPCでも動くように改善いたしました!
またあわせて他のバグも修正済みで、現在バージョン1.02aとなっています。



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

Name: null  ..ぴよぴよ(363ポイント)   Date: 2007/08/05(日) 14:52   No:9716     
Title: 辛口コメントですが・・・    
vistaで動作確認しました。管理人さんお疲れ様です。
思ったよりもよく出来てるゲームなんでびっくりしました。
パロゲーなんて、宣伝も自慢も商売もできないようなジャンルにここまで
力を注がれているとは思いもしませんでした。
ここまでゲームを作れるならオリジナルのものを作ったほうがいいと思います。
このゲーム作るのにどれだけ時間がかかりましたか?
オリジナルでなければその成果をオンラインゲームサイトに登録することもできないでしょう。
どうせなら成果を発表できるようなジャンルに挑戦してもらいたいと思いつつ、
ゲーム制作をこれからもがんばってほしいと思いました。


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

Name: 管理人 [URL]  ..伝説のハッカー(386,880ポイント)   Date: 2007/08/05(日) 15:47   No:9721     
Title: Re:辛口コメントですが・・・    
nullさん、こんにちは^^

ゲームプレイしていただいたようでありがとうございます☆

バロゲーっていうんでしょうか?
パクリのゲームのことですか?
実は私が作るのは既存のゲームばっかりなもので^^;
過去にもこんなものも作りました。
まんまボンバーマンです。

http://www.play21.jp/board/formz.cgi?action=res&resno=5924&page=&id=dixq&lognum=20

おっしゃるとおり、HPで公開も出来ませんし、一応画像は全部フォトショップで自分でちまちま書いた物なんですが、
あまりにそっくりだと配布してはいけないのかなとHPでは公開していません。

まぁ公開を目的に作っているわけではなく、友達とみんなで「ココばぐあるぞ〜(笑」とか言いながら
自分で作ったゲームでワイワイ遊べたり、例えばBLACKのSpecialにCOMvsCOMの観戦モードがあると思いますが、
こういうの競馬感覚で使ったり、
「俺左フィールドな、勝ったらジュース勝って来て」
⇒「左フィールド頑張れ〜!」「右頑張れ〜!」
とかいってアホみたいに騒ぐのが好きでw

そうは言っても公開出来ないのは確かに結構寂しいです^^;
なのでこうやってひっそり掲示板でお知らせとかさせていただいています^^;

ゲームプログラムは全く学校でも習った事が無く、全くの独学でライブラリの関数の使い方説明書みながら
「こうかな?」「あぁかな?」とか思いつくままに作っていって完成させているので、
どこかのサイトに登録してもらおうとか考えたことありませんでした。
また、既存の絵をまねながら自分で書き直す事は頑張ってやろうとはできても、全く独自の絵を書く事はさっぱりできないので、
私にとってプログラムを書く事より絵を描くことの方が難しいです・・。
なので、いつもパクリゲームなんでしょうね^^;

絵がかける友達なども誘って成果の出せるようなジャンルにも挑戦してみようと思います♪
ありがとうございました^^


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

Name: null  ..ぴよぴよ(940ポイント)   Date: 2007/08/05(日) 16:06   No:9722     
Title: Re:辛口コメントですが・・・    
パロゲーとはパロディのゲームという意味です。クローンゲームといわれることもあるようですが…
つまり元ネタのあるゲームのこと。実は僕もパロゲー作って後悔したことがある一人なんで…
パロディで作ることの最大のメリットは「もともと知名度があり、素材も手に入る」というところ。
しかし、そこが弱いところでもあります。
原作の知名度があればある程ユーザーの希望は高くなります。見劣りするなら文句いってきますし
(こんなの○○じゃない、とか)、逆にうまくできてれば著作権侵害だとしか言われません。
つまりどっちにころんでもいいように思われませんし、しかもパロゲーで名声を得てしまうと
後で出したのがオリジナルだったところで「あの作者はパロゲー作ってたことがある」という
汚点が残ってしまいます。
そもそもゲーム制作自体最初で最後だ、などという人でなければパロゲーは習作目的以外では
作らないほうがいいわけです。しかもあなたの場合自作ブランド名のようなロゴも入っているので
後でいざこざ起こしたくないならそのロゴは今後オリジナル作品には使ってはいけません。
またゲームで使われてる素材も、根拠になる恐れがあるので使わないことです。
ゲームメーカーの著作権訴訟に巻き込まれるほど有名にならないと思っていても、日本の法律は
以外と厳しいようなので甘く見てはいけませんよ。



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

Name: tkmakwins15 [URL]  ..中級者(11,178ポイント)   Date: 2007/08/05(日) 16:28   No:9723     
Title: これは…    
これはダイレクトX使用でしょうか?結構描画速度が優れているので聞いてみましたが。

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

Name: 管理人 [URL]  ..伝説のハッカー(387,135ポイント)   Date: 2007/08/05(日) 20:37   No:9725     
Title: Re:これは…    
>nullさん

ご指摘ありがとうございます。
リアル友達同士で遊ぶために作ったもので、HP公開予定も無いなのでそこまで深く考えていませんでした^^;
確かにその辺は将来的に慎重にならないといけないなと思います。

あ、かかった時間についてお答えしていませんでした。
今回正確に時間ははかりました。製作時間は265時間でした。
過去に作ったボンバーマンは300時間以上かかったと思います。
265時間かかったのに18日以内で出来ました^^; プログラム書いてる時間的にゲーム廃人ならぬゲーム作成廃人でしょうか(笑


> tkmakwins15 さん
これはDirectX7です。
自分のPCでしか遊んだ事ありませんでしたのでわかりませんでしたが、
先ほどPenM1.2GHzで遊んでみたところ、30FPS位で、(60FPS正常)かなり重かったんですね・・。
計算に再帰関数を使っているせいでしょうか・・。
自分のPC以外での実行や計算量も考えて作らないといけないですね^^;


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

Name: tkmakwins15 [URL]  ..中級者(11,213ポイント)   Date: 2007/08/05(日) 21:49   No:9726     
Title: Re:これは…    
僕のパソコンはPentium4 3.06GHzなので、それなりに速く感じたんでしょうか?

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

Name: 通りすがり  ..入門者(4,136ポイント)   Date: 2007/08/05(日) 23:09   No:9727     
Title: ふと思ったんだけど    
一日14時間プログラムくんで、他は飯とトイレと寝る時間…という作業を18日間続けられるなんて、微かに信じがたいなぁ…
きっと、時計が途中で電池切れたに違いないな。


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

Name: 管理人 [URL]  ..伝説のハッカー(387,581ポイント)   Date: 2007/08/05(日) 23:19   No:9728     
Title: Re:ふと思ったんだけど    
>tkmakwins15さん
Core2DuoE6700のPCと3.4GHzのPC、2.4GHzのPCでは同じように快適に動きました。
ただ、かなり古いノートPCでは快適ではなったということで、一般的なPCではきちんと動いているものと思います。
ただ、どれくらいを一般的とするかですが;

>通りすがりさん
まぁ学生なんでこそ出来ることです^^;
これだけの時間連続で続けるなんて確かに俄に信じられませんよねw
夏休み入る前は試験やレポート、学会の準備、研究に毎日ものすごい時間拘束されていて、
ずっとゲーム作りたい気持ちがたまっていた反動かもしれません^^;
私は友達の中ではゲーム作り始めるとめっきり家から出なくなる事でちょっと有名らしいです、嬉しくないですが(笑
時間については、毎日作成日記をウェブで付けていたので、間違いないです。
前回のゲーム作成で「何日で、何時間かかったの?」と聞かれたので、今回はきっちり計ってみる事にしたんです。
友達は残業続きで、同じ時間仕事に費やしたらしいですけど、趣味でこそ出来るこの時間・・仕事でできるなんて自分では信じられません^^;
ただ作成時間には、画像を書いている時間や音楽をただ色々聞いて探したり選んでいる時間、ゲームをテストしてひたすら遊んでいる時間も含めてですからプログラム書いているだけの時間ではないです。
ゲームのテスト時間はかなり長い(1/10以上を占めている?)と思います。
18日以内と書きましたが、7月18日から作り始めて、しかもその日の昼過ぎから作り始め、4日の昼間に完成したので、実質1日当たりにかかった時間は14時間より多いですね^^;
あ、ちなみにラスト3日は2日連続徹夜で書いたので1日あたり23時間書いていたかもしれません(笑

大学に入るまでパソコンも触った事無い人間だったものですし、プログラム始めてから2年程度なので、きっと無駄に時間ばかり非効率的にかかっているんでしょうね^^;


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

Name: tkmakwins15 [URL]  ..中級者(11,411ポイント)   Date: 2007/08/05(日) 23:52   No:9730     
Title: Re:ふと思ったんだけど    
僕は中学生なんで、だいぶ気楽にやってます。といってもCを始めて4ヶ月ですから、あまり
難しいことは分からないのですが、とりあえずC++とWin32 APIをやっています。今実用的な
プログラム作りに取り組もうと思うのですが、何を作るか迷ってるんですよ。


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

Name: 管理人 [URL]  ..伝説のハッカー(387,912ポイント)   Date: 2007/08/06(月) 00:31   No:9733     
Title: Re:ふと思ったんだけど    
ち、、中学生ですか?!
はぁ〜将来有望ですねぇ、私のように大学生になるまで毎日毎日テニスに明け暮れ、大学に入ったらバイクばっかり、なんて人間とは全然違いますねw

何を作ろうか迷っているという悩みはしょっちゅう色んな所で目にします。
私が思うに、別に一つ大きなものを作ろうとしなくても、
今したい、作りたい物を小さなものでいいから一つとりあえず作ってみるのがいいのではないでしょうか。
3日で作れるようなものとか。
初めて大きなものを作ろうとしてもきっと途中で挫折したり最初から書き直したりしたくなると思います。

しかし何を作ろうか悩んでいる期間はワクワクして楽しいですよね☆
私も長期休みになるとゲームを1本作るようにしているのですが、楽しみにしていますよ^^
ただ今回はかなり根詰めて作ってしまったので夏休み前半で完成してしまいましたw
まぁ夏休みといっても今年は夏休みはなく、中盤からとても忙しくなるので丁度よかったのですが。。。。


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

Name: 管理人 [URL]  ..伝説のハッカー(388,074ポイント)   Date: 2007/08/06(月) 02:39   No:9735     
Title: Re:ふと思ったんだけど    
ずっとHP更新していなかったので、久しぶりに更新しました。
作製ゲーム紹介」にて今まで作ったゲームの紹介をしています。
配布できるゲームはわずかですが^^;
こう思うと初めてゲームを作ってからたった1年チョットしかたってないんだなと思いました・・。
ここ1年で何個作ったんでしょうねぇホント^^;


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

Name: tkmakwins15 [URL]  ..中級者(11,637ポイント)   Date: 2007/08/06(月) 10:48   No:9741     
Title: Re:ふと思ったんだけど    
とりあえず、コーディングの基礎なども本を読んで勉強しています。ゲーム作りは、
僕もやっているのですが、なかなか進まないものですね…。作るソフトのアイディア
は、ダウンロードサイトなどでヒントを探すんですけど…、なかなかいいアイディア
が浮かんでこない…、ということです。そこで、C++のエディタでも作ってみようかと
思ったのですが。できるんでしょうか。


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

Name: 管理人 [URL]  ..伝説のハッカー(388,149ポイント)   Date: 2007/08/06(月) 22:52   No:9760     
Title: Re:ふと思ったんだけど    
ゲームに限らず何か1つ作り上げるっていうのは難しい事ですよね。
私も上のリンク先で紹介したように、完成までもっていったものは半分位だと思います。
私はエディタなどを作った事は無いのですが、WINのAPI使えばわりと出来るのではないでしょうか?
無責任な発言ですが^^;


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

Name: tkmakwins15 [URL]  ..中級者(12,060ポイント)   Date: 2007/08/06(月) 23:18   No:9764     
Title: Re:ふと思ったんだけど    
WIN32 APIを使って書いています。とりあえず小さいのから作って、大きいのにバージョンアップ
して行こうと思います。


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

Name: 宇都宮  ..ぴよぴよ(241ポイント)   Date: 2007/08/07(火) 01:32   No:9768     
Title: Re:ふと思ったんだけど    
面白いですね!タイトルの選択画面からワクワクしてしまいました。


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

Name: 管理人 [URL]  ..伝説のハッカー(388,166ポイント)   Date: 2007/08/07(火) 02:03   No:9769     
Title: Re:ふと思ったんだけど    
> 宇都宮 さん

プレイ報告ありがとうございます〜^^
ブラックモードとか色々独自の要素付けてみたんですが、どうだったでしょうか??
今回も張り切って作ってみました〜☆


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

Name: tkmakwins15 [URL]  ..中級者(12,109ポイント)   Date: 2007/08/07(火) 02:47   No:9771     
Title: Re:ふと思ったんだけど    
管理人さんがプログラム組むようになったきっかけってなんですか?僕の場合はどうにかして
プログラム組めるようになったら良いなぁ〜。と思って始めたのです。


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

Name: 管理人 [URL]  ..伝説のハッカー(389,230ポイント)   Date: 2007/08/07(火) 03:17   No:9773     
Title: Re:ふと思ったんだけど    
>tkmakwins15さん

私は情報学科に通う大学院生です。
3年生までは全くプログラミングに興味をもてませんでした。
授業もおもしろくないし、ただコンソール画面に計算結果だして終わり、ただそれだけのものだと思っていました。
しかし3年の後期の授業で、ソフトウェアロボットって、OpenGlつかってロボット作ったんです。
その時に、自分の作ったプログラムでロボットが動く姿を見て感動して、それからC言語を勉強しました。
なんちゃって人工知能で、Linux端末から音声入力したデータをTCP/IP通信でwindows端末に転送し、OpenGLでロボットを描画して会話させると言うものです。
テーマは会話だけでしたが、楽しくなってテーマ以上の仕様を沢山実装しました。
しゃべってできるゲームをいろいろと作りました。
ジャンケンをはじめ、9マスの○×ゲームやノット17等。
それからコンピュータ室にはこもりっぱなしで、知らない人から「あぁDixqっていつもコンピュータ室篭ってた人やろ?」といわれるほどでした^^;
OpenGLやDXライブラリで画像を描画したり音声を再生したりしているとゲームが作れることがわかり、
それからゲームを作る事が楽しいと思い、ゲームを作るようになりました。
初めて作ったゲームが、上記で紹介したページの一番下にあるゲームです。
去年の冬ですから、ホント最近の話です。
作って先生に見せると偉く喜んでくれて、「オープンキャンパスに出すゲームを作ってくれ」と言われ、期待を持ってもらえることにも喜びを感じて、
また、作ったゲームを人に遊んでもらえる事にも喜びを感じ、作る意欲の元になりました。
もっと人に驚いてもらおう、もっと人に楽しく遊んでもらおうと次々作っているうちに
「前回作ったものよりクォリティを上げないといけない」
というプレッシャーがかかってしまいましたが、それはそれで、自分を追い込んで、(まだまだ全然ゲームの質はよくないですが、)ゲームの質を上げる(マシにする?)よい糧になっているかもしれません

まとめるとゲームを作るようになった理由は
・ゲームを作るって楽しいんだ!と思えたから
・作ってくれと期待してくれる人がいるから
でしょうか。

あ、質問はもしかしてゲームに限定しませんでした?
単なるプログラムを始めた理由はこの学科に入ったから(もちろんCに興味があったから)ですが、
本当に勉強を始めたのは3年の後期からです。
線形リストや色々なデータ構造とアルゴリズムについては、授業のATをやっているので、一度一からきっちり勉強しなおしました。(まだまだ不完全なところだらけですけどね)

・・とまとまりのないコメントですが、そんな感じですm(_ _)m


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

Name: tkmakwins15 [URL]  ..中級者(12,330ポイント)   Date: 2007/08/07(火) 09:12   No:9774     
Title: Re:ふと思ったんだけど    
ロボットの動作プログラムを作ったんですね。そういうのって確か組み込みだからC標準ライブラリ
がほとんど使えないと思うのですが、どうなのでしょうか。間違ってたらすいません。


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

Name: 管理人 [URL]  ..伝説のハッカー(389,441ポイント)   Date: 2007/08/07(火) 12:05   No:9776     
Title: Re:ふと思ったんだけど    
描画や音声再生の部分はまるっきりOpenGLの構文使う事になるので、そこはCの標準関数は全く使えません。
しかし、会話させる為の素材の文字列を完成させるとき、例えば
今日の天気がいいなら
「今日の天気は○○ですね。」
の○○に「晴れ」という文字列を組み込み、発声モジュールに渡します。
この文字列を組み込んだりする時には標準関数使いますよね。
といっても文字列の後に連結させたりする標準関数はあっても組み込む関数は標準関数に無いので
自分で関数作りましたが^^;
「処理を計算」⇒「描画」という繰り返しになりますが、
前者はCの標準関数を使ったりして計算し、描画はOpenGLの構文を使うという感じでやっていました。


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

Name: tkmakwins15 [URL]  ..中級者(12,356ポイント)   Date: 2007/08/07(火) 12:17   No:9777     
Title: Re:ふと思ったんだけど    
一応使えるところはあるんですね、とんだ勘違いをしてました。基本的に標準Cライブラリって
OSの機能を引き出すものもあるので。そうですね、文字列処理はwchar_t以外はOSとあまり関係
ないですよね。


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

Name: けるびん  ..かけだし(1,779ポイント)   Date: 2007/08/08(水) 02:43   No:9783     
Title: Re:やってみたんですが    
ぷよ○よ、楽しかったです。
僕も初心者ながら、ジャンケンゲームくらいなら作れそうなので、まずはそこから作っていこうかと思いました。


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

Name: たかぎ [URL]  ..入門者(2,624ポイント)   Date: 2007/08/08(水) 14:12   No:9788     
Title: 余談    
「ぷよぷよ」はディスクシステム版から知っていますが、まともにプレイできたのはゲームボーイ版だけでした。
強度の色覚異常なので、瞬時には色の見分けが付かないからです。(じっくり見れば分かる)
ゲームも、もっとユニバーサルデザインに考慮して欲しいものです。


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

Name: バグ  ..熟練のプログラマー(54,867ポイント)   Date: 2007/08/08(水) 14:30   No:9789     
Title: 便乗(笑)    
全然未完成ですが、とりあえず遊べるかな…
よかったら、遊んでみて下さい(^-^)

http://www7.uploader.jp/dl/123456/123456_uljp00002.zip.html

ルールはコラムスそのまんまで、操作はマウスオンリーです。


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

Name: 管理人 [URL]  ..伝説のハッカー(389,457ポイント)   Date: 2007/08/08(水) 22:40   No:9795     
Title: Re:便乗(笑)    
お〜バグさん形になりました??
時間見つけてやってみますね!!


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

Name: tkmakwins15 [URL]  ..中級者(12,431ポイント)   Date: 2007/08/08(水) 22:47   No:9796     
Title: Re:便乗(笑)    
そういえばこれって開発環境はVC++2005 EEでしょうか。

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

Name: バグ  ..熟練のプログラマー(54,898ポイント)   Date: 2007/08/08(水) 23:54   No:9797     
Title: Re:便乗    
環境はVC++6.0で、MFCを利用して作成しています。ちなみに、DirectXは使ってません(;^_^A

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

Name: tkmakwins15 [URL]  ..中級者(12,513ポイント)   Date: 2007/08/09(木) 00:17   No:9798     
Title: Re:便乗    
MFC…、僕はまだ全然手に届かない領域ですね。僕はSDKとC++の組み合わせでやってますが…。環境は
BCC++とBCC Developerでやってます。Visual Studio 2005 Academic Editionにちょっとずつ移行しよ
うとは考えてるのですが、なかなか進まなく、「買ったのに」的なとこあるんですよ(笑)


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

Name: 管理人 [URL]  ..伝説のハッカー(389,623ポイント)   Date: 2007/08/09(木) 02:38   No:9800     
Title: Re:便乗    
お〜なんか操作が斬新だ〜^^
はじめどうやって降ろすのかわかりませんでした^^;
ぷよぷよと違ってコラムスは「適当につんでたら連鎖になる」的な期待はあまりもてませんねw
DXライブラリで作製されてませんでしたっけ?
音と画像がつけないんですか?
しかし画像つかわないでこれだけキレイな表現できるんですね♪

ちなみに私の開発環境はBLACK全クリすればわかります(ぇ


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

Name: tkmakwins15 [URL]  ..中級者(12,533ポイント)   Date: 2007/08/09(木) 10:39   No:9806     
Title: Re:便乗    
とりあえず全クリするように努力してみます。

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

Name: 管理人 [URL]  ..伝説のハッカー(389,661ポイント)   Date: 2007/08/09(木) 14:51   No:9816     
Title: Re:便乗    
もしかして tkmakwins15さんはぷよぷよの時代ではないのでは??
やった事ありました?


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

Name: tkmakwins15 [URL]  ..中級者(12,579ポイント)   Date: 2007/08/09(木) 15:56   No:9821     
Title: Re:便乗    
はっきり言って、ほぼゲームをした事がありません。過去ログの管理人さんの作品もダウン
ロードしてやってますが、ゲーム経験がなく、大苦戦中です。


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

Name: ぷ〜  ..ぴよぴよ(898ポイント)   Date: 2007/08/09(木) 16:08   No:9822     
Title: コンパイル    
そうなんだ〜。 tkmakwins15さんは”ぷよぷよ”知らないんだ^^;
すると、ぷよぷよを作ったCOMPILEの名作「魔道物語」も知らないわけだ。
ダダダダダイアキュート!
ファファファファファイヤー!(笑)


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

Name: 管理人 [URL]  ..伝説のハッカー(389,772ポイント)   Date: 2007/08/09(木) 17:41   No:9826     
Title: Re:コンパイル    
え〜じゃボンバーマンも知らないんですか〜^^;
う、世代が若いというか・・、
いつも自分の世代が一番若いと思っていたのに、そろそろジジィに成ってきたと言う事でしょうか・・・。

もし苦戦するようならコンフィグで「やさしい」にしてみてください^^

コンパイルもあんなバカげた宣伝費用、費やさなければ倒産もしなかったのに・・。


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

Name: tkmakwins15 [URL]  ..中級者(12,704ポイント)   Date: 2007/08/09(木) 23:03   No:9831     
Title: Re:コンパイル    
>そうなんだ〜。 tkmakwins15さんは”ぷよぷよ”知らないんだ^^;
>すると、ぷよぷよを作ったCOMPILEの名作「魔道物語」も知らないわけだ。

はい、その通りです。まぁ「マリオ」とか、超有名なものは知ってますけど。

>え〜じゃボンバーマンも知らないんですか〜^^;

ボンバーマンについては、軽くやった事があります。ただ、あまり詳しい事は
知りません。


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

Name: 管理人 [URL]  ..伝説のハッカー(389,837ポイント)   Date: 2007/08/10(金) 01:40   No:9833     
Title: Re:コンパイル    
な、なるほど・・。
最近の人が「名作」と思うゲームってなんなのでしょう^^;


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

Name: tkmakwins15 [URL]  ..中級者(13,016ポイント)   Date: 2007/08/10(金) 02:16   No:9834     
Title: Re:コンパイル    
たぶんDS、PSP、Wii関連あたりでしょうか。ただ、昔のゲームって結構安くで手に入ったりして、
流行には乗れませんが、十分楽しいと思います。そのほか、ドラクエとかは今でも名作と言って
良いでしょうね。時代は変わって、ハードウェアの技術が進歩し、それなりに機能などについては
どんどん新しい技術が使われるようになりますが、ここまでシリーズが続くというのは、やはり名
作ってものの、輝きってものじゃないでしょうか。初期ドラクエは2Dだったと思います。古いゲー
ム機があるので、いろいろとやったりしますけど(スーパーファミコンです。ボンバーマンってそ
の時代でしたっけ?)


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

Name: 管理人 [URL]  ..伝説のハッカー(390,108ポイント)   Date: 2007/08/10(金) 02:51   No:9835     
Title: Re:コンパイル    
Wiiですかぁ・・現代っ子ですねぇ・・^^;
RPGをやり始めたのは高校生だったので私もかなり遅いですが、
それでもFFは1,2,9,10,10-2,11,12はやりました。
スーファミだと有名どころでマリオカートやマリオコレクション、ストツーなんかはまりましたねぇ。
私はスーファミ世代でファミコン世代じゃないんでファミコンはそこまでやってないんですが、ボンバーマン1はファミコンでした。結構1だけはゲーム的に違って見えます。
2もファミコンですが、こっちはかなり今のと同じですよ☆

あ、今って言ってもボンバーマンZEROは全く原型ととどめていませんが・・。
http://www.hudson.co.jp/gamenavi/gamedb/softinfo/bomb_actzero/
あのかわいい白ボムはどこへやら(T▽T)

PCエンジンだと奇奇怪怪とか・・、言ってもわからないか^^;

FF1は2人で作ったらしいですが、最近のゲームは少人数じゃ作れませんし、大企業だけが残るようなアイディアはあっても金がないと生き残れない寂しい世界になりそうですね・・。


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

Name: tkmakwins15 [URL]  ..中級者(13,075ポイント)   Date: 2007/08/10(金) 07:36   No:9837     
Title: Re:コンパイル    
かといって僕自身、上記のゲームはどれもやった事がないんですよ(笑)
でも普通大企業で作るようなゲームを一人で作ってしまうんですから、管理人さんは
すごいです。


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

Name: 管理人 [URL]  ..伝説のハッカー(390,422ポイント)   Date: 2007/08/10(金) 18:42   No:9848     
Title: Re:コンパイル    
という事はゲーム自体の経験があまりないんですか^^;
きっとゲームは真似するだけなら簡単で、何も無いところから「思いつく、創り出す」のが大変なんだと思いますm(_ _)m


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

Name: tkmakwins15 [URL]  ..中級者(13,398ポイント)   Date: 2007/08/10(金) 22:35   No:9851     
Title: Re:コンパイル    
ポケモンシリーズはアドバンス版ぐらいまでやりましたよ。

>きっとゲームは真似するだけなら簡単で、何も無いところから「思いつく、創り出す」のが大変なんだと思いますm(_ _)m

本当にそうですね。まぁ友達との「共同開発」と言うのを、やっているんですが、僕がプログラミング担当でやってるんです。
しかし、描画担当が全然進まないので、こっちが全然進まないんですよ。
なので、描画技術は他にして、自分でシューディングゲームを作ってみようと思います。


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

Name: 管理人 [URL]  ..伝説のハッカー(390,637ポイント)   Date: 2007/08/11(土) 03:08   No:9852     
Title: Re:コンパイル    
そうそう!
私は思うに私達にとってはプログラム書くより絵を描くほうが大変・・。

BLACKが完成したので今度はアクションゲーム作ってます♪
前回かなりコンツメテ作って疲れたので今度はのんびやってます^^;
パロゲーばっかりじゃん!的な突込みが多かったので、今回は色々と独自なゲームにしようと・・・
思いながらも若干「超魔界村」というゲームに似せて作ってますw
やっぱこういうのパロゲーっていうんでしょうかね^^;

絵を描くのホント難しいです・・、
実際このキャラ走らせてみたらめっちゃギコチナイギコチナイ^^;

添付の画像は胴体より上だけです。下は別に書いてあります。
上方向にも攻撃アリにしようかと思ったんですが、絵を描くのが面倒なので仕様変更となりました;


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

Name: tkmakwins15 [URL]  ..中級者(13,208ポイント)   Date: 2007/08/11(土) 09:07   No:9853     
Title: Re:コンパイル    
例えば描画技術抜きでゲームを作るとか、幾何学図形なら幾分書くのは簡単ですし…(笑)
それに参考にするだけならば別にパロゲーにならないんじゃないでしょうか。(あまりに
似せない限り)
僕の場合、他にもホームページを作っているんですが、そっちの作業のほうが良く進むん
ですよ。とりあえずC標準ライブラリのリファレンスを作ろうと思うのですが、何も画像など
を使ってないのに、stdio.hだけで100KB行っちゃうんじゃないかぐらいのペースなんですよ…


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

Name:  ..ぴよぴよ(287ポイント)   Date: 2007/08/12(日) 01:43   No:9861     
Title: Re:コンパイル    
突然お邪魔してすみませんm(_ _)m

皆すごいですねぇ〜
自分は今年始めたばかりでアクションゲーム作るという暴挙にでて・・・・
共同開発のドッターの友達が早いの何ので
こちらが待たせてるほうになってしまった・・・・
(バグも多いし・・・orz)


新しいゲーム機多いですよね、最近・・・バーチャルボーイとか知ってる人いないんだろう・・・
スーパーファミコン世代の自分は今でもクロノトリガーとかたまにやったりしてますが、
今でもすごいと思います。


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

Name: 管理人 [URL]  ..伝説のハッカー(390,900ポイント)   Date: 2007/08/12(日) 02:02   No:9862     
Title: Re:コンパイル    
> tkmakwins15さん
tkmakwins15さんってお名前なんと読むのでしょう^^;

そうなんですよね!
私達にとって画像を書く事が一番困難なので関数で線書いて画像のかわり作り出す方が簡単だったりして^^;
HP拝見しました。
すごいですねぇ、私が高校生の時は全然出来ませんでした・・。

>零さん
実は私も去年はじめたばかりなんです!
なので素人くさいゲームばかりで(_ _|||)
3DのオンラインRPGとか一人で作ってる方もウェブで見かけましたけど、すごいですねぇ、
しかしそういう人はゲームプログラマーなんでしょうかね。
バーチャルボーイ知ってますよw
ただなんかあれだけは親が目に悪いからとかいってさせてくれませんでした・・。
スーファミって今やっても面白いゲーム多いですよね!
大学生になってからもみんなで集まってボンバーマンしたりしましたよ^^


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

Name: けるびん  ..かけだし(1,857ポイント)   Date: 2007/08/12(日) 03:09   No:9863     
Title: Re:コンパイル    
自分は今、この掲示板の話題に乗せられて、スーファミはじめました。
あと、1世代前のファミコンもやってます(笑)

僕は将来、
「こういうの作ったけど、やってみる?」
とか言いたいです。SEにはなりたくないんですが。いや、なれませんが。。。


Name: tkmakwins15 [URL]  ..中級者(13,435ポイント)   Date: 2007/08/12(日) 06:36   No:9865     
Title: Re:コンパイル    
>tkmakwins15さんってお名前なんと読むのでしょう^^;

これ意味はtkが下の名前の略称で、makがmakeの意味で、winsがwindowsの略なんです。
なので、「tkはwindowsプログラムを作るぞー」と言う意味の文で、15は年齢です。読み方は
「ティーケーマックウィンズ15」でお願いします。

>HP拝見しました。
>すごいですねぇ、私が高校生の時は全然出来ませんでした・・。

これはMS-Wordで作ったものです。HTMLで保存すればあっという間にページの完成!!と言った感じです。
ただしHTMLに本名載る可能性あるのでプログラム組んで、それを隠蔽するプログラムを作ってHTMLから本
名を分からないようにしています。ちなみに、stdio.hがとりあえず完成したので、今stdlib.hを作成中
です。


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

Name: 管理人 [URL]  ..伝説のハッカー(391,319ポイント)   Date: 2007/08/13(月) 04:09   No:9869     
Title: Re:コンパイル    
>けるびんさん
そうそう、何かに刺激されて古いゲーム始めることってよくありますよねw
先日人と話をしてて突然奇奇怪怪がしたくなってずっとプレイしてましたw
DXライブラリを使えばわりと簡単にゲームは出来ますよ^^
ゲームを作るのは「賢さ」は必要なく、単に「時間と根気」があれば出来ます♪


>てぃーけーまっくうぃんずじゅうごさん
余計読みにくいし書きにくいですぅw
じゃ略してTKさんで!
そういえばアイノリにTKって人物いましたねぇ(´〜`)そんなこと関係ないか・・。
tkですか〜タカシかタカノリかタカユキか・・。その辺ですかねw
なるほど〜ワードで作った事無いですが、楽に出来そうですね。
私は素人臭くホームページビルダーです(_ _||)
そういえば最近11が出たようですね。かってみようかな♪
しかしHPの見栄えを追及するとHTMLについての知識よりアクションスクリプトの知識が必要になりますよね(-_-;)


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

Name:  ..初心者(5,492ポイント)   Date: 2007/08/14(火) 02:44   No:9873     
Title: Re:コンパイル    
お久しぶりです!
やってみましたよー
バグ報告が未だに無いのに僕だけあるのは何故だろう・・・

一つは、ぷよをある瞬間に回転するとまえのぷよが消えますw
って、どっかで見た気もするが(^-^;

もう一つは、フルスクリーンでやると、真っ黒です…
こっちは、こちらの環境のせいかもしれないので、微妙ですが・・・

9面で死亡でした…
初期速度が速くて…orz


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

Name: 管理人 [URL]  ..伝説のハッカー(391,409ポイント)   Date: 2007/08/14(火) 04:06   No:9874     
Title: Re:コンパイル    
お久しぶりです雷さん^^
プレイしていただきありがとうございます〜♪


あらら・・どんな環境ですか?
BLACKは色々と裏ワザがあるんですが、裏ワザ集作って一つにまとめてみますね〜♪


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

Name: tkmakwins15 [URL]  ..中級者(13,520ポイント)   Date: 2007/08/15(水) 22:33   No:9892     
Title: Re:コンパイル    
すいません、管理人さん。2,3日パソコンから離れていまして、返信遅れてすいません。

>tkですか〜タカシかタカノリかタカユキか・・。その辺ですかねw

あたってます。と言っても、その中のどれかは言いませんけど(笑)

>9面で死亡でした…

僕もそうです。「9」が壁みたいです。


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

Name: 管理人 [URL]  ..伝説のハッカー(391,713ポイント)   Date: 2007/08/16(木) 00:17   No:9893     
Title: Re:コンパイル    
お盆休みで実家に帰ってる人多いですねぇ。
あ、tkさんは実家暮らしですかね。
私は親に毎日のように帰って来いと言われていますが、断固として帰らない一人ですw
ブログ(http://directxq.blog58.fc2.com/)にも書きましたが、今日は琵琶湖一周してきました〜♪

最近毎日プログラム書いてばっかりだったので、いい気分転換になりました。
たまには遠出しなきゃですね☆
あ、今またBLACKとは違ったホラー系アクション作ってます。
2次元なんで、恐怖感出すのが難しいです・・。



現在製作率5%と言ったところでしょうか。
今から特に忙しくなるのできっと完成はずっと後になることでしょう・・。

>あたってます。と言っても、その中のどれかは言いませんけど(笑)

う〜ん、一番妥当なところは一番最初か・・、まぁいいですけどw

>「9」が壁

コンフィグで難易度の設定出来ますよ^^


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

Name: tkmakwins15 [URL]  ..中級者(13,732ポイント)   Date: 2007/08/16(木) 01:19   No:9895     
Title: Re:コンパイル    
何とかできました。コンソールですがHTMLから文字列を取り除くプログラム。自分の名前には何とか対応していたのですが、
全角文字の入力に戸惑いまして、何とかいろいろな言葉に対応できるようにしてみました。zipで載せます。


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

Name: 管理人 [URL]  ..伝説のハッカー(391,740ポイント)   Date: 2007/08/16(木) 02:11   No:9896     
Title: Re:コンパイル    
なるほど、、ワードで作ったHTMLファイルはかなりのコードの量になるのですね^^;
これは手作業で取り除くよりツール作った方が早いですね☆


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

Name: Justy  ..ハッカー(147,538ポイント)   Date: 2007/08/16(木) 02:13   No:9897     
Title: Re:コンパイル    
 Shift-JISオンリーのツールだとして、完成まであとちょっとですね。

 幾つかのエラーチェックの追加と境界跨ぎ(fgetsの結果 lineの境界に denameが分割されてしまった場合)の
チェックを入れれば完璧になりそうです。


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

Name: tkmakwins15 [URL]  ..中級者(13,993ポイント)   Date: 2007/08/16(木) 03:09   No:9898     
Title: Re:コンパイル    
>なるほど、、ワードで作ったHTMLファイルはかなりのコードの量になるのですね^^

実際にHTMLを書いたことないので分からないのですが、無駄なコードを勝手に追加しているようです。
無駄なコードの中に個人情報が入っているので、覆面化する必要があるようです。実際、書き換えても
別に問題はないようです。ツール作ったのは、同じ作業ならばコンピューターにやらしたほうが無駄が
ないのと、チェック漏れがないと言うメリットがあるからですが、バグがあると、一瞬でデータ破壊の
恐れがあると言うのは、怖いところです。

>幾つかのエラーチェックの追加と境界跨ぎ(fgetsの結果 lineの境界に denameが分割されてしまった場合)の
>チェックを入れれば完璧になりそうです。

やってみます。コード分割をして部品化もやってみます。


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

Name:  ..初心者(5,701ポイント)   Date: 2007/08/16(木) 12:37   No:9900     
Title: Re:コンパイル    
自分で打ったほうが…(^^;

Hellow!と表示する→色、サイズ変更
で見てみたけど、<o <w とか意味不明…
</title> から </style>は表とか無ければ完全に不要だと思うし…

手で消してもそれほど面倒じゃないんじゃ???
長文になると違うのでしょうか?
ファイルサイズに対して余分がありすぎだと思うのですが…

>バグがあると、一瞬でデータ破壊の恐れがあると言うのは、怖いところです。
</head>より下をいじらないようにすれば、少なくとも書いた文章が完全に消えることはないと思えるので、どうでしょう?
<body …>の…が少々気になりますが、個人情報には繋がってないと思えたのでw


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

Name: 管理人 [URL]  ..伝説のハッカー(391,932ポイント)   Date: 2007/08/16(木) 12:48   No:9902     
Title: Re:コンパイル    
ツールを作って勉強しようというならいいと思いますが、そうでないなら
<html>
<head>
</head>
<body>
</body>
</html>
↑これだけで立派なウェブ上に上げられるファイルになりますし、HTMLで書くのが面倒なら
ホームページビルダーやFrontPageExpressを使ってかいてみては?
表なんてワードからコピーペーストでそのまま利用できますし、特にワードから変換する事にこだわらなくてもいいのではないでしょうか?
ワードにこだわるとどんなメリットがあるんでしょう??


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

Name: YuO  ..中級者(10,654ポイント)   Date: 2007/08/16(木) 13:15   No:9903     
Title: Re:コンパイル    
HTMLとして正しいものを書くなら,文書型宣言とTITLE要素だけが必須です。
# HTML, HEAD, BODYは開始タグ・終了タグを省略可能,TITLEはHEAD内に必須で開始タグ・終了タグを省略不可能。

WORDはまともなHTMLを吐かないので,HTMLエディタ代わりに使ってはいけません。
# OperaやFirefoxでtkmakwins15さんのサイトを確認してみれば,ダメさ加減がわかるかと。

ちなみに,構文チェッカもいくつかあります。
The W3C Markup Validation Service - W3C謹製。
Another HTML-lint - 有名どころ。解説付き。



個人的にはHTML手書きでも個人サイトなら十分扱えると思っています。
# 面倒ならCMS使えばよいですし。
WYSIWYGにこだわるなら,Visual Web Developer 2005 Express Editionとかでも十分役に立つのではと思います。


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

Name: tkmakwins15 [URL]  ..中級者(14,346ポイント)   Date: 2007/08/16(木) 17:22   No:9904     
Title: Re:コンパイル    
># OperaやFirefoxでtkmakwins15さんのサイトを確認してみれば,ダメさ加減がわかるかと。

確かにそうなんです…、僕も自分のサイトのHTMLを読むのができませんので、どうしようもないんですよ。
そのためにHTMLを読まなくてもいいような読みやすさにするように心がけています。

>表なんてワードからコピーペーストでそのまま利用できますし、特にワードから変換する事にこだわらなくてもいいのではないでしょうか?
>ワードにこだわるとどんなメリットがあるんでしょう??

こだわると言うよりも、僕のパソコンにHTML文書を作れるようなソフトがソースを書くソフトを除きワード、
エクセルの部類しかないのです。メリットと言うよりもそうでないと作れなかったのでそうしているだけで
す。ソフト買うにもお金が…。


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

Name: 管理人 [URL]  ..伝説のハッカー(391,991ポイント)   Date: 2007/08/16(木) 17:42   No:9905     
Title: Re:コンパイル    
いやいやFrontPageExpressは無料ですし、ホームページビルダーは体験版がありますし。
http://www.j-ns.com/freehomepage/

ここ参考になりますよ〜♪


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

Name: tkmakwins15 [URL]  ..中級者(14,390ポイント)   Date: 2007/08/16(木) 18:17   No:9906     
Title: Re:コンパイル    
とりあえずやってみます。紹介ありがとうございます。後は、HTMLを書けるようになればいいのですが…

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

Name: 雷 [URL]  ..初心者(6,078ポイント)   Date: 2007/08/16(木) 21:39   No:9907     
Title: Re:コンパイル    
http://www.est.hi-ho.ne.jp/gaia/hp/chp0_01.html
↑ここお勧め

http://www.red.oit-net.jp/tatsuya/java/
↑JavaScriptはここを参考にw
 HTMLがそこそこ書ければ後は簡単に理解できると思いますw

以下書籍
HTML+CSS Handbook 2nd Edition 著者:水津弘幸/石井 歩/C&R研究所 2000円
JAVAsCRIPT Handbook 2nd Edition 著者:宮坂雅輝 1800円

HTML+CSSの方は持っていて損は無いものかと思います。
こちらが分かる範囲であるならお答えするので、頑張ってください!
URLに自分のHP載せときました。一様これぐらいできますと言うことで…内容は目をつぶってくださいね!w

とりあえず、<pre> <table>(<tr><td>) <font ***> <a href> + CSS が出来ればかなりの見栄えのものが出来るので、そこを重点的にw
あ、一番重要なのは、自分の気に入った素材を提供してくださる素材屋さんを探すことですw
自分で書くなんて不可能ですしw
後、お勧めのテキストエディタ↓
http://mana.ikuto.com/

ではでは〜ノシ


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

Name: tkmakwins15 [URL]  ..中級者(14,472ポイント)   Date: 2007/08/16(木) 22:44   No:9909     
Title: Re:コンパイル    
紹介ありがとうございます。がんばります。僕のHPのソースが醜いのは改善してみます。

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

Name: YuO  ..中級者(10,796ポイント)   Date: 2007/08/17(金) 04:16   No:9912     
Title: Re:コンパイル    
HTMLの書き方って,解った人間が書いているものはそれほど多くないんではないかと思う今日この頃……。
# 文法なんて,DTD見りゃ解るわけだし。

入門用としては,ごく簡単なHTMLの説明 @ The Web KANZAKIなどはお勧め。

ちなみに,WordのはいたHTMLを頑張って改善しようとするのは恐らく下策です。
文章はそのままに,HTMLを一から書き直すのが上策だと思います。
# WordとかFrontpage Expressとか,HTMLが酷いことで有名。


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

Name: tkmakwins15 [URL]  ..中級者(14,498ポイント)   Date: 2007/08/17(金) 09:51   No:9915     
Title: Re:コンパイル    
マイクロソフト製のHTML文書を作れるソフトのHTMLは醜いんですね…。

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

Name: YuO  ..中級者(10,972ポイント)   Date: 2007/08/17(金) 11:38   No:9917     
Title: Re:コンパイル    
昔のは酷かった,というのが正しいかと。

Frontpage後継のExpression Webは正しいHTMLを吐くことができます。
Frontpage (非Express) も設定次第だったようですが……。
# VSもちゃんと吐けることは吐けるはず。

ただし,WordのHTML出力機能は2007でもめちゃくちゃですけどね。
# そもそも,使いものにならない機能であることは周知の事実だと思っていた……。


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

Name: tkmakwins15 [URL]  ..中級者(14,660ポイント)   Date: 2007/08/17(金) 11:55   No:9919     
Title: Re:コンパイル    
でもなぜWordのHTML出力はめちゃくちゃなのでしょうか?ちょっと疑問に思ったので質問します。
MSももっと考慮するべきだと思いますが…

ところで、やっと「9」の壁を脱却しました(^o^)/~~


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

Name: Justy  ..ハッカー(147,625ポイント)   Date: 2007/08/17(金) 13:05   No:9920     
Title: Re:コンパイル    
 元々ワードの html出力は Web向けではなく中間ファイルとしての役割だったような・・・(記憶不確か)。
 
 でまぁ、妥協策として(どこまで使えるかはわかりませんが)こんなツールがMSから出ています。

Wordから出力されるHTMLをクリーンアップするHTML Filter
http://journal.mycom.co.jp/news/2002/10/03/10.html


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

Name: tkmakwins15 [URL]  ..中級者(14,671ポイント)   Date: 2007/08/17(金) 13:45   No:9922     
Title: Re:コンパイル    
Word2003には、フィルタ機能がついているようです。一応、それで保存してみたのを載せてみます。(ぼくのHPの乱数についてのコンテンツを、実験台にしてみました)

たぶんまだ汚いと思いますが、まだましになっているはずです。しかし、Wordでの保存は、少しずつやめていこうと思います。(現在進行形のコンテンツについては、何とかします。)


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

Name:  ..初心者(8,241ポイント)   Date: 2007/08/18(土) 05:49   No:9931     
Title: Re:コンパイル    
tkmakwins15さんのTOPをHTML化してみました(色々足りないけど)
goto文のリンクが変なところにあるけど・・・

これで大体25分ぐらいです。
初めの内は数時間かかるかもしれませんが、やったことが分からなくなったらそこを見れば理解できるようになるので、即実践していきましょう!!


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

Name: tkmakwins15 [URL]  ..中級者(14,744ポイント)   Date: 2007/08/18(土) 17:12   No:9937     
Title: Re:コンパイル    
がんばってみます。とはいっても、全てのページを書き換える間ずっと更新しないと言うのはちょっと問題があるので、暫定的には
使わざるを得ないところはあると思いますが、そこは許してください。


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



Name: ゆら  ..ぴよぴよ(164ポイント)   Date: 2007/08/18(土) 03:01   No:9927       
Title: 「17. カウンターを使って画像を表示する」について    
17. カウンターを使って画像を表示する のプログラムがよく分からないので質問させてもらいます。
プログラムの一部が下記のようにあるのですが
CounterもPush_Flagも初期値はゼロなのでエンターを押してもPush_Flagの値はゼロのままで、
その次にある画像表示が何故実行されるのか分かりません。何故なのでしょうか?

int x=0,image,Counter=0,Push_Flag=0;

     (中略)

if( Key[ KEY_INPUT_RETURN ] == 1 ) //エンターが押されたら
Push_Flag=Counter ; //Push_Flagに今のカウンター数を代入

if(Push_Flag>0) //Push_Flagが0より大きい値なら
DrawGraph( Counter-Push_Flag , 0 , image , TRUE ) ;//x座標をカウンター数によって画像を表示

if( Key[ KEY_INPUT_ESCAPE ] == 1 ) break ; //ESCボタンで終了
if( ProcessMessage() == -1 ) break ; //エラーが起きたら終了
ScreenFlip() ; // 裏画面データを表画面へ反映
Counter++;


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


Name: ゆら  ..ぴよぴよ(204ポイント)   Date: 2007/08/18(土) 03:09   No:9928     
Title: Re:「17. カウンターを使って画像を表示する」について    
連投すみません。さらによく考えた結果、
Counter++;があるのでCounterはすぐにゼロではなくなり、それをPush_Flagに代入するのでゼロ以上になる
ってことで大丈夫でしょうか?


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

Name:  ..初心者(8,187ポイント)   Date: 2007/08/18(土) 04:56   No:9930     
Title: Re:「17. カウンターを使って画像を表示する」について    
いいと思いますよ
押した後に足しているので、押したから動いた!って感じにしてあるかと・・・
whileでぐるぐる回っている間中は変化するって感じかな?


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

Name: ゆら  ..ぴよぴよ(223ポイント)   Date: 2007/08/18(土) 14:58   No:9936 解決!     
Title: Re:「17. カウンターを使って画像を表示する」について    
すみません、ありがとうございました。

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



Name: もうじ  ..ぴよぴよ(188ポイント)   Date: 2007/08/17(金) 09:57   No:9916       
Title: 保存について    
すみません、また質問なのですがVisual C++2005 の設定でファイルをいじったあとに保存しようとしても
アクセス権限がありません。管理者に許可をとってください という文字がでて保存ができません。
どうしたらいいでしょうか?ちなみに読み取りのチェックははずしてあります。


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


Name: Blue  ..かけだし(1,575ポイント)   Date: 2007/08/17(金) 11:50   No:9918     
Title: Re:保存について    
OSはVistaですか?

また、ユーザアカウントはどのようになっていますか?
(制限ユーザとかにはなっていないか?)


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

Name: もうじ  ..ぴよぴよ(221ポイント)   Date: 2007/08/17(金) 13:08   No:9921     
Title: Re:保存について    
返信あえいがとうございます。
アカウントはコンピュータの管理者になっています。


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

Name: Blue  ..かけだし(1,603ポイント)   Date: 2007/08/17(金) 14:12   No:9923     
Title: Re:保存について    
>OSはVistaですか?
について返答してください。
違う場合はどのOSなのか明記してください。


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

Name: もうじ  ..ぴよぴよ(255ポイント)   Date: 2007/08/17(金) 15:43   No:9924     
Title: Re:保存について    
OSビスタです
友人がビスタだからできないんじゃないかと言っていたのですがどうなのでしょうか?


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

Name: Blue  ..かけだし(1,707ポイント)   Date: 2007/08/17(金) 15:53   No:9925     
Title: Re:保存について    
プログラムを作る側の人(開発者)ならUACぐらい知っててもらいたいものです。

[MSDNフォーラム]「Windows アプリケーション」がアクティブにならない
http://forums.microsoft.com/msdn-ja/ShowPost.aspx?PostID=1359083&SiteID=7


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



Name: もうじ  ..ぴよぴよ(9ポイント)   Date: 2007/08/16(木) 04:18   No:9899       
Title: 書き方が悪かったです。    
質問なんですが VisualC++ 2005 Express Edition の設定で
オプション→プロジェクトおよびソリューション→VC++ディレクトリ
→ディレクトリを表示するプロジェクトのところで インクルードファイルとライブラリファイルの
ディレクトリリストの中身を消してしまい、間違って保存してしまいました。
アンインストールしてまたインストールしても元にもどらなかったです。
どうすればいいでしょうか?


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


Name: Blue  ..かけだし(1,544ポイント)   Date: 2007/08/16(木) 22:18   No:9908     
Title: Re:書き方が悪かったです。    
再インストールするときは
「%USERPROFILE%\Local Settings\Application Data\Microsoft\VCExpress\8.0」

vccomponents.dat
を削除してからやってみてはどうでしょうか?

参考
[MSDNフォーラム]VC++EXPRESS アンインストール方法
http://forums.microsoft.com/msdn-ja/ShowPost.aspx?PostID=691940&SiteID=7


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

Name: もうじ  ..ぴよぴよ(33ポイント)   Date: 2007/08/17(金) 07:50   No:9913     
Title: Re:書き方が悪かったです。    
Blueさんありがとうございます!やってみます!

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

Name: もうじ  ..ぴよぴよ(51ポイント)   Date: 2007/08/17(金) 08:40   No:9914 解決!     
Title: Re:書き方が悪かったです。    
直りました!Blueさん本当にありがとうございました!

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



Name: まだまだ  ..かけだし(1,243ポイント)   Date: 2007/08/12(日) 12:05   No:9866       
Title: これだと不都合でしょうか    
こんにちは
下記のような書き方はだめでしょうか。

class Aのメンバーとして short *st = NULL; があるとします。
そしてAのconstructorに以下のような文を発行します
st = new short(100);
~A() には
delete[] st;
を発行します。
そうしたら下記のようなやり方はだめしょうか。
short *foo()
{
A a;
return a.st;
}
foo()が終わり時点で、aが消滅され、aのdeconstructorで
stの本体を解放されてしまいます?
もしほんとうにだめなら、どうやって回避できるのでようか。
ご教授お願い致します。


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


Name: たかぎ [URL]  ..入門者(3,590ポイント)   Date: 2007/08/13(月) 00:02   No:9867     
Title: Re:これだと不都合でしょうか    
> class Aのメンバーとして short *st = NULL; があるとします。

NULLで初期化していますが、どういう意味でしょうか?
静的データメンバでしょうか?

> そしてAのconstructorに以下のような文を発行します
> st = new short(100);
> ~A() には
> delete[] st;
> を発行します。

発行というのがよくわかりませんが、new short(100)は配列用のものではなく、short型のオブジェクトを1個生成し、その値を100にするという意味です。ですから、delete[]で解放するのは間違っています。

もう少し状況を明確にしてください。


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

Name: まだまだ  ..かけだし(1,411ポイント)   Date: 2007/08/13(月) 12:46   No:9870     
Title: Re:これだと不都合でしょうか    
たかぎ様

> short *s t= NULL;
間違っています。
昔の名残で、short *st; であるべき。
”発行する”という言い方は、書いて実行させるという意味で、
不明確でごめんなさい。

> new short(100);

これも大きな間違いで、ご指摘のとおり
new short[100];
であるべきです。
[このような間違いは実は以前自分書いたC++のソースにありました]

再度お願い致します。


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

Name: たかぎ [URL]  ..入門者(3,644ポイント)   Date: 2007/08/13(月) 13:20   No:9871     
Title: Re:これだと不都合でしょうか    
それでは本題に戻って...

> もしほんとうにだめなら、どうやって回避できるのでようか。

本当にダメです。理由はお分かりの通りです。
回避の方法ですが、foo 関数の処理が本当にこれだけなのか、それとも何らかの副作用を伴うのかによって、最適な方法が異なります。

まず、配列形式の new は、同じクラスや関数の中など、閉じた範囲で使うのであれば構いませんが、そうではなく、他とのインタフェースに使うのはやめた方が無難です。今回のように、配列形式の new で割付けたオブジェクトへのポインタを返した場合、foo 関数の呼び出し側では、その解放方法を間違う可能性が大だからです。

そこで、配列形式の new の代わりに、vector クラステンプレートを使うことをお勧めします。次のような感じです。

class A
{
std::vector<short> st;
public:
A() : st(300, 0) {}
const std::vector<short>& get_st() const { return st; }
};

std::vector<short> foo()
{
A a;
return a.get_st();
}


この方法だと、foo 関数から返る際に vector がコピーされるため、若干の効率の悪さはありますが、多くの問題を回避できますし、使い勝手もよいと思います。

しかし、foo 関数内では、実はもっと他の処理を行い、結果として副作用を伴うのであれば、先ほどの方法は強い例外安全を保障できなくなります。そこで、

class A
{
std::auto_ptr<std::vector<short> > st;
pulic:
A() : st(new std::vector<short>(300, 0)) {}
A(const A& other) : st(new std::vector<short>(*other.st)) {}
A& operator=(const A& other)
{
A t(other);
swap(t);
return *this;
}
void swap(A& other)
{
std::swap(st, other.st);
}
std::auto_ptr<std::vector<short> > get_st() { return st; }
}

std::auto_ptr<std::vector<short> > foo()
{
A a;
return a.get_st();
}


とすることで、問題を回避できます。
なお、先ほどのものとは、get_st メンバ関数のセマンティクスが異なりますので注意してください。


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

Name: まだまだ  ..かけだし(2,045ポイント)   Date: 2007/08/13(月) 17:33   No:9872     
Title: Re:これだと不都合でしょうか    
たかぎさま
ご返答ありがとうございます
詳しい例大変助かりました。
正直に言って例の理解に少々時間かかりました。
C(C++)では文字列や配列を渡したりすることは日常茶飯事のようなもので、
こんな大掛かりの設計を必要するのは知りませんでした。

私の理解正しいかどうか、ちょっと確認させていただきたいですが、
'='を代入として定義しておいて、そして代入する時に、swapで相手class(object)のメンバーに
配列の内容を丸ごと複製することはこのやり方のみそでしょうか。

そうであれば、例えば画像データ(長い配列)を渡すのに毎回毎回コピーすることは
時間的に許せない側面もあります、、、

私の理解が正しくないかもしれませんが。

またご教授お願いできればと思います。




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

Name: たかぎ [URL]  ..入門者(4,188ポイント)   Date: 2007/08/15(水) 15:02   No:9890     
Title: Re:これだと不都合でしょうか    
> '='を代入として定義しておいて、そして代入する時に、swapで相手class(object)のメンバーに
> 配列の内容を丸ごと複製することはこのやり方のみそでしょうか。

いいえ。重要なのは、std::auto_ptr を用いてデータを管理する部分です。
ただし、std::auto_ptr を使えば、デフォルトのコピーコンストラクタやコピー代入演算子が使えなくなるため、どうしても上のように定義しなおす必要が出てきます。あるいは、コピーできないように、コピーコンストラクタやコピー代入演算子を隠蔽してしまうかです。

なお、swap は st(すなわち std::auto_ptr )をコピーするもので、ここでは複製は起きません。
複製しているのは、その直前の A t(other); の部分です。

> そうであれば、例えば画像データ(長い配列)を渡すのに毎回毎回コピーすることは
> 時間的に許せない側面もあります、、、

コピーコンストラクタやコピー代入演算子は、内部的に管理しているデータを丸ごとコピーするのが基本です。しかし、今回の場合は、foo 関数から返しているのは std::auto_ptr であり、ポインタを1個返すのと、それほど効率が変わるわけではありません。


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

Name: まだまだ  ..かけだし(2,110ポイント)   Date: 2007/08/15(水) 17:40   No:9891 解決!     
Title: お礼    
たかぎ様
丁寧なご解説よくわかりました。
ほんとうにいい勉強になりました。
お蔭様でC++の面白みを少しずつ感じるようになりました。

ほんとうにありがとうございます


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



Name: gest  ..ぴよぴよ(25ポイント)   Date: 2007/08/15(水) 00:22   No:9885       
Title: インデント。    
始めたばかりで何もわからずインデントがおかしいと
注意されたのですが正しくはどう行うのでしょうか?
   

    for(j=0; from[j]; ++i,++j)
to[i]=from[j];
to[i] = NULL;
}


よろしくお願いします。


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


Name: バグ  ..熟練のプログラマー(54,766ポイント)   Date: 2007/08/15(水) 00:45   No:9886     
Title: Re:インデント。    
{ }の片割れがありませんね。for文の後に { を付け足せば大丈夫じゃないでしょうか…?

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

Name: 管理人 [URL]  ..伝説のハッカー(391,463ポイント)   Date: 2007/08/15(水) 02:20   No:9887     
Title: Re:インデント。    
普通{を書くと次の行からはタブ一個分下げて書きます。
こんな感じです。

if(a==1){
for(i=0;i<10;i++){
printf("hello");
}
printf("\n");
for(i=0;i<2;i++){
printf("hi");
}
printf("\n");
}
 
 
C言語って基本的にカッコで始まりカッコで終わる性質があるので、
カッコがどこからどこまでどのように対応しているのかを見やすくする為にインデントするわけです(*^ー゜)b


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

Name: Hermit  ..中級者(13,064ポイント)   Date: 2007/08/15(水) 07:14   No:9888     
Title: Re:インデント。    
今回の場合、
    for(j=0; from[j]; ++i,++j)

to[i]=from[j];
to[i] = NULL;

だと思われます。

インデントは、indent コマンドなどを使うと勝手にインデントを変更してくれて便利かも。

有名どころは、gnu indent ですが、indent -kr foo.c などが、K&R 形式でインデントしてくれるので
割と受け入れられやすいと思いますが、
オプション無しだと、嫌がられるかも。(私は好んでオプション無しにしてますが(^^;)


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

Name: バグ  ..熟練のプログラマー(54,769ポイント)   Date: 2007/08/15(水) 12:27   No:9889     
Title: Re:インデント。    
あ、本当だ…

よくみると、最後をNULLにしたいみたいですね…失礼しました(;^_^A


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



Name: ぱひゅーん  ..ぴよぴよ(104ポイント)   Date: 2007/08/14(火) 21:01   No:9880       
Title: テキストファイルのある一行が80文字を超えると・・・    
ファイルからテキストを読み込んで
文章を表示するアルゴリズムをつくって
表示させたまではいいのですが、テキストファイルの中身で
一行の文字数が80を超えると表示がおかしくなるんです。
しょうがないので80を超えないように改行を繰り返して
いたんですけど、そうすると文章が短くなってしまって
あたらしい行を表示するためにエンターを押す回数が増えるから
よくないと思ったので投稿しましたー。

話読んでる途中でなぜか文章を格納した配列の最初の要素の
中身が80文字を飛び出した分の文章にかわってしまうんです。
そんな処理はどこにも書いてないのでそのようなことがおこるはずがないのですが。

どう考えてもわからなくて困ってます。
zip形式にしてファイルもろもろも添付しましたので
よろしかったら見てやってください。

よろしくお願いします。


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


Name: box  ..比類無きプログラマー(84,518ポイント)   Date: 2007/08/14(火) 21:23   No:9881     
Title: Re:テキストファイルのある一行が80文字を超えると・・・    
少なくともmain関数と"panda.h"も併せて提示してくださらないと、
コンパイルできません。


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

Name: ぱひゅーん  ..ぴよぴよ(279ポイント)   Date: 2007/08/14(火) 23:02   No:9882     
Title: Re:テキストファイルのある一行が80文字を超えると・・・    
panda.hとmain関数も提示したいんですけど
そのためには多分ほかのpanda.hでインクルードするファイルとか
も必要になって、、、
ファイルの容量とかがたりませんしあげられないんですけど、
どうすればいいのでしょうか?
ソースコードをそれぞれあげたらいいんでしょうか

ファイルの限度は120KBみたいですし。
コンパイルして実行するにもDXライブラリつかってますから
そのためのファイルと設定も必要になりますし、、、

いろいろ不備の癖に質問して申し訳ないです



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

Name: 通りすが  ..ぴよぴよ(16ポイント)   Date: 2007/08/14(火) 23:32   No:9883     
Title: Re:テキストファイルのある一行が80文字を超えると・・・    
バッファにする変数の配列を80個しか宣言してないのでは?

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

Name: ぱひゅーん  ..ぴよぴよ(283ポイント)   Date: 2007/08/15(水) 00:00   No:9884 解決!     
Title: Re:テキストファイルのある一行が80文字を超えると・・・    
あるひとに聞いてみましたら
そう答えられたので
みてみましたらそうでしたwwwwww

すごく簡単な問題でしたねスイマセン。
配列の中身が上書きされるとかは
構造体で次のメモリにそれがあるからって話でした。

boxさん、通りすがさん
どうもありがとうございましたっ

オーバーフロー気をつけてるはずなのにやらかしちゃって
やんなりますーーorz




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



Name:  ..ぴよぴよ(41ポイント)   Date: 2007/08/14(火) 15:58   No:9875       
Title: リソースの使い方    
リソースの使い方について悩んでいます。画像をリソースするにはリソーススクリプトファイルに

title RCDATA "data\gametitle.jpg"

と書き、

HRSRC hRes = FindResource(NULL, "title", RT_RCDATA);
gametitlejpg = CreateGraphFromMem(LockResource(LoadResource(NULL, hRes)), SizeofResource(NULL, hRes));
DrawGraph(0,60,gametitlejpg,FALSE);

と使ういうことは分かりました。しかし動画を同じ方法でやろうと思ったら「Turbo Incremental Linker」が強制終了してしまいます。動画は別の方法でリソースしなければならないのでしょうか?

DXライブラリとC言語をつかってシューティングを作っています。
使用コンパイラは Borland bcc32
補助ソフトとして BCC Developer を使っています。
DXライブラリを使うのは初めてです。暗号化は難しそうだったのでリソースでデータをプレイヤーから隠そうと考えています


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


Name: Justy  ..ハッカー(147,471ポイント)   Date: 2007/08/14(火) 17:22   No:9876     
Title: Re:リソースの使い方    
 リソースの埋め込みはそれでいいと思います。

 が、CreateGraphFromMem()は画像用ですし、動画で同じ方法ってどの関数を使ったのでしょうか。
 一見メモリから動画を再生する関数は Dxライブラリにはないように見えますが。

 もしあるようでしたら、その関数を提示して下さい。
 ないようでしたら、そもそもメモリから再生はできないと考えて別の手段を考える必要があります。
 
 
 例えばあくまでリソースとして埋め込みたいのであれば、そのメモリ内にあるデータを
一端ユーザにはわからないようなところにファイルとして書き出して(不可視属性をつけておくと尚良し)、
そのファイルから動画を再生させ、再生が終了したらそのファイルを消す、とか。

 Win32APIの GetTempPath()とか GetTempFileName()などのテンポラリ関連の操作関数と
併用すれば解析されない限りそうそうユーザーにはわからないと思います。


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

Name:  ..ぴよぴよ(228ポイント)   Date: 2007/08/14(火) 17:37   No:9877     
Title: Re:リソースの使い方    
>>Justyさん

回答ありがとうございます。

リソースに

movie RCDATA "data\opening.wmv"

と記述し、

HRSRC hRes = FindResource(NULL, "movie", RT_RCDATA);
int opening = CreateGraphFromMem(LockResource(LoadResource(NULL, hRes)), SizeofResource(NULL, hRes));
PlayMovie("opening",1,DX_MOVIEPLAYTYPE_BCANCEL);

とソースの方に記述して動画を再生しようと考えましたが強制終了してしまいました。

動画は普通リソースとして埋め込まないものなんでしょうか?


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

Name: Justy  ..ハッカー(147,479ポイント)   Date: 2007/08/14(火) 18:25   No:9878     
Title: Re:リソースの使い方    
>int opening = CreateGraphFromMem(LockResource(LoadResource(NULL, hRes)), SizeofResource(NULL, hRes));
 CreateGraphFromMem()・・・この関数は画像用です。動画で使うべきものではありません。
 多分、こういう使い方をしたときのこの関数の戻り値 openingのは -1(エラー)になっていると思います。
 それに得られたグラフィックハンドル openingを使わず、"opening"というファイルの動画を再生しようとしていますよ。

 とりあえず、動画用のメモリから再生するルーチンを探してみて下さい。
(私には見つけられませんでした)


>動画は普通リソースとして埋め込まないものなんでしょうか
 んー、動画をリソースして埋め込むのはあまり聞かないですね。
 基本的にアイコンとかダイアログとかメニューとかの直接アプリケーションに関わっているもの以外のデータは
プログラムと分離するのが普通ですし。



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

Name:  ..ぴよぴよ(238ポイント)   Date: 2007/08/14(火) 19:33   No:9879 解決!     
Title: Re:リソースの使い方    
>>Justyさん

リソース以外の方法でプレイヤーから動画を隠す方法も考えてみます。

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


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



Name: PINO  ..ぴよぴよ(149ポイント)   Date: 2007/08/09(木) 01:52   No:9799       
Title: クォータービュー視点 〜 マウスでの移動    
いつもこの掲示板の質問、回答には勉強させられています。
ひとつつっかかってしまったので、質問させてください。

現在クォータービュー視点のゲームを製作しているのですが
マウスにて移動を行いたいと考えています。
ただ、どうしてもうまい具合にひし形での座標が得られず製作が進まなくなってしまいました。
解決方法などお教えいただけるとありがたいです。


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


Name: PINO  ..ぴよぴよ(185ポイント)   Date: 2007/08/09(木) 04:00   No:9801     
Title: 補足    
開発環境はMicrosoft Visual C++ 2005 Express Edition
DXライブラリを使用しています。


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

Name: 管理人 [URL]  ..伝説のハッカー(389,637ポイント)   Date: 2007/08/09(木) 04:37   No:9802     
Title: Re:補足    
クォータービューですと、単純に45度足して計算してやればいいと思いますけど、うまくいかないとは具体的にどのように思い通りにならないのでしょう?

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

Name: PINO [URL]  ..ぴよぴよ(238ポイント)   Date: 2007/08/09(木) 06:27   No:9803     
Title: Re:補足    
ご返答ありがとうございます。

語彙不足で説明が苦手なので(苦笑)WEBページに画像つきで書いてみました。

http://pinomyth.web.fc2.com/


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

Name: bin  ..ぴよぴよ(6ポイント)   Date: 2007/08/09(木) 08:28   No:9804     
Title: Re:補足    
2Dで考える場合、マップが描画できてるなら0-0マスのウインドウ位置がわかってるはずなので、
そこを基準にマウスとの相対位置で割り出すという手もあります。
もっとスマートにやる場合はマップそのものを3Dにする必要が出てくるんで、3Dゲームを作る覚悟がなければ
前者をお勧めします。


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

Name: PINO  ..ぴよぴよ(463ポイント)   Date: 2007/08/09(木) 08:58   No:9805     
Title: Re:補足    
ご返答ありがとうございます。

>>マウスとの相対位置
ここでだいぶつまづいちゃってます…。

>>3D
できれば使い慣れたDXライブラリで作りたいのでこれは避けたいです。
(技術的にもですが・・・)

キーボードでの移動が手ごろだとは思うのですが、
製作するゲームの仕様上、どうしてもマウスが利用したいんですよね 汗
いっそクォータービューをやめるって手もありにはありなのですが、
高さも表現したいので・・・。

なかなか難しいですね〜。
もう少し粘ってきます。


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

Name: YuO  ..中級者(10,319ポイント)   Date: 2007/08/09(木) 12:26   No:9809     
Title: Re:補足    
単純に座標系の変換だけで済みませんか?

1. まずは,マップ座標系とスクリーン座標系の関係式を調べます。
マップ座標系を45度回転させると,
x' = x / √2 - y / √2
y' = y / √2 + x / √2
これは,マップ座標系(x,y)とスクリーン座標系(x',y')の関係の式になります。
# 単純に回転行列を分解しただけです。

2. 次に,x', y'からx, yを求める式を出します。
x = (x' + y') / √2
y = (y' - x') / √2

これは,原点を一致させた回転ですが,ずれている場合はスクリーン座標系上でずれを補正してやれば,同じ式が使えます。

2の式によって得られたものはマップ座標系上のマウスの位置になります。
ただし,式の都合上単位長さは同じとしているので,得られる値はマスが48 x 48の場合における座標になりますが,これは48で割ってやればよいので問題にはならないと思います。


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

Name: Justy  ..ハッカー(146,869ポイント)   Date: 2007/08/09(木) 12:35   No:9810     
Title: Re:補足    
 マウスの座標はウインドウ内での座標なので、菱形のマップチップベースの座標を得るには
まず菱形自体をウインドウ座標で計算する必要があります。

 各菱形の各頂点の座標が求まれば、後はどの菱形の内部にマウスがあるかを調べるだけです。

 ちょうど昼休みなので、ちょっとサンプルを作ってみました。
 ご参考のほどに。


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

Name: PIKO  ..ぴよぴよ(26ポイント)   Date: 2007/08/10(金) 10:05   No:9840     
Title: Re:補足    
ご回答ありがとうございます。

いまお二人の案&ソースを解読中です。
できしだい報告いたします。


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

Name: PIKO  ..ぴよぴよ(186ポイント)   Date: 2007/08/10(金) 20:16   No:9849     
Title: Re:補足    
どうにか解読、導入に成功しました。
ここの皆様には、いつも感謝の念でいっぱいです。

と、ここで連続になってしまうのですが、
もうひとつよろしいでしょうか?

現在地と移動指定先の最短コースを求める関数を作ろうとしていているのですが、
手ごろな方法はなにかないでしょうか?
「ダイクストラ法」というものも調べてみたのですが
なかなかわかりやすい解説がみつからないのでここにてご質問させていただきます。


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

Name: PINO  ..ぴよぴよ(471ポイント)   Date: 2007/08/10(金) 21:38   No:9850     
Title: Re:補足    
な。。名前が間違えてる。。。

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

Name: Justy  ..ハッカー(147,199ポイント)   Date: 2007/08/11(土) 21:43   No:9857     
Title: Re:補足    
>手ごろな方法はなにかないでしょうか
 どういう条件で移動が行われますか?
(あちこちに移動できないところがある、とか、地形があって移動コストが
それぞれ異なる、とか)

 http://pinomyth.web.fc2.com/のような壁が周囲にしかない完全にグリッド状に
並んでいて、且つ移動コストも均一であるなら、非常に単純なのですが。


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

Name: PINO  ..ぴよぴよ(407ポイント)   Date: 2007/08/11(土) 21:47   No:9858     
Title: Re:補足    
ご返答ありがとうございます。

>>あちこちに移動できないところがある
これですね。
障害物があれば、それをさけて進みたいです。


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

Name: Justy  ..ハッカー(147,344ポイント)   Date: 2007/08/12(日) 03:20   No:9864     
Title: Re:補足    
 こういうのはゲームの内容に合わせて最適なものを選ぶ必要があります。
 ダイクストラで十分ならいいのですが。


最短経路求解プログラム
http://www5.airnet.ne.jp/tomy/cpro/etc16.htm


 ある程度CPUにパワーがあるなら A* (A-Star)がお薦めです。
A*
http://www5f.biglobe.ne.jp/~kenmo/program/SLG/astar/astar.html



 あとこの本が参考になりそうです。
http://www.amazon.co.jp/dp/4873112168/



# 書くのが面倒なら、グラフ理論を扱ったライブラリを使うというのも手ですね。


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

Name: Justy  ..ハッカー(147,227ポイント)   Date: 2007/08/13(月) 01:57   No:9868     
Title: Re:補足    
 文献紹介するだけではさすがにアレなので適当な A*のサンプルを作ってみました。
(あんまり綺麗なソースではないですが・・・)


 ∞は絶対に移動できないところです。
 数字はそのブロックを移動するのに必要なコスト値です。
 マウスをクリックすると移動の開始地点を変更できます。


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



Name: 新人  ..かけだし(1,012ポイント)   Date: 2007/08/03(金) 17:46   No:9662       
Title: 画像データの暗号化について    
まだまだC言語を始めてからまもない新人です。
このサイトの講座には大変助けられています。

質問なのですが、現在ゲームを開発していて
ふと画像データを見られては嫌だな、と暗号化に手をつけようと思うのですが、
なかなかうまくいきません。
DXライブラリ本館のリファレンス「CreateGraphFromMem〜」より
NOT演算(~)なるものをしてみようかとも思ったのですが、
NOT演算(~)を画像データに掛ける方法がわかりません。。

また、同様の方法でセーブデータなどの暗号化も可能でしょうか?

もしよろしければアドバイスなどいただけたら幸いです。


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


Name: tkmakwins15 [URL]  ..中級者(10,601ポイント)   Date: 2007/08/03(金) 20:43   No:9663     
Title: Re:画像データの暗号化について    
グラフィックを1バイトずつunsigned char型配列に収め、順番にNOT演算を掛けていくと
言うのはどうでしょうか。unsigned char型配列なのは、NOTを含むBit演算は符号なし整
数に適用するほうがいいからです。


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

Name: Justy  ..ハッカー(144,633ポイント)   Date: 2007/08/03(金) 21:26   No:9666     
Title: Re:画像データの暗号化について    
NOT演算(~)を画像データに掛ける方法がわかりません

 NOT演算というのは値に対し "~"をつけることで内部のビットが反転(2進数で 0101なら 1010のように)させることです。
 当然、もう1度 ~を行うことで元の値に戻すことができます。

    //  初期化(0000 0111 0101 1011 1100 1101 0001 0101) 

unsigned int v1 = 123456789;
printf("org v1 = %u\n", v1);

// not化(1111 1000 1010 0100 0011 0010 1110 1010)
v1 = ~v1;
printf("not v1 = %u\n", v1);

// 元に戻す(0000 0111 0101 1011 1100 1101 0001 0101)
v1 = ~v1;
printf("rvt v1 = %u\n", v1);

 
 これを実行すると

org v1 = 123456789
not v1 = 4171510506
rvt v1 = 123456789


 と、notで反転したものが rvtで元に戻ります。
(orgはオリジナル、notはそのまま、rvtは notされた値を再度 notしたときの値です)


 これが NOT演算の基本ですが、これを画像データに適用するなら、以下のように行います。
#include <stdio.h>

#include <stdlib.h>

// ファイルから読み出し
void *read_file(const char *fileName, unsigned int *pSize)
{
FILE *fp;
unsigned char *buff;
unsigned int size;

if(!fileName) return NULL;
fp = fopen(fileName, "rb");

if(!fp) return NULL;
fseek(fp, 0, SEEK_END);
size = (size_t)ftell(fp);
fseek(fp, 0, SEEK_SET);

buff = (unsigned char *)malloc(size+1);
if(buff)
{
fread((void*)buff, (size_t)size, 1, fp);
buff[size] = 0;
if(pSize) *pSize = size;
}

fclose(fp);
return buff;
}

// ファイルに書き出し
void write_file(const char *fileName, void *buff, unsigned int buffSize)
{
FILE *fp;

if(!fileName) return;
if(!buff || !buffSize) return;

fp = fopen(fileName, "wb");
if(fp)
{
fwrite(buff, (size_t)buffSize, 1, fp);
fclose(fp);
}
}

// 指定されたサイズ分 srcから NOT処理をして outに書き出す
void data_not(void *dest, const void *src, unsigned int size)
{
unsigned char *uc8_dest = (unsigned char *)dest;
const unsigned char *uc8_src = (const unsigned char *)src;
while(size--)
*uc8_dest++ = ~*uc8_src++;
}

int main()
{
// ファイル名
static const char inFileName[] = "sample.bmp";
static const char outFileName[] = "sample.bmp.not";

// ファイルを読む
unsigned int fileSize;
void *graphicsData = read_file(inFileName, &fileSize);

if(graphicsData)
{
// NOT処理をしてファイルに書き出す
data_not(graphicsData, graphicsData, fileSize);
write_file(outFileName, graphicsData, fileSize);

free(graphicsData);
}
return 0;
}


 read_file()でファイルの内容を全て読みとり、data_not()で全データに対して NOT処理をかけています。
(ついでに write_file()で NOTしたデータをファイルに書き出しています)



同様の方法でセーブデータなどの暗号化も可能でしょうか
 可能です。
 ただ、NOTは非常に規則性を見破ることが容易なので、XOR演算やローテートなどを組み合わせた方がいいかと思います。

http://ja.wikipedia.org/wiki/%E3%83%93%E3%83%83%E3%83%88%E6%BC%94%E7%AE%97


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

Name: 新人  ..ぴよぴよ(893ポイント)   Date: 2007/08/03(金) 22:02   No:9668     
Title: Re:画像データの暗号化について    
丁寧なご返答ありがとうございます。

上記のソースなのですが、コンパイル時にエラーがでてしまいます 汗
未熟者なので解決にみちびけず、どのようにすればいいでしょうか?

ちなみにMicrosoft Visual C++ 2005 Express Editionを利用しています。


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

Name: Justy  ..ハッカー(144,646ポイント)   Date: 2007/08/03(金) 22:14   No:9669     
Title: Re:画像データの暗号化について    
 具体的にどういうエラーが出ますか?

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

Name: 新人  ..ぴよぴよ(924ポイント)   Date: 2007/08/03(金) 22:24   No:9672     
Title: Re:画像データの暗号化について    
1>c:\~\main.cpp(19) : error C2440: '=' : 'void *' から 'unsigned char *' に変換できません。
1> 'void*' から非 'void' 型への変換には明示的なキャストが必要です。

といったものです。


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

Name: Justy  ..ハッカー(144,724ポイント)   Date: 2007/08/03(金) 22:53   No:9673     
Title: Re:画像データの暗号化について    
 あぁ、なるほど。
 失礼しました。C++でコンパイルしていましたか。

 その行を
buff = (unsigned char *)malloc(size+1);
 と書き換えみて下さい。


# 上のも修正しておきます。


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

Name: 新人  ..かけだし(1,278ポイント)   Date: 2007/08/04(土) 02:54   No:9675     
Title: Re:画像データの暗号化について    
ありがとうございます!
無事コンパイルが成功し、暗号化ファイルも生成できました。

質問ばかりで申し訳ないのですが、
もうひとつよろしいでしょうか?

暗号化されたセーブデータのロード時なのですが、
どのようにすればよいでしょうか?
できれば読み込む際にnotし、解読したいのですが・・・
現在のソースを提示しておきます。


FILE *fp ;
fp = fopen("暗号化されたファイル", "r") ;
if (fp == NULL)
{
printf("セーブデータを開けませんでした。\n");
return EXIT_FAILURE;
}
script_count = 0 ;


/* 読み込み */

while (fgets(Script[script_count], STR_MAX, fp) != NULL)

{
/* 最後の改行を削除 */
script_last = strlen(Script[script_count]) - 1;
if (Script[script_count][script_last] == '\n')
{
Script[script_count][script_last] = '\0';
}
script_count++;
}

fclose(fp) ;


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

Name: 新人  ..かけだし(1,448ポイント)   Date: 2007/08/04(土) 03:27   No:9676     
Title: Re:画像データの暗号化について    

上記にあげられていた暗号化プログラムを応用して解読が可能でしたね;
おかげで無事に問題を解決することができました。
質問に答えていただいたお二人、本当にありがとうございます。


以降余談ですが・・・
今回のことで少し暗号化というものについて興味がでてきました。
かねてから多少なり興味はあったものの
敷地があまりにたかそうだな・・・などとあきらめていたのですが、
簡単なレベルのものもあるのですね。
すこしづつ複雑なものをつかっていけるように
精進していきたいと思います。