|
Name: 山崎 ..かけだし(2,200ポイント)
Date: 2008/11/09(日) 20:36
No:23826
|
|
Title: 外部シンボルが未解決
|
|
毎度お世話になっております、山崎です。
基本的な事柄でしたら誠に申し訳ないのですが、
外部シンボルが未解決というエラーがどうしても解決できないので質問させて頂きます。
BCCディベロッパーを使っております。
グローバル変数も関数もクラスも、宣言と定義を同じファイルの中でしていたのを
別々のファイルで行おうと思い、コードをヘッダファイルとcppファイルに分ける作業をしています。
ヘッダファイルの先頭の方で
extern double PI;
extern bool AKey[3];
extern bool BKey[3];
extern Object obj;//自作したクラス
...
という風にグローバル変数を宣言し、
定義をcppファイルの関数の中で
if(AKey[0]==false && KeyState[KEY_INPUT_NUMPAD3]==true)
AKey[1]=true;
if(BKey[0]==true && KeyState[KEY_INPUT_NUMPAD2]==false)
BKey[2]=true;
...
というようにしています。
グローバル変数を宣言しているヘッダファイルは、複数のcppファイルで
インクルードされています。
これらのファイルをビルドすると、
Error: 外部シンボル '_Object' が未解決(...が参照)
Error: 外部シンボル '_BKey' が未解決(...が参照)
Error: 外部シンボル '_AKey' が未解決(...が参照)
といったようなエラーが発生してしまいます。
どのようにすればこのエラーを取り除くことができるのでしょうか。
皆様のお力におすがりしたく思います。
386ポイント を手に入れた。
|
|
|
|
Name: 組木紙織 [URL] ..熟練のプログラマー(65,499ポイント)
Date: 2008/11/09(日) 20:43
No:23828
|
|
Title: Re:外部シンボルが未解決
|
|
Borland C++ 5.5.1ということは、コマンドラインでコンパイルしているのかな。
file1.cpp
file2.cpp
と2つのファイルに分割しているのなら
bcc32 file1.cpp file2.cpp
のように分割したファイルを空白区切りでコマンドライン引数に渡してみてください。
131ポイント を手に入れた。
|
|
|
|
|
Name: lbfuvab ..初心者(7,893ポイント)
Date: 2008/11/09(日) 20:45
No:23829
|
|
Title: Re:外部シンボルが未解決
|
|
先ず、AKeyとBKeyの実体が存在していません。
適当なcppファイル内で
bool AKey[3];
bool BKey[3];
と宣言してください。
また、問題のcppファイルからObjectクラスの定義が見えていないようです。
後、extern double PI;
は
#define PI 3.14159265
とでもした方がいいと思いますよ。
142ポイント を手に入れた。
|
|
|
|
|
Name: 山崎 ..かけだし(2,265ポイント)
Date: 2008/11/09(日) 20:45
No:23830
|
|
Title: Re:外部シンボルが未解決
|
|
>組木紙織さん
ご返信まことにありがとうございます。
申し訳ないです、エディタではなくコンパイラの名前を貼り付けてしまいました。
正しくは、エディタはBCCディベロッパーです。
誤解を招いてしまい本当に申し訳ございません。
65ポイント を手に入れた。
|
|
|
|
|
Name: 山崎 ..かけだし(2,449ポイント)
Date: 2008/11/09(日) 20:54
No:23831
| 解決!
|
Title: Re:外部シンボルが未解決
|
|
>lbfuvabさん
ご返信まことにありがとうございます。
おっしゃるとおりに適当なcppファイルの先頭付近で
グローバル変数の実態を宣言したところ、
見事にプログラムがファイル分割前と同様に動きました。
なお、
#define PI 3.14159265
についてもこちらの方法をとらせていただきました。
わざわざお教えいただき、本当にありがとうございます。
宣言と定義と実態のしくみがわかって本当に良かったです。
感謝のしようもございません。
184ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(128,989ポイント)
Date: 2008/11/09(日) 21:46
No:23841
|
|
Title: Re:外部シンボルが未解決
|
|
> #define PI 3.14159265
円周率の定義は、普通 math.h にあると思います。
自分で定義するより、既存の math.h をインクルードする方がよいと思います。
同じ結果を得るのであれば、なるべく自分で書くコードを
少なくする方がよいのではないかと思います。
72ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(264,044ポイント)
Date: 2008/11/09(日) 21:54
No:23842
|
|
Title: Re:外部シンボルが未解決
|
|
BCCは math.hに M_PIという円周率の定義がありますね。
MSVCは無かったり、インクルードしただけでは使えなかったりしますが・・・。
2倍のポイントを手に入れた! 72ポイント を手に入れた。
|
|
|
|
Name: Julian ..ぴよぴよ(311ポイント)
Date: 2008/11/09(日) 01:58
No:23789
|
|
Title: ゲームプログラミングの館より
|
|
はじめまして、Julianと申します。
本日より本サイトの『C言語〜ゲームプログラミングの館〜』を参考にゲームプログラムを始めようと思ったのですが、
『0. (導入)DXライブラリを手に入れる。(全てはココから)』の段階で行き詰ってしまい、質問させて頂きたく思います。
// 環境 //
OS:WindowsXP Professional SP3
コンパイラ:VC++ 2008EE
// 質問 //
VC++ 2008EEを導入し、DXライブラリをダウンロード後『DXライブラリの設定』通り設定をして『DxLib.sln』をビルドしました。
(DXライブラリVer2.25の為『DxLib_VC2008_and_2005用.sln』を起動)
しかし、HPどおり全画面で人物が表示されず
『プログラム '(ディレクトリ名)\DxLib_VC2005用.exe'を開始できません』
『指定されたファイルが見つかりません。』
とエラーが出てしまいます。
その後『DXライブラリの設定』を読み返し、再度設定をしても変わる事なくエラーが出ます。
もし宜しければお力添え頂けないでしょうか。
311ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(877,727ポイント)
Date: 2008/11/09(日) 05:24
No:23794
|
|
Title: Re:ゲームプログラミングの館より
|
|
サンプル実行用フォルダの中身は全く変更を加えていないのですね?
DxLib_VC2008_and_2005用.slnを起動し、実行しただけですか?
DXライブラリをコンパイルするための設定が出来ていればそのままコンパイルして実行できるはずです。
もしかしたら解凍ミスか何かの可能性もあるかもしれません。
もう一度新しくDXライブラリをダウンロード後、解凍し、サンプル実行用フォルダにある.slnファイルを開き、
Ctrl+F5を押してそのまま実行してみて下さい。
それでもうまく行かない時は、「プロジェクトに追加すべきファイル_VC用」に入っている全てのファイルを全選択してプロジェクトの「ソリューションエクスプローラー」にドロップしてみて下さい。
それでもうまく行かない時は、エラーメッセージを全てこちらに掲載して下さい。
336ポイント を手に入れた。
|
|
|
|
|
Name: Julian ..ぴよぴよ(6ポイント)
Date: 2008/11/09(日) 12:53
No:23803
|
|
Title: Re:ゲームプログラミングの館より
|
|
管理人様、お早いお返事ありがとうございます。
先の件ですが、ご指摘通り解凍ミスを考慮し、
再度ダウンロード後Ctrl+F5で実行してみたところ、無事実行する事ができました。
ただ、全画面表示になった際に、画面全体が黒く表示されるだけで何も表示されません。
『サンプルプログラム実行用フォルダ』内はまったく触っておらず、
『LoadGraphScreen( 0 , 0 , "test1.bmp" , TRUE ) ;』の通り
『test1.bmp』も同ファイル内に保存されていました。
宜しければ、もう暫くお付き合いお願い致します。
// VGA環境 //
モニタ:acer AL1511
VGA:Radeon4870
6ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(880,911ポイント)
Date: 2008/11/09(日) 16:05
No:23812
|
|
Title: Re:ゲームプログラミングの館より
|
|
う〜ん、困りましたね。それで表示されないはずはないのですが・・。
ビデオカードのドライバの問題もあるかもしれませんが、
とりあえずまずゲームプログラミングの館の3章まで進めてもらえませんか?
3章に「ちゃんと表示できなかった人はこちらで、問題を解消してください。」という記述とリンクが
ありますのでそこまで進めて何も表示されなかったらこちらのリンク先のプログラムを実行してみて下さい。
文字だけはちゃんと表示されるでしょうか。
また、それでもうまく表示されない場合、13章のプログラムを実行するとどうなるかも教えて下さい。
172ポイント を手に入れた。
|
|
|
|
|
Name: Julian ..ぴよぴよ(231ポイント)
Date: 2008/11/09(日) 18:54
No:23820
|
|
Title: Re:ゲームプログラミングの館より
|
|
こんばんは、管理人様。
返信して頂いた内容通り『3. 画像を表示する。』まで進めてみた所
フルスクリーンでは移らなかった0章導入のキャラクターをウィンドウにて表示出来、
またウィンドウ表示で『char.png』のキャラクターが3章の『実行結果』のように表示されました。
(背景は黒でした)
念の為『ちゃんと表示できなかった人は <こちら> で、問題を解消してください。』のリンクを試してみた所、
これも問題なく表示することが出来ました。
13章においても『char.png』のキャラクターを左から右へ動くことを確認致しました。
恐らくフルスクリーン時のみ移らないようなので、
ビデオカードのドライバも最新のものに更新してみましたが、
キャラクターは表示されず、全体が黒の画面のままでした。
ただ、ウィンドウモードでは起動することが確認できましたので、
暫くはこれでプログラムをさせて頂きたいと思います。
この度は貴重な時間を割いての返信ありがとうございました。
それでは、失礼致します。
225ポイント を手に入れた。
|
|
|
|
|
Name: Julian ..ぴよぴよ(738ポイント)
Date: 2008/11/09(日) 20:55
No:23832
|
|
Title: Re:ゲームプログラミングの館より
|
|
13章のプログラムで『ChangeWindowMode( TRUE ) ; // ウィンドウモードに変更 』をコメントアウトすると
フルスクリーンで『char.png』が左から右へ移動しました。
同じプログラムを用いて表示画像を『test1.bmp』に変更した場合も左から右へ移動します。
フルスクリーンで『移動』を確認しましたので、
『0.導入』の静止画像(test1.bmp)はどうかと試してみましたが、動きませんでした。
そこで下記のように13章のプログラムから一部拝借したところ、
『test1.bmp』がフルスクリーン静止画像にて表示されました。
『//追加』の一行下が追加部分です。
// 以下プログラム //
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
// ChangeWindowMode( TRUE ) ;//ウィンドウモードに変更する関数
if( DxLib_Init() == -1 ) return -1;//初期化処理する関数
//追加
SetDrawScreen( DX_SCREEN_BACK ) ; // 描画先を裏画面に設定
//追加
ClearDrawScreen();
LoadGraphScreen( 0 , 0 , "test1.bmp" , TRUE ) ;//画像を表示する関数
//追加
ScreenFlip() ;
WaitKey() ;//何か入力があるまで待つ関数
DxLib_End() ;//終了処理をする関数
return 0 ;
}
507ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(881,257ポイント)
Date: 2008/11/09(日) 21:12
No:23835
|
|
Title: Re:ゲームプログラミングの館より
|
|
13章のプログラムが動けば問題ないです。
というのも、13章までは単なる入門用のプログラムなので、実際にゲーム制作などでは使わないプログラムなのです。
特に13章の直前のプログラムは、何故13章のようなプログラムをかかないといけないかという説明で、
悪いプログラムの書き方の紹介のようなものなので、問題ありません。
過去に13章以前のプログラムは動かないけど、13章からは動くという報告がありました。
もし気になれば本家の掲示板で聞いていただいたらいいかもしれません。
気にならない場合は、13章のプログラムを使ってもらったら大丈夫だと思います。
なお、プログラムコードはプレタグを使ってもらえると読みやすくなります。
(詳しくは規約をご覧下さい)
250ポイント を手に入れた。
|
|
|
|
|
Name: Julian ..ぴよぴよ(862ポイント)
Date: 2008/11/09(日) 21:26
No:23837
| 解決!
|
Title: Re:ゲームプログラミングの館より
|
|
管理人様
最後までお付き合い頂き誠にありがとうございます。
13章と13章以前のプログラムにつきましては、これから勉強してまずは自分で考えてみようと思います。
プログラムコードをプレタグを使用せず記載してしまった事は申し訳ありませんでした。
今後記載するにあたり必ずプレタグを使用させて頂きます。
これからも本サイトにてお世話になることがあると思いますが、
その際には宜しければご教授頂ければ幸いです。
それでは、失礼します。
124ポイント を手に入れた。
|
|
|
|
Name: えっと ..ぴよぴよ(157ポイント)
Date: 2008/11/09(日) 09:57
No:23798
|
|
Title: 画像サイズ
|
|
はじめまして。C言語始めたばかりの初心者です。
龍神録プログラミングの館のProjectフォルダのdat,imgの中にいくつか画像が保管されていますが、それらの画像の大きさが全画面の大きさ(1024×768等)に比べて小さいように思います。
自分で描いた画像を保存する場合、その大きさに合わせなければいけないのですか?
そうした場合、ウィンドウモードでは良くても、全画面モードにしたときにぼやけると思うのですが。
(全画面で実行してみましたが、よく分かりませんでした。)
157ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(880,739ポイント)
Date: 2008/11/09(日) 16:01
No:23811
|
|
Title: Re:画像サイズ
|
|
>えっとさん
初めまして。こんにちは。
全画面の大きさとゲーム画面とは関係ありません。
例えば、「640x480の大きさでゲームを作っているのに、1024×768のモニタで遊んだらゲーム画面の大きさがかわってしまった」なんてことになったら困ります。
もしそうならあらゆるモニタサイズにあわせた個別な処理をしないといけないことになります。
そうではなくて、この場合、640x480のサイズの画像を1024×768の大きさに引き伸ばしたような形になっているのです。
もし1辺が2倍に増えたのなら、4ピクセルで元の1ピクセルを表現することになるので、
かなり荒く見えます。
ただし、マシンの計算能力の問題や、モニタサイズの問題などから普通640x480で簡単なゲームは作られます。
もしキレイなゲームを作りたければこのサイズを大きくしてやればいいでしょう。
デフォルトサイズは640x480ですから、このサイズに合わせて画像を用意して下さい。
また、用意した画像はいくらでもプログラムで引き伸ばしたり縮めたり出来るので、
必ず用意した画像サイズで描画されるというわけではありません。
もしこの説明でもよくわからなければまた聞いて下さい。
279ポイント を手に入れた。
|
|
|
|
|
Name: えっと ..ぴよぴよ(247ポイント)
Date: 2008/11/09(日) 19:40
No:23823
| 解決!
|
Title: Re:画像サイズ
|
|
>管理人さん
こんばんは。大変分かりやすい説明ありがとうございます。
ゲーム画面の概念を理解することができました。
640×480のサイズで作ると、大きな画面で遊ぶ場合、どの程度荒く見えてしまうのか(気になる程荒くなるのか)心配ですが、おっしゃったようにデフォルトサイズに合わせて画像を用意しようと思います。
90ポイント を手に入れた。
|
|
|
|
Name: 山田 ..かけだし(1,150ポイント)
Date: 2008/11/09(日) 12:59
No:23804
|
|
Title: 強制終了する
|
|
GameMain()のコメントアウトを外すと強制終了してしまします。
またFPSを計測したいのですが0から変化がないです><
どこが間違えているか指摘していただけないでしょうか?
74ポイント を手に入れた。
|
|
|
|
Name: Mist ..プログラマー(31,237ポイント)
Date: 2008/11/09(日) 14:05
No:23806
|
|
Title: Re:強制終了する
|
|
> (1000 / FPS_MAX > PassTime)? FPSWait(1000 / FPS - PassTime) : FPSWait(0); // 待つ。
この式だとFPSが0の時ゼロ割例外が発生する。
で、FPSの値はFPSCount関数で更新されるけど、GameMainが実行されるまでは値が更新されてないようだから
FPSはたぶん0。
StartTimeとEndTimeは同じになるからPassTimeも0。
FPSWait(1000 / FPS - PassTime)でゼロ割発生させて終了。
かな?
FPSに変化がないのはメインループの外側にFPSCountがあるからでは?
151ポイント を手に入れた。
|
|
|
|
Name: Mist ..プログラマー(30,761ポイント)
Date: 2008/11/07(金) 18:55
No:23659
|
|
Title: 質問テンプレ
|
|
最近、規約を全く読んでいない(と思われる)丸投げ質問が増えたような気がするのは私だけでしょうか?
で、規約を読んでいて思ったのですが、規約の最初に質問用のテンプレがあれば現状よりは改善される
のではと思いました。
規約のページを開くことすらしないようなやつは論外としても、規約のページは開いてみたが長すぎて
読む気にならないという人、読んだけども質問書いているうちに忘れちゃったという人でも、
最初にテンプレがあってこの形式での質問を推奨とすれば、それに合わせてくれるように思います。
以下は私なりにここの規約に合わせて作ってみたものです。
●質問テンプレ案
[1] 質問文
ソースコードを記載する場合は<pre></pre>で囲みましょう
各館のサンプルに対する質問の場合、章番号等を記載しましょう
[2] 環境
[2.1] OS : Windows, Linux等々
[2.2] コンパイラ名とバージョン: VC++ 2008EE, Borand C++, gcc等々
[2.3] 言語 : C or C++ or その他
[3] その他
・あなたのC/C++に対する理解度
・DXライブラリ使用の有無
・環境についての補足事項(MFC使用、C++/CLI使用、外部DLL、Lib使用等)
346ポイント を手に入れた。
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(69,815ポイント)
Date: 2008/11/07(金) 19:53
No:23662
|
|
Title: Re:質問テンプレ
|
|
質問フォームを作って、テンプレートの使用を強制しない限り、ほとんど焼け石に水のような気がします。
> 規約のページは開いてみたが長すぎて読む気にならないという人
回答者が自分の質問文を読んでもらおうというのに、自分が規約を読む気にならないというのも論外ですね。
2倍のポイントを手に入れた! 96ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(876,952ポイント)
Date: 2008/11/08(土) 01:59
No:23714
|
|
Title: Re:質問テンプレ
|
|
そうですね。最近特に規約を読んでいない人が多いなと私も思っていました。
ですので、上に赤字で規約を読むことを促すなど変更してみたのですがダメなようです;
テンプレの件いい案ですね。
あまりに色んなことに対処出来るように規約を作りこんでしまった結果、
どこかの保険会社の規約のようになってしまいました。
回答者の立場としては、規約くらい読んで欲しいと思うところですが、
実際これだけの量読むのはだるいし、急いでいる時なんかは難しいかもしれませんよね。
テンプレの件は是非採用させていただこうと思います。
現在規約に良い質問例は書いてあるのですが、ここまで読んでくれる人はあまりいらっしゃらないようですね。
また、もう少し規約を読みやすくするなど私側の努力も必要なようです。
もっと最小限読んで欲しい項目をより読みやすくするよう検討します。
今回アドバイス頂きありがとうございました。
また、何か良い案があればアドバイスお願いします。
240ポイント を手に入れた。
|
|
|
|
|
Name: dic ..初心者(6,345ポイント)
Date: 2008/11/08(土) 11:21
No:23731
|
|
Title: 提案ですが
|
|
失礼ながら提案ですが
新規投稿の時に そういった最低限の情報を入力する項目などがあれば
いいのではないでしょうか?
2倍のポイントを手に入れた! 66ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..上級者(20,295ポイント)
Date: 2008/11/08(土) 11:27
No:23732
|
|
Title: Re:提案ですが
|
|
レンタル掲示板なので入力フォームの項目を増やすというのは無理でしょうね
CGIやPHPで別に入力フォームを作ってそれ経由で追加項目を本文コメントに追加してこの掲示板にPOST
とかなら出来そうですね。
68ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(71,136ポイント)
Date: 2008/11/08(土) 12:31
No:23734
|
|
Title: Re:提案ですが
|
|
> レンタル掲示板なので入力フォームの項目を増やすというのは無理でしょうね
JavaScriptで、質問テンプレートに沿った入力を行わせるためのダイアログを出すことは可能だと思います。
ただし、JavaScriptが無効だと使えませんし、ブラウザにも依存します。携帯電話からの質問も無理になります。
あるいは、いったんCGI等で掲示板のページを読み込んで加工してから表示させるかですが、URLが変わりますね。
システム的に対応できなければ運用で対応するしかありません。
ルールを守らなければ期待する結果が得られないことを、質問者さんが察知できるようにするのが望ましいのではないでしょうか?
少なくともプログラミングをやろうとする人であれば、ルールどおりにやらなければ思い通りにならないことぐらい分かってしかるべきですし、分からない人には分からせてあげることも必要かと思います。
2倍のポイントを手に入れた! 422ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(124,720ポイント)
Date: 2008/11/08(土) 12:54
No:23737
|
|
Title: Re:質問テンプレ
|
|
一部の質問者の方は、自分が何を分かっていないのかを理解してなかったり、何ができるのかを把握してないので、何について聞きたいのかすら曖昧だったりしますよね。
時間に余裕があったり、気が向いたりした時は、誘導尋問のように受け答えをして細かく聞き出したりもしますが、毎回は無理ですしね。こちらが飽きてサンプルを提示してしまったりもしますし(^_^;)
質問者がルールを守るのは当然ですが、回答者側にも多少の余裕は必要かとは思います。私みたいに辛抱足らずだと向いてないかもしれません(苦笑)
225ポイント を手に入れた。
|
|
|
|
|
Name: 究極の初心者 ..中級者(12,043ポイント)
Date: 2008/11/08(土) 14:18
No:23743
|
|
Title: Re:質問テンプレ
|
|
新規投稿されると、名前、MAIL、URL、タイトル、コメント、添付という項目が出ますよね。
実際に可能なのかはわかりませんが、何人かの方も言ってらっしゃいますように
コメントが本文入力になるわけですので、このコメントにあらかじめ
「1.自分の使用している環境は何で
2.今の自分のC言語知識はこの程度で
3.何をしたくて
4.どう取り組んだのか
5.そして、今何がわからなくて、何が知りたいのか
pre
プログラムは必ずここに書いてください
/pre
」
*<pre>の<>は、つけると表記されないため、あえて消しました。
っと書いておくと、環境等を書き忘れることはないと思います。
つまり、あらかじめ「」の中身をコメント欄に表記しておくことですね。
それでも、中には、1〜5をすべて消して、規約無視のことを書く人はいるとは思いますが、
多くの方は、これに沿って質問していくとは思います。
ただまぁ、正直難しいところではありますよね。
完璧に守らせるというこは、不可能なことなことですから、
バグさんもおっしゃってますが、ある程度、受ける側にも余裕が必要なことではあるんだろうなぁとは思います。
510ポイント を手に入れた。
|
|
|
|
|
Name: ムンバ ..初心者(8,261ポイント)
Date: 2008/11/08(土) 21:40
No:23759
|
|
Title: Re:質問テンプレ
|
|
こんばんは。お世話になります。
いつもご解説頂き、ありがとう御座います。<(_ _)>
ぶら下がり&雑談です。
今日は、C言語の参考書の「for文の入れ子」というのを勉強したのですが
条件式の i と j (←入力文字)を書き間違えて実行してしまったら・・・
C言語初の無限ループを体験してみました〜♪(激汗
実行結果:1分くらい、ぼぉ〜っと眺めてましたがプログラムが止まらない〜!
ので、手動で終了しました。<気を付けます。^^;
>(例によって誤字脱字も^^;)
「規約と注意事項」を職場と自宅で何度も熟読してみました。(笑
(サンプルソースの間違いは、私には解りませんが)
誤字脱字、探せませんでした。完璧だと思います。^^
ただ・・・「ソースコード投稿時はタグを使う(2行目略)」などのpngファイルの部分なのですが
ここにカーソルを合わせて、左クリックしてしまったのは私だけでしょうか?^^;
「カチっ!」とか音がして、何処かに飛ぶ様な気がしたので〜っ!(爆
(変な意味は無いですよ。w)
また何かありましたら、質問させて頂きます。
その節は、どうぞよろしくお願い致します。
78ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(71,247ポイント)
Date: 2008/11/08(土) 21:54
No:23761
|
|
Title: Re:質問テンプレ
|
|
誤字ではないですが...
「ソースコード投稿時はタグを使う」の箇所のサンプルコードですが、mainの返却型がvoidになっています。
また、forの第1節がint i=0;になっていますが、C++かC99を前提としているという解釈でよろしいでしょうか?
あと、規約の大項目ごとにアンカータグまたはIDを設定していただくと、リンクを貼る際に便利かと思います。
111ポイント を手に入れた。
|
|
|
|
|
Name: ムンバ ..初心者(8,402ポイント)
Date: 2008/11/08(土) 22:21
No:23766
|
|
Title: Re:質問テンプレ
|
|
あっ!いや、余計な事を言ってしまったみたいで、すみません。^^;
上述しました様に・・・あっ!?「サンプルソース」→「サンプルコード」なのですね?
私には区別が難しいのですが、勉強してみます。(変な意味は無いですよ。^^)
相変わらず自分、中途半端な書き込みで申し訳なかったです。
ご迷惑をお掛けしました。
おやすみなさい。
141ポイント を手に入れた。
|
|
|
|
|
Name: 通行人 ..ぴよぴよ(86ポイント)
Date: 2008/11/08(土) 22:27
No:23770
|
|
Title: Re:質問テンプレ
|
|
「規約と注意事項」を「必ず」お読みください、と書いてあっても、
読まない人は読みません。
規約に従っていない質問に対しては、
グッとがまんしてスルーするのがよいと思います。
「回答しない」という回答をするのです。
86ポイント を手に入れた。
|
|
|
|
|
Name: ムンバ ..初心者(8,432ポイント)
Date: 2008/11/08(土) 22:44
No:23774
|
|
Title: Re:質問テンプレ
|
|
通行人さんの思うところですと(勝手に私が解釈してしまってる<(_ _)>)
管理人さんが言われてた
「HPの名前改名します (名前募集) 」
に戻ってしまうと思うのは、私の気のせいでしょうか?
目が覚めてきましたので今日は、while文の勉強もやりたいと思います。
30ポイント を手に入れた。
|
|
|
|
|
Name: 通行人 ..ぴよぴよ(131ポイント)
Date: 2008/11/08(土) 22:58
No:23775
|
|
Title: Re:質問テンプレ
|
|
>ムンバさん
No.23774 の内容が全くわかりません。
何をおっしゃりたいのでしょうか。
ここの名称を変えるかどうか、という話と、
規約に反する質問には回答しない、という話の、
どこにどういう関連があるのでしょうか。
論理的に説明していただけますか?
45ポイント を手に入れた。
|
|
|
|
|
Name: ムンバ ..初心者(8,545ポイント)
Date: 2008/11/09(日) 00:19
No:23781
|
|
Title: Re:質問テンプレ
|
|
言葉の意図が理解できない様です。
いくら数字で計算しても、心は通じないと言う事だと思います。
数字は心に置き換えられません。心も数字に置き換える事はできません。
ですので私の気持ちを、あなたに論理的に説明する事ができません。
関連もありません。
どなたかの、サブネームで書き込みされてるのですか?通行人さん?
113ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(877,349ポイント)
Date: 2008/11/09(日) 00:19
No:23782
|
|
Title: Re:質問テンプレ
|
|
Mistさんのトピなのに私が回答するような形になってすみません^^;
色々ご意見ありがとうございます。
>掲示板の仕様改善の案
レンタル掲示板であることと、私の技量の関係で限界があるようです;
たかぎさんの仰るとおり、これ以上規約を読ませる方法をこちらが考えても、
読まない人は読まないのでしょうし、下手にウィンドウをポップさせてOKを押させたりすると
今度は規約をいつも守ってる人の使い勝手が悪くなりかねないのでこの辺にしておいたほうがいいかもしれませんね。
最低限守って欲しい事があるのは確かですが、あんまり細かいことみんなで言い合って
少しでも規約に準じてなかったら怒られるのではないかとビクビクしながら投稿しないといけなくなってもいけませんし。
>ムンバさん
わざわざ確認してくださってありがとうございます。
画像は確かにアイコンのようですね。
う〜ん、箇条書きのような画像の方がよかったかもしれませんね。
>プログラムコード
そうですね。厳密にはおかしいですが、単にインデントについての説明の為、行数を少なくしたかったのです。
インデントの説明だけなので、宣言もreturn文も省略したかったのでこうしました。
規約であっても厳密に正しいコードを書くべきですね。すみません。
572ポイント を落としてしまった。
|
|
|
|
|
Name: ムンバ ..初心者(8,613ポイント)
Date: 2008/11/09(日) 00:27
No:23785
|
|
Title: Re:質問テンプレ
|
|
>規約に従っていない質問に対しては、
>グッとがまんしてスルーするのがよいと思います。
>「回答しない」という回答をするのです。
「規約と注意事項」の
〜回答者様へのお願い〜
を、読んでみて下さい。通行人さん。
解釈の仕方は、それぞれ違うと思いますが。
68ポイント を手に入れた。
|
|
|
|
|
Name: ムンバ ..初心者(8,845ポイント)
Date: 2008/11/09(日) 00:45
No:23787
|
|
Title: Re:質問テンプレ
|
|
すみません。かぶってしまいました。
私は、できるだけトラブルが少ない方がいいかなと思ってます。
トラブルが好きな方も、いらっしゃると思いますので(相変わらず変な意味は無いです。)
本当に余計なお世話ですが、何を楽しいと思うかは個人の自由だと思いますので
何とも言いがたいです。^^;
何をしたいか。だと思います。
が、これも私の私的な問題で、トラブルの原因かもしれません。
受け止め方はどうあれ、私の言い方がいけなかったです。
↓私のコメント
>ここにカーソルを合わせて、左クリックしてしまったのは私だけでしょうか?^^;
>「カチっ!」とか音がして、何処かに飛ぶ様な気がしたので〜っ!(爆
冗談のつもりで言ったのです。
誤解を招いた方々、大変申し訳御座いませんでした。
自分では素直に発言していたつもりですが、余計な事を言ってしまいました。
すみませんでした。
お手数ですが不適切な文章に関しましては、ご訂正の程宜しくお願い致します。
失礼します。(謝
232ポイント を手に入れた。
|
|
|
|
|
Name: 通行人 ..ぴよぴよ(234ポイント)
Date: 2008/11/09(日) 06:45
No:23795
|
|
Title: Re:質問テンプレ
|
|
>ムンバさん
23781の、数字と心の話は、やっぱりよくわかりませんでした。
そういう、異質な概念どうしをむりやり対比しても、
読む側に響くことはありません。
もっと、それらしい例えを持ってこないと。
なお、私は単なる通行人です。それ以外の何者でもありません。
おもしろそうなスレッドが立っているので、
ちょっと首を突っ込んでみただけでした。
失礼いたしました。
103ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..プログラマー(37,170ポイント)
Date: 2008/11/09(日) 06:50
No:23796
|
|
Title: Re:質問テンプレ
|
|
主に質問させていただく側の私は、
こういうスレッドはいつも姿勢を正して拝見させていただいてます。
長く回答されている方ほど、
一人一人、考え抜かれ、熟練した姿勢を持っていらっしゃるようで、
C言語とはまた違った勉強になると感じております。
そして、熟練者初心者問わず、規約をよく読む側の、新しく来て事情を良く知らない方々(私も含め)が
毎度肝を冷やして新しい打開策を一生懸命考えたくなる気持ちもよくわかります。
何が言いたいかって言うと、
ちょっと思いついたことを言うだけ言ってみたかっただけなのでした。
私の提案は規約を
"聞いてもらう"
というものです。
読んでもらえないのなら・・・と考えた苦肉の策っぽいような気もしますが。
意外と今までに無いアイディアじゃないでしょうか。
世の掲示板の規約の掌握なんかしてないので、
既に存在するかもわかりませんが。
とりあえず新規約の、さわりだけソフトークに読み上げさせてみました。
文章お借りします。管理人さんごめんなさい。
添付ファイルは、ふざけてませんが不快でしたら消しちゃってください。
メリットは、新鮮さ?
たまには聴覚に訴える規約や掲示板コミュニケーションがあってもいいんじゃないですかね。
いかがでしょうか。
無茶ですかね。
デメリットは
音声ファイルが重過ぎるってことですが、
クリアできないハードルか。
すみません、物理的、容量的に無理かもです。
565ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..プログラマー(31,086ポイント)
Date: 2008/11/09(日) 10:41
No:23799
|
|
Title: Re:質問テンプレ
|
|
私が一日寝込んでいたらすごいレスが(^^;
>> 管理人さん
いつも素早い対応御苦労様です。
新しい規約確認いたしました。
テンプレ採用ありがとうございます、少しでもお役に立てて何よりです。
以下、気になった点をいくつか。
> こんな長い規約読めないよ!という方は画像の太字部分だけでもザッと目を通してください。
私としては、こういう人のためには「太字の部分のみ箇条書き+テンプレ」が一画面に入る範囲で
さっくり書いているほうがいいかな、と思います。
詳細は下のほうに書いてますよということで。
まぁ、既に親切すぎるほど親切な内容なのでこれ以上はさほど効果はないとは思いますが。
(解答しか期待しない情報搾取者はどれだけ丁寧にしても読まないだろうし)
> ただし上のように記載してもらえればこれは当てはまりません。
「上の」はどこを指していますか(?-?
242ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(71,599ポイント)
Date: 2008/11/09(日) 10:48
No:23800
|
|
Title: Re:質問テンプレ
|
|
> 最低限守って欲しい事があるのは確かですが、あんまり細かいことみんなで言い合って
> 少しでも規約に準じてなかったら怒られるのではないかとビクビクしながら投稿しないといけなくなってもいけませんし。
規約を守らないといけないのは当然ですが、回答者としての本音を言えば、規約なんか守っていなくてもよいのです。
必要な情報を第三者が理解できるように書いてくれてさえいれば、それでよいのです。
そうしたことができていない質問者さんに対して個別対応するのは面倒なので、「規約を読んでください」ということになります。仮に規約が一切なくても、回答者が補足要求する手間が増えるだけで、即答できないことは変わらないでしょう。
また、実際のところ、質問者さんがどう感じるかはともかく、規約を守っていなくて回答者から怒られているケースを見たことはほとんどありませんね。
ところで、規約の中でも一番解釈が難しいのが「目指すはアットホームで温かい」の部分です。
「アットホーム」を正確に解釈するのは難しいですが、おおむね「家庭的でくつろげる」ことかと思います。
では「家庭的」とは何かですが、それぞれの家庭には家風があり、明示的・暗黙的なルールがあります。それらに馴染めてはじめて「くつろげる」のであり、そうでなければ家庭内不和や家庭崩壊につながります。
我が家では、結婚して家庭を一から築き、子供が増えていまや5人家族となりましたが、家庭運営というのは難しいものです。家庭内で子供の立場にしかなったことがないと、この辺の理解は難しいかもしれませんね。
352ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(880,411ポイント)
Date: 2008/11/09(日) 15:49
No:23808
|
|
Title: Re:質問テンプレ
|
|
>ムンバさん
>通行人さん
掲示板の方針はあくまで単に私の掲げる方針であって、
回答者の皆様はそれぞれ自分が良いと思う書き込みをしていただいたらいいと思っています。
ですので「回答しないという回答」も、方法の一つだと思います。
ただこの場合、全員が回答しないという方針でいかないと、誰かだけ答えてしまったら意味が無いですが・・。
ムンバさんは私の方針を応援してくださっているのだと思います。感謝いたします。ありがとうございます。
>こめかみさん
これゆっくりの声じゃないですかw 早いですけどw
しかし読んでもらえないなら聞かせるというのも一つの案ですね。
問題はミクの声だと解りにくい事ですね^^;
もしこの案を実装するなら、規約をアマチュア声優さんに読んでもらった方がいいかもしれません。
龍神録の時の声優さん・・のような声は一部の方にしか受け入れられないかもしれないので^^;
NHKの解説に出てくるような声優さんとか・・。(いるのか?
ただ音が出るサイトって嫌われがちなんで、その辺うまく対応した方がいいかもしれませんね。
「まずは規約をお読み下さい」と音声で流れるだけでも「ハッ」とするかもしれませんから、
それだけでもいいかもしれません。
掲示板のどこかに「音声をオフにする」チェックをいれておけば次回アクセスからは再生されないように出来たらいいんですね。
やり方知りませんけど^^;
>Mistさん
大丈夫ですか??
そろそろインフルエンザのシーズンですね・・。
私は丁度インフルエンザが真っ盛りな頃修論の発表なので、なんとしても阻止せねばなりません^^;
お互い気をつけましょう。
>上の方
規約は
・質問はこんな風に書いて下さい
・丸投げはダメです。でも↑こんな風に書いてもらったらOKです。
・書き方がわからない人はテンプレを使って下さい。
という順番で書いてみました。なので、箇条書き一つ目を示しているのですが、わかりにくかったですね。
テンプレの件は追記しておきますね。
>アットホームの解釈について
これは確かにひとそれぞれ解釈違うでしょうね。
しかしソフトの規約書や設計書じゃないわけですし、そこまで厳密に全員が同じ解釈が出来るような、
実際に親にならないと解らないほどの厳密な意味の解釈は必要ないかなと思っています。
おおよそのイメージは付くと思いますし、私は回答者の皆様に何か義務行為を指示させていただく権利もありませんから
回答者の皆様がよいと思う回答方法で答えてくださったらよいと思います。
同じ家庭的という言葉であっても
「話しやすい」「和やか」「厳しい」「成長する」など解釈によって回答も変わってくると思いますが、
それはそれでいいと思っています。
一般的に「アットホームな掲示板」というと「和やかで気軽に話しやすい」という意味だと思います。
私はそれに付け加え、困った質問者さんが内面から良い方向に変わってくれる(家庭で言う教える・成長させる?)ような場所という意味も暗に込めています。
成長過程にいる人間がこんなこと言うのもなんですけど^^;
2倍のポイントを手に入れた! 2,684ポイント を手に入れた。
|
|
|
|
Name: 涼子 ..ぴよぴよ(105ポイント)
Date: 2008/11/08(土) 12:59
No:23738
|
|
Title: 左上のアイコン
|
|
32*32のIcon.icoを用意したのですがこれを画面内にではなく
ウインドウの左上(画面上にあるバー)におくことはできるのでしょうか?
調べてみると
LoadImage と LoadIconがあったのですが何か違うのでしょうか?
また
WNDCLASSEX wc; // ウインドウクラス構造体
wc.hIcon = LoadIcon(hInst,"Icon.ico");
wc.hIconSm = LoadIcon(hInst,"Icon.ico");
のsmの違いは何かあるのでしょうか?
イメージの取得ができていない気がするのですがエラーメッセージなども出せると助かります。
質問が多くてすいません。
開発環境
VS2005 C++ XP
105ポイント を手に入れた。
|
|
|
|
Name: lbfuvab ..初心者(7,751ポイント)
Date: 2008/11/08(土) 13:43
No:23740
|
|
Title: Re:左上のアイコン
|
|
えーと、アイコンを通常サイズとミニサイズで変えないなら
wc.hIconSm=NULL;
で良い様な気がします。
44ポイント を手に入れた。
|
|
|
|
|
Name: 涼子 ..ぴよぴよ(150ポイント)
Date: 2008/11/08(土) 13:53
No:23741
|
|
Title: Re:左上のアイコン
|
|
すいません><
説明を見たのですがクリックする場所が分かりません。
どこがおかしいのでしょうか?
45ポイント を手に入れた。
|
|
|
|
|
Name: 涼子 ..ぴよぴよ(231ポイント)
Date: 2008/11/08(土) 14:38
No:23745
|
|
Title: Re:左上のアイコン
|
|
すいません・・・
みたのですが全く分からないです・・・
リソースを作ってみて画像を書いても変化がないです><
多分、私がどこか間違えているのかと思いますがわかりません。
81ポイント を手に入れた。
|
|
|
|
|
Name: たいちう ..上級者(15,581ポイント)
Date: 2008/11/08(土) 15:54
No:23747
|
|
Title: Re:左上のアイコン
|
|
> リソースを作ってみて画像を書いても変化がないです><
> 多分、私がどこか間違えているのかと思いますがわかりません。
残念ながら、その説明では私にもわかりません。
おそらく他の誰かにも。それはご理解いただけますよね?
紹介した『猫でも…』の6章のサンプルは実行してみましたか?
まだならばアイコンのことは少し忘れて、
6章のメニューを表示できるようにしてはいかがでしょうか?
結局それが近道だと思いますよ。
84ポイント を手に入れた。
|
|
|
|
|
Name: 涼子 ..ぴよぴよ(338ポイント)
Date: 2008/11/08(土) 17:25
No:23749
|
|
Title: Re:左上のアイコン
|
|
すいませんがやはり理解できません。
リソースということを初めて知ったのですがこれを定義文みたいに書いておけないのでしょうか?
添付したものは現在の状況です。
インクルードするとWndProcがなぜか見つからなくなります。
しないと変化がありません・・・
107ポイント を手に入れた。
|
|
|
|
|
Name: 涼子 ..ぴよぴよ(405ポイント)
Date: 2008/11/08(土) 17:45
No:23752
|
|
Title: Re:左上のアイコン
|
|
何回も投稿すいません・・・
Debugにはいるexeのアイコンが変わっていました・・・
私が言っているのは画面の左上に表示されるアイコンです・・・
67ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..プログラマー(33,699ポイント)
Date: 2008/11/09(日) 02:34
No:23791
|
|
Title: Re:左上のアイコン
|
|
一応表示出来るようにしたソースを添付します。
ただし、VisualStudio のリソースエディタが使えませんので注意してください。
(ビルドは可能)
簡単な説明としては、 "resource.h" に書いてあったものは
元々 "Resource.rc" に書くべきものなので移動(置き換え)し、
"resource.h" にはアイコンなどのリソースIDのマクロ定義を入れました。
あとは、使用するときに、"MAKEINTRESOURCE(MYICON)"などとして指定すれば表示されます。
あと、
wc.hIconSm = NULL;
だと読み込めなかったようなので、
wc.hIcon と同じようにしておきました。
念のためもう言っておきますが、リソースファイルはそのままでは開けません。
リソースファイルをコードとして開くことは可能なので、
リソースファイル(*.rc)を右クリック→コードの表示
で表示できます。
あと、 resource.h にリソースコードが書かれていてはソースのコンパイルで通りませんし、
リソースコンパイル時にその部分だけ処理されません。
本当ならリソースエディタ上で作れば楽なのですが。
# 私の環境(Express Edition) ではリソースエディタが使えないので、リソースファイルに直書きしてます。
# 『猫でも…』ではリソースファイルに直書きする形なので、その方法で記述しても出来ますが。
568ポイント を手に入れた。
|
|
|
|
Name: ウェア ..ぴよぴよ(131ポイント)
Date: 2008/11/08(土) 19:52
No:23754
|
|
Title: 無題
|
|
C++である変数の中身を描画する変数を作りたいのですが
できるのでしょうか?
同時に複数の変数を左上に描画したいです。
例えば
int a=2;
float b=1.5f;
DEB("%d",(int)a);
DEB("%f",(float)b);
と書くと a と b の中身が 左上から順に書かれます。
131ポイント を手に入れた。
|
|
|
|
Name: ウェア ..ぴよぴよ(166ポイント)
Date: 2008/11/08(土) 19:53
No:23755
|
|
Title: 謝罪
|
|
すいません><
無題で投稿してしまいました。
タイトルは「変数をみれるデバック用の関数」です。
35ポイント を手に入れた。
|
|
|
|
|
Name: たいちう ..上級者(15,760ポイント)
Date: 2008/11/08(土) 20:07
No:23756
|
|
Title: Re:変数をみれるデバック用の関数
|
|
可変長引数の関数を自作するのが一般的かもしれませんが、
まずは、より理解しやすいと思われる、文字列の作成と文字列の表示の
二段階に分けた方法を紹介します。
sprintfで文字列を作ります。
次に文字列の表示ですが、質問に環境が書いていません。
作成するアプリケーションの種類等によって文字列の表示方法は異なります。
コンソールならばprintfとか、SDKならTextOutとか、
DxLibならばDrawStringとか。どれかに馴染みはありますか?
簡単な方針だけ、さらっと書いていました。
分からない点があれば、具体的に再度聞いてください。
その時は環境も忘れずに。
179ポイント を手に入れた。
|
|
|
|
|
Name: ウェア ..ぴよぴよ(269ポイント)
Date: 2008/11/08(土) 20:58
No:23757
|
|
Title: Re:変数をみれるデバック用の関数
|
|
一応CUIでprintfは使ったことがあります。
GUIは初めて使うのですが
printfの%dみたいに変数を使えるものがあるのでしょうか?
また、文字列ではなく数字しか扱いません。
描画の命令をどこにどう書けばよいか教えていただけないでしょうか?
APIは初めて使うためわかりません。
103ポイント を手に入れた。
|
|
|
|
|
Name: たいちう ..上級者(15,889ポイント)
Date: 2008/11/08(土) 22:34
No:23773
|
|
Title: Re:変数をみれるデバック用の関数
|
|
> GUIは初めて使うのですが
> printfの%dみたいに変数を使えるものがあるのでしょうか?
>
> また、文字列ではなく数字しか扱いません。
とりあえずはsprintfを使うと良いでしょう。
> 描画の命令をどこにどう書けばよいか教えていただけないでしょうか?
> APIは初めて使うためわかりません。
環境を書いてください。それによってどこにどう書くか変わります。
どのように環境を書いたら良いか分からない場合、
次のキーワードのうち、自分のプログラムと関係のありそうなものがあれば
全て教えてください。できれば、どのように関係があると思うのかも。
MFC CView OnDraw SDK WM_PAINT DxLib
129ポイント を手に入れた。
|
|
|
|
|
Name: スレ主 ..ぴよぴよ(23ポイント)
Date: 2008/11/08(土) 22:59
No:23776
|
|
Title: Re:変数をみれるデバック用の関数
|
|
回答ありがとうございます。
WM_PAINTは使っています。
開発環境はVS2005 C++ です。
申し訳ないです><
23ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(124,763ポイント)
Date: 2008/11/09(日) 00:39
No:23786
|
|
Title: Re:変数をみれるデバック用の関数
|
|
APIを使用できる環境で、確認するだけであるのならば、MessageBoxを使用するのもお手軽でいいかもしれませんね。
43ポイント を手に入れた。
|
|
|
|
|
Name: たいちう ..上級者(15,892ポイント)
Date: 2008/11/09(日) 09:36
No:23797
|
|
Title: Re:変数をみれるデバック用の関数
|
|
> WM_PAINTは使っています。
それでは、sprintfで数値を文字列にした後に、
TextOut()やDrawText()を使ってください。
3ポイント を手に入れた。
|
|
|
|
Name: JugS ..入門者(4,345ポイント)
Date: 2008/11/09(日) 00:09
No:23779
|
|
Title: オープンソースのフリーゲーム
|
|
オブジェクト指向の勉強を始めてみたものの、いまいち使い方がわかりにくく、
さらに、今年は受験なので最近プログラミングから疎遠ぎみになってしまっていますが、
どうしてもプログラミングをしていきたいので、
とりあえず、お手本という意味で、
C++のオブジェクト指向のプログラムでオープンソースのフリーのゲームってありませんか?
143ポイント を手に入れた。
|
|
|
|
Name: Justy ..ハッカー(260,687ポイント)
Date: 2008/11/09(日) 02:22
No:23790
|
|
Title: Re:オープンソースのフリーゲーム
|
|
きっちりオブジェクト指向で組まれているかどうかは確認していませんが、
とりあえずクラスを使って作られているちょっと本格的なゲームをを紹介します。
・Extreme Tux Racer
ttp://extremetuxracer.com/
ペンギンが滑り降りていくレースゲームです。
・ VDrift - open source drift racing simulation
ttp://vdrift.net/
こちらは車系のレースゲームです。
・ Mtp Target
ttp://www.mtp-target.org/
要登録&ネットが必要なのですが、これがなかなか。
やっぱりペンギンがジャンプして、滑空たりして的に着地するゲーム。
・ Paintown
ttp://paintown.sourceforge.net/
ちょっとアレげなファイナルファイト風なアクションゲーム
282ポイント を手に入れた。
|
|
|
|
|
Name: JugS
Date: 2008/11/14(金) 23:11
No:237791226671884
|
|
Title: Re:オープンソースのフリーゲーム
|
|
投稿したのを忘れてました。
遅れましたが、
紹介していただきありがとうございます。
|
|
|
|
Name: 七誌 ..かけだし(1,354ポイント)
Date: 2008/11/07(金) 08:49
No:23635
|
|
Title: fopenのフリーズ
|
|
VC++で作成しているプログラムでfopenの関数を何度か使っていたんですが、
間違って、すでにdeleteしてあるクラスを再度deleteしてしまうプログラムを実行
してしまいました。
そのときに、delete自体でエラーは起こらなかったのですが、delete後にfopenを
使おうとするとフリーズしてしまうようになってしまいました。
その後、deleteを片方消して、再度コンパイルし、実行したときにはうまく動作しました。
一応問題はなくなったのですが、なぜこのようなことが起きたのか、どなたか教えていただけないでしょうか。
class A {
.
.
};
//
A *p;
p = new A();
.
.
delete(p);
fopen("a.data", "w"); // ←ここでは動く
.
.
delete(p); // 記述ミスでdelele済みのクラスをdelete
fopen("a.data", "w"); // ←コンパイルは通るが、実行するとフリーズ
370ポイント を手に入れた。
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(69,517ポイント)
Date: 2008/11/07(金) 09:45
No:23636
|
|
Title: Re:fopenのフリーズ
|
|
VC++の場合、operator deleteはfree関数を用いて実装しています。
一方、fopenは、内部的なバッファを割り付けるためにmallocを呼び出しています。
すなわち、解放済みの領域に対してfreeを呼び出すことでヒープを破壊し、その後にmallocを呼び出したためにおかしくなっているのです。
12ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(123,082ポイント)
Date: 2008/11/07(金) 10:05
No:23637
|
|
Title: Re:fopenのフリーズ
|
|
というか、2度目のdeleteを実行した時点で例外が発生しないですか?(一応、VC++6.0とVS2005で確認済み)
9ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(69,640ポイント)
Date: 2008/11/07(金) 11:04
No:23642
|
|
Title: Re:fopenのフリーズ
|
|
> 2度目のdeleteを実行した時点で例外が発生しないですか?
VC++2008EEで試しましたが例外は発生しません。
operator deleteは例外指定がthrow()なので、デストラクタから例外を送出するようなヘマをやらない限り、delete式で例外が送出される可能性はありません。
C++/CLIなら、ThreadAbortExceptionが送出される可能性があるかもしれませんが...
123ポイント を手に入れた。
|
|
|
|
|
Name: 七誌 ..かけだし(1,328ポイント)
Date: 2008/11/09(日) 01:46
No:23788
| 解決!
|
Title: Re:fopenのフリーズ
|
|
回答ありがとうございます。
すごく不思議に思っていたのが、すっきりしました。
26ポイント を落としてしまった。
|
|
|
|
Name: chunezu ..初心者(7,462ポイント)
Date: 2008/11/08(土) 22:31
No:23772
|
|
Title: 強制終了
|
|
また質問させていただきます。
前に作った効果音wavをoggに変換してLoadSoundMemで読み込むと何故か強制終了してしまいます。
変換前のwavファイルだと、問題なくプログラムが始まります。
添付ファイルには 10.ogg と 11.ogg があり、11.oggを読み込むと終了してしまいます。
ただ、10.oggを読み込んでも何の問題もりません
どなたか分かる方お願いします…
171ポイント を手に入れた。
|
|
|
|
Name: Justy ..ハッカー(260,305ポイント)
Date: 2008/11/08(土) 23:49
No:23778
|
|
Title: Re:強制終了
|
|
>前に作った効果音wavをoggに変換してLoadSoundMemで読み込むと何故か強制終了してしまいます
11.oggの方はファイルが途中で途切れてます。oggのストリームが正しく終了する前に
ファイルが終わってしまっているようです。
多分変換した際に何か問題があり中断してしまって、生成されたファイルが尻切れ状態になって
しまったのではないでしょうか。
183ポイント を手に入れた。
|
|
|
|
Name: locas ..ぴよぴよ(28ポイント)
Date: 2008/11/07(金) 18:42
No:23658
|
|
Title: 丸い描画可能領域を作るには
|
|
今アクションゲームを作っていて、土地(フィールド)は画面に全部表示されていて、
主人公の周りだけ障害物などが見える、というシステムが作りたいのです。
今まではSetDrawAreaを使い四角形でやっていましたが
他のシステムを作るにしたがってやはり丸い描画可能領域を作りたくなりました。
何か擬似的にでも再現する方法はありませんか?
28ポイント を手に入れた。
|
|
|
|
Name: Justy ..ハッカー(257,785ポイント)
Date: 2008/11/07(金) 20:29
No:23671
|
|
Title: Re:丸い描画可能領域を作るには
|
|
環境は何ですか?
なんとなく Windows+DXライブラリのようにも思えますが。
仮にDXライブラリだとして、
>主人公の周りだけ障害物などが見える、というシステムが作りたいのです
くっきりと明暗を分けたいので有れば、Zバッファを使うのがいいでしょう。
・ DrawBoxToZBuffer()
・ DrawCircleToZBuffer()
・ DrawGraphToZBuffer()
・ DrawTurnGraphToZBuffer()
・ DrawExtendGraphToZBuffer()
・ DrawRotaGraphToZBuffer()
・ DrawModiGraphToZBuffer()
完全な円なら、DrawCircleToZBuffer()で、予め領域を指定しておけば、
それ以降はその領域以外にしか描画しない、という指定ができます。
でも、
>主人公の周りだけ障害物などが見える、というシステム
というシステムだということを考えると、背景やキャラクタの上から中央だけ明るく、
周囲にいくに従って暗くなるような絵をアルファブレンドでかぶせてしまった方が
効果的だと思います。
289ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(877,531ポイント)
Date: 2008/11/08(土) 02:27
No:23717
|
|
Title: Re:丸い描画可能領域を作るには
|
|
私はJustyさんがおっしゃっている後者の方法でやっていました。
例えば主人公のいる中心から直径200ピクセルをグラデーションかけて暗くしていきたい時、
まず
SetDrawArea
で主人公のまわり200x200の広さを描画可能エリアにします。
そこに用意した200x200のグラデーションのかかった画像を上書きすればよいのです。
口でいってもわかりにくいかもしれないので、画像を作ってみました。
これ使って試していないので、グラデーションの階調があわないかもしれないので、サンプル程度にどうぞ
黒に黒なんでよく見えませんが
↓ここから画像↓
↑ここまで↑
これじゃよくわからないかもしれないので、こちらに透明度を表現した画像も用意しました。
↓ここから画像↓
↑ここまで↑
この画像は中央に行くに従って透明であり、端にいくにしたがって黒くなっています。
ですから、これをかぶせて描画することで、中央はそのまま、端に行くに従って暗くなる表現が可能になります。
235ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(259,203ポイント)
Date: 2008/11/08(土) 17:11
No:23748
|
|
Title: Re:丸い描画可能領域を作るには
|
|
もう少しだけ補足しておきます。
>土地(フィールド)は画面に全部表示されていて
ということなので、まず先にフィールド全体を表示します。
次に黒から白の円状のグラデーションな画像を用意します。
障害物を表示するときはこのグラデーション画像と重なっているかどうかを
調べ、重なっていなければ表示を行わないようにします。
重なっていた場合はそのグラデーションと障害物のオブジェクトをブレンドし、
グラデーション画像が黒であればあるほど障害物が透明になるようにして表示します。
で、最後に普通にプレイヤーを表示すれば、大体望む通りの画像になると思います。
309ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(259,285ポイント)
Date: 2008/11/08(土) 17:49
No:23753
|
|
Title: Re:丸い描画可能領域を作るには
|
|
いえ、私も最初そう思ってしまいましたので、つい「キャラクタの上から」と
書いてしまいました。
読みが足らなかったみたいです。
ただ、locasさんは最初 SetDrawArea()を使っていたみたいなので、
Zバッファ方式でも十分な事足りる気もしますね。
82ポイント を手に入れた。
|
|
|
|
|
Name: locas ..ぴよぴよ(34ポイント)
Date: 2008/11/08(土) 22:01
No:23762
| 解決!
|
Title: Re:丸い描画可能領域を作るには
|
|
たくさんの回答ありがとうございました。
皆さんからオススメして頂いたαブレンドのもので試してみたいと思います。
本当にありがとうございました。
6ポイント を手に入れた。
|
|
|
|
Name: t_white ..かけだし(1,906ポイント)
Date: 2008/11/08(土) 00:58
No:23711
|
|
Title: DirectXのUVマッピングに関する質問です。よろしくお願いします。
|
|
こんばんは。夏の終わりぐらいからかなりお久しぶりです。
DXライブラリのLoadDivGraphのようにテクスチャを分割して描画できるクラスを作りたいのですがあるところでつまづいていて困っています。
// テクスチャを読み込んで分割して描画できるクラス(擬似スプライトクラスでIDirect3DTexture9*(LPDIRECT3DTEXTURE9)を内部に持ってます)
CDivSprite graphic;
// 読み込む画像へのパス, 透過色, 総分割数, 横方向に対する分割数, 縦方向に対する分割数, 分割する横サイズ, 分割する縦サイズ
graphic.Create("Cat.bmp", 0xff000000, 4, 2, 2, 32, 32);
// 分割した画像の添え字(総分割数が4なので0~3), x座標, y座標 z座標
graphic.Draw( 0, x, y, z);
という感じで扱えるように実装したいのです。
一通り書いて実行したのですが、どうも2段目以降の画像の上端がずれているらしく、上端に一段上の画像の下端が少し(1ピクセルにもみたない)表示されてしまいます。
1枚のテクスチャに分割数だけUVマッピングを行って分割するように実装しているので、そこでずれてしまっていると思うのですが、解決策を教えて貰えると助かります。
/*
m_DivAllNum: 総分割数
m_DivXNum: 横に対する分割数
m_DivYNum: 縦に対する分割数
m_TextureUV[m_DivAllNum][4] : D3DXVECTOR2型 各分割された画像一枚一枚のUV座標
*/
//--------------------------------------------------------------
// UVマッピング
//--------------------------------------------------------------
m_TextureUV = new D3DXVECTOR2[m_DivAllNum][4];
WORD x,y,num;
for(y = 0; y < m_DivYNum; ++y){
for(x = 0; x < m_DivXNum; ++x){
num = y * m_DivXNum + x; // 番号計算
// 分割総数を越えたら抜ける(yの条件は満たすと思うんでfor文二つとも抜けれるはず)
if(num >= m_DivAllNum)
break;
m_TextureUV[num][0] = D3DXVECTOR2((float)(x * m_DivWidth) / m_TextureWidth, (float)(y * m_DivHeight) / m_TextureHeight); // 左上
m_TextureUV[num][1] = D3DXVECTOR2((float)((x+1) * m_DivWidth) / m_TextureWidth, (float)(y * m_DivHeight) / m_TextureHeight); // 右上
m_TextureUV[num][2] = D3DXVECTOR2((float)(x * m_DivWidth) / m_TextureWidth, (float)((y + 1) * m_DivHeight) / m_TextureHeight); // 左下
m_TextureUV[num][3] = D3DXVECTOR2((float)((x+1) * m_DivWidth) / m_TextureWidth, (float)((y + 1) * m_DivHeight) / m_TextureHeight);// 右下
}
}
ちなみに、左上のUV座標のV座標に+0.00001するだけでも上端のやつは消えるので、それで解決するといえば解決するのですが、ちゃんとした解決法があるなら知りたいのです。
恐らく最下位の小数点を切り上げられれば解決するような気が・・・するような関係ないような気がしてます。
すごくわかり辛くてすみません。;
言って貰えれば必要な情報を書き加えますです。
どうかよろしくお願いいたします。
1,042ポイント を落としてしまった。
|
|
|
|
Name: t_white ..入門者(2,548ポイント)
Date: 2008/11/08(土) 03:13
No:23721
|
|
Title: Re:DirectXのUVマッピングに関する質問です。よろしくお願いします。
|
|
>>Justy様
わかりやすい説明&参考ページありがとうございます!
なるほど、このDirect3Dがテクセル座標を求るのに0.5を引く処理の影響で通常だと上と左に少しずれてしまうのですね。(イメージ的には合っていますように)
そうすると四方向全てを微妙に小さくする対処法もまったくの間違いという訳ではないのでしょうか。
m_TextureUV[num][0] = D3DXVECTOR2((float)(x * m_DivWidth) / m_TextureWidth + 0.000001, (float)(y * m_DivHeight) / m_TextureHeight + 0.000001); // 左上
m_TextureUV[num][1] = D3DXVECTOR2((float)((x+1) * m_DivWidth) / m_TextureWidth - 0.000001, (float)(y * m_DivHeight) / m_TextureHeight + 0.000001); // 右上
m_TextureUV[num][2] = D3DXVECTOR2((float)(x * m_DivWidth) / m_TextureWidth + 0.000001, (float)((y + 1) * m_DivHeight) / m_TextureHeight - 0.000001); // 左下
m_TextureUV[num][3] = D3DXVECTOR2((float)((x+1) * m_DivWidth) / m_TextureWidth - 0.000001, (float)((y + 1) * m_DivHeight) / m_TextureHeight - 0.000001);// 右下
のように。
こうすると上のやつも消えましたし、Drawに回転計算も入れたverも境界が綺麗になりました。
(以前はDXライブラリでいうDrawRotaGraphのように実装したDrawを使うと、微妙な角度の時にまたとなりの分割画像の端が見えてしまう事態が発生していた)
とりあえずはこのまま使用してみます。
本当にありがとうございました!
642ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(258,894ポイント)
Date: 2008/11/08(土) 12:53
No:23736
|
|
Title: Re:DirectXのUVマッピングに関する質問です。よろしくお願いします。
|
|
>そうすると四方向全てを微妙に小さくする対処法もまったくの間違いという訳ではない
小さくするサイズが定数なのは気になりますが、うまく動いているなら
きっと全く間違いというわけではないのでしょう。
ただ、素材のサイズによっては何かしらの影響を受けてしまうかもしれません。
32ポイント を手に入れた。
|
|
|
|
Name: 紅葉 ..かけだし(1,762ポイント)
Date: 2008/11/03(月) 16:51
No:23372
|
|
Title: 3Dテクスチャの透過処理
|
|
3Dテクスチャの透明度を描画するごとに変えたいです。
例)Aのメッシュは0xffで描画(通常)
Bのメッシュは0x80で描画(通常の半分の透明度)
テキストは現在使っている描画命令でこれの一番上にある
DrawModelTest(・・・)の最後のrollの後ろに引数を付け足したいです。
言語はC++でコンパイラはVS2005です。
よろしくお願いします。
34ポイント を手に入れた。
|
|
|
|
Name: Justy ..ハッカー(254,069ポイント)
Date: 2008/11/03(月) 19:56
No:23380
|
|
Title: Re:3Dテクスチャの透過処理
|
|
>テキストは現在使っている描画命令でこれの一番上にある
>DrawModelTest(・・・)の最後のrollの後ろに引数を付け足したいです。
いろいろやり方がありますが、一番簡単なのは DirectXのレンダーステートを弄ることでしょう。
ざっくりとやりかたを書くと
1 ブレンドに関するレンダーステートを変更する(変更前に現在の値を覚えておくこと)
D3DRS_SRCBLEND: D3DBLEND_SRCALPHA
D3DRS_DESTBLEND: D3DBLEND_INVSRCALPHA
D3DRS_ALPHABLENDENABLE: TRUE
2 テクスチャステージ0はそのままに、テクスチャステージ1を変更する
(変更前に現在の値を覚えておくこと)
例)
D3DTSS_COLOROP: D3DTOP_MODULATE
D3DTSS_COLORARG1: D3DTA_CURRENT
D3DTSS_COLORARG2: D3DTA_TFACTOR
D3DTSS_ALPHAOP: D3DTOP_SELECTARG1
D3DTSS_ALPHAARG1: D3DTA_TFACTORE
で、D3DRS_TEXTUREFACTORに対し、掛け合わせたいカラー値を入れます。
半分の半透明にするなら 0x80ffffffを入れて下さい。
3 描画する
4 1,2で保存したレンダーステートを元に戻す
こんな感じです。
ただ、やってみるとわかりますが、モデルの半透明はそのままですと
いろいろ問題があります。
どんなモデルなのか、とかどこまで許容するかで解決方法が変わってきます。
まぁ、それは追々ということで。
837ポイント を手に入れた。
|
|
|
|
|
Name: 紅葉 ..かけだし(1,918ポイント)
Date: 2008/11/03(月) 21:23
No:23394
|
|
Title: Re:3Dテクスチャの透過処理
|
|
レスありがとうございます。
モデルは立方体です。
とりあえず貼れていれば構いません。
申し訳ないのですが説明の意味が全く分かりません・・・
勉強不足で申し訳ないです。
23ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(255,677ポイント)
Date: 2008/11/03(月) 22:27
No:23399
|
|
Title: Re:3Dテクスチャの透過処理
|
|
>申し訳ないのですが説明の意味が全く分かりません・・・
紅葉さんが前回添付されたコードの中に lpD3DDev->SetRenderState(...) という
関数がありますが、これがレンダーステートを変更する関数です。
lpD3DDev->SetTextureStageState(...) がテクスチャステージ関連の設定ですね。
よく見れば同じソース内に D3DRS_SRCBLEND とか D3DRS_DESTBLEND とかの
キーワードも見つかるはずです。
又、現在の値を取得する関数は lpD3DDev->GetRenderState(...) のように Setを Getにした関数となります。
このあたりは解説すると長くなるので、書籍か Webかで調べてみて下さい。
321ポイント を手に入れた。
|
|
|
|
|
Name: 紅葉 ..かけだし(2,288ポイント)
Date: 2008/11/04(火) 15:00
No:23427
|
|
Title: Re:3Dテクスチャの透過処理
|
|
>>熟練のプログラマーさん
調べてみたのですが一覧表みたいなのが出てきました><
ただ使い方がわからないです><
すいません・・・
>>ハッカーさん
いつも質問に答えて下さりありがとうございます。
このマスターは私が作ったものではないので理解できないです><
添付してあるのが現在のソースです。
どこが違うのか教えていただけないでしょうか?
できれば以前みたいに直したものを頂けますと助かります。
丸投げになって申し訳ないのですが
私はスクリプターですのでサイトなどをみても理解できません><
2倍のポイントを手に入れた! 370ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(255,852ポイント)
Date: 2008/11/04(火) 22:19
No:23463
|
|
Title: Re:3Dテクスチャの透過処理
|
|
ハンドルネームは、ハッカーじゃないんですけどね・・・。
>ただ使い方がわからないです><
ひょっとして、DirectXそのものも実はあまりよく解っていない、なんてことはありませんか?
この添付のライブラリは学校の課題か何かですか?
>私はスクリプターですのでサイトなどをみても理解できません
スクリプターが何でプログラムを???
というかプログラマーはどこに?????
175ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(256,385ポイント)
Date: 2008/11/05(水) 01:00
No:23485
|
|
Title: Re:3Dテクスチャの透過処理
|
|
何となく何かの課題か卒業制作な気がしてきました。
(気のせいですかね?)
ソースを書いて出すのは直ぐ出来ることですが、
それでは紅葉さんの為にならないと思います。
今の状態ですと、ソースを出したところで全く理解できないものになるでしょうし、
それどころか、次にまた何かしようとしたときにすぐ壁にぶつかり、
やっぱり解らないから訊きに来る、というループが延々と繰り返されるような
気がします。
まず、紅葉さんがしなければならないことは、以下の2つのどちらかです。
・ 仲間か同僚かはわかりませんが、周囲にいるプログラマーに任せる
少なくとも、このあたりのコーディングをスクリプターがすること普通考えられないので、
ちゃんと本職に任せた方がいいでしょう。
いないのであれば、どこかから正式にスカウトして下さい。
・ DirectXの基礎を学ぶ
特に今回で言うならレンダーステート周りについて(すぐに諦めないで)
もっと時間を掛けて調べてみて下さい。
たしかにこのあたりは慣れないと取っつきにくいとことではありますが、
描画をする上でとても重要な概念なので、ここはきっちり押さえて下さい。
Ci-Lib.cppにはレンダーステートをあちこちで変更しています。
それらが何の役割をしていて、そこでそれがないとどうなるのか、
どんなレンダーステートがあってどういう役割なのかなどをテストプログラムを
書きながら研究していけば、そのうちきっと理解できるはずです。
いっそのこと、この Ci-Lib.cppを捨てて、一から自分で書き直した方がいいかもしれませんね。
その方が理解が早いでしょうし。
と、いろいろ書きましたがその上で。
(時間を掛けていろいろ調べても)どうやってもわからないとか、
(提出期限があるなら)もう時間がないとか、
どーでもいいから答えだけ欲しい
ということでしたら、改めて申して下さい。
その時はソースを出します。
533ポイント を手に入れた。
|
|
|
|
|
Name: 紅葉 ..入門者(2,511ポイント)
Date: 2008/11/05(水) 03:00
No:23491
|
|
Title: Re:3Dテクスチャの透過処理
|
|
課題とかなどではなく同人でゲームを作ろうと
チームで製作しているのですがPGで雇った方が
全くプログラムができなく、素材などはほとんどできているのですが
プログラムはできていません><
これはその方から配布されたものです。
私は音を製作している人間なのでPGは簡単な流れ程度しかわからないので
スクリプターと言わせていただきました。
またDirectXなどでゲームを作ったことがほとんどないです。
どちらかと言うと金融関係のサーバプログラムなどのCUIしか触れません。
急いではいませんが一応、同人で製作していて
次の集まりが木曜なのでそれまでにいただけますと助かります。
申し訳ないのですが直したのをいただけないでしょうか?
223ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(256,702ポイント)
Date: 2008/11/05(水) 07:23
No:23492
|
|
Title: Re:3Dテクスチャの透過処理
|
|
なるほど。状況は理解しました。
>PGで雇った方が 全くプログラムができなく
これは・・・大変ですね(^^
>申し訳ないのですが直したのをいただけないでしょうか
添付しておきました。
描画関数は DrawMyMeshColor()となります。
サンプルとして、Gs_DrawModelMat()で対応してありますが、
すぐに他の関数にも応用できると思います。
具体的に言えば、
lpD3DDev->SetTransform(D3DTS_WORLD,&mat);
DrawMyMesh(pMyMesh);
な部分を DrawMyMeshColor()の呼び出しに変えれば、OKです。
カラー値の指定は GsCOLOR型にしてあり、半透明であれば
ARGB(0x80, 0xf, 0xff, 0xff)でいけると思います。
又、カラー値によって処理を分けていますので、ARGB(0xff, 0xff, 0xff, 0xff)の場合は
従来通りの描画を行いますので、 DrawModelAxis()などの中で呼ばれている DrawMyMesh()の呼び出しを DrawMyMeshColor()に変えてしまってもいいかと思います。
317ポイント を手に入れた。
|
|
|
|
|
Name: 紅葉 ..入門者(2,674ポイント)
Date: 2008/11/05(水) 09:54
No:23496
|
|
Title: Re:3Dテクスチャの透過処理
|
|
お忙しいのにわざわざ新しい関数を作っていただきありがとうございました。
ただ描画してみると変?になるのですが D3DXMATRIX がおかしいのでしょうか?
D3DXMATRIX* D3DXMatrixTranslation(
D3DXMATRIX* pOut ,
FLOAT x , FLOAT y , FLOAT z
);
など色々 D3DXMATRIX での書き方があったのですが初期化の仕方が理解できないです。
質問ばかりで申し訳ないです。 と言いますか、わざわざありがとうございます><
163ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(256,404ポイント)
Date: 2008/11/05(水) 20:46
No:23541
|
|
Title: Re:3Dテクスチャの透過処理
|
|
D3DXMATRIX a;
Gs_DrawModelMat(M_BOX,a,ARGB(0xff,0xff,0xff,0xff));
このように宣言しただけでは D3DXMATRIX型は不定な値になっているので、
D3DXMATRIX a;
D3DXMatrixIdentity(&a);
Gs_DrawModelMat(M_BOX,a,ARGB(0xff,0xff,0xff,0xff));
として、aを初期化して下さい。
というか、前回の回転のプログラムに当てはめれば、
直ぐにできると思います。
298ポイント を落としてしまった。
|
|
|
|
|
Name: 紅葉 ..入門者(2,712ポイント)
Date: 2008/11/05(水) 23:33
No:23547
|
|
Title: Re:3Dテクスチャの透過処理
|
|
できました。
D3DXMatrixIdentityにアドレスを送れば初期化できるのは初めて知りましたw
本当にありがとうございます><
38ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(257,431ポイント)
Date: 2008/11/05(水) 23:52
No:23549
|
|
Title: Re:3Dテクスチャの透過処理
|
|
解決して何よりです。
老婆心ながら、今の製作体制では早晩行き詰まる可能性が高いと思われるので、
早めに改善したほうがいいかと思います。
あ、そうだ。
DrawMyMeshColor()ですが、他の描画関数に適用していくなら、
void DrawMyMeshColor(MESH *pMyMesh, const MAT &m, GsCOLOR color)
{
lpD3DDev->SetTransform(D3DTS_WORLD, &m);
StateSaver::RenderState rs;
StateSaver::TextureStage ts;
if(color != ARGB(0xff, 0xff, 0xff, 0xff))
{
RenderStateSetter rsSetter(rs);
TextureStageSetter tsSetter(ts);
rs.SetState(D3DRS_TEXTUREFACTOR, static_cast<DWORD>(color));
array_for_each(ts_tbl, tsSetter);
if(color >> 24 != 0xff)
{
array_for_each(rs_tbl1, rsSetter);
DrawMyMesh(pMyMesh);
array_for_each(rs_tbl2, rsSetter);
}
}
DrawMyMesh(pMyMesh);
}
の方がいいですね。
これなら、DrawModelAxis()とかに適用しやすいでしょうし。
832ポイント を手に入れた。
|
|
|
|
|
Name: 紅葉 ..入門者(2,769ポイント)
Date: 2008/11/08(土) 12:51
No:23735
|
|
Title: Re:3Dテクスチャの透過処理
|
|
わざわざありがとうございました><
プログラムは私の方でも勉強してみようかと考えています。
41ポイント を手に入れた。
|
|
|
|
Name: dic ..入門者(4,919ポイント)
Date: 2008/11/07(金) 21:09
No:23680
|
|
Title: 設計で悩んでます
|
|
C/C++でゲームの製作をしようと思っているのですが、
最初の肝心の基本設計が自分で決められず困ってます
案は3つあるので、どれにするかで悩んでます
ソースコード上でのバージョン管理も含めた設計を考えています
どの設計がいいでしょうか?
優柔不断なものですいません
画像は設計図です
96ポイント を手に入れた。
|
|
|
|
Name: Justy ..ハッカー(258,365ポイント)
Date: 2008/11/07(金) 21:30
No:23685
|
|
Title: Re:設計で悩んでます
|
|
>どの設計がいいでしょうか?
これ UMLですか?
CData1 / CData2とか CClientとか CVersionというのは一体何を扱うクラスなのか
(継承していること以外)さっぱりで、よくわかりません。
もう少し補足して下さい。
100ポイント を落としてしまった。
|
|
|
|
|
Name: dic ..初心者(5,318ポイント)
Date: 2008/11/07(金) 21:46
No:23689
|
|
Title: Re:設計で悩んでます
|
|
>御津凪さん
回答ありがとうございます
バージョン管理というのは、ソースコード上(オブジェクト指向)で
使用するクラスを変更することによって違ったオブジェクトを生成することです
ソースで示すと
class Version1 { };
class Version2 { };
...
class Version99{ };
class Client : public VersionX { };
のようにどのクラスを継承するかでオブジェクトの動作を変更する方法です
この X の部分だけを変更することによってあたかもバージョンが変わったかのような
動作をさせることです
私専用の言葉でしたらすいません
>Justyさん
CData -> ゲームの情報を格納するクラス
CVersion -> バージョンを管理するクラス
CClient -> 実際にインスタンス化されるクラス
となっております
簡潔な図になるように説明などは省きました すいません
なお 下のLevelは私が考え出した順につけたものです
特に意味はありません
画像の投稿がキャッシュがきいているのか反映されないかもしれないので
最初の画像と同じだったら下の画像をごらんください
http://gazoubbs.com/2ji/img/1223727923/365.jpg
399ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..プログラマー(32,909ポイント)
Date: 2008/11/07(金) 21:58
No:23691
|
|
Title: Re:設計で悩んでます
|
|
> CData -> ゲームの情報を格納するクラス
> CVersion -> バージョンを管理するクラス
> CClient -> 実際にインスタンス化されるクラス
という意味なのであればたかぎさんと同じく一番右ですね。
> この X の部分だけを変更することによってあたかもバージョンが変わったかのような
> 動作をさせることです
継承でそのような動作をさせるのなら、
class Client { };
class Version1 : public Client { };
class Version2 : public Client { };
...
class Version99 : public Client { };
のほうが正しいです。
# こういう構造でないと実装段階でおかしなことになると思います。
90ポイント を手に入れた。
|
|
|
|
|
Name: dic ..初心者(5,729ポイント)
Date: 2008/11/07(金) 22:14
No:23693
|
|
Title: Re:設計で悩んでます
|
|
>御津凪さん たかぎ さん
お返事ありがとうございます
class Client { };
class Version1 : public Client { };
class Version2 : public Client { };
...
class Version99 : public Client { };
このようにすると
実際のコードは
void main()
{
Version1 obj;
obj.Show();
}
のようになり ここでの obj変数がVersion1 となり クライアントと意図が伝わらない
ような気がするのですが
ポリモーフィズムを使えば解決しますが
void main()
{
Client *obj;
obj = new VersionX();
obj->Show();
}
こういった方法の方がいいのでしょうかね
332ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(258,516ポイント)
Date: 2008/11/07(金) 22:33
No:23695
|
|
Title: Re:設計で悩んでます
|
|
補足ありがとうございます。
なんとなくわかりました。
つまりバージョンは「挙動」を変える為のものである、と。
だとしたら、添付のように CClientは Versionのインターフェースを
持って、実際の挙動は各 CVersionに任せた方が自然ではないでしょうか。
CDataは具体的に CClientにとってどういうものなのか、によって
どこが持つべきか変わります。
が、多分ほとんどのケースで継承することはないでしょう。
普通にメンバとしてもたせれば十分です。
151ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(69,892ポイント)
Date: 2008/11/07(金) 22:36
No:23696
|
|
Title: Re:設計で悩んでます
|
|
こんな風にするのはどうでしょう。
class ClientBase
{
public:
virtual void Show() = 0;
};
template <class Version>
class Client : public ClientBase { ... };
とすれば、
class Version1 { ... };
int main()
{
ClientBase* obj = new Client<Version1>;
obj->Show();
...
}
問題にされている箇所は、一通り解消する気がするのですが...
177ポイント を落としてしまった。
|
|
|
|
|
Name: Justy ..ハッカー(258,560ポイント)
Date: 2008/11/07(金) 22:40
No:23698
|
|
Title: Re:設計で悩んでます
|
|
>さっきの投稿で「熟練のプログラマー」に降格してしまいましたね
あ、ほんとだ。降格してる・・・。
私も初めて見ました(w
44ポイント を手に入れた。
|
|
|
|
|
Name: dic ..初心者(6,279ポイント)
Date: 2008/11/08(土) 11:16
No:23730
| 解決!
|
Title: Re:設計で悩んでます
|
|
>Justyさん
コンポジションを利用するのですね
参考になりました
>たかぎさん
template関数は私の勉強不足でして、まだ理解していない分野です
精進不足ですいません
バージョン管理というか、挙動変更の為の修正は
なんとなく結局はプログラマの好みにたどりつくような気がします
マクロで行うか、switchで分けるか、継承で分けるか、
ポリモーフィズムを使うか、templateを使うか、ファイルから読み込むかなどなど
ご回答ありがとうございました
Justyさんの参考を元に作ると以下のようになりました
#include <stdio.h>
class IVersion
{
protected:
public:
double version;
virtual void Show() = 0;
};
class CVersion1 : public IVersion
{
public:
void Show() { printf( "version1\n" ); }
};
class CVersion2 : public IVersion
{
public:
void Show() { printf( "version2\n" ); }
};
class CClient
{
public:
IVersion *ver;
CClient();
~CClient();
};
CClient::CClient() {
// どっちかを採用
ver = new CVersion1();
// ver = new CVersion2();
}
CClient::~CClient(){ delete ver; }
void main()
{
CClient client;
client.ver->Show();
}
550ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(70,714ポイント)
Date: 2008/11/08(土) 12:22
No:23733
|
|
Title: Re:設計で悩んでます
|
|
class CClient
{
public:
IVersion *ver;
CClient();
~CClient();
};
↑は駄目でしょう。
せめて、
class CClient
{
IVersion *ver;
public:
void Show() const { return ver->Show(); }
CClient();
~CClient();
};
とすべきですね。
ちなみにテンプレートを使うと、
struct Version1
{
static const char value[];
};
const chat Version1::value[] = "version1";
class ClientBase
{
public:
virtual void Show() const = 0;
};
template <class Version>
class Client : public ClientBase
{
public:
virtual void Show() const { std::printf("%s\n", Version::value); }
};
あるいは、
struct Version1
{
static const char value[];
};
const chat Version1::value[] = "version1";
class ClientBase
{
public:
void Show() const { std::printf("%s\n", version);
protected:
explicit ClientBase(const char* ver) : version(ver) {}
private:
const char* version;
};
template <class Version>
class Client : public ClientBase
{
public:
Client() : ClientBase(Version::value) {}
};
のようにすることが可能です。
566ポイント を手に入れた。
|
|
|
|
|
Name: 匿名 ..入門者(3,924ポイント)
Date: 2008/11/06(木) 13:53
No:23582
|
|
Title: Re:お久です☆
|
|
確か前も言われたと思いますが、実行ファイルがどこにあるのかわかりにくい。
データファイルはわけるべき。
以前も一回ゲームオーバーになったらそこで止まっていたと思いますが、
2作目になったのならリセット機能位はつけてみては。
弾速が速い。そのわりに当たり判定が大きい。
1作目ならまだしも2作目なのならもうちょっと絵を改善してほしい。
2作目になってどこが進化したのかよくわからない。
163ポイント を手に入れた。
|
|
|
|
|
Name: ようすけ ..かけだし(1,692ポイント)
Date: 2008/11/06(木) 14:05
No:23583
|
|
Title: Re:お久です☆
|
|
> 以前も一回ゲームオーバーになったらそこで止まっていたと思いますが、
2作目になったのならリセット機能位はつけてみては。
そうですね、がんばって作ってみます。
> 弾速が速い。そのわりに当たり判定が大きい。
そういうゲームですから・・・
> 1作目ならまだしも2作目なのならもうちょっと絵を改善してほしい。
すいませんが、絵は昔から下手なもので、そればっかりは(泣
でも感想どうもでした(^v^)
103ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(123,093ポイント)
Date: 2008/11/06(木) 14:29
No:23584
|
|
Title: Re:お久です☆
|
|
個人的にあの絵は嫌いじゃないです。妙に味があるというか…(一応、褒め言葉ですw)
ゲームバランス云々は調整すればいいので、とりあえず置いておいて…w
個人的な要望としては、フルスクリーンとウインドウモードの切り替えがあるといいかなぁ…とか思います。
80ポイント を落としてしまった。
|
|
|
|
|
Name: ようすけ ..かけだし(1,839ポイント)
Date: 2008/11/06(木) 14:50
No:23586
|
|
Title: Re:お久です☆
|
|
バグさん感想どうもです。
> 個人的にあの絵は嫌いじゃないです。妙に味があるというか…(一応、褒め言葉ですw)
ありがとうございます(●^o^●) プログラムと同じぐらい絵には時間をかけたんで、
そう言ってもらえるとうれしいです。
> 個人的な要望としては、フルスクリーンとウインドウモードの切り替えがあるといいかなぁ…とか思います。
そうですね、私自身も切り替えがあったほうがいいのかなぁと思ってたんですが、doudouでは小さかったので
今回はフルスクリーンのみでやっちゃいました(笑
次は横スクロールのシューティングをつくってるので、切り替えできるようにしときます☆
147ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(873,955ポイント)
Date: 2008/11/06(木) 15:57
No:23594
|
|
Title: Re:お久です☆
|
|
やってみました。初めてやったシューティングを思い出しました^^
なんか懐かしい気持ちにさせてくれるゲームですね。
フルスクリーン切り替えは最初にメッセージボックスを表示させ、その結果を元に、
スクリーン設定をする関数を呼べば良いのですぐ実装できると思います。
具体的には
void message_box(){
int flag;
//メッセージボックス起動
flag=MessageBox(NULL , TEXT("フルスクリーンモードで起動しますか?\n\n「はい」推奨\n") ,TEXT("スクリーン設定") , MB_YESNO | MB_ICONQUESTION );
if(flag==IDYES)
;//ハイなら何もしない。
else
ChangeWindowMode( TRUE );//ウィンドウモードに変更
}
を呼べばいいですよ。
リセットに関しては、ゲーム開始時に初期化関数を呼んでいると思いますが、それをもう一度呼べばいいと思います。
グローバル変数の宣言時に
int charactor_hp = 100;
みたいなことをするのはよくないので、もししていたら、グローバル変数や静的変数の宣言時に代入するのはやめ、
キャラクタのステータスやステージに必要な変数の値は初期化関数で初期化してあげてください。
全ての変数を初期化関数できちんと初期化していればリセットは簡単です。
変数はなるべく構造体で用意してやればmemsetで全て一括初期化できるので、初期化ミスが減ります。
398ポイント を手に入れた。
|
|
|
|
|
Name: ようすけ ..かけだし(1,625ポイント)
Date: 2008/11/06(木) 16:28
No:23602
|
|
Title: Re:お久です☆
|
|
なるほど!
管理人さんどうもありがとうございます(*^_^*)
私のようにゲーム作りはじめて間もない奴にとっては、
非常にわかりやすい説明です。次のゲームで実装してみます!
ところで、ダウンロードしてくれた方々は、ちゃんとフルスクリーンで
ゲームが始まったんでしょうかねぇ?
ある本だと、WINDOWSは解像度640×480と800×600は必ずサポートしてあると
書いてあったんで、「じゃあ640×480でやってみるか」ってやったんですけど(汗
214ポイント を落としてしまった。
|
|
|
|
|
Name: ようすけ ..かけだし(1,800ポイント)
Date: 2008/11/06(木) 16:50
No:23609
|
|
Title: Re:お久です☆
|
|
> フルスクリーンで表示されましたよ。
そうですか。よかったです(●^o^●)
> あと、先ほどの関数はメイン関数の最初に書いてください。
了解です!
> 初めてやったシューティングを思い出しました^^
なんか懐かしい気持ちにさせてくれるゲームですね。
そうですね、私自身もアーケードで言えば、達人、雷電、ストライカーズ1945、ガンバード
とかをやり込んでた時期があったんで、どうしてもそういう感じのゲームになっちゃいました。(笑
やっぱ人間って最初にやったゲームとかインパクトに残るものなんですね(^v^)
175ポイント を手に入れた。
|
|
|
|
|
Name: 木霊 ..上級者(22,040ポイント)
Date: 2008/11/07(金) 02:41
No:23628
|
|
Title: Re:お久です☆
|
|
自分もやってみました。
思っていたより難しくて、まだ2面止まりです・・・
ゲームに関しては匿名さんも仰っていたように、
ゲームオーバーになるたびに終了・再実行の流れがつらい(面倒くさい)ので
タイトル画面等はあった方がいいでしょう。
いつか読んだ本で、「STGは爽快感を感じるゲーム」というのを見たことがあります。
弾が発射される(する)音・敵の撃破音・難しい弾幕を避け切る(自分は避け切れないんですが)等の
爽快感の不足を感じました。
ですので、いくつかの効果音をつければ大分印象が変わるのではないかと思います。
あとは、画像データと音楽データを見直したほうが良いと個人的に思います。
ボム時の画像で640×480を10枚使ってますが、これを小さい爆発と大きい爆発とに分けて
乱数で出現位置を決めてある程度の数を描画してそれっぽく見せるとか、
敵を影の部分と本体で分けるとかで結構容量を減らせます。
無論ステージデータの600×2580の画像もマップチップを作成してみるとかで工夫すると良いと思います。
音楽データの方ですが、これだけでおよそ142MBもあります。
Wave形式は大きいので、曲であればOgg形式等の他の形式に(可能ならば)変更したほうがいいです。
375ポイント を手に入れた。
|
|
|
|
|
Name: ようすけ ..かけだし(2,103ポイント)
Date: 2008/11/07(金) 12:06
No:23646
|
|
Title: Re:お久です☆
|
|
木霊さん感想ありがとうです(*^_^*)
> 弾が発射される(する)音・敵の撃破音・難しい弾幕を避け切る(自分は避け切れないんですが)等の
爽快感の不足を感じました。
ですので、いくつかの効果音をつければ大分印象が変わるのではないかと思います。
私もステージ音楽以外に敵を倒した時にでる効果音とか付けてみたかったんですけど、
APIのPlaySound関数は同時に二つの音は出せないらしいんですよ(泣
だから同時に出せるDirectXのDirectSound?を使おうと思ったんですが、なんせゲーム作り初心者なんで
さっぱりわかりませんでした(__)
ボムの乱数はいい案ですね。試してみます☆
> 無論ステージデータの600×2580の画像もマップチップを作成してみるとかで工夫すると良いと思います。
これも個人的に謎なんですが、1−3の空ステージみたいに単純(同じ)な絵だったら例えば35×35のマップチップを画面内に敷き詰めてループさせるといったことが可能ですけど、1−1みたいな絵が全然違う場合は
どういう風にやってるんですかね?
303ポイント を手に入れた。
|
|
|
|
|
Name: 木霊 ..上級者(22,558ポイント)
Date: 2008/11/08(土) 02:47
No:23718
|
|
Title: Re:お久です☆
|
|
>これも個人的に謎なんですが、1−3の空ステージみたいに単純(同じ)な絵だったら例えば35×35の
>マップチップを画面内に敷き詰めてループさせるといったことが可能ですけど、1−1みたいな絵が
>全然違う場合は どういう風にやってるんですかね?
マップチップのデータを全部描くのではなくて、一部分だけ描けば出来ると思います。
1 □□□
2 ○○○
3 □○□
4 ○○□
5 □○○
とデータがあったとして、
最初は3・4・5だけを描画(画面外に実は2も描画)
スクロールに合わせて2が少しずつ出現、同時に5が画面外に
画面に2が完全に出現した場合に手順の始めで描画している範囲を1ずらす
(2・3・4を描画、画面外に1を描画)
後は繰り返し・・・
要はこんな感じです。
マップチップを増やせば(例えば同じ「崖の右側」でも2・3種類作る)多少複雑なマップでも
出来ますし、背景をアニメーションさせるのも容易です。
さっきやっと2面のボスまで行けましたがあっさりやられてしまいました・・・
ところで、自分と同じ初心者ならDxライブラリを使ってみてはどうですか?
DirectXの機能を使いやすくしてくれたライブラリですので「効果音」も簡単に実装できますよ。
http://homepage2.nifty.com/natupaji/DxLib/
ここの管理人さんや常連の方々にも、使われてる方が多いのでアドバイスも受けやすいと思います。
唯一の難点はDirectXの機能を自力で身につけようとする気がなくなることぐらいですw
518ポイント を手に入れた。
|
|
|
|
|
Name: ようすけ ..かけだし(2,329ポイント)
Date: 2008/11/08(土) 10:48
No:23728
|
|
Title: Re:お久です☆
|
|
> ところで、自分と同じ初心者ならDxライブラリを使ってみてはどうですか?
DirectXの機能を使いやすくしてくれたライブラリですので「効果音」も簡単に実装できますよ。
音の問題があったので以前から使おうとは思っていたんですが、なかなか腰が重くて(笑
考えてみます(^v^)
> さっきやっと2面のボスまで行けましたがあっさりやられてしまいました・・・
なるほど(^u^)
一応攻略法としては2ボスに関しては結構弾を打ってこない時があるので、
そのタイミングを覚えてボスに張り付いてショットを打ち込めばかなり早く
倒せますよ。
あとはボス戦に関しては安地(安全地帯)も少しあるので、見つければ
動かなくても死なないので余分な弾避けをしなくてすみます☆
ちなみに3ボスは2ボスよりも数倍弾も早いし強いです(笑
何はともあれ、長く遊んでやって下さい(._.)
226ポイント を手に入れた。
|
|
|
|
Name: m ..ぴよぴよ(26ポイント)
Date: 2008/11/07(金) 17:55
No:23655
|
|
Title: 音響データ
|
|
音響データの読み込みを教えてください。
音響データは16bitずつshort型で数値が記述されています。
26ポイント を手に入れた。
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(69,986ポイント)
Date: 2008/11/08(土) 09:34
No:23725
|
|
Title: Re:音響データ
|
|
> 音響データは16bitずつshort型で数値が記述されています。
だったら、別の変数に代入するだけですね。
short型で記述しているということは、データファイルとかではなく、ソースファイルに直接書いているわけですよね。
74ポイント を落としてしまった。
|
|
|
|
Name: ぬこ ..ぴよぴよ(86ポイント)
Date: 2008/11/07(金) 02:34
No:23626
|
|
Title: 外部でKeyConfig作って読み込ませる方法
|
|
ゲームを作成していまして現在keyConfigを作っているのですがうまくいきません。
外部でkeyConfigを作成してそれを現在製作してるゲームに読み込ませたいと思っているのですが、
何か良い方法はないでしょうか?
とりあえず自分で作ってみたのですが上手くいきませんでした。
keyconfigで上への移動を「Z」に設定したら、ゲームで「Z」を押すと上に移動するようにしたいのですが。
初心者であんまり詳しくないのですが、よろしければご指導おねがいします。
86ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(876,198ポイント)
Date: 2008/11/07(金) 03:26
No:23630
|
|
Title: Re:外部でKeyConfig作って読み込ませる方法
|
|
「うまくいきません」だけではどううまくいかないのかわからないです。
医者に症状を具体的に言わずに「体調がよくないのですが、どこが悪いのですか?」といっても答えようが無い様に
私達もどううまくいかないのか、現在の仕様やプログラムはどうなっているのか教えてもらわないと悪いところはわかりません。
単純に作り方をということなら、
ゲームプログラミングの館の「セーブデータの作り方」をお読み下さい。
197ポイント を手に入れた。
|
|
|
|
|
Name: ぬこ ..ぴよぴよ(140ポイント)
Date: 2008/11/08(土) 03:05
No:23719
| 解決!
|
Title: Re:外部でKeyConfig作って読み込ませる方法
|
|
すいません言葉足らずでした。
keyコードのことを理解していなかったのですが、なんとか自己解決しました。
ゲームプログラミングの館の「セーブデータの作り方」のことは以前みたときはなかったので、見落としていました。すいません。
54ポイント を手に入れた。
|
|
|
|
|
Name: ぬこ ..ぴよぴよ(254ポイント)
Date: 2008/11/08(土) 03:05
No:23720
| 解決!
|
Title: Re:外部でKeyConfig作って読み込ませる方法
|
|
すいません言葉足らずでした。
keyコードのことを理解していなかったのですが、なんとか自己解決しました。
ゲームプログラミングの館の「セーブデータの作り方」のことは以前みたときはなかったので、見落としていました。すいません。
114ポイント を手に入れた。
|
|
|
|
Name: 初心車 ..ぴよぴよ(94ポイント)
Date: 2008/11/07(金) 21:23
No:23684
|
|
Title: 入門前
|
|
自分でゲームを作ってみたいと思ってググってみたら
このサイトにたどりついたのですが、
小学5年でも作れるでしょうか?
もし作れるのであれば 作ってみようと思うのですが・・・
厳しいのであれば、どのくらいの学年から
作れるのか教えていただければ幸いなのですが。
94ポイント を手に入れた。
|
|
|
|
Name: 御津凪 [URL] ..プログラマー(32,799ポイント)
Date: 2008/11/07(金) 21:39
No:23687
|
|
Title: Re:入門前
|
|
ゲームを作ること自体は、基本を理解さえできていれば、どなたでも作れますよ。
ただ、 この掲示板のタイトルにある、 C 言語を使ったゲームを作るには、
初めてプログラムを書く人には、厳しいかもしれません。(英語が主体ですし)
簡単にプログラムが書けるものとして、
日本語プログラミング言語「なでしこ」というものがあります。
こちらではその名の通り、日本語で簡単にプログラムが書けます。
もちろん、ゲームも作れますよ。
まずはこちらでプログラムとはどういうものか、どういう風に動いているのか、
を理解して、もっといいものを作りたいなと思ったら、
C 言語なり他のプログラミング言語に挑戦していけば良いでしょう。
もしも、算数が得意ならば(あと頭の柔らかさがあれば)、
いきなり C 言語から始めてしまっても、乗り切れると思いますよ。
何はともあれ、まずはやる気がかんじんです!
#何かあれば簡易的ですが個別指導も受け付けますよ。
340ポイント を手に入れた。
|
|
|
|
|
Name: dic ..初心者(5,397ポイント)
Date: 2008/11/07(金) 22:01
No:23692
|
|
Title: Re:入門前
|
|
参考になるか分かりませんが
弾の軌道の計算と
当たり判定
ゲームの処理の流れ
などが理解できていれば可能かと思います
パソコンのスキル、環境の設定などは省きます
79ポイント を手に入れた。
|
|
|
|
|
Name: conio ..かけだし(2,094ポイント)
Date: 2008/11/07(金) 22:15
No:23694
|
|
Title: Re:入門前
|
|
もし、将来的にゲームプログラマー等を志望しているのであれば、
まず、C言語を主に学習することをオススメします。
ゲーム制作はプログラミング言語の基礎を覚えてからの方がいいと思います。
ただ単に、何かゲームを作りたいだけというのであれば、"RPGツクール"等の
ゲーム制作ソフトがあるので、それを使って手軽に制作することも出来ます。
(当然、ソフトを買う必要があります)
あと、何学年より上じゃないと作れない、という法則は無いです。学習すれば出来るようになります。
46ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(70,060ポイント)
Date: 2008/11/07(金) 22:42
No:23699
|
|
Title: Re:入門前
|
|
> 小学5年でも作れるでしょうか?
作れます。
ただ、アルファベットに慣れないと、プログラミング以前のところでつまづいてしまいます。
ローマ字でよいので、アルファベットを完全にマスターしましょう(1日あれば大丈夫です)。
それができてから、プログラミングの学習を始めるとよいでしょう。
88ポイント を手に入れた。
|
|
|
|
|
Name: lbfuvab ..初心者(7,707ポイント)
Date: 2008/11/08(土) 00:30
No:23708
|
|
Title: Re:入門前
|
|
家にPCがあれば出来ます。
単にゲームがつくりたいなら専用のツールを使うのが明らかに楽なのでこれをお勧めします。
C言語にも興味があるなら入門書として柴田望洋氏の「明解 C言語 入門編」をお勧めします。
22ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(877,269ポイント)
Date: 2008/11/08(土) 02:10
No:23715
|
|
Title: Re:入門前
|
|
>初心車さん
こんにちは。はじめまして。
5年生からプログラムを勉強するとは素晴らしいですね。
何歳になったらプログラムが出来るようになるという事は無く、
何歳でも、やる気さえあれば、出来るようになると思います。
私が知ってる人で5歳からプログラムを始めた人がいます。
また、ここでも過去に何人か小学生が投稿してきていますから出来るはずだと思いますよ。
パソコンは使えますか?
プログラムを始める前にパソコンの基本操作を覚える事が第一です。
ここの掲示板を見つけて書き込みをされたのですから、
だいたいお解かりになっているかとは思いますが。
小学生にしてパソコンが使える環境があるということは、親か兄弟の誰かがパソコン使えるのでしょうから、
もし使い方に不安があるようなら、基本的なことをまず教えてもらってはどうでしょう。
とりあえず「解らないことはグーグルで調べる」この方法さえ知っていれば随分色んなことが出来ます。
困ったことがあればとりあえずグーグルです(好きな検索サイトなら何でもいいですが)。
ゲームプログラミングの館を読んで、プログラムがコンパイル出来る状態に出来れば、
パソコンの基本的な使い方はOKだと思います。
まずはゲームプログラミングの館を読んでセッティングしてみてはどうでしょうか?
317ポイント を手に入れた。
|
|
|
|
Name: しょしょしょしんしゃ ..入門者(2,647ポイント)
Date: 2008/11/07(金) 20:29
No:23672
|
|
Title: 質問です。よろしくおねがいします。
|
|
C言語の構造体の質問です。
問題は、
外部から正の整数Nを入力したとき、
N個のint型配列を確保して、
i番目の要素をiで初期化するプログラムの作成で、
プログラムを実行する際にはNは1000以下にすること。
自分なりに考えてみましたが、
printf/
#include<stdio.h>
#include<stdlib.h>
int main(void){
int *N;
int i;
printf("1000以下の整数Nを入力してください\n");
scanf("%d",&N);
N=(int*)calloc(*N,sizeof(int));
for(i=0;i<*N;i++){
printf("N[%d]=%d\n",i,N[i]);
}
free(N);
return 0;
}/printf
このようになりましたが、うまくできませんでした。
メモリの動的割り付けを使用に問題があるのでしょうか?
間違いや、勘違いしている点があれば、教えてください。
319ポイント を手に入れた。
|
|
|
|
Name: 御津凪 [URL] ..プログラマー(32,153ポイント)
Date: 2008/11/07(金) 20:41
No:23675
|
|
Title: Re:質問です。よろしくおねがいします。
|
|
N の型はint 型にし、*N を N に直し、
N=(int*)calloc(*N,sizeof(int));
を、
ary=(int*)malloc(sizeof(int)*N);
とし、(aryは新しく int* 型変数として用意すること)
for 文内の処理を直せば、
正しく動くはずです。
# あと、<pre></pre>では無く、<printf></printf>でくくってませんか?
117ポイント を手に入れた。
|
|
|
|
|
Name: 初級者 ..ぴよぴよ(472ポイント)
Date: 2008/11/07(金) 20:48
No:23676
|
|
Title: Re:質問です。よろしくおねがいします。
|
|
>C言語の構造体の質問です。
構造体はどこに登場するのですか?
25ポイント を手に入れた。
|
|
|
|
|
Name: しょしょしょしんしゃ ..入門者(2,664ポイント)
Date: 2008/11/07(金) 21:09
No:23681
|
|
Title: Re:質問です。よろしくおねがいします。
|
|
すいませんでした 勘違いでした
#include<stdio.h>
#include<stdlib.h>
int main(void){
int N;
int i;
int *ary;
do{
printf("1000以下の整数Nを入力してください\n");
scanf("%d",&N);
}while(1001<N);
ary=(int*)malloc(sizeof(int)*N);
for(i=0;i<N;i++){
printf("N[%d]=%d\n",i,i);
}
free(ary);
return 0;
}
とすることができましたが、これでよろしいのでしょうか?
17ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..プログラマー(32,361ポイント)
Date: 2008/11/07(金) 21:17
No:23682
|
|
Title: Re:質問です。よろしくおねがいします。
|
|
実行時の表示上、配列に入っているように見えますが、
実際には代入されていません。
(for 文で単に i を出力しているのと同じ)
for 文をもう一つ用意し、そこで N[i] = i; で代入し、
その後で配列 N に格納されている値を表示する処理にすれば、
問題文の条件に合います。
と、もう一つ。
while(1001<N);
だと、1001を入力すると通ってしまうので、
while(1000<N);
か、
while(N<1001);
に直してください。
208ポイント を手に入れた。
|
|
|
|
|
Name: 初級者 ..ぴよぴよ(629ポイント)
Date: 2008/11/07(金) 21:32
No:23686
|
|
Title: Re:質問です。よろしくおねがいします。
|
|
mallocで確保する領域の大きさが0以下だと、
なんだかまずいことになりそうです。
whileの条件を
1〜1000でない
にする方がよいかもしれません。
>御津凪さん
N[i] = i; で代入することはできません。
動的に確保したaryを使わないとまずいです。
121ポイント を手に入れた。
|
|
|
|
|
Name: しょしょしょしんしゃ ..入門者(2,780ポイント)
Date: 2008/11/07(金) 23:12
No:23701
|
|
Title: Re:質問です。よろしくおねがいします。
|
|
>ary[i] = i; でしたね。すみません。
> for 文をもう一つ用意し、そこで ary[i] = i; で代入し、
その後で配列 N に格納されている値を表示する処理にすれば、
問題文の条件に合います。
とありますが、どこに入れればいいのですか?
#include<stdio.h>
#include<stdlib.h>
int main(void){
int N;
int i;
int *ary;
for(){
//ここにいれればいいのですか?
}
do{
printf("1000以下の整数Nを入力してください\n");
scanf("%d",&N);
}while(!(N>1&&N<1000));
ary=(int*)malloc(sizeof(int)*N);
for(i=0;i<N;i++){
printf("a[%d]=%d\n",i,ary[i]);
}
free(ary);
return 0;
}
よろしくお願いします。
116ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..プログラマー(33,131ポイント)
Date: 2008/11/07(金) 23:25
No:23703
|
|
Title: Re:質問です。よろしくおねがいします。
|
|
#include<stdio.h>
#include<stdlib.h>
int main(void){
int N;
int i;
int *ary;
do{
printf("1000以下の整数Nを入力してください\n");
scanf("%d",&N);
}while(!(N>1&&N<1000));
ary=(int*)malloc(sizeof(int)*N);
for(i=0;i<N;i++){
//ここですね。
}
for(i=0;i<N;i++){
//ここでもいいですが。
printf("a[%d]=%d\n",i,ary[i]);
}
free(ary);
return 0;
}
222ポイント を手に入れた。
|
|
|
|
|
Name: 初級者 ..ぴよぴよ(640ポイント)
Date: 2008/11/07(金) 23:38
No:23704
|
|
Title: Re:質問です。よろしくおねがいします。
|
|
作ったプログラムを、ちゃんとテストしていますか?
> }while(!(N>1&&N<1000));
これだと、2〜999の場合に対応することになってしまいます。
11ポイント を手に入れた。
|
|
|
|
|
Name: しょしょしょしんしゃ ..入門者(2,924ポイント)
Date: 2008/11/08(土) 00:10
No:23706
| 解決!
|
Title: Re:質問です。よろしくおねがいします。
|
|
このようになりました。
#include<stdio.h>
#include<stdlib.h>
int main(void){
int N;
int i;
int *ary;
do{
printf("1000以下の整数Nを入力してください\n");
scanf("%d",&N);
}while(!(N>0&&N<1001));
ary=(int*)malloc(sizeof(int)*N);
for(i=0;i<N;i++){
ary[i]=i;
printf("a[%d]=%d\n",i,ary[i]);
}
free(ary);
return 0;
}
ご丁寧な回答ありがとうございます。
他に間違いがあれば 教えてください。
144ポイント を手に入れた。
|
|
|
|
|
Name: 初級者 ..かけだし(1,130ポイント)
Date: 2008/11/08(土) 00:42
No:23709
|
|
Title: Re:質問です。よろしくおねがいします。
|
|
// 自分だったらこんな風に書く、という例です。
// 実質的な動きは同じです。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int N, i, *ary;
// 字下げのメリハリを付ける
// do, if, forなどの勢力範囲が一目瞭然になるように書く
do {
printf("1000以下の整数Nを入力してください\n");
scanf("%d", &N);
} while (!(1 <= N && N <= 1000)); // 「1〜1000以外はダメ」が直感的にわかる
ary = (int *) malloc(sizeof(int) * N);
// メモリー確保に失敗したときの記述は必須
if (!ary) {
fprintf(stderr, "out of memory\n");
exit(1);
}
for (i = 0; i < N; i++) {
ary[i] = i;
printf("a[%d]=%d\n", i, ary[i]);
}
free(ary);
return 0;
}
490ポイント を手に入れた。
|
|
|
|
Name: ファルコン ..ぴよぴよ(517ポイント)
Date: 2008/11/07(金) 19:40
No:23660
|
|
Title: テキストファイルより文字を抜き出す
|
|
テキストファイルから文字を抜き出したいと思っています。
ちなみにテキストファイルの中身ですが
P_C="k123"+"CMOK"
P_M=MAX("MDMC","MKOM")
という感じで式の左辺とセミコロンでくくられた文字を抽出したいのですが
strchr,strtokやstrcpyなど文字列関数を使ってやっているのですが
うまくゆきません。どなたかアドバイスいただけたらと思います。
よろしくお願いします。
while (NULL != fgets(buf, sizeof buf,ft)){
//strcpy(cdmy,strtok(buf,"="));
// puts(cdmy);
//fprintf(fh, "#define %s output[obj[].outputs + 2].Analog\n", cdmy);
//for (i = 0; i < MAXFIELD; i++) {
tp = strtok(buf, "\"");
while( tp != NULL){
tp = strtok(NULL,"\"");
if(tp != NULL){
fprintf(fh, "#define %s output[obj[].outputs + 2].Analog\n", tp);
}
}
//if (tp != NULL){
// strcpy(cdmy, strtok(p, "\""));
// fprintf(fh, "#define %s output[obj[].outputs + 2].Analog\n",cdmy);
// }else{
// break;
// }
// }
//strcpy(cdmy, strtok(p, '"'));
//puts(cdmy);
//tp = strtok(NULL, "=\"");
//sscanf(b, "%7s%*[^\"]\"%[^\"]\"%*[^\"]\"%[^\"]", v);
//fprintf(fh, "#define %s output[obj[].outputs + 2].Analog\n", tp);
}
fclose(fh);
fclose(ft);
return 0;
}
517ポイント を手に入れた。
|
|
|
|
Name: ファルコン ..ぴよぴよ(567ポイント)
Date: 2008/11/07(金) 20:01
No:23664
|
|
Title: Re:テキストファイルより文字を抜き出す
|
|
失礼いたしました。次回より気をつけます。
本当にすみませんでした。
無礼を承知で質問のアドバイスを頂きたいのですが.....。
50ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(69,712ポイント)
Date: 2008/11/07(金) 20:21
No:23667
|
|
Title: Re:テキストファイルより文字を抜き出す
|
|
> 次回より気をつけます。
今回から改善して欲しいのですが...
> P_C="k123"+"CMOK"
> P_M=MAX("MDMC","MKOM")
> という感じで式の左辺とセミコロンでくくられた文字を抽出したいのですが
セミコロンがどこにも存在しません。
この情報だけでは、左辺を抽出することしかできそうにありません。
ちなみに左辺を抽出するだけなら、
char lhs[100+1]
fscanf(stream, "%100[^=]%*[^\n]%*c", lhs);
で十分な気がします。
103ポイント を落としてしまった。
|
|
|
|
|
Name: dic ..入門者(4,823ポイント)
Date: 2008/11/07(金) 20:24
No:23669
|
|
Title: pre使いました
|
|
#include <stdio.h>
void main()
{
while (NULL != fgets(buf, sizeof buf,ft)){
strcpy(cdmy,strtok(buf,"="));
puts(cdmy);
fprintf(fh, "#define %s output[obj[].outputs + 2].Analog\n", cdmy);
for (i = 0; i < MAXFIELD; i++) {
tp = strtok(buf, "\"");
while( tp != NULL){
tp = strtok(NULL,"\"");
if(tp != NULL){
fprintf(fh, "#define %s output[obj[].outputs + 2].Analog\n", tp);
}
}
if (tp != NULL){
strcpy(cdmy, strtok(p, "\""));
fprintf(fh, "#define %s output[obj[].outputs + 2].Analog\n",cdmy);
}else{
break;
}
}
strcpy(cdmy, strtok(p, '"'));
puts(cdmy);
tp = strtok(NULL, "=\"");
sscanf(b, "%7s%*[^\"]\"%[^\"]\"%*[^\"]\"%[^\"]", v);
fprintf(fh, "#define %s output[obj[].outputs + 2].Analog\n", tp);
}
fclose(fh);
fclose(ft);
return 0;
}
372ポイント を手に入れた。
|
|
|
|
|
Name: ファルコン ..ぴよぴよ(601ポイント)
Date: 2008/11/07(金) 20:32
No:23673
|
|
Title: Re:pre使いました
|
|
dicさん、たかぎさんご返信ありがとうございます。
セミコロンではなくダブルクオテーションでした。
何度も失礼いたしました。
34ポイント を手に入れた。
|
|
|
|
|
Name: non ..かけだし(2,456ポイント)
Date: 2008/11/07(金) 21:00
No:23678
|
|
Title: Re:pre使いました
|
|
P_C="k123"+"CMOK"
P_M=MAX("MDMC","MKOM")
を抽出した結果は
P_Ck123CMOK
P_MMDMCMKOM
で、これをファイルに出力すればいいのでしょうか?
条件として、
この場合、ダブルコーテーションは必ず行内で対になっていると考えていいですか?
=は必ずありますか?
=より前にダブルコーテーションが現れることはありますか?
127ポイント を手に入れた。
|
|
|
|
Name: rion ..ぴよぴよ(358ポイント)
Date: 2008/11/07(金) 19:59
No:23663
|
|
Title: 質問なのですが
|
|
「猫でもわかるゲームプログラミング」という本を読んで勉強しているものですが、サンプルプログラムを書いてできるかどうか試してみたところ、以下のようなエラーが出ました。
*****\win01.cpp(58) : error C2440: '=' : 'LPCSTR' から 'LPCWSTR' に変換できません。
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
*****\win01.cpp(85) : error C2664: 'CreateWindowExW' : 2 番目の引数を 'char [6]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
記述が間違ったのかと思い、サンプルをそのままコピーしてビルドしてみましたが、やはり同様なエラーが発生しました。どのようにすれば解決できるのでしょうか?
ソースを添付しましたので、ぜひご覧になって、ご返答お願いします。
(osはwindowsxp、環境はvc+2005です。)
260ポイント を手に入れた。
|
|
|
|
Name: rion ..ぴよぴよ(390ポイント)
Date: 2008/11/07(金) 20:23
No:23668
| 解決!
|
Title: Re:質問なのですが
|
|
上記のどちらの方法でも試してみたところ、両方ともで解決することができました。
ご返答たいへんありがとうございました。
32ポイント を手に入れた。
|
|
|
|
Name: 初心者 ..中級者(9,008ポイント)
Date: 2008/11/04(火) 15:22
No:23429
|
|
Title: ファイルの読み込み
|
|
現在visualc++6.0で勉強しています。課題であるテキストファイルを読み込んで(数字と英大文字のみのテキストファイル)数字と英大文字を切り分けて一行ずつ表示するプログラムを作れという課題がでました。
私がやったのはダイアログ上のEditボックスにテキストファイルを読み込んで一行ずつ貼り付けていく
というプログラムをまず考えました。そこから切り分けの作業を組み込もうと考えてるのですが
思いつきません。
void(){
FILE *p;
CString a;
cha buf[1001];
CFileDialog fdlg(TRUE,"","*.*");
if(fdlg.DoModal()!=IDOK)
return;
a=fdlg.GetPathName();
CEdit *p;
p=(CEdit *)GetDlgItem(IDC_EDIT1);
if((fp=fopen(a,"r"))==NULL)
return
while(fgets(buf,1000,fp)!=NULL){
buf[strlen(buf)-1]='\0';
strcat(buf,"\r\n");
int n=p->GetWindowTextLength();
p->SendMessage(EM_SETSEL,n,n);
p->SendMessage(EM_REPLACESEL,0,(LPARAM)buf);
}
fclose(fp);
}
というプログラムでダイアログのEditボックスにファイルを読み込み
一行ずつ貼り付けていくという作業ができました。
このプログラムにさらに文字と数字を切り分けて表示する作業を組み込みたいのです。
例えば1行目に
M02M61X0F2.5B1FG1231などが書かれているテキストファイルを
[M][02][M][61][x][0][F][2.5][B][1][FG][1231]
などのように分けて表示するプログラムです。
教えてください
519ポイント を手に入れた。
|
|
|
|
Name: 御津凪 [URL] ..プログラマー(29,811ポイント)
Date: 2008/11/04(火) 16:02
No:23438
|
|
Title: Re:ファイルの読み込み
|
|
とりあえずその分けるプログラムだけを書きました。(ブロック処理です)
{
bool isNum;
char* ch = buf;
char* nh = buf + strlen(buf);
char subbuf[128];
int n = 0;
while(ch < nh){
if(n == 0){
inNum = (isupper(*ch) == 0); // 最初に大文字かどうかをチェック
subbuf[n] = *ch;
++n;
}
else if(isNum != (isupper(*ch) != 0)){ // 一つ前の文字タイプと違う場合
subbuf[n] = '\0';
n = 0;
/* ここで subbuf に対して一行出力を行う */
}
subbuf[n] = *ch;
++n;
}
++ch;
}
}
何をしているのか読み取ってから適切な場所に書き込んでください。
特に質問とは関係はないですが、提示したソースはコンパイルが通りません。
あとソースはプレタグで囲んでくださいね。
227ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..初心者(8,401ポイント)
Date: 2008/11/04(火) 18:27
No:23444
|
|
Title: Re:ファイルの読み込み
|
|
{
bool isNum;
char* ch = buf;
char* nh = buf + strlen(buf);
char subbuf[128];
int n = 0;
// このプログラムで読み込むテキストファイルは英大文字と数字のみの構成なので大文字かどうかは
判断するプログラムは省きました。
while(ch < nh){
if(isNum != (isupper(*ch) != 0)){ // 一つ前の文字タイプと違う場合
subbuf[n] = '\0';
n = 0;
/* ここで subbuf に対して一行出力を行う */
while(fgets(subbuf,80,fp)!=NULL){
buf[strlen(subbuf()-1]='\0';
strcat(subbuf,"\r\n");
int m=p->GetWindowTextLength();
p->SendMessage(EM_SETSEL,m,m); //カレットを文字列の最後尾に移動してそこに貼り付ける
p->SendMessage(EM_REPLACESEL,o,(LPARAM)buf); //ファイルから入力した一行を張り込む
}
fclose(fp);
}
}
buf[n] = *ch;
++n;
}
++ch;
}
}
とすると予期せぬEOFが検出されましたとでて実行できません。
どこか間違ってるでしょうか
※ファイルのオープンとエデットボックスのプログラムは省いております。
初心者の為浅い探りしかできなくて申し訳ない。
607ポイント を落としてしまった。
|
|
|
|
|
Name: Mist ..プログラマー(29,829ポイント)
Date: 2008/11/04(火) 18:40
No:23446
|
|
Title: Re:ファイルの読み込み
|
|
私のほうで字下げしてみましたが、提示のソースは中カッコの数が不一致で
解析できませんけど。
{
bool isNum;
char* ch = buf;
char* nh = buf + strlen(buf);
char subbuf[128];
int n = 0;
// このプログラムで読み込むテキストファイルは英大文字と数字のみの構成なので大文字かどうかは
判断するプログラムは省きました。
while(ch < nh){
if(isNum != (isupper(*ch) != 0)){ // 一つ前の文字タイプと違う場合
subbuf[n] = '\0';
n = 0;
/* ここで subbuf に対して一行出力を行う */
while(fgets(subbuf,80,fp)!=NULL){
buf[strlen(subbuf()-1]='\0';
strcat(subbuf,"\r\n");
int m=p->GetWindowTextLength();
p->SendMessage(EM_SETSEL,m,m); //カレットを文字列の最後尾に移動してそこに貼り付ける
p->SendMessage(EM_REPLACESEL,o,(LPARAM)buf); //ファイルから入力した一行を張り込む
}
fclose(fp);
}
}
buf[n] = *ch;
++n;
}
++ch;
}
}
545ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..プログラマー(29,868ポイント)
Date: 2008/11/04(火) 19:00
No:23448
|
|
Title: Re:ファイルの読み込み
|
|
> このプログラムで読み込むテキストファイルは英大文字と数字のみの構成なので大文字かどうかは
> 判断するプログラムは省きました。
isupper 関数は、『英字の大文字』かをチェックする関数です。
(英大文字とはこの意味ですよね?)
また、それを省いた状態だと、
isNum が初期化されないままになってしまいます。(最初の部分が正しく分けられない)
私の書いたプログラムにある、
/* ここで subbuf に対して一行出力を行う */
の部分時点で、既に subbuf には数値と英大文字に分けた形で入っています。
それに、 buf に既に読み込んだデータがある(ファイルから全て読み出した後)
として書いたプログラムですので、これでは正しく処理できません。
# どういう処理が行われていくのか理解できていますでしょうか?
# 他人のソースコードを解読するのも勉強です。
57ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(68,755ポイント)
Date: 2008/11/04(火) 19:25
No:23450
|
|
Title: Re:ファイルの読み込み
|
|
ほとんど揚げ足に近いですが...
> isupper 関数は、『英字の大文字』かをチェックする関数です。
厳密にいうと違います。
isupper関数は、大文字、またはiscntrl、isdigit、ispunctもしくはisspaceのいずれも真とならない文化圏固有の文字集合の中の文字かどうかを判定するものです。
つまり、ラテン文字であっても英字(英語の文字)以外の文字(具体的にはアクセントやウムラウトがついた文字など)や、キリル文字やギリシャ文字などの非ラテン文字の大文字かどうかを判定することも可能です。
一応念のため。
199ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(120,264ポイント)
Date: 2008/11/04(火) 19:30
No:23451
|
|
Title: Re:ファイルの読み込み
|
|
もし、ソース内のCStringがMFCのCStringであるならば、色々と便利なメソッドが用意されていると思いますよ。そうでないならば、失礼しました(^_^;)
35ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..初心者(8,524ポイント)
Date: 2008/11/04(火) 19:51
No:23455
|
|
Title: Re:ファイルの読み込み
|
|
今一度しっかり見直します。それでわからなかったらまた教えてください。
※字下げの件は特殊なコマンドが必要なの知らなかったので・・申し訳ない。
※一番上のソースはおそらく最初の文がおかしいのだと思います。コード編集すると最初から
書かれているのがそれです。誤解しやすいように書いてしまいました。
123ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..初心者(8,750ポイント)
Date: 2008/11/05(水) 11:37
No:23502
|
|
Title: Re:ファイルの読み込み
|
|
上記のプログラムでは
読み込み→仕分け→また読み込みになるのか同じ結果(仕分けがされていない状態での1行表示)
になってしまいました。
226ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..プログラマー(30,066ポイント)
Date: 2008/11/05(水) 13:12
No:23509
|
|
Title: Re:ファイルの読み込み
|
|
> 読み込み→仕分け→また読み込みになるのか同じ結果(仕分けがされていない状態での1行表示)
そのプログラムを見せていただけませんか?
…と、その前に、
p->SendMessage(EM_REPLACESEL,0,(LPARAM)buf);
では無く、
p->SendMessage(EM_REPLACESEL,0,(LPARAM)subbuf);
としないと、せっかく subbuf に仕分けた文字列が表示されません。
> たかぎさん
そうでした。MSDNライブラリでも「英字」とはかかれていませんでしたね。
198ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..中級者(9,364ポイント)
Date: 2008/11/05(水) 13:35
No:23510
|
|
Title: Re:ファイルの読み込み
|
|
{
bool isNum;
char* ch = buf;
char* nh = buf + strlen(buf);
char subbuf[128];
int n = 0;
FILE *fp;
CString a;
char buf[1001];
CFileDialog fdlg(TRUE,"","*.*");
if(fdlg.DoModal()!=IDOK)
return;
a=fdlg.GetPathName();
CEdit *p;
p=(CEdit *)GetDlgItem(IDC_EDIT1);
if((fp=fopen(a,"r"))==NULL)
return
while(ch < nh){
if(n == 0){
isNum = (isupper(*ch) == 0); // 最初に大文字かどうかをチェック
subbuf[n] = *ch;
++n;
}
else if(isNum != (isupper(*ch) != 0)){ // 一つ前の文字タイプと違う場合
subbuf[n] = '\0';
n = 0;
/* ここで subbuf に対して一行出力を行う */
while(fgets(subbuf,80,fp)!=NULL){
buf[strlen(subbuf()-1]='\0';
strcat(subbuf,"\r\n");
int m=p->GetWindowTextLength();
p->SendMessage(EM_SETSEL,m,m); p->SendMessage(EM_REPLACESEL,o,(LPARAM,subbuf); }
fclose(fp);
}
subbuf[n] = *ch;
++n;
}
++ch;
}
今仕分け入力が全くされてないことに気づきました・・
printfが何か使えないのでどうしたものかと
614ポイント を手に入れた。
|
|
|
|
|
Name: いけやん ..上級者(15,449ポイント)
Date: 2008/11/05(水) 14:08
No:23512
|
|
Title: Re:ファイルの読み込み
|
|
Printfの代わり
VC++だという事ですが、
MFCなんですか?わかりませんが、
MFCとかなら
MessageBox系が使えますよ。
moji = "あああ"
AfxMessageBox(moji)
結果
あああ
90ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..プログラマー(29,926ポイント)
Date: 2008/11/05(水) 14:15
No:23513
|
|
Title: Re:ファイルの読み込み
|
|
人に見てもらうプログラムとしては誤字多すぎです。
ちょっと見ただけでも
> FILE *p;
*pじゃなくて*fpよね。
> cha buf[1001];
chaじゃなくてcharよね。
isNumもinNumになってたりしますし。
76ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..中級者(9,482ポイント)
Date: 2008/11/05(水) 14:19
No:23514
|
|
Title: Re:ファイルの読み込み
|
|
MFCです。
その入力の仕方は知っているのですが今求められてるのは
ファイルから読み込んで仕分けした内容を表示していきます。
ER121DF45F4TT5という文字列がテキストファイルの一行目にあれば
[ER][121][DF][45][F][4][TT][5]などのようにです。
これもMessageBoxでできるのでしょうか
118ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..プログラマー(29,592ポイント)
Date: 2008/11/05(水) 14:26
No:23515
|
|
Title: Re:ファイルの読み込み
|
|
とりあえず提示していただいたコードから修正しました。
(そのままコンパイルが通るか確認していませんが)
どう変わっているか、よく読んでくださいね。
(ファイルから読み込む配列 buf と仕分け用の作業領域の subbuf を間違えないように)
{
FILE *fp;
CString a;
char buf[1001];
bool isNum;
char* ch = buf;
char* nh = buf + strlen(buf);
char subbuf[128];
int n = 0;
CFileDialog fdlg(TRUE,"","*.*");
if(fdlg.DoModal()!=IDOK) return;
a=fdlg.GetPathName();
CEdit *p;
p=(CEdit *)GetDlgItem(IDC_EDIT1);
if((fp=fopen(a,"r"))==NULL) return;
while(fgets(buf,1000,fp)!=NULL){
buf[strlen(buf)-1]='\0';
}
fclose(fp);
while(ch < nh){
if(n == 0){
isNum = (isupper(*ch) == 0); // 最初に大文字かどうかをチェック
}
else if(isNum != (isupper(*ch) != 0)){ // 一つ前の文字タイプと違う場合
subbuf[n] = '\0';
n = 0;
/* ここで subbuf に対して一行出力を行う */
int m=p->GetWindowTextLength();
p->SendMessage(EM_SETSEL,m,m);
p->SendMessage(EM_REPLACESEL,o,(LPARAM)subbuf);
}
subbuf[n] = *ch;
++n;
++ch;
}
}
> 人に見てもらうプログラムとしては誤字多すぎです。
Mist さんのおっしゃるとおり、実行できているコードそのままを提示していただけると
助かるのですが…。
> isNumもinNumになってたりしますし。
あ、すいません、そこは私の間違いでした(汗
474ポイント を落としてしまった。
|
|
|
|
|
Name: バグ ..ハッカー(121,192ポイント)
Date: 2008/11/05(水) 14:34
No:23516
|
|
Title: Re:ファイルの読み込み
|
|
MFCならば、こういう場合は、EditBoxよりもListBoxを使うべきじゃないかな?
15ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..中級者(9,523ポイント)
Date: 2008/11/05(水) 14:35
No:23517
|
|
Title: Re:ファイルの読み込み
|
|
申し訳ないです。プログラムできるPCとネットできるPCが完全に分かれている為、
手書きで写して書いています。
41ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..中級者(9,618ポイント)
Date: 2008/11/05(水) 14:52
No:23518
|
|
Title: Re:ファイルの読み込み
|
|
ビルドしてみましたがエラーは出ないのですが
Debug Assertion Failed!
program:ファイル名
files:fgets.c
Line:60
Expression str!=NULL
と出て実行できないのですがどこが悪いのでしょう
95ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..プログラマー(29,802ポイント)
Date: 2008/11/05(水) 15:08
No:23519
|
|
Title: Re:ファイルの読み込み
|
|
恐らく、 fgets 関数に渡す 第一引数が NULL になっているのではないでしょうか?
上記のプログラムの通りに書かれていれば、そこに buf が入るはずですが。
ブレイクポイントを使って変数の値を確かめてみましたか?
ブレイクポイントを付けると、実行時にそこで一旦止まるので、
その時の変数等をチェックすることができますよ。
詳しい方法は↓に書かれています。
[22933]
210ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(121,406ポイント)
Date: 2008/11/05(水) 15:12
No:23520
|
|
Title: Re:ファイルの読み込み
|
|
m_listbox1 = 数字表示用リストボックス
m_listbox2 = アルファベット表示用リストボックス
上記の2つのコントロールをリソースエディタで追加してください。
void FileRead()
{
// リストボックスのアイテムを全て消去する
INT i = 0;
for (i = 0; m_listbox1.GetCount(); ++i) m_listbox1.DeleteString(0);
for (i = 0; m_listbox2.GetCount(); ++i) m_listbox2.DeleteString(0);
// ファイルを読み込んでリストボックスへ割り当てる
CFileDialog dlg(TRUE);
if (dlg.DoModal() == IDOK)
{
CHAR buf = '\0';
BOOL isnum = FALSE;
CString data = "";
CFile file(dlg.GetPathName(), CFile::modeRead);
while (file.Read(&buf, 1) >= 1)
{
// 0〜9かドット(小数点?)の場合は数字として扱い、それ以外はアルファベットとする
if (isdigit((int)buf) != 0 || buf == '.')
{
if (data.GetLength() == 0)
{
data += buf;
isnum = TRUE;
}
else if (isnum == FALSE)
{
m_listbox2.AddString(data);
data = buf;
isnum = TRUE;
}
else
{
data += buf;
}
}
else
{
if (data.GetLength() == 0)
{
data += buf;
isnum = FALSE;
}
else if (isnum == TRUE)
{
m_listbox1.AddString(data);
data = buf;
isnum = FALSE;
}
else
{
data += buf;
}
}
}
// 最後に読み込んだ文字列をリストボックスへ追加する
if (isnum == TRUE)
{
m_listbox1.AddString(data);
}
else
{
m_listbox2.AddString(data);
}
// ファイルを閉じる
file.Close();
}
}
214ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(121,625ポイント)
Date: 2008/11/05(水) 15:15
No:23522
|
|
Title: Re:ファイルの読み込み
|
|
すみません、ちょっと修正…
VOID FileRead()
{
// リストボックスのアイテムを全て消去する
INT i = 0;
for (i = 0; m_listbox1.GetCount(); ++i) m_listbox1.DeleteString(0);
for (i = 0; m_listbox2.GetCount(); ++i) m_listbox2.DeleteString(0);
// ファイルを読み込んでリストボックスへ割り当てる
CFileDialog dlg(TRUE);
if (dlg.DoModal() == IDOK)
{
CHAR buf = '\0';
BOOL isnum = FALSE;
CString data = "";
CFile file(dlg.GetPathName(), CFile::modeRead);
while (file.Read(&buf, 1) >= 1)
{
// 0〜9かドット(小数点?)の場合は数字として扱い、それ以外はアルファベットとする
if (isdigit((int)buf) != 0 || buf == '.')
{
if (data.GetLength() == 0)
{
data += buf;
isnum = TRUE;
}
else if (isnum == FALSE)
{
m_listbox2.AddString(data);
data = buf;
isnum = TRUE;
}
else
{
data += buf;
}
}
else
{
if (data.GetLength() == 0)
{
data += buf;
isnum = FALSE;
}
else if (isnum == TRUE)
{
m_listbox1.AddString(data);
data = buf;
isnum = FALSE;
}
else
{
data += buf;
}
}
}
// 最後に読み込んだ文字列をリストボックスへ追加する
if (data.GetLength() != 0)
{
if (isnum == TRUE)
{
m_listbox1.AddString(data);
}
else
{
m_listbox2.AddString(data);
}
}
// ファイルを閉じる
file.Close();
}
}
219ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..プログラマー(29,964ポイント)
Date: 2008/11/05(水) 15:16
No:23523
|
|
Title: Re:ファイルの読み込み
|
|
現在のソースがどのような状態かわからないので推測になりますが
fgetsの引数にNULLを渡したときに上記のエラーになったと記憶しています。
(str!=NULLとなっているのでたぶんfp側かな?)
御津凪さんのソースであればそうはならないはずですが、何か間違ってませんか?
38ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..中級者(9,695ポイント)
Date: 2008/11/05(水) 15:46
No:23524
|
|
Title: Re:ファイルの読み込み
|
|
見る限り全く同じです。
そのブレイクポイントなんですがその記事見る限りVisualC++2008系で
私が使っているVisualC++6.0のMFCには上記の通りではできませんでした。
もう1回最初から書き直してみます。
77ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(121,701ポイント)
Date: 2008/11/05(水) 15:49
No:23525
|
|
Title: Re:ファイルの読み込み
|
|
VC++6.0でのブレイクポイント設定方法は、ブレイクポイントを設定したい行へカーソルを合わせて、手の形をしたアイコンを押せば設定されます。削除したい場合は再度同じ操作を行って下さい。
76ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..中級者(9,773ポイント)
Date: 2008/11/05(水) 16:05
No:23526
|
|
Title: Re:ファイルの読み込み
|
|
ブレイクポイントを
while(fgets(buf,1000,fp)!=NULL){
の←につけてビルド、実行、ファイル指定、ok、の順に押しても同じ結果に・・
変数はどこでチェックできるのでしょうか
78ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..中級者(9,798ポイント)
Date: 2008/11/05(水) 16:29
No:23528
|
|
Title: Re:ファイルの読み込み
|
|
書き直すとDebugの件はでなくなりましたが
フフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフ4Fなど文字化けしてしまいます。
これはどこが悪いのでしょうか
25ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(121,594ポイント)
Date: 2008/11/05(水) 16:30
No:23529
|
|
Title: Re:ファイルの読み込み
|
|
ブレイクポイントでプログラムは停止しましたか?
停止したのならば、その状態でコードエディタの確認したい変数へマウスカーソルを合わせれば表示されます。
継続的に確認をしたいのならば、変数へマウスカーソルを合わせて右クリックした後に、クイックウォッチをクリック、そして追加ボタンをクリックすれば変化を追いかける際に便利です。
107ポイント を落としてしまった。
|
|
|
|
|
Name: バグ ..ハッカー(121,670ポイント)
Date: 2008/11/05(水) 16:32
No:23530
|
|
Title: Re:ファイルの読み込み
|
|
>>書き直すとDebugの件はでなくなりましたが
フフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフ4Fなど文字化けしてしまいます。
これはどこが悪いのでしょうか
そういわれましても、書き直したソースと読み込んだファイルが無ければ誰にも分からないと思いますよ。
76ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..中級者(10,356ポイント)
Date: 2008/11/05(水) 16:47
No:23531
|
|
Title: Re:ファイルの読み込み
|
|
[
FILE *fp;
CString a;
char buf[1001];
bool isNum;
char* ch = buf;
char* nh = buf + strlen(buf);
char subbuf[128];
int n = 0;
CFileDialog fdlg(TRUE,"","*.*");
if(fdlg.DoModal()!=IDOK) return;
a=fdlg.GetPathName();
CEdit *p;
p=(CEdit *)GetDlgItem(IDC_EDIT1);
if((fp=fopen(a,"r"))==NULL) return;
while(fgets(buf,1000,fp)!=NULL){
buf[strlen(buf)-1]='\0';
}
fclose(fp);
while(ch < nh){
if(n == 0){
isNum = (isupper(*ch) == 0); // 最初に大文字かどうかをチェック
}
else if(isNum != (isupper(*ch) != 0)){ // 一つ前の文字タイプと違う場合
subbuf[n] = '\0';
n = 0;
/* ここで subbuf に対して一行出力を行う */
int m=p->GetWindowTextLength();
p->SendMessage(EM_SETSEL,m,m);
p->SendMessage(EM_REPLACESEL,o,(LPARAM)subbuf);
}
subbuf[n] = *ch;
++n;
++ch;
}
}
上記がソースで
読み込んだファイルは
M70
M67
M85
G40
G92X2.203Y40.078
H1=138
G01G41X0.F2.5H1E1051M90
Y0.
X5.321
Y3
X10.781Y46.211
などが20行ぐらい続いてるファイルです。
558ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..プログラマー(29,970ポイント)
Date: 2008/11/05(水) 17:16
No:23532
|
|
Title: Re:ファイルの読み込み
|
|
char* ch = buf;
char* nh = buf + strlen(buf);
この部分を、
char* ch;
char* nh;
として、ファイルからデータを読み込んだ後( fclose(fp); 以降)に、
ch = buf;
nh = buf + strlen(buf);
を、入れてください。
変数宣言時での代入時では buf には不正な値が入ったままなので、
そこの strlen が正常に動作しませんでした。
168ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(121,940ポイント)
Date: 2008/11/05(水) 17:22
No:23533
|
|
Title: Re:ファイルの読み込み
|
|
ソース云々以前に何点かツッコミをさせてください。
>>読み込んだファイルは
>>M70
>>M67
>>M85
>>G40
>>G92X2.203Y40.078
>>H1=138
>>G01G41X0.F2.5H1E1051M90
>>Y0.
>>X5.321
>>Y3
>>X10.781Y46.211
>>などが20行ぐらい続いてるファイルです。
これって、"="はあるし…
>>数字と英大文字のみのテキストファイル
と書かれていた前提が崩れている気がするのですが…
更に言えば
>>X5.321
こういう場合は、[X][5.321]とするようですけど…
>>Y0.
というような場合はどういう風に扱うのですか?
後だし条件が多すぎですね。詳細な仕様を提示しなければ、いつまでたってもイタチごっこですよ。
270ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(122,010ポイント)
Date: 2008/11/05(水) 17:24
No:23534
|
|
Title: Re:ファイルの読み込み
|
|
あと、提示されたソースではコンパイルを通りません。
>> p->SendMessage(EM_REPLACESEL,o,(LPARAM)subbuf);
この行で、突然に謎の"o"という変数が現れています。
おそらく数値のゼロと書き間違えたのだろうとは思いますが…。
70ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..プログラマー(30,123ポイント)
Date: 2008/11/05(水) 17:25
No:23535
|
|
Title: Re:ファイルの読み込み
|
|
御津凪さんのソースをあまりしっかり見てなかったんですが
> while(fgets(buf,1000,fp)!=NULL){
> buf[strlen(buf)-1]='\0';
> }
この部分はちょっとおかしくないですかね?
これだと最後の一行しかbufに残らないですよね。(それでいいのだったら無視してください)
あと、
> buf[strlen(buf)-1]='\0';
ファイルの最後の行が以下のような場合、最後の文字列の最後の一文字を消してしまいますよね。
・
・
文字列[改行]
文字列[EOF]
もうひとつ、空のファイルの場合にbufが不定値のままですね。
159ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..中級者(10,578ポイント)
Date: 2008/11/05(水) 17:36
No:23536
|
|
Title: Re:ファイルの読み込み
|
|
>>これって、"="はあるし…
数字と英大文字のみのテキストファイル
と書かれていた前提が崩れている気がするのですが…
この部分は私も課題出されたときに表示されていませんでした。ですのでこの部分はどう表示されてても構いません。
>>>Y0.
というような場合はどういう風に扱うのですか?
[Y][0.]です。
先ほど御津凪さんに指摘されたところを修正し実行してみると、何も表示されませんでした。
222ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..中級者(10,671ポイント)
Date: 2008/11/05(水) 18:19
No:23538
|
|
Title: Re:ファイルの読み込み
|
|
添付したテキストファイルを一行ずつ文字と数字に切り分けて表示するようなプログラムを作成せよ
例えばG01G41X0.F2.5H1E1061M90なら
[G][01]
[G][41]
[X][0.]
[F][2.5]
[H][1]
[E][1061]
[M][90]
の様にです。
93ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(122,764ポイント)
Date: 2008/11/05(水) 18:41
No:23539
|
|
Title: Re:ファイルの読み込み
|
|
それならば、私が投稿した(No:23522の記事)ソースで動きませんか?(^_^;)
ちょっと改造したのを、もう一度載せときますね。
あらかじめ、ListBoxコントロールをダイアログに2つ貼り付けておいてください。
void ReadFile()
{
// リストボックスのポインタを取得する
CListBox* listbox1 = (CListBox*)GetDlgItem(IDC_LIST1);
CListBox* listbox2 = (CListBox*)GetDlgItem(IDC_LIST2);
// リストボックスのアイテムを全て消去する
INT i = 0;
for (i = 0; listbox1->GetCount(); ++i) listbox1->DeleteString(0);
for (i = 0; listbox2->GetCount(); ++i) listbox2->DeleteString(0);
// ファイルを読み込んでリストボックスへ割り当てる
CFileDialog dlg(TRUE);
if (dlg.DoModal() == IDOK)
{
CHAR buf = '\0';
BOOL isnum = FALSE;
CString data = "";
CFile file(dlg.GetPathName(), CFile::modeRead);
while (file.Read(&buf, 1) != FALSE)
{
// 0〜9かドット(小数点?)の場合は数字として扱い、それ以外はアルファベットとする
if (isdigit((int)buf) != 0 || buf == '.')
{
if (data.GetLength() == 0)
{
data += buf;
isnum = TRUE;
}
else if (isnum == FALSE)
{
listbox2->AddString(data);
data = buf;
isnum = TRUE;
}
else
{
data += buf;
}
}
if (isalpha((int)buf) != 0)
{
if (data.GetLength() == 0)
{
data += buf;
isnum = FALSE;
}
else if (isnum == TRUE)
{
listbox1->AddString(data);
data = buf;
isnum = FALSE;
}
else
{
data += buf;
}
}
}
// 最後に読み込んだ文字列をリストボックスへ追加する
if (data.GetLength() != 0)
{
if (isnum == TRUE)
{
listbox1->AddString(data);
}
else
{
listbox2->AddString(data);
}
}
// ファイルを閉じる
file.Close();
}
}
754ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(122,872ポイント)
Date: 2008/11/06(木) 08:29
No:23561
|
|
Title: Re:ファイルの読み込み
|
|
すみません、上記のソースで間違いを発見しました…orz
もとのソースでも、結果オーライ的に問題はないのですが、気持ち悪いので下記のように修正してください。
// リストボックスのアイテムを全て消去する
INT i = 0;
for (i = 0; i < listbox1->GetCount(); ++i) listbox1->DeleteString(0);
for (i = 0; i < listbox2->GetCount(); ++i) listbox2->DeleteString(0);
108ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..中級者(10,734ポイント)
Date: 2008/11/06(木) 10:04
No:23563
|
|
Title: Re:ファイルの読み込み
|
|
バグさんのプログラム実行してみたんですがエラーは出ませんでしたが
仕分けされていないプログラムが1行listbox1に表示されるだけでした。
50ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(123,006ポイント)
Date: 2008/11/06(木) 11:19
No:23567
|
|
Title: Re:ファイルの読み込み
|
|
勘違いしてました。更に修正をお願いします。
// リストボックスのアイテムを全て消去する
INT i = 0;
for (i = 0; i < listbox1->GetCount(); ++i) listbox1->DeleteString(0);
for (i = 0; i < listbox2->GetCount(); ++i) listbox2->DeleteString(0);
この部分を…
// リストボックスのアイテムを全て消去する
listbox1->ResetContent();
listbox2->ResetContent();
こう変更してください。
これで、こちらでは問題なく動きます。
134ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(123,057ポイント)
Date: 2008/11/06(木) 11:24
No:23568
|
|
Title: Re:ファイルの読み込み
|
|
一応、証拠画像を…
読み込んだファイルの中身は
G01G41X0.F2.5H1E106=1M90
これです。数字とアルファベット以外は無視します。
51ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..中級者(11,024ポイント)
Date: 2008/11/06(木) 11:29
No:23569
|
|
Title: Re:ファイルの読み込み
|
|
申し訳ない。私のミスだったようで無事実行できました
上記のも試してみます。ありがとうございました
2倍のポイントを手に入れた! 290ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..中級者(11,082ポイント)
Date: 2008/11/06(木) 11:42
No:23571
|
|
Title: Re:ファイルの読み込み
|
|
私のは
LIST1
0.
01
1061
2.5
41
90
LIST2
E
F
G
G
H
M
X
と並べ替えされています。ソースは上記のと同じです。
並べ替えせずに表示したいのですがどうしたらいいでしょう
実行したテキストファイルは
G01G41X0.F2.5H1E
58ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..中級者(11,173ポイント)
Date: 2008/11/06(木) 11:51
No:23574
|
|
Title: Re:ファイルの読み込み
|
|
{
// リストボックスのポインタを取得する
CListBox* listbox1 = (CListBox*)GetDlgItem(IDC_LIST1);
CListBox* listbox2 = (CListBox*)GetDlgItem(IDC_LIST2);
// リストボックスのアイテムを全て消去する
listbox1->ResetContent();
listbox2->ResetContent();
// ファイルを読み込んでリストボックスへ割り当てる
CFileDialog dlg(TRUE);
if (dlg.DoModal() == IDOK)
{
CHAR buf = '\0';
BOOL isnum = FALSE;
CString data = "";
CFile file(dlg.GetPathName(), CFile::modeRead);
while (file.Read(&buf, 1) != FALSE)
{
// 0〜9かドット(小数点?)の場合は数字として扱い、それ以外はアルファベットとする
if (isdigit((int)buf) != 0 || buf == '.')
{
if (data.GetLength() == 0)
{
data += buf;
isnum = TRUE;
}
else if (isnum == FALSE)
{
listbox2->AddString(data);
data = buf;
isnum = TRUE;
}
else
{
data += buf;
}
}
if (isalpha((int)buf) != 0)
{
if (data.GetLength() == 0)
{
data += buf;
isnum = FALSE;
}
else if (isnum == TRUE)
{
listbox1->AddString(data);
data = buf;
isnum = FALSE;
}
else
{
data += buf;
}
}
}
// 最後に読み込んだ文字列をリストボックスへ追加する
if (data.GetLength() != 0)
{
if (isnum == TRUE)
{
listbox1->AddString(data);
}
else
{
listbox2->AddString(data);
}
}
// ファイルを閉じる
file.Close();
}
}
がソースです
91ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(123,173ポイント)
Date: 2008/11/06(木) 12:13
No:23578
|
|
Title: Re:ファイルの読み込み
|
|
ソート(並び替え)機能が有効になっているようですね。
ダイアログエディタのリストボックス上で、右クリックして「プロパティ」、「スタイル」と選択し、ソートと書かれたチェックボックスのチェックを外してください。
プログラム内で無効にする方法もあるにはあるのですが、非常に面倒です。
116ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..中級者(11,276ポイント)
Date: 2008/11/06(木) 18:27
No:23613
|
|
Title: Re:ファイルの読み込み
|
|
上記のプログラムは一文字ずつ呼んで仕分けしていくプログラムだとは思うのですが
一行読み込んで仕分けして表示 というようなのはできないでしょうか?
何度も申し訳ない
77ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(122,969ポイント)
Date: 2008/11/06(木) 18:35
No:23614
|
|
Title: Re:ファイルの読み込み
|
|
できますよ。
CStdioFileクラスのReadString関数を使用すれば一行ずつ読み込めます。
ただ、結局は読み込んだ文字列を分解して、今のプログラムと全く同じように処理していかなければいけないので同じことだと思いますけど…
68ポイント を落としてしまった。
|
|
|
|
|
Name: バグ ..ハッカー(123,073ポイント)
Date: 2008/11/06(木) 18:40
No:23615
|
|
Title: Re:ファイルの読み込み
|
|
MFCを使用したサンプルです。
選択したファイルの一行目を読み込んで、CString型のdataに読み込んだ内容を格納して、MessageBoxで表示するだけです。
CFileDialog dlg(TRUE);
if (dlg.DoModal() == IDOK)
{
CString data = "";
CStdioFile file(dlg.GetPathName(), CFile::modeRead);
file.ReadString(data);
MessageBox(data);
}
104ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..中級者(11,641ポイント)
Date: 2008/11/07(金) 10:29
No:23639
|
|
Title: Re:ファイルの読み込み
|
|
一行ずつ表示はできたのですが一区切りごとにMessageboxが出てきます。
G01G41X0.F2.5H1E
ならば
G
01
G
41
X
0.
F
2.5
H
1
Eの11個のメッセージボックスが出ます。100行ぐらいあるのでこれだとどうしても・・
書き方が悪かったので申し訳ないのですが・・
一行読み込んで、分解して表示するのは全部の行を一気に表示したいのですが不可能でしょうか?
私が行ったプログラムのソースは
CFileDialog dlg(TRUE);
if (dlg.DoModal() == IDOK)
{
CString data = "";
CStdioFile file(dlg.GetPathName(), CFile::modeRead);
file.ReadString(data);
MessageBox(data);
}
while (file.Read(&buf, 1) != FALSE)
{
// 0〜9かドット(小数点?)の場合は数字として扱い、それ以外はアルファベットとする
if (isdigit((int)buf) != 0 || buf == '.')
{
if (data.GetLength() == 0)
{
data += buf;
isnum = TRUE;
}
else if (isnum == FALSE)
{
Messagebox(data);
data = buf;
isnum = TRUE;
}
else
{
data += buf;
}
}
if (isalpha((int)buf) != 0)
{
if (data.GetLength() == 0)
{
data += buf;
isnum = FALSE;
}
else if (isnum == TRUE)
{
MessageBox(data);
data = buf;
isnum = FALSE;
}
else
{
data += buf;
}
}
}
// 最後に読み込んだ文字列をリストボックスへ追加する
if (data.GetLength() != 0)
{
if (isnum == TRUE)
{
MessageBox(data);
}
else
{
MessageBox(data);
}
}
// ファイルを閉じる
file.Close();
}
}
すごい不自然な気もしますが・・教えてください。
381ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(123,100ポイント)
Date: 2008/11/07(金) 11:17
No:23643
|
|
Title: Re:ファイルの読み込み
|
|
質問の意味がよく分からないですが…
1行ごとに分解した結果を表示したいという事でしょうか?
例えば…
aw12erfg4567uiop
oi876t3vbuw651wg
みたいなファイルだったら、
[awerfguiop] [124567]
[oitvbuwwg] [8763651]
(左がアルファベット表示用リストボックスで、右が数字表示用リストボックスです)
みたいな感じですか?
18ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..中級者(11,702ポイント)
Date: 2008/11/07(金) 11:33
No:23644
|
|
Title: Re:ファイルの読み込み
|
|
そんな感じで大丈夫だと思います。
一文字ずつ読み込んでいたらきついといわれたので一行ずつ読み込むプログラムに切り替えたいです
61ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..中級者(11,427ポイント)
Date: 2008/11/07(金) 11:59
No:23645
|
|
Title: Re:ファイルの読み込み
|
|
G00X49.82Y27.133ような行があったときに
LST1には
0の次に数字0がくるので
00とし
4の次に9がきて次に.がきて次に8がきて次に2がきて
49.82となり
2の次に7がきて.がきて1がきて3がきて3がきて
27.133となり次が英文字でその手前までを取り出す
00
49.82
27.133と書き込まれるのだと思いますが
単体ごとを組み合わせるのではなく[00][49.82][27.133]そのものを取り出すやり方じゃないと
CADの図形が取り込めないのでダメだといわれました
while (file.Read(&buf, 1) != FALSE)は変えないといけないなともいわれました
ポインタを使えばいいと言われたんですがポインタの仕組みがいまいち理解できなくてわかりません。
275ポイント を落としてしまった。
|
|
|
|
|
Name: バグ ..ハッカー(123,192ポイント)
Date: 2008/11/07(金) 12:11
No:23647
|
|
Title: Re:ファイルの読み込み
|
|
書き込みごとに言っている事がコロコロと変わっているんですけど…
結局、どうしたいのかをもう少し具体的に書き込んでください。
G00X49.82Y27.133
さっき確認した内容だと
[GXY][0049.8227.133]
こうなりますが、これでは駄目だという事ですか?
[G][00]
[X][49.82]
[Y][27.133]
こういう風に改行させるという事ですか?
92ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(124,495ポイント)
Date: 2008/11/07(金) 18:24
No:23656
|
|
Title: Re:ファイルの読み込み
|
|
自分で考える気がないように感じるんだけど…
まぁ、乗りかかった舟だし…
どうやら、コピペできた方がいいっぽいので、出力先をリストボックスからエディットボックスへ変更しました。
それから、エディットボックスへ文字列を追加する部分が行数がかさんで仕方ないので、関数化しました。
そちらのダイアログクラスにメンバ関数を追加してください。
これで駄目なら、もっと詳細の仕様を書きこむなり、決めるなりしてください。
出ている情報では、私にはこれ以上は無理です。
void FileRead()
{
// エディットボックスのポインタを取得する
CEdit* edit1 = (CEdit*)GetDlgItem(IDC_EDIT1);
CEdit* edit2 = (CEdit*)GetDlgItem(IDC_EDIT2);
// エディットボックスのアイテムを全て消去する
edit1->SetWindowText("");
edit2->SetWindowText("");
// ファイルを読み込んでエディットボックスへ割り当てる
CFileDialog dlg(TRUE);
if (dlg.DoModal() == IDOK)
{
INT count = 0;
CString buf;
CStdioFile file(dlg.GetPathName(), CFile::modeRead);
// ファイルの読み込みが成功している間ループする
while (file.ReadString(buf) != FALSE)
{
BOOL isnum = FALSE;
CString check;
// ファイルから読み込んだ文字列を1文字ずつチェックする
for (INT i = 0; i < buf.GetLength(); ++i)
{
// 数字、ドットのチェック
if (isdigit((int)buf.GetAt(i)) != 0 || buf.GetAt(i) == '.')
{
if (i == 0)
{
isnum = TRUE;
check += buf.GetAt(i);
}
else if (isnum == FALSE)
{
isnum = TRUE;
AddString(edit1, check);
check = buf.GetAt(i);
}
else
{
check += buf.GetAt(i);
}
}
// アルファベット(大文字のみ)のチェック
if (isalpha((int)buf.GetAt(i)) != 0 && isupper((int)buf.GetAt(i)) != 0)
{
if (i == 0)
{
isnum = FALSE;
check += buf.GetAt(i);
}
else if (isnum == TRUE)
{
isnum = FALSE;
AddString(edit2, check);
check = buf.GetAt(i);
}
else
{
check += buf.GetAt(i);
}
}
}
// 文字列が空でなければ、リストボックスへ追加する
if (check.IsEmpty() == FALSE)
{
if (isnum == TRUE)
{
AddString(edit2, check);
}
else
{
AddString(edit1, check);
}
}
}
// ファイルを閉じる
file.Close();
}
}
// エディットボックスへ文字列を追加する
void AddString(CEdit* edit, CString& str)
{
CString buf;
edit->GetWindowText(buf);
buf += (str + "\r\n");
edit->SetWindowText(buf);
str.Empty();
}
1,303ポイント を手に入れた。
|
|
|
|
Name: あきひと ..ぴよぴよ(5ポイント)
Date: 2008/11/07(金) 13:55
No:23650
|
|
Title: 14歳からはじめるシリーズ
|
|
第5章の戦艦ボスを出現させるプログラムを書いたんですがメイクできて実行もできるのにスタート画面からボタンを押すとエラーがでて強制終了してしまいます。
どうすればよいでしょうか??
5ポイント を手に入れた。
|
|
|
Name: tmhr ..ぴよぴよ(457ポイント)
Date: 2008/11/06(木) 00:27
No:23550
|
|
Title: 無題
|
|
最近C++のプログラムの勉強を「猫でもわかるプログラミング」を参考にはじめました。
早速本題なんですが、簡単な文字を画面に出力するプログラムなんですが
#include <iostream>
int main(void)
{
cout<<"私の名前は、××です。";
return 0;
}
こういう風にやってみたんですがビルドするときにエラーが出てしまうんです。
構文エラー : '{' が ':' の前にありません。
このようなエラーが出てしまうんです。
分かりにくいかと思いますがよろしくお願いします。
158ポイント を手に入れた。
|
|
|
|
Name: tmhr ..ぴよぴよ(511ポイント)
Date: 2008/11/06(木) 00:48
No:23552
|
|
Title: Re:無題
|
|
すみませんでした。
次からはちゃんとします。
Microsoft Visual C++ 2008 Express Editionでコンパイルしてます。
OSはVistaです。
54ポイント を手に入れた。
|
|
|
|
|
Name: tmhr ..ぴよぴよ(546ポイント)
Date: 2008/11/06(木) 00:53
No:23553
|
|
Title: Re:無題
|
|
#include <iostream>
int main(void)
{
cout<<"私の名前は、××です。";
return 0;
}
35ポイント を手に入れた。
|
|
|
|
|
Name: psachopin ..ぴよぴよ(95ポイント)
Date: 2008/11/06(木) 02:20
No:23556
|
|
Title: Re:無題
|
|
#include <iostream>
using namespace std;
int main(void)
{
cout<<"私の名前は、××です。";
return 0;
}
と、二行目に
using namespace std;
を入れてみてください。
95ポイント を手に入れた。
|
|
|
|
|
Name: 組木紙織 [URL] ..熟練のプログラマー(64,910ポイント)
Date: 2008/11/06(木) 06:18
No:23560
|
|
Title: Re:無題
|
|
using namespace std;
を書いていなかったというのもありますが、
一番の原因は拡張子を.cにしてCでコンパイルしたことです。
拡張子を.cppにしてC++でコンパイルするようにすれば
プロジェクトを作り直さなくてもコンパイルできるようになると思います。
113ポイント を落としてしまった。
|
|
|
|
|
Name: tmhr ..ぴよぴよ(750ポイント)
Date: 2008/11/06(木) 12:22
No:23579
|
|
Title: Re:無題
|
|
上の二つの方法やってみました。
でも、ビルドエラーが出てしまいます。
Failed to load and parse the manifest. U_U!$kLdK
のようなエラーがでてしまいます。
2倍のポイントを手に入れた! 158ポイント を手に入れた。
|
|
|
|
|
Name: 組木紙織 [URL] ..熟練のプログラマー(65,115ポイント)
Date: 2008/11/06(木) 23:00
No:23619
|
|
Title: Re:無題
|
|
ちょとそれだけだと私にはエラーの原因がわかりません。
エラーの全文載せたら何かわかるかもしれませんが、
その前にやってもらいたいことは
1:PCを再起動する(念のために)
2:上記のリンク先のとおりにやってみて、同じことが出来るかどうか確認をする。
3:リンク先のとおりにコンパイル&実行が出来たら。改変をした質問文のソースコードを打ち込みコンパイルをする。
このとおりにしてエラーが出たらエラーの全文をあげてください。
#VistaだからUACの問題なのかな。
205ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(257,496ポイント)
Date: 2008/11/07(金) 02:29
No:23625
|
|
Title: Re:無題
|
|
>Failed to load and parse the manifest. U _U!$kL dK
>のようなエラーがでてしまいます。
うちの環境でも時々出るんですよね、それ。
でも再度ビルドすると特にエラーなしでビルドできるので、
非常に再現性が低い・・・。
そんなかんじで、結局原因はきちんとわかっていないのですが、
大まかな推測では
・ SP1じゃないから(Cドライブの容量が少なくて SP1を適用できない・・・)
・ アンチウィルスソフトがマニフェストファイルをロックしている
のどちらかかな、と思っています。
というわけで、もし再度ビルドないしはリビルドでも全く改善できないのであれば、
アンチウィルスソフトをオフにしたり、VisualStudio2008 SP1を適用してみては
どうでしょうか?
169ポイント を手に入れた。
|
|
|
|
|
Name: tmhr ..ぴよぴよ(771ポイント)
Date: 2008/11/07(金) 10:14
No:23638
| 解決!
|
Title: Re:無題
|
|
組木紙織さんのやり方でできました。
助言して頂いたみなさんありがとうございました。
21ポイント を手に入れた。
|
|
|
|
|
Name: tmhr ..ぴよぴよ(818ポイント)
Date: 2008/11/07(金) 10:38
No:23640
|
|
Title: Re:無題
|
|
先の質問は解決したんですが
リンク先の方法でやるとデバッグするときにウインドウが一瞬だけ出てすぐに消えてしまうんですが
そういう仕様なんですか?
47ポイント を手に入れた。
|
|
|
|
|
Name: YuO ..プログラマー(25,273ポイント)
Date: 2008/11/07(金) 10:45
No:23641
|
|
Title: Re:無題
|
|
デバッグ実行におけるプログラム終了時にコンソールウィンドウが閉じるのは仕様です。
mainのreturnにブレークポイントをはるとか,#ifdefでデバッグ時はキー入力を待つようにするとかしてください。
57ポイント を手に入れた。
|
|
|
|
Name: 猿 ..ぴよぴよ(43ポイント)
Date: 2008/11/07(金) 02:38
No:23627
|
|
Title: 無題
|
|
画像が取り込めず映りません サンプルプログラム実行用フォルダにいれてもだめみたいです
ちなみにVC++
43ポイント を手に入れた。
|
|
|
Name: chunezu ..初心者(5,905ポイント)
Date: 2008/10/22(水) 23:39
No:22873
|
|
Title: 効果音
|
|
STGに効果音を付けようとしています。
MusicStudioProducerで作った音(.mid)をoggかwavに変換して作ろうとしています。
ただ、鳴らしてみたところ音が出るまでにすごい時間がかかる事が分かりました。
このサイトでDxLibのサンプルプログラムの中のtest.wavは何故かちゃんとしたタイミングで音が鳴っていました。
この違いはいったい何でしょうか?
173ポイント を手に入れた。
|
|
|
|
Name: Justy ..ハッカー(246,566ポイント)
Date: 2008/10/23(木) 00:34
No:22876
|
|
Title: Re:効果音
|
|
どうやって再生したのか、にも依りますが、多分DXライブラリのサンプルに付いている
test.wavはファイルサイズが小さいので、読み込み&デコードが一瞬で完了し、
即座に再生できたのではないでしょうか。
その oggか wavファイルの容量はどれくらいありますか?
もし数十MBとかそれ以上あるようでしたら、ファイルの容量を減らすか、
ストリーミング方式で再生してみてはどうでしょうか?
# 基本的にサウンドの再生はデコード済みデータがメモリ内にないと
若干(数フレームかそれ以上)遅れます。
111ポイント を手に入れた。
|
|
|
|
|
Name: chunezu ..初心者(5,959ポイント)
Date: 2008/10/26(日) 22:28
No:23110
|
|
Title: Re:効果音
|
|
ご回答有難う御座います。
自作の効果音がtest.wavの10倍程の容量があることが分かりました。
ただ、どうしたらこの差を埋めることができるのでしょうか?
54ポイント を手に入れた。
|
|
|
|
|
Name: chunezu ..初心者(6,082ポイント)
Date: 2008/10/27(月) 23:25
No:23152
|
|
Title: 画像
|
|
効果音の問題は解決済みでした・・・もうしわけないです。
ただ、まったく別の質問なのですが、普通の小さい画像(.png)だと、500〜700登録しても、なんともないんですが、大きい画像を表示すると、それ一枚で処理落ちが起きたり、画面がすごいカクカクしてしまいます。大きい画像を正常に何枚も表示する良い方法はないでしょうか?
123ポイント を手に入れた。
|
|
|
|
|
Name: chunezu ..初心者(6,163ポイント)
Date: 2008/10/28(火) 14:20
No:23162
|
|
Title: Re:効果音
|
|
ご回答有難う御座います。
SetDrawAreaや拡大を試したみましたが、カクカクするのはあまり改善されず…目に悪いです。
640×480の一枚絵を普通に表示させるのは無理…なのでしょうか?
81ポイント を手に入れた。
|
|
|
|
|
Name: chunezu ..初心者(6,327ポイント)
Date: 2008/11/01(土) 23:19
No:23332
|
|
Title: Re:効果音
|
|
返信遅れてすいません・・・
いろいろ試してみた結果、フルスクリーンにすると、問題なく表示されることが分かりました。
ご回答有難う御座いました。
また、効果音のはなしなのですが、
一時はフリーの効果音で妥協しようと思いましたが、全然よいのが見つかりませんでした。
やはり自分で作ろうと思い、あの後からいろいろと試してみましたが、全く駄目でした。
今回は自作の効果音を上げました。これとtest.wavの何が違うか教えてください。
サイズは音の長さによってまちまちなので良いものとし、ビットレートは同じであることを確認しました。
164ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(872,719ポイント)
Date: 2008/11/02(日) 10:25
No:23338
|
|
Title: Re:効果音
|
|
test.wavと同じビットレートであることを確認したということですが、
そもそもこれMidiファイルじゃないですか?
midファイルの再生には時間がかかりますよ。
リファレンスにもそうかいてありますし。
また、DXライブラリはフルスクリーンで使ってもらう事を推奨しているようなので、
ウィンドウモードより安定する場合があります。
こちらでテストしたところ、test.wavの再生は0.001秒未満、添付された.midファイルの再生には0.3秒以上かかってました。
midはメモリにロードできないし、重複再生出来ないし、時間もかかるので、wavに変換してはどうでしょうか。
PlayMusic関数はあまり使う関数ではありません。
152ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(251,947ポイント)
Date: 2008/11/02(日) 14:31
No:23345
|
|
Title: Re:効果音
|
|
>フルスクリーンにすると、問題なく表示されることが分かりました
ウインドウモードでうまく動かなくても問題はないのですか??
>やっぱり音は鳴りませんが・
フォーマット的には問題有りません。
プログラムがおかしいか、環境がおかしいかのどちらかではないでしょうか。
168ポイント を手に入れた。
|
|
|
|
|
Name: chunezu ..初心者(6,492ポイント)
Date: 2008/11/04(火) 21:32
No:23462
|
|
Title: Re:効果音
|
|
ご回答有難う御座います。
プログラムがいけなっかったようでした・・・修正したら音も鳴るようになりました。
ただ、いざ音を鳴らすと0.6〜0.7秒ほど音が遅れてしまいます。
どうすれば正常に鳴るようになるでしょうか?
Music Studio Producerでmidファイルを作り、AudioEncoderでwavに変換しています。
98ポイント を手に入れた。
|
|
|
|
|
Name: chunezu ..初心者(7,231ポイント)
Date: 2008/11/06(木) 23:49
No:23621
|
|
Title: Re:効果音
|
|
む、そうですね、
以下は効果音に関係しているソースコードです。
効果音再生
void music_ini(){
memset(se_flag,0,sizeof(int)*10);
}
void music_play(){
int i;
for(i=0;i<10;i++){
if(se_flag[i]==1)
PlaySoundMem(S[i],DX_PLAYTYPE_BACK);
}
main.cppの一部
while( !ProcessMessage() && !ClearDrawScreen() && GetHitKeyStateAll_2(Key)==0){
RefreshTime=GetNowCount();
counter++; //カウンター
music_ini(); //効果音初期化
switch(Mainflag){
case 0:
titleKey();
break;
case 10:
ziki();
enemy_main();
shot_main();
hit();
Gdraw();
break;
}
music_play(); //効果音再生
SetDrawBright(105+counter*10,105+counter*10,105+counter*10); //画面切り替え
fps(); //FPS表示
ScreenFlip();
while(GetNowCount()-RefreshTime<17);
}
return 0;
}
shot.cppのパターン部分
void pattern1(int n){ //自機狙いと3way弾幕。
int k,tm,a;
tm = shot[n].count;
//自機狙い弾幕。
if( tm%60==0 || tm%60==3 || tm%60==6 || tm%60==9 || tm%60==12 || tm%60==15 || tm%60==18 ){
if(shot[n].flag!=2 && (k=shot_search(n))!=-1){
if(tm%60==0){ angle[0] = atan2( nz.y - enemy[shot[n].num].y , nz.x - enemy[shot[n].num].x ); }
shot[n].bullet[k].x = enemy[shot[n].num].x;
shot[n].bullet[k].y = enemy[shot[n].num].y;
shot[n].bullet[k].size = 8;
shot[n].bullet[k].flag = 1;
shot[n].bullet[k].spd = 5.5;
shot[n].bullet[k].knd = 0;
shot[n].bullet[k].col = 0;
shot[n].bullet[k].angle = angle[0];
se_flag[0]=1;
}
}
//3way弾幕。
if( tm%60==0 || tm%60==3 || tm%60==6 || tm%60==9 || tm%60==12 || tm%60==15 || tm%60==18 ){
for(a=0;a<=2;a++){
if(shot[n].flag!=2 && (k=shot_search(n))!=-1){
shot[n].bullet[k].x = enemy[shot[n].num].x;
shot[n].bullet[k].y = enemy[shot[n].num].y;
shot[n].bullet[k].size = 8;
shot[n].bullet[k].flag = 1;
shot[n].bullet[k].spd = 5.5;
shot[n].bullet[k].knd = 0;
shot[n].bullet[k].col = 1;
shot[n].bullet[k].angle = (PI/180)*(-65-(a*25));
se_flag[0]=1;
}
}
}
}
739ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(257,327ポイント)
Date: 2008/11/07(金) 00:02
No:23623
|
|
Title: Re:効果音
|
|
>ただ、いざ音を鳴らすと0.6〜0.7秒ほど音が遅れてしまいます。
>どうすれば正常に鳴るようになるでしょうか?
あー、なるほど。
多分原因は素材でしょう。
この wavファイルは再生してから0.6672秒後から音が鳴っています。
先頭の無音部分を削ればいいかと。
104ポイント を落としてしまった。
|
|
|
|
|
Name: chunezu ..初心者(7,291ポイント)
Date: 2008/11/07(金) 00:24
No:23624
| 解決!
|
Title: Re:効果音
|
|
ご回答有難う御座います
フリーソフトをDLし無音部分を削ってみました。
そうしたら普通に効果音が鳴るようになりました!
素早い対応有難う御座います。
本当にありがとうございました!
60ポイント を手に入れた。
|
|
|
|
Name: モッチー ..ぴよぴよ(110ポイント)
Date: 2008/11/06(木) 15:05
No:23588
|
|
Title: C言語・・・何もわからなくなった・・・。
|
|
構造体やら何やら出てきたらわかんなくなってしまった。
っというよりも、もともとC言語をどう勉強すればいいのかすらわかってない。
C言語の担当教員は一人で「簡単!簡単!」っていってるだけだし。
問題出して、ちゃんとした説明してくれないし。
誰一人問題を解けてないのに、自分ができたからってどんどん進んでいtってしまう。
C言語ってどうやって勉強したらよいですか?
110ポイント を手に入れた。
|
|
|
|
Name: box ..ハッカー(128,811ポイント)
Date: 2008/11/06(木) 15:19
No:23589
|
|
Title: Re:C言語・・・何もわからなくなった・・・。
|
|
> 問題出して、ちゃんとした説明してくれないし。
> 誰一人問題を解けてないのに、自分ができたからってどんどん進んでいtってしまう。
きちんと説明してほしいとか、
みんなが理解してから先へ進んでほしいとか、
あなたの方から先生にお願いしていますか?
わかろうとする努力を、あなたご自身はどのように行なっていますか?
25ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..プログラマー(31,668ポイント)
Date: 2008/11/06(木) 15:39
No:23591
|
|
Title: Re:C言語・・・何もわからなくなった・・・。
|
|
プログラム言語は「言語」と付いている通り、一種の言葉(方言)と例えられます。
つまり、プログラムを書くことは、自分のしたいことを翻訳し、
コンピューターに命令させる、ということです。
(C 言語に限らす、プログラム言語を直接コンピュータが理解しているわけではありませんがそれは置いといて。)
担当教員の「簡単」とはどのレベルを指して言っているのかは不明ですが、
いきなり言語を書き始めているのではないでしょうかね?
とりあえず、今一度 C 言語を習い始めたところから教科書なりどこかの入門サイトなりを見て、
C 言語についての理解を深めたほうが良いかもしれませんね。
プログラム言語を習い始める時、この文がどういうことをしているのか、
というのを知らないと、応用問題がちんぷんかんぷんになりやすいです。
ところで、こちらから質問と確認をしてもよろしいでしょうか?
(関数というものを使っていますが習いましたか?)
#include <stdio.h>
void show1( void ){
printf("show1:\n");
printf("[0]Hallo world!\n");
printf("[1]Hallo world!\n");
printf("[2]Hallo world!\n");
printf("[3]Hallo world!\n");
printf("[4]Hallo world!\n");
printf("[5]Hallo world!\n");
printf("[6]Hallo world!\n");
printf("[7]Hallo world!\n");
printf("[8]Hallo world!\n");
printf("[9]Hallo world!\n");
}
void show2( void ){
int i;
printf("show2:\n");
for(i = 0;i < 10;i++){
printf("[%d]Hallo world!\n",i);
}
}
int main( void ){
show1();
show2();
return 0;
}
上記のプログラムをモッチーさん自身で何をしているのか解読出来ますでしょうか?
もし、近くに友達がいたら、その方はこれを解読出来ますでしょうか?
(他人のプログラムを読み解くのもC言語を覚える方法の一つですよ)
あと、 box さんの言う通り、先生にきちんと相談したほうが良いでしょう。
2倍のポイントを手に入れた! 1,634ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(874,791ポイント)
Date: 2008/11/06(木) 16:11
No:23595
|
|
Title: Re:C言語・・・何もわからなくなった・・・。
|
|
大学の教授って自己満足授業している人はよくいますよね。
私もそういう先生のこと、友達と
「あんな授業わからんよな〜。わからんで当然だよな」
と解らないことを正当化するような言い訳を言い合っていました。
でも結局それって自分の力が足りないだけだったんですよね。
そういうことで後悔したことがあるので、モッチーさんのようにわからない授業でも
しっかり勉強して挑もうとしていらっしゃる姿勢は素晴らしいと思います。
さて、勉強方法ですが、書籍で勉強するのは普通ですが、
C言語の場合、ウェブでもかなり勉強できます。
「C言語 入門」でググって見てください。沢山参考になるサイトが出てきます。
まずは上の方にヒットしたものからみていって、自分が読みやすいと思ったサイトをじっくり読んでみましょう。
また、C言語の勉強は自分のパソコンにまずコンパイラを入れることから始まります。
もしコンパイラを持ってないときは、自分のパソコンに入れてください。
http://www.microsoft.com/japan/msdn/vstudio/express/
VisualC++2008というのがおススメです。
プログラムは数学です。社会ではありません。
つまり教科書を読んで覚えて勉強するのではなく、自分で実際にいろんなプログラムを書いて演習で身に付けます。
ですから、サイトの内容を読んでは、書いてあるサンプルを実際に実行してみて結果を確認してください。
その時、適当に値を変更して結果がどう変わるか確認してください。
そうしているうちに身に付いてきます。
少しわかった時点で大きな書店に行ってみてください。
少しわかりかけてくれば、どの本が読みやすいか、わかりやすいか解ると思います。
自分の決めた本をじっくり読んでサンプルを実行したりしてみてください。
C言語の基本的な構文、配列、文字列、関数、ポインタ、構造体、この辺がわかって来たら
まず自分の興味ある小さなソフトなりゲームなりを作ってみるのがおススメです。
例えばうちでいえばDXライブラリを使ったゲーム制作の方法について解説していますから、
うちのサイトをご覧になるのでしたら簡単なゲーム作成がおススメです。
もしゲーム作りが好きなら自分で興味持ってC言語を勉強できると思います。
好きこそ物の上手なれという言葉があるように、それが好きであればすごく上達していきます。
一通りの事が出来るようになってきたら、アルゴリズム系の参考書を買ってきて、またはウェブで見つけて、
端から勉強してみるのも大事です。
線形リストやあらゆるソートアルゴリズムなど基本的なアルゴリズムを一通りしっておくことは結構重要です。
ここまでもし出来るようになれば授業なんて出なくても100点同然でしょう。
授業も楽しくなると思います。
勉強中に解らないことがあれば、ここで聞いてもらったら良いですし、
最初のうちはつまづいて先に進めなくなることもないと思います。
頑張ってください。
836ポイント を手に入れた。
|
|
|
|
|
Name: たいちう ..上級者(15,253ポイント)
Date: 2008/11/06(木) 16:11
No:23596
|
|
Title: Re:C言語・・・何もわからなくなった・・・。
|
|
C言語に限らないけど、自分が考えて理解する必要があります。主体は自分。
自分が何が理解できていて何が理解できていないのか、
常に意識しておく必要があります。
理解を後回しにして突っ走ることも必要ですが、
必ず理解できているところまで戻って考えなければならない。
このようなプロセスに「教師」という役割はあまり必要でないと思うんですよ。
学習という主体的なプロセスが、受動的なものになってしまいます。
自分が理解できないことを責任転嫁したりしやすいし。
「参考書」の一形態と考えてはいかがでしょうか?
もちろん、この参考書にも良し悪しがあり、選べないことも多いのですが、
別になくても学習できないことはありません。
「参考書」が一冊ハズレだったのならば、別の本を使いましょう。
書店で立ち読みして自分にあったものを見つけましょう。
お金を使いたくないならば、初心者用のC言語のサイトを探しましょう。
1つだけオススメを書いておきます。
教師が教えるのではなく、自分が学習するのだということを忘れずに。
「初心者のためのポイント学習C言語」
http://www9.plala.or.jp/sgwr-t/index.html
288ポイント を手に入れた。
|
|
|
|
|
Name: モッチー ..ぴよぴよ(224ポイント)
Date: 2008/11/06(木) 16:15
No:23597
|
|
Title: Re:C言語・・・何もわからなくなった・・・。
|
|
>きちんと説明してほしいとか、
>みんなが理解してから先へ進んでほしいとか、
>あなたの方から先生にお願いしていますか?
去年にクラス全体でいっています。
というより学校側から何度も注意をしてもらっていますが・・・。
途中で担当を買えたのですが、そしたら変えたほうのクラスからも文句がでたようで。
114ポイント を手に入れた。
|
|
|
|
|
Name: モッチー ..ぴよぴよ(382ポイント)
Date: 2008/11/06(木) 16:26
No:23599
|
|
Title: Re:C言語・・・何もわからなくなった・・・。
|
|
最初のうちはみんな独学でなんとかなったのですが、ポインタからひっかかり、ポインタの途中から教員を変えてもらったのですが・・・。
俺はポインタの前で脱落しました。
今はファイルのブロック処理とかをしているらしいです。
こないだ、違う教員に少しきいたのでポインタをなんとなくわかってきたばかり。
C言語の成績トップメンバーは、今の授業がさっぱりで、ホームページつくったりしてるみたいです(笑
)
158ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(875,459ポイント)
Date: 2008/11/06(木) 16:27
No:23600
|
|
Title: Re:C言語・・・何もわからなくなった・・・。
|
|
「授業の内容がわかりません」→「単に自分の勉強不足ですよ」
と言われがちだと思いますが
確かに大学には全くわけのわからない授業をする人はいますよね。
しかも学校側から何度も注意を受けている教授ならかなり酷い授業なのでしょう。
もう授業はあきらめて自発的に勉強しましょう。
大学の数学の授業なら情報数学から微分積分から複素平面から線形代数から沢山あるでしょうから
授業内容を把握せずに全部網羅するのは困難ですが、
C言語の授業なら、テストに出るような問題は限られてくると思うので、
授業や教科書にとらわれず、自分で勉強しても特殊な授業でない限り、テスト対策はバッチリになると思います。
1年生ならせいぜいC言語の基本構文、2年生ならアルゴリズム系のテストだと思います。
C言語に詳しくなれば授業でいくら意味不明なことを言っていたとしても
何の分野の話をしているか位解ると思います。
勉強の方法は既に書いたので省略します。
302ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..プログラマー(31,840ポイント)
Date: 2008/11/06(木) 16:37
No:23604
|
|
Title: Re:C言語・・・何もわからなくなった・・・。
|
|
> C言語の成績トップメンバーは、今の授業がさっぱりで、ホームページつくったりしてるみたいです(笑)
C言語の成績トップメンバーもついていけないほど授業の速度が速すぎる、ということでしょうか。
管理人さんの言うとおり、自発的に勉強するしかないようですね。
C 言語についての質問ならこちらでも何でも受け付けていますので、
どしどし聞いてくれればどしどし答えますよ。(私も含め)
毎日クラスでC言語勉強会を開くのも一つの手ではありますが。
…ところで何故にホームページ(笑)
172ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(875,889ポイント)
Date: 2008/11/06(木) 16:42
No:23607
|
|
Title: Re:C言語・・・何もわからなくなった・・・。
|
|
ホームページ作るのも結構いい勉強になりますよ。
私は昔からホームページ作ってたので授業でホームページ作れという課題が出たときは楽でしたw
C言語勉強し始めたばかりの頃、C言語の勉強がてらにC言語の解説サイトを作ったりしました。
「解説サイト作るからにはいい加減なことかけない」と思うと結構細かいことまで自発的に勉強することになり、
今までごまかしていた部分を掃除するいい機会になります。
・・・とか良いながら結構このサイトもいい加減ですがw
135ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(122,962ポイント)
Date: 2008/11/06(木) 17:15
No:23611
|
|
Title: Re:C言語・・・何もわからなくなった・・・。
|
|
授業云々は関係なく、勉強方法を書いてみますね。
結局、プログラムって書いた数だけ上達すると思うんですよ。
プログラム、好きですか?
好きならば、自分なりの解釈でいいので、どんどんプログラムを書きましょう。
それしかないと思います。
ただ教わっただけで、理解できたりするような、そんなものではありません。
131ポイント を落としてしまった。
|
|
|
|
|
Name: conio ..かけだし(2,048ポイント)
Date: 2008/11/06(木) 21:26
No:23617
|
|
Title: Re:C言語・・・何もわからなくなった・・・。
|
|
順序良く、少しずつ理解していけば大抵理解できるようになりますよ。
自分は3ヶ月くらいで、基本的な構文などは覚えました。
あと、本を見て分かったつもりになっていても、いざプログラムを作ろうとすると、
「あれ、どうするんだったっけ?」と、詰まる可能性が高いです。
実際にプログラムを作れば、自分が理解できていない部分が明確になると思いますので、とにかく書いてみた方がいいと思います。
@printf文
Ascanf文
Bif文
Cswitch文
Dfor文
Ewhile文
Fdo文
G配列
H@〜Gの文を組み合わせたり、入れ子にしたりして練習する。
I関数を自分で作る
J列挙体
Kポインタ
L構造体
Mオブジェクト形式マクロ、関数形式マクロ
N文字列の比較・コピー・表示などの操作
Oファイルを開く、書き込むなどの操作
Pソート等のアルゴリズムの理解
自分は大体このような感じで、学習を進めました。(参考程度に)
プログラミングにおいて重要なのは、"自分で文や変数、関数などを組み合わせて、意図したプログラムを作る事が出来る発想力"
だと思います。頑張って下さい。
282ポイント を手に入れた。
|
|
|
|
|
Name: 究極の初心者 ..中級者(11,533ポイント)
Date: 2008/11/06(木) 21:59
No:23618
|
|
Title: Re:C言語・・・何もわからなくなった・・・。
|
|
僭越ながら・・・・。
勉強ってすべてなんですが、主体性があるかどうかで大きく分かれます。
そして、不思議なもので、教わるという立場にいる人(学生など)の人のほうが、主体性にかけてしまいます。
もちろん、皆が皆とは言いませんが、どうしても宿題とかってめんどくさいですよね^^;
やらさている、またやらなくてはいけない感じが強いからだと思います。
でも、こういう主体性は人に言われたから付くものでもないので、ひとまず置いておいて・・・・。
人それぞれ合った勉強の仕方ってものがあると思います。
ここにいる時点で、ネットが見れるわけでして、ネット上にたくさん講座のサイトがあります。
私は、最初そういうものを見ながら学びました。
多くの方は、そうやって学んでいるのだと思います。
しかし・・・・・多くのサイトは説明不足になりがちです。
っというか、え?なんで??って思った箇所を理解しにくかったです(個人的に)
また、サイトサイトで教え方が違ったりもして(voidで始まるサイトもあれば、intで始まるサイトもあったり)、これまた困惑しました。
そこで、私はC言語の入門書を買い、それを一冊やりとおす。
これに決めました。
本で出てる時点で、誤字誤植はあっても、説明に大きな嘘はないでしょう。
なので、わからなかったら一度戻って、理解できるまで繰り返したりしました。
本も自分に合ったものを、吟味して買いました。
これって人それぞれです。
ネットのほうが、理解しやすい人もいます。本を見ながらやるのが嫌いな人などもいますし。
逆に、私のように、本を見ながらのほうが進む人間もいます。
つまり・・・・・自分に合った勉強法を探すのが一番です。
あとC言語に関しては、プログラムコードを見るだけじゃなくて、めんどくさくても書いてください。
そして、実行してみてください。何度もエラーが起きます。そのたびに、理解していきます。
ごめんなさい、長くなりました。
最後に、簡単に自分の例をあげたいと思います。
1.まず学んでみる。
↓
2.理解できない。
↓
3.一字一句、そして言葉通り、変数に代入などをして、ゆっくり考えてみる。
↓
4.それでもわからないときは、ネットで調べてみる。
↓
5.そんでもわからないときは、ここで質問しましょう。
なるべく自分で解決しようと心がけることも、大切だと思います。
長くなってすみません。こういうことしか、回答者になれない者で^^;
あと教授を嫌いになると、その科目は終わってしまいがちです(苦笑
そのせいで、社会が私は全くわかりませんからw
がんばってみてくださいね。
1,080ポイント を手に入れた。
|
|
|
|
|
Name: array [URL] ..プログラマー(37,805ポイント)
Date: 2008/11/06(木) 23:10
No:23620
|
|
Title: Re:C言語・・・何もわからなくなった・・・。
|
|
学校は教えてもらうのを前提に行く場所だと思いますが
自ら学ぶ姿勢も大事だと思います。
特にプログラムは自分で書いて、実行する事で理解が深まるので
参考書を進めていき、分らないところを授業で補足する意気込みで授業を受けた方がいいと思います。
・・・正直、プログラムを知らない人は、どれだけ上手く口頭で説明されても10%も理解できないと思います。
と、実際にC言語を学んで思いました。
113ポイント を手に入れた。
|
|
|
|
|
Name: ムンバ ..初心者(8,183ポイント)
Date: 2008/11/07(金) 00:01
No:23622
|
|
Title: Re:C言語・・・何もわからなくなった・・・。
|
|
こんばんは。お世話になります。<(_ _)>
初めまして!モッチーさん。
自分の勘違いや自分の入力などのミスで、こちらにて毎度、馬鹿な質問をしている者です。(汗
モッチーさんのご質問に対して自分自身の事も含め
お聞きしたいと思ったので、書き込みさせて頂きます。
モッチーさんが、何でC言語の勉強をしてるのか?・・・と、言いますか
何で、C言語の勉強を始めようかと思ったのか?
C言語を勉強したいと思ったきっかけは、何か?
私は、ゲームを作りたい!という理由だけでC言語の勉強をして間もないです。
モッチーさんがC言語を勉強しようと思った理由をお聞きしたいです。
もし宜しければ始めたきっかけを、教えてください。
お願いします。
311ポイント を手に入れた。
|
|
|
|
Name: SM-VC++ 2008 ..ぴよぴよ(33ポイント)
Date: 2008/11/04(火) 14:47
No:23426
|
|
Title: new でアドレス空間を取得したいですが
|
|
SM-VC++ 2008環境で
例えば
floatデータのアドレスを100個保存するために、
下記のようにメモリを取得しようとしますと、
float *fp = new (float*)[100];
なら、コンパイラエラーで、
float *fp = new float*[100];
だと、コンパオイラ・エラーはないが、実行エラーになります。
どうすれば、いいでしょうか
33ポイント を手に入れた。
|
|
|
|
Name: YuO ..プログラマー(25,216ポイント)
Date: 2008/11/04(火) 15:20
No:23428
|
|
Title: Re:new でアドレス空間を取得したいですが
|
|
> SM-VC++ 2008環境で
なんですか,これ。
> float *fp = new (float*)[100];
> なら、コンパイラエラーで、
> float *fp = new float*[100];
> だと、コンパオイラ・エラーはないが、実行エラーになります。
どちらもコンパイルエラーになりそうなものですが。
# 後者はfloat **からfloat *への変換
float *fp = new float[100];
ではないのですか?
使い方によっては
std::vector<float> fp(100);
なのかもしれませんが。
2倍のポイントを手に入れた! 186ポイント を手に入れた。
|
|
|
|
|
Name: SM-VC++ 2008 ..ぴよぴよ(149ポイント)
Date: 2008/11/04(火) 15:31
No:23430
|
|
Title: Re:new でアドレス空間を取得したいですが
|
|
ありがとうございます。
>float *fp = new float[100];
>ではないのですか?
これだと、100個のfloatの空間を取得するわけですね。
うちは100個のfloatへのポインタ(アドレス)を保存する空間を確保したいのです。
116ポイント を手に入れた。
|
|
|
|
|
Name: SM-VC++ 2008 ..ぴよぴよ(130ポイント)
Date: 2008/11/04(火) 15:50
No:23433
|
|
Title: Re:new でアドレス空間を取得したいですが
|
|
> float **fp = new float*[100];
> こうですか?
これだと、コンパオイラ・エラーはないが、実行エラーになります (-_-;?
19ポイント を落としてしまった。
|
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(68,739ポイント)
Date: 2008/11/04(火) 15:59
No:23436
|
|
Title: Re:new でアドレス空間を取得したいですが
|
|
SM-VC++ 2008環境という、私にとっては未知の処理系だけの事情かもしれませんが...
一般的には、
> float **fp = new float*[100];
で問題ないはずです。
非常にメモリが少ない環境や、シグナル処理ルーチンのような特殊なコンテキストであれば、何らかの実行エラーが生じることもあるでしょう。
あと、念のため確認しますが...
> コンパオイラ・エラーはないが、
コンパイルエラーの意味だと考えて構いませんね?
> 実行エラーになります (-_-;?
具体的にどんなエラーになるのか補足してください。
128ポイント を手に入れた。
|
|
|
|
|
Name: たいちう ..中級者(14,738ポイント)
Date: 2008/11/04(火) 16:25
No:23439
|
|
Title: Re:new でアドレス空間を取得したいですが
|
|
> うちは100個のfloatへのポインタ(アドレス)を保存する空間を確保したいのです。
どっちです?
うちは『100個のfloat』へのポインタ(アドレス)を保存する空間を確保したいのです。
うちは100個の『floatへのポインタ(アドレス)』を保存する空間を確保したいのです。
79ポイント を手に入れた。
|
|
|
|
|
Name: SM-VC++ 2008 ..ぴよぴよ(191ポイント)
Date: 2008/11/04(火) 19:16
No:23449
|
|
Title: Re:new でアドレス空間を取得したいですが
|
|
そうですか。
両義的に取られる日本語に申し訳ございません!
本意は後者のほうですね。
100個の『floatへのポインタ(アドレス)』を保存する空間を確保したいのです。
61ポイント を手に入れた。
|
|
|
|
|
Name: keichan ..プログラマー(30,643ポイント)
Date: 2008/11/04(火) 19:33
No:23453
|
|
Title: Re:new でアドレス空間を取得したいですが
|
|
> 本意は後者のほうですね。
> 100個の『floatへのポインタ(アドレス)』を保存する空間を確保したいのです。
であるならば、
> float **fp = new float*[100];
で合っています。
領域を確保した後のコードでまずいことをしているのではないかと推測しますので
>> 実行エラーになります (-_-;?
> 具体的にどんなエラーになるのか補足してください。
この補足をしていただければ何が問題か分かるかもしれません。
86ポイント を手に入れた。
|
|
|
|
|
Name: たいちう ..中級者(14,877ポイント)
Date: 2008/11/04(火) 19:41
No:23454
|
|
Title: Re:new でアドレス空間を取得したいですが
|
|
だとすると、
>> float **fp = new float*[100];
で問題ないと私も思います。
実行時エラーはこの後に、fpを使うときに起こっているということはないですか?
ありがちな失敗例だと、100個のfloatの空間を用意せずに、
上記のnewの直後に使い始めるとかですが。
エラーの詳細が分からないと、これ以上はなんとも。
139ポイント を手に入れた。
|
|
|
|
|
Name: SM-VC++ 2008 ..ぴよぴよ(132ポイント)
Date: 2008/11/05(水) 11:03
No:23499
|
|
Title: Re:new でアドレス空間を取得したいですが
|
|
皆さん
ご支援ありがとうございます
catch exception で
"bad allocation"
メッセージが得られたですね。
どんな場合こんなメッセージが出されるのでしょうか。
59ポイント を落としてしまった。
|
|
|
|
|
Name: たいちう ..中級者(14,965ポイント)
Date: 2008/11/06(木) 09:33
No:23562
|
|
Title: Re:new でアドレス空間を取得したいですが
|
|
> catch exception で
> "bad allocation"
> メッセージが得られたですね。
メモリ確保に失敗したときのエラーのようですね。
普通は100個のポインタ程度で出るようなエラーじゃないと思うのですが。
newの前後の行も含めて、正確にどのように書いています?
ステップ実行するとどうなります?
88ポイント を手に入れた。
|
|
|
|
|
Name: SM-VC++ 2008 ..ぴよぴよ(226ポイント)
Date: 2008/11/06(木) 14:47
No:23585
|
|
Title: Re:new でアドレス空間を取得したいですが
|
|
ありがとうございます
100個のポインタという話は説明を単純化にするための話で、実際はどれぐらいあるのは
分かりません。変動的です。
大きい場合は百Mに近いかな。
実験の時でも数十Mでした。
94ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..プログラマー(30,034ポイント)
Date: 2008/11/06(木) 14:54
No:23587
|
|
Title: Re:new でアドレス空間を取得したいですが
|
|
> 大きい場合は百Mに近いかな。
> 実験の時でも数十Mでした。
メモリの容量を超えるデータの確保は必ず失敗します。
そもそも、そこまで確保するプログラムとは…。
2倍のポイントを手に入れた! 64ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(123,037ポイント)
Date: 2008/11/06(木) 17:21
No:23612
|
|
Title: Re:new でアドレス空間を取得したいですが
|
|
それは設計に問題があるのでは…?(^_^;)
一度ファイルに落として分割して処理するとか、設計を見直した方がいいような気がしますね。
これだとHDDに負担かかるかもしれませんけど…
75ポイント を手に入れた。
|
|
|
|
Name: 匿名 ..入門者(3,959ポイント)
Date: 2008/11/06(木) 15:32
No:23590
|
|
Title: スコア計算
|
|
時間経過と敵を倒すことでスコアを加算したいのですが、
エクセルデータにscore欄を追加したり、struct.hの敵データの中にscoreという項目を作ってみたのですが、エラーが出るばかりで実行できませんでした。
どのようにすればスコアを計算できるのでしょうか?
35ポイント を手に入れた。
|
|
|
|
Name: box ..ハッカー(128,845ポイント)
Date: 2008/11/06(木) 15:40
No:23592
|
|
Title: Re:スコア計算
|
|
状況が全くわかりません。
> エクセルデータにscore欄を追加したり、
Excelのファイルを扱うようなプログラムを書いたのですか?
>struct.hの敵データの中にscoreという項目を作ってみた
構造体か何かをつくって、scoreというメンバーを含めたのですか?
>エラーが出るばかりで実行できませんでした。
結局、「どんなコードを」書いたとき、「何という」エラーが出たのですか?
34ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..プログラマー(30,415ポイント)
Date: 2008/11/06(木) 15:41
No:23593
|
|
Title: Re:スコア計算
|
|
> エラーが出るばかりで実行できませんでした。
何をして、どんなときに、どんなエラーが出るのかを詳細にしないと的確な回答は得られないでしょう。
一口にエラーといっても、コンパイルエラーなのか実行エラーなのかでもぜんぜん違いますし、
実行エラーにしてもファイルからscoreを読み取るときに失敗しているのか、scoreの加算で
間違っているのかでも違いますし。
85ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(875,157ポイント)
Date: 2008/11/06(木) 16:19
No:23598
|
|
Title: Re:スコア計算
|
|
struct.hの構造もどうなっているかがわからないと回答出来ないですね。
単に一つのファイルから参照しているのか、龍神録の館のようになっているのか、
構造体の定義だけかいてあるのかそこに宣言も一緒にかいてあるのかなど。
質問するときは
1、自分は何がしたくて
2、自分はどのように実装して
3、結果どうなったのか(何がわからないのか)
ということを具体化しないとわからないです。
1
エクセルにscore欄を追加したいということは、既にエクセルに何か他の項目はあるのでしょうか?
2
今書いているプログラムの仕組みがわからないです。
3
エラーの詳細を記載してください。エラーメッセージをコピペするだけでも随分違います。
2倍のポイントを手に入れた! 366ポイント を手に入れた。
|
|
|
|
Name: 匿名 ..入門者(3,702ポイント)
Date: 2008/11/05(水) 22:19
No:23545
|
|
Title: オプション弾の位置
|
|
49章で作成されたオプション弾を縦並びに変更したいのですが、
どの部分を変更すればいいのでしょうか?
49ポイント を手に入れた。
|
|
|
|
Name: 匿名 ..入門者(3,743ポイント)
Date: 2008/11/06(木) 11:07
No:23565
|
|
Title: Re:オプション弾の位置
|
|
見にくいですがイメージでは
○ ←オプション
□←時機 進行方向→
○ ←オプション
のような感じにしたいのですが。
41ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(873,557ポイント)
Date: 2008/11/06(木) 11:54
No:23575
|
|
Title: Re:オプション弾の位置
|
|
オプションのふわふわ浮いているボンボンは
void calc_option_bb()
で計算されます。
そこで登録されているx,yの位置を好きな位置に設定すれば前後になります。
試していませんが、例えば
option_bb[i].x=ch.x+OPTION_X/2*(i==0 ? -1 : 1);
option_bb[i].y=ch.y+OPTION_Y/2;
これでXがたまによってずれるのだから、XじゃなくYをずらしたいのなら
option_bb[i].x=ch.x+OPTION_X/2;
option_bb[i].y=ch.y+OPTION_Y/2*(i==0 ? -1 : 1);
にすればいいですよね。
137ポイント を手に入れた。
|
|
|
|
|
Name: 匿名 ..入門者(3,761ポイント)
Date: 2008/11/06(木) 13:44
No:23581
| 解決!
|
Title: Re:オプション弾の位置
|
|
無事解決することができました。
ありがとうございました。
18ポイント を手に入れた。
|
|
|
|
Name: ぐっちょん ..ぴよぴよ(521ポイント)
Date: 2008/11/06(木) 11:14
No:23566
|
|
Title: ウィンドウについて
|
|
また投稿させて頂きました。
今回は疑問に思ったことなのですが、
C++(C言語?)では、アプリケーションウィンドウの中にウィンドウを出すことが出来ますが、
このDXライブラリでも出来るのでしょうか?
画面の切り替えで使用したいと考えているのですが・・・。
90ポイント を手に入れた。
|
|
|
|
Name: Mist ..プログラマー(30,330ポイント)
Date: 2008/11/06(木) 11:37
No:23570
|
|
Title: Re:ウィンドウについて
|
|
質問の意味が良くわかりませんが、以下のような子供ウィンドウを作りMDIにしたいということでしょうか?
http://www.kumei.ne.jp/c_lang/sdk/sdk_50.htm
であれば、言語の問題ではなくWindowsプログラミングの範疇に入ります。
DXライブラリにはそのような機能はありません。
一応、Windows APIについての知識があるのであれば隠し関数を駆使して、親ウィンドウ、
子ウィンドウを自作し子ウィンドウのウィンドウハンドルをDXライブラリに渡して子ウィンドウに表示
させることは過去にやってみたことはありますが、いまいち思うとおりに動いてくれなかった記憶があります。
(単に私のやり方が悪かっただけかもしれませんが)
もしかしたら的外れかもしれませんがご参考までに。
207ポイント を手に入れた。
|
|
|
|
|
Name: ぐっちょん ..ぴよぴよ(563ポイント)
Date: 2008/11/06(木) 11:50
No:23573
|
|
Title: Re:ウィンドウについて
|
|
>>Mist 様
説明不足ですいませんでした。
ですが、私が言いたい内容は合っています。
「子供ウィンドウ」が作りたいのです。
リンク先の方法でやってみたいと思います。
42ポイント を手に入れた。
|
|
|
|
Name: 柿 ..ぴよぴよ(32ポイント)
Date: 2008/11/05(水) 12:53
No:23508
|
|
Title: 無題
|
|
DxLib.hをインクルードして下のようなプログラムをかいたのですが
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
if(ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1;
SetDrawScreen(DX_SCREEN_BACK );
ScreenFlip();
WaitKey();
DxLib_End();
return 0;
}
外部シンボル "_jtransform_execute_transformation" は未解決です
などのエラーメッセージが10個くらいでてしまいます。
ここの以前の記事を見てランタイムライブラリーをマルチスレッド(デバッグ)に変更してみたのですが
それでも消えませんでした。
32ポイント を手に入れた。
|
|
|
|
Name: 柿 ..ぴよぴよ(65ポイント)
Date: 2008/11/05(水) 15:13
No:23521
|
|
Title: Re:無題
|
|
プロジェクトに追加すべきファイル_VC用に入っていた
19個のファイルを全部作業フォルダに入れてあります。
33ポイント を手に入れた。
|
|
|
|
|
Name: 柿 ..ぴよぴよ(153ポイント)
Date: 2008/11/05(水) 21:20
No:23544
|
|
Title: Re:無題
|
|
リンカの設定はどこで見られるでしょうか?
環境はVC++6.0なのですが、プロジェクトの設定のあたりを見てみたのですが
それらしいものがみつかりませんでした。
2倍のポイントを手に入れた! 88ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(256,599ポイント)
Date: 2008/11/05(水) 22:45
No:23546
|
|
Title: Re:無題
|
|
VC6は持ってないので、どこで設定するのかはわかりません。
参考までに VC++ 2008ですと、「構成プロパティ -> リンカ -> システム」の
サブシステムの項目になります。
ここがコンソールになっているようでしたら Windowsに変えて下さい。
どうしても見つからないようでしたら、使えるかどうかわからないのですが
ソースコードの先頭あたりに
#pragma comment(linker, "/subsystem:windows")
と入れてみて下さい。
ひょっとしたらこれでうまくいくかもしれません。
#でもこれをするくらいならプロジェクトを1から作り直した方がいいのかもしれませんね。
168ポイント を手に入れた。
|
|
|
|
Name: 七誌 ..ぴよぴよ(969ポイント)
Date: 2008/11/05(水) 08:47
No:23494
|
|
Title: スーパークラスの呼び出し
|
|
クラスを継承したときに、
オーバーライドをするとオーバーライドされたメソッドは上書きされてしまいますが、
上書きではなく、機能の追加としてオーバーライドしたいときは
どのようにすればよいでしょうか?
Javaのようにスーパークラスを呼び出す方法があるのでしょうか?
128ポイント を手に入れた。
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(69,505ポイント)
Date: 2008/11/05(水) 08:52
No:23495
|
|
Title: Re:スーパークラスの呼び出し
|
|
こういうことでしょうか?
struct A
{
virtual int func();
};
struct B : A
{
virtual int func()
{
...
A::func();
...
}
};
違っていたら、何がしたいのか教えてください。
2倍のポイントを手に入れた! 174ポイント を手に入れた。
|
|
|
|
|
Name: 七誌 ..ぴよぴよ(984ポイント)
Date: 2008/11/05(水) 16:28
No:23527
| 解決!
|
Title: Re:スーパークラスの呼び出し
|
|
できました。
ありがとうございました。
15ポイント を手に入れた。
|
|
|
|
Name: リク ..かけだし(2,104ポイント)
Date: 2008/11/04(火) 21:12
No:23459
|
|
Title: ファイルからの入力
|
|
質問です。
test.txtというファイルに下のデータがあって
このファイルの数字だけを2次元配列に入力することはできますか?
解答お願いします。
{1, 3, 4, 2}
{2, 3, 2, 6}
{2, 6, 3, 1}
{3, 2, 7, 8}
78ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(120,314ポイント)
Date: 2008/11/04(火) 21:16
No:23460
|
|
Title: Re:ファイルからの入力
|
|
1:ファイルからデータを読み込む方法が分からない。
2:読み込んだデータを配列に代入する方法が分からない。
3:全く分からない。
さて、何番に当てはまりそうですか?
50ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(68,857ポイント)
Date: 2008/11/04(火) 21:21
No:23461
|
|
Title: Re:ファイルからの入力
|
|
> このファイルの数字だけを2次元配列に入力することはできますか?
どんな2次元配列かにもよりますが、できるかできないかでいえば「できます」。
> 解答お願いします。
解答は自分で作るものです。
我々は質問に対して回答することしかできません。
2倍のポイントを手に入れた! 102ポイント を手に入れた。
|
|
|
|
|
Name: とおりすがり ..ぴよぴよ(284ポイント)
Date: 2008/11/04(火) 22:42
No:23464
|
|
Title: Re:ファイルからの入力
|
|
>リクさん
ファイルの内容を読み込むにはfgetsやfscanfなどの関数を使います。
たとえばfgetsなら、ファイルから1行ずつ読み込むことができます。
ただし、中カッコやカンマなどの数字ではない余計な部分まで読み込んでしまいます。
そこで、とりあえず余計な部分も一緒に読み込んでしまってから、
余計なものが含まれている文字列から必要な文字だけを取り出す、という方針でどうでしょう?
char型配列 a[]="{1,3,4,2}" から '4' を取り出し、char型変数 b に格納したいときは、
b = a[5] ; でできるんじゃないかな?
それと、ここの掲示板のベテランの方々は、
「自分はC言語がどの程度わかっているのか」
「プログラミングやコンパイルの環境は何なのか」等を言わない人を嫌うようなので、
軽い質問のときでも、こういったことに気を使ったほうがいいみたいです(^^;)
271ポイント を手に入れた。
|
|
|
|
|
Name: リク ..かけだし(2,141ポイント)
Date: 2008/11/04(火) 22:45
No:23465
|
|
Title: Re:ファイルからの入力
|
|
バグさんへ
1に当てはまります。
fscanfを使ったらいいのかfgetsを使ったらいいのかが分からないのです。
37ポイント を手に入れた。
|
|
|
|
|
Name: リク ..かけだし(2,180ポイント)
Date: 2008/11/04(火) 22:49
No:23466
|
|
Title: Re:ファイルからの入力
|
|
すいません。書くの忘れてました。
C言語の知識は基本的な部分はできます。
コンパイルの環境はstudy Cを使っています。
39ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(128,786ポイント)
Date: 2008/11/04(火) 22:54
No:23467
|
|
Title: Re:ファイルからの入力
|
|
> fscanfを使ったらいいのかfgetsを使ったらいいのかが分からないのです。
fscanfを使うとしたらどんなコードを書くことになるか、
fgetsを使うとしたらどんなコードを書くことになるか、
それぞれやってみてはいかがでしょう。
53ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(120,438ポイント)
Date: 2008/11/04(火) 23:06
No:23468
|
|
Title: Re:ファイルからの入力
|
|
今回のようにデータフォーマットが固定ならば、個人的にはfscanfが楽ではないかと思います。
fgetsだと、とおりすがりさんの言われるように余計な部分まで読み込んでしまいますから、読み込んだ後に文字列を分解して、数字を取り出し、数値に変換するという手間が増えます。
結果は同じなので、あとは好みの問題でしょうか?
124ポイント を手に入れた。
|
|
|
|
|
Name: リク ..かけだし(2,227ポイント)
Date: 2008/11/04(火) 23:09
No:23469
|
|
Title: Re:ファイルからの入力
|
|
ループでiとjを回して
fscanf(fp,"%d",&hairetu[i][j])
間違っているのは分かるのですけど、
どうしても2次元配列に入れる方法が分からないです。
47ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(69,031ポイント)
Date: 2008/11/04(火) 23:17
No:23471
|
|
Title: Re:ファイルからの入力
|
|
こんな感じでよいのでは?
char array[1][4];
char temp[4][2];
int i;
if (fscanf(stream, "{%1s,%1s,%1s,%1s}", temp[0], temp[1], temp[2], temp[3]) == 4)
{
for (i = 0; i < 4; i++)
{
array[0][i] = temp[i][0];
}
}
とりあえず1行分だけです。
数字かどうかのチェックは行っていませんので、必要ならfor文の中ででも行ってください。
174ポイント を手に入れた。
|
|
|
|
|
Name: リク ..かけだし(2,287ポイント)
Date: 2008/11/04(火) 23:24
No:23472
|
|
Title: Re:ファイルからの入力
|
|
解答ありがとうございます。
数字のチェックのやり方は分かるので
あとは縦方向にループを回せば
残りの3行分もできますよね?
60ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(120,441ポイント)
Date: 2008/11/04(火) 23:28
No:23473
|
|
Title: Re:ファイルからの入力
|
|
そこまで分かっているならば、ゴールは目前ですよ(^-^)
トライ&エラーです。頑張って(o^-')b
3ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(69,076ポイント)
Date: 2008/11/04(火) 23:31
No:23474
|
|
Title: Re:ファイルからの入力
|
|
> 解答ありがとうございます。
「解答」ではなく「回答」です。
> 数字のチェックのやり方は分かるので
念のため書いてみてください。
> あとは縦方向にループを回せば
> 残りの3行分もできますよね?
この方針でよければ、それでできます。
45ポイント を手に入れた。
|
|
|
|
|
Name: リク ..かけだし(2,211ポイント)
Date: 2008/11/04(火) 23:36
No:23475
|
|
Title: Re:ファイルからの入力
|
|
すいません。誤変換してました。
if(temp[i][0]>=0 && temp[i][0] <=9)
これでどうでしょうか?
文字として認識しているならASCIIコードを使うべきですか?
76ポイント を落としてしまった。
|
|
|
|
|
Name: バグ ..ハッカー(120,419ポイント)
Date: 2008/11/04(火) 23:47
No:23477
|
|
Title: Re:ファイルからの入力
|
|
あれ?数字として代入したいのですか?数値として代入したいのかと勝手に推測していたのてすが…?(^_^;)
fscanf("{%d,%d,%d,%d}",&temp[i][0],&temp[i][1],&temp[i][2],&temp[i][3]);
※iはループ用変数
22ポイント を落としてしまった。
|
|
|
|
|
Name: リク ..かけだし(2,255ポイント)
Date: 2008/11/04(火) 23:51
No:23479
|
|
Title: Re:ファイルからの入力
|
|
回答ありがとうございます。
文字定数というのは初めて聞きました。
意味を教えていただけませんか?
44ポイント を手に入れた。
|
|
|
|
|
Name: リク ..かけだし(2,407ポイント)
Date: 2008/11/05(水) 00:05
No:23482
|
|
Title: Re:ファイルからの入力
|
|
整数1桁で固定です。
{1, 3, 4, 2}
{2, 3, 2, 6}
{2, 6, 3, 1}
{3, 2, 7, 8}
ファイルから2次元配列に入れて
画面に出力できればいいので。
C言語は基礎的な部分はできると言っておきながら
全然できていなくてすいません。
146ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..熟練のプログラマー(69,288ポイント)
Date: 2008/11/05(水) 00:08
No:23483
|
|
Title: Re:ファイルからの入力
|
|
> 整数1桁で固定です。
それなら数字で管理しても大小比較は可能です。
どうしても数値で扱いたければ、
int array[1][4];
if (fscanf(stream, "{%1d,%1d,%1d,%1d}", &array[0][0], &array[0][1], &array[0][2], &array[0][3]) == 4)
{
...
}
とでもしましょう。
53ポイント を手に入れた。
|
|
|
|
|
Name: リク ..入門者(2,597ポイント)
Date: 2008/11/05(水) 10:43
No:23497
|
|
Title: Re:ファイルからの入力
|
|
ご返事送れてすいません。ネットが使えなくなってしまって復旧してました。
{1, 3, 4, 2}
{2, 3, 2, 6}
{2, 6, 3, 1}
{3, 2, 7, 8}
今の問題では縦と横の数が4×4でしたが
A×Aのように縦と横の数が分からない場合はどうすればいいですか?
2倍のポイントを手に入れた! 190ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(120,472ポイント)
Date: 2008/11/05(水) 11:16
No:23500
|
|
Title: Re:ファイルからの入力
|
|
1:ファイルを読んで、データ数(縦・横の数)を求める。
2:動的にメモリを確保する。
3:再度ファイルを読み込んで2で確保した領域にデータを代入する。
…という流れが分かり易いかな?
53ポイント を手に入れた。
|
|
|
|
|
Name: リク ..入門者(2,710ポイント)
Date: 2008/11/05(水) 11:26
No:23501
|
|
Title: Re:ファイルからの入力
|
|
回答ありがとうございます。
1:は縦と横の長さが同じなので、行数を数えるとして
2:はmalloc()関数を使う
3:これのやり方が分からないです
{%d, %d, %d・・・}
%dを数に合わせて変えるのが分からないです。
113ポイント を手に入れた。
|
|
|
|
|
Name: リク ..入門者(2,893ポイント)
Date: 2008/11/05(水) 12:18
No:23504
|
|
Title: Re:ファイルからの入力
|
|
回答ありがとうございます。
{1, 3, 4, 2}
{2, 3, 2, 6}
{2, 6, 3, 1}
{3, 2, 7, 8}
↑を2次元配列に取り込み
iとjでループを回して
↓のように画面に出力したかったのです。
1342
2326
3278
fgetsだと1行すべてを入力するので
数値だけを取り出すプログラムが必要になりますよね?
183ポイント を手に入れた。
|
|
|
|
|
Name: リク ..入門者(2,972ポイント)
Date: 2008/11/05(水) 12:19
No:23505
|
|
Title: Re:ファイルからの入力
|
|
回答ありがとうございます。
問題の数値を2次元配列に取り込み
iとjでループを回して
↓のように画面に出力したかったのです。
1342
2326
3278
fgetsだと1行すべてを入力するので
数値だけを取り出すプログラムが必要になりますよね?
79ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(121,177ポイント)
Date: 2008/11/05(水) 12:37
No:23506
|
|
Title: Re:ファイルからの入力
|
|
strtok関数を使用し、カンマで文字列を分割して数値を取り出してみました。
File名は適当に変えて使用してください。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define File_Name "test.txt"
int main(void)
{
FILE* file = NULL;
int** array = NULL;
int size = 0, i = 0, j = 0;
char buf[4096] = {'\0', }, *ptok;
// ファイル内のデータの行数をカウントする
if ((file = fopen(File_Name, "r")) == NULL)
{
return -1;
}
else
{
while (fgets(buf, 4096, file) != NULL)
{
++size;
}
fclose(file);
}
// 動的メモリ確保
array = (int**)(malloc(sizeof(int**) * size));
for (i = 0; i < size; ++i)
{
array[i] = (int*)(malloc(sizeof(int*) * size));
}
// 再度、ファイルの読み込み&データ代入
if ((file = fopen(File_Name, "r")) == NULL)
{
return -1;
}
else
{
for (i = 0; i < size; ++i)
{
fgets(buf, 4096, file);
ptok = strtok(buf, ",");
for (j = 0; j < size; ++j)
{
if (j == 0)
{
sscanf(ptok, "{%d", &array[i][j]);
}
else if (j == size - 2)
{
sscanf(ptok, "%d", &array[i][j]);
}
else
{
sscanf(ptok, "%d}", &array[i][j]);
}
printf("[%d][%d] = %d\n", i, j, array[i][j]);
ptok = strtok(NULL, ",");
}
}
fclose(file);
}
// メモリの解放
for (i = 0; i < size; ++i)
{
free(array[i]);
}
free(array);
return 0;
}
688ポイント を手に入れた。
|
|
|
|
|
Name: リク ..入門者(3,056ポイント)
Date: 2008/11/05(水) 12:41
No:23507
| 解決!
|
Title: Re:ファイルからの入力
|
|
バグさんありがとうございます。
このソースを参考にしてがんばりたいと思います。
本当にみなさんありがとうございました。
2倍のポイントを手に入れた! 84ポイント を手に入れた。
|
|
|
|
|