C言語何でも質問掲示板


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

規約と使い方

 
   noname   
     ・[16385] やそ 
     ・[16386] aniki 
     ・[16387] aniki 
     ・[16390] やそ 
   DxLib_VCのことなんで ....   
     ・[16382] fake 
   シューティングゲーム ....   
     ・[16350] 管理人 
     ・[16361] 鷹見 
     ・[16366] 管理人 
     ・[16369] 鷹見 
   こんにちは。   
     ・[16347] やそ 
     ・[16351] 管理人 
   こんにちわ   
     ・[16349] 管理人 
   敵がいないのにたまが ....   
     ・[16335] 管理人 
     ・[16339] ahetan 
     ・[16342] バグ 
     ・[16343] ahetan 
   for文について   
     ・[16341] 通り 
   数値のある桁を調べた ....   
     ・[16333] TKOZ 
     ・[16334] 管理人 
     ・[16337] TKOZ 
     ・[16338] TKOZ 
   「2つ同時に画像を動 ....   
     ・[16322] kazuoni 
     ・[16329] はね 
     ・[16336] 管理人 
   スコア表示について   
     ・[16325] ランド 
     ・[16326] ランド 
     ・[16328] ps 
   BCCでリソースを使った ....   
     ・[16327] Justy 
   3章画像表示にて・・・ ....   
     ・[16312] kazuoni 
     ・[16313] B壱 
     ・[16314] kazuoni 
     ・[16316] B壱 
     ・[16318] JEX 
     ・[16319] B壱 
     ・[16320] kazuoni 
     ・[16321] B壱 
   3章画像表示にて・・・ ....   
     ・[16305] tny 
     ・[16307] B壱 
     ・[16308] JEX 
     ・[16310] B壱 
   16進のWORDデータを10 ....   
     ・[16290] tkmakwins15 
     ・[16291] toyo 
     ・[16292] toyo 
     ・[16306] overdo 
   ポインタについて   
     ・[16293] toyo 
     ・[16297] マサキ 
     ・[16298] Mist 
   四聖龍神録について   
     ・[16287] 管理人 
     ・[16289] tkmakwins15 
   ぷよぷよ   
     ・[16258] やそ 
     ・[16262] バグ 
     ・[16265] ASH 
     ・[16267] やそ 
     ・[16268] やそ 
     ・[16269] バグ 
     ・[16271] 管理人 
     ・[16272] kazuoni 
     ・[16273] バグ 
     ・[16275] ASH 
     ・[16284] バグ 
   画像表示   
     ・[15915] kazuoni 
     ・[15924] 管理人 
     ・[15931] p 
     ・[15932] P 
     ・[15935] kazuoni 
     ・[15938] 管理人 
     ・[15942] P 
     ・[15946] 管理人 
     ・[15947] P 
     ・[15948] 管理人 
     ・[15955] P 
     ・[15957] 管理人 
     ・[15979] P 
     ・[16279] 初心 
     ・[16280] やそ 
     ・[16283] 管理人 
   待ち行列のM/M/1システ ....   
     ・[16276] すく 
     ・[16277] やそ 
     ・[16278] コピペ 
   シューティングゲーム ....   
     ・[16263] 管理人 
     ・[16274] 朧火 
   メモリ領域の確保と構 ....   
     ・[16252] たかぎ 
     ・[16253] バグ 
     ・[16254] ふっきー 
     ・[16255] box 
     ・[16257] ふっきー 
     ・[16259] keichan 
     ・[16261] ふっきー 
     ・[16264] toyo 
     ・[16266] ふっきー 
   6. 先ほどのプログラム ....   
     ・[16246] 管理人 
     ・[16248] こめかみ 
     ・[16249] toyo 
     ・[16260] こめかみ 
   レースゲームの自機に ....   
     ・[16244] Justy 
     ・[16250] やそ 
   ?演算子   
     ・[16218] ・ 
     ・[16226] J 
     ・[16230] すく 
     ・[16231] ・ 
     ・[16235] J 
     ・[16236]  
     ・[16237] ・ 
     ・[16247] J 
   助けてください!VC+ ....   
     ・[16240] kazuoni 
     ・[16241] マスラオ 
     ・[16242] kazuoni 
     ・[16243] マスラオ 
     ・[16245] マスラオ 
   s2. サウンドノベル風 ....   
     ・[16142] ibis 
     ・[16143] こめかみ 
     ・[16144] ibis 
     ・[16145] こめかみ 
     ・[16146] YuO 
     ・[16147] こめかみ 
     ・[16148] こめかみ 
     ・[16149] ibis 
     ・[16150] こめかみ 
     ・[16152] ibis 
     ・[16153] ibis 
     ・[16154] ibis 
     ・[16155] こめかみ 
     ・[16156] こめかみ 
     ・[16181] 管理人 
     ・[16233] こめかみ 
   C++/CLIについて。   
     ・[16211] tkmakwins15 
     ・[16222] たかぎ 
     ・[16223] tkmakwins15 
     ・[16227] Justy 
     ・[16228] tkmakwins15 
     ・[16229] Justy 
     ・[16232] tkmakwins15 
   無題   
     ・[16220] すく 
     ・[16221] 管理人 
     ・[16224] tkmakwins15 
     ・[16225] アル 
   ポインタ   
     ・[16175] ・ 
     ・[16177] 管理人 
     ・[16198] kazuoni 
     ・[16199] Justy 
     ・[16201] tkmakwins15 
     ・[16203] ibis 
     ・[16204] kazuoni 
     ・[16205] バグ 
     ・[16206] tkmakwins15 
     ・[16207] Justy 
     ・[16208] kazuoni 
     ・[16210] tkmakwins15 
     ・[16212] kazuoni 
     ・[16213] Justy 
     ・[16216] kazuoni 
   無題   
     ・[16178] 管理人 
     ・[16184] 礪 
     ・[16185] 管理人 
     ・[16202] 礪 
   3節 画像を表示する   
     ・[16189] 初めてのC 
     ・[16193] 管理人 
     ・[16196] 初めてのC 
     ・[16197] 初めてのC 
   深度についての質問   
     ・[16191] Justy 
     ・[16195] 迷える羊 
   弾の発射について   
     ・[16162] nayo 
     ・[16165] 迷える羊 
     ・[16168] nayo 
     ・[16188] 迷える羊 
   無題   
     ・[16163] 管理人 
     ・[16186] ハーブ 
   シューティングの館  ....   
     ・[16140] Justy 
     ・[16166] Co 
     ・[16180] 管理人 
     ・[16182] Justy 
     ・[16183] 管理人 
   色管理クラス   
     ・[16174] Justy 
     ・[16179] megmilk 
   標準入力をフラッシュ   
     ・[16115] YuO 
     ・[16116] Ban 
     ・[16136] ルファー 
     ・[16137] tkmakwins15 
     ・[16138] バグ 
     ・[16169] ルファー 
     ・[16171] tkmakwins15 
     ・[16176] ルファー 
   縦スクロールについて   
     ・[16151] tkmakwins15 
     ・[16157] SONY 
     ・[16158] bodomcross 
     ・[16164] 管理人 
     ・[16167] SONY 
   実数型と整数型の違い ....   
     ・[16129] J 
     ・[16130] 通りすがり 
     ・[16131] はね 
     ・[16133] たかぎ 
     ・[16139] tkmakwins15 
     ・[16159] J 
   無題   
     ・[16004] 管理人 
     ・[16006] tiku 
     ・[16007] 管理人 
     ・[16011] tiku 
     ・[16124] tiku 
     ・[16126] 管理人 
     ・[16132] tiku 
   シューティングの館  ....   
     ・[16017] 通りすがり 
     ・[16062] SONY 
     ・[16063] SONY 
     ・[16064] SONY 
     ・[16065] SONY 
     ・[16066] SONY 
     ・[16087] Mist 
     ・[16089] mat 
     ・[16090] 管理人 
     ・[16110] SONY 
     ・[16111] toyo 
     ・[16122] やそ 
     ・[16123] Mist 
     ・[16125] やそ 
   calloc()関数について   
     ・[16098] toyo 
     ・[16100] toyo 
     ・[16119] たまひよ 
     ・[16120] toyo 
     ・[16121] たまひよ 
   はじめてみたものの   
     ・[16021] toyo 
     ・[16022] アブルイラリ 
     ・[16029] toyo 
     ・[16032] TAG 
     ・[16079] アブルイラリ 
     ・[16080] アブルイラリ 
     ・[16082] 管理人 
     ・[16112] アブルイラリ 
     ・[16113] アブルイラリ 
   魔法陣のような光った ....   
     ・[16109] ahetan 
   構造体のビットフィー ....   
     ・[16024] GPGA 
     ・[16025] non 
     ・[16028] 組木紙織 
     ・[16031] non 
     ・[16034] GPGA 
     ・[16035] toyo 
     ・[16036] 組木紙織 
     ・[16037] non 
     ・[16040] GPGA 
     ・[16041] non 
     ・[16052] ibis 
     ・[16061] Hermit 
     ・[16085] GPGA 
     ・[16088] たかぎ 
     ・[16108] Hermit 
   音楽再生について   
     ・[16101] toyo 
     ・[16106] 超初心者 
     ・[16107] 超初心者 
   アクションゲームのマ ....   
   課題   
     ・[16102] toyo 
   シューティングゲーム ....   
     ・[16071] SONY 
     ・[16084] 柏 
     ・[16092] 管理人 
     ・[16093] norakuro 
   シューティングの館  ....   
     ・[16056] カイ 
     ・[16058] toyo 
     ・[16059] toyo 
     ・[16060] fffff 
     ・[16078] tkmakwins15 
     ・[16091] fffff 
   CPU   
     ・[16050] ibis 
     ・[16053] やそ 
     ・[16057] ibis 
     ・[16083] Sleepy 
     ・[16086] abc 
   無題   
     ・[16070] あ 
     ・[16072] すく 
     ・[16073] あ 
     ・[16074] すく 
     ・[16075] あ 
     ・[16076] すく 
     ・[16081] 管理人 
   DxアーカイブのGUIソフ ....   
     ・[15973] Justy 
     ・[15976] tkmakwins15 
     ・[15977] Justy 
     ・[15983] tkmakwins15 
     ・[15984] バグ 
     ・[15987] tkmakwins15 
     ・[15988] バグ 
     ・[16002] tkmakwins15 
     ・[16005] GPGA 
     ・[16077] tkmakwins15 
   二次元配列の初期化   
     ・[16051] ibis 
     ・[16054] カイ 
     ・[16068] lbfuvab 
   バイナリファイルの書 ....   
     ・[16030] toyo 
     ・[16033] たまひよ 
     ・[16039] やそ 
     ・[16042] たまひよ 
     ・[16043] YuO 
     ・[16044] やそ 
     ・[16045] たまひよ 
     ・[16046] バグ 
     ・[16047] たまひよ 
   2次元配列の使い方   
     ・[15951] フリオ 
     ・[15966] GR 
     ・[15967] GR 
     ・[15970] 組木紙織 
     ・[15971] GR 
     ・[15980] フリオ 
     ・[15982] GR 
     ・[15985] 組木紙織 
     ・[15998] GR 
     ・[16008] 組木紙織 
     ・[16010] 通り 
     ・[16038] TT414 
   Cの勉強   
     ・[15981] 管理人 
     ・[16027] モルトコルト 
   プロトタイプ宣言につ ....   
     ・[16014] 通りすがり 
     ・[16015] kazuoni 
     ・[16016] ibis 
     ・[16018] kazuoni 

Name: aniki  ..ぴよぴよ(132ポイント)   Date: 2008/05/13(火) 15:01   No:16384       
Title: noname    
学校の宿題で
00からFFまでのHEX値をXに入力 X =
00からFFまでのHEX値をYに入力 Y =

Xのビット毎補数 結果は =>
XとYのAND 結果は =>
XとYのOR 結果は =>
XとYのXOR 結果は =>
という機能を持ったPGを作れという問題が出たのですが、どこから手をつけていいのかわかりません
いったいどこから手をつけたらいいのでしょうか?よろしくお願いします


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


Name: やそ  ..熟練のプログラマー(47,607ポイント)   Date: 2008/05/13(火) 15:24   No:16385     
Title: Re:noname    
値を入力させるルーチンをまず考えてみてはどうでしょうか?

その後入力した値を10進数なり2進数なり16進数なりで表示してみる。

コレが理解(実現)できれば半分は出来たも同然です^^


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

Name: aniki  ..ぴよぴよ(343ポイント)   Date: 2008/05/13(火) 15:44   No:16386     
Title: Re:noname    
とりあえず、今はこんな感じです。
#include <stdio.h>

int main(void)
{
//変数の宣言
unsigned char X;
unsigned char Y;

//Xの入力
printf("00からFFまでのHEX値をXに入力 X = ");


//Yの入力
printf("00からFFまでのHEX値をYに入力 Y = ");


//XをYビット左にシフト
X = X << Y;

//結果の表示
printf("Xのビット毎補数 結果は => %#x\n", ~X);
printf("XとYのAND 結果は => %#x\n", X & Y);
printf("XとYのOR 結果は => %#x\n", X | Y);
printf("XとYのXOR 結果は => %#x\n", X ^ Y);
printf("XとY ビット左シフトした 結果は=>\n");

return 0;
}


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

Name: aniki  ..ぴよぴよ(365ポイント)   Date: 2008/05/13(火) 15:47   No:16387     
Title: Re:noname    
とりあえず、今はunsigned charを入力する方法で悩んでます。

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

Name: やそ  ..熟練のプログラマー(47,630ポイント)   Date: 2008/05/13(火) 17:35   No:16390     
Title: Re:noname    
学校の宿題レベルであれば多分scanf()で十分だと思いますよ。


頑張って下さい。


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



Name: fake  ..ぴよぴよ(113ポイント)   Date: 2008/05/13(火) 13:55   No:16381       
Title: DxLib_VCのことなんですが    
はじめまして!
今回初めてゲームを作ろうと思うのですが、DxLib_VCをダウンロードしてファイルを開いた際、
DxLib.slnがDxLib_VC2008_and_2005用.slnと表示されていました。
私はVisual C++ 6.0しか持っていないのですが、これでは開けないようでした。

Visual C++ 6.0で作りたい場合はどのようにすればよいのでしょうか?


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


Name: fake  ..ぴよぴよ(157ポイント)   Date: 2008/05/13(火) 14:02   No:16382 解決!     
Title: Re:DxLib_VCのことなんですが    
すみません><

全体をドラッグ&ドロップしたら何とか起動しました。
つまらない質問すみませんでした。


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



Name: 鷹見  ..ぴよぴよ(14ポイント)   Date: 2008/05/12(月) 05:26   No:16344       
Title: シューティングゲームの館の拡張性    
おはようございます、シューティングゲームの館参考にして色々いじって楽しんでいるのですが。
シューティングゲームの館の上の方に、”拡張性の低い”と書いてある文がありましたが。
拡張性が低いとは具体的にどのようなことなのでしょうか?
私はシューティングゲームの館に書いてあることでもけっこう満足しています。



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


Name: 管理人 [URL]  ..伝説のハッカー(573,383ポイント)   Date: 2008/05/12(月) 13:42   No:16350     
Title: Re:シューティングゲームの館の拡張性    
はい、実はあのプログラムはちょっと遊んでもらって「自分でもこんなゲームが作れるんだ!」ということを早く実感してもらいたくて作ったものなので、
本格的に作ることを全く想定していないんですよね。
拡張性、汎用性を高めると、どうしても、わかりやすさは減少してしまいますから、ここでは
わかりやすさを重視し、前者を削っています。

ホントはこうかけばもっと効率いいのに・・と思う部分もあるかと思いますが、あえて、非効率に書いたりしている部分もあります。

そのいい例がswitch文での敵の制御です。
普通敵の出現データなどは内部のプログラムに書いたりはしないと思います。
何かデータベースを作っておいてそこから読み込むのが一般的だと思います。

まず、switch文で敵の出現データを作っていくと、どこかで限界が来ると思います。
既に20匹位から何がどうなってるのかよくわからなくなってくるのではないでしょうか。

しかし、敵がいつどこからどんな弾を撃ってきて、どのように行動するか

といったデータをエクセルデータなどから読み込むことが出来れば、書くことも、管理することも楽ですよね。
今、「あ、この敵とこの敵の間に敵Aを出現させるんだった」と言った事があった場合、そこから後ろの敵のデータは全てずらす必要がありますが、switch文では一つ一つ手作業でずらさなくてはなりません。
エクセルデータならセルを範囲指定して+100とかすれば全部+100されますよね。

また、似たようなパターンならセルの右下をつかんで引っ張れば同じパターン内容でコピーされますし。

また、1面だけならまだしも、それが10面あったりするとわけわからなくなる&内部プログラムが完成しているとしても、後から敵データを変更したい時、またコンパイルしなおさなくてはならないのです。
管理、運営も本格的に作るなら結構重要で、後から敵のパターンを変更したい時などは外部データをいじればいいだけというのは結構重要なんです。

また、関数間でのつながりが強い為、関数が流用できず、この関数はこのシューティングにしか使えないというものが多いです。
まぁその辺をキレイに書くのはC++を勉強する必要があると思いますが、Cでも似たような書き方は出来るのにあえてしていないので、汎用性が低いのです。

館も早く更新したいのですが、他にもやらないといけないことが多すぎてどれから手をつけようか悩んでいるところです(_ _|||)


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

Name: 鷹見  ..ぴよぴよ(173ポイント)   Date: 2008/05/12(月) 16:20   No:16361     
Title: Re:シューティングゲームの館の拡張性    
なるほど、プログラムは内部(ソースコード)に全て書くものだと思ってました。
たしかにswitchで書くとき真ん中くらいを修正するのは苦労しますし。
プログラムって深いですね、でも思ったとおり動くとすごく嬉しいです。
管理人さんの作ってくれた、シューティングゲームの館は動かす楽しみはすごく伝わってますよ。
外部とリンクしたプログラム作りで良いサイトとかあったら教えていただけると助かるのですが、
あったら教えてくれませんか?


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

Name: 管理人 [URL]  ..伝説のハッカー(574,985ポイント)   Date: 2008/05/12(月) 18:05   No:16366     
Title: Re:シューティングゲームの館の拡張性    
うーん、サイトは知らないですけど、外部データからの参照は簡単ですよ。
エクセルはcvsファイルにすればセルはコンマで区切っただけのファイルになりますから、読み出しも簡単です。
エクセルでcvsファイル形式で保存し、テキストエディタで開いてみるとその意味がよく解ると思います。

例えば

100,200,300
400,500,600

という並びで記録されているテキストファイルから数字を読み込む方法はお分かりになりますよね?
そのデータをswitch文で入れている変数にいれてやればいいだけです。

まぁ他にも非効率な部分は沢山あるわけですが;


プログラムって思ったとおりに動くと面白いですよね。
そして、思ったとおりに動かなくて発見したこともまた多いですw
四聖龍神録の弾幕を作ってて、計算式を間違えて、弾が変な動きをしたことは何度もありました。
その「変な動き」は予め考えて計算式を作ったものでは想像できなかったような奇跡を動くことも多く、それがたまたま面白かったものは、間違いをあえて採用しりしたこともありました^^;

試行錯誤って結構大事なんですよね。
人に聞いて実装した方法はすぐに忘れますけど、自分が編み出した方法は忘れない。そして応用が効く。
もちろん人に聞くことも大事ですけど、やはり私は試行錯誤が好きです。
私の院での研究分野もtry and errorについて関係してますしw

なので、一通り理解されたら、是非ご自分で一から作ってみてください。
きっともっと自分で拡張できるようになると思いますし、自分がすべてを理解しているため、もっともっと応用が楽になると思います。
目指せ東方超え!


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

Name: 鷹見  ..ぴよぴよ(232ポイント)   Date: 2008/05/12(月) 18:44   No:16369 解決!     
Title: Re:シューティングゲームの館の拡張性    
さっそくためしてみました、数字を何列何行いれて。
メモ帳で開くとカンマで区切られてました。
色々調べながらどんどん拡張して快適に修正しやすいプログラム作りを目指します。
丁寧に教えていただき本当にありがとうございます。


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



Name: aiai  ..ぴよぴよ(133ポイント)   Date: 2008/05/12(月) 09:52   No:16346       
Title: こんにちは。    
はじめまして。C言語の配列でこの配列の表示を%cで書きたいとおもったのですがうまくいきません。どうすればいいでしょうか?
#include <stdio.h>

int main(void)
{
int i;
char str[3][15] ={ "ABCDE", "xyz", "HelloWorld" };

for(i=0; i<3; i++){
printf("%s\n", str[i]);
}

return 0;
}


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


Name: やそ  ..熟練のプログラマー(46,982ポイント)   Date: 2008/05/12(月) 10:10   No:16347     
Title: Re:こんにちは。    
char str[0][0] ={ 'A'};
char str[0][1] ={ 'B'};
char str[0][2] ={ 'C'};
char str[0][3] ={ 'D'};
char str[0][4] ={ 'E'};
char str[0][5] ={ '\0'};
char str[0][6] ={ '?'};//?は不明
char str[0][7] ={ '?'};//?は不明
char str[0][8] ={ '?'};//?は不明
char str[0][9] ={ '?'};//?は不明
char str[0][10] ={ '?'};//?は不明
char str[0][11] ={ '?'};//?は不明
char str[0][12] ={ '?'};//?は不明
char str[0][13] ={ '?'};//?は不明
char str[0][14] ={ '?'};//?は不明
char str[1][0] ={ 'x'};
char str[1][1] ={ 'y'};
char str[1][2] ={ 'z'};
char str[1][3] ={ '\0'};
char str[1][4] ={ 'x'};
char str[1][5] ={ '?'};//?は不明
char str[1][6] ={ '?'};//?は不明
char str[1][7] ={ '?'};//?は不明
char str[1][8] ={ '?'};//?は不明
char str[1][9] ={ '?'};//?は不明
char str[1][10] ={ '?'};//?は不明
char str[1][11] ={ '?'};//?は不明
char str[1][12] ={ '?'};//?は不明
char str[1][13] ={ '?'};//?は不明
char str[1][14] ={ '?'};//?は不明
char str[2][0] ={ 'H'};
char str[2][1] ={ 'e'};
char str[2][2] ={ 'l'};
char str[2][3] ={ 'l'};
char str[2][4] ={ 'o'};
char str[2][5] ={ 'W'};
char str[2][6] ={ 'o'};
char str[2][7] ={ 'r'};
char str[2][8] ={ 'l'};
char str[2][9] ={ 'd'};
char str[2][10] ={ '\0'};
char str[2][11] ={ '?'};//?は不明
char str[2][12] ={ '?'};//?は不明
char str[2][13] ={ '?'};//?は不明
char str[2][14] ={ '?'};//?は不明


を表示すれば良い??


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

Name: 管理人 [URL]  ..伝説のハッカー(573,621ポイント)   Date: 2008/05/12(月) 13:48   No:16351     
Title: Re:こんにちは。    
%sは文字列を表示するものですから、%cなら配列要素それ自体を示す必要があります。
ということで作ってみました。


#include <stdio.h>

int main(void) {
int i,j;
char str[3][15] ={ "ABCDE", "xyz", "HelloWorld" };

for(i=0; i<3; i++){
for(j=0; j<15; j++){
printf("%c", str[i][j]);
//もし終端記号が入っていればコンテニュー
}
printf("\n");
}

return 0;
}


 
このプログラムでは必要ない部分まで表示しようとしています。
ですので、注釈の部分を完成させてみて下さい。


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



Name: uhoho  ..ぴよぴよ(122ポイント)   Date: 2008/05/12(月) 11:55   No:16348       
Title: こんにちわ    
これを、ポインタで表したいのですが、どうすればいいのでしょうか?


#include <stdio.h>

//プロトタイプ宣言
int disp(int i);

int main(void)
{
int i;

for(i=5; i>=-5; i--){
disp(i);
}

return 0;
}
int disp(int i)
{
int j;

for(j=0; j<i*i; j++){
if(i > 0){ //iが0より大きければ"+"を表示
printf("+");
}else{ //そうでなければ"-"を表示
printf("-");
}
}
printf("\n");

return j;
}
 


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


Name: 管理人 [URL]  ..伝説のハッカー(572,494ポイント)   Date: 2008/05/12(月) 13:30   No:16349     
Title: Re:こんにちわ    

関数先で値が変更されていないのでポインタを使う意味は無いように思いますが、
使わないといけないのでしょうか?
ポインタを使う宿題かなにかなのでしょうか。

それならメイン関数内のdisp(i);をdisp(&i);にして、

disp関数内のiを全て*iに書き換えるとOKです。


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



Name: ahetan  ..ぴよぴよ(345ポイント)   Date: 2008/05/11(日) 15:28   No:16331       
Title: 敵がいないのにたまがでてくる    
こんにちは。シューティングゲームの館で勉強させてもらっています。ゲーム作成初心者です。
いま、EnemyShotPattern2で敵2体が弾を10発撃ってくるようにしたのですが、最初に出てくる敵がショットを打っている間に倒し、次の敵が出現するときに同じ配列の番号が入っているために、最初の敵がいた位置から弾が発射されてしまいます。どう回避すればいいのか教えてください。ソースはシューティングゲームの館と一緒です。


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


Name: 管理人  ..伝説のハッカー(572,140ポイント)   Date: 2008/05/11(日) 20:08   No:16335     
Title: Re:敵がいないのにたまがでてくる    
発射フラグを用意し、フラグが1の時は存在してる、2の時は敵は死んでいるけど弾の起動計算はする必要がある状態、弾が全て画面外にきたらフラグを落とせばいいと思います。


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

Name: ahetan  ..ぴよぴよ(589ポイント)   Date: 2008/05/11(日) 21:43   No:16339     
Title: Re:敵がいないのにたまがでてくる    
管理人さん、返信ありがとうございます。過去ログに似たような質問がありましたね。ちゃんと見とくべきでした。弾がすべて画面外に来たらフラグを落とすということに気がつきませんでした。三日間悩んだんですが、さっき考えてて出た答えが、画面外の弾の当たらない場所に敵を出現させてあらかじめ多くの配列を使用しておき、弾を発射している敵が倒されたときに、その倒された敵と同じ配列が入らないようにする。でした。管理人さんのような簡単な答えが見つからないなんて、自分が悲しくなりました。とりあえず実際に書いてみてわからなかったらまた質問しますね。

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

Name: バグ  ..比類無きプログラマー(85,809ポイント)   Date: 2008/05/11(日) 22:46   No:16342     
Title: Re:敵がいないのにたまがでてくる    
もしくは、弾自体を一つのオブジェクトとみなしてもいいのではないでしょうか?

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

Name: ahetan  ..ぴよぴよ(600ポイント)   Date: 2008/05/11(日) 23:14   No:16343     
Title: Re:敵がいないのにたまがでてくる    
具体的にはどうしたらいいんでしょうか。

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



Name: atsushi  ..ぴよぴよ(200ポイント)   Date: 2008/05/11(日) 21:53   No:16340       
Title: for文について    


初心者の私に教えてください。

・For文でvm_op1.Mgに0から128Stepで0.15刻みの値を引き渡したいときは以下のような記述で
正してでしょうか?


例1)
for (int im1=0;im<128;im1++){

vm_op1.Mg(0.5+im*0.15)

}


例2)
for (int im1=0;im<128;im1++){

if im=0 vm_op1.Mg(0.5)
if im=1 vm_op1.Mg(0.65)
if im=2 vm_op1.Mg(0.8)

if im=128 vm_op1.Mg(19.2)

}

言葉たらずかも知れませんがお願いします。


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


Name: 通り  ..ぴよぴよ(120ポイント)   Date: 2008/05/11(日) 22:01   No:16341     
Title: Re:for文について    
例2は脇へ置いておくとして…。

0から始まるのであれば、0.5+ は不要です。


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



Name: TKOZ  ..ぴよぴよ(92ポイント)   Date: 2008/05/11(日) 19:41   No:16332       
Title: 数値のある桁を調べたいです。    
今、8桁の2進数を10進数に変換するプログラムをC言語で作っています。
しかし、どうしても、8桁の2進数を10進数で入力した値のx桁を求める関数が作れません
なので、教えてください。お願いします。

作りかけのソースを書き込みます。環境は、WindowsXP,BorlandC++Compiler5.5です。

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

int bin2dec(int bin)
{
  /*8桁の2進数を10進数に変換する関数*/
  int i,sum=0;

  for(i=0;i<8;i++)
  {
    if(keta(i)==1) sum+=twotwotime(i);
  }
  return 0;
}

int twotwotime(int x)
{
  /*2のx乗を返す関数*/
  return pow(2.0,(double)x);
}

int keta(int x)
{
  /*x桁目を返す関数*/

}

int main(void)
{
  int bin,dec;

  printf("2進数を入力してください。\n");
  scanf("%d",&bin);

  dec=bin2dec(bin);

  printf("10進数に変換すると%dです。\n",dec);

  return 0;
}


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


Name: TKOZ  ..ぴよぴよ(97ポイント)   Date: 2008/05/11(日) 19:48   No:16333     
Title: Re:数値のある桁を調べたいです。    
あっ、bin2dec関数の最後は、return sum;ですね。(汗
単純ミスをしてしまいました。
まるまる教えるだけじゃなくて、アドバイスでも構いません。
お願いします。


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

Name: 管理人  ..伝説のハッカー(572,091ポイント)   Date: 2008/05/11(日) 20:04   No:16334     
Title: Re:数値のある桁を調べたいです。    

xの1の位を返すには
「x%10」ですよね?これは
「(x/1)%10」と同じですね。
xの10の位を返すには
「(x/10)%10」ですよね?
xの100の位を返すには
「(x/100)%10」。それなら
xのnの位を返すにはどうすればいいですか?
そのまま関数にすればいいだけですね。

それから、このプログラムはどこまでご自分で書かれたものでしょうか?


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

Name: TKOZ  ..ぴよぴよ(177ポイント)   Date: 2008/05/11(日) 20:12   No:16337     
Title: Re:数値のある桁を調べたいです。    
管理人さん、アドバイスありがとうございます。
プログラムは、全て自分で書きました。
関数名は、辞書で調べて、考えましたが…
よく分からない部分は、細かく砕いて、プログラミングしてみました。


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

Name: TKOZ  ..ぴよぴよ(423ポイント)   Date: 2008/05/11(日) 20:29   No:16338 解決!     
Title: Re:数値のある桁を調べたいです。    

プログラムが完成しました。
管理人さん、ありがとうございます。

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

int bin2dec(int bin)
{
/*8桁の2進数を10進数に変換する関数*/
int i,sum=0;

for(i=0;i<8;i++)
{
if(keta(bin,i)==1) sum+=_2pow(i);
}
return sum;
}

int _2pow(int x)
{
/*2のx乗を返す関数*/
return pow(2.0,(double)x);
}

int keta(int x,int n)
{
/*x桁目を返す関数*/
//0桁目:(x/1)%10
//1桁目:(x/10)%10;
//2桁目:(x/100)%10;
int k;
k=pow(10.0,(double)n);
return (x/k)%10;
}

int main(void)
{
int bin,dec;

printf("2進数を入力してください。\n");
scanf("%d",&bin);

dec=bin2dec(bin);

printf("10進数に変換すると%dです。\n",dec);

return 0;
}


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



Name: ママ  ..ぴよぴよ(282ポイント)   Date: 2008/05/10(土) 17:01   No:16317       
Title: 「2つ同時に画像を動かす」にて    
int jx=300,jy=440;
int bx=0, by=200;
SetDrawScreen(DX_SCREEN_BACK);
while(ProcessMessage()==0 && CheckHitKey(KEY_INPUT_ESCAPE)==0){
ClsDrawScreen();
int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);
if(key & PAD_INPUT_LEFT) jx=jx-4;
if(key & PAD_INPUT_RIGHT) jx=jx+4;
DrawBox(jx,jy,jx+100,jy+10,GetColor(255,0,0),TRUE);
int col = GetColor(255,255,255);
if (jx<0){
jx=0;
}
if(jx>640-100){
jx=540;
}
DrawBox(bx,by,bx+10,by+10,GetColor(100,150,190),TRUE);
while(1){
by-=1;
if(by<0)break;
}

ScreenFlip();
}
DxLib_End() ;
return (0) ;
}


自機を移動させ動く敵(bx,by)を避けるゲームを作ろうと「2つ同時に画像を動かす」の部分を参考にしましたが
この場合だと敵が一瞬のうちに0まで移動した挙句消えてしまいます
-1ずつ座標をゆっくりと移動させ、0になればwhile文終了のはずなのですが
描画がうまく出来ていないのでしょうか?


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


Name: kazuoni  ..中級者(14,315ポイント)   Date: 2008/05/10(土) 18:38   No:16322     
Title: Re:「2つ同時に画像を動かす」にて    
コードを書く場合は<pre></pre>(<>は半角で)でくくったほうがよろしいかと思います。規約にもかいてあるので^^;


while(1){
by-=1;
if(by<0)break;
}

この部分では最初
by=200
だと、
ScreenFlip();
にたどり着くまでに0以下になってしまうのではないでしょうか?


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

Name: はね  ..初心者(7,130ポイント)   Date: 2008/05/11(日) 14:18   No:16329     
Title: Re:「2つ同時に画像を動かす」にて    
while文はどういった処理をしているのでしょうか?

見た限りwhile文のループ回数だけ移動させているように見受けられますが
これだと一瞬で移動してしまいます。

希望の処理をさせたいのであればwhileを消せばいいかと思います。


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

Name: 管理人 [URL]  ..伝説のハッカー(572,208ポイント)   Date: 2008/05/11(日) 20:09   No:16336     
Title: Re:「2つ同時に画像を動かす」にて    
ScreenFlip();までこないと画面に描画されないので、そのことを考えると解決すると思います。

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



Name: ps  ..ぴよぴよ(563ポイント)   Date: 2008/05/11(日) 09:33   No:16323       
Title: スコア表示について    
ここで勉強させていただいてるpsです。

ここのシューティングゲームの館をみながらプログラムを勉強しているのですが、どうしてもスコアがうまく動きません。

-----スコアの描写-----

int Cr ;
int score,dscore;

score=0;
dscore=score;

// 白色の値を取得
Cr = GetColor( 255 , 255 , 255 ) ;

// 文字列の描画
DrawFormatString( 520, 30, Cr, " %05d", dscore ) ;

-----終わり-----

CollisionDetection()の中の玉と敵があたったときの処理にスコア追加のプログラムを書き足しました。
----CollisionDetection()関数-----

void CollisionDetection(){
int score;
for(int i=0;i<PLAYER_MAX_SHOT1;i++){
for(int j=0;j<PLAYER_MAX_SHOT2;j++){
if(PlayerShot[i][j].flag==1){
for(int s=0;s<ENEMY_TOTAL_NUM;s++){
if(enemy[s].flag==1){
double x,y;
int range;
x=(int)(PlayerShot[i][j].x-enemy[s].x);
y=(int)(PlayerShot[i][j].y-enemy[s].y);
switch(i){
case 0:
case 5:
case 6:
range=12;
break;
default:
range=9;
break;
}
if((int)sqrt(x*x+y*y)<range+enemy[s].range){
score+=10;
enemy[s].flag=0;
PlayerShot[i][j].flag=0;
if(CheckSoundMem(sound_enemy_death)==1)
StopSoundMem(sound_enemy_death);
PlaySoundMem(sound_enemy_death,DX_PLAYTYPE_BACK);
}
}
}
}
}
}
}

これで無事スコアは表示はされるのですが、敵を倒したときに点数が追加されず、0のままになってしまいます。スコア追加のプログラムを書く場所がまちがっているとは思うのですが、どこに書けばいいのでしょうか?
よろしくお願いします。


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


Name: ランド  ..ぴよぴよ(738ポイント)   Date: 2008/05/11(日) 10:37   No:16325     
Title: Re:スコア表示について    
CollisionDetection()内で新たな、別のローカル変数scoreが使われているのでは?
最初のscore,dscore宣言が別の関数(Winmainとか)でされているなら、
なんらかの方法でCollisionDetectionに変数を持っていく必要があると思います。


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

Name: ランド  ..ぴよぴよ(842ポイント)   Date: 2008/05/11(日) 10:42   No:16326     
Title: Re:スコア表示について    
書き忘れましたが、
score=0;を毎回行っているとか、dscore=score;を行っていないとかも考えられます。

ローカル変数については↓のページがわかりやすいです。
http://homepage3.nifty.com/mmgames/c_guide/12-01.html


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

Name: ps  ..ぴよぴよ(47ポイント)   Date: 2008/05/11(日) 14:03   No:16328 解決!     
Title: Re:スコア表示について    
指摘していただいた部分を直したら無事表示することができました。

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


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



Name: 勉強中  ..ぴよぴよ(269ポイント)   Date: 2008/05/11(日) 09:54   No:16324       
Title: BCCでリソースを使ったプログラムの作成時にエラーが出る    

猫でもわかるプログラミングのここを参考にやってみました。
http://www.kumei.ne.jp/c_lang/bcc/bcc_05.htm

しかし、エラーが出ます。
ソースファイルのあるフォルダに移動し、コマンドプロンプトで

bcc32 -W -w- -eRelease\menu01.exe menu01.cpp

を実行すると、次のメッセージが表示されます。

Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
menu01.cpp:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: Could not create Release\menu01.tds (error code 3)

どうすれば、メニュー付きウィンドウを作る事ができるでしょうか?



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


Name: Justy  ..ハッカー(192,306ポイント)   Date: 2008/05/11(日) 13:55   No:16327     
Title: Re:BCCでリソースを使ったプログラムの作成時にエラーが出る    
 察するに -eオプションで Releaseディレクトリ内に exeを作ろうとしていますが、
Releaseディレクトリはありますか?

 もしなければ、作ってみて下さい。


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



Name: B壱  ..ぴよぴよ(417ポイント)   Date: 2008/05/10(土) 12:44   No:16311       
Title: 3章画像表示にて・・・。    
画像が正しく表示されない場合のプログラムを入力したところ、
「画像の保存場所が違うか、ファイル名が違うため、表示できません」
と表示されました。
画像の保存場所は「DxLib_VC内のサンプルプログラム実行用フォルダ」
ファイル名「char.png」
また初歩的なことですがよろしくお願いします。



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


Name: kazuoni  ..中級者(14,012ポイント)   Date: 2008/05/10(土) 13:16   No:16312     
Title: Re:3章画像表示にて・・・。    
ソースファイルの位置と画像の位置は同じですか?確認してみてください。

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

Name: B壱  ..ぴよぴよ(440ポイント)   Date: 2008/05/10(土) 13:42   No:16313     
Title: Re:3章画像表示にて・・・。    
すみませんどのようにしてたしかめればよろしいですか?

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

Name: kazuoni  ..中級者(14,035ポイント)   Date: 2008/05/10(土) 14:09   No:16314     
Title: Re:3章画像表示にて・・・。    
プロパティウィンドウ→プロジェクトで、その周辺を探ればよいのでは・・・??

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

Name: B壱  ..ぴよぴよ(540ポイント)   Date: 2008/05/10(土) 15:49   No:16316     
Title: Re:3章画像表示にて・・・。    
画像が正常に表示されなかった場合に試すプログラムの補足の説明で、
「自分が実行しているプロジェクトのある場所に画像を保存してください。」
というのがありましたがよくわかりません。

例)ファイル→新規作成→プロジェクト・・・
のように説明をしてくださるとたすかります。


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

Name: JEX [URL]  ..ぴよぴよ(899ポイント)   Date: 2008/05/10(土) 17:27   No:16318     
Title: Re:3章画像表示にて・・・。    
http://fatalita.sakura.ne.jp/3DLib/Install/img/Mark.gif
こういうアイコンが置いてある場所に画像を保存すれば良いです。


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

Name: B壱  ..ぴよぴよ(7ポイント)   Date: 2008/05/10(土) 18:00   No:16319     
Title: Re:3章画像表示にて・・・。    
ごめんなさい・・・。どこに置いてあるかいまいちわからないです・・・。

そこの場所までの行き方を教えてくださると助かります。


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

Name: kazuoni  ..中級者(14,155ポイント)   Date: 2008/05/10(土) 18:27   No:16320     
Title: Re:3章画像表示にて・・・。    
visual c++の画面で、「スタートページ」、「出力」、「〜〜.cpp」が青色でありますよね?(グローバルスコープとか書いてあるところの上)
そこにカーソルを合わせると
「C:\...\...\...」ってでますよね?それをたどっていけば見つかりませんか?


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

Name: B壱  ..ぴよぴよ(581ポイント)   Date: 2008/05/10(土) 18:37   No:16321 解決!     
Title: Re:3章画像表示にて・・・。    
画像表示することができました。
解決まで導いてくださったみなさんありがとうございました。


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



Name: B壱  ..ぴよぴよ(96ポイント)   Date: 2008/05/09(金) 23:02   No:16304       
Title: 3章画像表示にて・・・。    
画像を表示するプログラムにて、Visual C++ 2008で入力してデバックしても、DXの設定のときに使った、
ディスプレイの真ん中に点を表示するプログラムが実行されてしまいます。
プログラムはコピーして張り付けたので間違いはないと思います。

初歩的なことですがよろしくお願いします。


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


Name: tny  ..かけだし(2,144ポイント)   Date: 2008/05/09(金) 23:30   No:16305     
Title: Re:3章画像表示にて・・・。    
もしかして、”PCの日付を諸事情で過去に戻した”とか ないですかね。

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

Name: B壱  ..ぴよぴよ(103ポイント)   Date: 2008/05/09(金) 23:34   No:16307     
Title: Re:3章画像表示にて・・・。    
ちがうとおもいます・・・。

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

Name: JEX [URL]  ..ぴよぴよ(852ポイント)   Date: 2008/05/10(土) 04:40   No:16308     
Title: Re:3章画像表示にて・・・。    
Visual Studioの初心者が良く間違えるのですがその画像表示のソース書き込んだファイルは
プロジェクトファイルのメインファイルではなく、別の場所においてあるファイルだと思います。
ですので画面の左側にあるソリューションの.cppファイルをダブルクリックしてそこにソースを
貼り付けてコンパイルしなおしてみてください。


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

Name: B壱  ..ぴよぴよ(290ポイント)   Date: 2008/05/10(土) 09:33   No:16310 解決!     
Title: Re:3章画像表示にて・・・。    
DX設定のときに使ったプロジェクトとは、別のプロジェクトを作り、
貼り付けたところ、ちゃんと起動はしなかったものの、
とりあえず、点が表示されるという問題からは脱出することはできました。

こんどは画像の保存場所が違うか、ファイル名が違うみたいなので、
自分でいろいろ試行錯誤してみて、改善していきたいと思います。

ご協力してくださったみなさんありがとうございました。


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



Name: overdo  ..ぴよぴよ(190ポイント)   Date: 2008/05/09(金) 01:59   No:16288       
Title: 16進のWORDデータを10進に変換する方法    
はじめまして。overdoといいます。
最近、こちらでDXライブラリの存在を知り、全く初めてゲームを作り始めた次第ですが、早くも分からないことがあり調べてみましたが結局分からず、すみませんが、こちらで質問させてください。

環境:VC++2003

バイナリデータにて、[59 01](リトルエンディアン)の2バイトデータがあった場合にこれを10進変換しますと345ですが、これをどうやって変換すればいいのか分かりません。

DXライブラリにファイル入力関数があったので以下のように使ってみました。

int hdl_file;
int intBig;
int intLittle;
hdl_file = FileRead_open("binarydata.txt"); //ファイルオープン
intBig = FileRead_getc(hdl_file); //59(16進)がとれます
intLittle = FileRead_getc(hdl_file); //01(16進)がとれます

//ココで5901 -> 345に変換する処理を行いたい

FileRead_close(hdl_file); //ファイルクローズ
※open〜close内は実際はループ

二つの変数に分けた時点で間違いな気もするのですが、この二つを使って変換する関数があるのかが分かりません。
2バイトずつ取得する方法も分からなかったので5901(0159h)を取得して345に変換する関数でも構わないのですが・・。
他言語出身ですので、説明の仕方自体おかしいかもしれませんが、何卒、ご教授頂ければと思います。
宜しくお願いします。


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


Name: tkmakwins15 [URL]  ..比類無きプログラマー(73,628ポイント)   Date: 2008/05/09(金) 06:22   No:16290     
Title: Re:16進のWORDデータを10進に変換する方法    
シフト演算を利用すれば問題ないと思います。

int Value;



Value=intBig|(intLittle<<8);

<余談>
Dxライブラリ使用ということで、細かいC++の言語仕様については無視ということで…


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

Name: toyo  ..中級者(9,332ポイント)   Date: 2008/05/09(金) 07:33   No:16291     
Title: Re:16進のWORDデータを10進に変換する方法    
Visual C++ならMAKEWORDというマクロが定義されていると思います(WinDef.h)

#define MAKEWORD(a, b) ((WORD)(((BYTE)(((DWORD_PTR)(a)) & 0xff)) | ((WORD)((BYTE)(((DWORD_PTR)(b)) & 0xff))) << 8))

Value = MAKEWORD(intLittle, intBig);

/* intLittleとintBigが私の感覚では逆です */


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

Name: toyo  ..中級者(9,421ポイント)   Date: 2008/05/09(金) 07:35   No:16292     
Title: Re:16進のWORDデータを10進に変換する方法    
間違えた
intBig = FileRead_getc(hdl_file); //59(16進)がとれます
intLittle = FileRead_getc(hdl_file); //01(16進)がとれます
の場合は
Value = MAKEWORD(intBig, intLittle);
になりますね。


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

Name: overdo  ..ぴよぴよ(322ポイント)   Date: 2008/05/09(金) 23:34   No:16306 解決!     
Title: Re:16進のWORDデータを10進に変換する方法    
ありがとうございます。シフト後のOR演算ということですね。
このような解決へのアプローチは慣れなのでしょうね・・。
この式に感動しました(笑)。

> /* intLittleとintBigが私の感覚では逆です */

ごもっともです。変数名を改めました・・・。
tkmakwins15さん、toyoさんありがとうございました。
今後ともよろしくお願いします。


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



Name: マサキ  ..初心者(5,968ポイント)   Date: 2008/05/08(木) 23:33   No:16285       
Title: ポインタについて    
お久しぶりです。最近は専らjavaばかり使ってました。

しかし最近C言語を再び使うようになったので、まず復習としてポインタの事を勉強しなおしてました。
そこで様々なサンプルプログラムを眺めてたのですが、よくわからないプログラムがありました。
それは添付したファイルを参照してみてください。


#include<stdio.h>
int main(void){
short ai[4] = {1, -128, -256 , -257};
short *ai2=(short *)((char *)((int *)ai+1)-3)+sizeof(ai)/sizeof(int)-1;
int n;
for (n=-1 ; n<2 ; n++)
printf("%d,%d\n",n,ai2[n]);
}

 

このプログラムを実行すると結果は

-1 , -32768
0 , 255
1 , -1

のようになります。


なんでこのような出力結果になるのかがよく理解できません。
色々調べて自分なりに考えてみたのですがよく分かりませんでした。
どういった構造でこの結果が導き出されるのか説明していただけるととても助かります。

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


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


Name: toyo  ..中級者(9,261ポイント)   Date: 2008/05/09(金) 09:22   No:16293     
Title: Re:ポインタについて    
10進数だとわかりにくいので16進数にします
short ai[4] = {0x0001, 0xFF80, 0xFF00 , 0xFEFF};
バイトオーダーをリトルエンディアンとするとアドレス ai には
  +000 +001 +002 +003 +004 +005 +006 +007
ai 0x01 0x00 0x80 0xFF 0x00 0xFF 0xFF 0xFE
のようにメモリに格納されます。
(int *)ai+1
ですが int型が4バイトとすると+1で4バイト移動するので上記の+004のアドレスになります
(char *)((int *)ai+1)-3)
では char型にキャストされるので3バイト戻って上記の+001のアドレスになります
+sizeof(ai)/sizeof(int)-1
は +8/4-1 ですので結局 +1になります
(short *)で+1ですので2バイト進んで上記の+003の位置が ai2 に代入されます
出力時の配列の位置を上記アドレスで見ると
ai2[-1]は+001 = 0x8000 = -32768
ai2[0]は+003 = 0x00FF = 255
ai2[1]は+005 = 0xFFFF = -1


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

Name: マサキ  ..初心者(6,045ポイント)   Date: 2008/05/09(金) 16:35   No:16297     
Title: Re:ポインタについて    
お返事ありがとうございました。
キャストによって動く量が違うんですね。やっと構造が理解できました。
しかし
0x8000 = -32768
0x00FF = 255
0xFFFF = -1

というのがよくわかりません。何故こうなるのですか?
とりあえず16進数についても復習してみます。


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

Name: Mist  ..かけだし(1,808ポイント)   Date: 2008/05/09(金) 16:43   No:16298     
Title: Re:ポインタについて    
「2の補数」で調べればわかると思います。

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



Name: のった  ..ぴよぴよ(69ポイント)   Date: 2008/05/09(金) 00:36   No:16286       
Title: 四聖龍神録について    
四聖龍神録は、何でできているんですか? C++とか・・・

中学生で、まだよくわからないのですが教えてください。

ちなみにシューティングを作ろうとしています おすすめの勉強サイトを教えてください。




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


Name: 管理人 [URL]  ..伝説のハッカー(571,941ポイント)   Date: 2008/05/09(金) 01:28   No:16287     
Title: Re:四聖龍神録について    
こんにちは。四聖龍神録作者のここのHPの管理人です。

四聖龍神録はC++で出来ています。単純なCでも作れます。
DXライブラリというライブラリを使っています。
DXライブラリは画像や音楽を描画・再生出来るようにするためのものです。

ここで紹介しているシューティングを作りたいとお思いでしたら、
まずC言語を勉強して下さい。

コンパイラとかはもうお持ちでしょうか?
C言語の入門サイトはウェブ上に沢山あるのでいくらでも勉強できます。
http://www.google.co.jp/search?hl=ja&q=%EF%BC%A3%E8%A8%80%E8%AA%9E%E3%80%80%E5%85%A5%E9%96%80&lr=

もう既に基本的なCの知識がおありなら、ここのゲームプログラミングの館で紹介しているDXライブラリの使い方を覚えるともうゲームが作れると思います。


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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(73,452ポイント)   Date: 2008/05/09(金) 06:17   No:16289     
Title: Re:四聖龍神録について    
基本的な数学ができていれば、物理法則は「っぽく」見せればいいですから試行錯誤でプログラムは組めるようになるでしょう。

ただし、三角関数(サイン・コサイン・タンジェント)については、できれば理解していただきたいです。(やはり本質的に理解してないと応用が難しいですから)

http://www.google.co.jp/search?hl=ja&q=%E4%B8%89%E8%A7%92%E6%AF%94&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=


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



Name: ASH  ..ぴよぴよ(44ポイント)   Date: 2008/05/07(水) 15:18   No:16256       
Title: ぷよぷよ    
過去ログにあったぷよモドキのソース?を再々アップしていただけませんか?

今、友達とぷよぷよ風ゲームを作って、お互いに思考ルーチンを考えて勝負させようと思っているのですが、その土台を作るのに参考にさせていただきたいと。


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


Name: やそ  ..熟練のプログラマー(44,658ポイント)   Date: 2008/05/07(水) 15:48   No:16258     
Title: Re:ぷよぷよ    
ハァ・・・
かなりぶしつけなご質問ですね^^;

http://www13.plala.or.jp/kymats/study/game_other/TOKOPUYO/tokopuyo.html

でもみてお勉強してみてください。



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

Name: バグ  ..比類無きプログラマー(85,472ポイント)   Date: 2008/05/07(水) 16:04   No:16262     
Title: Re:ぷよぷよ    
ひょっとして、私がアップしてたやつかな?
多分、消してなかったと思うので暇な時にでも探してみます。


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

Name: ASH  ..ぴよぴよ(140ポイント)   Date: 2008/05/07(水) 16:48   No:16265     
Title: Re:ぷよぷよ    
>>やそさん
 部分々々で質問するよりそれが一番迷惑をかける回数が少ない方法かと思って^^
 って、こんなページが!?
 そりゃ溜息つかれるのもごもっとも、ありがとうございますm(__)m

>>バグさん
 はい^^よろしくお願いしますm(__)m


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

Name: やそ  ..熟練のプログラマー(44,987ポイント)   Date: 2008/05/07(水) 17:42   No:16267     
Title: Re:ぷよぷよ    
先に書いたURLはYAHOOで「ぷよぷよ C言語」で検索をかければすぐに見つかるのら。

まあ、ココの掲示板を読んでいて、バグさんの作品を記憶しておられ、
「もう一度〜!ヘルプ〜」ということなのだとは分かっているのですが、
以前にもほぼ同様の投稿があり、管理人さん、バグさんのご厚意でUPされていたわけですが、
良いのか悪いのか、掲示板の更新(新規トピが作成される)スピードが早く、
ドンドン過去ログに落ちていって、過去ログの容量をオーバーすれば削除されてしまうという、
悲しい運命なのですよ^^;

だけど、何度も何度も「バグさん、出番でっせ〜」と呼びつけるのは良くないかなぁと思った次第です^^

対策その1
 バグさん自身がHPを立ててそこで公開する。
 そこまで手間を掛けさせるなぁ!(笑)

対策その2
 ここのダウンロードページに追加してもらう。
 (既にバグさん作品がいくつかありますし、現実的かな?)

対策その3
 管理人さん作成のぷよもどきを公開する。
 (許可申請中らしいので999%却下)

対策その4
 このまま何もしない
 (面倒だし^^;)

管理人さん、バグさんどうします?(どうもしなくてもいいけど(笑))


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

Name: やそ  ..熟練のプログラマー(45,015ポイント)   Date: 2008/05/07(水) 17:47   No:16268     
Title: Re:ぷよぷよ    
対策その5^^;
 とりあえず、もう一度UPして様子見(笑)


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

Name: バグ  ..比類無きプログラマー(85,585ポイント)   Date: 2008/05/07(水) 17:57   No:16269     
Title: Re:ぷよぷよ    
とりあえず、アップローダーにアップしました。

http://www7.uploader.jp/dl/123456/123456_uljp00001.zip.html

ここから落とせますんで、ご自由にどうぞ〜(^-^)
ただし、ソースと実行ファイルしかないので、再ビルドしたい場合、プロジェクトは自分で作成して下さい。
遊ぶだけならば、実行ファイルだけで遊べますよ♪

VC++6.0、Borland C++ 5.5.1ならば問題なくビルドできるはずです。それ以外の環境では試していませんので、正常動作の保障はしかねます。


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

Name: 管理人 [URL]  ..伝説のハッカー(571,864ポイント)   Date: 2008/05/07(水) 18:36   No:16271     
Title: Re:ぷよぷよ    
やそさんの対策その2を実行してみました。

実行結果はこちらです↓

http://dixq.net/game.html

他にも何かあったような・・。
添付ファイルに添付された回答者のサンプルはこのように
ためていったほうがいいかもしれないですね。


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

Name: kazuoni  ..中級者(13,983ポイント)   Date: 2008/05/07(水) 19:52   No:16272     
Title: Re:ぷよぷよ    
おっ。対策その2を実行されたんですかww管理人さんおつです^^

確かにぷよぷよネタは一ヶ月前からここに通わせてもらってますけど、2、3度見かけたような記憶があります^^;

あと補足ながら、バグさんのぷよぷよもどきプレイさせていただきました!どもです!


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

Name: バグ  ..比類無きプログラマー(85,755ポイント)   Date: 2008/05/07(水) 22:36   No:16273     
Title: Re:ぷよぷよ    
実は以前、8人まで対戦できる、ぷよモドキを試作した事があります。当然ながらコンソールアプリです(^_^;)
CPUが対戦するのを見ているとスクリーンセーバーみたいでなかなか楽しかったのですが、間違えて消してしまったのでソースが残ってないんですよね。
そういえば、ここに展示してもらっているカラードロップシリーズも、一度作り直したいんですよね…まだポインタが良く分かっていない時期に組んだ作品なので、今見るとヒドイ組み方してるんですよ…(汗)
手前味噌ですが、カラードロップ2(変則コラムス)はなかなか面白いと思いますので、こちらもよかったら遊んでみてください。全10ステージをクリアするのは大変ですよ(笑)


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

Name: ASH  ..ぴよぴよ(208ポイント)   Date: 2008/05/07(水) 23:21   No:16275 解決!     
Title: Re:ぷよぷよ    
やそさん、バグさん、管理人さん、驚くほど迅速な対応ありがとうございますm(__)m
早速落とさせていただきました。
これらを元に勉強して、早くAIを考える段階になれるよう精進致します^^


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

Name: バグ  ..比類無きプログラマー(85,773ポイント)   Date: 2008/05/08(木) 18:50   No:16284     
Title: Re:ぷよぷよ    
あ、書き忘れてました。
このぷよモドキは1人用ですが、実は多人数対戦させる事を前提に組んでいます。そういう理由で少し流れが掴みづらいかと思いますが御了承ください…とこぷよに特化すればもう少し分かりやすくなったのでしょうけどね(^_^;)


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



Name: P  ..かけだし(1,698ポイント)   Date: 2008/04/26(土) 01:18   No:15912       
Title: 画像表示    
初めまして。質問させて下さい。

XPを使用しています。
Visual C++ 2008 Express Editionをインストールし、DXライブラリを展開、DxLib.slnからVC++を起動すると画像は表示されますが、すべてのプログラムからVC++を起動して画像を表示させようとするとエラーは表示されないのですが画像が表示されません。例えば「char.png」などは閉じてから見ると「グラフィックファイルchar.pngがありません」と表示されています。

「char.png」はきちんとサンプルプログラム実行用に保存してあります。
「DxLib_VC 2008 and 2005用_Visual C++」と「Visual C++ 2008 Express Edition」には何か違いがあるのでしょうか?なぜ画像が表示されないのでしょうか?

初歩的質問で申し訳ありませんが宜しくお願いします。


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


Name: kazuoni  ..中級者(12,177ポイント)   Date: 2008/04/26(土) 11:24   No:15915     
Title: Re:画像表示    
画像を表示させるときの記述はどう書いていますか?

>DxLib_VC 2008 and 2005用_Visual C++」と「Visual C++ 2008 Express Edition」には何か違いがあるのでしょうか?
恐らくですけど、機能はいろいろと違うと思いますが、画像を表示させることは正しくやればできるはずだと思いますよ。


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

Name: 管理人 [URL]  ..伝説のハッカー(567,665ポイント)   Date: 2008/04/26(土) 15:23   No:15924     
Title: Re:画像表示    
同じプログラムソースコードでOKなはずです。

http://dixq.net/g/trouble.html

こちらのプログラムを試してみて下さい。


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

Name: p  ..ぴよぴよ(138ポイント)   Date: 2008/04/26(土) 16:59   No:15931     
Title: Re:画像表示    
回答ありがとうございます。

ソースコードは下記です。

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode( TRUE ) ;//ウィンドウモードに変更する関数
if( DxLib_Init() == -1 ) return -1;//初期化処理する関数

LoadGraphScreen( 0 , 0 , "char.png" , TRUE ) ;//画像を表示する関数

WaitKey() ;//何か入力があるまで待つ関数
DxLib_End() ;//終了処理をする関数
return 0 ;
}
どうやらサンプルプログラム実行ファイルにあるDxLib.slnを開き表示されてるソースコードを使用し「test.bmp」の記述を「char.png」に変えるときちんと画像が表示されますが、新たにプロジェクトを作りソースコードを記述(コピペ)すると表示されません。ちなみに設定もすべて説明通り変えています。
プロジェクトファイルに「char.png」をおいてみましたが表示されません。

お願いします。


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

Name: P  ..かけだし(1,721ポイント)   Date: 2008/04/26(土) 17:01   No:15932     
Title: Re:画像表示    
失礼しました。上記の名前を間違えました。

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

Name: kazuoni  ..中級者(12,173ポイント)   Date: 2008/04/26(土) 18:52   No:15935     
Title: Re:画像表示    
>新たにプロジェクトを作りソースコードを記述(コピペ)すると

これが書かれたファイルがどこにあるかたどっていって、そこと同じ場所に画像がちゃんとありますか?


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

Name: 管理人 [URL]  ..伝説のハッカー(567,960ポイント)   Date: 2008/04/26(土) 20:27   No:15938     
Title: Re:画像表示    
プロジェクトを作るときに「ソリューションのディレクトリを作製」にチェックが入っていたのではないでしょうか。
プロジェクトがあるフォルダにプロジェクト名と同じフォルダは無いですか?
もしあればその中に入れて下さい。


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

Name: P  ..かけだし(1,827ポイント)   Date: 2008/04/26(土) 21:29   No:15942     
Title: Re:画像表示    
回答ありがとうございます。
kazuoni様。書かれてあるファイルの場所にはきちんと画像が保存されています。

管理人様。「ソリュージョンのディレクトリを作製」にチェックは入っていませんのでプロジェクトに同じ名のファイルはありません。

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


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

Name: 管理人 [URL]  ..伝説のハッカー(568,248ポイント)   Date: 2008/04/27(日) 01:59   No:15946     
Title: Re:画像表示    
私が上で紹介したリンク先のプログラムは試されたと言う事ですよね?
コードがあってるならファイルの保存場所が違うとしか思えません。
一つ上の階層にコピーしたり、色んなフォルダに入れたりして見て下さい。
解決しない場合は、
プロジェクトのフォルダをそのまま圧縮して私に送って下さい。
原因を探してみます。

dixqhp@gmail.com


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

Name: P  ..かけだし(1,872ポイント)   Date: 2008/04/27(日) 02:30   No:15947     
Title: Re:画像表示    
管理人さま。

ありがとうございます。
早速、送らせていただきました。宜しくお願いします。


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

Name: 管理人 [URL]  ..伝説のハッカー(568,262ポイント)   Date: 2008/04/27(日) 04:24   No:15948     
Title: Re:画像表示    
届いていないようです。

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

Name: P  ..かけだし(1,859ポイント)   Date: 2008/04/27(日) 15:00   No:15955     
Title: Re:画像表示    
すみません。

届きましたでしょうか??


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

Name: 管理人 [URL]  ..伝説のハッカー(568,315ポイント)   Date: 2008/04/27(日) 15:17   No:15957     
Title: Re:画像表示    
お返事お返ししました。ご確認下さい。

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

Name: P  ..かけだし(1,889ポイント)   Date: 2008/04/28(月) 00:56   No:15979 解決!     
Title: Re:画像表示    
回答してくださった方、ありがとうございました。

管理人さまのお力で解決できました。

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


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

Name: 初心  ..ぴよぴよ(53ポイント)   Date: 2008/05/08(木) 16:06   No:16279     
Title: 画像表示    
おそらく彼と同じところで止まっています。状況も環境もすべて同じなのですが。。。

どうやって解決したのですか??


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

Name: やそ  ..熟練のプログラマー(45,395ポイント)   Date: 2008/05/08(木) 16:25   No:16280     
Title: Re:画像表示    
おそらくと言われても、
どのようなプログラムなのかも分かりませんし、
初心さんのディレクトリ構造も誰も分かりません。
本当にファイルの保存場所あってます??
Pさんがメールで送ってから管理人さんが送り返されるまで17分しか経っていないところを見ると、
基本的な記入ミスの可能性が高そうです。

コードの記入ミスがなくて、コンパイラの設定項目まで調べる場合、とても17分で返答出来ると思えませんしねぇ・・・。

初心さんはどのようなコードを書いたか、晒せないんでしょうか??


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

Name: 管理人 [URL]  ..伝説のハッカー(571,739ポイント)   Date: 2008/05/08(木) 18:10   No:16283     
Title: Re:画像表示    
送っていただいたプロジェクトはちゃんと作れていなかったのと、ファイルが表示されないと言うことだったのですが、ファイルが同梱されていなかったので、
私の方でも理由はわかりませんでしたから、こちらでプロジェクトを作り直してお送りしたのです。

初心さんもお困りでしたら拝見しましょうか?

→ dixqhp@gmail.com


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



Name: ogi  ..ぴよぴよ(72ポイント)   Date: 2008/05/07(水) 17:58   No:16270       
Title: 待ち行列のM/M/1システムのc言語のプログラミング    
待ち行列のM/M/1システムのc言語のプログラミングを教えてください

ぼくは今大学の講義でプログラミングをしているのですが、
待ち行列のM/M/1システムのc言語のプログラミングなんですが、
何から始めればいいのか全くわかりません

できれば手順を教えてもらいたいです
そしてソースコードも少しでもいいので教えてもらいたいです。

よろしくお願いします


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


Name: すく  ..ぴよぴよ(303ポイント)   Date: 2008/05/07(水) 23:24   No:16276     
Title: Re:待ち行列のM/M/1システムのc言語のプログラミング    


利用率/(1 - 利用率)

これの事ですよね?

公式にあてはめるように書いていけばいいだけでは?


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

Name: やそ  ..熟練のプログラマー(45,173ポイント)   Date: 2008/05/08(木) 10:00   No:16277     
Title: Re:待ち行列のM/M/1システムのc言語のプログラミング    
何から始めればといわれても・・・
何を求めたいのでしょうか?
M/M/1というからにはサービス到着間隔はポアゾン分布に従うランダム到着で、
1件あたりのサービス時間は指数分布に従う。
途中の割り込みは無い。
と言う前提ですよね。

で、求められたいもの(平均待ち時間?)を戻り値として、そのために必要な値(利用率とか)を引数として、
公式をプログラムに置き換えてあげればいいのではないでしょうか?


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

Name: コピペ  ..ぴよぴよ(38ポイント)   Date: 2008/05/08(木) 15:27   No:16278     
Title: Re:待ち行列のM/M/1システムのc言語のプログラミング    
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1316139813

これと同じ人ですか?


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



Name: 朧火  ..ぴよぴよ(119ポイント)   Date: 2008/05/05(月) 18:54   No:16215       
Title: シューティングゲームの館にて    
こんばんは。いつもここのサイトを参考にやらしてもらっています。
シューティングゲームの館をマネながら色々プログラミングをしているのですが、実行した時に2〜3秒の間隔でカクカクした動作に(一瞬だけ動作が止まる感じ)になってしまいます。
コピー&ペーストをしてる部分としてない部分があるのでどこか間違えたのか?と思いシューティングの館の
"ソースとプロジェクトのダウンロード"
をダウンロードして実行してみたんですがこちらも上記のような動作になってしまいます。
これはそういうプログラムになっているのでしょうか?それとも僕のPCの性能なのか・・・
自分ではよくわからないので返答お願いします。


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


Name: 管理人 [URL]  ..伝説のハッカー(571,792ポイント)   Date: 2008/05/07(水) 16:24   No:16263     
Title: Re:シューティングゲームの館にて    
VGA、ドライバあたりの問題ではないかと思いますが、よくわかりません。
DXライブラリ固有の不具合については本家でお聞き頂ければと思います。

http://homepage2.nifty.com/natupaji/DxLib/


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

Name: 朧火  ..ぴよぴよ(265ポイント)   Date: 2008/05/07(水) 23:09   No:16274 解決!     
Title: Re:シューティングゲームの館にて    
プログラミングは初めて1ヶ月程度で、わからないことだらけでの質問でした。
よく考えてみれば配布する物にそんな処理は入れませんよね(汗)
しばらく自分で原因を調べるか、教えてもらった通りDXライブラリ本家で質問して自己解決したいと思います。
返答ありがとうございました^^


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



Name: ふっきー  ..ぴよぴよ(210ポイント)   Date: 2008/05/07(水) 09:39   No:16251       
Title: メモリ領域の確保と構造体の宣言    
struct v4_so v4_so_data[10000]によりv4_so型構造体v4_so_dataを10000個宣言したいのですが、
コンパイルして実行すると、メモリ領域が確保できずに実行がストップしてしまいます。
メモリ領域を確保する命令 malloc(sizeof(struct v4_so)*10000) を先頭に書きましたが、
それでもまだ動きません。
おそらく、malloc(sizeof(struct v4_so)*10000)により確保された領域に、
10000個のv4_so_dataをうまく配置することが出来ていないのだと思います。
どうすればいいのでしょうか?よろしくお願いします。


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


Name: たかぎ [URL]  ..プログラマー(37,598ポイント)   Date: 2008/05/07(水) 10:08   No:16252     
Title: Re:メモリ領域の確保と構造体の宣言    
> メモリ領域を確保する命令 malloc(sizeof(struct v4_so)*10000) を先頭に書きましたが、
> それでもまだ動きません。

具体的にどう書いたのですか?
単に配列を使いたいだけなら、
struct v4_so v4_so_data[10000];



でよいはずです。

環境が不明なので正確なことはいえませんが、C90では1個のオブジェクトににつき32767バイトまでしか保証されませんので、struct v4_so型が4バイト以上であればこの制限にかかってくる可能性はあります(多分問題ないと思います)。


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

Name: バグ  ..比類無きプログラマー(85,457ポイント)   Date: 2008/05/07(水) 10:11   No:16253     
Title: Re:メモリ領域の確保と構造体の宣言    
mallocを使用して動的に確保していのならば…

v4_so* pt = (v4_so*)malloc(sizeof(v4_so) * 10000);

こんな感じでしょうか?

何にせよ、たかぎさんの言われるように、ふっきーさんがどうのように書いたのかによって回答が変わってきそうに思いますね。


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

Name: ふっきー  ..ぴよぴよ(337ポイント)   Date: 2008/05/07(水) 15:09   No:16254     
Title: Re:メモリ領域の確保と構造体の宣言    
/* メモリの確保 */
struct v4_so* pt = (struct v4_so*)malloc(sizeof(struct v4_so) * 10000);

/* 変数の宣言 */
struct v4_format v4_format_data;
struct v4_so v4_so_data[10000];

現在このような状況です。構造体v4_soは文字配列を含むためかなり大きいです。
コンパイルは通りますが、メモリの確保する所でシグウィンがとまってしまいます。


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

Name: box  ..ハッカー(109,806ポイント)   Date: 2008/05/07(水) 15:15   No:16255     
Title: Re:メモリ領域の確保と構造体の宣言    
「かなり大きい」だと状況がよくわからないです。
sizeof(struct v4_so) の値はいくらですか?


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

Name: ふっきー  ..ぴよぴよ(347ポイント)   Date: 2008/05/07(水) 15:18   No:16257     
Title: Re:メモリ領域の確保と構造体の宣言    
sizeof(struct v4_so)の値は1584です。

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

Name: keichan  ..プログラマー(30,557ポイント)   Date: 2008/05/07(水) 15:51   No:16259     
Title: Re:メモリ領域の確保と構造体の宣言    
> struct v4_so v4_so_data[10000];
これ、スタックに確保しちゃいますがいいのでしょうか?
mallocで確保したptを使用するようにしても落ちますか?


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

Name: ふっきー  ..ぴよぴよ(401ポイント)   Date: 2008/05/07(水) 15:55   No:16261     
Title: TO keichan    
> struct v4_so v4_so_data[10000];
これ、スタックに確保しちゃいますがいいのでしょうか?
mallocで確保したptを使用するようにしても落ちますか?

いえ、mallocで確保したptの使用法方法がわからないんです。。。。。。。


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

Name: toyo  ..中級者(9,238ポイント)   Date: 2008/05/07(水) 16:33   No:16264     
Title: Re:TO keichan    

/* メモリの確保 */
struct v4_so* v4_so_data = (struct v4_so*)malloc(sizeof(struct v4_so) * 10000);
if (v4_so_data == NULL) {
fprintf(stderr, "malloc error\n");
}

で後は普通に配列としてアクセスできます。
v4_so_data[0] 〜 v4_so_data[9999]


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

Name: ふっきー  ..ぴよぴよ(445ポイント)   Date: 2008/05/07(水) 16:52   No:16266     
Title: to toyo    
toyoさん、できました!
他の方々のお話も、とても参考になりました。
皆さんありがとうございました。


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



Name: こめかみ  ..かけだし(1,515ポイント)   Date: 2008/05/06(火) 19:43   No:16234       
Title: 6. 先ほどのプログラムを分割してみる。    
質問です。
シューティングゲームの館の分割コンパイルの章でエラーになってしまいます。
環境はBCCです。
どう直せばいいのでしょうか。

こんなエラーが出ます。

> c:\borland\bcc55\Bin\make.exe -fDebug\test.mak TARGET
MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
bcc32 -W -3 -Od -w- -AT -pc -H- -k -b -v -y -DDEBUG -nDebug -c D:\ゲームプログラミングの館\test\background.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
D:\ゲームプログラミングの館\test\background.cpp:
bcc32 -W -3 -Od -w- -AT -pc -H- -k -b -v -y -DDEBUG -nDebug -c D:\ゲームプログラミングの館\test\fps.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
D:\ゲームプログラミングの館\test\fps.cpp:
bcc32 -W -3 -Od -w- -AT -pc -H- -k -b -v -y -DDEBUG -nDebug -c D:\ゲームプログラミングの館\test\img_sound_load.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
D:\ゲームプログラミングの館\test\img_sound_load.cpp:
bcc32 -W -3 -Od -w- -AT -pc -H- -k -b -v -y -DDEBUG -nDebug -c D:\ゲームプログラミングの館\test\initial.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
D:\ゲームプログラミングの館\test\initial.cpp:
bcc32 -W -3 -Od -w- -AT -pc -H- -k -b -v -y -DDEBUG -nDebug -c D:\ゲームプログラミングの館\test\main.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
D:\ゲームプログラミングの館\test\main.cpp:
bcc32 -W -3 -Od -w- -AT -pc -H- -k -b -v -y -DDEBUG -nDebug -c D:\ゲームプログラミングの館\test\player.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
D:\ゲームプログラミングの館\test\player.cpp:
bcc32 -W -3 -Od -w- -AT -pc -H- -k -b -v -y -DDEBUG -eDebug\test.exe Debug\background.obj Debug\fps.obj Debug\img_sound_load.obj Debug\initial.obj Debug\main.obj Debug\player.obj
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: 外部シンボル '_img_sound_load' が未解決(D:\ゲームプログラミングの館\TEST\DEBUG\MAIN.OBJ が参照)
Error: 外部シンボル '_initialization' が未解決(D:\ゲームプログラミングの館\TEST\DEBUG\MAIN.OBJ が参照)
Error: 外部シンボル '_SetColor' が未解決(D:\ゲームプログラミングの館\TEST\DEBUG\MAIN.OBJ が参照)
Error: 外部シンボル '_Background' が未解決(D:\ゲームプログラミングの館\TEST\DEBUG\MAIN.OBJ が参照)
Error: 外部シンボル '_PlayerControl' が未解決(D:\ゲームプログラミングの館\TEST\DEBUG\MAIN.OBJ が参照)
Error: 外部シンボル '_Background2' が未解決(D:\ゲームプログラミングの館\TEST\DEBUG\MAIN.OBJ が参照)
Error: 外部シンボル '_FpsTimeFanction' が未解決(D:\ゲームプログラミングの館\TEST\DEBUG\MAIN.OBJ が参照)

** error 1 ** deleting Debug\test.exe

Make End !! (Elapsed time 0:07.422)

よろしくお願いします。


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


Name: 管理人 [URL]  ..伝説のハッカー(571,744ポイント)   Date: 2008/05/07(水) 03:16   No:16246     
Title: Re:6. 先ほどのプログラムを分割してみる。    
VisualStudioというマイクロソフトが提供しているコンパイラをお使いになってはいかがでしょうか。
そうすればプロジェクトがもう用意してありますので


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

Name: こめかみ  ..かけだし(1,732ポイント)   Date: 2008/05/07(水) 06:17   No:16248     
Title: Re:6. 先ほどのプログラムを分割してみる。    
アドバイスありがとうございます。
VisualStudioで同じサンプルに挑戦しているのですが一つエラーが出ます。

1>------ ビルド開始: プロジェクト: test, 構成: Debug Win32 ------
1>リンクしています...
1>.\Debug\fps.obj : fatal error LNK1107: ファイルが無効であるか、または壊れています: 0x3679 を読み取れません。
1>ビルドログは "file://d:\ゲームプログラミングの館\test\test\Debug\BuildLog.htm" に保存されました。
1>test - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

このエラーは何を表しているんでしょうか。
何か素材のファイルが壊れているということでしょうか。


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

Name: toyo  ..中級者(9,141ポイント)   Date: 2008/05/07(水) 08:59   No:16249     
Title: Re:6. 先ほどのプログラムを分割してみる。    
BCCでは関数のプロトタイプ宣言を関数内で宣言できないようです
http://www.play21.jp/bbs/dixq/image/dixq_5973656657698.jpg
↑図のようにextern〜の部分をWinMainの上に移動してみてください


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

Name: こめかみ  ..かけだし(1,749ポイント)   Date: 2008/05/07(水) 15:52   No:16260 解決!     
Title: Re:6. 先ほどのプログラムを分割してみる。    
VisualStusioとBCCの両方でうまくいきました。

管理人さんにtoyoさん、ありがとうございました。


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



Name: ガルディ  ..ぴよぴよ(12ポイント)   Date: 2008/05/06(火) 21:53   No:16238       
Title: レースゲームの自機について悩んでいます    
まずはこの前のスレでお礼を言いそびれたので、こちらのスレでお礼申し上げます。
なんとかアクセルの問題は解決できました。ありがとうございます。


またレースのゲームで悩んでいます。

実際の車って前輪で方向を変えたりして、後輪で前進、後退していますよね?(この考えはあくまでごく普通の車と思ってください。あまり懲りすぎるとかなりマニアなものになってしまいますし、時間が全然ありませんので)

それをゲームの中に入れたいと思っていろいろと試してやっているのですが全然うまくいきません。
子フレームという概念でやってみてもやっぱりうまくいかないです。
そこでみなさんの知恵を貸してはいただけないでしょうか?


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


Name: Justy  ..ハッカー(192,249ポイント)   Date: 2008/05/06(火) 23:36   No:16244     
Title: Re:レースゲームの自機について悩んでいます    
 どういう感じのレースゲームなのか、どういうふうに試してどうダメだったのか
よくわからないんで、一般論に終始してしまいますが。


 今どういうふうに計算しているのかわからないので既に試されているかも
しれませんが、とりあえず非常にシンプルなモデル・・・車体が親で、
その子に車輪があるような親子構造で、重心が車体の中央、そこから前輪・後輪の
距離は全て同じ、車輪に摩擦がない等の条件・・・で考えます。


 計算式としてはモデルが単純なので式も単純になります。
 前輪の曲がろうとする角度をWとし、曲がりやすさをC、速度をVとすると、
W・C・Vで実際に曲がる角度が求まります。

 この式は、速度に比例して曲がりやすくなるのとCの値による調整がキモです。
 Cは大抵の場合、0.0〜1.0の間になりますが、Vの値も 0.0〜 1.0に
正規化しておくと、Cの値が調整しやすくなるかと思います。

 普通の乗用車とリムジンのような前輪と後輪の長さが異なるようであれば
長さに反比例するような係数をCに与えて調整すれば大抵の場合大丈夫でしょう。

 あとは移動ベクトル化して、現在の位置に加算するだけです。


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

Name: やそ  ..熟練のプログラマー(44,582ポイント)   Date: 2008/05/07(水) 09:09   No:16250     
Title: Re:レースゲームの自機について悩んでいます    
実際に(現実世界で)は速度が上がるほど曲がりにくくなります。(慣性の法則が働くため)
まあ、ゲームなので、その辺の調整はお好みで^^

またちょっと凝るならタイヤを何種類か用意して摩擦係数を変えてみたり、
同様にステアリング性能を選べたりすると幅が広がって楽しそうですが、コレは次のステップですかね?(笑)



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



Name: J  ..かけだし(2,407ポイント)   Date: 2008/05/05(月) 20:59   No:16217       
Title: ?演算子    
a = (field[y[0]][] > field[y[1]][]) ? field[(y[0]+1)][] : field[(y[1]+1)][];
とやると、
エラー E2188 c:\field\Field.h 291: 式の構文エラー(関数 PieceDrop(int ( *)[8]) )
と表示されてしまいます。何が悪いのでしょうか?


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


Name:  ..ぴよぴよ(261ポイント)   Date: 2008/05/05(月) 21:48   No:16218     
Title: Re:?演算子    
Field.h の 291 行目の前後 10 行ほどを見せてください。

また、[] の中には適切な式を書く必要があるはずです。


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

Name: J  ..入門者(2,714ポイント)   Date: 2008/05/06(火) 11:13   No:16226     
Title: Re:?演算子    
int PieceDrop(int (*field)[8])
{
//変数宣言、キーチェックの準備
char key[256];
int x[2]={3,3,},y[2]={0,1,},i=0,a;
GetHitKeyStateAll(key);
//ピースをセット
field[0][3] = Piece[0];
field[1][3] = Piece[1];
//移動のループ
while( i==0 )
{
if( key[KEY_INPUT_LSHIFT] == 1 && key[KEY_INPUT_RIGHT] == 1)
{
//右回転動作
}
if( key[KEY_INPUT_LSHIFT] == 1 && key[KEY_INPUT_LEFT] == 1)
{
//左回転動作
}
if( key[KEY_INPUT_DOWN] == 1 )
{
//高速落下
}
if( key[KEY_INPUT_RIGHT] == 1 )
{
//右移動
}
if( key[KEY_INPUT_LEFT] == 1 )
{
//左移動
}
a = (field[y[0]][] > field[y[1]][]) ? field[(y[0]+1)][] : field[(y[1]+1)][];
if(a != 0)
{
//下に何も無いかチェック
}
}
return 0;
}


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

Name: すく  ..ぴよぴよ(264ポイント)   Date: 2008/05/06(火) 14:25   No:16230     
Title: Re:?演算子    
二次元配列の

後ろの[]はなにもはいらないの?


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

Name:  ..ぴよぴよ(306ポイント)   Date: 2008/05/06(火) 15:12   No:16231     
Title: Re:?演算子    
何か入ってないとまずいでしょうね。

それから、ヘッダーファイルに関数の実体を書いているのも
まずいでしょうね。


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

Name: J  ..入門者(2,812ポイント)   Date: 2008/05/06(火) 20:13   No:16235     
Title: Re:?演算子    
そうですか、よくわかりました。試してみます。
二次元配列の[y][x]では片方は省略しても良いと聞いていましたが・・・

>それから、ヘッダーファイルに関数の実体を書いているのも
>まずいでしょうね。

詳しく教えて下さい。


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

Name:  ..ぴよぴよ(10ポイント)   Date: 2008/05/06(火) 20:34   No:16236     
Title: Re:?演算子    
省略できるのは宣言の時だけでは?

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

Name:  ..ぴよぴよ(480ポイント)   Date: 2008/05/06(火) 20:54   No:16237     
Title: Re:?演算子    
> 片方は省略しても良い

省略できる局面と、記述を省略できる場所について確認してください。
今のコードは、上記2点とも間違えています。

> 詳しく教えて下さい。

当該ヘッダーファイルを複数の *.c から
インクルードすることを想定してみてください。
同じ関数の定義が複数存在してしまいます。
逃れる方法はあるのですが、
それを差し置いてもヘッダーファイルに関数の実体は書かないのが通常のやり方です。
お使いのコンパイラのヘッダーファイルの中身をのぞいてみるとよいでしょう。


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

Name: J  ..入門者(2,832ポイント)   Date: 2008/05/07(水) 05:32   No:16247 解決!     
Title: Re:?演算子    
エラーは解決できました。
回答をくださった方、本当にありがとうございました。


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



Name: マスラオ  ..ぴよぴよ(101ポイント)   Date: 2008/05/06(火) 22:41   No:16239 解決!       
Title: 助けてください!VC++が起動しない    
ここの入門編からつまずいています。
DxLib.slnを開くとありますが、何度開いてみても何もおきません。
その下に、「ここでうまく行かなかった人、DXライブラリの設定がうまくいっていない可能性が高いです。」
とあり、こちらを参照してもみたのですが、
2.VisualC++ 2008 Express Edition でDXライブラリを使うための設定を行う
でのパスの説明もちんぷんかんぷんです。3時間もパソコンとにらめっこして何も進展せず・・・

どーしたらいいでしょう?たすけてください!<!--12-->


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


Name: kazuoni  ..中級者(13,867ポイント)   Date: 2008/05/06(火) 22:53   No:16240     
Title: Re:助けてください!VC++が起動しない    
もう一回一からやり直してはどうでしょうか?
パスは『プロジェクトに追加すべきファイル_VC用』フォルダを選択すればよいだけで、インクルードファイルを選択し、一番上を二回クリックすると、右になんか「...」見たいなのが出ませんか?そこを押してフォルダを選択すればよいだけなんですが・・・??


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

Name: マスラオ  ..ぴよぴよ(120ポイント)   Date: 2008/05/06(火) 23:02   No:16241     
Title: Re:助けてください!VC++が起動しない    
初心者ですみません!(>_<)

「...」見たいのを押してフォルダを選択したら
『C:\Users\○○○\Desktop\DxLib_VC\プロジェクトに追加すべきファイル_VC用』
と表示されたんですがこれで合ってるんですかね?


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

Name: kazuoni  ..中級者(13,896ポイント)   Date: 2008/05/06(火) 23:04   No:16242     
Title: Re:助けてください!VC++が起動しない    
それで大丈夫だと思います。のちに出てくるのも同じ要領でいけると思います。

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

Name: マスラオ  ..ぴよぴよ(202ポイント)   Date: 2008/05/06(火) 23:20   No:16243     
Title: Re:助けてください!VC++が起動しない    
ありがとうございます。
パスのモヤモヤは解決しました。
そして画面中心に点も出た!


今度こそDxLib_VC2008_and_2005用.slnを開く!!・・・やっぱりなにもおきない〜
悲しすぎる(T_T)

何がいけないんだ、うつだ〜


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

Name: マスラオ  ..ぴよぴよ(254ポイント)   Date: 2008/05/07(水) 00:18   No:16245     
Title: Re:助けてください!VC++が起動しない    
と思ったら、DxLib.dswを開いたらあっけなく起動できちゃいました
説明では「DxLib.slnを開く」って書いてあるのに何で?
まあ、とりあえず起動できたので一件落着しました。

kazuoniさん、ありがとでした


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



Name: こめかみ  ..ぴよぴよ(384ポイント)   Date: 2008/05/03(土) 15:57   No:16141       
Title: s2. サウンドノベル風文字列表示法1 のエラーについて    
はじめまして。最近ゲームプログラミングの館で勉強をしているこめかみと申します。
触れ込みのとおり大変わかりやすく管理人のDixqさんには感謝の念が尽きません。

早速質問です。
サンプルプログラムを上から一つづつ咀嚼してる最中なのですが、タイトル通り"s2. サウンドノベル風文字列表示法1"のサンプルプログラムのコンパイルでエラーが解決できなく完全にお手上げ状態で困っています。
環境はWindowsXP,BCCでエラーの内容は以下のとおりです。

> c:\borland\bcc55\Bin\make.exe -fDebug\test.mak TARGET
MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
bcc32 -W -3 -Od -w- -AT -pc -H- -k -b -v -y -DDEBUG -nDebug -c D:\ゲームプログラミングの館\test\DrawPixel.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
D:\ゲームプログラミングの館\test\DrawPixel.cpp:
エラー E2264 D:\ゲームプログラミングの館\test\DrawPixel.cpp 4: 式が必要
*** 1 errors in Compile ***

** error 1 ** deleting Debug\DrawPixel.obj

Make End !! (Elapsed time 0:01.500)


他のサンプルプログラムは問題なくコンパイル(メイク?コンパイルとメイクの違いがわかりません)後、実行できて来ました。別のサンプルプログラムでコンパイルしても滞りなく実行できますので環境設定を書き換えてしまったと言うわけでは無いように思います。

何が問題で何を直せばこのコンパイルが成功するのか。どうぞよろしくお願いします。

似たような結果を出すサンプルプログラムはDXライブラリ本家にもありそちらは問題なく実行迄こぎつけるのですが。僕はこちらでお世話になるからにはこちらのサンプルも把握したいと思っています。

ええと・・・一応スクショも。これでいいのかな?間違えたらすみません。


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


Name: ibis  ..初心者(6,394ポイント)   Date: 2008/05/03(土) 16:33   No:16142     
Title: Re:s2. サウンドノベル風文字列表示法1 のエラーについて    
原因はoldKeyの初期化です。
初期化のやり方を変えてみてください。


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

Name: こめかみ  ..ぴよぴよ(483ポイント)   Date: 2008/05/03(土) 17:23   No:16143 解決!     
Title: Re:s2. サウンドノベル風文字列表示法1 のエラーについて    
oldKey[256]=""にしたら実行できました。ibisさんありがとうございました。

あと、このプログラムはサンプルのコピーなのでサンプルの間違いということになるのでしょうか。
管理人さんに伝えたほうがいいのかな。

あの、ココを見てたら直してくださいね。それでは。


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

Name: ibis  ..初心者(6,551ポイント)   Date: 2008/05/03(土) 18:06   No:16144     
Title: Re:s2. サウンドノベル風文字列表示法1 のエラーについて    
いえ、コンパイラの違いによるものです。
BCCではエラーですが、Visual C++では正常にコンパイルできますよ。


ちょっと試してみました。
 コンパイルできるのは
  VC++
  GCC
 できないのは
  BCC
  DMC
 何故かコンパイルできてリンクできないのは
  LightC
という結果に。
中途半端なことに、ほぼ50:50ですねぇ。


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

Name: こめかみ  ..ぴよぴよ(493ポイント)   Date: 2008/05/03(土) 18:15   No:16145     
Title: Re:s2. サウンドノベル風文字列表示法1 のエラーについて    
同じ言語でもコンパイラによって違うのですか。
勉強になります。


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

Name: YuO  ..上級者(20,367ポイント)   Date: 2008/05/03(土) 18:32   No:16146     
Title: Re:s2. サウンドノベル風文字列表示法1 のエラーについて    
> 同じ言語でもコンパイラによって違うのですか。

コンパイラによって,どこまで標準に準拠しているかや,拡張をしているかが異なります。
また,C/C++にはImplementation-definedという,標準がコンパイラに決定を依存している部分もあります。

今回の場合,ISO/IEC 14882:2003の8.5.1 Aggregatesの第8段落第2文に
> An empty initializer-list can be used to initialize any aggregate.
とあるので,該当箇所でエラーが発生するのは非標準の振る舞いということになります。


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

Name: こめかみ  ..ぴよぴよ(579ポイント)   Date: 2008/05/03(土) 19:01   No:16147     
Title: Re:s2. サウンドノベル風文字列表示法1 のエラーについて    
ええと、ISO/IEC 14882:2003の8.5.1 Aggregates というのはどこにあるんでしょうか。



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

Name: こめかみ  ..ぴよぴよ(605ポイント)   Date: 2008/05/03(土) 19:17   No:16148     
Title: Re:s2. サウンドノベル風文字列表示法1 のエラーについて    
あ、書籍でしょうか。ありがとうございます。

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

Name: ibis  ..初心者(6,644ポイント)   Date: 2008/05/03(土) 19:22   No:16149     
Title: Re:s2. サウンドノベル風文字列表示法1 のエラーについて    
ISO/IECの国際規格ですねぇ。
14882でしたらC++ですね。

ISOよりもJISの方がわかりやすいかと思いますよ。
内容は同じなのですが、ISOは英語でJISは日本語です。

JISのC言語の規格はこのサイトにあります。
http://www.jisc.go.jp/app/pager?id=8911

同じく、C++はこちら。
http://www.jisc.go.jp/app/pager?id=9014


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

Name: こめかみ  ..ぴよぴよ(647ポイント)   Date: 2008/05/03(土) 19:31   No:16150     
Title: Re:s2. サウンドノベル風文字列表示法1 のエラーについて    
返信ありがとうございます。
せっかくリンクしていただいたのですがリンク先にファイルがありませんでした。
ググれば見つかるのかな。


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

Name: ibis  ..初心者(6,702ポイント)   Date: 2008/05/03(土) 19:55   No:16152     
Title: Re:s2. サウンドノベル風文字列表示法1 のエラーについて    
あ、すみません。

リンク先の上のほうに「PDF Adobe」ってかかれた小さい画像がありますよね。
それをクリックしてみてください。


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

Name: ibis  ..初心者(6,766ポイント)   Date: 2008/05/03(土) 20:00   No:16153     
Title: Re:s2. サウンドノベル風文字列表示法1 のエラーについて    
・・・じゃなかった。
確かにCの方はリンク切れですね。
こちらが正しいアドレスです。
http://www.jisc.go.jp/app/pager?id=9674


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

Name: ibis  ..初心者(6,814ポイント)   Date: 2008/05/03(土) 20:05   No:16154     
Title: Re:s2. サウンドノベル風文字列表示法1 のエラーについて    
・・・あれ、何度か試しましたが、リンク切れでも無いっぽいですよ?
行けたり行けなかったりします。
というかC規格のアドレスは2回載せましたが、どちらでも同じところにつながってるっぽいです。


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

Name: こめかみ  ..ぴよぴよ(659ポイント)   Date: 2008/05/03(土) 20:22   No:16155     
Title: Re:s2. サウンドノベル風文字列表示法1 のエラーについて    
IEとFIREFOXとoperaで試しましたがダメでした。
operaだけ少し表示が違うようですが。
うーん。
http://www.jisc.go.jp/
ここには問題なく繋がるのですが。


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

Name: こめかみ  ..ぴよぴよ(727ポイント)   Date: 2008/05/03(土) 20:32   No:16156     
Title: Re:s2. サウンドノベル風文字列表示法1 のエラーについて    
言語の検索でたどりつけました。

あ、普通にクリックで落とせますね。失礼しました。
operaで別のタブで開くのが癖になっているもので。

ありがとうございます。


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

Name: 管理人 [URL]  ..伝説のハッカー(571,382ポイント)   Date: 2008/05/04(日) 20:18   No:16181     
Title: Re:s2. サウンドノベル風文字列表示法1 のエラーについて    
VC++でプログラムを書かれる事を前提としたサンプルなので、ほかのコンパイラの事を考えていませんでした。
確か{}の所を{0,}とすればよかったのではないかと思います。
他にもfor(int i=0;)という書き方はC++のコンパイラではないとエラーになると思いますし、
BCCではextern文はmain関数内で宣言出来ないなど、色々とVC++以外ではエラーになることが多いと思います。
なるべく、多いコンパイラで問題ないように修正していこうとおもいます。
混乱させてしまいすみません。


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

Name: こめかみ  ..ぴよぴよ(757ポイント)   Date: 2008/05/06(火) 19:37   No:16233     
Title: Re:s2. サウンドノベル風文字列表示法1 のエラーについて    
そうなんですか。
つまずいたら質問に来ますので、その時はよろしくお願いします。


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



Name: tkmakwins15 [URL]  ..比類無きプログラマー(72,749ポイント)   Date: 2008/05/05(月) 17:22   No:16209       
Title: C++/CLIについて。    
2つ質問があります。よろしくお願いします。

1:
C++/CLIでvectorクラスを使いたいのですが、以下のようなコードをコンパイルすると、その下のようなエラーが出てコンパイルできません。

#using "System.dll"

#include<vector>
#include<algorithm>

using namespace std;
using namespace System;

int main()
{
vector<int>a;
std::fill_n(std::back_insert_iterator<vector<int> >(a),100,100);
for(vector<int>::iterator itr=a.begin();itr!=a.end();itr++){
Console::WriteLine("{0}",*itr);
}
return 0;
}

をコンパイルすると、次のようなエラーが出ます。
error LNK2028: 未解決のトークン (0A0000DA) "extern "C" int __cdecl _CrtDbgReportW(int,wchar_t const *,int,wchar_t const *,wchar_t const *,...)" (?_CrtDbgReportW@@$$J0YAHHPB_WH00ZZ) が関数 "public: int const & __thiscall std::_Vector_const_iterator<int,class std::allocator<int> >::operator*(void)const " (??D?$_Vector_const_iterator@HV?$allocator@H@std@@@std@@$$FQBEABHXZ) で参照されました。
error LNK2019: 未解決の外部シンボル "extern "C" int __cdecl _CrtDbgReportW(int,wchar_t const *,int,wchar_t const *,wchar_t const *,...)" (?_CrtDbgReportW@@$$J0YAHHPB_WH00ZZ) が関数 "public: int const & __thiscall std::_Vector_const_iterator<int,class std::allocator<int> >::operator*(void)const " (??D?$_Vector_const_iterator@HV?$allocator@H@std@@@std@@$$FQBEABHXZ) で参照されました。

APIの関数を呼び出した際にも同じエラーが出たのですが、エラー番号などでググってみて、APIのほうは設定にミスがあり、それを直すとリンカエラーもなくなり解決したのですが、STLのほうは全くといっていいほど解決しません。なぜでしょうか?

2:
C++/CLIがWindows APIとの共存が可能だということで、たぶんMFCやATLなどのクラスライブラリなども共存可能と思いますが、MFCとATLのうち、.NETとの共用を考えたら、どちらのほうを選択するほうがいいのでしょうか?


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


Name: tkmakwins15 [URL]  ..比類無きプログラマー(72,801ポイント)   Date: 2008/05/05(月) 17:33   No:16211     
Title: Re:C++/CLIについて。    
リリース設定の時はこのエラーが出ません。関数名からしてデバッグ系統の関数というのは分かるのですが、なぜデバッグ系関数+STL+C++/CLIの組み合わせでリンカエラーが出るのでしょうか?

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

Name: たかぎ [URL]  ..プログラマー(37,394ポイント)   Date: 2008/05/06(火) 01:49   No:16222     
Title: Re:C++/CLIについて。    
ちゃんと調べていないので当て推量ですが...

リリース版ではNDEBUGマクロが定義されるはずですが、この辺りのプロジェクトの設定を変えていませんか?
ライブラリの内部でassertマクロが使われていて、そこから_CrtDbgReportWが参照されているのではないかと思います。


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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(73,105ポイント)   Date: 2008/05/06(火) 05:57   No:16223     
Title: Re:C++/CLIについて。    
回答ありがとうございます。

NDEBUG定数関連については何も触ってません。後、エラーが出るのはデバッグ時だけです。なのでリリース時は全く問題ありませんでした。

プロジェクトのコマンドライン設定はこうなっています、コマンドラインから設定を推量するというのはたぶんできると思いますので掲載します。

[コンパイラへ]
/Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /FD /EHa /MD /Fo"Debug\\" /Fd"Debug\vc80.pdb" /W3 /nologo /c /Zi /clr /TP /errorReport:prompt

[リンカへ]
/OUT:"C:\programfile\VC\CLRtest\Debug\CLRtest.exe" /INCREMENTAL /NOLOGO /MANIFEST /MANIFESTFILE:"Debug\CLRtest.exe.intermediate.manifest" /DEBUG /ASSEMBLYDEBUG /PDB:"c:\programfile\VC\CLRtest\debug\CLRtest.pdb" /MACHINE:X86 /FIXED:No /ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib


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

Name: Justy  ..ハッカー(191,834ポイント)   Date: 2008/05/06(火) 11:15   No:16227     
Title: Re:C++/CLIについて。    
 コンパイラのオプションで、デバッグなのに /MDなのが問題な気がします。
 デバッグなら /MDdだと思います。


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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(73,321ポイント)   Date: 2008/05/06(火) 13:15   No:16228     
Title: Re:C++/CLIについて。    
Justyさん、ありがとうございます。設定をマルチスレッド デバッグ DLL(/MDd)に変更したらエラーがなくなりました。ありがとうございます。

ところで、CLIのコンソールウィンドウが出ないようにするにはコマンドラインに何を指定すればいいのでしょうか? 再びよろしくお願いします。


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

Name: Justy  ..ハッカー(191,940ポイント)   Date: 2008/05/06(火) 13:41   No:16229     
Title: Re:C++/CLIについて。    
>CLIのコンソールウィンドウが出ないようにするに
 んー、あんまり詳しくはないのですが、上記の状態からそうするのであれば
リンカのサブシステムの項目を Windowsに、エントリポイントを mainにすれば
コンソールが開くことなく実行できる、と思います。


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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(73,354ポイント)   Date: 2008/05/06(火) 15:48   No:16232     
Title: Re:C++/CLIについて。    
ありがとうございます。きれいにウィンドウのみが表示されました。

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



Name: アル  ..かけだし(2,217ポイント)   Date: 2008/05/06(火) 00:28   No:16219       
Title: 無題    
ゲーム制作でタイムが必要になってしまってさっぱりわからなくて書き込みしました。

ストップウォッチの概念であ〜だこ〜だと悩んでプログラムを適当にうっては全然できてないとか良いながら悪戦苦闘しています。


ストップウォッチってどのように作ればいいのでしょうか?是非教えてください


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


Name: すく  ..ぴよぴよ(242ポイント)   Date: 2008/05/06(火) 00:31   No:16220     
Title: Re:無題    
ゲームプログラムはやった事ないけど、APIじゃダメなの?

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

Name: 管理人 [URL]  ..伝説のハッカー(571,702ポイント)   Date: 2008/05/06(火) 01:43   No:16221     
Title: Re:無題    
まず環境と何で作製しているのか、ライブラリの情報などは書いてくださるようお願いいたします。

もしDXライブラリならGetNowCountで、
Cの標準関数のみで行いたいならこちら参考にしてください。

http://www.google.co.jp/search?hl=ja&q=C%E8%A8%80%E8%AA%9E%E3%80%80%E6%99%82%E9%96%93&lr=



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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(73,141ポイント)   Date: 2008/05/06(火) 06:56   No:16224     
Title: Re:無題    
Dxライブラリ使用ですよね?
自らも必要でコードを組んでみた事があるので、それを添付します。


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

Name: アル  ..かけだし(2,279ポイント)   Date: 2008/05/06(火) 09:59   No:16225     
Title: Re:無題    
すいません。かなりの説明不足でした

3Dのゲーム制作で、DXを使っています

いろいろと親切に教えていただきありがとうございます


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



Name: kazuoni  ..中級者(13,130ポイント)   Date: 2008/05/04(日) 16:16   No:16173       
Title: ポインタ    
お邪魔します。
ずっとポインタについて勉強してたんですが・・・いくつか疑問が出てきましたので質問させていただきます。

@
typedef struct{

const char *abc[3];
}states_t;

states_t states[10]

このように定義したのちにmain文で、↑の構造体でstates[0]でのabc[]に、
abc[0]→"要素1"
abc[1]→"要素2"
abc[2]→"要素3"
としたいのですが、
states[0].*occupation[3]={"要素1" , "要素2" , "要素3"};

と記述ができないとすると、どう記述をしたら良いのでしょうか?もしかしたら構造体の中が違うのでしょうか?

A
メモリの動的確保のところを勉強したんですが、イマイチ使う理由が分からないです。例えばゲームプログラミングでいうと、ゲームの前半では使用していたものが、後半に入ると全く使わなくなるので、メモリを解放すれば、少しでも処理が軽くなる!みたいなことなんでしょうか?あとリスト処理・・・ぐらいですか?

よろしくお願いします。


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


Name:  ..ぴよぴよ(227ポイント)   Date: 2008/05/04(日) 17:24   No:16175     
Title: Re:ポインタ    
#include <stdio.h>


typedef struct{
const char *abc[3];
}states_t;

int main(void)
{
states_t states[10];

states[0].abc[0]= "要素1";
states[0].abc[1]= "要素2";
states[0].abc[2]= "要素3";
printf("%s\n", states[0].abc[0]);
printf("%s\n", states[0].abc[1]);
printf("%s\n", states[0].abc[2]);
return 0;
}


なお、main「文」ではなく、main「関数」です。




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

Name: 管理人 [URL]  ..伝説のハッカー(571,084ポイント)   Date: 2008/05/04(日) 19:51   No:16177     
Title: Re:ポインタ    
動的確保は要素をいくつ用意すればいいか解らない時などによく使います。
例えばリプレイ記録を作る為に、ユーザーが入力した情報を記録しないといけないとします。
わかりやすく単なる配列で説明します。

今キーの入力情報が10種類必要だとします。
(左、右、上、下、ジャンプ、加速、ポーズ・・・等)
60FPSで動いているのならこの10*60個の要素が1秒間に必要です。
30分記録したいのなら10*60*60*30個の要素が必要です。
これは約100万個であり、1メガに相当します。
BYTE型で用意したとしても、1メガバイトも配列だけで占有してしまう事になります。

しかしプレイヤーが30分でクリアするだろうと思っても、途中で点数稼ぎをする為に、わざとゆっくり
行くかもしれないし、どれ位の時間でクリアするかわかりませんよね。
せっかく入念に点数稼ぎしてても、クリア直前になって「リプレイ情報が記録できなくなりました」なんてログが出たらガッカリすると思います。

そこでどうすればいいのでしょう?
使うかどうかもわからないのに、多めに・・1000万個位確保しておくのが適切でしょうか?
いや、使う時に使う分だけ増やす方がいいですよね。

他にもいい例はあるかもしれませんし、リプレイデータはキー入力データを圧縮したりしますし、ビットのオンオフで入力状態を管理する事が多と思うのでいい例だったかどうかわかりませんが、ご紹介しました。


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

Name: kazuoni  ..中級者(13,272ポイント)   Date: 2008/05/05(月) 14:55   No:16198     
Title: Re:ポインタ    
返事が送れて申し訳ありませんでした。。・さん、管理人さんご回答ありがとうございました!

states[0].abc[0]= "要素1";

states[0].abc[1]= "要素2";
states[0].abc[2]= "要素3";

は一つにまとめて定義はできないんでしょうが・・・?

なんだかまだ自分は動的確保をうまく使いこなせそうにないですね^^;w
それよりもポインタをもっと煮詰めないといけないです・・・(泣)


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

Name: Justy  ..ハッカー(191,374ポイント)   Date: 2008/05/05(月) 15:11   No:16199     
Title: Re:ポインタ    
>は一つにまとめて定義はできないんでしょうが・・・?
 望む形かどうかはわかりませんが、
こうすれば一応纏められます。

#include <stdio.h>


typedef struct{
const char *abc[3];
}states_t;

static const states_t default_state_value = { "要素1", "要素2", "要素3" };

int main(void){
states_t states[10];
states[0] = default_state_value
printf("%s\n%s\n%s\n", states[0].abc[0], states[0].abc[1], states[0].abc[2]);
return 0;
}


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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(72,190ポイント)   Date: 2008/05/05(月) 15:23   No:16201     
Title: Re:ポインタ    
mallocで確保するメモリは、スタックではなくヒープ領域から確保される事が多いです。スタックはプログラムコードの展開場所である事も多いので、スタックを消費すると実行できなくなる事もあります。

そんなに大きい配列を必要とするならば、vectorを使うというのはどうでしょうか?


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

Name: ibis  ..初心者(6,852ポイント)   Date: 2008/05/05(月) 15:50   No:16203     
Title: Re:ポインタ    
ところで、char *abc[3] というのは2文字の文字列へのポインタではないのですか?

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

Name: kazuoni  ..中級者(13,496ポイント)   Date: 2008/05/05(月) 16:15   No:16204     
Title: Re:ポインタ    
justyさん、tkmakwins15さんご回答ありがとうございます!

>states[0] = default_state_value
申し訳ないのですが、構造体の中にはconst char型のみではなく、int型もある場合、これは使えないのですが、ほかにはあるでしょうか?
自分のやりたいこととして、構造体はRPGのキャラクターのステータスをまとめるために使っています。

vectorですか。。使ったことないですね。。またちょっと調べてきます・・・

>char *abc[3] というのは2文字の文字列へのポインタではないのですか?
abcは<charへのポインタ型>の大きさ3の配列だと思いますよ。


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

Name: バグ  ..比類無きプログラマー(85,346ポイント)   Date: 2008/05/05(月) 16:17   No:16205     
Title: Re:ポインタ    
いえ、char型の配列ではなく、char型へのポインタの配列です。

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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(72,166ポイント)   Date: 2008/05/05(月) 16:18   No:16206     
Title: Re:ポインタ    
よく考えたらC++ではなくC言語での開発ですね。失礼しました。C言語ではvectorは使えません。

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

Name: Justy  ..ハッカー(191,876ポイント)   Date: 2008/05/05(月) 16:40   No:16207     
Title: Re:ポインタ    
構造体の中にはconst char型のみではなく、int型もある場合、
これは使えないのですが、ほかにはあるでしょうか

 なるほど、構造体の中の文字列へのポインタの配列の部分だけを初期化したい、と。
 なら、その部分だけを別の構造体にすれば一応出来ます。


#include <stdio.h>


typedef struct hoge_strings_t {
const char *p[3];
} hoge_strings_t;

typedef struct states_t {
hoge_strings_t abc;
int d;
int e;
int f;
int g;
}states_t;

static const hoge_strings_t default_hoge_strings = { "要素1", "要素2", "要素3" };

int main(void) {
states_t states[10];
states[0].abc = default_hoge_strings;
printf("%s\n%s\n%s\n", states[0].abc.p[0], states[0].abc.p[1], states[0].abc.p[2]);
return 0;
}




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

Name: kazuoni  ..中級者(13,623ポイント)   Date: 2008/05/05(月) 17:03   No:16208     
Title: Re:ポインタ    
Justyさんご回答ありがとうございます!

完璧です!!ww新しい構造体を入れるのは全く考え付かなかったです。。

あと・・・staticは静的な場所(?)が割り当てられて、プログラムの実行が開始されてから終了するまで、ずっと同じ場所って覚えているんですけど・・・プログラミングの中で変更することのないものはすべてstaticをつければよいのでしょうか?


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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(72,710ポイント)   Date: 2008/05/05(月) 17:24   No:16210     
Title: Re:ポインタ    
プログラム中で変更しない変数には、staticではなくconstをつけるといいです。

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

Name: kazuoni  ..中級者(13,670ポイント)   Date: 2008/05/05(月) 18:10   No:16212     
Title: Re:ポインタ    
たびたびすみません。。
>extern static const hoge_strings_t default_hoge_strings
をヘッダーに書くと「2 つ以上のストレージ クラスが指定されています」と出てしまうのですが・・・staticを書かなければうまく通ります。staticは書かなくても大丈夫ですかね?


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

Name: Justy  ..ハッカー(191,801ポイント)   Date: 2008/05/05(月) 18:39   No:16213     
Title: Re:ポインタ    
>staticは書かなくても大丈夫ですかね?

 特に問題はないと思います。
 staticにしたのはそのファイルの中だけで有効にしたかっただけですから。
 externで外に出してしまうなら、staticは外さなければなりません。


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

Name: kazuoni  ..中級者(13,740ポイント)   Date: 2008/05/05(月) 18:55   No:16216 解決!     
Title: Re:ポインタ    
Justyさん、ご回答ありがとうございます^^

今思えばヘッダーに入れる必要は特になかったので、結局最初の記述で落ち着きました(汗)
単純な質問の連続、申し訳ありませんでした。そして親切なご回答ありがとうございました!

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


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



Name:  ..ぴよぴよ(43ポイント)   Date: 2008/05/04(日) 15:49   No:16170       
Title: 無題    
DXライブラリの全画面の絵をだすとこまでうまくいったのですが、そこからいろいろなソース(ウィンドウモードも)を試してみたのですが最初の全画面の絵しかでません。
どうしてでしょうか?


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


Name: 管理人 [URL]  ..伝説のハッカー(571,131ポイント)   Date: 2008/05/04(日) 19:52   No:16178     
Title: Re:無題    
ファイルの保存場所が違うのだと思います。

http://dixq.net/g/trouble.html

これを実行して試してみて下さい。


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

Name:  ..ぴよぴよ(87ポイント)   Date: 2008/05/04(日) 21:41   No:16184     
Title: Re:無題    
やってみたのですが、
やはり同じ結果になってしまいます。
すいません、何度も;^^


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

Name: 管理人 [URL]  ..伝説のハッカー(571,451ポイント)   Date: 2008/05/04(日) 21:57   No:16185     
Title: Re:無題    
コンパイラは何ですか?
コンパイラの名前とサンプルの実行結果を教えて下さい。

VC++ならそのままでいいはずですが、BorlandならデータフォルダはDebugフォルダの中に入れる必要があります。


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

Name:  ..ぴよぴよ(17ポイント)   Date: 2008/05/05(月) 15:27   No:16202     
Title: Re:無題    
コンパイラはVC++です。
サンプルの実行結果はちゃんとできるのですが、
そこからソースを消して他のソースをいれても
固定されてしまうような感じです。


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



Name: 初めてのC  ..ぴよぴよ(119ポイント)   Date: 2008/05/05(月) 00:48   No:16187       
Title: 3節 画像を表示する    
自分なりに検索したりしましたが解決しそうにありませんのでお力を貸していただけたらと思い投稿させていただきました。

初心者でどう質問していいかもわかりませんが、解決法がありましたらお願いします。
BCC Developerを使ってます。ウインドウモードまでは正常になりましたが何故か画像が表示されません。とくにエラーの表示もなくどうしていいか困ってます。よろしくお願いします。


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


Name: 初めてのC  ..ぴよぴよ(398ポイント)   Date: 2008/05/05(月) 00:58   No:16189     
Title: Re:3節 画像を表示する    
// ここにサンプルプログラムをペーストしてください
// 初期状態では LoadGraphScreen のサンプルプログラムが入力されています。
#include "DxLib.h"


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

if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}

// BMP画像の表示
LoadGraphScreen( 0 , 0 , "back.bmp" , FALSE ) ;
LoadGraphScreen(0,0,"char.png",TRUE);

WaitKey() ; // キーの入力待ち((7-3)『WaitKey』を使用)

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

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


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

Name: 管理人 [URL]  ..伝説のハッカー(571,487ポイント)   Date: 2008/05/05(月) 04:00   No:16193     
Title: Re:3節 画像を表示する    
Debugフォルダにちゃんと画像は入っていますか?
http://dixq.net/g/trouble.html
こちらを実行するとどう結果が表示されますか?


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

Name: 初めてのC  ..かけだし(1,462ポイント)   Date: 2008/05/05(月) 10:11   No:16196     
Title: Re:3節 画像を表示する    
回答ありがとうございます。
画像ですが背景もキャラもDebugフォルダに入れてました。

そちらを実行してみたところ下のようなエラーがでました。これはやり方が間違ってるのでしょうか^^;


> C:\borland\bcc55\Bin\make.exe -fDebug\test.mak -B TARGET
MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
bcc32 -W -3 -Od -w- -AT -pc -H- -k -b -v -y -DDEBUG -nDebug -c "C:\Documents and Settings\c_language\test\test\dousa.c"
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
C:\Documents and Settings\c_language\test\test\dousa.c:
エラー E2141 C:\Documents and Settings\c_language\test\test\DxDirectX.h 894: 宣言の構文エラー
エラー E2141 C:\Documents and Settings\c_language\test\test\DxDirectX.h 908: 宣言の構文エラー
エラー E2141 C:\Documents and Settings\c_language\test\test\DxDirectX.h 914: 宣言の構文エラー
エラー E2141 C:\Documents and Settings\c_language\test\test\DxDirectX.h 937: 宣言の構文エラー
エラー E2141 C:\Documents and Settings\c_language\test\test\DxDirectX.h 945: 宣言の構文エラー
エラー E2141 C:\Documents and Settings\c_language\test\test\DxDirectX.h 1027: 宣言の構文エラー
エラー E2141 C:\Documents and Settings\c_language\test\test\DxDirectX.h 1041: 宣言の構文エラー
エラー E2141 C:\Documents and Settings\c_language\test\test\DxDirectX.h 1047: 宣言の構文エラー
エラー E2141 C:\Documents and Settings\c_language\test\test\DxDirectX.h 1057: 宣言の構文エラー
エラー E2141 C:\Documents and Settings\c_language\test\test\DxDirectX.h 1085: 宣言の構文エラー
エラー E2141 C:\Documents and Settings\c_language\test\test\DxDirectX.h 1095: 宣言の構文エラー
エラー E2141 C:\Documents and Settings\c_language\test\test\DxDirectX.h 1109: 宣言の構文エラー
エラー E2141 C:\Documents and Settings\c_language\test\test\DxDirectX.h 1117: 宣言の構文エラー
エラー E2141 C:\Documents and Settings\c_language\test\test\DxDirectX.h 1163: 宣言の構文エラー
エラー E2139 C:\Documents and Settings\c_language\test\test\DxDirectX.h 1507: 宣言に ; がない
エラー E2139 C:\Documents and Settings\c_language\test\test\DxDirectX.h 1513: 宣言に ; がない
エラー E2238 C:\Documents and Settings\c_language\test\test\DxDirectX.h 1514: 'class' の宣言が複数見つかった
エラー E2344 C:\Documents and Settings\c_language\test\test\DxDirectX.h 1507: 一つ前の 'class' の定義位置
エラー E2139 C:\Documents and Settings\c_language\test\test\DxDirectX.h 1522: 宣言に ; がない
エラー E2238 C:\Documents and Settings\c_language\test\test\DxDirectX.h 1523: 'class' の宣言が複数見つかった
エラー E2344 C:\Documents and Settings\c_language\test\test\DxDirectX.h 1507: 一つ前の 'class' の定義位置
エラー E2139 C:\Documents and Settings\c_language\test\test\DxDirectX.h 1528: 宣言に ; がない
エラー E2238 C:\Documents and Settings\c_language\test\test\DxDirectX.h 1529: 'class' の宣言が複数見つかった
エラー E2344 C:\Documents and Settings\c_language\test\test\DxDirectX.h 1507: 一つ前の 'class' の定義位置
エラー E2139 C:\Documents and Settings\c_language\test\test\DxDirectX.h 1535: 宣言に ; がない
エラー E2228 C:\Documents and Settings\c_language\test\test\DxDirectX.h 1535: エラーあるいは警告が多すぎる
*** 26 errors in Compile ***

** error 1 ** deleting Debug\dousa.obj

Make End !! (Elapsed time 0:00.390)


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

Name: 初めてのC  ..かけだし(1,480ポイント)   Date: 2008/05/05(月) 14:04   No:16197 解決!     
Title: Re:3節 画像を表示する    
なんとか自己解決できました。アドバイスくださった管理人様ありがとうございました。

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



Name: 迷える羊  ..かけだし(2,482ポイント)   Date: 2008/05/05(月) 00:59   No:16190       
Title: 深度についての質問    
二枚の画像を重ねると必ずどちらかの画像が上にくるかと思います。このときどのようにして上にくる判定をしているのかが分かりません。

DrawGraph(420,0,img_suu[0] , TRUE );
DrawGraph(420,0,img_background[1],FALSE);

img_suu[0]には数字の画像が入っています。img_background[1]には背景画像が入ってます。背景の上に数字を表示したいのですが、どうしても下に表示されてしまいます。どのようにプログラムを書けばよろしいのでしょうか?


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


Name: Justy  ..ハッカー(190,926ポイント)   Date: 2008/05/05(月) 01:23   No:16191     
Title: Re:深度についての質問    
 基本的に書いた順に描画されますので描画順を「数字 -> 背景」じゃなくて
「背景 -> 数字」にすればいいんじゃないですかね?


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

Name: 迷える羊  ..入門者(2,514ポイント)   Date: 2008/05/05(月) 09:57   No:16195 解決!     
Title: Re:深度についての質問    
なるほど〜!”書いた順”に描画されるのですか!
ありがとうございます^^試してみます。


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



Name: 迷える羊  ..かけだし(2,347ポイント)   Date: 2008/05/04(日) 00:55   No:16161       
Title: 弾の発射について    
私が困っているのは、シューティングゲームの館での20章の”色々試してテストしよう。”のcaseにより、敵をたくさん出現させて弾を撃たせるところで、敵が撃った弾が一つでも自分の決めた範囲を越えると、次の新しい敵が撃った弾は音のみで表示されなくなります。

例えば
case 200:   //このときの敵の弾は音もあり弾の画像も表示される
case 300:   //このときの敵の弾が決められている範囲を越える、状態はcase 200に同じ
case 400:   //このときの敵の弾は音のみで弾の画像が表示されない

この場合範囲をいくら大きくしてもいずれ弾は範囲に到達してしまいます。そこで範囲を大きくせずに何度もcaseによって敵が弾を発射可能な方法はありませんでしょうか?(>_<")
自分では敵の弾発射パターンをたくさん作り、敵の数に比例して行数が増える(一つのパターンにcaseを一つしか使用しない)非常に非効率的な方法しか考えつきませんでしたので質問させていただきました。


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


Name: nayo  ..かけだし(2,105ポイント)   Date: 2008/05/04(日) 02:04   No:16162     
Title: Re:弾の発射について    
もしシューティングゲームの館通りでしたら
その敵の撃つ弾のEnemyShotPattern関数で弾の初期座標の設定はどうなっているのでしょうか


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

Name: 迷える羊  ..入門者(2,533ポイント)   Date: 2008/05/04(日) 02:46   No:16165     
Title: Re:弾の発射について    
まずEnemyPattern関数で以下を指定し

EnemyShot[j].mem_ex=enemy[i].x;
EnemyShot[j].mem_ey=enemy[i].y;

次にEnemyShotPattern関数で敵の座標を弾の初期座標に指定しているみたいです。

EnemyShot[i].EnemyShots[0].x=EnemyShot[i].mem_ex;
EnemyShot[i].EnemyShots[0].y=EnemyShot[i].mem_ey;


>>>次の新しい敵が撃った弾は音のみで表示されなくなります。

と、ありますが少し説明不足でした。正確には敵が弾を撃った瞬間に、弾が敵の初期座標から発射されていることは確認できます。 しかし自機を狙ってくるかと思いきや、1秒かからないうちに消えます。サウンドが鳴っているので弾の画像だけが表示されなくなるというのはよく分かりません><

ここが悪いのでしょうか?
void EnemyShotControl(){//ショットパターン1を呼ぶための関数enemy.cppのEnemyControl関数と役目一緒
int i;
for(i=0;i<ENEMY_TOTAL_NUM;i++){//敵の最大数100体だけループ
if(EnemyShot[i].flag==1){//ショットしている玉があれば
if(EnemyShot[i].pattern==1)//しかもそれがショットパターン1ならば
EnemyShotPattern1(i);//ショットパターン1へ
if(EnemyShot[i].pattern==3)//しかもそれがショットパターン3ならば
EnemyShotPattern3(i);//ショットパターン3へ

}
}
}

-----------------------------------------------------------------------------------
if(EnemyShot[i].pattern==3)//しかもそれがショットパターン3ならば
EnemyShotPattern3(i);//ショットパターン3へ
を消したときは弾はしっかり表示されました。消さなかったときは弾は表示できなくなります。
以上のソースは別々に書く必要があるということでしょうか?

pattern1には17節の敵に弾を発射させる。(概念説明)、pattern3には24節の時間差ショット。を使わせてもらってます。pattern1はpattern3を書かなければ正常に動作します。しかし書いてしまうと画像が表示されなくなります。pattern3のみ書いた場合も範囲を越えると画像が表示されなくなります。


以上のことから連続で敵が弾を撃つことができないということが分かりました。24節の時間差ショットのように
for(int j=0;j<10;j++)のような連続で10回弾を撃つfor文を使用すると正常に動作しなくなります。


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

Name: nayo  ..入門者(2,501ポイント)   Date: 2008/05/04(日) 11:41   No:16168     
Title: Re:弾の発射について    
EnemyPattern1関数の
if(enemy[i].counter==75)の部分を
if(enemy[i].counter%75==0)などとしてShotPattern1だけ設定するとどうなるのでしょうか

弾が見えないということは弾のフラグが0になったか画面外に描画しているかのどちらかと思うのですが…
pattern3に原因が見当たらないのでしたら、
弾のフラグ、座標に関係ある部分に絞って見てみるといいかもしれません

それと少し引っかかっていたのですが"自分の決めた範囲"というのは
EnemyShotCalcDisp関数の"弾が画面より外にあるときは発射フラグを戻す"という部分でしょうか



こちらはあまり関係ないですがEnemyControl関数で
if(EnemyShot[i].pattern==3)を
else if(EnemyShot[i].pattern==3)
とelseを追加した方がいいかも、です

また、今は考えなくてもいいですが関数のポインタを利用するとすっきりしますので参考程度に


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

Name: 迷える羊  ..入門者(2,535ポイント)   Date: 2008/05/05(月) 00:54   No:16188 解決!     
Title: Re:弾の発射について    
いろいろと試行錯誤を行った結果なんとか正常に動作させることができました^^
解決方法とアドバイスをありがとうございました。


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



Name: ハーブ  ..ぴよぴよ(51ポイント)   Date: 2008/05/04(日) 00:53   No:16160       
Title: 無題    
LoadGraphScreenでマップを表示すると、動作が重くなるから、
for文で敷き詰めることにしたんですがやり方が分からないので誰かおしえてくれませんか?
VC++です。


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


Name: 管理人 [URL]  ..伝説のハッカー(570,281ポイント)   Date: 2008/05/04(日) 02:30   No:16163     
Title: Re:無題    
すみません、質問の意図をもう少し詳細に書いていただいたほうがいいかもしれません。

LoadGraphScreen関数とfor文がどのように関係するのでしょうか。

もしLoadGraphScreenをいちいち使うのがいやでしたら、一旦メモリに読み込んでから描画する方法をとられてはいかがでしょうか。


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

Name: ハーブ  ..ぴよぴよ(76ポイント)   Date: 2008/05/04(日) 23:07   No:16186 解決!     
Title: Re:無題    
メモリに読み込んでから描画したら、重くなりませんでした。
回答ありがとうございました。


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



Name: Co  ..ぴよぴよ(67ポイント)   Date: 2008/05/03(土) 12:05   No:16135       
Title: シューティングの館 21章について    
Shotpattern11まではきちんと動くのですが、pattern12に入ると必ず
atan2: DOMAIN error
というエラーがでて止まってしまいます。
どういうときに上のエラーがでるのかは、調べてなんとなく分かったのですが
他のshotpatternでも使われているのになぜ12に入ったときにだけと分からなくて・・・

ソースは21章のものをコピペでそのまま使っております。


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


Name: Justy  ..ハッカー(190,684ポイント)   Date: 2008/05/03(土) 15:13   No:16140     
Title: Re:シューティングの館 21章について    
>他のshotpatternでも使われているのになぜ12に入ったときにだけと分からなくて・
 21章を見てみました。
 なるほど、たしかに言われてみるとエラーになりそうな感じがしますね。
 
 多分前のフレームでの弾の位置とそのフレームでの弾の位置が一致する瞬間があり、
進行方向の角度を求めようとそれぞれ x-old_x[j]や y-old_y[j]で
移動ベクトルを出したところ、xと yの両方とも0になってしまい、
それをそのまま atan2に与えたため、内部で定義域エラー(DOMAIN Error)に
なったものと推察されます。

 atan2で定義域エラーが出るかどうかは環境次第なので、Coさんの環境では
そのエラーになったと思われます。

 他のパターンではプレイヤーの位置や弾の放出を開始した時点での敵の位置から
角度を出そうとしており、その構成上双方の座標が重なることがなかったので
発生しなかったのでしょう。

(見た感じパターン13も前のフレームから角度を出そうとしているので
同じエラーが起きるかもしれません)


 とりあえず、双方が同じ座標だったら、角度は前と同じと見なすという
処理を入れれば回避できるかと。


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

Name: Co  ..ぴよぴよ(97ポイント)   Date: 2008/05/04(日) 03:49   No:16166 解決!     
Title: Re:シューティングの館 21章について    
無事動きました!
Justyさんどうもありがとうございました〜


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

Name: 管理人 [URL]  ..伝説のハッカー(571,205ポイント)   Date: 2008/05/04(日) 20:11   No:16180     
Title: Re:シューティングの館 21章について    
>atan2で定義域エラーが出るかどうかは環境次第なので、Coさんの環境ではそのエラーになったと思われます。

そうだったのですか。すみませんでした。
私の本にはatan2はエラーが定義されていない・・と書いてあるのですが、
どこかのサイトにそのエラーについての記述は無いでしょうか?


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

Name: Justy  ..ハッカー(190,861ポイント)   Date: 2008/05/04(日) 20:43   No:16182     
Title: Re:シューティングの館 21章について    
>私の本にはatan2はエラーが定義されていない・・と書いてあるのですが、
>どこかのサイトにそのエラーについての記述は無いでしょうか?

 たしかにあんまりそういう記述がある本とかサイトは見かけませんね。
 無くはないんですが。

ttp://takagi.in/modules/bwiki/index.php?%A1%E3cmath%A1%E4%A5%D8%A5%C3%A5%C0#atan2
ttp://www.bohyoh.com/CandCPP/C/Library/atan2.html



 あと他には、規格書の方にも書いてあります。


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

Name: 管理人 [URL]  ..伝説のハッカー(571,444ポイント)   Date: 2008/05/04(日) 21:31   No:16183     
Title: Re:シューティングの館 21章について    
Manpageの方は見ていたのですが、bohyohの方は見ていませんでした。
規格書は持っていたほうがよさそうですね。
ありがとうございました。


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



Name: megmilk  ..ぴよぴよ(792ポイント)   Date: 2008/05/04(日) 16:05   No:16172       
Title: 色管理クラス    
はじめましてmegmilkといいます

VisualC++2008EE と DXライブラリを使いRPGを作っているのですがその中の色の管理について質問です

今まで構造体を使い
ヘッダファイルにて
typedef struct{
int White;
int Black;
}g;

g Color;

と構造体をつくっておいて

ロード関数
void load(void){
Color.White = GetColor(255, 255 , 255);
Color.Black = GetColor(0 , 0 , 0);
}
としてから

DrawFormatString( 0 , 0 , Color.White ...

といった感じで問題なく使用できていたのですが

せっかくC++を使っているのでオブジェクト指向を意識して構造体ではなくクラスを使って色を管理しようと思いました。(色管理用のヘッダファイルさえうつしてしまえば違うプログラムでも同じように色を使用できるようにしたかったため)

そこで

color.h

class color_class{
public:
int White;
int Black;

color_class(){
White = GetColor( 255 , 255 , 255);
Black = GetColor( 0 , 0 , 0);
}
};

#ifdef __COLOR_H__

color_class Color;

#else

extern color_class Color;

#endif

というヘッダファイルを各cppファイルでincludeして
DrawFormatString( 0 , 0 , Color.White ...

と使用してみたところコンパイルは問題なくできるのですが色が黒のままでした。
ためしに
DrawFormatString( 200 , 200 , GetColor( 255 , 255 , 255) , "色%d" , Color.White);
という一文をいれてみたところ
色0
と表示されました。
これはColor.WhiteにGetColorの数値が入っていないということでしょうか?
まだクラスについて勉強しはじめたばかりなのですがcolor_classになにか致命的なミスがあるのでしょうか?
ご教授ねがいます。


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


Name: Justy  ..ハッカー(190,722ポイント)   Date: 2008/05/04(日) 16:40   No:16174     
Title: Re:色管理クラス    
>これはColor.WhiteにGetColorの数値が入っていないということでしょうか?
>color_classになにか致命的なミスがあるのでしょうか

 color_classクラス自体にはさほど問題はありませんが、
多分それをインスタンス化するタイミングに問題があるのではないでしょうか。

 DXライブラリの関数は大半が DxLib_Init()を使ってライブラリを
初期化した後にしか使えません。
 GetColor()も然り。

 従って、今の実装ですと color_classクラスのコンストラクタが呼ばれるより前に
DxLib_Init()を呼ばなければなりません。


 グローバル変数での運用を考えるなら、その color_classクラスのコンストラクタの中で
DxLib_Init()してからメンバ変数に値を設定するか、或いは color_classクラスに
メンバ変数の初期化メソッドを用意して DxLib_Init()の後にその初期化メソッドを
使って値を設定しないとダメなのではないかと。


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

Name: megmilk  ..ぴよぴよ(880ポイント)   Date: 2008/05/04(日) 19:59   No:16179 解決!     
Title: Re:色管理クラス    
color_classクラスに
メンバ変数の初期化メソッドを用意

void Init(void);

を作って違う場所で初期化したところうまいこと行きました。
ありがとうございました。


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



Name: ルファー  ..入門者(4,004ポイント)   Date: 2008/05/01(木) 22:52   No:16114       
Title: 標準入力をフラッシュ    
こんばんは。いつかここで質問したルファーです。
今度はコンソールプログラムの質問です。

以下のコードを実行するとどうなりますか?

fflush(stdin); /* つまり標準入力をフラッシュする */


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


Name: YuO  ..上級者(20,235ポイント)   Date: 2008/05/02(金) 00:21   No:16115     
Title: Re:標準入力をフラッシュ    
fflushは「出力ストリームのバッファを書き出す」関数です。
入力ストリームに対して適用した場合は,未定義動作となります。
# というか未定義動作の例とされる典型です。


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

Name: Ban  ..ぴよぴよ(356ポイント)   Date: 2008/05/02(金) 02:05   No:16116     
Title: Re:標準入力をフラッシュ    
言語仕様としては、既にご指摘の通り、未定義動作。
何がおきても保証されません。
エラーかもしれないし、予期せぬ動きかもしれないし、
一見正常に動くかもしれないし、プログラムが落ちるかもしれないし…
どうなるか分からない、書いてはいけないコードです。

その上で、もしもVCを使っているならば、
入力バッファがクリアされることになります。
# 特定の環境で、一見正常に動作してもかまわないので、
# VCは特殊。他のコンパイラではおかしくなる可能性大。


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

Name: ルファー  ..入門者(4,078ポイント)   Date: 2008/05/03(土) 12:24   No:16136     
Title: Re:標準入力をフラッシュ    
なるほどー。

今標準ライブラリ関数だけでツールを作ってるんですが、
「指定された文字を受け取るまでループ」するところでgetchar()を使うと、
「指定されていない文字」を受け取った時の動作が変になります。
どうすればいいですか?


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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(71,810ポイント)   Date: 2008/05/03(土) 15:03   No:16137     
Title: Re:標準入力をフラッシュ    
scanfのスキャン何とか(名前忘れました)とか言うのを使えばいいはずです。

char str[101]={0};
scanf("%100[^\n]%*c",str);/*改行文字のところに読み込みを終了する文字を入れる(複数指定可能)*/

こんな感じで。


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

Name: バグ  ..比類無きプログラマー(85,336ポイント)   Date: 2008/05/03(土) 15:08   No:16138     
Title: Re:標準入力をフラッシュ    
環境がWindowsに限定されるので趣旨から外れてしまいますが…

kbhit関数が使えるかもしれません。


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

Name: ルファー  ..入門者(4,119ポイント)   Date: 2008/05/04(日) 14:43   No:16169     
Title: Re:標準入力をフラッシュ    
返信遅れました。
scanf("%100[^\n]%*c",str)の100は何の意味があるんですか?


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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(72,067ポイント)   Date: 2008/05/04(日) 15:52   No:16171     
Title: Re:標準入力をフラッシュ    
101バイトしか文字配列を用意していないので、入力を100文字(ASCIIで)に限定するという意味です。

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

Name: ルファー  ..入門者(4,196ポイント)   Date: 2008/05/04(日) 19:17   No:16176 解決!     
Title: Re:標準入力をフラッシュ    
ありがとうございます。

コマンドプロンプトは例外が無ければ横幅は皆80文字だから79文字までならgetchar()のようなバグが起こらないように調整しました。


よく考えたら「文字列」ではなく「文字」で分岐するのでfgets(str, 100, stdin)でも大丈夫かなと思ってやっていたらOKでした・・・。


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



Name: SONY  ..入門者(3,455ポイント)   Date: 2008/05/03(土) 11:21   No:16134       
Title: 縦スクロールについて    
今、縦スクロールのシューティングゲームを作ろうとしています。420×960ピクセルの背景を縦にスクロールさせるにはどうしたらよいのでしょうか。御教授願います。

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


Name: tkmakwins15 [URL]  ..比類無きプログラマー(72,043ポイント)   Date: 2008/05/03(土) 19:32   No:16151     
Title: Re:縦スクロールについて    
背景の描画のy座標を、ループN回(Nは自分で決定する)ごとにインクリメントorデクリメントすると言う方法があります。上に進んでいくならばインクリメント、逆ならばデクリメント(この場合の「進む」はゲームの進行方向です。背景の進行方向は逆方向になります)

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

Name: SONY  ..入門者(3,509ポイント)   Date: 2008/05/03(土) 20:55   No:16157     
Title: Re:縦スクロールについて    
アドバイスありがとうございます。これを元にいろいろと試してみましたが、残念ながらうまくいきませんでした。何か別な角度からのアプローチはないでしょうか?

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

Name: bodomcross  ..ぴよぴよ(386ポイント)   Date: 2008/05/03(土) 22:18   No:16158     
Title: Re:縦スクロールについて    
tkmakwins15 と一緒なのですが、少し詳しく説明します

背景の一枚画像をx座標=0 y座標=-960でとりあえず描画しておき、
毎回背景表示する処理の時に、y座標をインクリメント(y++)していくとうまくいきますよ。



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

Name: 管理人 [URL]  ..伝説のハッカー(570,703ポイント)   Date: 2008/05/04(日) 02:34   No:16164     
Title: Re:縦スクロールについて    
例えば画像サイズのたてが1000なら現在のy座標とy-1000の座標に2回描画してやり、
描画先の座標をドンドン下に下げてやれば良いです。
その際無駄な描画をしないように描画可能領域を設定してから行って下さい。


描画可能領域を任意に指定してから

DrawGraph(0,y-1000,...);

DrawGraph(0,y,...);

y=(++y%1000);

みたいな感じですね。ちなみに、絵の一番下と上は継ぎ目の無いようにして下さい。


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

Name: SONY  ..入門者(3,556ポイント)   Date: 2008/05/04(日) 10:40   No:16167 解決!     
Title: Re:縦スクロールについて    
今までアドバイスをしてくださった皆様、ありがとうございました!うまくいきました!
これからも勉強を続けていきますので、再び行き詰ったときもよろしくお願いします!


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



Name: fffff  ..入門者(4,517ポイント)   Date: 2008/05/02(金) 21:13   No:16127       
Title: 実数型と整数型の違いについて    
 プログラムの宣言で int や char といったものは『整数型』で、
 double 等は『実数型』と仕分けされてますよね。

 この『整数型と実数型にどういった違いがあるのか』がうまく理解できずに、困っています。
 皆さんはどのような目的のときに char (もしくは int )、または double という風に使い分けているのでしょうか?
 

 変数の宣言という、根本的な箇所の疑問だったので、もっと早くに聞こう調べようとは思っていたものの、
 結局、色んなサイトを見てもよく理解できず……。
 C言語に慣れている先輩方のお知恵を拝借したいと思い、こちらに記事を投稿してみました。


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


Name: J  ..かけだし(2,298ポイント)   Date: 2008/05/02(金) 22:03   No:16129     
Title: Re:実数型と整数型の違いについて    
えーと、完璧にあってるかどうかは自信はないですが、
整数(int)は-327や85462などの少数点の無い数、実数(double)は-0.328679や223.5693などの小数点の有る数に使います。

それと、charは文字を入れる変数で、整数型ではないと思います。


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

Name: 通りすがり  ..初心者(8,197ポイント)   Date: 2008/05/02(金) 22:16   No:16130     
Title: Re:実数型と整数型の違いについて    
>Jさん

char型は、int型などよりせまい範囲の
整数を格納するための型です。

文字コードの値の集合は、
char型の集合の部分集合です。

仮に、char型が文字格納限定型だとすると、
負の値をとりうることの説明がつかないです。


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

Name: はね  ..初心者(7,016ポイント)   Date: 2008/05/03(土) 00:17   No:16131     
Title: Re:実数型と整数型の違いについて    
int型のような整数はフラグ等の厳密な数字(語弊があるかもしれません)を必要としない処理の時に使用し、
double型のような実数は小数点以下も必要な厳密な処理をさせたい時に使用する。
char型は文字に使用する。

くらいの認識でいいのではないでしょうか?

バリバリプログラムができる人に言うと殴られそうですが、私はこの程度の認識で使用しています。


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

Name: たかぎ [URL]  ..プログラマー(37,523ポイント)   Date: 2008/05/03(土) 00:55   No:16133     
Title: Re:実数型と整数型の違いについて    
> プログラムの宣言で int や char といったものは『整数型』で、
> double 等は『実数型』と仕分けされてますよね。

いいえ。
「実数型」というのは、「虚数型」(普通は複素数型)に対しての実数型です。
doubleなどを「整数型」と区別する場合は、「浮動小数点型」といいます。
なお、「浮動小数点型」には「複素数型」も含まれるので、float, double, long doubleのような実数を表す浮動小数点型のことは、「実浮動小数点型」といいます。

まあ、おそらくこんな厳密な話を聞きたいわけではないでしょうが...



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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(71,982ポイント)   Date: 2008/05/03(土) 15:10   No:16139     
Title: Re:実数型と整数型の違いについて    
char型は整数型ですが、整数型として使用するには向いてないです。

できれば同じ1byteでもsigned char やunsigned charを使ったほうがいいです。(単なるcharはいつも符号付きではなく、符号の有無は環境依存なので…)


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

Name: J  ..かけだし(2,351ポイント)   Date: 2008/05/03(土) 22:37   No:16159     
Title: Re:実数型と整数型の違いについて    
通りすがりさん、間違いのご指摘、ありがとうございました。
確かに、文字型も数値の集まりでしたね。気がつきませんでした。


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



Name: tiku  ..ぴよぴよ(45ポイント)   Date: 2008/04/28(月) 23:18   No:16003       
Title: 無題    
以前はファイルをいただき、大変助かっております、ありがとうございます。

さて、今回、龍神録のほうのアルゴリズムを解析し、ゲーム作成の助力とさせていただいているのですが、
どうも、気になる点がありました。

敵キャラが爆発するとき、星型の魔法陣を拡大して だんだん透過した後 画面から消えてるように見えるのですが、どうもDXライブラリ側の関数探しても 徐々に透過させるという技術が見当たらないんですよね。
(マスクも関係なさそうみたいですし…)

もし、よろしければ、徐々に透過する処理の方法を教えていただけないでしょうか?


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


Name: 管理人 [URL]  ..伝説のハッカー(570,023ポイント)   Date: 2008/04/29(火) 00:20   No:16004     
Title: Re:無題    
αブレンドがしたいのではないかと思います。

http://dixq.net/g/#38

ここをお読みになり、もう一つしたの節のサンプルを実行してみて、結果を確認してみて下さい。
スーッと透けていく、表れていくように表現できると思います。



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

Name: tiku  ..ぴよぴよ(101ポイント)   Date: 2008/04/29(火) 01:16   No:16006 解決!     
Title: タイトル忘れていました…    
ゲームプログラミングの館に行ってませんでした。すいません…

問題のほう解決しました。ありがとうございます。
もっと学んできますね…


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

Name: 管理人 [URL]  ..伝説のハッカー(569,979ポイント)   Date: 2008/04/29(火) 01:23   No:16007     
Title: Re:タイトル忘れていました…    
いえいえ、館はぐちゃぐちゃしてわかりにくいと思いますし、
期待する内容を探しにくいと思います。
お気軽にお聞き下さい。

館でCtrl+Fで何かキーワードを引っ掛けてみると見つけ易いかもしれません。


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

Name: tiku  ..ぴよぴよ(58ポイント)   Date: 2008/04/29(火) 14:23   No:16011     
Title: Re:    
うう、ありがとうございます…

何かあって、調べてもでてこなかったら、質問させていただきます。


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

Name: tiku  ..ぴよぴよ(0ポイント)   Date: 2008/05/02(金) 13:26   No:16124     
Title: Re:    
たびたびの質問、すいません…

龍神録にてボスキャラがやられた時に、爆発音と同時に画面が揺れますよね
あの揺れはどのように表現しているのでしょうか?
DX側で裏描画したものを読み込むプログラムも見当たらないもので…


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

Name: 管理人  ..伝説のハッカー(570,141ポイント)   Date: 2008/05/02(金) 18:42   No:16126     
Title: Re:無題    
携帯で書いているので綺麗にかけませんが、描画関係の関数は全てdx+○○、dy+○○と書いています。○○は弾座標であったり背景であったり、自機であったり任意の座標です。dx、dyは普段は常に0です。ドガーンと画面を揺らせたいときはGETRAND(20)-10とかを代入してランダムな座標をいれます。すると揺れて見えるという感じです。私は画面サイズ通りにしか背景を描いていないので正確にはこの方法では一瞬画面端が途切れてしまいますが、全然わからないので、これでいいかと思ってこれでやってます。まぁこれでやれという決まりもないですし、試行錯誤でやってみてそれっぽくなったら採用していけばいいのではないでしょうかw ちなみにdxと言うのはドガーンx座標の頭文字を取ったというショウモナイ名前なのでもう少しいい名前をつけてあげたらいいかもしれません。

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

Name: tiku  ..ぴよぴよ(115ポイント)   Date: 2008/05/03(土) 00:35   No:16132 解決!     
Title: Re:無題    
解説ありがとーございます、携帯からこんなに書けるなんてすごいですw

爆発の方は、もう少し試行錯誤して考えてみます。
どうせ、見栄えさえよくなれば、あまり気にするものでもなさそうなので、いい案がなければ、解説していただいた通りの方法で作成してみます。ゲームは見栄えが重要ですからねぇ…

どかーん… かっこいい名前ならexplosionからexにしてみようかなぁ…


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



Name: SONY  ..ぴよぴよ(647ポイント)   Date: 2008/04/29(火) 16:54   No:16012       
Title: シューティングの館 18    
たびたびすみません。今度はシューティングの館 18の敵に弾を発射させるで悩んでいます。
プログラムをまねて実行したところエラーにより強制終了させられてしまいます。
コンパイル時にエラーは表示されません。どうしたらよいのかアドバイスお願いします。
使用している開発環境はBCC Developerを使っています。


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


Name: 通りすがり  ..初心者(8,136ポイント)   Date: 2008/04/29(火) 21:54   No:16017     
Title: Re:シューティングの館 18    
質問する姿勢として回答者がその文章で把握出来るかどうか考慮するようにしましょう。

それだけの情報では全くわかりません。コードはそっくり一緒なのでしょうか?
異なっている部分があるならそこが原因でしょう。
その異なっている部分は私達には全くわかりません。

医者に行って何も話さず「腹が痛いんですが、何故でしょう」とだけ聞いても医者は何もわからないであろうことと同じように、詳しく話さないとこちらにはわからないです。


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

Name: SONY  ..かけだし(1,429ポイント)   Date: 2008/04/30(水) 21:44   No:16062     
Title: Re:シューティングの館 18<メイン関数>    
どうもすみません。基本的にコード自体は変数名や関数名が違うだけです。とりあえずコードを書いておきます。明らかに問題なさそうなところは省きました。現在は、エラーは直せましたが、敵の弾が発射されません。誰かアドバイスよろしくお願いします。コメントが長すぎるためいくつかに分けます。
<メイン関数(ウィンメイン部は省略)>
#include "Ex.h"

/*グローバル変数ども*/
int counter = 0;
int color_white;
int Lv = 11; //弾レベル
char Key[256];
/*画像ファイルハンドル*/
int img_background[2]; //背景用
int img_player[4]; //プレイヤー画像用
int img_player_shot[2]; //弾
int img_enemy_shot[20];
int img_enemy1[5]; //敵
int sound_player_shot[2];//音声ファイルハンドル
int sound_enemy_shot[2];//敵の弾の音声
MUSUKA_player_t Player;
SHOT_t PlayerShot[MAXSHOT1][MAXSHOT2];
TEKI enemy[TEKIMAX];
TEKITAMA1 enemyshots[ENEMAXSHOT];
TEKITAMAKUMI enemyshot[TEKIMAX];


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

Name: SONY  ..かけだし(1,626ポイント)   Date: 2008/04/30(水) 21:45   No:16063     
Title: Re:シューティングの館 18<座標等初期化>    
<座標等初期化>
#include"Ex.h"

void syokika(){
int i;
Player.x = 200.0;
Player.y = 400.0;
Player.counter = 0;
Player.status = 0;
for(i=0;i<MAXSHOT1;i++)
for(int j = 0;j<MAXSHOT2;j++)
PlayerShot[i][j].flag = 0;
for(i=0;i<TEKIMAX;i++){
enemy[i].flag = 0;
enemyshot[i].flag = 0;
for(int j=0;j<ENEMAXSHOT;j++){
enemyshot[i].enemyshots[j].flag = 0;
}
}
}


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

Name: SONY  ..かけだし(2,364ポイント)   Date: 2008/04/30(水) 21:46   No:16064     
Title: Re:シューティングの館 18<ヘッダファイル>    
<ヘッダファイル>
#include"DxLib.h"
#include<math.h>
#define MAXSHOT1 11
#define MAXSHOT2 15
#define TEKIMAX 100
#define TEKISIZEX 140.0
#define TEKISIZEY 128.0
#define PAI 3.141592653589793238462643383279
#define PATASPI 4.0f
#define ENEMAXSHOT 200

/*グローバル変数ども*/
extern int counter;
extern int color_white;
extern int Lv; //弾レベル
extern char Key[];
/*画像ファイルハンドル*/
extern int img_background[]; //背景用
extern int img_player[]; //プレイヤー画像用
extern int img_player_shot[]; //弾
extern int img_enemy_shot[]; //敵弾
extern int img_enemy1[]; //敵
extern int sound_player_shot[];//音声ファイルハンドル
extern int sound_enemy_shot[];

/*構造体(自キャラ)*/
typedef struct{
double x;
double y;
int status;
int counter;
int shot[11][15];
}MUSUKA_player_t;
extern MUSUKA_player_t Player;

//敵
typedef struct{
double x;
double y;
double size;
//double range;
int flag;
int counter;
int hp;
int pattern;
}TEKI;
extern TEKI enemy[TEKIMAX];

//弾
typedef struct{
double x;
double y;
int flag;//発射判定フラグ
}SHOT_t;
extern SHOT_t PlayerShot[MAXSHOT1][MAXSHOT2];

//敵弾単体
typedef struct{
int flag;
double x;
double y;
}TEKITAMA1;
extern TEKITAMA1 enemyshots[ENEMAXSHOT];
//敵弾組
typedef struct{
int flag;
int pattern;
int counter;
int img;
double mem_ex;
double mem_ey;
double mem_px;
double mem_py;
double angle[ENEMAXSHOT];//200
TEKITAMA1 enemyshots[ENEMAXSHOT];//200
}TEKITAMAKUMI;
extern TEKITAMAKUMI enemyshot[TEKIMAX];//100

void img_sound_load(); //画像ロード
void syokika(); //初期化
void SetColor(); //色取得
void Background(); //背景描画
void tamakeisan(); //弾計算
void tamabyouga(); //弾描画
void PlayerControl();//プレイヤー描画
void enemycontrol(); //敵移動パターンを呼び出す関数
void enemybyouga(); //敵描画
void Background2(); //得点盤描画
void fpstime(); //fps描画
void enemyscontrol();
void ttt();


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

Name: SONY  ..かけだし(2,186ポイント)   Date: 2008/04/30(水) 21:48   No:16065     
Title: Re:シューティングの館 18<敵パターン関数>    
<敵パターン関数>
#include"Ex.h"

//敵移動パターン1
/*
void enemypattern1(int i){
enemy[i].y += 1.5f;
}
*/
//敵移動パターン2
void enemypattern2(int i){
int j;
if(enemy[i].counter < 50)
enemy[i].y += 4.0f;
if(enemy[i].counter == 75){
for(j=0;j<TEKIMAX;j++){
if(enemyshot[j].flag == 0) break;
enemyshot[j].mem_ex = enemy[i].x;//敵の座標
enemyshot[j].mem_ey = enemy[i].y;//同上
enemyshot[j].mem_px = Player.x; //プレイヤー座標
enemyshot[j].mem_py = Player.y; //同上
enemyshot[j].counter = 0;//カウンター初期化
enemyshot[j].flag = 1;//発射フラグ
enemyshot[j].pattern = 1;//パターン
enemyshot[j].img = 0;
}
}

if(enemy[i].counter > 100)
enemy[i].y -= 4.0f;
}

//敵移動パターン3
/*
void enemypattern3(int i){
enemy[i].x += sin(PAI*(enemy[i].counter / 40.0f))*5.0f; //80カウントで1周期
enemy[i].y += 1.5f;
// enemy[i].x += cos(PAI*(enemy[i].counter / 40.0f))*5.0f;
}

//敵移動パターン4
void enemypattern4(int i){
if(enemy[i].counter < 100)
enemy[i].y += 2.5f;
if(enemy[i].counter >= 100){
enemy[i].x += sin(PAI*(enemy[i].counter - 100.0f)/80.0f)*5.0f; //カウンターを100引くと0になる
enemy[i].y += sin(PAI*(enemy[i].counter - 60.0f)/80.0f)*5.0f; //20引くと半周期進む
}
}
*/
//敵移動パターンを呼び出す関数
void enemycontrol(){
for(int i=0;i<100;i++){
if(enemy[i].flag == 1){ //出現フラグがたったら
//if(enemy[i].pattern == 1)
// enemypattern1(i); //パターン呼び出し
if(enemy[i].pattern == 2)
enemypattern2(i);
//if(enemy[i].pattern == 3)
// enemypattern3(i);
//if(enemy[i].pattern == 4)
// enemypattern4(i);
}
}
}

//敵描画
void enemybyouga(){
int i;
for(i=0;i<100;i++)
if(enemy[i].flag == 0) //出現フラグが立っていないならループ脱出
break;
switch(counter){
case 50:
enemy[i].pattern = 2; //どんな軌道か
enemy[i].flag = 1; //出現フラグを立てる
enemy[i].counter = 0; //出現して何カウントなのか測定するのを初期化
enemy[i].size = 0.5f; //大きさ
enemy[i].x = 100.0; //xの初期座標
enemy[i].y = -10.0; //yの初期座標
break;
/* case 200:
enemy[i].pattern = 2; //どんな軌道か
enemy[i].flag = 1; //出現フラグを立てる
enemy[i].counter = 0; //出現して何カウントなのか測定するのを初期化
enemy[i].size = 0.5f; //大きさ
enemy[i].x = 100.0; //xの初期座標
enemy[i].y = -10.0; //yの初期座標
break;
case 350:
enemy[i].pattern = 3;
enemy[i].flag = 1;
enemy[i].counter = 0;
enemy[i].size = 0.5f;
enemy[i].x = 200.0;
enemy[i].y = -10.0;
break;
case 500:
enemy[i].pattern = 4;
enemy[i].flag = 1;
enemy[i].counter = 0;
enemy[i].size = 1.0f;
enemy[i].x = 100.0;
enemy[i].y = -10.0;
break;

case 51:
counter = 0;
break;
*/
default:
break;
}

for(i=0;i<100;i++){
if(enemy[i].flag == 1){ //出現フラグが立っているなら
enemy[i].counter++; //カウンターを増やす
int enemy_img[8] = {0, 1, 2, 3, 4, 3, 2, 1}; //敵アニメーション
DrawRotaGraph( (int)enemy[i].x , (int)enemy[i].y , enemy[i].size , 0.0f , img_enemy1[enemy_img[counter%32/16]] , TRUE );

if(enemy[i].x<0.0-TEKISIZEX/2.0*enemy[i].size || enemy[i].x>420.0+TEKISIZEX/2.0*enemy[i].size || enemy[i].y<0.0-TEKISIZEY/2.0*enemy[i].size || enemy[i].y<0.0-TEKISIZEY/2.0*enemy[i].size)
enemy[i].flag=0;
}
}
}


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

Name: SONY  ..入門者(3,300ポイント)   Date: 2008/04/30(水) 21:49   No:16066     
Title: Re:シューティングの館 18<敵弾コントロール部>    
<敵弾コントロール部>
#include"Ex.h"

//敵攻撃パターン1
void enemyspattern1(int i){
if(enemyshot[i].counter == 0){
enemyshot[i].enemyshots[0].flag = 1; //1個の弾の発射フラグ
enemyshot[i].enemyshots[0].x = enemyshot[i].mem_ex; //初期座標代入(敵の座標x)
enemyshot[i].enemyshots[0].y = enemyshot[i].mem_ey; //同上(y)
enemyshot[i].angle[0] = atan2(enemyshot[i].mem_py-enemyshot[i].mem_ey, enemyshot[i].mem_px-enemyshot[i].mem_ex);//yとxを渡してラジアンを得る
PlaySoundMem(sound_enemy_shot[0], DX_PLAYTYPE_BACK); //敵弾発射音
}
enemyshot[i].enemyshots[0].x += PATASPI * cos(enemyshot[i].angle[0]);//斜辺*cosラジアン=xの距離
enemyshot[i].enemyshots[0].y += PATASPI * sin(enemyshot[i].angle[0]);//斜辺*sinラジアン=yの距離
}

//敵攻撃パターン呼び出し
void enemyscontrol(){
int i;
for(i=0;i<TEKIMAX;i++){//敵の最大数(100)ループ
if(enemyshot[i].flag == 1){//ショット中の弾があれば
if(enemyshot[i].pattern == 1)//攻撃パターン1ならば
enemyspattern1(i);//攻撃1呼び出し
}
}
}

//弾描画
void ttt(){
for(int i=0;i<TEKIMAX;i++){//敵の最大数ループ
if(enemyshot[i].flag == 1){//ショット中の弾の組があれば
enemyshot[i].counter++;//ショットカウントをアップ
for(int j=0;j<ENEMAXSHOT;j++){//全ての弾の数だけループ
if(enemyshot[i].enemyshots[j].flag == 1){//ショットしている弾の組で、実際にショットしているなら
//弾描画
DrawRotaGraph((int)enemyshot[i].enemyshots[j].x, (int)enemyshot[i].enemyshots[j].y, 1.0f, 0.0f, img_enemy_shot[enemyshot[i].img], TRUE);
//画面外に出たら発射フラグを戻す
if(enemyshot[i].enemyshots[j].x<-20.0 || enemyshot[i].enemyshots[j].x>440.0 || enemyshot[i].enemyshots[j].y<-20.0 || enemyshot[i].enemyshots[j].y>500)
enemyshot[i].flag = 0;
}
}
}
}
for(int i=0;i<TEKIMAX;i++){//敵最大数ループ
if(enemyshot[i].flag == 1){//敵のショット発射中
for(int j=0;j<ENEMAXSHOT;j++){//一組200個のループ
if(enemyshot[i].enemyshots[j].flag == 1){//1個でも発射なら終了
return;
}
}
enemyshot[i].flag = 0;//全部発射中でないなら発射フラグを戻す
}
}
}


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

Name: Mist  ..かけだし(1,563ポイント)   Date: 2008/05/01(木) 10:12   No:16087     
Title: Re:シューティングの館 18<敵弾コントロール部>    
質問する前に規約ぐらいしっかり読みましょう。
ソースはpreタグで囲んでください。


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

Name: mat  ..ぴよぴよ(14ポイント)   Date: 2008/05/01(木) 10:56   No:16089     
Title: Re:シューティングの館 18<敵弾コントロール部>    
これでは読む気にならないですよ。もう少し見やすい投稿をお願いします。

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

Name: 管理人 [URL]  ..伝説のハッカー(570,599ポイント)   Date: 2008/05/01(木) 10:59   No:16090     
Title: Re:シューティングの館 18<敵弾コントロール部>    
こんにちは。
うーんとパッとみよくわからないですね。
プロジェクトごと送ってもらえないでしょうか?
こちらで何のエラーが出ているかなど確認したいので。

dixqhp@gmail.com

zipなどに纏める時、○○.ncbファイルなどの不必要で重いファイルは消してまとめてください。


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

Name: SONY  ..入門者(3,382ポイント)   Date: 2008/05/01(木) 21:23   No:16110     
Title: Re:シューティングの館 18<敵弾コントロール部>    
どうもすみません。具体的にどうすればよいのでしょうか?

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

Name: toyo  ..初心者(8,565ポイント)   Date: 2008/05/01(木) 21:51   No:16111     
Title: Re:シューティングの館 18<敵弾コントロール部>    
BCC Developerを使っているのなら○○.ncbファイルは無いので気にしなくていいです
圧縮したいファイルをすべて選択しその上で右クリック、送る、圧縮(zip 形式)フォルダとすると圧縮ファイルができます(Windows XPの場合)
それをメールに添付ファイルとして送りましょう。


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

Name: やそ  ..熟練のプログラマー(44,290ポイント)   Date: 2008/05/02(金) 12:16   No:16122     
Title: Re:シューティングの館 18<敵弾コントロール部>    
管理人さん、相変わらずやさしいなぁ^^

>プログラムをまねて実行したところエラーにより強制終了させられてしまいます。
>コンパイル時にエラーは表示されません。どうしたらよいのかアドバイスお願いします。

もう少し状況を詳しく書ければ、他の皆さんも手の出しようがあると思います。
プログラムを実行したとき、どの処理で落ちるのでしょう?
全く画が出ずに?

「エラーにより〜」と言うところから、何かしら画面表示があって、あるタイミングで落ちるのだとは思いますが、エラーのメッセージなどは拾えないのでしょうか?

ところで、Winmainはどこに??


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

Name: Mist  ..かけだし(1,793ポイント)   Date: 2008/05/02(金) 12:29   No:16123     
Title: Re:シューティングの館 18<敵弾コントロール部>    
> ところで、Winmainはどこに??

>> 明らかに問題なさそうなところは省きました。

と書いてあるから省かれているのでは?
エラー自体はソース貼り付けてる時点で直ってるみたいですね。


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

Name: やそ  ..熟練のプログラマー(44,495ポイント)   Date: 2008/05/02(金) 14:01   No:16125     
Title: Re:シューティングの館 18<敵弾コントロール部>    
そうかぁ(^^;)

目で追って(ウォークスルーして)みたけど、なんとも分からなかった(^^;)

>> 明らかに問題なさそうなところは省きました。

そうでした。けど、本人大丈夫だと思っていてもちょっとしたミスがあることも往々にしてあるからなぁ・・・。
龍神録のリプレイバグの原因然り(笑)
counter(誤)ccounter(正)だったかな?

まあサイは(管理人さんに)投げられたようなのでしばらく外野は黙ってましょうかね?(笑)


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



Name: たまひよ  ..かけだし(1,268ポイント)   Date: 2008/05/01(木) 16:05   No:16095       
Title: calloc()関数について    
BMPファイルのXサイズ分をCallocで取り、別のファイルにそのまま書き込ませ、
ちゃんと書けたか確認(実際は書けていなかったのですが)しようとしたのですが
上手くいきませんでした。
分からない点は、
freadして fwriteしたの所が読んだ物をそのまま書けていない点。
表示の所でcallo_mem[a]という使い方で中身が表示出来ない点です

どなたかお力を貸して下さい

int temp_gara_make(u_int x_size,u_int y_size)
{
long plus = 0;
u_int amari;
u_int i;
u_int a;
char *callo_mem;

if ((T_fp = fopen(T_File,"ab")) == 0) { /* Temp file */
printf("\nTemp_File_Open_Error!!\n");
return 100;
}
if ((BMP_fp = fopen(B_File,"rb")) == 0) { /* BMP file */
printf("\n BMP_File_Open_Error2!!\n");
return 200;
}
else {
fseek(BMP_fp,B_str_p,SEEK_SET); /* B_str_p = BMP画像書出し位置 */
callo_mem = (char *)calloc(x_size,sizeof(char)) ;
if(callo_mem == 0) {
printf("\nメモリの確保が出来ません");
free(callo_mem);
}
else {
fseek(T_fp,0,SEEK_END);
for(i=1; i<=y_size; i++) {
fread(callo_mem,x_size,1,BMP_fp);
fwrite(callo_mem,x_size,1,T_fp);

for(a = 0; a<x_size; a++) {
printf("%d:%d",a,callo_mem[a]);
}
amari = x_size % 4;
switch(amari) {
case 1:
plus = plus + x_size + 3;
break;
case 2:
plus = plus + x_size + 2;
break;
case 3:
plus = plus + x_size + 1;
break;
case 0:
plus = plus + x_size;
break;
default:
printf("\n間違った計算結果です");
break;
}
plus = B_str_p + plus; /* plus = 次の画像開始位置*/
fseek(BMP_fp,plus,SEEK_SET);
fseek(T_fp,plus,SEEK_SET);
}
printf("\ntemp_make 書き込み終了\n");
free(callo_mem);
}
}
fclose(BMP_fp);
fclose(T_fp);

}


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


Name: toyo  ..初心者(8,870ポイント)   Date: 2008/05/01(木) 17:11   No:16098     
Title: Re:calloc()関数について    
とりあえず気づいた点
"a"モードで開いたファイルはfseekしても意味がないです
常にファイルの末尾に書き込まれます
"w"モードで開いてもファイルエンドより後にはfseekできないので
fseek(T_fp,plus,SEEK_SET);
は役に立ってないでしょう。
int padding = 0;
とでもしておいて
fwrite(&padding, 1, amari, T_fp);
で良いのでは。


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

Name: toyo  ..初心者(8,231ポイント)   Date: 2008/05/01(木) 17:32   No:16100     
Title: Re:calloc()関数について    
あらかじめx_sizeを4バイト境界に揃えておく手もあります
かなりすっきりになります。

#define ALIGN_MASK (0xFFFFFFFC)
int temp_gara_make(u_int x_size, u_int y_size)
{
u_int i;
u_int a;
char *callo_mem;

x_size += 3;
x_size &= ALIGN_MASK;
if ((T_fp = fopen(T_File,"ab")) == NULL) { /* Temp file */
printf("\nTemp_File_Open_Error!!\n");
return 100;
}
if ((BMP_fp = fopen(B_File,"rb")) == NULL) { /* BMP file */
printf("\n BMP_File_Open_Error2!!\n");
return 200;
}
else {
fseek(BMP_fp, B_str_p, SEEK_SET); /* B_str_p = BMP画像書出し位置 */
callo_mem = (char *)calloc(x_size, sizeof(char)) ;
if(callo_mem == NULL) {
printf("\nメモリの確保が出来ません");
free(callo_mem);
}
else {
for(i = 1; i <= y_size; i++) {
fread(callo_mem, 1, x_size,BMP_fp);
fwrite(callo_mem, 1, x_size,T_fp);

for(a = 0; a < x_size; a++) {
printf("%d:%hhd", a, callo_mem[a]);
}
}
printf("\ntemp_make 書き込み終了\n");
free(callo_mem);
}
}
fclose(BMP_fp);
fclose(T_fp);
return 0;
}

ところでBMPは8ビットカラー限定ですよね


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

Name: たまひよ  ..かけだし(1,356ポイント)   Date: 2008/05/02(金) 09:32   No:16119     
Title: Re:calloc()関数について    
toyo様
ご回答ありがとうございます。

>"a"モードで開いたファイルはfseekしても意味がないです
そうですよね。とても恥ずかしいミスです。
しかも、T_fpは移動する必要が無かったので、"a"モードで開いているのに・・・。
完全に勘違いです。

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

>ところでBMPは8ビットカラー限定ですよね
はい。8ビットのカラーを別の画像用のデータに書き換える為のプログラムです。
BMPの4バイトがあまりの数分、書き換え後不要になるので、その部分を飛ばす為に
swichを作っています。
なのでT_fpのseekが無意味になるんです(--; ←何度書いても恥ずかしいです。

fread(callo_mem, 1, x_size,BMP_fp);
fwrite(callo_mem, 1, x_size,T_fp);
の所は書き方的には間違ってないんですね
上手く書き換わってなかったのは別の理由からみたいなので、もう少し考えてみます。

printf("%d:%hhd", a, callo_mem[a]);
この部分の「%hhd」というのはどういう表示になるのでしょう?






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

Name: toyo  ..中級者(9,090ポイント)   Date: 2008/05/02(金) 10:20   No:16120     
Title: Re:calloc()関数について    
>printf("%d:%hhd", a, callo_mem[a]);
>この部分の「%hhd」というのはどういう表示になるのでしょう?

整数のフォーマット指定子はデフォルトが int 型になります。
これにhをつけるとshort型にhhをつけるとchar型になります。
callo_memはchar型なのでhhをつけました。
16進数2桁で表示する場合は
printf("%d:%02hhX", a, callo_mem[a]);
というふうになります。
逆にlong型ではlをlong long型ではllをつけます。
つけなくても警告出ないコンパイラが多いのですが私はつけるようにしています。


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

Name: たまひよ  ..かけだし(1,441ポイント)   Date: 2008/05/02(金) 10:55   No:16121 解決!     
Title: Re:calloc()関数について    
toyo様
ご回答ありがとうございます。

>整数のフォーマット指定子はデフォルトが int 型になります。
>これにhをつけるとshort型にhhをつけるとchar型になります。
16進数の2桁の「%02」は知っていましたが、「h」や「hh」は勉強不足で知りませんでした。

表示用のキャストみたいな感じなんですね。
勉強になりました。
今度から使ってみます。

そう言えば、lのみの時は使った事がありました。(今更遅いですが)

callokの件は間違っていなかったのでこのまま頑張ってみます


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



Name: アブルイラリ  ..ぴよぴよ(134ポイント)   Date: 2008/04/30(水) 01:17   No:16020       
Title: はじめてみたものの    
プログラムを友達に任せっぱなしで
ゲームを作るのも悪いと思い

DXライブラリを使い
プログラムを始めようと思いましたが

シューテイングゲームの館の
下準備で進まなくなってしまいました

2.FPSの表示で
ビルドが出来なくて・・・

しかも
1と2の保存ファイル名が一緒なのも
よく分かりません

初心者過ぎる私ですが
アドバイスお願いします


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


Name: toyo  ..初心者(8,519ポイント)   Date: 2008/04/30(水) 10:01   No:16021     
Title: Re:はじめてみたものの    
1. 処理速度を一定にする。
はビルド出来たんですよね
1のmain.cppの内容を全部消して2のプログラムの内容をコピーすればいいと思いますよ


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

Name: アブルイラリ  ..ぴよぴよ(61ポイント)   Date: 2008/04/30(水) 10:28   No:16022     
Title: Re:はじめてみたものの    
ああ・・・

1.処理速度を一定にする
のビルドもできてないんです・・・


たぶんヘッダーファイルうんぬん
なのかもしれませんが
右も左も和歌来の出・・・


どうしたらいいんでしょうか?


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

Name: toyo  ..初心者(8,542ポイント)   Date: 2008/04/30(水) 11:20   No:16029     
Title: Re:はじめてみたものの    
お使いのコンパイラ名と表示されるエラーの内容を教えてください

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

Name: TAG  ..かけだし(2,322ポイント)   Date: 2008/04/30(水) 11:52   No:16032     
Title: Re:はじめてみたものの    
横槍失礼なのですが
ちゃんとコピーしていますか?
私はコピーすると余白が出てきてしまいます。
例えば

ーーーーープログラムーーーー

 } 


こんな感じでカーソルで「 }」のちょっと後ろからD&Dすると「 }」の後ろに空白が1マス分ありますよね?
そこを「Back space」キーで空白を消してみてください

ーーーープログラムーーーーー

 }

こんなかんじで空白ができないようにしてみてください
おそらく違う原因だと思うのですが、私も最初にこんな感じになったので一応参考ほどに
受け止められてくだされば嬉しいです。

DXライブラリの初期設定をもう一度確認したりしたほうが確実かもしれません。


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

Name: アブルイラリ  ..ぴよぴよ(0ポイント)   Date: 2008/05/01(木) 00:08   No:16079 解決!     
Title: Re:はじめてみたものの    
動きました
TAGさんありがとうございました

toyoさん
お使いのコンパイラは
VSC++2005
です


これからガンバ手作っていくので
末永くお付き合いください

ありがとうございました


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

Name: アブルイラリ  ..ぴよぴよ(360ポイント)   Date: 2008/05/01(木) 00:14   No:16080     
Title: Re:はじめてみたものの    
一度は動いたのですが
1から2へ
ステップアップしたら

コンパイル失敗とだけでまして

1に戻ってビルドをしてみると
エラーが出ずしっぱいして
デバッグしてみると

'SSs.exe': 'C:\Documents and Settings\Administrator\デスクトップ\keep\作業\STG\SSs\debug\SSs.exe' を読み込みました。シンボルが読み込まれました。
'SSs.exe': 'C:\WINDOWS\system32\ntdll.dll' を読み込みました。シンボルが読み込まれていません。
'SSs.exe': 'C:\WINDOWS\system32\kernel32.dll' を読み込みました。シンボルが読み込まれていません。
'SSs.exe': 'C:\WINDOWS\WinSxS\x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_f75eb16c\msvcr80d.dll' を読み込みました。シンボルが読み込まれていません。
'SSs.exe': 'C:\WINDOWS\system32\msvcrt.dll' を読み込みました。シンボルが読み込まれていません。
プログラム '[1228] SSs.exe: ネイティブ' はコード 0 (0x0) で終了しました。

とでます


なにがいけないのでしょうか?


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

Name: 管理人 [URL]  ..伝説のハッカー(570,435ポイント)   Date: 2008/05/01(木) 00:24   No:16082     
Title: Re:はじめてみたものの    
大抵ググってみると解決しますよ。

http://www.google.co.jp/search?hl=ja&q=DX%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%80%80%E3%82%B7%E3%83%B3%E3%83%9C%E3%83%AB%E3%81%8C%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BE%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82&lr=

なおこれはエラーではアリマセン。このメッセージのどこにも「エラー」とはかかれていないですよね。
気にしなくて大丈夫です。


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

Name: アブルイラリ  ..ぴよぴよ(425ポイント)   Date: 2008/05/01(木) 22:20   No:16112 解決!     
Title: Re:はじめてみたものの    
ということは
デバッグは成功してるのですか?

画面が出てこなかったので
心配だったのですが

また何かあったら
お願いします


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

Name: アブルイラリ  ..ぴよぴよ(463ポイント)   Date: 2008/05/01(木) 22:26   No:16113     
Title: Re:はじめてみたものの    
ビルドが失敗しか出てこない場合は
どう処理すればいいのでしょうか?


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



Name: ahetan  ..ぴよぴよ(456ポイント)   Date: 2008/05/01(木) 17:24   No:16099       
Title: 魔法陣のような光ったエフェクトについて    
魔法陣や攻撃などで使われるいろんな色のきれいなエフェクトを出したいのですが迷っています。AfterEffectsで作ったmovieを透過、拡大縮小を使ってゲーム中で再生するのか、画像にアルファブレンド、拡大縮小を使って表現するか、の二つです、自分は前の方をやりたいのですが、後ろの方よりも動作が重くなってしまうんでしょうか?
さらに、前の方はやり方がまったくわかりません。ためしに、DXライブラリのサイトの動画ファイルを再生するのサンプルを使ってaviファイルで実行してみたのですが、ウィンドウが真っ黒のままで、movieが再生されませんでした。(AVI(Codecがない形式は再生できません),MPG 等というのがきになるのですが…いまいちわかりません)いちよう、flvも使ってみましたが再生できませんでした。再生の仕方、拡大縮小、透過を教えてください。
              
もう一つ質問させてください。DXライブラリのサイトでウインドウのアイコンを変更するを見て、リソースファイルを作って実行してみたのですが、アイコンのファイルが見つからないとエラーを吐かれました。同じフォルダ内にリソースのファイルとアイコンのファイルを置いたのにエラーでした。

これらの質問の解決策をお願いします。
使っているのはVC++です。


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


Name: ahetan  ..ぴよぴよ(477ポイント)   Date: 2008/05/01(木) 20:55   No:16109     
Title: Re:魔法陣のような光ったエフェクトについて    
返答がないようなので、もう少し自分で考えてみることにします。変な質問してすいません。

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



Name: non  ..ぴよぴよ(87ポイント)   Date: 2008/04/30(水) 10:44   No:16023       
Title: 構造体のビットフィールドで確保される順番は    
構造体のビットフィールドでメモリがどのように確保されるのか調べているのですが、
次のプログラムの場合、B7が上位B0が下位になると思っていたのですが、実行してみると
01001000になっています。コンパイラによるのでしょうか?
使用したのは、フリーのBorland C++ Compiler 5.5です。

#include<stdio.h>

struct st_p1 { // struct P1
unsigned char DDR; // P1DDR
char wk; //
union { // P1DR
unsigned char BYTE; // Byte Access
struct { // Bit Access
unsigned char B7:1; // Bit 7
unsigned char B6:1; // Bit 6
unsigned char B5:1; // Bit 5
unsigned char B4:1; // Bit 4
unsigned char B3:1; // Bit 3
unsigned char B2:1; // Bit 2
unsigned char B1:1; // Bit 1
unsigned char B0:1; // Bit 0
} BIT; //
} DR; //
};


main()
{
struct st_p1 P1;

P1.DR.BYTE=0x12;
printf("%x",P1.DR.BIT.B7);
printf("%x",P1.DR.BIT.B6);
printf("%x",P1.DR.BIT.B5);
printf("%x",P1.DR.BIT.B4);
printf("%x",P1.DR.BIT.B3);
printf("%x",P1.DR.BIT.B2);
printf("%x",P1.DR.BIT.B1);
printf("%x",P1.DR.BIT.B0);
return;
}


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


Name: GPGA  ..熟練のプログラマー(48,381ポイント)   Date: 2008/04/30(水) 10:48   No:16024     
Title: Re:構造体のビットフィールドで確保される順番は    
ビットフィールドのビットの割り振りは、ほとんどの場合、環境依存になります。


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

Name: non  ..ぴよぴよ(110ポイント)   Date: 2008/04/30(水) 11:00   No:16025 解決!     
Title: Re:構造体のビットフィールドで確保される順番は    
回答ありがとうございます。やっぱり、コンパイラ依存ですか。
しょうがないですね。


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

Name: 組木紙織  ..熟練のプログラマー(51,116ポイント)   Date: 2008/04/30(水) 11:20   No:16028     
Title: Re:構造体のビットフィールドで確保される順番は    
>ビットフィールドのビットの割り振りは、ほとんどの場合、環境依存になります

確かに、構造体(共用体)の中身は、環境依存の部分が多いですが、
環境依存の部分は、アライメントに関する部分だけだったような記憶があります。
構造体(共用体)の中身の順番はソースコードの順番であったように思います。
今回の質問はエンディアンに関するものだと思います。


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

Name: non  ..ぴよぴよ(207ポイント)   Date: 2008/04/30(水) 11:49   No:16031     
Title: Re:構造体のビットフィールドで確保される順番は    
レスありがとうございます。
エンディアンということはCPUに依存するということでしょうか?
エンディアンは8ビット単位の配置ではないのですか?
いまいち意味が理解できませんので、もう少しわかるようにご説明願えますか。


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

Name: GPGA  ..熟練のプログラマー(48,706ポイント)   Date: 2008/04/30(水) 12:03   No:16034     
Title: Re:構造体のビットフィールドで確保される順番は    
JIS X3010:2003 6.7.2.1 構造体指定子及び共用体指定子からの引用
>構造体オブジェクト内では, 非ビットフィールドメンバ及びビットフィールドが置かれる単位は, 宣言された順に
>増加するアドレスをもつ。構造体オブジェクトへのポインタは, 適切に変換すれば, その先頭メンバ(又はビット
>フィールドならば, それが置かれた単位)を指す。さらに, その逆も成り立つ。構造体オブジェクトの中に名前の
>ない詰め物があってもよいが, 先頭には名前のない詰め物があってはならない。

以上が仕様となっています。
置かれる順番は、宣言した順番となっていますが
ビット配置はその環境のビットオーダーに依存するはずです。


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

Name: toyo  ..初心者(8,609ポイント)   Date: 2008/04/30(水) 12:04   No:16035     
Title: Re:構造体のビットフィールドで確保される順番は    
エンディアンについてですが
CPUでデータバスが32本(d0-d31)あるとします
これをint(32bits)に読み込むときにd0が最上位ビットになるか最下位ビットになるかがエンディアンの違いだと理解しています。
(つまりエンディアンはビット単位)


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

Name: 組木紙織  ..熟練のプログラマー(51,418ポイント)   Date: 2008/04/30(水) 12:08   No:16036     
Title: Re:構造体のビットフィールドで確保される順番は    
共用体DRの中身は
下のようになっているとします。
(この例は適当です)

上位              下位
┌─┬─┬─┬─┬─┬─┬─┬─┐
│B7│B6│B5│B4│B3│B2│B1│B0│
├─┼─┼─┼─┼─┼─┼─┼─┤
│ │ │ │ │ │ │ │ │BYTE
└─┴─┴─┴─┴─┴─┴─┴─┘



もしビックエンディアンなら0x12は

上位              下位
┌─┬─┬─┬─┬─┬─┬─┬─┐
│B7│B6│B5│B4│B3│B2│B1│B0│
├─┼─┼─┼─┼─┼─┼─┼─┤
│0│0│0│1│0│0│1│0│BYTE
└─┴─┴─┴─┴─┴─┴─┴─┘



もしリトルエンディアンなら0x12は
下位側から入るので

上位              下位
┌─┬─┬─┬─┬─┬─┬─┬─┐
│B7│B6│B5│B4│B3│B2│B1│B0│
├─┼─┼─┼─┼─┼─┼─┼─┤
│0│1│0│0│1│0│0│0│BYTE
└─┴─┴─┴─┴─┴─┴─┴─┘



とはいるということです、
#そういえばエンディアンは規格で決まってなかったような気がする。→どっちみち環境依存。ですか。


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

Name: non  ..ぴよぴよ(390ポイント)   Date: 2008/04/30(水) 12:31   No:16037 解決!     
Title: Re:構造体のビットフィールドで確保される順番は    
たくさんの方からの回答を感謝いたします。
エンディアンがビット単位で依存するとは知りませんでした。
偶数バイトのときバイト単位で上下バイトがひっくりかえるものだと思っていました。
ありがとうございました。
最初に載せたサンプルはH8CPUのヘッダーファイルから取ってきたものですからビッグエンデアンで
実行したパソコンはXeonですからリトルエンディアンということでしょうね。



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

Name: GPGA  ..熟練のプログラマー(48,795ポイント)   Date: 2008/04/30(水) 12:50   No:16040     
Title: Re:構造体のビットフィールドで確保される順番は    
エンディアンはバイト単位とビット単位の両方が存在します。
バイトがビッグエンディアンであるからといって、ビットがビッグエンディアンで
あるという保障はどこにもありません。


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

Name: non  ..ぴよぴよ(406ポイント)   Date: 2008/04/30(水) 12:56   No:16041     
Title: Re:構造体のビットフィールドで確保される順番は    
あらま、そうなんですか。わかりにくいですね。

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

Name: ibis  ..初心者(6,263ポイント)   Date: 2008/04/30(水) 18:17   No:16052     
Title: Re:構造体のビットフィールドで確保される順番は    
IntelのCPU(CeleronやPentium、つまり典型的なWindowsの環境)では、バイトがリトル、ビットがビッグですよ。
32bit整数の1は、
[[00000001] [00000000] [00000000] [00000000]]
32bit整数の256は、
[[00000000] [00000001] [00000000] [00000000]]
というように。


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

Name: Hermit  ..上級者(19,265ポイント)   Date: 2008/04/30(水) 21:44   No:16061     
Title: Re:構造体のビットフィールドで確保される順番は    
現状では、ビッグエンディアンも、リトルエンディアンも、
1byteの情報は同じだと思いますが。
これが、2byte以上になると変わってきます。

char w[2] = {1,0};
これを、2byte (int *) としてみると、
ビッグだと、256
リトルだと、1

char w[2] = {0,1};
これを、2byte (int *) としてみると、
ビッグだと、1
リトルだと、256

1 を、16Bit int のビットフィールドで表すと、
ビッグが
struct {
unsigned int B15:1;
unsigned int B14:1;
unsigned int B13:1;
unsigned int B12:1;
unsigned int B11:1;
unsigned int B10:1;
unsigned int B9:1;
unsigned int B8:1;
unsigned int B7:1;
unsigned int B6:1;
unsigned int B5:1;
unsigned int B4:1;
unsigned int B3:1;
unsigned int B2:1;
unsigned int B1:1;
unsigned int B0:1; // ビッグはここが 1 になる、他は 0
} BIT;

リトルで 1 は、
struct {
unsigned int B0:1; // リトルはここが 1 になる、他は 0
unsigned int B1:1;
unsigned int B2:1;
unsigned int B3:1;
unsigned int B4:1;
unsigned int B5:1;
unsigned int B6:1;
unsigned int B7:1;
unsigned int B8:1;
unsigned int B9:1;
unsigned int B10:1;
unsigned int B11:1;
unsigned int B12:1;
unsigned int B13:1;
unsigned int B14:1;
unsigned int B15:1;
} BIT;

ビットフィールドのどちら側を上に書くかという違いがあるだけだと思います。


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

Name: GPGA  ..熟練のプログラマー(48,955ポイント)   Date: 2008/05/01(木) 01:29   No:16085     
Title: Re:構造体のビットフィールドで確保される順番は    
>Hermitさん

いえ、ですからバイトオーダーとビットオーダーは環境によって違うんです。
通常、リトルエンディアン、ビッグエンディアンというのはバイトオーダーのことを
指します。ビットフィールド自体が滅多に使用されないので、話題に上がりにくいですが
ビットフィールドはその環境のビットオーダーにかかわってきますので
通常のリトルエンディアンやビッグエンディアンとは扱いが異なるわけです。


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

Name: たかぎ [URL]  ..プログラマー(37,349ポイント)   Date: 2008/05/01(木) 10:15   No:16088     
Title: Re:構造体のビットフィールドで確保される順番は    
ビットオーダーのことは、エンディアン(あるいはエンディアンネス)とはいいませんね。
また、すでに回答が出ているように、バイトオーダーがどうであろうと、ビットオーダーには直接関係ありません。処理系によっては、コンパイルオプションによって、ビットオーダーを変えられるものもあります。

ところで、C++では問題ありませんが、Cではビットフィールドにunsigned charを使えるかどうかは処理系に依存します。また、異なる型のビットフィールドが混在した場合、多くの処理系では同じ型のビットフィールドどうしを集めて配置するようになっています。

ビットフィールドについては、以前ブログで書いたことがあるので紹介しておきます。
http://portable-c.jugem.jp/?eid=8


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

Name: Hermit  ..上級者(19,446ポイント)   Date: 2008/05/01(木) 20:11   No:16108     
Title: Re:構造体のビットフィールドで確保される順番は    
ちょっと書き方がいい加減でしたね(^^;
Borland C++ Compiler 5.5 では、
ビットフィールドは、
unsigned char B0:1;
から書いた方がいいですよ。
最初に
unsigned char B7:1;
から書いたので、おかしくなるんです。

このあたりは、他の人が多く書いていますが、環境依存なので、環境に合わせて書く必要があります。
リトルエンディアンの8086系のコンパイラは、256 などは2byte目に 1 が来るので、
> 非ビットフィールドメンバ及びビットフィールドが置かれる単位は, 宣言された順に 増加するアドレスをもつ。
を満足する為には、その方が自然なのでそういう仕様になってるだけでしょう。


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



Name: 超初心者  ..入門者(4,023ポイント)   Date: 2008/05/01(木) 16:26   No:16096       
Title: 音楽再生について    
質問させてください。

LoadSoundMemで再生した音楽を停止することはできるのでしょうか?
LoadSoundで再生したものならStopSound()で止めれるのは確認しました。

すみませんがよろしくおねがいします。


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


Name: toyo  ..初心者(8,334ポイント)   Date: 2008/05/01(木) 18:04   No:16101     
Title: Re:音楽再生について    
関数リファレンスを見るとStopSoundMem( )という関数があるようです
名前からしてこれで止まりそうな気がします。
解説には
-------------------
解説  PlaySoundMem関数で再生中の SoundHandle が示す音を停止します。 停止の対象がサウンドハンドルを通して行われるという以外StopSound関数 と機能的な違いはありません。
-------------------
とあります。


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

Name: 超初心者  ..入門者(4,065ポイント)   Date: 2008/05/01(木) 19:52   No:16106     
Title: Re:音楽再生について    
ありがとうございます。無事に止まりました。

関数リファレンスっていうのがあったんですね。。
すみません次からはちゃんと目をとうしてから質問させていただきます。


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

Name: 超初心者  ..入門者(4,081ポイント)   Date: 2008/05/01(木) 19:53   No:16107 解決!     
Title: Re:音楽再生について    
解決マークいれてませんでしたので。。

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



Name: dolphin  ..ぴよぴよ(225ポイント)   Date: 2008/05/01(木) 19:41   No:16105       
Title: アクションゲームのマップについて    
ハジめまして、dolphinと申します。
私は今アクションゲームを作っているのですが
マップの判定の処理に悩んでいます。

今はマップのデータを2次元配列に格納して、
例えば操作キャラが自分のx、y座標から
配列を参照(date[ x / 24 ][ y / 24 ]といった具合、24というのは
1つのマップタイルの大きさです)という風にして
マップの判定をしているのですが
ほかに良い方法は無いでしょうか?
(このやり方だとちょっとした不具合が・・・)
よろしくお願いします


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




Name: おてあげ  ..ぴよぴよ(586ポイント)   Date: 2008/05/01(木) 17:08   No:16097       
Title: 課題    

#include<stdio.h>

typedef struct {
char name[41];
char math[4];
char english[4];
char science[4];
}stu;

stu date[5];

int check = 0;

void read(void);

void print(void);


void print(void)
{

if(check == 0){
printf("error.\n");
return;
}
int i = 0;

for(; i < check; i++){
printf("%s\n%s\n%s\n%s\n\n",date[i].name, date[i].math,
date[i].english, date[i].science);
}
return;
}

void read(void)
{
if(check == 5){
printf("error.\n");
return;
}

int i = check;
FILE *fp;
char file[20];

printf("\nfile name>>");
fflush(stdout);
scanf("%s", file);

fp = fopen(file,"r");

if(fp == NULL){
printf("error.\n");
return;
}


fscanf(fp, "%s",date[i].name);
fscanf(fp, "%s",date[i].math);
fscanf(fp, "%s",date[i].english);
fscanf(fp, "%s",date[i].science);

date[i].name[40] = '\0';
date[i].math[3] = '\0';
date[i].english[3] = '\0';
date[i].science[3] = '\0';

fclose(fp);

check++;

return;
}

int main(void)
{

char cmd[2];

while(1){

printf("CMD>>");
fflush(stdout);
scanf("%s", cmd);

switch(cmd[0]){
case 'r' : read(); break;
case 'd' : print(); break;
case 'q' : return 0;
default : printf("error.\n"); break;

}
}
}


上のプログラムを扱う成績データの件数に合わせて、配列のサイズをプログラム実行時に決定することにより、上記のような最大データ件数の制約を取り去るよう改良したいのですがどうすればいいんですか???

成績データを読み込む前に、まず成績データの件数を入力し、これをもとに配列の記憶領域を動的(プログラム実行時)に確保する。この動的記憶領域割り当ては、ライブラリ関数 malloc() を用いることによって可能である。関数 malloc() の使い方については、manコマンド等のマニュアルを参照せよ。また、変数や構造体を記憶するのに必要なメモリ量は、sizeof演算子を用いることで知ることができる。と課題には書いてました。
よろしくお願いします。


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


Name: toyo  ..初心者(8,459ポイント)   Date: 2008/05/01(木) 18:20   No:16102     
Title: Re:課題    
課題に書いてある通りですね

#include <malloc.h> /* stdlib でもOK */
stu* date; /* dataのほうがいいと思う */
int main(void)
{
int data_count;
char cmd[2];
/*
データ件数の入力処理(略)
*/
date = (stu*)malloc(sizeof(stu) * data_count);


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



Name: norakuro  ..ぴよぴよ(146ポイント)   Date: 2008/04/30(水) 22:32   No:16069       
Title: シューティングゲームの館を見て    
「四聖龍神録」の方をプレイさせていただきました。
凄いデキです、楽しませてもらいました!


C言語は全くの初心者なんですが、ゲーム作成をチャレンジしてみたく
シューティングの館の0〜33章まで実行してみました。
でもそこからどうやって発展させていけば良いか分かりません。
33章まではサンプルを実行しただけみたいなものなのでそこから進めない状態です。

やはりサイトのサンプルの知識だけではゲーム作成は難しいのでしょうか?
「四聖龍神録」ほど本格ゲームとはいきませんがあれに近いゲームは作れないのでしょうか?


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


Name: SONY  ..入門者(3,367ポイント)   Date: 2008/04/30(水) 23:07   No:16071 解決!     
Title: Re:シューティングゲームの館を見て    
作ることはできると思います。大切なことは知識と慣れです。プログラミングでは特に後者の方が大切だと思っています。いくつか書籍が出回っているので知識についてはそちらで得るのも良いと思います。長い時間をかけて学んでいきましょう。

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

Name:  ..ぴよぴよ(440ポイント)   Date: 2008/05/01(木) 01:24   No:16084     
Title: Re:シューティングゲームの館を見て    
僕も最近33章までとりあえず終えたんですが、33章までなんとなく理解した程度で進めていたので、いざ自分なりに色々いじってみようと思うと分からないことだらけで、何度も「シューティングゲームの館」を読み返しました。

どうやって発展させていけばいいのか分からないということですが、とりあえずシューティングゲームとして足りないものを追加していってはどうでしょうか。
僕はまず、"敵の周りを6つの弾がグルグル回り続けるショットパターン"を作りました。
これを作るだけでも、今までなんとなく理解した程度の知識しかなかったので、細かい所が分からず苦労しました。
sin? cos? ラジアン??
と分からないことだらけで、数学の参考書を引っ張り出してきて勉強しなおし、いざ動かして弾の動きを確認し、想定していなかった動きなら「何故こうなったのか」を考え、少しずつ修正。。。
自分でひとつショットパターンを作ることで「ここをこうすればこうなる」とか「ここをこうしないから動かなかったのか」などが分かってきます。
その次に"敵の弾と自機の当たり判定"を作りましたが、これはまたも曖昧だったピタゴラスの定理をちゃんと理解するだけで2時間程かかりました。
この程度の学力しかない自分でも一応はちまちまと進めていけているので、作ろうと思えばどうにでもなると思います。要はやる気と根気ではないかと個人的に思います。

シューティングゲームの館は現在33章までしかありませんが、これはある意味管理人さんの「ここから先は自分でやれ」というメッセージだと勝手に受け取っていますw
なので次は、敵の消滅アクションとHPを作ろうと思っています。
結構大変だったり分からなくてイライラする時もありますが、自分のやりたい事が実現できたときはかなりうれしい気持ちになるので、がんばって損はないと思います。

長文失礼しました。


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

Name: 管理人 [URL]  ..伝説のハッカー(569,853ポイント)   Date: 2008/05/01(木) 13:26   No:16092     
Title: Re:シューティングゲームの館を見て    
こんにちは。
龍神録で遊んでいただきありがとうございます。

シューティングの舘は、わかりやすさを重視しようと、拡張性を考慮していない作りになっているので
少々規模の大きいゲームを作るにはあまり相応しくないのです。
でも、自分でゲームが動かせるということを先に実感していただきたかったんですよね。
コピーペーストで進めていったのでは、サンプルの範囲内でしか作成ができないと思い、
そのような作りにしたのですが、どうも余計わかりにくかったようで・・・。
舘を作りなおしたいと思っているのですが、
なかなか時間も無く;

龍神録自体DXライブラリで作っているので、もちろん龍神録以上のものはできますよ。
わたし自身特別なスキルなどまったく持っていません。
常に、こうしたらどうなるかな、あぁしたらどうなるかなとあれこれプログラムを動かしながら作っていったので
参考書とかを読んだわけではないです。
案外試行錯誤でも作れるものだと思いますよ。
サンプルがあると、サンプルに頼りっきりになってしまい、
いざサンプルが無くなると手も足も出ないという状態になりかねないので、
常にサンプルを利用するのは必ずしもいいことではないと思います。

DXライブラリのHPにはリファレンスがあり、とても詳しく関数の使いかたが書いてあります。
サンプルプログラムも書いてあるので、小規模なプログラムの作り方はそこで理解できます。
DXライブラリのリファレンスページとゲームプログラミングの舘さえ見ればもう十分だと思います。
何も見ずにとにかくガリガリ自分で間違ってもいいからプログラムを書いてみてはどうでしょう。
力業ですが、参考書を読んでいやになる、サンプルを読み過ぎて結局自分では何もできない・・となるより、
試行錯誤で自分流の方法をあみだした方がずっと自分で拡張できますし、自分のものになると思います。

突然大きなものを作ろうとせず、小さいオチ物ゲームみたいなものから作ってはどうでしょう。


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

Name: norakuro  ..ぴよぴよ(304ポイント)   Date: 2008/05/01(木) 14:10   No:16093     
Title: Re:シューティングゲームの館を見て    
Sonyさん、柏さん、管理人さん、貴重なご意見ありがとうございます!

シューティングゲームの参考書を買ってきたのでこれを見て学んでみます。
サンプルで作ったのは置いといて、本を見ながら一から頑張ってみようと思います!

きっとまた躓いてしまうと思うので、そのときはまたご意見の方を宜しくお願いしますm(_ _)m


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



Name: fffff  ..入門者(3,902ポイント)   Date: 2008/04/30(水) 18:40   No:16055       
Title: シューティングの館 第6章 に関する質問    
 すいません、今回はシューティングの館、第6章に関する質問があります。

 私は『 BCC Developer 』を使いながら当サイト様で勉強させていただいているのですが、
 サイトの方で掲載されている例が『 VC++ 』で紹介されていることもあり、
 第6章の通りに『 C++ 』ファイルを作ってもエラーとなってしまいます。

 というのも、
 サイトの方で『ソリューションファイル』とあるものが、
 『 BCC Developer 』では何に該当するのかが分からず、どう対応すれば良いのかが分からないのです。
 (最も、サイトに掲載されているのは『 VC++ 』での例なので、違うというのは当たり前のことなのですが……)

 それでもなんとかやってみようと、サイトの完成例を見ながら、
 プロジェクトファイルの中に『C++』ファイル(cppファイル)を入れておくフォルダ『Source File』と、
 ヘッダファイル(+その他)を入れておくフォルダ『DxLib』とを作成し、
 第6章で製作したファイルを完成例に倣い、分けて入れてみました。

 ですが、当然というべきか、やはりエラーが出てしまいます。
 また、完成例にはヘッダファイル等を入れておくフォルダの中に『 DxLib.h 』『 DxLib.txt 』のファイルがあり、
 手探りながらも『 DxLib.h 』は追加することが出来たのですが、
 『 DxLib.txt 』はどうやら追加することができないみたいで、途方に暮れています。


 『 BCC Developer 』で第6章のような設定を無事に完成させるには、
 どのように対応すればよいのでしょうか?


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


Name: カイ  ..ぴよぴよ(502ポイント)   Date: 2008/04/30(水) 19:05   No:16056     
Title: Re:シューティングの館 第6章 に関する質問    
開いてみればわかると思いますが、『 DxLib.txt 』はおそらくDxライブラリの説明書なので、
ソースには関係してないと思いますよ。

あとはplayer.cppなどを
ファイル→新規作成→(C/C++ファイル) ファイル名.cpp (現在のプロジェクトに追加する)で
1つずつ追加し、ソースを写せばうまくいくかと。


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

Name: toyo  ..初心者(8,709ポイント)   Date: 2008/04/30(水) 19:57   No:16058     
Title: Re:シューティングの館 第6章 に関する質問    
>プロジェクトファイルの中に『C++』ファイル(cppファイル)を入れておくフォルダ『Source File』と、
>ヘッダファイル(+その他)を入れておくフォルダ『DxLib』とを作成し、

フォルダは作らないほうがいいでしょう
cppとhは同じところに無いとエラーになります。


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

Name: toyo  ..初心者(8,770ポイント)   Date: 2008/04/30(水) 20:40   No:16059     
Title: Re:シューティングの館 第6章 に関する質問    
実際にやってみましたが添付画像のようになります
それとBCCの場合はmain.cppで修正が必要になるようです
extern 〜
の部分をWinMainの外に移動させないとエラーになります。(画像参照)


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

Name: fffff  ..入門者(4,097ポイント)   Date: 2008/04/30(水) 20:54   No:16060     
Title: Re:シューティングの館 第6章 に関する質問    
 カイ様、toyo様、どうもありがとうございます。
 toyo様の指示通りに extern の箇所を WinMain〜 の前に持ってきたところ、
 無事にメイクが完了し、プログラムも無事に作動しました。
 どうもありがとうございます!


 ……ところで質問なのですが、
 BBCではどうして WinMain よりも前に extarn の宣言を置かなければならないのでしょうか?

 同じようなケースを回避するためにも、その辺りの知識をもう少し私自身が深める必要があるかと思い立ったのですが、
 今回のメイク失敗の原因がそもそも理解できていないので、どこをどういう風に調べればいいのか見当が付かなくて……


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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(71,682ポイント)   Date: 2008/05/01(木) 00:00   No:16078     
Title: Re:シューティングの館 第6章 に関する質問    
過去ログの文脈から推測すると、BCCの特殊な使用が原因みたいです。

ただ、WinMain関数内にextern宣言を書くということ自体があまり必要性がないと思います。
プロトタイプ宣言はヘッダーファイルの中にまとめてしまい、それを#includeするのが一番ポピュラーな方法だと思います。


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

Name: fffff  ..入門者(4,337ポイント)   Date: 2008/05/01(木) 12:02   No:16091 解決!     
Title: Re:シューティングの館 第6章 に関する質問    
 カイ様、回答ありがとうございます。(_ _)

>ただ、WinMain関数内にextern宣言を書くということ自体があまり必要性がないと思います。
>プロトタイプ宣言はヘッダーファイルの中にまとめてしまい、それを#includeするのが一番ポピュラーな方法だと思います。

 うーん、BCCの仕様ですか〜。
 こればっかりはさすがに分からないですよね……。
 とりあえず、extern 宣言はこれからは WinMain 関数の中には置かないようにしてみます。

 長くなりましたが、回答してくださった方々、どうもありがとうございました!


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



Name: abc  ..かけだし(1,159ポイント)   Date: 2008/04/30(水) 16:50   No:16048       
Title: CPU    
CPUのビット数はなにで決まるんですか??
8ビットCPUと16ビットCPUでは、桁数などが違いますよね

CPUのビットはCPUのどの部分で決まるんですか??


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


Name: ibis  ..初心者(6,192ポイント)   Date: 2008/04/30(水) 17:58   No:16050     
Title: Re:CPU    
CPUが演算できる数値の範囲ですね。
8ビットCPUは8ビット(符号無し整数なら0〜255、符号有りなら-128〜127)以内のデータを扱えます。
16ビットCPUなら同様に16ビット(0〜65535、-32768〜32767)以内のデータを扱えます。
例えば8ビットCPUでは、符号無し整数の256以上や符号付き整数の-129以下と128以上の数値は扱えないわけです。

CPUのどの部分で決まるかというと、CPU全体ですね。
CPU全体が、そのビット数に合わせて作られてます。

まぁアセンブリ言語ではビット数を意識するのは主にレジスタなので、
CPUのビット数=レジスタのビット数、と考えてもいいかも知れません。
ちなみにレジスタというのは、CPU内にある特殊なメモリのことです。


アセンブリ言語を学べば、CPUのことはよくわかると思いますよ。
CPUの説明から始まるアセンブリ入門書は少なからずありますし(でもアセンブリの本って最近あまりないかも)
あるいは単にPCの内部構造やCPUの解説書とか、webサイトでも。
もしそういったことに興味があるなら、調べてみるのも面白いと思いますよ。


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

Name: やそ  ..熟練のプログラマー(44,056ポイント)   Date: 2008/04/30(水) 18:20   No:16053     
Title: Re:CPU    
もう少し細かく言うならば、ビット数はCPUの配線の数(バス幅)で決まります。
32ビットCPUであれば物理的に32本線が並んでいて一度に電気が流れたり、流れなかったりして処理しています。(目に見えないくらい小さい配線ですけどね)

現在ではCPUの演算装置のバス幅で32ビットCPUだとか呼んでいると思います。
8ビット、16ビット時代にも記憶装置のバス幅は32ビットあったりしましたからね。




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

Name: ibis  ..初心者(6,373ポイント)   Date: 2008/04/30(水) 19:10   No:16057     
Title: Re:CPU    
そうですね。
バスです。
あれはもう絶縁素材で覆われているので目に見えない・・・というのは冗談ですが、本当に小さいです。
CPUの電子顕微鏡写真があるくらいですしねぇ。

>8ビット、16ビット時代にも記憶装置のバス幅は32ビットあったりしましたからね。
それは私も知らなかったです。
・・・あ、そういえばスーファミで、ソフトによって32とか16とか違ってた気がするんですが、それがまさにそれですかねぇ?

余談ですが、PCに関して言えば16ビットの時点で未知の領域です。
なにぶん、この手の歴史には弱いもので。
ジェネレーションギャップといいますかね。
物心ついたのがバブル崩壊の頃ですし。


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

Name: Sleepy  ..入門者(2,631ポイント)   Date: 2008/05/01(木) 01:21   No:16083     
Title: Re:CPU    
>CPUのビットはCPUのどの部分で決まるんですか??
データバス幅とCPUのビット数が一致するとは限りません。
レジスタ同士を組み合わせる演算もありますのでレジスタからビット数は一意に決まりません。
メーカが16ビットCPUと言い張っているのに中身は8ビットCPUだったりすることもあります。
パラレルバスでなくシリアルバスともなるとバス幅で表現するのは微妙です。

「厳密な定義はなく言ったもの勝ちで大多数の賛同を得られていること」が正解かと思います。

ところでabcさん、質問の意図はどこにあるのでしょう。
何かの宿題ですか?




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

Name: abc  ..かけだし(1,223ポイント)   Date: 2008/05/01(木) 09:56   No:16086 解決!     
Title: Re:CPU    
CPUについてだいぶわかってきました。
宿題ではなく底の方の勉強も少ししているんで><
任天堂64って64ビットらしいですね笑

バスの本数でデータの行き来をしてるみたいですねCPU内にメモリがあり
そこを使うことにより高速化になるみたいですねー。
なんとなくわかったので解決させていただきますありがとうございました


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



Name:  ..ぴよぴよ(303ポイント)   Date: 2008/04/30(水) 22:10   No:16067       
Title: 無題    
これの合計と平均計算を関数化したいんですけどどうすればいいんのですか?

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


Name:  ..ぴよぴよ(237ポイント)   Date: 2008/04/30(水) 22:55   No:16070     
Title: Re:無題    
ちなみに合計と平均計算を合わせた関数化をしたいと思っています。
平均まで計算できたら、メインのほうで表示という風にしたいです。
すみませんわからなくてだれか教えてくれませんか?


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

Name: すく  ..ぴよぴよ(4ポイント)   Date: 2008/04/30(水) 23:11   No:16072     
Title: Re:無題    
関数の作り方がわからなってこと?

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

Name:  ..ぴよぴよ(266ポイント)   Date: 2008/04/30(水) 23:14   No:16073     
Title: Re:無題    
構造化にしているのでどうすれば関数化すればいいのかわかりません。

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

Name: すく  ..ぴよぴよ(92ポイント)   Date: 2008/04/30(水) 23:17   No:16074     
Title: Re:無題    
関数の返り値をポインタで返せばいいんじゃない?
あと0以下かつ100以上になってるけど、これでいいのかい?


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

Name:  ..ぴよぴよ(314ポイント)   Date: 2008/04/30(水) 23:20   No:16075     
Title: Re:無題    
すいません言葉だけじゃ理解ができない・・・・・
あと人数は0以降100未満の中で入力しよう思っています。
つまり2桁で


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

Name: すく  ..ぴよぴよ(218ポイント)   Date: 2008/04/30(水) 23:33   No:16076     
Title: Re:無題    
0以下100以上でbreakなら
0>=nin || nin <=100だったような。

&&だと〜かつ〜ならだよ。

構造体を
typedef struct 名前{
int a;
char b;
} data;
とか、typedefを使って構造体に型名をつけてあげて

関数(data *aa){


}
とか、構造体のアドレスを受け取って、関数内で構造体のアドレスに計算結果を書き込んであげるとか。

わかりにくかったらごめん。


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

Name: 管理人 [URL]  ..伝説のハッカー(570,329ポイント)   Date: 2008/05/01(木) 00:22   No:16081     
Title: Re:無題    
これは学校の宿題ですか?
まず質問者さんのスキルを知りたいのですが、どの程度まで理解されてますか?

あんまりいっぺんに作ろうとすると、混乱するので一つずつ作ってみましょう。

下にかなり簡単にしたプログラムを作ってみました。
これはすぐわかりますよね?

単に3回入力させ、それの合計を計算し、3で割って平均を求めています。


#include <stdio.h>

int main(){
int i,total;
int sincho[3];

for(i=0;i<3;i++){
printf("%d人目の身長を入力して下さい\n",i);
scanf("%d",&sincho[i]);
}

total=0;
for(i=0;i<3;i++){
total += sincho[i];
}
total/=3;

printf("身長平均:%d\n",total);

return 0;
}


このプログラムに体重も計算出来るように追加出来ますか?
出来ればそれを構造体にし、関数化し・・とやっていけばいいと思います。

 

もしそう思っていなければすみませんが、
コードだけ提示して短文で質問される質問者さんの多くは、
どうせやっても出来ないと諦めているとか、答えが解ればいいとか、思われている人が多いと思いますが、
少しずつやっていけば必ず出来ます。わからなければどこが解らないかを詳しく提示し、
自分でもウェブ上で勉強してみて下さい。


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



Name: tkmakwins15 [URL]  ..比類無きプログラマー(71,187ポイント)   Date: 2008/04/27(日) 19:34   No:15964       
Title: DxアーカイブのGUIソフトを作ってみました。    
Dxライブラリ付属のアーカイバであるDxアーカイブをGUI上で動くようにしたソフトを作ってみました。

LZH版
ZIP版

Dxアーカイブには簡易的なパスワードによる暗号化機能もあり、とても有用なものなのですが、パスワードを設定するにはコマンドラインを操作しなければならず、コマンドラインを使えない人のなかには、使えずに困ってる人もいる事だと思います、これはそれをGUI上で動くように設計しました。
GUI上で動くといっても、Dxアーカイブをラップしたようなソフトですので、Dxアーカイブ本体は必要です。


これについて批評をお願いします。


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


Name: Justy  ..ハッカー(190,064ポイント)   Date: 2008/04/27(日) 21:55   No:15973     
Title: Re:DxアーカイブのGUIソフトを作ってみました。    
 そのリンクをクリックしても上記の画面が表示されて、DLできなかったです。
 一端 URLをコピーして直接アクセスしたら DLできました。

 一応ご報告まで。


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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(71,227ポイント)   Date: 2008/04/27(日) 22:35   No:15976     
Title: Re:DxアーカイブのGUIソフトを作ってみました。    
あれ…、URL自体は間違っていないはずなのに…

では添付にします。


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

Name: Justy  ..ハッカー(190,306ポイント)   Date: 2008/04/28(月) 00:26   No:15977     
Title: Re:DxアーカイブのGUIソフトを作ってみました。    
>URL自体は間違っていないはずなのに…
 直リン禁止なのかもしれません・・・。



>これについて批評をお願いします。
 便利そうですね。
 もう少し、改良すれば結構使えそうです。
 とりあえず一通り試してみました。


・ リストの保存機能
 複数のディレクトリからかき集めて1つのアーカイブファイルを作る場合とかで
何度も同じものをパックし直すときに、過去のパックリストが再利用できると楽です。

・ リストの削除を DELETEキーで
 わざわざメニューから削除するのも面倒なので、DELETEキーで削除できると楽です。

・ ドロップ&ドロップ領域
 これって要りますか?
 この領域以外でもなくても普通にD&Dすれば追加できるので、
画面の余白にでもそう書いておくだけでいいのではないでしょうか。

・ パスワード
 DxArchiveはデフォルトではパスワードは 12文字なのですが、
12文字を越えて入力できてしまうようです。
 ちなみにメニューの「パスワードの指定」は機能しないようです。

・ テンポラリ
 一端アーカイブ化するファイルをアプリの直下にコピーしているようですが、
アプリ直下じゃなく、OSのテンポラリとかを使った方がいいのではないでしょうか。

 というのも、先ほど試したとき作ったアーカイブを DxaDecode.exeで
アプリの直下にデコードして展開されたディレクトリ・ファイルがそこにあったのですが、
このツールで再度アーカイブを作成したときに上書き・削除されてしまいました。

・ メニューを除く文字が大きい
 うちだけなのかもしれませんが、メニューの文字と大きさが
合ってないです。
 もう少し小さい文字でもいいのではないでしょうか。


 と、こんなところでしょうか。


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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(71,550ポイント)   Date: 2008/04/28(月) 08:12   No:15983     
Title: Re:DxアーカイブのGUIソフトを作ってみました。    
>リストの保存機能

なるほど、書庫のリストの保存機能は確かに欲しくなりますね。

>リストの削除を DELETEキーで

うーん、「アクセラレータ」について勉強してみます。

>ドロップ&ドロップ領域

リストボックスに保存した場合、正しく動作しません。そこは改良できるかと思います。

>パスワード

そうですね。そこは全然親切ではないですね…。
メニューのほうは、そもそも違う事に使うはずだったのですが、未実装だった事もあり、書き換える事を忘れてました。

>テンポラリ

テンポラリファイルのファイル名を得られるAPI関数がありましたので、それを使わせていただきます。

>メニューを除く文字が大きい

CreateFontさえ何とかなれば…SendMessage(hWnd/*コントロールのハンドル*/,WM_SETFONT,hFont,0)で大丈夫のはずですが…
全然うまく行きません。


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

Name: バグ  ..比類無きプログラマー(84,762ポイント)   Date: 2008/04/28(月) 08:53   No:15984     
Title: Re:DxアーカイブのGUIソフトを作ってみました。    
初回のソフト起動のあとに出てくるファイル操作用のダイアログを表示したまま、本体のWindowを終了させると妙な動きになります。

設定用のiniファイルが無い場合にのみ起こる現象のようです。


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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(71,703ポイント)   Date: 2008/04/28(月) 12:30   No:15987     
Title: Re:DxアーカイブのGUIソフトを作ってみました。    
>本体のWindowを終了させると妙な動きになります。

仕様です。その部分のコードはどうなっているかというと…

if(PathFileExists(inifullpath.c_str())==0){
do{
dxapath=SetUpFile(inifullpath.c_str());
}while(dxapath=="");
}else{
ifstream ini(inifullpath.c_str());
getline(ini,dxapath);
}

変数名は別のところで宣言定義してます。動作としては、iniファイルにDxEncode.exeのパスが入るまで
(エラーの場合SetUpFileは空文字列を返す)設定をやり直させるようになっています。


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

Name: バグ  ..比類無きプログラマー(85,029ポイント)   Date: 2008/04/28(月) 13:06   No:15988     
Title: Re:DxアーカイブのGUIソフトを作ってみました。    
なるほど仕様でしたか、失礼しました…m(_ _)m

※ここからは個人的な趣味の話なので、聞き流してもらってかまいません。

>>変数名は別のところで宣言定義してます。動作としては、iniファイルにDxEncode.exeのパスが入るまで
>>(エラーの場合SetUpFileは空文字列を返す)設定をやり直させるようになっています。

それならば、モードレスダイアログを使用して処理するのではなく、モーダルダイアログを使用して、設定中は他のWindowにフォーカスが移らないようにして、設定が終わるまではダイアログ自体を終了できないようにするべきではないかと思います。その方が自然な動きではないかなぁ…と個人的には思います。


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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(71,568ポイント)   Date: 2008/04/28(月) 23:16   No:16002     
Title: Re:DxアーカイブのGUIソフトを作ってみました。    
>モードレスダイアログを使用して処理するのではなく、モーダルダイアログを使用して、設定中は他のWindowにフォーカスが移らないようにして、設定が終わるまではダイアログ自体を終了できないようにする

コモンダイアログでもそのようなことは可能なのでしょうか?


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

Name: GPGA  ..熟練のプログラマー(48,345ポイント)   Date: 2008/04/29(火) 00:52   No:16005     
Title: Re:DxアーカイブのGUIソフトを作ってみました。    
>コモンダイアログでもそのようなことは可能なのでしょうか?
OPENFILENAME構造体のhwndOwnerメンバにメインウインドウのハンドルを指定モーダルになりませんかね?(試していない)


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

Name: tkmakwins15 [URL]  ..比類無きプログラマー(71,549ポイント)   Date: 2008/04/30(水) 23:53   No:16077     
Title: Re:DxアーカイブのGUIソフトを作ってみました。    
モーダルになりませんでした。何か別の策を練って見ます。

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



Name: カイ  ..ぴよぴよ(304ポイント)   Date: 2008/04/30(水) 17:19   No:16049       
Title: 二次元配列の初期化    
質問させて頂きます。
 Borland C++を使っていて、二次元配列を宣言と同時に初期化はできるのですが、
 できれば好きなときに数値を変更したくて下記のソースを作りましたが、うまくいきません。
 (解決のために新たに作成したファイルなのでプログラム自体の意味はありません。)

エラー E2188 test.cpp 22: 式の構文エラー(関数 RESET() )
と出てしまいます。

どこが原因なのかご指導お願いします。m(_ _)m

#include "DxLib.h"
int map[2][3];
void RESET(void);

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}

RESET();

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

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

void RESET(void)
{
map[2][3]
={1,2,3,
4,5,6 };
}


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


Name: ibis  ..初心者(6,332ポイント)   Date: 2008/04/30(水) 18:05   No:16051     
Title: Re:二次元配列の初期化    
2次元配列の初期化の構文は、

int map[2][3]
 ={{1,2,3},
  {4,5,6}};

ですよ。


それから、初期化構文が使えるのは宣言した時だけなんですね。
だからRESET関数の中で初期化したいのなら、

map[0][0] = 1;
map[0][1] = 2;
//以下略

みたいに、一つずつ代入するしかないです。


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

Name: カイ  ..ぴよぴよ(405ポイント)   Date: 2008/04/30(水) 18:27   No:16054 解決!     
Title: Re:二次元配列の初期化    
速い返事をありがとうございます。

>>それから、初期化構文が使えるのは宣言した時だけなんですね。
そうですか…残念です。
このソースのように規則性のある初期化をする予定はないので、
最初に宣言するのが妥当みたいですね。
どうもありがとうございました。


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

Name: lbfuvab  ..ぴよぴよ(387ポイント)   Date: 2008/04/30(水) 22:26   No:16068     
Title: Re:二次元配列の初期化    
初期状態の配列をもう一つ用意しておき
代入するのはどうでしょう。
int map[2][3]={{1,2,3},{4,5,6}};

const int reset_map[2][3]={{1,2,3},{4,5,6}};

void reset(){
int i,j;

for(i=0;i<2;i++)
for(j=0;j<3;j++)
map[i][j]=reset_map[i][j];
}


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



Name: たまひよ  ..ぴよぴよ(44ポイント)   Date: 2008/04/30(水) 11:13   No:16026       
Title: バイナリファイルの書き換え    
はじめまして。
Cを初めて半年程の超初心者です。
使用しているOSはPC-DOS(Ver7.0)です。
コンパイラはVZエディタです。
(古すぎてご存じの方はいらっしゃらないかも)

バイナリファイルのデータを書き換えて保存したいのですが、
上手くいきません。
今あるデータを部分的に書き換えて保存する方法を教えてください。

今やっているのはBMPのデータから必要な部分を抜き出し・変更・付け足し等してから、
新規ファイルに書く事です。
書き出す順序が違うので、ファイルの好きな場所に書き込みしたいのですが、
fopenで"a"にすると追記"w"にするとファイルを消してしまうので困っています。
データの変更や読み取りは出来ています。

※一度全てのデータをどこかに保存するにはデータ容量が大きい場合があるので
 出来ればファイルに書き出した方がいいと思うのですが。






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


Name: toyo  ..初心者(8,594ポイント)   Date: 2008/04/30(水) 11:28   No:16030     
Title: Re:バイナリファイルの書き換え    
ファイルサイズが同じで一部の変更だけなら
"rb+"でオープンしてfseek( )でファイルポインタを移動すればいいでしょう
挿入や削除の場合はランダムアクセスは無理な気がします


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

Name: たまひよ  ..ぴよぴよ(167ポイント)   Date: 2008/04/30(水) 11:55   No:16033 解決!     
Title: Re:バイナリファイルの書き換え    
ご回答ありがとうございます。
"rb+"でopenで開くとfseekで移動し書き込みが出来るんですか!

すみません全く知らずに一生懸命"ab"で開いてfseekさせて書き込みを
行ってました(勿論ちゃんと書けなかったです)

今試した処ちゃんと思った部分が書き換えられていました。
とても簡単な事だったんですね。

本当にありがとうございました。
もっと高度な質問が出来るように頑張って勉強します。



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

Name: やそ  ..熟練のプログラマー(44,274ポイント)   Date: 2008/04/30(水) 12:41   No:16039     
Title: Re:バイナリファイルの書き換え    
VZエディタはあくまでエディタです。
Cのコンパイル機能なんて無かったのでは?
(VZエディタ経験あります^^)
MS-DOS3.3や5.0の頃に
VZやらFD(ファイラー)やらを駆使してZ80アセンブラやらCやらBASICやらで遊んでましたから^^

懐かしさのあまりツッコミを入れてみました^^;


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

Name: たまひよ  ..ぴよぴよ(363ポイント)   Date: 2008/04/30(水) 13:44   No:16042     
Title: ?!    
やそ様
突っ込みありがとうございます(?(^^:))
あれ?えーとじゃぁ何でコンパイルしてるんでしょう・・・。
(って言われても困りますよね・・・)

c:>cl /W3 /AH /F 1500 ○○.c
って書いてコンパイルしてるのは一体・・・・(--;
初心者過ぎて全く理解してないです・・・すみません。
PC-Dosにコンパイラ付いてるでしょうかね?


でもVZエディタご存知の方がいらっしゃるとは嬉しいです。


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

Name: YuO  ..上級者(20,155ポイント)   Date: 2008/04/30(水) 13:54   No:16043     
Title: Re:?!    
その,clっていうのがコンパイラです。
おそらく,Microsoft C Compilerでしょう。
コンパイルするときに名前とバージョンが一番最初の行に表示されるはずです。

現行のVisual Studioでもclという名前やコンパイラのバージョンはMSC時代から受け継いでいます。
# 最新のVisual Studio 2008のclのバージョンは15。


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

Name: やそ  ..熟練のプログラマー(43,948ポイント)   Date: 2008/04/30(水) 14:35   No:16044     
Title: Re:?!    
DOSのパッケージの中にあるCコンパイラですね。Yuoさんの言われているコンパイラで間違いないと思います。

コンパイルのパラメータやら何やらを毎回入力するのが面倒でBATファイル作りまくったです^^;
AUTOEXEC.BATやCONFIG.SYSの効率化&高機能化に燃えてました(笑)

VZはWin環境になってからはWZEditorになったかな。
PC-9801全盛期にVZを学校で、趣味ではMIFESを良く利用してました。
他にはワープロソフトで一太郎V3。
当時のFD(ファイラ)は非常に使いやすくて軽くて便利でした。
メモリ常駐たしか0Kですよ?!今ではありえません(笑)
(まあ、からくりはありますが^^;)

名前は出せませんが、当時はいろんなソフト(ゲーム)の解析をしたものです^^


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

Name: たまひよ  ..ぴよぴよ(464ポイント)   Date: 2008/04/30(水) 14:58   No:16045     
Title: (^^;    
YuO様

仰る通りMicrosoft C Optizing Compiler Version 6.0と書いてありました。
今はVer15なんですね。

勉強になりました。


やそ様
Visual Studio2005もあるのですが、Visualな所より基本を学ぶ為に使っています。
とてもシンプルで分かりやすいです(^^;

他に何もソフトを乗せてないので暴走しても電源OFFで済みますし(--;
ちょっと書いてすぐコンパイル出来るところがいいです。


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

Name: バグ  ..比類無きプログラマー(85,301ポイント)   Date: 2008/04/30(水) 16:03   No:16046     
Title: Re:バイナリファイルの書き換え    
最近(といっても1年程前)、DOSのソフトの改造の仕事があって、先輩に教えてもらいながら、VZやFD、FMを使いながら作業したのを思い出しました(苦笑)
個人的にはディレクトリの管理が楽なので、FDよりはFM派ですね…って、横やり失礼しました(^_^;)


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

Name: たまひよ  ..ぴよぴよ(724ポイント)   Date: 2008/04/30(水) 16:34   No:16047     
Title: \(^0^)/嬉しいです!    
バグ様
DOSソフトを改造ですか。
Windows全盛期の今でもDosソフトの改造をされたりするんですね。
(うちもそうなんですが(^^;)

FDやFMはさわったこと無いですが、VZは使いやすいです。
ただ、エラーメッセージやワーニングが全て英語なので泣きながら翻訳してます(^^;
(だいぶ慣れてきました)←エラーが多いからかもしれません(--;

誰も知らなかったらどうしようなんて思ってたんで、コメントして貰えて嬉しいです。


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



Name: GR  ..ぴよぴよ(289ポイント)   Date: 2008/04/27(日) 07:50   No:15949       
Title: 2次元配列の使い方    
はじめまして。初めて登校させていただきます。
現在、宿題で2次元配列・ポインタ関数を使って、
入力年月日の前日・翌日を表示させるプログラムを製作しています。
ところが、2次元配列を使って各月の日数を格納させたいのですが、
配列の要素値が全て0のままです。
以下のやり方では無理なのでしょうか?
解説を加えてくださると非常にありがたいです。
(現在の作業はカレンダーを配列に格納するのみです。
また曜日は気にしなくて良いとの事なので、曜日は導入しておりません)
宜しくお願いいたします。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void yesterday(int *a,int *y,int *m,int *d);
void tomorrow(int *a,int *y,int *m,int *d);
void uruudosi(int *a,int *y);

int main(void){
int b[13][33]={0};
int y;
int m;
int d;
int a;

for(m=1; m<13; m++)
{
switch(m)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
for(d=0; d<32; d++)
{
b[m][d]=d;
}break;
case 2:
for(d=0; d<30; d++)
{
b[m][d]=d;
}break;
case 4:
case 6:
case 9:
case 11:
for(d=0; d<31; d++)
{
b[m][d]=d;
}break;
}
printf("%d",b[11][4]);//ここが0なので、格納されてないのかなと。
scanf("%d",&y);
scanf("%d",&m);
scanf("%d",&d);
printf("入力された年月日は%d年%d%月%d日",y,m,b[m][d]);
return 0;
}


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


Name: フリオ  ..上級者(22,747ポイント)   Date: 2008/04/27(日) 09:49   No:15951     
Title: Re:2次元配列の使い方    
 見やすいように、ソースは、"pre"タグで字下げしてほしい。


 とりあえずこれで、当方の環境(Win2000 SP4、Borland C++ 5.82 for Win32)
では問題なくコンパイル、実行できました。


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

void yesterday(int *a, int *y, int *m, int *d);
void tomorrow(int *a, int *y, int *m, int *d);
void uruudosi(int *a, int *y);

int main(void)
{
int b[13][33] = {0};
int y;
int m;
int d;
int a;

for(m = 1; m < 13; m ++)
{
switch(m)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
for(d = 0; d < 32; d ++)
{
b[m][d] = d;
}break;
case 2:
for(d = 0; d < 30; d ++)
{
b[m][d] = d;
}break;
case 4:
case 6:
case 9:
case 11:
for(d = 0; d < 31; d ++)
{
b[m][d] = d;
}break;
} /* 修正 */
}
printf("%d", b[11][4]);//ここが0なので、格納されてないのかなと。
scanf("%d", &y);
scanf("%d", &m);
scanf("%d", &d);
printf("入力された年月日は%d年%d月%d日", y, m, b[m][d]); /* 修正 */
return 0;
}

 
 
> 入力年月日の前日・翌日を表示させるプログラムを製作しています
 なら、一年の全ての日付を準備しなくでも、
一次元配列で、各月の日数だけわかれば十分です。
12月31日の翌日は翌年の1月1日、1月1日の前日は前年の12月31日、
それ以外の各月の、末日の翌日は翌月の1日、1日の前日は前月の末日。
それ以外は、日付を +1 または -1 するだけです。
 


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

Name: GR  ..かけだし(1,183ポイント)   Date: 2008/04/27(日) 20:44   No:15966     
Title: Re:2次元配列の使い方    
なるほど、switchの中括弧が抜けてたのですね。
どうもご迷惑をおかけしました。

当初フリオさんが仰ってた通り、1次元配列でやろうと思っていたのですが
向こうから2次元配列とポインタ関数を使うように釘を刺されておりましてw
そんなわけで、ポインタ関数を使った式もやってみたのですが・・。
エラーは無いのに動かない、最悪の事態になりました(汗)
ソースは以下の通りです。
おそらくポインタ関数の所がおかしいのでしょうが・・。
御指摘宜しくお願いいたします(汗)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void yesterday(int *a, int *y, int *m, int *d, int b);
void tomorrow(int *a, int *y, int *m, int *d, int b);
void uruudosi(int *a, int *y);

int main(void)
{
int b[13][33] = {0};
int y;
int m;
int d;
int a;

for(m = 1; m < 13; m ++)
{
switch(m)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
for(d = 0; d < 32; d ++)
{
b[m][d] = d;
}break;
case 2:
for(d = 0; d < 30; d ++)
{
b[m][d] = d;
}break;
case 4:
case 6:
case 9:
case 11:
for(d = 0; d < 31; d ++)
{
b[m][d] = d;
}break;
}
}
//

printf("年を入力してください\n");
scanf("%d", &y);

uruudosi(&y,&a);//

printf("月を入力してください\n");
scanf("%d", &m);
printf("日を入力してください\n");
scanf("%d", &d);

printf("入力された年月日は%d年%d月%d日", y, m, b[m][d]);
yesterday(&a,&y,&m,&d,b[13][33]);//

return 0;
}

void uruudosi(int *a, int *y)
{
if(*y % 4 == 0 && *y % 100 != 0)
{
*a = 1;
}
else
{
if(*y % 400 == 0)
{
*a = 1;
}
else
{
*a = 0;
}
}
}

void yesterday(int *a, int *y, int *m, int *d,int b[13][33])
{
*d = *d -1;
if(b[*m][*d] == 0)
{
*m = *m - 1;
if(*m == 0)
{
*y = *y - 1;
*m = 12;
}
else
{}
}
else
{}
for(*d = 1; *d < 32; *d++)
{
if(b[*m][*d] == 0)break;
}
*d = *d - 1;
if(*m == 2 && *d == 29)
{
if(*a < 1)
{
*d = *d - 1;
}
else
{}
}
else
{}
}

void tomorrow(int *a, int *y, int *m, int *d, int b[13][33])
{
int s;
for(s = 0; s < 1; s++)
{
*d = *d + 1;
if(b[*m][*d] != 0)
{
if(*m == 2 && *d == 29)
{
if(*a < 1)
{
*m = 3;
*d = 1;
}
else
{}

}
else
{}
}
else
{
*m = *m + 1;
*d = 1;
if(b[*m][*d] == 0)
{
*y = *y + 1;
*m = 1;
}
else
{}
}
}
}


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

Name: GR  ..かけだし(1,234ポイント)   Date: 2008/04/27(日) 20:47   No:15967 解決!     
Title: Re:2次元配列の使い方    
あれ?タグを押したのですが出来てないですね。
スイマセン、preタグってどうするのでしょうか(汗)


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

Name: 組木紙織  ..熟練のプログラマー(50,346ポイント)   Date: 2008/04/27(日) 21:05   No:15970     
Title: Re:2次元配列の使い方    
"<"pre">" "<"/pre">" : "(半角文字)"であるとする。

で挟めば使えます。

とすぐ上のコードは宣言と定義の型が異なるのでコンパイル不可能です。

一言だけ書いておきます。


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

Name: GR  ..かけだし(1,265ポイント)   Date: 2008/04/27(日) 21:17   No:15971     
Title: Re:2次元配列の使い方    
宣言と定義で型が異なる?
void型宣言がいけない、って事でしょうか?


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

Name: フリオ  ..上級者(22,989ポイント)   Date: 2008/04/28(月) 01:55   No:15980     
Title: Re:2次元配列の使い方    
 組木紙織さんも書いておられますが、
提示された2つのソースは、どちらも当方の環境では、
エラーが出てコンパイルできませんでした。
GRさんは、本当にコンパイルできたのでしょうか。

それから、"ポインタ関数"とはどのようなものでしょうか。
 


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

Name: GR  ..かけだし(1,391ポイント)   Date: 2008/04/28(月) 06:55   No:15982     
Title: Re:2次元配列の使い方    
フリオさんが御指摘下さった所を修正した際に、格納は出来てましたよ〜。
ちなみに、当方はvosual studio C++を使ってます。
で、ソースの問題はそこから関数が無理だったようで・・。

ポインタ関数はメインで使用している複数の変数のアドレスを関数に渡し、
関数で処理した後、メインに戻った際に関数内で処理した値になる・・はず。


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

Name: 組木紙織  ..熟練のプログラマー(50,672ポイント)   Date: 2008/04/28(月) 10:33   No:15985     
Title: Re:2次元配列の使い方    
私はポインタ関数という言葉を初めて聞きましたが、書き込みを見ると
ポインタ関数は引数にポインタ変数を持つ関数であるとGRさんは認識しているようです。
(ポインタ変数を返す関数を同様に呼ぶかどうかは不明です)

上の方に書いてある
void yesterday(int *a, int *y, int *m, int *d, int b);

中の方に書いてある
void yesterday(int *a, int *y, int *m, int *d,int b[13][33])
{
・・・
}
の関数が
名前は同じで引数の型が異なっているのでコンパイルエラーになります。
もう少し詳しく言うと
上側の(宣言時)の引数bはint型を表しているが、
下側の(定義時)の引数bはint型の2次元配列を表しています。

この部分が解消できたとしても、まだ完成するまでに多くの問題があります。
(コードの書き方から、アルゴリズムまで)
宿題ということなので詳しくは言いませんが、ひとつだけ、
C言語の演算子の優先順位を気をつけたことがありますか?




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

Name: GR  ..かけだし(1,463ポイント)   Date: 2008/04/28(月) 20:28   No:15998     
Title: Re:2次元配列の使い方    
演算子の優先順位ですか?
・・上から順番に見ていって、*や/があったらそれが優先的に
計算される、ってぐらいなら・・。
これとは違いますかね?
だとしたらちょっとわかんないです(汗)