|
Name: Mist ..熟練のプログラマー(51,798ポイント)
Date: 2009/02/19(木) 12:14
No:29015
|
|
Title: IoAttachDeviceToDeviceStack で
|
|
Windowsのデバイスドライバに詳しい方がおられましたらお力をお貸しください。
環境:Windows Embedded FP2003
WINDDK:3790.1830
WDMでPCIデバイスドライバを作成しているのですがAddDevice関数内でIoAttachDeviceToDeviceStackを
実行するとブルースクリーンになってしまいます。
IoCreateDevicが成功していることは確認しています。
WINDDKに付属していたサンプルのPCIデバイスドライバでも確認してみたのですが同じようにIoAttachDeviceToDeviceStackでご臨終します。
こういう現象が発生する場合、原因と考えられる事柄、もしくはこういったところを調査してみるとよい
というのがあれば教えていただけませんでしょうか。
ポストリンク:http://pc11.2ch.net/test/read.cgi/tech/1063453024/822n-
176ポイント を手に入れた。
|
|
|
|
Name: JT ..入門者(3,298ポイント)
Date: 2009/02/23(月) 13:12
No:29182
|
|
Title: Re:IoAttachDeviceToDeviceStack で
|
|
参考になるかわからずおこがましいですがある人の記述です。
また本買っちゃいました。今度は「WDMデバイスドライバ Windows98/2000のための新しいドライバモデル」。いまどき2000とか書いてある本を買うのはちょっと抵抗あった(しかも高いうえに付近の本屋にないので中身を見ずに買うか決断しないといけなかった)けど、今回のターゲット用としてはかなり参考になりそう。で、結局、ドライバ関連の本は自分のと借り物をあわせると5冊も並んでたりする。
今回買った本に、HIDキーボードのドライバが付いてるんだけど、VMwareだとUSBキーボードはレガシーキーボードとしてエミュレートされるみたい。ターゲットであるジョイパッドはそのままHIDとして認識されるからいいんだけど、本についてたドライバが動くかの確認すらできない状況。ところで、WinXP SP2だと、デバイスマネージャのデバイスのプロパティの詳細タグで「クラス上フィルタ」ってのがあるのでこれは便利。VMwareのXPは無印なので詳細タグがないんですが。それにしても、「上フィルタ」「下フィルタ」って...upper filterとlower filterのことなんだろうけど、もっといい訳はないものか。
今回はキーボードかジョイスティックか、ってのを判別することまでできた。 !!本についてたドライバの段階でUSBパッドを接続するとブルースクリーンになってたんだけど、HidP_GetCapsの一つ目の引数にNULLを渡してたのが原因。!! このCD-ROMのデータはほんとに動くか確認したのか?元のコードだと100%確実にブルースクリーン直行だよ。あ、そういえば、本のほうにこのドライバはWindows2000ベータ2以降はほとんど動作しませんとか書いてあるよ。...実はもう1つの間違いも自分で直したんだけど、それも含めて原著の訂正ページに記載を発見。先に見とくんだった。
http://tmz.skr.jp/messages/msg0503.html
743ポイント を手に入れた。
|
|
|
|
Name: たか ..初心者(6,731ポイント)
Date: 2009/02/23(月) 00:16
No:29167
|
|
Title: 簡単なツールをつくる
|
|
最近、自作のツールを作ってみたいと思うようになりました。
敵パラメータ設定する時、マップデータを用意する時、
ラジオボタンやチェックボックスで容易にデータを作成できるツールを作ってみたいと思っています。
(自分の環境で動けばいい適当なツール)
Win32APIを本で学習しているのですが、簡単なツールをつくるのには遠回りなような気がしています。
今のIDEでC++/CLIでプログラムをつくれるようなのですが、これは適しているのでしょうか?
他にも何か適したものがあれば教えてほしいです。よろしくお願いします。
C言語暦は一年で、Win32APIは少しかじった程度です。
環境:
Visual C++ Express Edition 2008
Windows Vista Home Basic
278ポイント を手に入れた。
|
|
|
|
Name: Mikan [URL] ..初心者(6,888ポイント)
Date: 2009/02/23(月) 00:37
No:29170
|
|
Title: Re:簡単なツールをつくる
|
|
作るデータが特殊なものじゃなければ(CSV,固定長TEXTなどであれば)
作る言語は何でもいいと思いますよ^^
ただwindowsのForm形式であればC++/CLIでもMFCでもVBでもC#でもいいような気がします^^
個人的には、C言語経験者ならC#がオススメです^^
>(自分の環境で動けばいい適当なツール)
条件が自分で使うツールのようなので
ツールの使いやすさより、データフォーマットをしっかりするのがいいかと思います。
作るゲームによってフォーマットを変えたくなったりするので、
ツール内でフォーマットを定義出来るようにすると便利になるとおもいます^^
263ポイント を手に入れた。
|
|
|
|
|
Name: たか ..初心者(6,939ポイント)
Date: 2009/02/23(月) 01:22
No:29172
| 解決!
|
Title: Re:簡単なツールをつくる
|
|
Mikanさん
ツールはゲームごとにを作ろうと思っています。
なので、そういったツールを容易につくれる言語やライブラリを探していました。
説明が足りませんでした、すみません。
MFC/VB/C#について調べてみましたが、3つの中ではMFCが自分に合っているようです。
ですが、Express Editionでは作成できないようです。
Standard Editionの購入を検討してみます。(学生だと無料とか聞いたので)
今更ですが、雑談としてトピックを立てればよかったかもしれません。
回答有難うございました。
208ポイント を手に入れた。
|
|
|
|
Name: kerotan0820 ..ぴよぴよ(365ポイント)
Date: 2009/02/11(水) 17:34
No:28666
|
|
Title: 画像を表示するプログラム組んでも画像がでません
|
|
ゲームプログラミングの館」(http://dixq.net/g/)を参考に、ゲームを作ろうとしているのですが、
画像を表示するという初歩的なプログラムをデバックしたのですがウィンドウが表示されるだけでなぜか画像が表示されません。
ちなみにその説明が書かれてるページはここです(http://dixq.net/g/#1
1で画像を保存するのですが、一応指定されてる場所に保存し、ファイル名、形式も同じことであるのを確認はしました。
2のウィンドウを表示させるは成功したのでおそらく画像の保存の問題だと思うのですが・・・
最初に画面の中心に点を打つという簡単なプログラムを試したらそれは成功しました。
サイトに書かれてますが、一応その画像を表示するプログラムはこれです。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了
LoadGraphScreen( 0 , 0 , "char.png" , TRUE ) ;
WaitKey() ; // 結果を見るためにキー待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
こぴぺなのでミスは無いと思います。
サイトにちゃんと表示できなかった方はこちらを試しくださいみたいな記述がありリンク先にいってみると、ちょっと違うソースが書かれていたので、それも試したのですが駄目でした・・・
解決方法分かる方居ましたら教えてくださると幸いです;;
お願いします。
365ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(988,340ポイント)
Date: 2009/02/11(水) 20:23
No:28675
|
|
Title: Re:画像を表示するプログラム組んでも画像がでません
|
|
>サイトにちゃんと表示できなかった方はこちらを試しくださいみたいな記述がありリンク先にいってみると、ちょっと違うソースが書かれていたので、それも試したのですが駄目でした・・・
ということは、ファイルの保存場所かファイル名が違うと表示されたということでしょうか?
コンパイラは何を使っていますか?
もしBorlandの場合はDebugフォルダに入れる必要があります。
また、もし自分でプロジェクトを作った場合、「ソリューションのディレクトリを作成する」にチェックを入れて作った可能性があるので、
プロジェクトのあるフォルダに更にプロジェクトと同じフォルダが無いか調べてみて下さい。
289ポイント を手に入れた。
|
|
|
|
|
Name: kerotan0820 ..ぴよぴよ(443ポイント)
Date: 2009/02/11(水) 22:06
No:28678
|
|
Title: Re:画像を表示するプログラム組んでも画像がでません
|
|
たくさんの回答ありがとうございます。
参考にしてチャレンジしてみます。
2倍のポイントを手に入れた! 78ポイント を手に入れた。
|
|
|
|
|
Name: kerotan0820 ..ぴよぴよ(681ポイント)
Date: 2009/02/12(木) 22:40
No:28723
|
|
Title: Re:回答者様からの質問に対する回答
|
|
【kazuoniさん】
↑のコードがmain.cppという名前のファイルだとしたら、
main.cppが保存されているところと
同じ場所に画像が保存されていますか?
>コードの名前ってなんでしょうか・・・
ソースファイルの名前ですか?
画像の保存場所はサイトにある指定の場所に保存しただけで、そのフォルダはデスクトップ上にあります。
【Dixqさん】
ということは、ファイルの保存場所かファイル名が違うと表示されたということでしょうか?
>その通りです
コンパイラは何を使っていますか?
>Borlandでは無いと思います。
コンパイラとかそういうの詳しく無いんですよ・・・
昔はBorland使ってましたが今はたぶん違います。。。
サイトにのってる通りにダウンロードして進めて行ったので、あまり理解できてないのです・・・
今見たところ、VisualC++2008らしいです。
あともし設定を間違えていたなら設定は一からやり直しですか?・・・;
238ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(989,205ポイント)
Date: 2009/02/12(木) 23:38
No:28725
|
|
Title: Re:回答者様からの質問に対する回答
|
|
VC++2008なら設定らしい設定は何もいりません。インストールするだけで使えます。
プロジェクト作ったらいいだけです。
しかもプロジェクトはDXライブラリをダウンロードした時についてくる
サンプル実行用フォルダのものを使い回せば自分で作る必要ありません。
ところで、フォルダ内にプロジェクトと同じ名前のフォルダとかありませんか?
165ポイント を手に入れた。
|
|
|
|
|
Name: kerotan0820 ..ぴよぴよ(934ポイント)
Date: 2009/02/13(金) 04:08
No:28738
|
|
Title: Re:回答者様からの質問に対する回答
|
|
フォルダ内にプロジェクトと同じフォルダはないみたいです・・・
デスクトップ上にこうなってます
【DxLib_VC】┓
【Help(フォルダ)】
【Tool(フォルダ)】
【サンプルプログラム実行用フォルダ(フォルダ)】
【プロジェクトに追加すべきファイル_VC用(フォルダ)】
【DxLib(txt.)】
こうなっていて、このサンプルプログラム実行用フォルダにしまったんです。
あとこのサンプルプログラム実行用フォルダないには画像しかありません。。。
253ポイント を手に入れた。
|
|
|
|
|
Name: でーき ..ぴよぴよ(81ポイント)
Date: 2009/02/14(土) 00:22
No:28746
|
|
Title: 無題
|
|
私もなりました。
いろいろ試してみると、はじめから同封されていたファイルは表示できるのに、
他の画像ファイルを同じフォルダにおいても動きません。
パーミッションかな・・・・?
でも調べたけど問題なかったんですよねー・・・
81ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(317,247ポイント)
Date: 2009/02/15(日) 14:15
No:28808
|
|
Title: Re:無題
|
|
#kerotan0820さん
>LoadGraphScreen
この関数は、読み込むファイルの場所が正しくても
環境によって表示されたりされなかったりと、鬼門だったりします。
少し飛びますが「13c. ソースを短く書く(その2)」
ttp://dixq.net/g/#37
のコードだとどうなりますか?
4ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(989,936ポイント)
Date: 2009/02/15(日) 16:06
No:28820
|
|
Title: Re:無題
|
|
そんなことがあるのですか・・。
環境によって不具合が起きる可能性のある関数リストみたいなの欲しいですね;
う〜ん、Justyさんよくご存知ですね〜・・。
特にDXライブラリをお使いになってないのにそこまでどうやったらお詳しくなれるんでしょう^^;
じゃぁ、サンプルは全てDrawGraphにした方がいいですかね?
84ポイント を手に入れた。
|
|
|
|
|
Name: kerotan0820 ..かけだし(1,096ポイント)
Date: 2009/02/15(日) 18:42
No:28829
|
|
Title: Re:無題
|
|
【Justyさん】
そうなんですか!?w じゃぁ僕は無理なことをがんばっていたのですね・・・(泣
そのコードで試してみますね。
2倍のポイントを手に入れた! 78ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(317,596ポイント)
Date: 2009/02/15(日) 19:04
No:28830
|
|
Title: Re:無題
|
|
>LoadGraphScreenは環境に大きく作用されるのですか^^;
それほど大きな確率ではないと思いますが。
あと、同じような現象が Vistaだと云々とか聞いたことがあります。
>そんなことがあるのですか・・
前にも似たような話があったような。
C言語何でも質問掲示板
ttp://www.play21.jp/board/formz.cgi?action=res&resno=23789&page=&lognum=74&id=dixq&rln=23837
>環境によって不具合が起きる可能性のある関数リストみたいなの欲しいですね
うーん、基本的に DirectXなどの描画って環境次第なところが大きいので、
もし本格的に挙げていくとほとんど全部ということになりかねなかったり・・・。
349ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(317,820ポイント)
Date: 2009/02/16(月) 20:39
No:28882
|
|
Title: Re:
|
|
>いえ、画像はでてませんよ?
>黒いウィンドウだけでしたよ
となると、画像を置いた場所がおかしいか、環境的に表示することができないの
どちらかである可能性が高いです。
では、プログラムをビルドした後、どうやって実行していますか?
VisualStudioから実行しているのか、それとも出来上がった exeをクリックして
実行しているのかどちらでしょう?
(もしかして後者だったりします?)
又、先の「13c. ソースを短く書く(その2)」 ttp://dixq.net/g/#37の
コードで、変数imageの値は何になっていますか?
224ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..プログラマー(25,559ポイント)
Date: 2009/02/18(水) 09:11
No:28926
|
|
Title: Re:
|
|
アップローダにあるファイル見てみましたがファイル名が
char.png.png
になってました
拡張子を表示しない設定になっているところに拡張子を自分で追加したのでしょう
画像ファイル名を
char
のみにすると表示されると思います。
(なぜマイクロソフトは大事な拡張子を表示しないのでしょうか)
82ポイント を手に入れた。
|
|
|
|
|
Name: kerotan0820 ..かけだし(1,274ポイント)
Date: 2009/02/18(水) 14:11
No:28942
|
|
Title: Re:
|
|
【toyo様】
僕は実際最初は、charだけで試したんです・・・
ですが、失敗したため、.pngを追加しないといけないのかと勘違いし、そのままでありました。
今現在.pngをなくし試してみましたが、できませんでした・・・;
87ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..プログラマー(25,598ポイント)
Date: 2009/02/19(木) 07:48
No:29008
|
|
Title: Re:
|
|
アップローダにあったのはtest.cppで表示するのはtest1.bmpですね
logに
グラフィックファイル char.png がありません
って出てるのはなぜ
55ポイント を落としてしまった。
|
|
|
|
|
Name: kerotan0820 ..入門者(3,064ポイント)
Date: 2009/02/19(木) 10:41
No:29012
|
|
Title: Re:
|
|
【Dixq(管理人)さん】
え・・・;; 同梱って何ですか?・・・;;;
僕まさか関係ないソースとかやってたのでしょうか・・・;;;
なんか話が難しくて理解できなくなってきたので僕がやったことをまとめますね・・・;;
@画像を表示するの単元にてchar.pngを指定の場所に保存し、以下のソースをこぴぺしてデバックしました。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了
LoadGraphScreen( 0 , 0 , "char.png" , TRUE ) ;
WaitKey() ; // 結果を見るためにキー待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
結果画像は表示されなかったため char.png にしたり char だけで保存したりと僕にミスがあるのかと思いいろいろ試しましたがあっけなく失敗しました。
A画像を表示するの欄に失敗する人はこちらみたいなのがあり、そこにて以下のソースを試しました。
#include "DxLib.h"
char st1[]="画像の保存場所が違うか、ファイル名が違うため、表示できません。";
char st2[]="正常に認識されています。";
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ;
if( DxLib_Init() == -1 ) return -1;
if(LoadGraphScreen( 0 , 0 , "char.PNG" , TRUE ) == -1)
DrawString(50,220,st1,GetColor(255,255,255));
else
DrawString(50,220,st2,GetColor(255,255,255));
WaitKey() ;
DxLib_End() ;
return 0 ;
}
これも失敗し・・・;; そして今ログを見せてくれないかというコメントを頂、ログをお教え指していただきました。
僕がアップローダーにうpしてるのは、ログと、画像が保存されてるフォルダです。
2倍のポイントを手に入れた! 1,790ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..熟練のプログラマー(51,622ポイント)
Date: 2009/02/19(木) 11:29
No:29014
|
|
Title: Re:
|
|
2番目を実行したときに画面に「画像の保存場所が違うか、ファイル名が違うため、表示できません。」と表示されましたか?
それすらないというのであれば、No:28830でJustyさんが指摘している通りkerotan0820さんのPCではそれらのプログラムは正常に動作しないと思います。(OSはVistaですか?)
139ポイント を手に入れた。
|
|
|
|
|
Name: kerotan0820 ..入門者(3,154ポイント)
Date: 2009/02/20(金) 22:18
No:29057
|
|
Title: Re::
|
|
【Mist様】
2番目を実行したときは画面に「画像の保存場所が違うか、ファイル名が違うため、表示できません。」と表示されました。
OSはXPです。
【Dixq(管理人)様】
やてみます。
90ポイント を手に入れた。
|
|
|
|
|
Name: kerotan0820 ..入門者(3,216ポイント)
Date: 2009/02/22(日) 20:35
No:29154
|
|
Title: Re::
|
|
【Dixq様】
画像がでてきて右に動きました。 というかこの投稿なんどもしてるのですがなぜか投稿できないですw
その場では投稿されてるのになぁ・・・
今後僕はどういった作業をすればいいのでしょうか
62ポイント を手に入れた。
|
|
|
|
|
Name: cosmo ..入門者(3,213ポイント)
Date: 2009/02/22(日) 21:10
No:29155
|
|
Title: Re::
|
|
cosmoです。
kerotan0820さん初めまして。
このスレをハラハラしながら見ていました。
>今後僕はどういった作業をすればいいのでしょうか
これはやりたい事によって違うと思います。
画像を左から右に移動して表示されるプログラムは成功されたんですよね?
ならば、そのプログラムをいじってみて挙動が変わるのを確かめる…とか、
次の章に進む…なんかが考えられますが。
プログラムの上達の鍵は試行錯誤ですよ。
まあ、人のことを言える立場ではありませんが…(汗
124ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(993,947ポイント)
Date: 2009/02/22(日) 21:43
No:29157
|
|
Title: Re::
|
|
正常に表示できたのでしたら自分のやりたい処理を勉強していけばいいと思いますよ。
まず何がやりたいのでしょう?
自分がやりたい事が出来るようになるように興味ある事を実装していけばいいのではないでしょうか。
何をしたらいいのかわからない場合はとりあえずゲームの館を13章からずっと実行して確認してみてはどうでしょう。
93ポイント を手に入れた。
|
|
|
|
Name: OMA ..ぴよぴよ(44ポイント)
Date: 2009/02/21(土) 23:16
No:29128
|
|
Title: ボタンについて
|
|
タイトルのとことかで、文字のボタン(スタートとかプレイ中の最初からやり直すとか)はどうやればいいんでしょうか?
既出だったらすいません。
44ポイント を手に入れた。
|
|
|
|
Name: OMA ..ぴよぴよ(35ポイント)
Date: 2009/02/21(土) 23:49
No:29132
|
|
Title: Re:ボタンについて
|
|
すいません、質問の仕方が不適切でした。
タイトル画面などの選ぶと次の画面に進めるボタンはどのようにすればできるのか教えてください。
使っているコンパイラはBorlandC/C++コンパイラです。
35ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..初心者(7,015ポイント)
Date: 2009/02/21(土) 23:51
No:29133
|
|
Title: Re:ボタンについて
|
|
私はまだ実装してませんが、基本的に画像の表示です。
仮想的なカーソルを考えて(つまりフラグ変数なりを用意して)、表示を制御すればできそうですね。
36ポイント を手に入れた。
|
|
|
|
|
Name: OMA ..ぴよぴよ(117ポイント)
Date: 2009/02/22(日) 00:04
No:29136
|
|
Title: Re:ボタンについて
|
|
自分は初心者なもので、フラグ関数という物がよくわかんないんですけど、つまり、ボタン一つ一つの画像に対応する数字を用意して、下ボタンや上ボタンが押されたら、数字を+1したり、−1して、それにあったボタンの画像の色をかえたりすればいいんでしょうか?
もの分かり悪くてすいません・・・
82ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..初心者(7,165ポイント)
Date: 2009/02/22(日) 13:05
No:29147
|
|
Title: Re:ボタンについて
|
|
kazuoniさん
なるほど、マウスでクリックするものも「ボタン」と言うのでしたね。
OMAさん
イメージはそんな感じです。時間があったら私もサンプルを作りたいのですが(笑)
例えば、
ボタンの構造体 { フラグ,画像情報,位置情報,イベント(何が起こるのか) }
とかを配列で作っておけば、まず表示は出来そうですね。
フラグは最低限「非選択」「選択」の状態を表すようにして、この値で表示する画像を切り替える。
関数ポインタが使えるなら、もっと複雑な挙動も設定できますね。
あとは、「下キー」が押されたら、ボタン1のフラグを0にしてボタン2のフラグを1にする…という感じです。
エンターが押されたら、現在フラグが立っているボタンの「イベント」を取ってきて、シーンを遷移させればできそうですね。
150ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(62,407ポイント)
Date: 2009/02/22(日) 13:40
No:29148
|
|
Title: Re:ボタンについて
|
|
選択肢画面の作り方
http://dixq.net/g/#33
からなるべくそれないように加えましたが・・・
やはり、これだと手を加えないと使えないですね。
33章では、mainに直接記述していますが、
選択肢画面を処理する関数を作って、いろいろな時の選択肢に利用してやるとよいです。
一応コードをUPしておきます。
(ただ、拡張はほとんどできません。)
>SCIさん
ボタン=マウス操作っという固定概念でした。。
マウス、キーボード両方に対応したボタンだとマウスのが優先なので、
あとはちょちょっと処理つければ両方対応できそうです。
ボタンの構造体があると管理しやすそうですね。
自分のは関数化しただけでしたので^^;
163ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..初心者(7,355ポイント)
Date: 2009/02/22(日) 16:43
No:29151
|
|
Title: Re:ボタンについて
|
|
ちょっと興味が沸いたので、サンプルっぽく作ってみました。
上下キーで「メニューを選んでいるフリをする」プログラムです。
ソースが汚かったり、無駄な処理が多かったりは許してください(笑)
画像に使ってるフォントはライセンスを調べていませんが、画像そのものと効果音は練習を兼ねて自作です。
いやー、慣れないことをするものじゃないですね(笑)
kazuoniさん
私は東方のメニュー画面や、ESC押したときのポーズ画面をイメージしました(笑)
本家東方の画面操作にマウスは対応していないようですが、マウス操作にも対応すると楽しそうです。
190ポイント を手に入れた。
|
|
|
|
|
Name: OMA ..ぴよぴよ(47ポイント)
Date: 2009/02/22(日) 18:36
No:29152
| 解決!
|
Title: Re:ボタンについて
|
|
ありがとうございます、わかった気がします。
↑のコードを参考に自分でも試行錯誤してみます。
本当にありがとうございました!
3ポイント を手に入れた。
|
|
|
|
Name: yu [URL] ..上級者(17,136ポイント)
Date: 2009/02/22(日) 08:12
No:29143
|
|
Title: リプレイ
|
|
すみません。
また質問させて頂きます。
試験の合間を使ってシューティングゲームのリプレイを作っているのですが、
どうも再生時の挙動がおかしいです。
recdata[].paddataに入っていた値を表示してみると、訳のわからない値がはいっていました。
試しにrecdata[].paddataからではなく、配列を使って動作をさせたところ、うまくいきました。
読み込み時に間違っているのでしょうか?・・・
リプレイデータ自体は大丈夫のようです。(バイナリエディタで値を確認しました。
このソースのどこがおかしいのか教えて頂けたら幸いです。
よろしくおねがいします。
まだ書いている途中なので、途中の処理がおかしいのは無視してください。
(リプレイが再生し終わるとアクセス違反をする等)
246ポイント を手に入れた。
|
|
|
|
Name: Mist ..熟練のプログラマー(52,063ポイント)
Date: 2009/02/22(日) 08:47
No:29145
|
|
Title: Re:リプレイ
|
|
> recdata[].paddataに入っていた値を表示してみると、訳のわからない値がはいっていました。
いつの時点でですか?(draw_key_dataはあるけどつかっているところがない)
load_replayは間違っていないと思いますが、load_replayをコールしている関数や、load_replayでロードしたデータを使用している部分のつながりがまったくわからないので、ロードしてからdraw_key_dataで確認するまでの間に破壊しているのでは?ぐらいしかわかりません。
ひとつ気になるのは、セーブとロードでrecdataを使い回ししていますね。
ロードが実行されてリプレイ再生して完了するまでに、リプレイ記録関数が実行されたりするようなことはないですか?
164ポイント を手に入れた。
|
|
|
|
|
Name: yu [URL] ..上級者(17,461ポイント)
Date: 2009/02/22(日) 09:13
No:29146
|
|
Title: Re:リプレイ
|
|
>ロードが実行されてリプレイ再生して完了するまでに、リプレイ記録関数が実行されたりするようなことはないですか?
その通りでした。
使い回しが原因でした・・・;
おかげ様で解決しました。
Mist様、ありがとうございました。m(_ _)m
101ポイント を手に入れた。
|
|
|
|
Name: kaba ..ぴよぴよ(26ポイント)
Date: 2009/02/16(月) 06:52
No:28847
|
|
Title: 画像が消える
|
|
最初のロード中というのでしょうか?
ロード中にウィンドウを画面外に持っていくとその部分が黒くなり
何をしても何も表示されなくなってしまいます。
そのような現象はどのようにしたら直りますでしょうか?
26ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(990,951ポイント)
Date: 2009/02/16(月) 12:53
No:28856
|
|
Title: Re:画像が消える
|
|
ウィンドウがノンアクティブでも処理を続けるようにしたらいいと思います。
SetAlwaysRunという関数だったと(名前違うかもしれません)思います。
これをTRUEにしておくと、ノンアクティブでも処理を続けます。
DXライブラリのリファレンスに書いてありますので、そちらをご覧下さい。
113ポイント を手に入れた。
|
|
|
|
|
Name: kaba ..ぴよぴよ(144ポイント)
Date: 2009/02/16(月) 15:37
No:28866
|
|
Title: Re:画像が消える
|
|
↑の間違えました;;
すいません;;
SetAlwaysRunでは出来ず
SetAlwaysRunFlagでやってみましたが出来ません。
>ロード中でも描画処理がなされていれば、きちんと描画されます。
ロード中ではないんですが
黒くなった部分はゲームが始まって他の絵が表示されても
その部分だけ黒くなったまま直りません。
分かりますでしょうか?
99ポイント を手に入れた。
|
|
|
|
|
Name: cosmo ..かけだし(1,693ポイント)
Date: 2009/02/21(土) 04:14
No:29066
|
|
Title: Re:画像が消える
|
|
横やりを入れるようで済みません。
現時点では問題のプログラムのソースコードが無いので詳しくはわかりませんが…。
再描画処理について御津凪さんがおっしゃっていますが、
この処理が
int WINAPI Winmain(〜){
(この部分)
}
に無いのが原因ではないでしょうか?
123ポイント を手に入れた。
|
|
|
|
|
Name: kaba ..ぴよぴよ(366ポイント)
Date: 2009/02/21(土) 04:51
No:29068
|
|
Title: Re:画像が消える
|
|
Dixqさんすいません全く気づかず返事してませんでした・・・
もしかしたら再描画処理というものを勘違いしていたかもしれません。
ただ単に新しい画像が表示されたからって再描画されたわけじゃないんですよね?
再描画処理とはいったいどんな事を書けばよろしいのでしょうか?
コードを上げた方がよろしいでしょうか?
2倍のポイントを手に入れた! 222ポイント を手に入れた。
|
|
|
|
|
Name: cosmo ..かけだし(1,979ポイント)
Date: 2009/02/21(土) 05:37
No:29069
|
|
Title: Re:画像が消える
|
|
>コードを上げた方がよろしいでしょうか?
Dixqさんではないですが…コードは上げた方が良いと思います。
その方がこちらも具体的な原因が分かりますし。
74ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..プログラマー(25,932ポイント)
Date: 2009/02/21(土) 08:22
No:29072
|
|
Title: Re:画像が消える
|
|
WinMain( )とwann( )にreturnがありませんね。return 0;を追加しましょう。
wann( )にDxLib_Init( )が2箇所あって動きませんでした。
if( DxLib_Init() == -1 )return -1;
を削除したところ表示されるようになりました。
私の環境ではウィンドーを画面の外に出したり他のウィンドーで隠したりしましたが消えることはありませんでしたよ。
水が出てゲームオーバーになるところまでやりました。
2倍のポイントを手に入れた! 334ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..プログラマー(25,964ポイント)
Date: 2009/02/21(土) 08:33
No:29073
|
|
Title: Re:画像が消える
|
|
質問をよく読んでませんでした
ロード中というか初期化中にウィンドーを画面の外に出すんですね
確かに真っ黒になりました
32ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..プログラマー(26,008ポイント)
Date: 2009/02/21(土) 08:48
No:29074
|
|
Title: Re:画像が消える
|
|
初期化関数の後に
SetDrawArea(0, 0, 639, 479);
で描画領域をリセットすればよさそうです。
44ポイント を手に入れた。
|
|
|
|
|
Name: cosmo ..かけだし(1,993ポイント)
Date: 2009/02/21(土) 08:51
No:29075
|
|
Title: Re:画像が消える
|
|
DXライブラリのレファレンスを見てみましたが、
初期化中にウィンドウが隠されると再描画するような関数はないようです。
toyoさんの方法か、フルスクリーンで起動するように変更してみてはどうでしょうか?
int WINAPI WinMain(〜){
… …
}
return 0;
}
と
//画像音楽ロード
int wann(void){
{
… …
}
return 0;
}
のreturn 0;が抜けています。
warning C4996: 'fopen'の警告を消すには
#include 〜
と
int a=0
の間のどこかに
#pragma warning(disable:4996)
を追加すればこの警告は消すことが出来ます。
14ポイント を手に入れた。
|
|
|
|
|
Name: kaba ..ぴよぴよ(716ポイント)
Date: 2009/02/21(土) 09:24
No:29076
| 解決!
|
Title: Re:画像が消える
|
|
>WinMain( )とwann( )にreturnがありませんね。return 0;を追加しましょう。
勉強不足でreturn 0;を書く理由がいまだに
分からないんですが書いておきました。
ありがとうございます。
>wann( )にDxLib_Init( )が2箇所あって動きませんでした。
コピーばっかりしていたので気づきませんでした。
自分のPCでは起動したんですがPCによっては起動しないんですかね?
ありがとうございます。
>初期化関数の後に
>SetDrawArea(0, 0, 639, 479);
ウィンドー下と右が1ドット足らなかったので
SetDrawArea(0, 0, 640, 480);でやったらピッタリできました。
画面外に出してもちゃんと映りました。
ありがとうございます。
>#pragma warning(disable:4996)
>を追加すればこの警告は消すことが出来ます。
warning C4996: 'fopen'の警告が何を意味してるのかも分からず
警告がどこに出ていたのか分からなかったのですが
書いておきました。
ありがとうございます。
御津凪さん Dixqさん toyoさん cosmoさん
今回はありがとうございました。
279ポイント を手に入れた。
|
|
|
|
|
Name: cosmo ..かけだし(2,401ポイント)
Date: 2009/02/21(土) 09:56
No:29079
|
|
Title: Re:画像が消える
|
|
"解決"と出ていますが一応追記です。
>warning C4996: 'fopen'の警告が何を意味してるのかも分からず
>警告がどこに出ていたのか分からなかったのですが
>書いておきました。
についてですが、fopen関数は例外が発生した時にそれを通知する手段を持たないのです。
fopen関数よりもセキュリティを強化した…と言うか
例外が発生した時に通知する手段を持つ関数fopen_s関数があります。
…とマイクロソフトのリファレンス
http://msdn.microsoft.com/ja-jp/library/8ef0s5kh(VS.80).aspx
に書かれています。
自分なりの解釈が含まれているかもしれませんが、
warning C4996: 'fopen'の警告は
「出来るだけfopen関数ではなく、fopen_s関数の方を使ってください」
と言う意味を表していると思います。
fopen関数とfopen_s関数の引数の違いについてですが、
fopen関数の引数は2ですが、fopen_s関数の引数は3であることに注意が必要です。
必要なヘッダーはstudio.hでfopen関数を使う時と同じです。
fopen_s(
FILE** pFile,
const char *filename,
const char *mode
);
の定義中でそれぞれ
pFile:
開かれたファイルへのポインタを受け取るファイル ポインタへのポインタ。
filename:
ファイル名。
mode:
アクセス許可の種類。
を表しています。
fopen関数と比べて"FILE** pFile,"の引数が増えています。
408ポイント を手に入れた。
|
|
|
|
Name: lbfuvab ..上級者(16,339ポイント)
Date: 2009/02/21(土) 15:39
No:29104
|
|
Title: リソースからWAVEデータ
|
|
Dxライブラリで小さなゲームを作っていて、実行ファイルだけで動くようにしたいので
WAVEデータをリソースに置いてそれを再生しようと思ったのですが、
ググっても具体的な方法が全然分かりません。
環境はWinXP + VC2008EE + DxLib2.25です。
72ポイント を手に入れた。
|
|
|
|
Name: SCI ..初心者(6,979ポイント)
Date: 2009/02/21(土) 16:20
No:29107
|
|
Title: Re:リソースからWAVEデータ
|
|
結論から言うと、可能です。
PlaySound()関数(DxLibの関数じゃないよっ)とかを調べてみてください。
ただ、実行ファイルのサイズが大きくなるので、ファイルにするかリソースにするかは状況によって使い分けるといいと思います。
88ポイント を手に入れた。
|
|
|
|
|
Name: lbfuvab ..上級者(16,524ポイント)
Date: 2009/02/21(土) 16:33
No:29108
| 解決!
|
Title: Re:リソースからWAVEデータ
|
|
cosmo様
>WAVEデータは実行ファイルには組み込めないと思います。
>同じフォルダにあれば再生は可能ですが。
えーと、カスタムリソースとして使えたと思っていたのですが
>ところで、
>DxLib2.25には(旧)DxLib2.25aと(新)DxLib2.25bのバージョンがあるのはご存知ですか?
調べたのですが分かりませんでしたorz
SCI様
>結論から言うと、可能です。
>PlaySound()関数(DxLibの関数じゃないよっ)とかを調べてみてください。
この関数で出来ました。本当に有難うございます。
185ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..熟練のプログラマー(51,854ポイント)
Date: 2009/02/21(土) 19:36
No:29119
|
|
Title: Re:リソースからWAVEデータ
|
|
解決していますけど以下の関数で出来たと思います。
extern int LoadSoundMemByResource( const char *ResourceName, const char *ResourceType, int BufferNum = 1 ) ; // サウンドをリソースから読み込む
56ポイント を手に入れた。
|
|
|
|
|
Name: lbfuvab ..上級者(16,551ポイント)
Date: 2009/02/21(土) 19:59
No:29122
|
|
Title: Re:リソースからWAVEデータ
|
|
教えていただき、有難うございます。
しかし、BufferNumというのは一体何のパラメータなのでしょうか?
27ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..熟練のプログラマー(51,899ポイント)
Date: 2009/02/21(土) 22:15
No:29126
|
|
Title: Re:リソースからWAVEデータ
|
|
デフォルト値付きの引数は無視して問題ないと思います。
どうしても気になるのであれば、DXライブラリをソース解析するか本家の管理人さんに質問されてはいかがでしょうか。
45ポイント を手に入れた。
|
|
|
|
|
Name: cosmo ..入門者(2,825ポイント)
Date: 2009/02/21(土) 23:34
No:29130
|
|
Title: Re:リソースからWAVEデータ
|
|
>>lbfuvabさん
>えーと、カスタムリソースとして使えたと思っていたのですが
すいません勉強不足でした…orz
確かにWAVEファイルは実行ファイルに組み込めるみたいです。
62ポイント を手に入れた。
|
|
|
|
Name: Louis ..ぴよぴよ(324ポイント)
Date: 2009/02/21(土) 12:04
No:29088
|
|
Title: ゲームの処理について
|
|
はじめまして。
プログラミング館を拝見しながらゲームを作ろうと試行錯誤しているのですが質問があったので
カキコさせていただこうと思います。
ゲーム館をみて自分なりにソースを書いてある程度思い通りに行ったのでいざ作ろうと思ったのですが
考えてみるとゲームのソースってゲーム館ではほぼ1つのccpファイルだと思います。
たとえばRPGなどは最初にOP画面(メニュー画面)→最初のストーリー設定画面→メインプログラム
のように順々に処理が流れていくと思うのですが1つのccpファイルではとんでもない行数になってしまうと思います。
私が作ろうと思っているのはノベルゲームなのですが、if文でAとBに分かれたとき
Aは1のファイルにBは2のファイルに移動させようと思ったらどのような処理が必要になるのでしょうか?
いわゆるファイル分割?みたいな感じなのですが・・・
ここで説明していただければいいのですが一から十まで丁寧にって事になりそうなので;
RPGやノベルゲームなどをサンプルとしたわかりやすいサイト等はないでしょうか?
よろしくお願いします。
324ポイント を手に入れた。
|
|
|
|
Name: Louis ..ぴよぴよ(223ポイント)
Date: 2009/02/21(土) 14:52
No:29097
|
|
Title: Re:ゲームの処理について
|
|
例えばですがゲーム館のキャラクターが4方向に歩く場合ですが・・・
初めからキー入力までを1.cpp・座標計算を2.cpp・描画処理を3.cpp
と分割することも可能なのでしょうか?
よく分かってなくてすみません^^;
101ポイント を落としてしまった。
|
|
|
|
|
Name: cosmo ..入門者(2,581ポイント)
Date: 2009/02/21(土) 15:12
No:29100
|
|
Title: Re:ゲームの処理について
|
|
分割することも可能ですが…(理論上)
その場合共通の関数の定義を書いたヘッダーファイルを用意して、
それをそれぞれのcppファイルにインクルードする方法が考えられます。
あと、ファイル分割をした時はポインタの知識が必要になるかもしれません。
まあ…一般論ですが。
68ポイント を手に入れた。
|
|
|
|
|
Name: 元帥 ..ぴよぴよ(352ポイント)
Date: 2009/02/21(土) 17:07
No:29109
|
|
Title: Re:ゲームの処理について
|
|
割り込んで申し訳ないのですが僕もちょっと質問させてくださ〜い
ゲーム館をみてて思ったのですがこの処理はこうする
あの処理はこうすると言うのは理解できました。
でも、例えばメニュー画面を作ってみる
その次にメニュー1を選んでエンターキー押せばこの画面を映す
メニュー2を選んでエンターキーを押せばこの文字を映し出す
と言ったゲームの流れをどのように行うかが書かれていませんでした。
龍神録プログラミングの館とかもいきなり話がレベルアップしてるように見えますし。
Louisさんが言ってるようなファイル分割の話も乗ってたんですがいまいち分かりません。
そのような処理の流れを具体的なソースで表わしているページってないんでしょうかね〜?
例えばゲーム館33の選択画面の作り方。その次の関数の書き方。この二つって関連してるように見えます。
でも、メニュー画面はこう作ったらいい。それだけ言われてもどうすればいいのか分かりません。
メニュー画面の作り方と言うならばメニューの次の画面表示なんかを書いてくれればよくないですか?
ごめんなさいね、割り込んじゃって。
でも少し気になったので一つの意見として聞いてください。
352ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(61,890ポイント)
Date: 2009/02/21(土) 17:33
No:29111
|
|
Title: Re:ゲームの処理について
|
|
んん〜探せばありそうですが・・・
確かに少ないかも知れませんね。
ただ自分がゲームプログラミングの館をすぐに終えた感想は
コピペだけだと応用ができない
でした。確かに事細かく解説されてるはとても親切だと思うのですが、
なかなか実力が伴いません。
もしゲームプログラミングを通じて、プログラミングの実力をつけたい!!なら、
やはり、自分で一度どう実装したらいいか悩んだほうが良いと思います。
もしゲームを作りたい!!ならツクール系をオススメします。
分割ファイルに関しては、まず、本当に単純なもの
からはじめていったほうが良いです。
main.cpp
function.cpp
hd.h
を用意し、
hello world!!
を出力する関数print_string()をfunction.cppに記述します。
hd.hにはfunction()で書かれている関数のプロトタイプ宣言を書きます。
main.cppではprint_string()を呼び出す
っと実行できれば簡単な分割ファイルの完成です。
次に外部変数を取り入れたり
クラスのインターフェースをヘッダーに書いたり
・・・
なんて発展していけば、最初は混乱するかも知れませんが、
やればちゃんと理解できるはずです。
375ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(993,076ポイント)
Date: 2009/02/21(土) 17:42
No:29112
|
|
Title: Re:ゲームの処理について
|
|
そうですね〜、、龍神録の館はちょっとゲームの館から飛躍しすぎですね。
実は以前「シューティングの館」というものがあり(今も一応残してありますが)
これはちょうどゲームの館を終えたレベルで実装可能なゲームの解説を行っていました。
また、「わかりやすさ←→効率のよさ」はどうしてもトレードオフの関係になってしまう場合が多く、
シューティングの館は効率のよさを削ってわかりやすさを重視した内容になっていました。
「わからなくて嫌にならない」これが最善の解説だと思っていたのですが、
シューティングの館はやはり適切さを削っているコードが多く、
効率も悪く、この書き方である程度大規模なゲームを作るのは困難になっていました。
そこで、シューティングの館の内容をもう少し効率的にしようとして龍神録の館を作りました。
シューティングの館で苦労した人が龍神録の館を見て「あ〜こうすれば効率がいいのか」と思っていただけたらいいなと思いました。
龍神録の館も随分わかりやすさに比重を置いた内容になっていますが、シューティングの館よりは効率面でましだと思います・・。
なのでシューティングの館をご覧になった方が対象となっている為、ゲームの館から龍神録の館をご覧になると内容がかなり飛躍しているように感じると思います。
時間をみつけて、シューティングの館の内容を完結にして、ゲームの館で紹介できるようにしてみたいと思います。
分割コンパイルだけでしたらシューティングの館を見ていただけたらわかるかもしれません。
391ポイント を手に入れた。
|
|
|
|
|
Name: Mato ..ぴよぴよ(221ポイント)
Date: 2009/02/21(土) 17:50
No:29113
|
|
Title: Re:ゲームの処理について
|
|
>初めからキー入力までを1.cpp・座標計算を2.cpp・描画処理を3.cpp
と分割することも可能なのでしょうか?
可能ですよ。
kazuoniさんのURLの説明だけでも十分いけると思います……が、一応。
描画処理だけを別ファイルに、ということを目指します。
まず、新たにファイルを追加し、
#include "DxLib.h"
void MyDraw( int x, int y, int image ){
DrawGraph( x, y, image, TRUE ) ;//画像を描画
}
とします。
元からあるファイルの方には、
extern void MyDraw( int x, int y, int image );
と、#include "DxLib.h"の1行下に書いて下さい。
これで、元ファイルの方でも、新ファイルの関数が使えることになります。
変数を2つ以上のファイルで共有する ことも可能です。
これは先のURL参照ということで……。
という感じで、いいのかな……?(;´▽`)
見当違いなこと言ってたら、すいません。
221ポイント を手に入れた。
|
|
|
|
|
Name: Mato ..ぴよぴよ(254ポイント)
Date: 2009/02/21(土) 17:58
No:29115
|
|
Title: Re:ゲームの処理について
|
|
#キューさんへ
その内容を、龍神録館の”はじめに”当たりに書いておけばいいのでは……と思ったり。
33ポイント を手に入れた。
|
|
|
|
|
Name: dic ..中級者(13,243ポイント)
Date: 2009/02/21(土) 19:12
No:29117
|
|
Title: Re:ゲームの処理について
|
|
>「わかりやすさ←→効率のよさ」はどうしてもトレードオフの関係になってしまう場合が多く
ここだけ読ませてもらいました
ファイル分割の前に
関数化の概念を理解しておくと
ファイル分割の理由などが分かり、C言語の理解にも近づけると思います
93ポイント を手に入れた。
|
|
|
|
|
Name: Louis ..ぴよぴよ(384ポイント)
Date: 2009/02/21(土) 23:13
No:29127
| 解決!
|
Title: Re:ゲームの処理について
|
|
とても理解しやすかったです。皆様ありがとうございます。
一度シューティングの館を拝見した後に龍神録プログラミングの館
を拝見させていただこうと思います。
とりあえず画像処理や歩くキー入力、座標計算を順々にファイル分割できるように
練習して行こうと思います。またコピペだけで作れそうに無いので試行錯誤しながら
文字の表現や選択、画面効果などを考えていきます。
161ポイント を手に入れた。
|
|
|
|
Name: M ..ぴよぴよ(114ポイント)
Date: 2009/02/21(土) 09:26
No:29077
|
|
Title: オーバーライドができない
|
|
ヘッダを勉強しなおしている、初心者プログラマーですが、
オーバーライドができない理由が分からず、こまっていたところです。
ここにコードを記します。
//main.cpp
#include "commonInclude.h"
#include"cat.h"
#include"fatCat.h"
int main()
{
cat cat1 = cat("1stCat");
cat1.naku();
cat cat2 = fatCat(23);
cat2.naku();
}
//commonInclude.h
#include <iostream>
#include <string>
using namespace std;
//cat.h
#ifndef catIncluded
#define catIncluded
#include "commonInclude.h"
class cat
{
protected:
string name;
public:
cat();
cat(string);
virtual void naku();
};
#endif
//cat.cpp
#include "cat.h"
cat::cat(){
name = "ななし";
}
cat::cat(string s){
name = s;
}
void cat::naku(){
cout<<"おいらの名前は"<<name<<"だ。"<<endl;
}
//fatCat.h
#ifndef fatCatIncluded
#define fatCatIncluded
#include "commonInclude.h"
#include "cat.h"
class fatCat : public cat{
int weight;
public:
fatCat(int);
void naku();
};
#endif
//fatCat.cpp
#include "fatCat.h"
fatCat::fatCat(int num){
weight = num;
name = "ななし";
}
void fatCat::naku()
{
cout<<"おいらは太っている、"<<name<<"だ。"<< endl;
cout << "体重は"<< weight << "だ。" <<endl;
}
この実行時に、
おいらの名前は1stCatだ。
おいらは太っている、ななしだ。
体重は23だ。
と表示したいところが、
おいらの名前は1stCatだ。
おいらの名前はななしだ。
と表示されてしまいます。
原因と解決法を教えてください<(_ _)>
114ポイント を手に入れた。
|
|
|
|
Name: SCI ..初心者(7,038ポイント)
Date: 2009/02/21(土) 10:48
No:29080
|
|
Title: Re:オーバーライドができない
|
|
//main.cpp
#include "commonInclude.h"
#include "cat.h"
#include "fatCat.h"
int main()
{
cat cat1 = cat("1stCat");
cat1.naku();
cat cat2 = fatCat(23);
cat2.naku();
}
赤字の部分を見てください。(以下、正確な説明じゃないかもしれませんが・・・)
catクラスのインスタンスをfatCatで初期化しています。
すると、実行されるメソッドは「catクラス」のものになります。
fatCatに書き直すか、初期化の書き方を別のやり方にして混乱をなくす方法が考えられます。
353ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..初心者(7,135ポイント)
Date: 2009/02/21(土) 10:50
No:29081
|
|
Title: Re:オーバーライドができない
|
|
>fatCatに書き直すか、初期化の書き方を別のやり方にして混乱をなくす方法が考えられます。
変な書き方をしてしまいました。。fatCatに書き直すのは必須ですね。特殊なやり方があるのかもしれませんが・・・
97ポイント を手に入れた。
|
|
|
|
|
Name: M ..ぴよぴよ(319ポイント)
Date: 2009/02/21(土) 13:29
No:29092
|
|
Title: Re:オーバーライドができない
|
|
そういえば、そうでしたっけ。。。
すいません、説明が足りませんでした。
クラスCatは将来的には、様々な種類の猫(継承したもの)を、配列にいれて、すべて適切に鳴かせるために作っています。
つまり
Cat myCats[10];
Cat cat1 = Cat("1stCat");
fatCat cat2 = fatCat(23);
myCats[0] = cat1;
myCats[1] = cat2;
//続く…
for(int i = 0; i < 10; i++){
myCats[i].naku();
}
このような実行をした時に、どんな種類の猫でも適切に鳴いて欲しいわけです。
たしか、これを実現するのが仮想関数(virtual)で、合ってると思ったのですが・・・。
これを実行すれば、
おいらの名前は1stCatだ。
おいらは太っている、ななしだ。
体重は23だ。
と出力すると期待していたのですが、、、
おいらの名前は1stCatだ。
おいらの名前はななしだ。
になるんです;;
205ポイント を手に入れた。
|
|
|
|
|
Name: 組木紙織 [URL] ..比類無きプログラマー(70,129ポイント)
Date: 2009/02/21(土) 14:40
No:29095
|
|
Title: Re:オーバーライドができない
|
|
>クラスCatは将来的には、様々な種類の猫(継承したもの)を、配列にいれて、すべて適切に鳴かせるために作っています。
だーめーそれはやっちゃだめです。
基底クラスの配列に継承されたクラスを入れて扱うことはC++ではやっちゃだめなことです。
するのなら、基底クラスのポインタを利用してください
boostにそのような用途で使えるクラスがあったとような記憶がありますが、
<参考文献>
more effective C++ 項目3:配列をポリモルフィズム的に扱ってはいけない参照
以下サンプルコード
#include <iostream>
class Hoge
{
private:
int num;
public:
int get()
{
return num;
}
virtual void print()
{
std::cout << "Hoge " << get() << std::endl;
}
Hoge(int a)
:num(a)
{
}
};
class B: public Hoge
{
public:
virtual void print()
{
std::cout << "B :" << get() << std::endl;
}
B(int a):Hoge(a){}
};
int main()
{
Hoge * hoges[10];
hoges[0] = new Hoge(3);
hoges[1] = new B(3);
for(int i=0;i<2;i++){
hoges[i]->print();
}
for(int i=0;i<2;i++){
delete hoges[i];
}
return 0;
}
14ポイント を手に入れた。
|
|
|
|
|
Name: M ..ぴよぴよ(355ポイント)
Date: 2009/02/21(土) 15:44
No:29105
| 解決!
|
Title: Re:オーバーライドができない
|
|
おおお!なるほど!ポインタじゃないとだめだったのですね。
助かりました!!
ありがとうございます!
36ポイント を手に入れた。
|
|
|
|
Name: knr ..ぴよぴよ(82ポイント)
Date: 2009/02/21(土) 14:36
No:29094
|
|
Title: ここで質問すべきかどうか分かりかねますが・・・
|
|
C言語を使って作られた有名なゲームは分かりますでしょうか?
たとえば単純に「ファイナルファンタジー」(名前出して大丈夫でしょうか?)はC言語を使って作っているなど
所謂同人などではなく一般の商業で
調べたところいくら奥を探しても見つからないのでorz
よろしくお願いいたします
82ポイント を手に入れた。
|
|
|
|
Name: K ..かけだし(2,023ポイント)
Date: 2009/02/21(土) 14:47
No:29096
|
|
Title: Re:ここで質問すべきかどうか分かりかねますが・・・
|
|
商業用ではないですがココのサイト管理者の方が
シューティングゲームを作っておられます。
また、私が思うにほとんどのゲームがC言語で作られてるのではないでしょうか?
市販ゲームは昔から高級言語で作られていたと思います。
100ポイント を手に入れた。
|
|
|
|
|
Name: knr ..ぴよぴよ(341ポイント)
Date: 2009/02/21(土) 15:00
No:29098
|
|
Title: Re:ここで質問すべきかどうか分かりかねますが・・・
|
|
ここの管理人様のシューティングゲームはやらせていただきました
自分では到底作れないでしょうがw
一応とあるSNSサイトでゲームの9割がC++で作られていると聞いたんですが
SNSサイトというだけあって相手がどのような知識、情報を持っているのか分からなかったので・・・
差し出がましいようですがレポートで代表的なゲーム名を出そうと思っているので
もしご存じでしたらゲーム名なども教えていただきたいです
結局C言語とC++どちらが多いのやらorz(C++はC言語を元にしたらしいので実質C言語は広く使われてるとは思いますが)
なるほど・・・情報ありがとうございます!
259ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(148,751ポイント)
Date: 2009/02/21(土) 15:12
No:29099
|
|
Title: Re:ここで質問すべきかどうか分かりかねますが・・・
|
|
具体的なタイトルは分かりませんが、SFC辺りまではC言語が主流で、C++が使われ始めたのは、もう少しあとの時代だと聞いた事があります。
又聞きなので、信憑性に欠ける情報ではありますが、参考までに…
74ポイント を手に入れた。
|
|
|
|
|
Name: knr ..ぴよぴよ(408ポイント)
Date: 2009/02/21(土) 15:17
No:29101
|
|
Title: Re:ここで質問すべきかどうか分かりかねますが・・・
|
|
前の投稿ですが「Kさん」と名前の指定を忘れていましたすいません
バグさん
なるほど・・・SFCですか
ありがとうございます!参考にさせていただきます
67ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(318,085ポイント)
Date: 2009/02/21(土) 15:27
No:29102
|
|
Title: Re:ここで質問すべきかどうか分かりかねますが・・・
|
|
FC/SFCはアセンブラでした。
(SFCのごく一部のソフトは違うという話ありますが、定かではありません)
C言語が使われ出したのは PS/SSからです。
DC/PS2以降のコンシューマ系は C++が多くなってきました。
つまり、ゲーム名をあげなくても C言語で作られたゲームというなら
PS/SSのゲームはほぼ当て余りますし、DCもかなりの数が当てはまります。
PS2も初期の頃はCが多かったと思います。
150ポイント を手に入れた。
|
|
|
|
|
Name: knr ..ぴよぴよ(442ポイント)
Date: 2009/02/21(土) 15:38
No:29103
|
|
Title: Re:ここで質問すべきかどうか分かりかねますが・・・
|
|
Justyさん
おぉ詳しくありがとうございます!
PS辺りですか
PS2は最近のはC++ですかなるほど
参考にさせていただきます!
34ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..プログラマー(27,852ポイント)
Date: 2009/02/21(土) 14:36
No:29093
|
|
Title: Re:パズルゲームつくってみました☆
|
|
ゲームやらせていただきました。
初めてとは思えないできだと思います^^
難易度は私にとっては難しくはありませんでした。
ゲームクリアするたびに難易度が上がっていくようにしてもよかったと思います。
たとえば
・退避用の場所?を2か所から1か所に減らす
・3×3を4×4というように、数字を増やしていく
みたいな感じに
あとはやり込みようにスコアを作っても面白いかもしれませんね^^
何手でクリアできたかみたいな
まだゲームを完成させていない身分で偉そうなこと言ってすいませんでした^^;
193ポイント を手に入れた。
|
|
|
|
|
Name: ようすけ
Date: 2009/03/03(火) 11:42
No:290831236048177
|
|
Title: Re:パズルゲームつくってみました☆
|
|
返事遅くなりました。
プレイしていただきありがとうございます☆
>ゲームクリアするたびに難易度が上がっていくようにしてもよかったと思います。
そうですね ちょっと改良してみます。
>まだゲームを完成させていない身分で偉そうなこと言ってすいませんでした^^;
RPGでしょうか?出来たらやらせてくださいね☆
|
|
|
|
Name: K ..かけだし(1,174ポイント)
Date: 2009/02/20(金) 22:59
No:29058
|
|
Title: 3Dゲーム作成について
|
|
皆様はじめまして
経緯は省かさせていただけますが友達とゲームを作ることになりました。
そして、アイディアを出し合いゲーム構成を練っていく上で以下の件が候補に挙がりました。
1、ジャンルはホラー
2、ノベルゲーム又は謎解き小説
3、3Dを使い、主人公が動作して話が進む
今はこの内容で作ろうと考えているのですが、案が出たのは去年でした。
受験があったので作業は一時中断。ですが、大学に皆受かったので制作再開しようと
思い3Dの勉強を始めようと思ったのですが・・・
1、DXライブラリ3Dの本家ページが無くなっており、どのライブラリを使えばよいかわかりません。
2、次に、2Dゲームは処理の流れを大まかに作ったことがあるので理解できますが、3次元配列の
あらわし方をどうすればいいのか見当もつきません。
たぶん2次元配列の座標1つ1つに縦軸のZ座標の判定などを入れていけばいいと思うのですが;
一応、物理系なのでベクトル等は理解してます。
問題は配列と3Dが使えるライブラリだけです。
上記のことが勉強できる方法は無いでしょうか?
できればWEB上で勉強できれば一番助かります。
本とにらめっこして勉強は得意でないもので;
理数系で国語が苦手なので誤字脱字、表現のあいまいさがあると思いますがご勘弁ください。
よろしくお願いいたします。
449ポイント を手に入れた。
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(59,759ポイント)
Date: 2009/02/20(金) 23:34
No:29059
|
|
Title: Re:3Dゲーム作成について
|
|
DXライブラリ3DやDXライブラリは、元は DirectX SDK を簡単に扱えるためのものなので、
DirectX SDK からでも3Dゲームの製作を行なうことは出来ます。
ただし、大変ではありますが。
http://marupeke296.com/GameMain.html
上記のサイトを参考にすると良いと思います。
3Dのポリゴンを表すのは、座標だけでなく、
その色やテクスチャの座標など、一つの頂点に複数の情報があります。
3Dでは、この頂点のリストを用意し、描画させることで3Dポリゴンを表しています。
3次元では、2次元の時のようにマップをチップで表現するのは難しいです。
(3次元のタイルデータを2次元方向に並べるのであれば別ですが)
3Dでは、当たり判定も3次元用のものが必要になります。
その当たり判定についても上記で解説されていますので、ここでは割愛します。
ちなみに、別のトピでも書きましたが、
DXライブラリ3Dの派生ライブラリ「Siv3D」が開発中だそうです。
451ポイント を手に入れた。
|
|
|
|
|
Name: K ..かけだし(1,438ポイント)
Date: 2009/02/21(土) 09:34
No:29078
|
|
Title: Re:3Dゲーム作成について
|
|
なるほど、確かにDXライブラリ3Dを使うときもDirectX SDKをダウンロードした記憶があります。
でも、SDKは数学で言う公式なのでちょっと大変な部分はありそうですね〜^^;
ゲームつくろー!
拝見させていただきましたが、2D、3D共に充実した内容でビックリです。
私もこれから愛用させていただこうと思います。ありがとうございました。
昨日、寝ながら考えていたのですが
1、複数のライブラリを使うことって可能なのでしょうか?
2、アプリケーションからC言語を読み出す方法はあるんでしょうか?
1は2D、3Dを利用してゲームを作るときに2D用・3D用の別々のライブラリを使うとしたら
どうなるのでしょう?
2はアプリケーションからどうしても見てみたいゲームがあるんです。
灯と言うグループ(3人)が作っているROLって3Dゲームなのですがものすごくグラフィック綺麗ですし
自分が見当もつかないアルゴリズムなどが使われていそうなので勉強としてみてみたいのです。それに、
自分がゲームを作るきっかけになったゲームなのでどうしてもって気があるんです。
無理なのでしょうか?
最初の題からは少しそれますが教えていただけると助かります。
264ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..初心者(6,891ポイント)
Date: 2009/02/21(土) 11:05
No:29084
|
|
Title: Re:3Dゲーム作成について
|
|
Kさん
理系ということで同族意識が(ry
>1、複数のライブラリを使うことって可能なのでしょうか?
可能です。が、「DirectXとDXライブラリ」とかは、一筋縄ではいきません。
DXライブラリはDirectX(確か8?)のラッパーに過ぎないので、結局DirectX関連の(同じ)ライブラリが競合することになります。
現に、同時に使おうとして失敗している人を知ってます(笑)
DirectXは2Dも3Dも扱えます。DXライブラリは使いやすく機能の集約・分割をしてるんですね。
逆に言えば、DirectXは難解で面倒です。
>2、アプリケーションからC言語を読み出す方法はあるんでしょうか?
これは原則的に不可能です。C言語ソースと実行可能形式のコードは1対1ではないので・・・
244ポイント を落としてしまった。
|
|
|
|
|
Name: cosmo ..入門者(2,513ポイント)
Date: 2009/02/21(土) 11:18
No:29085
|
|
Title: Re:3Dゲーム作成について
|
|
>>Kさん
>1、複数のライブラリを使うことって可能なのでしょうか?
これは可能ですが、SCIさんの言うとおりDirectXとDXライブラリは同時に使うことは出来ないです。
>>SCIさん
>現に、同時に使おうとして失敗している人を知ってます(笑)
はい、私もその様な失敗をした一人です(汗
「マクロが再定義されました」…のようなエラーが出てしまい、
デバッグ用の実行ファイルすら生成されませんでした…;;
112ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(60,758ポイント)
Date: 2009/02/21(土) 11:32
No:29086
|
|
Title: Re:3Dゲーム作成について
|
|
基本は 2D, 3D の処理を別々のライブラリで使用するというのは、
少なくとも私の知る限りでは対応しているものはないです。
別々のライブラリで双方とも正常に動作させるには、少なくとも
対応 DirectX のバージョンが同一で、
デバイスの共有が出来、(片方で用意したデバイスをもう片方へ渡し、それで動作させる)
かつ描画処理がダブらないものでないといけません。
(そうなると隠蔽すべき箇所が少なくなり、複雑怪奇なものになりそうです)
しかし、元々 3D で表示できるということは、擬似的に 2D で表示することもできます。
(ほとんどのアプリケーションはその方法で 2D ・ 3D の混合表示をしています)
3D 空間の表し方は、ちょうど番組や映画の撮影カメラのように、
空間・カメラ位置・注視点によって表示されています。
3D 空間で 2D 空間を表すには、正射影行列という方法を使って、
スクリーンとぴったり座標を合わせることで、 2D の正確な表示が可能になります。
ただし、「2D の表示」が出来るのであって、 2D の方法で(DXライブラリのように)
表示しているわけではないことに注意してください。
X軸とY軸のみで3D頂点座標を配置しているだけなので。
2. については、C言語とまでは行きませんが、逆アセンブル(リバースエンジニア)により
アセンブラコードを抽出することは可能ですが、これはほとんどのアプリケーションでは
違反行為となります。(個人目的としても禁止しているのがほとんどのはずです)
よって、アプリケーションからコードを読み出すということはまず無理です。
開発者にソースを見せてほしい、と頼めば見せてくれるかもしれませんが、
ほとんどの場合は駄目だろうと思います。
アルゴリズムやエフェクトなどの大部分はネットで調べれば見つかりますが、
確実なものを知りたい場合は、書物を読むといいでしょう。
ゲームプログラマになる前に覚えておきたい技術(リンクはAmazon行きです)
上記の本がオススメです。
872ページ(!)にも及ぶゲームプログラムに関するさまざまな技巧が網羅されています。
(私は持ってませんけど…)
999ポイント を手に入れた。
|
|
|
|
|
Name: K ..かけだし(1,923ポイント)
Date: 2009/02/21(土) 11:49
No:29087
| 解決!
|
Title: Re:3Dゲーム作成について
|
|
なるほど〜
DirectXとDXライブラリは同時に使えないのですね〜
期待していただけにちょっと残念です。
SCIさんも理系なんですね〜
やっぱりC言語は理系が向いているんですかね^^
やっぱりアプリからソース拝見とはいかないんですね・・・
ゲームの知識は自分から学ぶってつくづく痛感しました。
cosmoさん
やっぱり私と同じような考えの人は多いようで;
この掲示板を見つけられてよかったです。
私はまだ実行してないので、被害者ではないですよ〜(笑)
御津凪さん
やっぱり基本的にコンパイラはこのHP紹介のMicrosoftのを使っているので
DirectXやDirect SDKなんかを使って作るほうが自由度が高くていいのでしょうかね;
アプリから抽出は禁止ですか〜
灯の方にソース見せてほしいとメールを何度か送り、掲示板でも聞きましたが・・・
応答なしで掲示板ではなぜか叩かれました。
>ゲームプログラマになる前に覚えておきたい技術
一度、著書間にあれば見てみようと思います。
皆様、丁寧な回答ありがとうございました。
また疑問が出たときにお世話になると思いますがこれからよろしくお願いします。
485ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(61,090ポイント)
Date: 2009/02/21(土) 12:46
No:29091
|
|
Title: Re:3Dゲーム作成について
|
|
> 灯の方にソース見せてほしいとメールを何度か送り、掲示板でも聞きましたが・・・
> 応答なしで掲示板ではなぜか叩かれました。
自分が苦労して作り上げたゲームやソフトを、
ソースを改造してグレードアップしたものやチートを入れたものを公開されたりでもしたら、
自分のいままで苦労が報われないどころか、水の泡になりますからね。
ゲームやソフトの場合、上記のことを恐れるため、ソースは非公開が当然のようになっています。
そのため、たとえ勉強の為と思って相談しても駄目なのです。
(そのために叩かれたのだろうと思います)
技術を盗めという言葉もありますが、巷でよく騒がれている情報の漏えいが懸念されるため、
ソースまでも盗むというわけにもいかないのです。
しかし、 zlib, libpng のようにソースを公開し、技術などを提供しているところがあることも忘れてはなりません。
また、GNU系ツールなどはツールの質を向上させるためにソースを公開しているものもあります。
332ポイント を手に入れた。
|
|
|
|
Name: サッカーモ ..かけだし(1,381ポイント)
Date: 2009/02/21(土) 00:27
No:29061
|
|
Title: ファイル形式の表示について
|
|
このサイトの「ゲームプログラミングの館」の説明を見ながらプログラムをしています。
第2章の『画面を表示する』の段階で躓いています。
第2章部の説明[先ほどダウンロードしたフォルダの中の「サンプルプログラム実行用フォルダ」のフォルダの 中のVisualStdioでしたらDxLib.slnを開き、プログラムが書ける状態にしてください。]
という指示に従い、サンプルフォルダ実行用フォルダを開いたのですが、
拡張子がついていなくてどれを開けばいいのかわかりません。
拡張子の表示のさせ方を教えてください。
何度か試しに『DxLib.sln』らしきものを開いたのですが、
『DxLib.sln』には最初から書き込まれていて、どうコピペすればいいかもわかりません。
どうかよろしくお願いします。
299ポイント を手に入れた。
|
|
|
|
Name: cosmo ..かけだし(1,570ポイント)
Date: 2009/02/21(土) 00:39
No:29062
|
|
Title: Re:ファイル形式の表示について
|
|
>拡張子の表示のさせ方が分かりません。
ファイルを表示させる為にエクスプローラを起動させます。
それが表示されたら、メニューバーからツール→フォルダオプションを選択します。
オプションのダイアログボックスが表示されたら表示と言うタブをクリックして、
詳細設定の一覧に行きます。
おそらく設定したい項目は下のほうにあると思うので、
下のほうまでスクロールさせた後、「登録されている拡張子は表示しない」
のチェックを外すと拡張子が表示されるようになります。
>どうコピペすれば良いか分かりません。
2章の前にここに処理を書いていくという説明の画像がありますが、それは見ましたか?
「ここに処理を書いていく」の部分に
LoadGraphScreen( 0 , 0 , "char.png" , TRUE ) ;
をコピペすれば良いと思います。
194ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..プログラマー(27,659ポイント)
Date: 2009/02/21(土) 01:08
No:29063
|
|
Title: Re:ファイル形式の表示について
|
|
前にも書きましたが、開発環境は書いてください。
>>このサイトの「ゲームプログラミングの館」の説明を見ながらプログラムをしています。
とのことなので、開発環境はVC++ 2008 EE、必要な設定は完了していることを前提で話を進めます。
拡張子の表示の仕方は、cosmoさんのおっしゃる通りフォルダオプションから設定を変更することによって、
表示させることができます。
>どうコピペすれば良いか分かりません。
第2章までにちゃんと書かれていますよ。
VC++を起動すると、左に(場合によっては右かも知れませんが)ソリューションエクスプローラがあります。
もし表示されていなければ、ツールバーの
「表示」→ソリューションエクスプローラ
から表示させます。
そこの「SourceFiles」に入っているtest.cppをダブルクリックします。
すでにソースが書かれていますが、これを削除してからコピペしてプログラムを作っていきます。
343ポイント を手に入れた。
|
|
|
|
Name: 馬鹿太郎 ..ぴよぴよ(881ポイント)
Date: 2009/02/18(水) 15:09
No:28948
|
|
Title: またまた文字列
|
|
このプログラムは、数字の並びである文字列stを整数値に変換した値を返す関数です。
たとえば、stが"1234"であれば整数値1234を返します。ただし、文字列中に数字以外の
文字が一つでも入っていれば-1を返します。
・文字列stにはchar型の文字列が格納されているのですよね?char型のサイズは1バイトですから、
たとえば文字列stが"1k2u"だったら、たとえば1000番地に'1'1001番地に'k'1002番地に'2'1003番地に'u'
とそれぞれ格納されるわけですよね?
この認識が間違っていたら、教えてください。
・no = no * 10 + st[i] - '0'
がわかりません。
int strtoint(const char st[])
{
int i, no = 0;
for (i = 0; str[i]; i++) {
if (st[i] >= '0' && st[i] <= '9') {
no = no * 10 + st[i] - '0';
}
else {
return(-1);
}
}
return(0);
}
272ポイント を手に入れた。
|
|
|
|
Name: non ..プログラマー(36,230ポイント)
Date: 2009/02/18(水) 15:32
No:28952
|
|
Title: Re:またまた文字列
|
|
文字の'0'はJISコードで0x30(10進数の48)です。
同様に'1'は0x31です。
アスキーコード表(またはJISコード表)をググってみてください。
ですから、
st[i]-'0'を計算したら、0〜9の数値になりますよね。
桁数が数桁有るので、10倍してその桁を足します。
86ポイント を手に入れた。
|
|
|
|
|
Name: non ..プログラマー(36,387ポイント)
Date: 2009/02/18(水) 15:43
No:28957
|
|
Title: Re:またまた文字列
|
|
>文字列stにはchar型の文字列が格納されているのですよね?char型のサイズは1バイトですから、
>たとえば文字列stが"1k2u"だったら、たとえば1000番地に'1'1001番地に'k'1002番地に'2'1003番地に'u'
>とそれぞれ格納されるわけですよね?
確認するプログラムです。試してください。
#include<stdio.h>
int main(void)
{
char str[]="ABC123";
int i=0;
while(str[i]){
printf("str[%d]:address=%p moji=%c code=%d\n",i,&str[i],str[i],str[i]);
i++;
}
return 0;
}
157ポイント を手に入れた。
|
|
|
|
|
Name: abc ..入門者(3,756ポイント)
Date: 2009/02/18(水) 15:44
No:28958
|
|
Title: Re:またまた文字列
|
|
数字の並びである文字列stを整数値に変換した値を返す関数です
返してるのは0、−1だけですよ??
しかも文字列stを整数値に変換してないですねー、
文字の数値チェックはあってると思いますよ。
Cコンパイラがあるならメモリマップみてくださいちなみに"1k2u"だったら
{012FF74 31 6B 32 75 00 00 00 00 00 00 CC CC C0 FF 12 1k2u......フフタ..}になります
012FF74があなたの言ってる1000番地にあたります。(アドレス)
質問の答えになればいいのですが,,,,
181ポイント を手に入れた。
|
|
|
|
|
Name: non ..プログラマー(36,552ポイント)
Date: 2009/02/18(水) 16:02
No:28961
|
|
Title: Re:またまた文字列
|
|
> 返してるのは0、−1だけですよ??
ただ単なる入力ミスでしょう。
return(no) です。
途中でstrってのもあるし・・・
> しかも文字列stを整数値に変換してないですねー、
してますよ。noに。返してないだけで。
35ポイント を手に入れた。
|
|
|
|
|
Name: 馬鹿太郎 ..ぴよぴよ(886ポイント)
Date: 2009/02/18(水) 16:09
No:28963
|
|
Title: Re:またまた文字列
|
|
すいませんっ!
no = no * 10 + st[i] - '0'
ここ、詳しくお願いします。
5ポイント を手に入れた。
|
|
|
|
|
Name: non ..プログラマー(36,707ポイント)
Date: 2009/02/18(水) 16:13
No:28964
|
|
Title: Re:またまた文字列
|
|
普通に10進数で考えたとき、
1234は
((1×10+2)×10+3)+4
であることを理解してください。
2倍のポイントを手に入れた! 102ポイント を手に入れた。
|
|
|
|
|
Name: 馬鹿太郎 ..ぴよぴよ(936ポイント)
Date: 2009/02/18(水) 16:31
No:28969
|
|
Title: Re:またまた文字列
|
|
文字列stを整数値に変換した値を返すとはどういう意味ですか?
no = no * 10 + st[i] - '0'
やっぱりわかりません・・・
50ポイント を手に入れた。
|
|
|
|
|
Name: Kou ..かけだし(1,322ポイント)
Date: 2009/02/18(水) 17:02
No:28972
|
|
Title: Re:またまた文字列
|
|
馬鹿太郎様
> no = no * 10 + st[i] - '0'
>
> やっぱりわかりません・・・
仮にstに文字列"1234"が入っているとします。
まずは式中の「st[i]-'0'」を「st[i]-48」で考えてみてください。(48→'0'の10進でのASCIIコード)
その上で、式がfor文でループしているので、'0'→48、'1'→49で考えると処理が追えると思いますよ。
65ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..プログラマー(25,653ポイント)
Date: 2009/02/18(水) 19:56
No:28981
|
|
Title: Re:またまた文字列
|
|
文字'0'と数値0が別のものであるのはわかってますか。
文字'0'は数値48です
数値 12 は 1 * 10 + 2 はわかりますよね
noが1でst[i] - '0' が2にあてはまります
60ポイント を落としてしまった。
|
|
|
|
|
Name: 馬鹿太郎 ..ぴよぴよ(994ポイント)
Date: 2009/02/18(水) 20:37
No:28984
|
|
Title: Re:またまた文字列
|
|
>数値 12 は 1 * 10 + 2 はわかりますよね
>noが1でst[i] - '0' が2にあてはまります
でも、ここのnoは0では?
うーーん・・・
58ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(58,683ポイント)
Date: 2009/02/18(水) 20:52
No:28985
|
|
Title: Re:またまた文字列
|
|
> でも、ここのnoは0では?
計算の結果は no に代入されるので、
ループした次の計算では0ではなくなります。
(最初に '0' が来たら、その時だけ 0 が代入されますが)
たとえば、 "123" の文字列が入力された時、計算順序は
no = 0 * 10 + 1; → no に 1 が代入される
no = 1 * 10 + 2; → no に 12 が代入される
no = 12 * 10 + 3; → no に 123 が代入される
と、なります。
95ポイント を手に入れた。
|
|
|
|
|
Name: non ..プログラマー(37,211ポイント)
Date: 2009/02/18(水) 20:55
No:28986
|
|
Title: Re:またまた文字列
|
|
何がわからないのか、もう少しわかるように書いてもらえますか。
まず、これはどこまで理解できますか?
段階@
1234は
1*1000+2*100+3*10+4
段階A
((((0+1)*10+2)*10+3)*10+4
段階B
次を順番に実行すると
n=0;
n=n*10+1;
n=n*10+2;
n=n*10+3;
n=n*10+4;
段階C
int s[4]={1,2,3,4};
n=0;
n=n*10+s[0];
n=n*10+s[1];
n=n*10+s[2];
n=n*10+s[3];
段階D
int s[4]={1,2,3,4};
n=0;
for(i=0;i<4;i++)
n=n*10+s[i];
段階E
char st[]="1234"
n=0;
for(i=0;i<4;i++)
n=n*10+(st[i]-0x30);
322ポイント を手に入れた。
|
|
|
|
|
Name: 馬鹿太郎 ..かけだし(1,057ポイント)
Date: 2009/02/19(木) 19:17
No:29024
|
|
Title: Re:またまた文字列
|
|
・整数値に変換した値を返すとはどういうことでしょうか?
僕には1234がそのまま1234を返しているしか見えません。
段階@
1234は
1*1000+2*100+3*10+4
段階A
((((0+1)*10+2)*10+3)*10+4
段階B
次を順番に実行すると
n=0;
n=n*10+1;
n=n*10+2;
n=n*10+3;
n=n*10+4;
段階C
int s[4]={1,2,3,4};
n=0;
n=n*10+s[0];
n=n*10+s[1];
n=n*10+s[2];
n=n*10+s[3];
段階D
int s[4]={1,2,3,4};
n=0;
for(i=0;i<4;i++)
n=n*10+s[i];
段階E
char st[]="1234"
n=0;
for(i=0;i<4;i++)
n=n*10+(st[i]-0x30);
これはいったい何の計算をしているのですか?
段階Aがわかりません
63ポイント を手に入れた。
|
|
|
|
|
Name: 馬鹿太郎 ..かけだし(1,118ポイント)
Date: 2009/02/19(木) 19:47
No:29025
|
|
Title: Re:またまた文字列
|
|
if (st[i] >= '0' && st[i] <= '9')
この'0'と'9'は文字コードの0と9を表しているのですか?
no = no * 10 + st[i] - '0'
この'0’は文字コードの0ですよね?どうしてわざわざ0を引いているのですか?
結果は同じなのに・・・
61ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(135,760ポイント)
Date: 2009/02/19(木) 19:54
No:29026
|
|
Title: Re:またまた文字列
|
|
文字'0'と数値の0は異なることを理解してください。
'0'の値は、文字コード体系に応じた、非ゼロの値です。
例えば、ASCIIコードでは、X'30'(十進では48)という値です。
st[i] - '0'
という式は、'0'〜'9'のいずれかの値を持っているst[i]から
'0'の値を引くことで、st[i]が'0'からいくつ離れているか、
つまり0〜9のいずれかを求める、という意味があります。
結果として、
st[i]が'0'のとき、数値の0
st[i]が'1'のとき、数値の1
以下同様に、
st[i]が'9'のとき、数値の9
が求まります。すなわち、数字の文字('0'〜'9')を数値(0〜9)に
変換しているのです。
245ポイント を手に入れた。
|
|
|
|
|
Name: non ..プログラマー(37,582ポイント)
Date: 2009/02/19(木) 20:34
No:29027
|
|
Title: Re:またまた文字列
|
|
段階A でわからないわけですね。
((((0+1)*10+2)*10+3)*10+4
これを計算すると1234になることは分かりますよね。
式を展開すると
1*1000+2*100+3*10+4 になります。
だから、
1*1000+2*100+3*10+4 =((((0+1)*10+2)*10+3)*10+4
とおなじです。
さて、ここで1000の桁をa、100の桁をb、10の桁をc、1の桁をdとすると
((((0+1)*10+2)*10+3)*10+4=((((0+a)*10+b)*10+c)*10+d
になることはおわかりでしょうか。
これが、理解できるのなら段階Bに進んで下さい。
if (st[i] >= '0' && st[i] <= '9')
は書き直すと
if (st[i] >= 48 && st[i] <= 57)
また、
no = no * 10 + st[i] - '0' は
no = no * 10 + st[i] - 48 と同じです。
決して0を引いているわけではありません。
のことです。アスキーコード表は見ましたか?
371ポイント を手に入れた。
|
|
|
|
|
Name: 馬鹿太郎 ..かけだし(1,146ポイント)
Date: 2009/02/19(木) 20:41
No:29028
|
|
Title: Re:またまた文字列
|
|
文字'0'と数値の0は異なることを理解してください。
なんか、分かりかけているような・・・
もうちょっと、詳しくお願いします
28ポイント を手に入れた。
|
|
|
|
|
Name: non ..プログラマー(37,774ポイント)
Date: 2009/02/20(金) 10:15
No:29048
|
|
Title: Re:またまた文字列
|
|
> 文字'0'と数値の0は異なることを理解してください。
>
> なんか、分かりかけているような・・・
> もうちょっと、詳しくお願いします
みなさんが、たくさん書いてくれているのに、ちょっと失礼じゃないですか?
馬鹿太郎さんが、何がわからないのかが、私にはわからないのです。
何を詳しく書けといっているのか、詳しく書いてください。
馬鹿太郎さんの文面をみれば、小学生ではなさそうですし・・・・・
アスキーコード表は見ましたかと、2回も書いたのに、見ましたとは返事がないじゃないですか。
コード表をみれば、何回も書いたように、'0'はコンピュータの中では、数値の48になっているのだから
0ではないってのは明らかなはずです。
192ポイント を手に入れた。
|
|
|
|
|
Name: 無題 ..ぴよぴよ(231ポイント)
Date: 2009/02/20(金) 21:50
No:29056
|
|
Title: Re:またまた文字列
|
|
char st[4] = {'1','2','3','4'};
の時、
一回目、no == 0,st[0] == '1'なので
no = 0 * 10 + 49 - 48;'1'=49,'0'=48
と、こうなるので no に 1 が入ります。('1'とは別です。)
二回目は、no == 1,st[1] == '2'なので
no = 1 * 10 + 50 - 48;'2'=50,'0'=48
で、no == 12 になるってことだと思います。
'a'や'Y'などは、if文の条件に合わないので
return(-1)ってことだと思いますよ。
的外れor間違ってたらごめんなさい。
231ポイント を手に入れた。
|
|
|
|
|
Name: 馬鹿太郎 ..かけだし(1,566ポイント)
Date: 2009/02/21(土) 02:13
No:29064
| 解決!
|
Title: Re:またまた文字列
|
|
皆様、ご返答ありがとうございました。
いろいろ、皆様の意見を聞き、プログラムをいじっていたら、理解できました。
non様、大変ありがとうございました。
これから、質問するときは、気をつけたいと思います。
75ポイント を手に入れた。
|
|
|
|
Name: TOUCH ..ぴよぴよ(0ポイント)
Date: 2009/02/20(金) 13:26
No:29050
|
|
Title: gzip
|
|
LINUX コマンド
gzip
をC言語で置き換えるには一体
どうすればいいのでしょうか?
お願いします。
|
|
|
Name: 馬鹿太郎 ..かけだし(1,491ポイント)
Date: 2009/02/19(木) 21:59
No:29031
|
|
Title: ポインタ
|
|
配列3つをstr1、str2、str3と用意して、str1のそれぞれの要素がstr2の要素と一致したらstr3に格納する
プログラムです。その際ポインタを使います。
実行したら0になりました。どうしてでしょうか?また、どこがおかしいのですか?
#include <stdio.h>
void main()
{
int str1[5] = {8, 10, 13, 6, 9};
int str2[5] = {3, 6, 7, 9, 13};
int str3[5] = {0};
int i, j, k;
int *p1, *p2, *p3;
p1 = str1;
p2 = str2;
p3 = str3;
for (i = 0; i < 5; i++) {
for (j = 0; j < 5; j++) {
if (*p1 == *p2) {
*p3 = *p1;
p3++;
break;
}
p2++;
}
p1++;
}
for (k = 0; k < 5; k++) {
printf("%d\n", *p3);
}
}
345ポイント を手に入れた。
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(61,173ポイント)
Date: 2009/02/19(木) 22:20
No:29032
|
|
Title: Re:ポインタ
|
|
規約をよんでいらっしゃいますか?
コードを載せる際には、プレタグで囲いましょう。
とりあえずi=0の時はうまく操作できていますが、
i=1になったとき、p2は確保した配列を超えた領域にアクセスしています。
まずはここから見直されてください。
まず紙に書くなりしてどういう動きになるか、
どうすれば改善できるか検討してみてください。
(字下げもされたほうが、皆さんも見やすいかも・・・。)
133ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(135,911ポイント)
Date: 2009/02/19(木) 22:37
No:29033
|
|
Title: Re:ポインタ
|
|
> 実行したら0になりました。どうしてでしょうか?また、どこがおかしいのですか?
それを調べるのが「デバッグ」という作業です。
いちばん基本的と思われる方法は、「この辺がおかしい」と
当たりを付けたところにprintf()を書いて、
おかしいと思われる変数やそれに関連する変数の値を
出力してみることです。
デバッグを人任せにしていると、実力がなかなか付かないと思います。
「プログラムは思ったとおりに動かない。書いたとおりに動く。」
ところで、この前の問題は片が付いたのですか?
122ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(85,466ポイント)
Date: 2009/02/19(木) 22:37
No:29034
|
|
Title: Re:ポインタ
|
|
> 実行したら0になりました。
何が0になったのでしょうか?
> どうしてでしょうか?
たまたまそのように動作したからです。
> また、どこがおかしいのですか?
mainの返却値の型がvoidですので未定義の動作になります。
何が起きても不思議ではありません。
75ポイント を手に入れた。
|
|
|
|
|
Name: TOMONORI ..かけだし(1,926ポイント)
Date: 2009/02/20(金) 12:19
No:29049
|
|
Title: Re:ポインタ
|
|
ちょっと一言いいですか。
このコードの動作はとても面白いので詳しく解析してみるといいと思います。
環境によっては多くの場合if文の中を実行することになると思うのですが
それはなぜなのか、とか配列とポインタの関係などを考えてみるといいかもです。
123ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..初心者(6,685ポイント)
Date: 2009/02/20(金) 16:16
No:29051
|
|
Title: Re:ポインタ
|
|
for (i = 0; i < 5; i++) {
for (j = 0; j < 5; j++) {
if (*p1 == *p2) {
*p3 = *p1;
p3++;
break;
}
p2++;
}
p1++;
} この部分、非常に惜しいことをしていますね。
つまり、総当りで比べて一致したらstr3に順番に格納したいのでしょうが、ループ毎のポインタ変数の初期化が抜けています。
カウンタ変数を活用して、配列を使う形で書くと、最初はやりやすいのでは。
180ポイント を手に入れた。
|
|
|
|
Name: サッカーモ ..ぴよぴよ(65ポイント)
Date: 2009/02/19(木) 23:19
No:29035
|
|
Title: プログラムが・・
|
|
はじめまして。
私はプログラム超初心者です。
このサイトの手順でやってみようとしたんですが、
どれが正しいプログラムの画面かがわかりません。
プログラムする画面はどう出せばいいんでしょうか?
また、実行の詳しい仕方も教えてください。(ファイル形式、保存の仕方など)
65ポイント を手に入れた。
|
|
|
|
Name: サッカーモ ..ぴよぴよ(135ポイント)
Date: 2009/02/19(木) 23:31
No:29037
|
|
Title: Re:プログラムが・・
|
|
ありがとうございます。
保存はできたのですが、次はステートメントが
ありませんと表示されて、開きません。
ステートメントとは何ですか?
初歩の初歩のことばかり聞いてすいません。
回答お願いします。
70ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(136,054ポイント)
Date: 2009/02/20(金) 00:07
No:29039
|
|
Title: Re:プログラムが・・
|
|
>保存はできたのですが、次はステートメントが
>ありませんと表示されて、開きません。
保存したファイルの名前を教えてください。
そのファイルの中身を見せてください。
どんな操作をしたときに「ステートメントがありません」という
メッセージが出たのか、教えてください。教えてください。
143ポイント を手に入れた。
|
|
|
|
|
Name: cosmo ..かけだし(1,304ポイント)
Date: 2009/02/20(金) 00:19
No:29040
|
|
Title: Re:プログラムが・・
|
|
拡張子が.vbsなので…VBScriptのプログラムですか?
作りたいプログラムごとに拡張子は違うので…、
(C言語ならば拡張子は.c、C++ならば.cpp、C#ならば.cs、Javaならば.java等。)
メモ帳でプログラムを書く時は十分その事を確認しなくてはいけません。
おそらく構文エラーなんでしょうけど…保存したファイルの中身、実行した状況が分からないと、
的確な回答が得られないと思いますよ。
173ポイント を手に入れた。
|
|
|
|
|
Name: サッカーモ ..かけだし(1,012ポイント)
Date: 2009/02/20(金) 00:49
No:29041
|
|
Title: Re:プログラムが・・
|
|
このサイトの「ゲームプログラミングの館」の2の画面を
表示するというところで、
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了
LoadGraphScreen( 0 , 0 , "char.png" , TRUE ) ;
WaitKey() ; // 結果を見るためにキー待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
これを貼り付けるという操作です。
これを保存して、クリックをすると出てきました。
その下にコンパイルエラーというのも出ています。
原因は何なのでしょうか?
2倍のポイントを手に入れた! 786ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(61,347ポイント)
Date: 2009/02/20(金) 00:59
No:29044
|
|
Title: Re:プログラムが・・
|
|
もう一方の投稿でもアドバイスがあったと思いますが、
規約をお読みください。
コードを載せる際にはプレタグを使用してください。
また、環境も明確にすべきです。
DXライブラリを使うにあたっては、本家を参考に、導入をすべて済ませましたか?
ttp://homepage2.nifty.com/natupaji/DxLib/index.html
2倍のポイントを手に入れた! 174ポイント を手に入れた。
|
|
|
|
|
Name: cosmo ..かけだし(1,376ポイント)
Date: 2009/02/20(金) 01:00
No:29045
|
|
Title: Re:プログラムが・・
|
|
C言語のプログラムのようですね…。
そのコンパイルエラーの具体的なメッセージは何ですか?
コンパイルエラーのメッセージに原因を解くヒントがありそうですが。
そのコンパイルエラーメッセージは
"No such files or directry"
じゃありませんか?
それならばDXライブラリの導入が済んでいないことを意味しています。
72ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..プログラマー(27,316ポイント)
Date: 2009/02/20(金) 01:10
No:29046
|
|
Title: Re:プログラムが・・
|
|
まずは開発環境を書きましょうよ。
情報が少なすぎて、的確な答えはえれないと思いますよ。
詳しくは利用規約
を見てください。
>>プログラムする画面はどう出せばいいんでしょうか?
エディタのことでしょうか?
でしたら、メモ帳でもできないことはないです。
拡張子はcosmoさんのおっしゃるように使用するプログラミング言語によって変わります。
>>これを保存して、クリックをすると出てきました。
何をクリックしたんですか?
>>その下にコンパイルエラーというのも出ています。
そのエラーを書いてください。
見たところ、DXライブラリを使っているようなので、
必要なものをダウンロードしましたか?
DXライブラリを使用するための設定はしましたか?
ともかく、情報が少ないので、私にはこれくらいしかお答えできません。
256ポイント を手に入れた。
|
|
|
|
|
Name: サッカーモ ..かけだし(1,082ポイント)
Date: 2009/02/20(金) 03:35
No:29047
|
|
Title: Re:プログラムが・・
|
|
わかりました。
もう一度最初見直そうと思います。
それでわからないことをちゃんと聞きたいと思います。
47ポイント を手に入れた。
|
|
|
|
Name: サッカーモ ..ぴよぴよ(226ポイント)
Date: 2009/02/19(木) 23:44
No:29038
|
|
Title: ステートメントとは?
|
|
プログラムを実行しようとクリックすると、
ステートメントがありませんと表示されて
開きません。
ステートメントについて説明お願いします。
あと、改善方法もよろしくお願いします。
91ポイント を手に入れた。
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(85,623ポイント)
Date: 2009/02/20(金) 00:49
No:29042
|
|
Title: Re:ステートメントとは?
|
|
> ステートメントについて説明お願いします。
コンピュータプログラミングにおいては、コンピュータに何らかの動作をさせるための言語要素です。
具体的な意味はプログラム言語に依存します。
C言語だと仮定すると、ステートメントは文に相当します。
> あと、改善方法もよろしくお願いします。
利用規約を理解できるまで熟読し、それを実践することが改善への近道です。
157ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(148,677ポイント)
Date: 2009/02/19(木) 09:49
No:29010
|
|
Title: Re:ミリ秒
|
|
標準関数だったら、clock関数とか使って実装する(但し、精度は環境依存なので、必ずしもミリ秒単位で計測できるとは限らない)とか、WINAPIならばSleep関数で代用(本来の使用目的とは異なるので代用としました)できるかな?DXライブラリならWaitTimer関数が使えると思います。
23ポイント を手に入れた。
|
|
|
|
|
Name: JT ..入門者(2,555ポイント)
Date: 2009/02/19(木) 10:44
No:29013
|
|
Title: Re:ミリ秒
|
|
C SYSTEMTIME でネットで調べてみたらどうかな 正確ではないけど、、、
34ポイント を手に入れた。
|
|
|
|
|
Name: Haru ..上級者(23,765ポイント)
Date: 2009/02/19(木) 12:58
No:29017
|
|
Title: Re:ミリ秒
|
|
ありがとうございます!
とりあえず今は正確な時間で無くても良いのでバグさんのclock関数を使用する事にしました!
JTさんのSYSTEMTIMEも家に帰ったら調べてみますね!ありがとうございました!
#現在ネットを使える環境では無いので。
80ポイント を手に入れた。
|
|
|
|
Name: ざこ ..上級者(24,557ポイント)
Date: 2009/02/19(木) 12:56
No:29016
|
|
Title: 仮引数
|
|
にするべき値とはどういうものでしょうか。引数がどういったものなのかはわかるのですが、自分でプログラムを何か組んでみたときに何を引数にすればいいのかがまだよくわかりません。要は渡したい値 だと思いますが、概念が抽象的すぎてどういう値を渡さないといけないのか、 がわかりません。教えて下さい。
134ポイント を手に入れた。
|
|
|
|
Name: Kou ..かけだし(1,864ポイント)
Date: 2009/02/19(木) 17:25
No:29022
|
|
Title: Re:仮引数
|
|
私もCやVBなどの勉強を始めた時に、関数(モジュール)の作成で引数をどうするか悩んだ事がありました。
そこで、私の経験からの話になりますが・・・
@ 関数(モジュール)内で全て完結させる。
A @の処理上、他で使用している変数の値が必要ならば、その変数をグローバルな変数として定義する。
B プログラム作成上同じ処理を何回も使用する場合、その処理を関数化する事を検討する。
C Bで関数化した時に、数値を変えるだけで他の部分は共通した処理の場合、その数値を引数にする。
こんな感じで私はステップアップしていきました。但し自分だけが使用する処理で、入力の手間や保守等を
考えなければ、【たかぎ】様の言うとおり、無理に引数を取る必要はないです。
それと補足として、
仮引数 = 受け取り側の関数で要求する処理上必要な値。(又は格納する為の変数)
実引数 = 関数に実際に渡す値(又は変数)
なので(厳密には違いますが考え方として・・・)
> 要は渡したい値だと思いますが、概念が抽象的すぎてどういう値を渡さないといけないのか
↑の場合、仮引数として考えるなら、『渡したい値』ではなく、『受け取りたい値』になります。
長文失礼しました。
303ポイント を手に入れた。
|
|
|
|
Name: たか ..初心者(6,047ポイント)
Date: 2009/02/18(水) 13:16
No:28935
|
|
Title: VC++のヘルプについて
|
|
Visual C++ Express Edition 2008 で ヘルプ(H)→キーワード(I)
の順にクリックして表示できるキーワードウィンドウについて質問があります。
検索する文字列(L)の欄に"fopen"や"printf"と入力しても関数の説明が出てきません。
ローカルヘルプからしか検索できないみたいなのです。
ローカルヘルプに関数の説明を追加する方法、オンラインヘルプの中を検索できるようにできる方法
はあるのでしょうか?
以前は出来ていたような気がしたので質問してみました。
よろしくお願いします。
2倍のポイントを手に入れた! 282ポイント を手に入れた。
|
|
|
|
Name: YuO ..プログラマー(29,612ポイント)
Date: 2009/02/18(水) 13:46
No:28939
|
|
Title: Re:VC++のヘルプについて
|
|
Express Editionsを入れていないので参考程度ですが。
> 検索する文字列(L)の欄に"fopen"や"printf"と入力しても関数の説明が出てきません。
フィルタ条件が設定されていませんか。
フィルタ条件が.NET Frameworkになっていれば,当然fopenは出てきません。
> オンラインヘルプの中を検索できるようにできる方法
Document Explorerの[ツール] - [オプション]メニューの,[ヘルプ] - [オンライン]を確認してください。
「ヘルプコンテンツを読み込むとき」欄が「オンラインではなくローカルのみで実行」になっていたり,
「検索するプロバイダ」欄に「MSDNオンライン」が抜けていたりしませんか。
あとは,検索条件の言語やテクノロジ,コンテンツの種類が間違っているとか。
35ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..熟練のプログラマー(51,483ポイント)
Date: 2009/02/18(水) 13:59
No:28940
|
|
Title: Re:VC++のヘルプについて
|
|
> 検索する文字列(L)の欄に"fopen"や"printf"と入力しても関数の説明が出てきません。
私もできません。
フィルタなしにしてもダメですから無料版はたぶんダメなんじゃないでしょうか。
C言語の関数などは添付画像の矢印欄に入力することで検索できますがそれではだめなのでしょうか?
54ポイント を落としてしまった。
|
|
|
|
|
Name: たか ..初心者(6,273ポイント)
Date: 2009/02/18(水) 14:14
No:28944
|
|
Title: Re:VC++のヘルプについて
|
|
Yuoさん
フィルタ条件は設定していません。
検索の設定は「最初にオンライン、次にローカルで実行」になっています。
「検索するプロバイダ」欄はすべてにチェックが入っています。
ヘルプの設定はいじっていません。
Mistさん
だめではないのですが、その方が使いやすいので質問しました。
同じ症状の人がいてすこしホッとしました。
Express Edition ではやはりだめなのでしょうか?
2005では出来たような記憶があったのですが・・・。
226ポイント を手に入れた。
|
|
|
|
Name: GPGA ..熟練のプログラマー(57,943ポイント)
Date: 2009/02/18(水) 21:01
No:28987
|
|
Title: POD型のみをメンバに持つクラスのコンストラクタの挙動について
|
|
お世話になります。
POD型のみをもつclassまたは、structでコンストラクタ
デストラクタ、仮想関数を定義していない場合
メンバが0クリアされるという仕様がC++にはあるのでしょうか?
例えば
int* a = new int; // 0クリアされない
int* a = new int(); // 0クリアされる
というのは、仕様として存在するのはわかりますが
class Hoge {
private :
int a;
};
Hoge* hoge = new Hoge();
とした際に、aが0クリアされるのは仕様であるか、否かということです。
コスト的な面を考えると、これが仕様であることはあり得ないと思うのですが
VS2008では、HogeをPOD型とみなし、勝手に0クリアをしてしまうようです。
なお、CordWarriorでは0クリアされることはありませんでした。
以上、宜しくお願い致します。
150ポイント を手に入れた。
|
|
|
|
Name: Justy ..伝説なるハッカー(318,184ポイント)
Date: 2009/02/18(水) 21:58
No:28988
|
|
Title: Re:POD型のみをメンバに持つクラスのコンストラクタの挙動について
|
|
ゼロ初期化される、でいいのではないでしょうか。
一応いつもの規格書(JIS X3014)を見てみると 12-6でクラス型のオブジェクトに対する
()による初期化の場合「値初期化」が行われるとあり、
「値初期化」は 8-5-5で「コンストラクタがない場合各非静的メンバを
値初期化する」とあり、そのメンバもコンストラクタもなく配列でもなければ
ゼロ初期化されるとあります。
と、解釈しましたが、あってますかね?
ところで、(今はどうかわかりませんが)Code Warriorって昔使った印象だと
C++への準拠度が低かったような気がします。
上の解釈が正しければ、そのあたりが影響してるのかもしれません。
292ポイント を手に入れた。
|
|
|
|
|
Name: GPGA ..熟練のプログラマー(58,019ポイント)
Date: 2009/02/18(水) 22:42
No:28990
|
|
Title: Re:POD型のみをメンバに持つクラスのコンストラクタの挙動について
|
|
なるほど、ありがとうございます。
でもそうすると、VCでデストラクタを定義した場合、メンバが初期化されないのは
規格に準拠していないってことになるんですかね?
76ポイント を手に入れた。
|
|
|
|
|
Name: YuO ..プログラマー(30,102ポイント)
Date: 2009/02/19(木) 01:05
No:28994
|
|
Title: Re:POD型のみをメンバに持つクラスのコンストラクタの挙動について
|
|
PODの定義より,ユーザー定義のデストラクタがある場合はPOD型にはなりません。
# ISO/IEC 14882:1998およびINCITS/ISO/IEC 14882:2003 9 Classes / Paragraph. 4
で,ここからがややこしいのですが,
・ISO/IEC 14882:1998の記述
12.6 Initialization / Paragraph. 1
> When no initializer is specified for an object of (possibly cvqualified) class type (or array thereof), or the initializer has the form (), the object is initialized as specified in 8.5.
> [Note: if the class is a nonPOD, it is default-initialized.]
8.5 Initializers / Paragraph. 7
> An object whose initializer is an empty set of parentheses, i.e., (), shall be default-initialized.
・INCITS/ISO/IEC 14882:2003の記述
12.6 Initialization / Paragraph. 1
> When no initializer is specified for an object of (possibly cv-qualified) class type (or array thereof), or the initializer has the form (), the object is initialized as specified in 8.5.
> The object is default-initialized if there is no initializer, or value-initialized if the initializer is ().
8.5 Initializers / Paragraph. 7
> An object whose initializer is an empty set of parentheses, i.e., (), shall be value-initialized.
この通り,2003年の改正でユーザー定義デストラクタを定義した場合における()初期化の扱いが変化しています。
# 1998年版にはそもそもvalue-initializeという考えがないのですが。
なので,発売時期から考えて,
・Visual C++.NETおよびVisual C++.NET 2003
標準規格は1998年版なので
「デストラクタがある場合はゼロ初期化を行う必要はない (暗黙のデフォルトコンストラクタを呼び出すから)」
・Visual C++ 2005, 同2008
標準規格は2003年版なので
「デストラクタがあってもゼロ初期化を行う必要がある」
となります。
このため,2005/2008において,
・ユーザー定義コンストラクタがない
・ユーザー定義デストラクタがある
・()付きの初期化を行った
という条件下でint型の非staticメンバの値がゼロにならないのであれば規格に準拠していないと言えます。
# って,/Za付きでもだめですが…… (2010含む)。
490ポイント を手に入れた。
|
|
|
|
|
Name: GPGA ..熟練のプログラマー(58,070ポイント)
Date: 2009/02/19(木) 05:50
No:29007
|
|
Title: Re:POD型のみをメンバに持つクラスのコンストラクタの挙動について
|
|
>YuOさん
なるほど、ややこしい仕様ですね。
こういう細かいところって、ネット上のあがってこないので
すごく勉強になりました。ありがとうございます。
51ポイント を手に入れた。
|
|
|
|
Name: nel ..ぴよぴよ(33ポイント)
Date: 2009/02/19(木) 04:30
No:29005
|
|
Title: 初歩の初歩からつまずきました
|
|
初心者です。DXライブラリの設定のディレクトリリストにDXライブラリのパッケージ内に入っている、『プロジェクトに追加すべきファイル_VC用』フォルダのパスを追加します。というのはどのようにすればいいのでしょうか?
33ポイント を手に入れた。
|
|
|
|
Name: cosmo ..かけだし(1,131ポイント)
Date: 2009/02/19(木) 05:23
No:29006
|
|
Title: Re:初歩の初歩からつまずきました
|
|
お使いのコンパイラは何ですか?
一応VC++を使っているものとして回答しますが…
ツールバーのツール(T)→オプション(O)→プロジェクトおよびソリューション→VC++ディレクトリと進み、
ディレクトリを表示するプロジェクト(S):の
インクルードファイルにDxLib_VC\プロジェクトに追加すべきファイル_VC用を保存したディレクトリ、
ディレクトリを表示するプロジェクト(S):の
ライブラリファイルにDxLib_VC\プロジェクトに追加すべきファイル_VC用を保存したディレクトリ、
を追加します。
追加の仕方:
ディレクトリを表示するプロジェクト(S):の下側に五個ほどポップアップボタンがあります。
そのうちフォルダが描かれたポップアップボタンにマウスカーソルを合わせると「新しい行」というコメントが表示されます。
そのアイコンをクリックすると空白の行が現れます。
そこにDxLib_VC\プロジェクトに追加すべきファイル_VC用を保存したディレクトリ(ファイルのコンピューター上の所在地の事です)をコピペすれば良いでしょう。
これをインクロードファイルとライブラリファイルに関して行えば良いです。
この際、プラットフォーム(P):が Win32 となっていることを確認してくださいね。
480ポイント を手に入れた。
|
|
|
|
Name: ナガイ ..ぴよぴよ(36ポイント)
Date: 2009/02/19(木) 03:39
No:29001
|
|
Title: 何と言ったらいいのか・・・
|
|
このサイトを見ながらCプログラミングを勉強させてもらうことにしました。
始めたばかりで申し訳ないのですが、質問があります。
最初の方の透過処理までは問題なく出来たのですが、
次の図形描画処理のところで問題がありまして・・・。
何かと言いますと、
図形処理のプログラムを書いてF5キーを押すと、
図形描画がでずに、一つ前の透過処理でやったものが出るんです。
説明下手で申し訳ないんですが、伝わりますかね・・・。
36ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(992,488ポイント)
Date: 2009/02/19(木) 03:48
No:29003
|
|
Title: Re:何と言ったらいいのか・・・
|
|
使っているコンパイラはVC++ですか?
書いているファイルがソリューションエクスプローラーのファイルじゃないってことはないですか?
「ソリューションエクスプローラー」を表示して、そこにあるソースファイルをダブルクリックして出てくるファイルに書き込んでコンパイルしてみて下さい。
108ポイント を手に入れた。
|
|
|
|
Name: N ..ぴよぴよ(48ポイント)
Date: 2009/02/12(木) 19:22
No:28715
|
|
Title: 龍神録「プロジェクトをまとめてダウンロード」
|
|
ダウンロードして解凍したところ、10章〜15章しか入ってませんでした。
それで何回かダウンロードしてみると10〜16章、10〜17章と現れるフォルダがまちまちです。
「右クリック→対象をファイルに保存」も試してみましたが同じ結果でした。
一応報告しておきます。
44ポイント を手に入れた。
|
|
|
|
Name: Baaa ..ぴよぴよ(198ポイント)
Date: 2009/02/15(日) 23:48
No:28843
|
|
Title: Re:龍神録「プロジェクトをまとめてダウンロード」
|
|
>ダウンロードして解凍したところ、10章〜15章しか入ってませんでした。
同じ現象が発生したので、一応。
「右クリック」→「対象を保存」
ではなく
「左クリック」
→このファイルを開くか、または保存しますか?
のダイアログで「開く」を選択
→ 関連付けてる解凍ソフトが起動されて「解凍」
とやったらうまく行きました。
・・・が、今やったら同じ現象再発。 何でだろ。。。
何らかの参考になれば。。。
198ポイント を手に入れた。
|
|
|
|
|
Name: Kou ..ぴよぴよ(307ポイント)
Date: 2009/02/17(火) 21:40
No:28896
|
|
Title: Re:龍神録「プロジェクトをまとめてダウンロード」
|
|
私も試したところ、同じ症状でした。(毎回フォルダに入っている章の数が違う)
そこで解凍後のログを追ってみたところ、ファイルの破損が考えられます。
もし可能ならば、もう一度圧縮しなおして、そのファイルをアップしなおしてみては如何でしょうか?
CRC不一致のエラーがかなりの確立で起こってました。
124ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(991,832ポイント)
Date: 2009/02/18(水) 05:20
No:28921
|
|
Title: Re:龍神録「プロジェクトをまとめてダウンロード」
|
|
ご報告ありがとうございます。
う〜ん、そうですかぁ。
ただファイルはよくアップしなおしてるんで、毎回圧縮の不具合起こしているとは少し考えにくいんですよねぇ;
exeファイルも正常にDL出来ないと言われてるので、私が使ってる圧縮ソフトが悪いわけでもなさそうですし・・。
ちなみに、色んな環境でDLしてみましたが、こちらでは問題ありませんでした。
不具合が起きた方はその環境を詳細に教えていただけると幸いですm(_ _;)m
203ポイント を手に入れた。
|
|
|
|
|
Name: Kou ..ぴよぴよ(427ポイント)
Date: 2009/02/18(水) 13:36
No:28937
|
|
Title: Re:龍神録「プロジェクトをまとめてダウンロード」
|
|
私が試した環境は、
・WindowsXP
・IE6
・LhaPlus
です。
あと、DLは、リンクからではなく、URL直打ちでも試してみましたが同じ結果でした。
それと関係無いとは思いますが、HTMLのソースを見たら、DLファイルのパスが相対参照してあるようでしたけど、もし管理人様の方で可能ならば、<A>タグのパスをURL直接参照して試して頂けますか?
120ポイント を手に入れた。
|
|
|
|
|
Name: Kou ..かけだし(1,561ポイント)
Date: 2009/02/18(水) 18:03
No:28976
|
|
Title: Re:龍神録「プロジェクトをまとめてダウンロード」
|
|
管理人様に追加報告いたします。
実は私は自宅にネット環境が無い為、このサイトは会社で見ています(汗)
それで自宅で昨日このサイトを見る為に、丸ごとHPダウンロードソフト(ComGetter63)で落としました。
その中にある問題のファイルを解凍したところ、すべてのファイルが入っていました。(Lhaplusのエラーもなしです)
余計に原因がわからなくなるかも知れませんが、一応ご報告しておきます。
151ポイント を手に入れた。
|
|
|
|
|
Name: ouh ..入門者(2,519ポイント)
Date: 2009/02/18(水) 18:36
No:28978
|
|
Title: Re:龍神録「プロジェクトをまとめてダウンロード」
|
|
このスレを読んで私もダウンロードしてみました。
私のとこも何度やってもちゃんとダウンロードできないです。
環境
OS:VistaとXP(同一ネットワーク内、つまり社内の2台のPCです)
ブラウザ:Vista・XPともにSleipnir
ダウンロードソフトとかは使ってないです。
現象としては何度やっても1秒でダウンロードが完了します。
当然1秒で落とせた分のサイズしかなく、これを解凍しても
落としきれていないファイルなのでエラーになります。
サイズは1秒で落とせた分なので毎回違っていて、ダウンロー
ド前に確認ダイアログで表示されるサイズよりずっと小さいサ
イズです。
ダウンロードできるものを片っ端からやってみたわけではない
ですが、クイックソート解説アプリも同じようになりました。
これだけではなんの役にも立たないとは思いますが一応ご報
告。
233ポイント を手に入れた。
|
|
|
|
|
Name: cosmo ..ぴよぴよ(651ポイント)
Date: 2009/02/19(木) 01:43
No:28997
|
|
Title: Re:龍神録「プロジェクトをまとめてダウンロード」
|
|
私も1秒分しかダウンロード出来ない現象に遭ったことがあります。
私の環境は
・Windows XP
・IE7
です。
何回か試すとダウンロードがうまくいくのですが…。
大抵2回目で上手くダウンロード出来ます。
83ポイント を落としてしまった。
|
|
|
|
|
Name: Baaa ..ぴよぴよ(552ポイント)
Date: 2009/02/19(木) 01:57
No:28998
|
|
Title: Re:龍神録「プロジェクトをまとめてダウンロード」
|
|
>不具合が起きた方はその環境を
返事が遅れましたが、私も報告します。
・OS : WindowsXP
・ブラウザ : IE6.0, NN7.1 (両方試しました)
・接続 : PPPoE接続 + 無線LAN
・セキュリティ : ウィルスバスター
・解凍ソフト : Explzh, lhaz(こっちだと「書庫が壊れてる」と言われる)
lhmelt(コレだと、そもそも書庫と認識してくれない)
なお、私の場合は自宅で、特にProxyを経たりはしていません。
DL支援ツールなども使用していません。
DLサイズがうまくいったときと全然違うので、解凍ソフトの問題ではないかと思います。
PS
今やったら、「左クリック→開く」でDL成功しました。
また、NNで「右クリック→保存」も成功しました。
タイミングによってできたりできなかったり・・・
単純にサーバ負荷だったりですかねぇ。
一応、皆さんもう試されたとは思いますが、
「キャッシュをDLしてる可能性があるので、キャッシュをクリアしろ」
見たいなトラブルシューティングを見かけました。
試してない方はお試しあれ
354ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(317,935ポイント)
Date: 2009/02/19(木) 03:29
No:29000
|
|
Title: Re:龍神録「プロジェクトをまとめてダウンロード」
|
|
別の PC(XP)で IE7を入れて試してみました。
なるほど、たしかにDLできないときがありますね。
で、調べてみました。
DLに失敗したデータをみると、途中までしか内のでサイズは異なるものの、
データ的には正常なものと一致していて、異常なデータが混ざっていることはないようです。
そこでパケットキャプチャをしてみたところ、通常サーバーとのやりとりの中で
ウインドウサイズ(バッファサイズ)を送ってるのですが
そのサイズが正常にDLできる時は最初の数回はともかく、以降はずっと 65535を維持しています。
しかし途中で止まってしまうときは回を重ねるたびに減っていき、
Windows Updateでウインドウサイズが復活、その後やはり減っていき Zero Windowを送信、
4秒後再度 Windows Updateで復活、その後ウインドウサイズが減ることなく 0.2秒ほど通信していますが、
最終的にクライアント側から FINを送って終了しているようです。
んー、どうやったら回避できるんでしょう???
249ポイント を落としてしまった。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(992,380ポイント)
Date: 2009/02/19(木) 03:46
No:29002
|
|
Title: Re:龍神録「プロジェクトをまとめてダウンロード」
|
|
皆様ご報告ありがとうございます。
どうも、今までの報告を見ていると、IE6、IE7、スレイプニル、ネットスケイプで問題が生じるようです。
私がIE7だと思っていた家のブラウザはよく見たらIE8でした^^;
ダウンロード支援ソフトを使うとIE7でも正常にDL出来ましたし、どうもブラウザの問題のような気がします・・。
しかしIE6、IE7、スレイプニルはコアが共通していると思うのですが、
ネットスケイプで起きるのは何故なんでしょうね・・。
>>Justyさん
そこでパケットを解析しようとなさる発想がすごいです(^^;
そうですか〜、何となく原因はわかりましたが、だからどう解決したらいいかよくわかりません^^;
「DL出来ない人はFireFox、GoogleChrome、またはDL支援ソフトなどでDLして下さい」と注意書きかくしかないんでしょうか・・。
前のURL l.huu.ccの時はそんなことなかったんですけどねぇ;
ちなみにドメインは変えましたがレンタルサーバーの会社は変えてないです。
tok2です。
サーバー側がおかしいんでしょうか・・?
445ポイント を手に入れた。
|
|
|
|
Name: 玲 ..ぴよぴよ(789ポイント)
Date: 2009/02/17(火) 21:49
No:28897
|
|
Title: 背景を回転させる方法
|
|
背景を回転させる方法が分かりません。
誰か教えて下さい><
追伸:なんか誰かにこの投稿を消されてたのでもう一度お願いします。
2倍のポイントを手に入れた! 16ポイント を手に入れた。
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(59,834ポイント)
Date: 2009/02/17(火) 22:01
No:28899
|
|
Title: Re:背景を回転させる方法
|
|
DXライブラリを使うっという条件ならば
DrawRotaGraph
ttp://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_graph.html#R3N9
または
DrawRotaGraph2
ttp://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_graph.html#R3N19
があります。
90ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(991,750ポイント)
Date: 2009/02/18(水) 04:54
No:28918
|
|
Title: Re:背景を回転させる方法
|
|
メンテナンス情報とか、よく見ておけばよかったです、すみません;
21styleさんの掲示板ずっと使い続けてますが、こんな長いメンテナンス・・というかメンテナンス自体ほとんど無いので、気にかけていませんでしたm(_ _;)m
回転の件ですが、kazuoniさんの回答で解決したでしょうか?
ゲームプログラミングの館などでも似たような事は色々紹介しているので(もっと複雑な回転も)、よければそちらもご覧下さい。
195ポイント を手に入れた。
|
|
|
|
|
Name: 玲 ..ぴよぴよ(813ポイント)
Date: 2009/02/19(木) 02:46
No:28999
|
|
Title: Re:背景を回転させる方法
|
|
回転の件おかげ様で解決できました!色々とありがとうございました!
24ポイント を手に入れた。
|
|
|
|
Name: american-yuu ..ぴよぴよ(396ポイント)
Date: 2009/02/18(水) 23:53
No:28991
|
|
Title: 分割画像について質問したいのですが・・・
|
|
はじめまして。プログラミングゲーム作成初心者です。
「プログラミングの館」で説明されている通りの環境で自分が用意した別のキャラクターの画像を作って、キャラを4方向に進むようにプログラミングをしようと思っています。
掲載されているものはちゃんとデバックがされたのですが、自分が用意した画像はきれいに表示されません。
(画像がばらばらになってたり、表示されなかったり・・・)
<LoadDivGraph( "char.png" , 16 , 4 , 4 , 32 , 32 , image )>
この式についての質問なのですが、サイズと縦横の画像数が違うとき、引数はどのように変えればよいのでしょうか??
引数3,4のサイズは、最高32にしなくてはいけないのですか??
その点がよくわかりません。
・サイズ<128*192>、縦4つ横4つに分割される画像<.png>
・サイズ<72*128>、縦4つ横3つに分割される画像<.png>
このような二つの画像を表示したいと思っています。
396ポイント を手に入れた。
|
|
|
|
Name: american-yuu ..ぴよぴよ(551ポイント)
Date: 2009/02/18(水) 23:59
No:28992
|
|
Title: Re:分割画像について質問したいのですが・・・
|
|
image[32]
<LoadDivGraph( "char.png" , 32 , 4 , 8 , 32 , 64 , image )>
すみません。情報が足りなかったと思いましたので、付け足ささせていただきました。
4方向の記事に掲載されているプログラムを上記のように変更してデバックしてみました。
画像はばらばらになってしまいました。
155ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..プログラマー(27,060ポイント)
Date: 2009/02/19(木) 00:37
No:28993
|
|
Title: Re:分割画像について質問したいのですが・・・
|
|
引数のことならちゃんとゲームプログラミングの館に書かれていましたよ。
もう一度読んでみてください。
ttp://dixq.net/g/#17
<LoadDivGraph( "char.png" , 16 , 4 , 4 , 32 , 32 , image )>
>>サイズ<128*192>、縦4つ横4つに分割される画像<.png>
この場合は
画像の分割総数は4X4=16
XNumとYNum(それぞれの分割個数)は4
XSizeは128/4=32
YSizeは192/4=48
よって、ファイル名と配列へのポインタも同じだと仮定すると、
LoadDivGraph( "char.png" , 16 , 4 , 4 , 32 , 48 , image )
となります。
同じようにして
>>・サイズ<72*128>、縦4つ横3つに分割される画像<.png>
画像の分割総数は4X3=12
XNumとYNum(それぞれの分割個数)は3と4
XSizeは72/3=24
YSizeは192/4=48
よって
LoadDivGraph( "char.png" , 12 , 3 , 4 , 24 , 48 , image )
となります。
294ポイント を手に入れた。
|
|
|
|
|
Name: americanーyuu ..ぴよぴよ(51ポイント)
Date: 2009/02/19(木) 01:35
No:28996
|
|
Title: Re:分割画像について質問したいのですが・・・
|
|
引数の件についてはすみませんでした。サイズは割れば良いんですね。
よく分かりました。夜中に失礼いたしました。
ありがとうございました。
51ポイント を手に入れた。
|
|
|
|
Name: ujm ..ぴよぴよ(186ポイント)
Date: 2009/02/16(月) 08:53
No:28851
|
|
Title: 画像の表示について
|
|
こんにちは今このHPを見ながら
プログラミングの勉強をしているのですが
分からないことがあるので書きます。
プログラムで画像の表示がうまくできません
おそらくプログラムの間違えでは無く
画像をおいている場所が違うなどの問題だと
思いますが自分にはどうしていいのか
分からなかったので書きました。
DXライブラリやVisualC++を使うのは
初めてで初めの設定などもちゃんと出来ているか
心配なところです。
本当に基本的な質問だとは思いますが
返答お待ちしております。
186ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(991,017ポイント)
Date: 2009/02/16(月) 12:57
No:28859
|
|
Title: Re:画像の表示について
|
|
表示されない方は「こちら」で解決して下さいとかいてあるプログラムは試されました?
また、環境によって正常に表示されないこともあるようですので、
一度13章のプログラムを実行してみて下さい。
それまでのプログラムがうまく動かなかったとしても、13章のようなプログラムしかどのみち書く事は無いと思うので問題ないです。
123ポイント を手に入れた。
|
|
|
|
|
Name: ujm ..ぴよぴよ(316ポイント)
Date: 2009/02/18(水) 04:43
No:28916
|
|
Title: Re:画像の表示について
|
|
はい、そのプログラムはためしました。
すみません説明不足でした、一応入門編とゲーム基本編では
勉強をさせていただきました。
そこで「本格的にシューティングを作成したい方はこちら」
と書いてある所から龍神録プログラミングの館に入って
素材のダウンロードまではやったのですがその素材の
使い方(?)が分からないのです。
どのようにしてDXライブラリとVisualC++とを
関連付けるのでしょうか?
130ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(991,555ポイント)
Date: 2009/02/18(水) 04:50
No:28917
|
|
Title: Re:画像の表示について
|
|
関連付ける必要は無く、ただインクルードすればいいだけです。
<>で呼び出せるように設定してもいいですが。
#include "DxLib.h"
これは何の為に書くかご存知でしょうか?
プロジェクトと同じフォルダにあるDXライブラリのヘッダファイルをインクルードするってことです。
まぁいってみればDXライブラリを使う為の説明書を読み込むとでもいいましょうか。
説明書を取り込めば、使い方がわかり、DXライブラリが使えるようになるわけです。
・・かなりやっつけな説明ですが。
自分でプロジェクトは作ったことありますか?
作り方はDXライブラリの本家HPに詳しく書いてありますし、
既に作ってあるプロジェクトが欲しければ館で配布していますし、
そのどちらかで用意していただけたらと思いますがどうでしょう?
204ポイント を手に入れた。
|
|
|
|
|
Name: cosmo ..ぴよぴよ(734ポイント)
Date: 2009/02/19(木) 01:10
No:28995
|
|
Title: Re:画像の表示について
|
|
因みに…ですが、インクルードしたファイルはそのソースファイル上にコピー&ペーストされてコンパイルされます。
インクルードできるファイルは同じフォルダ内にあるヘッダーファイルとテキストファイルです。
ソースファイルはインクルード出来ません。
(テキストファイルをインクルードする人はなかなかいないとは思いますが…。)
プログラムで呼び出すことになっているファイルが指定の場所にあれば、画像は表示できるはずです。
コンパイラはVisual C++ 2008 Express Editon を使っているようでしたら、コンパイラの設定は特に設定は必要ないと思います。
但し、DXライブラリを使うにあたっては少し設定が必要です。
DXライブラリをインクルードし、ビルドした時、
"No such flies or directry"
というメッセージが出た時はこのサイト上に解説があると思いますが…、
ツール(T)→オプション(O)→プロジェクトおよびソリューション→VC++ディレクトリと進み、
インクルードファイルにDxLib_VC\プロジェクトに追加すべきファイル_VC用を保存したディレクトリ、
ライブラリファイルにDxLib_VC\プロジェクトに追加すべきファイル_VC用を保存したディレクトリ、
が追加されていることを確認してください。
追加されていなければ追加してください。
これで画像は表示出来るはずです。
469ポイント を手に入れた。
|
|
|
|
Name: 馬鹿太郎 ..ぴよぴよ(529ポイント)
Date: 2009/02/17(火) 21:27
No:28895
|
|
Title: 無題
|
|
このプログラムは文字列strの中に文字の個数を調べるものですが、
・ch[0]をstr_chnumに渡すとき、どうしてint型なのですか?ch[0]は文字なのですから、char型ではない
のですか?int型は文字も取り扱えるのですか?
・constは静域期間を持つって、書いてありましたが、ここではどうしてconstが使われているのですか?
よろしければ、教えてください。
#include <stdio.h>
int str_chnum(const char str[], int c);
int main(void)
{
char str[256]:
char ch[10];
printf("文字列を入力してください:");
scanf("%s", str);
printf("検索する文字を入力してください:");
scanf("%s", ch);
printf("その文字は%d個含まれています。\n", str_chnum(str, ch[0]));
return 0;
}
int str_chnum(const char str[], int c)
{
int i;
int count = 0;
for ( i = 0; str[i] != '\0'; i++) {
if (str[i] == c) {
count++;
}
}
return (count);
}
281ポイント を手に入れた。
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(59,744ポイント)
Date: 2009/02/17(火) 21:55
No:28898
|
|
Title: Re:無題
|
|
>h[0]をstr_chnumに渡すとき、どうしてint型なのですか?ch[0]は文字なのですから、char型ではない
のですか?int型は文字も取り扱えるのですか?
先ほどもいいましたが、JISコード採用のためです。
str[3]="ABC"
は
str[3]={'A','B','C'}
ともあらわすことができます。
'A'はint型です。
>constは静域期間を持つって、書いてありましたが、ここではどうしてconstが使われているのですか?
strはアドレスを渡すことになります。
もしかしたら呼び出した関数でstrの内容が書き換えられてしまうかも知れません。
これを防ぐためにconstをつけています。
97ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(135,515ポイント)
Date: 2009/02/17(火) 22:11
No:28901
|
|
Title: Re:無題
|
|
>int型は文字も取り扱えるのですか?
char型を「文字型」と考えるよりは、「扱える範囲が狭い整数型」と
考える方がよいです。
その、狭い範囲の整数の中に、数字や英字や記号などのコード番号を
含んでいます。
int型はchar型よりも広い範囲の整数を扱えます。
つまり、int型はchar型を完全に包含していて、
int型で扱える範囲の中に数字や英字や記号などのコード番号を含む、
というわけです。
# JISコードだからどうこう、という話ではないと思う。
234ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(60,037ポイント)
Date: 2009/02/17(火) 22:21
No:28902
|
|
Title: Re:無題
|
|
失礼しました。。
昔TAさんがこんな感じで言っていたので、
誤認してました。。
あくまでJISコードのように「連続している」
っという意味だったのかも知れません。。
大変失礼しました。
訂正していただき、ありがとうございました!
(間違ったアドバイスにならなくてよかったです・・・。)
92ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(84,680ポイント)
Date: 2009/02/17(火) 22:24
No:28903
|
|
Title: Re:無題
|
|
> ・ch[0]をstr_chnumに渡すとき、どうしてint型なのですか?
それはプログラムを書いた本人に聞いてください。
この場合には、int型である必然性はありませんし、int型にしたことによる弊害も発生しています。
(実害はないと思いますが)
> ch[0]は文字なのですから、char型ではないのですか?
そうです。
> int型は文字も取り扱えるのですか?
文字も取り扱えます。
> ・constは静域期間を持つって、書いてありましたが、
どこにそんなことが書いてあったのか知りませんが、明らかなガセ情報です。
2倍のポイントを手に入れた! 186ポイント を手に入れた。
|
|
|
|
|
Name: 馬鹿太郎 ..ぴよぴよ(609ポイント)
Date: 2009/02/18(水) 14:00
No:28941
|
|
Title: Re:無題
|
|
どうして、int型は文字も取り扱えるのですか?
なんだか、頭が混乱してきたようです。
int型→整数
char型→文字
を処理するものと思っていました。
詳しく教えていただけないでしょうか
80ポイント を手に入れた。
|
|
|
|
|
Name: たいちう ..上級者(24,273ポイント)
Date: 2009/02/18(水) 14:13
No:28943
|
|
Title: Re:無題
|
|
> 詳しく教えていただけないでしょうか
boxさんの回答が詳しいと思うけど。
どこがわかりません?
19ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..プログラマー(25,713ポイント)
Date: 2009/02/18(水) 14:16
No:28946
|
|
Title: Re:無題
|
|
int型→整数
char型→文字
名前の由来はそうだと思われます
integerとcharacterからつけられたのでしょう
でも内容はどちらもただの整数です
charは1バイトの整数でintは多くの32ビットコンパイラでは4バイトの整数と扱える数値の範囲が違うだけです。
文字というのは人間が適当な数値を文字として扱うと決めただけなのでコンピュータにとっては文字も整数も区別してません。
154ポイント を手に入れた。
|
|
|
|
|
Name: Kou ..ぴよぴよ(664ポイント)
Date: 2009/02/18(水) 15:28
No:28951
|
|
Title: Re:無題
|
|
toyo様と同じ様な内容となりますが、
C言語に限らず、プログラム言語はすべて数字(数値)で処理します。
「A」という文字もコンパイラから見れば、「65」という数値でしかありません。
その数値を対応した関数なりのプログラムが、65→「A」という文字として画面に表示しているに過ぎないんです。
ですから、
chr型=文字
int型=数値
ではなく、どちらも同じ数値なんです。ただ扱える範囲が違うだけです。
その数値をどう処理するかは、プログラム次第って事になります。
※「A」の文字コード、もしかしたら64かもしれません・・・間違っていたらすみません。
179ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(85,171ポイント)
Date: 2009/02/18(水) 15:38
No:28954
|
|
Title: Re:無題
|
|
> 詳しく教えていただけないでしょうか
根本的なことから説明すると...
一般的な意味での「文字」というのは、言語的な意味を表す記号なり、符号なりのことです。
これは、必ずしも視覚や触覚で知覚できる(形状によって識字できる)ものばかりではありません。
コンピュータで扱う文字は単なる符号であり、表示装置に出力する場合には、その符号を何らかのフォントに置換するわけです。
これを踏まえた上で...
文字たる符号はコンピュータでは数値です。もっと具体的には整数値です。
そして、整数を格納できる型の表現範囲および精度が、文字たる符号を表現するのに十分であれば、どんな型でもよいのです。
極端な話、double型で文字たる符号を表現してもよいのです。ただし、そんな効率の悪いことをする人はいませんから、ライブラリのサポートを受けることは普通できません。必要なら、自分でライブラリを実装する必要があります。
ここで、char型というのは、表現範囲が少なくとも-127〜+127または0〜255のいずれかである整数型です。
それに対して、基本実行文字集合(乱暴にいえば、半角の英数字記号だと思ってよいでしょう)は、char型で表現できること、そして正の値を持つことが規格上保証されています。
また、int型の表現範囲は少なくとも-32767〜+32767ですので、普通はchar型の全表現範囲を包含します。
「普通は」と書いたのは、もし、char型の表現範囲が0〜65535でint型の表現範囲が-32768〜+32767となるような処理系では、そうならないからです。
このことから、「普通は」、基本実行文字集合であれば、char型でもint型でも表現することができます。
ただし、漢字や(半角であっても)カナ文字などの拡張実行文字集合はこの限りではありません。
468ポイント を手に入れた。
|
|
|
|
|
Name: non ..プログラマー(36,517ポイント)
Date: 2009/02/18(水) 15:51
No:28959
|
|
Title: Re:無題
|
|
>ここで、char型というのは、表現範囲が少なくとも-127〜+127または0〜255のいずれかである整数型です。
-128〜+127ではないのですか?
2倍のポイントを手に入れた! 130ポイント を手に入れた。
|
|
|
|
|
Name: Kou ..かけだし(1,004ポイント)
Date: 2009/02/18(水) 16:02
No:28960
|
|
Title: Re:無題
|
|
普通にintといえば
符号付(+、-)ですが、符号なしで宣言すれば、0〜255までの範囲を使用できます。
34ポイント を手に入れた。
|
|
|
|
|
Name: non ..プログラマー(36,605ポイント)
Date: 2009/02/18(水) 16:08
No:28962
|
|
Title: Re:無題
|
|
Kouさんへ
私に対するRESならば、私がいいたいのは、負数を2の補数で表現するのか、1の補数で表現するのかという
ことです。
53ポイント を手に入れた。
|
|
|
|
|
Name: Kou ..かけだし(1,089ポイント)
Date: 2009/02/18(水) 16:14
No:28966
|
|
Title: Re:無題
|
|
non様、すみませんでした。
Nameの所を見ていなかったので、質問者様がchr型の有効範囲について質問されたのだと勘違いしていました。
失礼の段お詫びいたします。
85ポイント を手に入れた。
|
|
|
|
|
Name: GPGA ..熟練のプログラマー(57,738ポイント)
Date: 2009/02/18(水) 16:27
No:28968
|
|
Title: Re:無題
|
|
>-128〜+127ではないのですか?
昔、Cマガジンの問題集の中に同じようなものがありました。
Cの規格レベルでは、char型は少なくとも-127〜+127の値が保障されています。(つまり1の補数)
1の補数にするか2の補数にするかは、実装レベルのお話になります。
74ポイント を手に入れた。
|
|
|
|
|
Name: non ..プログラマー(36,800ポイント)
Date: 2009/02/18(水) 18:02
No:28975
|
|
Title: Re:無題
|
|
> 1の補数にするか2の補数にするかは、実装レベルのお話になります。
実装レベルってのが、よくわからないのですが。
コンパイラによるのか?OSによるのか?CPUによるのか?
昔、汎用機で1の補数になってたマシンはみたことがあるのですが、DOSマシンで
1の補数や、絶対値で表しているコンパイラはあるのですか?
74ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(85,323ポイント)
Date: 2009/02/18(水) 18:24
No:28977
|
|
Title: Re:無題
|
|
> コンパイラによるのか?OSによるのか?CPUによるのか?
最終的にはコンパイラ(またはインタープリタ)によります。
> 昔、汎用機で1の補数になってたマシンはみたことがあるのですが、DOSマシンで
> 1の補数や、絶対値で表しているコンパイラはあるのですか?
DOSマシンを翻訳環境または実行環境とする処理系であっても、1の補数を用いるコンパイラやインタープリタを実装することは可能です。
また、馬鹿太郎さんは処理系を特定していませんので、特定の処理系を仮定するのは無意味です。
112ポイント を手に入れた。
|
|
|
|
|
Name: non ..プログラマー(36,889ポイント)
Date: 2009/02/18(水) 19:09
No:28979
|
|
Title: Re:無題
|
|
みなさんがよく使っているコンパイラはどうなのかと思いましてお尋ね致しております。
メジャーなコンパイラで2の補数以外の処理を行っているコンパイラをご存じでしたら
教えてください。
89ポイント を手に入れた。
|
|
|
|
|
Name: GPGA ..熟練のプログラマー(57,793ポイント)
Date: 2009/02/18(水) 20:22
No:28983
|
|
Title: Re:無題
|
|
今使用しているCodeWarriorではchar型は0〜255の整数型として扱われています。
1の補数のコンパイラには、出会ったことがないですね。
55ポイント を手に入れた。
|
|
|
|
Name: Kou ..ぴよぴよ(183ポイント)
Date: 2009/02/16(月) 21:56
No:28887
|
|
Title: RPGのイベント処理について
|
|
はじめまして、1年程前よりC言語を勉強しながら、DxLibを使ってゲームを作成しようと頑張っております。
こちらのサイトは最近よく拝見させて頂いております。はじめての質問となりますので、失礼等あるかと思いますが宜しくお願いいたします。
さて質問内容ですが、RPGでMAPを移動中にイベント(この場合特定の場所での発生)を発生させる方法がよくわかりません。
私個人の現時点のスキルは、
・キャラの表示と移動
・マップチップを使用してのMAPの表示及びスクロール表示
・上記2種類の同時処理(MAPを表示して自キャラを移動させる)
この程度です。
質問に不十分な点があるかと思いますが、よろしくお願いいたします。
PS・現時点ではソースはありません(この処理でつまづき、削除してしまいました・・・)
183ポイント を手に入れた。
|
|
|
|
Name: s-rush ..プログラマー(26,766ポイント)
Date: 2009/02/18(水) 11:25
No:28931
|
|
Title: Re:RPGのイベント処理について
|
|
私もRPGを作ってますよ^^
ポケモンですけど・・・
私も今イベントの処理に手を出しているんですが、同じく悩んでます。
今私の持っているアイデアとしてはこうです。
MAP
0 0 1 1 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 2
0 0 0 0 0 2
0 0 0 0 0 0
上のマップをフィールドマップとは別に
イベント発生用のマップデータだとします。
ということは宣言としては
int map_data[2][Y_MAX][X_MAX];
といったとこでしょうか?
イベント終了済みフラグが立っていなければ、
自キャラが”1”に来たらイベント1の処理
自キャラが”2”に来たらイベント2の処理
イベント終了後、フラグを立てておく
でもこれだと少し大規模なRPGの制作になると、
場合分けが大変そうですが^^;
他に良い案はないでしょうか?
385ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(60,845ポイント)
Date: 2009/02/18(水) 11:56
No:28932
|
|
Title: Re:RPGのイベント処理について
|
|
一度書いたので、もう一度・・・w
自分なりのイベントの解釈をしていますので、
参考にはならないかも知れません。。
(イベント=ノベル+キャラの自動動作)
敵と遭遇させるなら管理人さんのコードを参考にすると
手っ取り早いです。
以下は、「町の全員に話しかけて、空の見えるところに行ったらイベント発生」
について書いてみます。
まず、フィールドマップから町に入ります。
最初のキャラ描写位置は32×32を基準として
キャラの座標(10,15)とします。(640×480の画面真ん中下)
そこからキー入力に対応させてキャラの座標を変化させていきます。
条件は「町人全員に話しかける」ですので、条件を満たしたら、
フラグか何かを立ててやれば問題ないです。
そして「空の見える場所」は
0<=X<=20
y<3
という条件にしておいて、これを満たしたらイベントへ。
この時、X,Y座標がばらばらだと後で面倒なので、
初期化の意味も込めてキャラの座標をある特定のところへ。
こんな感じで自分は実装してました。(もはや過去形)
あとイベント中のキャラの自動動作、ノベルですが、
コードに直接描くのは管理、効率を考えてやめておいたほうが良いです。
自分は独自のスクリプトを(ほんの少し)作りました。
↓でこのことを質問してました。
http://www.play21.jp/board/formz.cgi?action=res&resno=28511&page=&lognum=89&id=dixq&rln=28553
作成したのは質問に書いたものとほぼ同じです。
・(ある座標(X1,Y1)から)(ある座標(X2,Y2)まで)(独自の速度vで)歩く
・その場から(X,Y)を中心とする円を描きながら歩行する。
・高さhまで重力加速度aの条件でジャンプする
・キャラが複数いたら、↑の動作の順番を定義する
の4つ+αを作りました。
これらを外部ファイルから読み取れるようにしました。
が、御津凪さんのアドバイスが作って初めて理解できました。
結構大変です。
なので、大規模にしないならイベントのキャラ自動動作は
後回しにしておいたほうがよいです^^;w
画面描写しておいて、ノベルを出すにする方針をおススメします。
>s-rushさん
自分も最初は管理のしやすさを考慮してそうしましたが、
よくよく考えたらメリットはあまりない気がしました。
やはりまず無駄が多い気がするのです。
っというのも町ひとつでベント発生場所なんてあって数か所だと思います。
(戦略ゲーはもっと多いかも知れませんが・・・)
あと使っていて思ったのが、ツールがないとマップデータ作ること自体意外と面倒です。
まぁ、今そのツール作る勉強しているのですが・・・w
なので自分はしっかりと内容を明記し、コードに直接かきました。(条件範囲座標)
808ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(58,372ポイント)
Date: 2009/02/18(水) 12:16
No:28933
|
|
Title: Re:RPGのイベント処理について
|
|
> でもこれだと少し大規模なRPGの制作になると、
> 場合分けが大変そうですが^^;
2D のマップチップ単位でのイベント判定を用意するのであれば、
容易な方法としては問題ないと思われますよ。
もう少し効率的な方法を説明すると、
イベントにも種類がある(マップ移動・人物に話しかけるなど)ので、
イベント番号を0〜49までをマップ移動用に、50〜199までを人物系イベント(動くイベント)
といったカテゴリわけをするように管理するといいと思います。
マップチップ単位でキャラが移動する場合、イベントの発生タイミングが色々と出てきます。
・イベントの場所に移動しようとした瞬間
・イベントの場所に移動した直後
・イベントとぶつかった時
・イベントの場所で調べる動作をした時
など。
(ここらへんはRPGツクール系のツールを遊んだことがあれば分かりやすいと思います)
ちなみに、些細な処理(マップに出入りした時の処理など)もイベントとして処理しておくと
管理がしやすい良いです。
そんなにイベント量の少ないゲームであれば、以下のような関数ポインタを使ったテーブルを用意することで
場合分けを使用せずに済ませることが出来ます。
// イベントパラメータ
typedef struct {
short player_x,player_y; // プレイヤーの位置
short event_x,event_y; // イベントの位置
int trigger; // イベント発生の引き金(進入・調べるなどの識別値)
} SEventParam;
// イベント関数型の定義。
typedef void (*EventFunc)( SEventParam *ev );
// 0〜255番までのイベントテーブルを用意
EventFunc gEventTable[256] = {
NULL, // 0番は必ず発生させないようにする(イベントマップでの 0 を存在しないイベントとするため)
/*
ここに番号順にイベント関数を入れる。
(空白箇所は NULL で埋める)
*/
};
// イベント関数を呼び出す関数
void CallEvent( int evId, SEventParam *ev ){
if(gEventTable[evId]) gEventTable[evId](ev);
}
この方法なら、switch 文を使わずに記述できますし、イベントIDの領域が 256 未満に収まるのであれば、
unsigned char ev_data[Y_MAX][X_MAX];
と、マップとは別型で小さく宣言することができ、領域は4分の1に収まるはずです。
> kazuoni さん
> 町ひとつでベント発生場所なんてあって数か所だと思います。
人物・立て札などの調べられるオブジェクト・マップ移動などをイベントとして括ると、
凝ったマップであれば結構な量になりますよ。
(カジノとか謎解き部屋とか)
# 3Dなど、ブロック単位でイベントを置かないタイプの場合は、
# 当たり判定などを利用してイベントを発生させます。
# この場合のイベントの管理はリストとしてマップごとに持たせたほうが良いでしょう。
903ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(61,008ポイント)
Date: 2009/02/18(水) 12:40
No:28934
|
|
Title: Re:RPGのイベント処理について
|
|
>人物・立て札などの調べられるオブジェクト・マップ移動などをイベントとして括ると
これはごもっともです^^;
自分はストーリイベントとは別に管理していましたが・・・
確かに実現できそうです。
3Dのあたり判定・・・めんどくさそうですね^^;
ただ、今のゲームは3Dが当たり前になってるので、
いろいろな考え方を学ぶのって重要かもしれないですね・・・。
163ポイント を手に入れた。
|
|
|
|
|
Name: Kou ..ぴよぴよ(245ポイント)
Date: 2009/02/18(水) 14:54
No:28947
|
|
Title: Re:RPGのイベント処理について
|
|
沢山の回答ありがとうございます。
サンプルプログラムも参考にさせて頂いておりました。やはり別配列を用意して管理するのが良いようですね。
MAPもファイルからデータを読み込んで表示してるんですけど、イベントもそれと同じような感じでデータを用意して、それを関数ポインタ等で処理を振り分ける的な・・・
私はゲームの作成経験がないもので、一般的な処理がどうなっているのか見当がつかず悩んでました。
しかし皆様の回答を見せて頂いた感じでは、概ね考え方自体は間違っていない事がわかりました。
ありがとうございます。
ただひとつ気になるのは、配列でイベントを管理した場合、町等の狭い範囲ならば問題ないのですが、フィールドのような広い範囲を配列で用意すると、メモリ等は大丈夫なのでしょうか?
182ポイント を落としてしまった。
|
|
|
|
|
Name: Kou ..ぴよぴよ(485ポイント)
Date: 2009/02/18(水) 15:11
No:28949
|
|
Title: Re:RPGのイベント処理について
|
|
追記です。
kazuoni様
> あと使っていて思ったのが、ツールがないとマップデータ作ること自体意外と面倒です。
> まぁ、今そのツール作る勉強しているのですが・・・w
私は以前別の言語でゲーム作成に挑戦しようと思い、MAPエディターを自作しました。
その頃はファイルの読み書きの方法がよくわかっていなかったので、その部分は苦労しましたが、
それ以外はそれほど面倒な処理はなかったです。(あくまでも自分が使えれば良いという程度の物ですが)
まだC言語でそれを作成した事はありませんが、これからMAPエディターにも挑戦しようと思います。
いつになるかわかりませんが・・・(汗)
2倍のポイントを手に入れた! 240ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(58,816ポイント)
Date: 2009/02/18(水) 15:22
No:28950
|
|
Title: Re:RPGのイベント処理について
|
|
広い範囲を二次元配列で用意する場合、
容量(バイト数) = 横幅 * 縦幅 * 型のバイト数
の式で求められます。
たとえば、縦横共に 1024 個の広大なフィールドを int 型で用意した場合、
1024 * 1024 * 4 = 4194304 Byte
で、4MB 必要になります。
しかし、マップチップのデータはチップの番号なので、 int 型も必要ないと思うので、
char (または unsigned char) 型にすると4分の1となり、1MBですみます。
どちらにしても、これぐらいでメモリ領域を圧迫するようなPCは今ではほとんどないので
さほど気にする点ではないかもしれませんが。
また、マップデータを保存する際、生のデータとして保存する場合には
上記式の容量+α(縦横幅などのマップ情報)のファイルサイズになります。
(バイナリ形式の場合です。テキスト形式はもっと膨大なサイズになります)
この場合は圧縮(zlibなど)ライブラリを使って圧縮保存し、読み込み時にメモリ領域に解凍・展開する方法が
良いと思います。
444ポイント を手に入れた。
|
|
|
|
|
Name: Kou ..ぴよぴよ(970ポイント)
Date: 2009/02/18(水) 15:39
No:28956
|
|
Title: Re:RPGのイベント処理について
|
|
御津凪様、早速の回答ありがとうございます。
なるほど、1024×1024の配列を取ってもchr型ならば1Mですか・・・実際はそんなに大きなMAPにならないので、メモリの心配はないですね。
安心しました。
ただアドバイスの最後の部分
>この場合は圧縮(zlibなど)ライブラリを使って圧縮保存し、読み込み時にメモリ領域に解凍・展開する方法が良いと思います。
で、メモリ領域にファイルを解凍・展開するとは、どういう処理なんでしょうか?
ファイルというと、作成・圧縮・解凍したものは物理的にDISC上にできる物という知識しかないもので・・・
お手数でなければ、処理の簡単なヒントのような物でも結構ですので、お願いできますか?
306ポイント を手に入れた。
|
|
|
|
|
Name: Kou ..かけだし(1,257ポイント)
Date: 2009/02/18(水) 16:37
No:28970
|
|
Title: Re:RPGのイベント処理について
|
|
御津凪様、回答ありがとうございます。
教えて頂いたzlibのサイトを見てみました。
ようはzlibのようなライブラリを使用してファイルを展開した場合、最初は配列(メモリ)に格納してしてあって、それをそのまま使えばアドバイスの様な処理になり、ファイルとして書き出せば物理的なファイルになる・・・このような考え方で良いのでしょうか?
168ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(58,588ポイント)
Date: 2009/02/18(水) 16:57
No:28971
|
|
Title: Re:RPGのイベント処理について
|
|
そのような考え方でいいと思います。
ただ、一つ気をつける点として、
通常、圧縮したデータには元のデータサイズの情報がないので、
解凍しきるまでデータサイズが分からないという点があります。
これは、読み込む際にメモリを動的に確保・拡張する必要があることを意味します。
96ポイント を落としてしまった。
|
|
|
|
|
Name: Kou ..かけだし(1,410ポイント)
Date: 2009/02/18(水) 17:09
No:28973
| 解決!
|
Title: Re:RPGのイベント処理について
|
|
御津凪様をはじめ、kazuoni様、s-rush様、管理人様、沢山の回答ありがとうございました。
皆様のアドバイスでだいぶ処理が理解できましたので、がんばってRPGプログラムにチャレンジします。
また質問させて頂く事があると思いますが、その際はよろしくお願いします。
88ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..熟練のプログラマー(43,086ポイント)
Date: 2009/02/18(水) 01:05
No:28907
|
|
Title: Re:横シューティングできました
|
|
えっと。シューターとしてもプログラマーとしても初心者な私の感想です。
原色の自機がサイケでクールですね。
面白かったです。
横スクロールシューティングってあまり経験無いので新鮮です。
(縦シューも言うほど経験多くないですけど)
無限残機じゃ無かったら適度に鬼畜難易度でやりこみ甲斐がありそうでした(趣味の問題?)、
そんな時間がある方は少ないと思うのでここで公開する分にはこれでいいと思いますけど。。
ステージごとに音楽が変わってステージの雰囲気にもあってると思いました。
背景の動き凝ってますね。良かったです。
二面ボスの動きが好きなんですけど、このマシンはなんでしょうか?
ちょっと興味あります。ミシン…じゃないですよね。
低速と高速移動の切り替えが欲しいと思いましたが、
慣れの問題かもしれないですね。
こういうゲームだといわれたらそうなのかと思います。
シューテング作りは楽しそうですね。
私も頑張ります。
36ポイント を手に入れた。
|
|
|
|
|
Name: 木霊 ..プログラマー(30,302ポイント)
Date: 2009/02/18(水) 01:27
No:28909
|
|
Title: Re:横シューティングできました
|
|
ようすけさん、御自分でプレイされましたか?
ウインドウモードで起動したのですが、少なくともこちらの環境ではタイトル画面で
ESC・上・下以外のキーが動作せず、ゲームができませんでした。
また、ゲームを終了させる方法がタスクマネージャーを起動させて「プロセスの終了」を選ぶ
以外に無いのは問題があります。
しかも、容量が143MBもあるのでダウンロードに相当時間が掛かります。
(こちらでは30分以上掛かってしまいました。)
グラフィックは前回に比べ大分容量が減ってるようなので、次はBGMの容量を減らす工夫を
してみるといいと思います。(OGGやMIDIにする)
最後に、BGMと効果音のどちらかしか鳴らせないならば効果音を選択した方がいいと思います。
容量のこともありますが、視覚と同時に聴覚も刺激した方が効果的だからです。
(極端な話をすると、BGMはメディアプレイヤー等で別に鳴らせるので無理に鳴らさなくてもいいので)
2倍のポイントを手に入れた! 532ポイント を手に入れた。
|
|
|
|
|
Name: 木霊 ..プログラマー(30,310ポイント)
Date: 2009/02/18(水) 01:32
No:28910
|
|
Title: Re:横シューティングできました
|
|
連投すみません。
プレイできた方がいらしたようなので、フルスクリーンでも起動しましたが
やはりZ・Xキーは反応しませんでした。
環境の問題ですかねぇ。
8ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..熟練のプログラマー(43,206ポイント)
Date: 2009/02/18(水) 01:42
No:28911
|
|
Title: Re:横シューティングできました
|
|
ああ確かにダウンロードは長かったですね。
他の事やりながら待ってたので忘れてました。
確かにこの容量は気軽に遊べないです。
>>やはりZ・Xキーは反応しませんでした。
説明が足り無いようですね。
ゲームを開始するのはエンターキーでした。
120ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..熟練のプログラマー(43,263ポイント)
Date: 2009/02/18(水) 01:51
No:28913
|
|
Title: Re:横シューティングできました
|
|
無限残機なので
最後までストレートに遊んだので気付きませんでしたが。
ゲーム途中でタイトルに戻るとエラー音が鳴り続けますね。
一応バグ(?)報告です。
25ポイント を手に入れた。
|
|
|
|
|
Name: たらい ..ぴよぴよ(138ポイント)
Date: 2009/02/18(水) 02:01
No:28914
|
|
Title: Re:横シューティングできました
|
|
初めて人の作ったゲームをダウンロードさせていただきましたー
こちらでは操作系統に関しては特に問題なく遊べましたよー
※Vista
たしかに容量大きいですねー
解凍するとフォルダには実行ファイルとreadmeしかなくて容量も400kByteに満たなかったんですけど
残りどこいっちゃったのー?
○こめかみさん
そのバグこちらでも確認されましたー
138ポイント を手に入れた。
|
|
|
|
|
Name: 木霊 ..プログラマー(30,516ポイント)
Date: 2009/02/18(水) 02:28
No:28915
|
|
Title: Re:横シューティングできました
|
|
>こめかみさん
おかげでプレイできました。ありがとうございます。
一度一通り押してみたのですが、その時に反応が無かったのもので・・・
これでやっとゲームからの終了ができます。(エラー音が・・・)
それで、一応3面クリアまでプレイしてみました。
横シューは懐かしいです。地上物(障害物)があるのを見て色々思い出しましたw
2面ボス登場の演出はいいですね、あれは盛り上がりました。
他にも変形(?)する敵など今回は特に演出に力を入れている感じがします。
ただ、3面ボスの硬さと処理落ちは調整した方がいいと思います。
ところで、3面の曲は前作の2面に使われていたような・・・記憶違いかもしれませんが。
>たらいさん
隠しファイルになってます。ちゃんとフォルダの中に入ってますよ。
206ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(991,532ポイント)
Date: 2009/02/18(水) 05:15
No:28919
|
|
Title: Re:横シューティングできました
|
|
制作お疲れ様です。
夕焼けもキレイで、2面の奥行きもイイ感じですね。
2面の手前の林はもうちょっと数減らしてもいいんじゃないでしょうか?
せっかく後ろがキレイそうなので、ちょっともったいないのではと思ったり。
後、ちょっと重いですね。
画像も音楽も全て無圧縮なので、無駄な容量を取ってるように思います。
画像はPNG、音楽はoggにすると、恐らく10M位におさまると思います。
私も今シューティングをまた制作中なので、頑張っていきたいと思いますっ!
218ポイント を落としてしまった。
|
|
|
|
|
Name: めいらる ..かけだし(1,106ポイント)
Date: 2009/02/18(水) 07:42
No:28924
|
|
Title: Re:横シューティングできました
|
|
遊ばせていただきました〜
ステージ2の背景スクロールや登場シーンの演出はよかったと思いますよ(^ω^)
私が下手なのが問題なのですがキーボードでシューティングをすると死にまくります(笑)10数回は死んだかなぁ…
あと処理の軽さが不思議でしたね〜
私のシューティングは常に50〜60%ほどCPUを食っているのですがようすけさんのシューティングをプレイしている間は数%でした…私の設計にとんでもない問題があるような気がしてならないですw
Dixqさん>
次回作楽しみにしてます♪きっと64のスターフォックスのような感じに3Dで…♪
140ポイント を手に入れた。
|
|
|
|
|
Name: ようすけ ..入門者(4,430ポイント)
Date: 2009/02/18(水) 13:28
No:28936
|
|
Title: Re:横シューティングできました
|
|
皆さん、プレイしていただきどうもありがとうございます。
普段ゲームを公開するとき以外掲示板に顔を出さない私が、こちらのサイトで
ゲームを公開したところで誰も相手にしてくれないだろう
と思いながらも、また最近流行り(?)の弾幕ゲーではなく、
全然派手さのないゲームに、沢山の貴重な意見・感想・バグ等の
報告ありがとうございます☆
>こめかみ氏
>面白かったです。
横スクロールシューティングってあまり経験無いので新鮮です。
ありがとうございます。
確かに昔はゲーセンにも横シュー結構ありましたけど、
最近はめっきり減りましたよね☆
(最近ならデススマイルズとか)
>二面ボスの動きが好きなんですけど、このマシンはなんでしょうか?
ちょっと興味あります。ミシン…じゃないですよね。
う〜ん、何ですかね・・・
私自身もよくわからないですが、頭の中で出てきたのを
イメージして描いてみたらこういう風になりました(笑
>ゲーム途中でタイトルに戻るとエラー音が鳴り続けますね。
え?ほんとうですか?私の方では特に何もなかったですよ。
環境の問題ですかね・・・
>木霊氏
>BGMと効果音のどちらかしか鳴らせないならば効果音を選択した方がいいと思います。
私も悩みました(汗
次は効果音優先で試してみたいと思います☆
>2面ボス登場の演出はいいですね、あれは盛り上がりました。
他にも変形(?)する敵など今回は特に演出に力を入れている感じがします。
ただ、3面ボスの硬さと処理落ちは調整した方がいいと思います。
ところで、3面の曲は前作の2面に使われていたような・・・記憶違いかもしれませんが
ありがとうございます☆
3ボスはショットを650発ぶち込まないと倒せないので、
確かにパワーアップが出ない3面ではきついですね(汗
おっしゃる通り3面の曲は前作(doudou2)の2面の曲です(笑
>たらい氏
>解凍するとフォルダには実行ファイルとreadmeしかなくて容量も400kByteに満たなかったんですけど
残りどこいっちゃったのー?
プレイしていただきありがとうございます☆
木霊氏のおっしゃる通り、隠しファイルになってます(笑
>管理人氏
毎回こちらの掲示板をお借りさせていただいてます。
本当にありがとうございます☆
>夕焼けもキレイで、2面の奥行きもイイ感じですね。
2面の手前の林はもうちょっと数減らしてもいいんじゃないでしょうか?
せっかく後ろがキレイそうなので、ちょっともったいないのではと思ったり。
そうですね、今回初めて奥行きをだしてみたので、
次はもうちょっと工夫してみます☆
>私も今シューティングをまた制作中なので、頑張っていきたいと思いますっ!
龍神録2ですか?
前作よりいいものを作ろうという思い&皆さんからの期待のプレッシャーも
相当あると思いますががんばって下さい。☆
>めいらる氏
>遊ばせていただきました〜
ステージ2の背景スクロールや登場シーンの演出はよかったと思いますよ(^ω^)
ありがとうございます☆
2ボスの登場シーンは結構悩みました。
2ボスが右から出てくる前に、ザコ敵が沢山通過するんですけど、
あれは、2ボスがザコ敵を追っかけてて、途中で自機に遭遇して
自機に標的が変わるってイメージで作りました(笑
(全然そんな風に見えなかったらゴメンナサイ(汗)
1,334ポイント を手に入れた。
|
|
|
|
Name: white ..ぴよぴよ(37ポイント)
Date: 2009/02/08(日) 17:51
No:28437
|
|
Title: ダウンロードが出来ないんですけど・・・。
|
|
ダウンロードしようと思ってるんですけど、zipが壊れてて出来ないんですよ。
どうやったら出来るんですか?教えてください。
37ポイント を手に入れた。
|
|
|
|
Name: box ..ハッカー(134,238ポイント)
Date: 2009/02/08(日) 18:31
No:28443
|
|
Title: Re:ダウンロードが出来ないんですけど・・・。
|
|
どこにある何というファイルが壊れているのですか?
状況を、もっと具体的に伝えるようにしてください。
45ポイント を手に入れた。
|
|
|
|
|
Name: hss12 ..ぴよぴよ(2ポイント)
Date: 2009/02/15(日) 02:41
No:28792
|
|
Title: Re:ダウンロードが出来ないんですけど・・・。
|
|
太鼓の鉄人のデータが開けないのですが
よろしくお願いします。
2ポイント を手に入れた。
|
|
|
|
|
Name: 通りすがり ..中級者(14,080ポイント)
Date: 2009/02/15(日) 02:47
No:28793
|
|
Title: Re:ダウンロードが出来ないんですけど・・・。
|
|
トピ主とhss122氏は同じ人物ですか?
毎回名前を変えるのは規約違反ですよ。
なお、示されているデータはこちらでは正常にDL出来ます。
ブラウザやDL環境など、詳しく書かないとアドバイスは受けられないかと思います。
96ポイント を手に入れた。
|
|
|
|
|
Name: hss12 ..ぴよぴよ(55ポイント)
Date: 2009/02/15(日) 04:54
No:28798
|
|
Title: Re:ダウンロードが出来ないんですけど・・・。
|
|
ありがとうございます。
別人です。今やったら無事開けました。原因不明ですが。
太鼓だけ開けなかったので。
リズムゲームが作りたかったので参考になります。
53ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(991,351ポイント)
Date: 2009/02/16(月) 13:10
No:28862
|
|
Title: Re:ダウンロードが出来ないんですけど・・・。
|
|
今そのような報告が多いですね;
もし正常にDL出来ないことがあれば、環境など詳細を教えていただけると幸いですm(_ _)m
あと音ゲーは音楽データをどのように保存するかにかかってる気がします^^;
わかりやすい譜面などの入力インターフェイスをどうするか・・。
もしKONAMIのゲームとかに参考になりそうなものがあれば参考にするのも手かもしれませんね。
149ポイント を手に入れた。
|
|
|
|
|
Name: hss12 ..ぴよぴよ(250ポイント)
Date: 2009/02/16(月) 21:03
No:28884
|
|
Title: Re:ダウンロードが出来ないんですけど・・・。
|
|
太鼓ですが、Vista+IEとXP+IEの2台試しましたが同じ結果でした。
ダウンロードはできるのですが、解凍ができなかったです。
データ量も200KBほどしかありませんでしたし。サーバの問題でしょうか。
譜面ですが、太鼓ならあれでもわかりますけど
ビートマニア系レベルだと意味不明になりそうですね。
シーケンサソフトで入力してMIDIで保存し、MIDIデータを数値化するプログラムを書けば楽にいけるかな…。
195ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(317,886ポイント)
Date: 2009/02/16(月) 21:15
No:28885
|
|
Title: Re:ダウンロードが出来ないんですけど・・・。
|
|
>太鼓ですが、Vista+IEとXP+IEの2台試しましたが同じ結果でした
うちは XP/IE6&FF3ですが普通に DLできましたよ。
ちなみに IEのバージョンは何ですか?
66ポイント を手に入れた。
|
|
|
|
|
Name: hss12 ..ぴよぴよ(291ポイント)
Date: 2009/02/16(月) 21:38
No:28886
|
|
Title: Re:ダウンロードが出来ないんですけど・・・。
|
|
IE7です。
ちなみに今ダウンロードしてみたら100KBほどしかなく解凍できなかったです。
リンゴやジャンケンなどは問題ないのですが…。
41ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(317,746ポイント)
Date: 2009/02/16(月) 22:05
No:28888
|
|
Title: Re:ダウンロードが出来ないんですけど・・・。
|
|
XP+IE7だと昔不具合でDL出来ないとかありましたが、Vistaでもとなると何でしょうねぇ。
右クリックのコンテキストメニューから「対象をファイルに保存」でDLするか
何か適当なレジューム対応したダウンロードソフト(Irvineとか DCさくらとか NetTransportとか)を
使ってみるとうまくいくかもしれません。
140ポイント を落としてしまった。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(991,629ポイント)
Date: 2009/02/18(水) 05:17
No:28920
|
|
Title: Re:ダウンロードが出来ないんですけど・・・。
|
|
う〜ん、研究室や大学のコンピュータ室でやってみましたが、特に不具合ありませんでした・・。
でも複数の方から同じような報告を受けているので、やはりサーバーの問題かなにかなんでしょうかね・・。
龍神録のHPの方でも同じようなこといわれるので、何か対策たてなければと感じてます;
97ポイント を手に入れた。
|
|
|
|
Name: 馬鹿太郎 ..ぴよぴよ(130ポイント)
Date: 2009/02/16(月) 14:32
No:28863
|
|
Title: C言語の文字列について
|
|
すいません、どなたか教えていただけないでしょうか
文字列str内の全ての数字文字を削除する関数void del_digit(char str[])を使うんですけど、
この呼び出された関数del_digitのstrとmain関数のstrは別個のものですよね。それなのにdel_digit関数
の処理が終わったあとmain関数に戻ったら配列strの中身が変わっています。
あと、str[idx++] = str[i]はどういう意味なのでしょうか?
この0未満、9以上はどういう意味なのでしょうか?
よろしければ、教えてください。
#include <stdio.h>
void del_digit(char str[]);
int main(void)
{
char str[100];
printf("文字列を入力してください:");
scanf("%s", str);
del_digit(str);
puts("数文字を削除しました。");
printf("str=%s\n", str);
return 0;
}
void del_digit(char str[])
{
int i = 0, idx = 0;
while (str[i]) {
if(str[i] < '0' || str[i] > '9') {
str[idx++] = str[i];
}
i++;
}
str[idx] = '\0';
}
130ポイント を手に入れた。
|
|
|
|
Name: たいちう ..上級者(24,379ポイント)
Date: 2009/02/16(月) 15:38
No:28867
|
|
Title: Re:C言語の文字列について
|
|
> この呼び出された関数del_digitのstrとmain関数のstrは別個のものですよね。それなのにdel_digit関数
> の処理が終わったあとmain関数に戻ったら配列strの中身が変わっています。
2つのchar*型の変数strは別のものですが、同じ配列のアドレスを値として持ちます。
この辺はポインタの基本ですので、参考書などの該当部分を良く読みなおしてください。
> あと、str[idx++] = str[i]はどういう意味なのでしょうか?
数字を削除ということで、削除した分、前に詰めているのですね。
> この0未満、9以上はどういう意味なのでしょうか?
9以上ではなく、9より大きい、です。
str[i]がこの条件を満たす場合、文字を詰める処理を行い、
この条件を満たさない場合、すなわち、数字の場合は何も処理を行わないことで、
数字を削除しています。
"a2c"などの短い文字列をdel_degitに渡して、
デバッガで処理を追いかけてみてください。
2ポイント を手に入れた。
|
|
|
|
|
Name: 馬鹿太郎 ..ぴよぴよ(229ポイント)
Date: 2009/02/17(火) 20:09
No:28891
|
|
Title: Re:C言語の文字列について
|
|
以下のことがわかりません。
・0未満、9より大きいとどうして文字として処理されるのですか?
・「デバッカ」の意味を調べたらバグを取り除く装置だとありました。このデバッガで処理を追いかけるとは
どういう意味なのでしょうか?
・
99ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(59,647ポイント)
Date: 2009/02/17(火) 20:54
No:28892
|
|
Title: Re:C言語の文字列について
|
|
ttp://charset.7jp.net/jis.html
をみればわかるのですが・・・
'A'は文字定数っといって、int型で、
'0'〜'9'は参照ページのように、連続していることが定義されています。
環境によると思いますが、
visual c++ならばブレークポイントがそれにあたります。
実行を一時停止して、変数の移り変わりを見るということです。
2倍のポイントを手に入れた! 204ポイント を手に入れた。
|
|
|
|
|
Name: たいちう ..上級者(24,254ポイント)
Date: 2009/02/17(火) 20:59
No:28893
|
|
Title: Re:C言語の文字列について
|
|
> ・0未満、9より大きいとどうして文字として処理されるのですか?
より正確には文字コードの比較をしています。
数字の文字コードは、0の文字コード以上 かつ 9の文字コード以下ですので、
この条件の逆を文字として処理しています。
> 「デバッカ」の意味を調べたらバグを取り除く装置だとありました。
> このデバッガで処理を追いかけるとはどういう意味なのでしょうか?
デバッカではなく、デバッガです。
この単語を使うときは、通常、バグを取り除く装置ではなく、
バグを見つけるときに助けてくれるプログラムを指します。
使えるデバッガが無いのでしたら、短い文字列をdel_degitに渡し、
コンパイラになったつもりで、変数がどう変わるか一行ずつ考えてみてください。
125ポイント を落としてしまった。
|
|
|
|
|
Name: yu [URL] ..中級者(14,163ポイント)
Date: 2009/02/10(火) 16:19
No:28600
|
|
Title: Re:みすちー的な
|
|
いろいろ方法はあるかもしれませんが
自分が簡単だと思うのは、
添付したファイルのように明暗がある画像を
自機キャラを中心座標として描画してやれば良いと思います。
この画像の外は部分は黒で塗りつぶせば良いですね。
画像の縮小拡大を使ってやれば、段々小さく、大きくできると思いますよ。
※添付したファイルでは分かりにくいですが、透過色があって、真ん中は透けて見えます。
クリックすればよくわかると思います。
129ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..上級者(15,644ポイント)
Date: 2009/02/10(火) 16:27
No:28601
|
|
Title: Re:みすちー的な
|
|
>>零崎虚識さん
今ぱっと思いついたので、全然いい方法ではないと思いますが、
ゲームウインドウより大きめの黒一色背景を用意し、その背景を自機が映る範囲くりぬきます。
そのくりぬいた部分に自機が映る様に座標を設定して
自機が動けば、背景も動くように作ればいいのではないかなーと思いました。
FLASHでサンプルを作ってみました。(汚い作りですが大目に見てください;)
キー操作は上下左右だけです。
ttp://www.geocities.jp/dvdmvoid/SampleBlind.swf
103ポイント を手に入れた。
|
|
|
|
|
Name: 零崎虚識 ..ぴよぴよ(102ポイント)
Date: 2009/02/10(火) 17:25
No:28610
|
|
Title: m(_ _)m
|
|
早くもこんなに意見を頂きありがとうございます;;
若干質問に見栄張ってましたorz
プログラム初心者なので透明範囲の動かし方も思いつかないです。。。
二度手間すみませんOTL
p.s
フラッシュのが動かな……
91ポイント を手に入れた。
|
|
|
|
|
Name: yu [URL] ..中級者(14,290ポイント)
Date: 2009/02/10(火) 17:47
No:28611
|
|
Title: Re:みすちー的な
|
|
龍神録のプログラムのソースの場合ですが
graph.cppファイルの
graph_main関数内の
graph_bullet()の下あたりに
DrawRotaGraph(FX+ch.x,FY+ch.y,1.0,0,handle,TRUE);//キャラを中心に描画
と追加してください。
handle には添付した画像ファイルを読み込ませておいてください。
キャラを中心にして添付した画像を描画しているので、キャラが動けばこの画像もそれに合わせて動きます。
周りの切れ目がわからないように大きめの画像を用意しています。
常時鳥目状態になります。
25ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..プログラマー(25,385ポイント)
Date: 2009/02/10(火) 18:51
No:28614
|
|
Title: Re:みすちー的な
|
|
>フラッシュのが動かな……
Flashは一度画面をクリックしないとキー入力を受け付けません。
普通は「スタート」とかで最初にクリックさせるのであまり意識されないかもしれませんが。
75ポイント を落としてしまった。
|
|
|
|
|
Name: BEMANI ..上級者(16,005ポイント)
Date: 2009/02/10(火) 21:40
No:28624
|
|
Title: Re:みすちー的な
|
|
>>零崎虚識さん
すいません;
toyoさんも仰られていますが、画面を一度クリックすることで動くようになります。
説明不足で申し訳ないです;
>>toyoさん
補足説明ありがとうございます;
次回アップするようなことがある場合、クリックを促す言葉を入れておきます;
134ポイント を手に入れた。
|
|
|
|
|
Name: めいらる ..ぴよぴよ(966ポイント)
Date: 2009/02/11(水) 06:26
No:28643
|
|
Title: Re:みすちー的な
|
|
みすちーと聞いて飛んできました(・∀・)
私も穴の開いた画像を動かす方法とくりぬく方法のどちらかで実装しようと思っていましたがくりぬき方がわからなかったので前者以外に選択の余地が無かったです…w
DXライブラリにはまだまだ知らない関数が多い…(^ω^;)
|
|
|
|
|
Name: 零崎虚識 ..ぴよぴよ(162ポイント)
Date: 2009/02/17(火) 16:34
No:28890
|
|
Title: Re:みすちー的な
|
|
あわわ、こんなに沢山のコメありがとうございますorz(土下座
言われたとおりいじくってみます。
また何かあればよろしくお願いします。。。
60ポイント を手に入れた。
|
|
|
|
Name: ひよこ ..中級者(14,324ポイント)
Date: 2009/02/16(月) 17:47
No:28871
|
|
Title: 格闘ゲームの当たり判定
|
|
いま昨日の格闘ゲームの当たり判定を作っているのですが一回当てると攻撃判定がなくなってしまうのですがどうすればいいでしょうか(プログラム実行中のバグです。)よろしくお願いします。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
int PlayerX,PlayerY;
PlayerY=280;
int kyara[6];
int teki[5];
int img;
int tekiX=500;
int teki_img;
char Key[256];
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
kyara[0]= LoadGraph("KIRYU.bmp");
kyara[1]= LoadGraph("KIRYU000.bmp");
kyara[2]= LoadGraph("KIRYU2.bmp");
kyara[3]= LoadGraph("KIRYU3.bmp");
kyara[4]= LoadGraph("KIRYU4.bmp");
kyara[5]= LoadGraph("KIRYU5.bmp");
teki[0]= LoadGraph("ba-mumann.bmp");
teki[1]= LoadGraph("ba-mumann9.bmp");
teki[2]= LoadGraph("ba-mumann8.bmp");
teki[3]= LoadGraph("ba-mumann6.bmp");
teki[4]= LoadGraph("ba-mumann7.bmp");
PlayerX =320;
int tekimuki=4;
int muki=5;
int rakka=0;
SetDrawScreen( DX_SCREEN_BACK ) ; //描画先を裏画面に設定
int Black; Black=GetColor( 0 , 0 , 0 );
int White; White=GetColor( 255 , 255 , 255 );
int Blue;Blue= GetColor( 0, 0, 255 ) ; // 赤色の値を取得
int MYHP,firstmyhp,mydamage;
firstmyhp=300;mydamage=0;
int TEKIHP,firsttekihp,tekidamage;
firsttekihp=340;tekidamage=0;
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されると終了
MYHP=firstmyhp-mydamage;
TEKIHP=firsttekihp+tekidamage;
PlayerY-= rakka ;// 落下処理
rakka=-2;
if(PlayerY>280){PlayerY=280;rakka=0;}
if(PlayerX<0){PlayerX=0;}
if(tekiX<0){tekiX=0;}
if(tekiX>584){tekiX=584;}
if(PlayerX+118>640){PlayerX=522;}
//hidari
if( Key[ KEY_INPUT_LEFT ] == 1 ) { //左ボタンが押されたら
PlayerX=PlayerX-2; muki=4;} //左向きフラグを立てる
if( Key[ KEY_INPUT_RIGHT] == 1 ){ //右ボタンが押されたら
PlayerX=PlayerX+2; muki=5; } //右向きフラグを立てる
//↑migi
if( Key[ KEY_INPUT_X] == 1 ){
if(tekiX==PlayerX+118){tekidamage=50; tekiX=tekiX+6;}
muki=3;}
if( Key[ KEY_INPUT_Z] == 1 ){
muki=2;}
//osihidari
if( Key[ KEY_INPUT_LEFT]== 1 && PlayerX-50==tekiX ){
PlayerX=PlayerX-0;tekiX=tekiX-2;muki=4;}
if( Key[ KEY_INPUT_RIGHT]== 1 && PlayerX+118==tekiX){
PlayerX=PlayerX+0;tekiX=tekiX+2;muki=5;}
//↑osimigi
if( Key[ KEY_INPUT_LEFT]== 1 && PlayerX<=56 && tekiX<=0 ){//敵を角にはさんだら動かなくする
PlayerX=56;muki=4;} //左
if( Key[ KEY_INPUT_RIGHT]== 1 && PlayerX>=464 && tekiX>483 ){//敵を角にはさんだら動かなくする
PlayerX=464;muki=5;} //migi
if ((Key[KEY_INPUT_A]==1) && PlayerY == 280 ) { rakka=200; muki=1;}
if( Key[ KEY_INPUT_O ] == 1 ) { //左ボタンが押されたら
tekiX=tekiX-2; tekimuki=3;} //左向きフラグを立てる
if( Key[ KEY_INPUT_P ] == 1 ) { //左ボタンが押されたら
tekiX=tekiX+2; tekimuki=4;} //左向きフラグを立てる
if( Key[ KEY_INPUT_K ] == 1 && Key[ KEY_INPUT_O ] == 1) { //左ボタンが押されたら
tekimuki=1;} //左向きフラグを立てる
if( Key[ KEY_INPUT_L ] == 1 && Key[ KEY_INPUT_P ] == 1 ) { //左ボタンが押されたら
tekimuki=2;} //左向きフラグを立てる
if( Key[ KEY_INPUT_O]== 1 && PlayerX+118==tekiX ){
PlayerX=PlayerX-2;tekiX=tekiX-0;tekimuki=4;}
if( Key[ KEY_INPUT_P]== 1 && PlayerX==tekiX+57){
PlayerX=PlayerX+2;tekiX=tekiX+0;tekimuki=5;}
img=kyara[(muki)]; //画像をセット
teki_img=teki[(tekimuki)];
ClearDrawScreen();
DrawBox ( 0 , 0 , 640 , 480 , White , TRUE) ; // 四角形を描画
DrawString( 0, 0, "H" , Black); //文字列表示
DrawString( 0, 15, "P" , Black); //文字列表示
DrawString( 630, 0, "H" , Black); //文字列表示
DrawString( 630, 15, "P" , Black); //文字列表示
DrawBox ( 20 , 0 ,MYHP , 50 ,Blue, TRUE ) ; // 四角形を描画(塗りつぶし)
DrawBox ( TEKIHP , 0 ,620 , 50 ,Blue, TRUE ) ; // 四角形を描画(塗りつぶし)
DrawGraph( PlayerX , PlayerY , img , TRUE ) ;//画像を描画
DrawGraph( tekiX , 280 , teki_img , TRUE ) ;//画像を描画
ScreenFlip();
}
DxLib_End();
return 0;
}
1,640ポイント を手に入れた。
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(59,049ポイント)
Date: 2009/02/16(月) 18:44
No:28872
|
|
Title: Re:格闘ゲームの当たり判定
|
|
すみません。自分の力不足かもしれませんが、
どこで何をしているのかがよく分かりません。
何を押したら攻撃しているのか(攻撃処理部分はどこか)
(おそらくXだと思いますが・・・)
が明瞭になればもっと良い回答ができるのですが・・・
もしXが攻撃だとしたら、if文に合致しなくなるからではないでしょうか?
ところで、
ボレークポイントの立て方を知っていますか?(Visual c++等)
何度かこの助言(?)をしていて、誰に伝えたのかわからなくなってしまってますので、
もし聞いたことがあったら流してください。
253ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(59,163ポイント)
Date: 2009/02/16(月) 18:54
No:28874
|
|
Title: Re:格闘ゲームの当たり判定
|
|
まず、GetHitKeyStateAll()の使い方を本家で見てみてください。
今のままだと、
Xを一回押したつもりでも処理はものすごい高速ですので、
if( Key[ KEY_INPUT_Z] == 1 )
は数回もしくは数十回連続で合致し、if文内に入ってしまいます。
これでも自分の意図した仕様になっていますか?
また、
tekiX==PlayerX+118
という条件はどういう意図で書いていますか?
114ポイント を手に入れた。
|
|
|
|
|
Name: ひよこ ..中級者(14,356ポイント)
Date: 2009/02/16(月) 19:03
No:28875
|
|
Title: Re:格闘ゲームの当たり判定
|
|
tekiX==PlayerX+118 は攻撃の先端で当たるとって意味です。
15ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(59,247ポイント)
Date: 2009/02/16(月) 19:14
No:28876
|
|
Title: Re:格闘ゲームの当たり判定
|
|
さっきも書きましたが、
ほかのボタン判定にも当てはまります。
右ボタンを一回押したつもりでも、X座標はものすごく動くはずです。
なので、当たり判定をピンポイントにするのは厳しいのでは?
例えばですが、|敵の位置-自分の位置|(絶対値)<118
とすれば、近距離で攻撃してもあたり判定が有効になります。
84ポイント を手に入れた。
|
|
|
|
|
Name: ひよこ ..中級者(14,405ポイント)
Date: 2009/02/16(月) 19:45
No:28877
|
|
Title: Re:格闘ゲームの当たり判定
|
|
if((tekiX-PlayerX)<118)でためしたところ攻撃判定がなくなった?になってしまいました。
49ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(59,404ポイント)
Date: 2009/02/16(月) 19:47
No:28878
|
|
Title: Re:格闘ゲームの当たり判定
|
|
補足ですが、攻撃してあたったら
敵もしくは自分を遠ざけるような処理を加えてください。
(現在もそうなってるようですが。)
ただこれだと、Xを押しっぱなしだと
無敵モードです^^;
118の範囲になったらすぐダメージですので。
なんだか打撃戦というより、
ドラゴンボールのスーパーサイヤ人の周りの黄色い奴の戦いみたいなw
やはり、管理人さんが作られた
http://dixq.net/g/#40b
が使いやすいかと。
これならif(Key[Key_INPUT_RETURN]==1)
でも一回押したら一回処理になります。
長押しとかも実現可能ですので、
必殺技のパワーゲージをためるなどの処理に使えそうです。
157ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(59,443ポイント)
Date: 2009/02/16(月) 19:54
No:28879
|
|
Title: Re:格闘ゲームの当たり判定
|
|
絶対値をとっていないので、敵が左側にいると
ずっと合致しません。
また、
初期状態から右キーで近づけていくと
if( Key[ KEY_INPUT_RIGHT]== 1 && PlayerX+118==tekiX)
に合致した際に、
PlayerX=PlayerX+0;tekiX=tekiX+2;muki=5
の文を実行していますので、永遠に118以内に入ることはありませんね^^;
39ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..熟練のプログラマー(51,490ポイント)
Date: 2009/02/16(月) 19:57
No:28880
|
|
Title: Re:格闘ゲームの当たり判定
|
|
一個気になったのだけど、「あたり判定」がないことをどうやって確認していますか?
> TEKIHP=firsttekihp+tekidamage;
この式だと何回ダメージを与えてもダメージは累積されませんけど。
72ポイント を手に入れた。
|
|
|
|
|
Name: ひよこ ..中級者(14,392ポイント)
Date: 2009/02/16(月) 21:00
No:28883
| 解決!
|
Title: Re:格闘ゲームの当たり判定
|
|
うまくいきました。まさにその通りでした。Mistさんありがとうございました。
kazuoniさん回答ありがとうございました。
13ポイント を落としてしまった。
|
|
|
|
|
Name: dxfan ..ぴよぴよ(178ポイント)
Date: 2009/02/16(月) 16:29
No:28870
| 解決!
|
Title: Re:DX3Dはどうなるんですか?
|
|
おぉ〜っと、素早い回答ありがとうございます^^
Siv3Dってあるんですか、知りませんでした。
これからはそちらをチェックしてみます。
御津凪さん、ありがとうございました〜m(_ _)m
55ポイント を手に入れた。
|
|
|
|
Name: トム ..ぴよぴよ(34ポイント)
Date: 2009/02/15(日) 19:06
No:28831
|
|
Title: ゲーム起動時の画像の表示
|
|
ゲーム起動時の画像の表示の仕方がわかりません
要するにロード画面みたいなもを表示したいんですがどうしたらいいですか?
34ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(990,617ポイント)
Date: 2009/02/15(日) 20:17
No:28834
|
|
Title: Re:ゲーム起動時の画像の表示
|
|
マルチスレッドで、描画する関数とロードする関数を平行させるという手もあります。
ただ、DXライブラリなどのライブラリはロードする関数が返って来るまで次の処理が行われないので、
ロードはカクカクしてしまうと思います。
(CPUが行っている処理ではないと、マルチスレッドの恩恵はあまり受けられないです)
もし、時間がかかってもスムーズなロード画面を表示したいのなら、
ロード関数を呼ぶたびにScleenFlipで裏画面反映させるという手もあります。
ただ、こうすると60FPSで表示しているなら、60個読み込み関数をよんだら、
最低でも1秒はロードに時間がかかります。
私は昔裏画面処理をせずに、メーターを描画する方法を取っていました。
「○○%」という表示の仕方は出来ませんが、描画した内容を消さずに、ドンドン上書きしていくのです。
最初メーターは空っぽで、上から読み込んだメーターの長さ分だけ上書きしていきました。
□□□□□
↓
■□□□□
↓
■■□□□
↓
■■■□□
こんな感じですね。
そうすると前書いた内容を消さなくてよく、描画しても垂直同期を待たなくて済みます。
つまり
ロード関数(); メーター描画関数();
ロード関数(); メーター描画関数();
ロード関数(); メーター描画関数();
こんな感じで書いていっていました。
ただし、音楽を読み込む関数やフォントを設定する関数など、どれも処理時間が違うので、
単純に100個ある関数のうち50個読み込んだから今50%では無い事に注意が必要です。
一度、どの関数にどれ位時間がかかるのか測定し、それにあったメーターを表示させると正しいメータが表示されるかと思います。
534ポイント を手に入れた。
|
|
|
|
|
Name: トム ..ぴよぴよ(150ポイント)
Date: 2009/02/15(日) 21:44
No:28837
|
|
Title: Re:ゲーム起動時の画像の表示
|
|
なるほど。ちょっと分かったような気がします
>もう少し具体的に質問したほうが
>良い回答が得られるかも知れません。
すいません。最初の読み込んでいる時間のあいだ何も表示されないと思いますがそのあいだに画像を表示させていたいんです(1枚のみ)
Dixq (管理人) さんの説明でちょっと分かったような気がしますがロードする関数というのがよく分からずそのロードする関数とロードする関数の間に処理のしかたがわかりません
わかりますでしょうか?
116ポイント を手に入れた。
|
|
|
|
|
Name: yu [URL] ..上級者(16,293ポイント)
Date: 2009/02/15(日) 21:52
No:28838
|
|
Title: Re:ゲーム起動時の画像の表示
|
|
一枚絵の場合ですが、画像をロードする関数の前に
void disp_load(){//ロード中の画像
int img;
img=LoadGraph("xxx");//画像ファイルロード
DrawGraph(0,0,img,TRUE);//描画
ScreenFlip();//裏画面に反映
ClearDrawScreen();//裏画面を初期化
DeleteGraph(img);//画像ハンドル破棄
}
このような関数を読んでおけばロード中は画像が表示されるはずですよ。
画像を動かしたい、メーターを付けたいとかになると、管理者様の方法がよいかと思います。
199ポイント を手に入れた。
|
|
|
|
|
Name: トム ..ぴよぴよ(284ポイント)
Date: 2009/02/15(日) 22:27
No:28839
|
|
Title: Re:ゲーム起動時の画像の表示
|
|
ロードする関数というものがわからず出来ません
エラーの出ない一番上に書いたんですが出来ません
もしかしてですが#include "DxLib.h"の処理でロードが長くなっていると思うんですがその処理が終わるまでは画像を表示できないんですか?
もしそうだとしたらDxLib.hの使っていない所を消すとロードが早くなるんでしょうか?
134ポイント を手に入れた。
|
|
|
|
|
Name: yu [URL] ..上級者(16,600ポイント)
Date: 2009/02/15(日) 22:46
No:28840
|
|
Title: Re:ゲーム起動時の画像の表示
|
|
起動時に時間がかかるのは、初期化を行っているためだと思います。
ロードとは、画像や音声などのデータをメモリに確保することです。多分・・・
DXライブラリの関数で言うと
LoadGraph()・LoadSoundMem() 等です。
一つの画像をロードするぐらいなら一瞬ですが、
音声や、画像が多いと時間がかかります。
最初の初期化時に画像を挿入させるのはすみませんが分かりません;
自分の書いた関数を使うとすると
disp_load();//ロード中の画面表示
LoadGraph();//画像ロード
・
・
・
LoadSoundMem();//音声ロード
・
・
・
のように書けばよいと思います。
・・・このよう一つ一つファイル名を書いてロードするのは大規模なプログラムになると困りますが・・・
307ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(990,838ポイント)
Date: 2009/02/15(日) 22:56
No:28841
|
|
Title: Re:ゲーム起動時の画像の表示
|
|
>ロードする関数というものがわからず出来ません
何がわかりませんか?
現在ロードはどのようにしているのでしょう?
私はロード処理を一つの関数にまとめたものをロード関数と名づけましたが・・。
もし出来そうにないなら、
最初に「NowLoading!」と表示させて、それを消さずにロード関数に処理渡して、
ロードが終わったら普通の画面表示にするんじゃだめですか?
やっぱパーセント表示とかメーターとかいるんでしょうか。
206ポイント を手に入れた。
|
|
|
|
|
Name: トム ..ぴよぴよ(334ポイント)
Date: 2009/02/15(日) 23:02
No:28842
| 解決!
|
Title: Re:ゲーム起動時の画像の表示
|
|
なるほど
きっと出来ていないんじゃなくて
ロードする関数が少なく初期化が長いため表示されていないと思ったようですね
解決しました
50ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..プログラマー(25,477ポイント)
Date: 2009/02/16(月) 09:05
No:28852
|
|
Title: Re:ゲーム起動時の画像の表示
|
|
初期化関数
DxLib_Init()
が時間がかかるのでその間に画像を表示したいということであれば無理だと思いますよ
48ポイント を手に入れた。
|
|
|
|
|
Name: トム ..ぴよぴよ(425ポイント)
Date: 2009/02/16(月) 09:52
No:28853
|
|
Title: Re:ゲーム起動時の画像の表示
|
|
そうなんですか
ありがとうございます
タイトルとは関係ないんで答えてくれなくても良いですが
DxLib_Init()
の処理を早くさせる方法
要するにロードを早くさせる方法はありますか?
91ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(988,959ポイント)
Date: 2009/02/12(木) 05:02
No:28695
|
|
Title: ☆3/7[大阪開催] 研究会の詳細 その2☆
|
|
開催場所が決まりました。
大阪 谷町四丁目〜環状線森ノ宮付近の大阪市立中央青年センターの3号室です。
大阪駅から環状線で行けます。
参加費は500〜900円程度を予定しています。懇親会もそこから徒歩圏内を予定しています。
研究会のHPも日々更新しています→http://dixq.net/kk/
研究会HPの・・・
「参加するには?」
から参加申し込みやプロフィールの作成が可能です。
参加する方で、まだ連絡先を教えていただいていない方や、プロフィールを作ってくださる方はこちらを利用して下さい。
既に詳しくご連絡下さっている方も新しく質問項目を設けておりますので、お時間のある時手続きを行って頂けると幸いです。
(直にメールを送っていただいても結構です→dixqhp@gmail.com)
「研究会掲示板」
では研究会についての雑談やお知らせなどを書き込んでいます、こちらもご覧下さい。
「メンバー紹介」
にて、参加メンバーの紹介をしています。
参加申請したのに、載っていない場合や、参加申請した覚えが無いのに載っているような場合は一度ご連絡下さい。
まだ後12名参加可能ですので、もし興味ある方は気軽にご参加下さい!
完全リスナーでの参加ももちろんOKですので、専門的知識が無い方でも大歓迎です!
参加出来なくなった方は早めにご連絡頂けると幸いです。
556ポイント を手に入れた。
|
|
|
|
Name: RYU2 ..入門者(4,281ポイント)
Date: 2009/02/14(土) 13:05
No:28755
|
|
Title: Re:☆3/7[大阪開催] 研究会の詳細 その2☆
|
|
先日連絡したとおり、3/7は学年末試験と重なっているので参加できません^^;
よろしくお願いします。
2ポイント を手に入れた。
|
|
|
|
|
Name: YuO ..プログラマー(29,530ポイント)
Date: 2009/02/14(土) 23:22
No:28775
|
|
Title: Re:☆3/7[大阪開催] 研究会の詳細 その2☆
|
|
えーっと,3/7は無理です。そうそう関西まで足を運ぶことは難しいです……。
当日,ustream等による中継はできませんかね。
それなりの準備が必要になってしまうとは思いますが……。
94ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(989,828ポイント)
Date: 2009/02/15(日) 00:06
No:28777
|
|
Title: Re:☆3/7[大阪開催] 研究会の詳細 その2☆
|
|
あ、すみません、[関東]に分類されている方は、関東で開催した時に参加してくださる方々ということです^^;
もちろんまだ関東での日程は決まっていませんから、「予定があえば参加するつもり」という方ということです。
紛らわしかったですね、ごめんなさい><
tkさんは、関西の会合に出席されないと仰っていたので、関西大会でのグループ以外になってしまいました。
関西で開催する時は参加されます?
56ポイント を手に入れた。
|
|
|
|
|
Name: tkmakwins15 ..比類無きプログラマー(94,242ポイント)
Date: 2009/02/15(日) 00:30
No:28779
|
|
Title: Re:☆3/7[大阪開催] 研究会の詳細 その2☆
|
|
関西って関西の会合に参加できるか?という意味だったのですね。
うーん、高校生の間は参加できないと思います。ほとんど休みがないんです。今週はまだましですが…、ひどいときには一週間休みなしで…(模試などが続くとこうなります。3/7も模試の可能性が…)
34ポイント を落としてしまった。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(989,993ポイント)
Date: 2009/02/15(日) 16:13
No:28824
|
|
Title: Re:☆3/7[大阪開催] 研究会の詳細 その2☆
|
|
tkさんって確か高1でしたよね?高1の頃からそんなに毎週模試あるなんて大変ですね〜^^;
私は高校の時は朝から晩までテニスしかしてませんでしたよ。
夏休みなんて始発で行って終電で帰ってましたしね〜^^;
そんな私も今では全く運動しなくなって24にして体は既にご老体・・orz
92ポイント を手に入れた。
|
|
|
|
Name: cou ..ぴよぴよ(366ポイント)
Date: 2009/02/14(土) 19:58
No:28761
|
|
Title: 静的変数取り過ぎ?
|
|
早速ですが質問です
VistaでVC++2008 Express Editionを使っています
コンパイルはできるのですがプログラムを実行すると必ず同じところで止まってしまいます
スムースに動くときもあるので、原因はどこか、少しずつプログラムを変えていたら
スムースに動くときのプログラムに静的変数をひとつでも増やすと同じところで止まってしまうバグが出ています
それ以上静的変数さえ取らなければどんな処理をしてもプログラムは動いてくれます
静的変数をそれ以上取ること自体に問題があるようです
静的変数はどこで取ろうが(メイン関数で取ろうが別の関数で取ろうが)
スムースに動くときのプログラムにひとつでも付け足すとプログラムの実行があるところで中断されてしまいます
静的変数はその変数を使わないでも宣言するだけでバグがでます
まさか静的変数を取れる上限なんてあるわけないと思うのですが、何か考えられることはありますか・・・
単にプログラムのどこかとの相性が悪いだけでしょうか・・・
よろしくお願いします
366ポイント を手に入れた。
|
|
|
|
Name: cou ..ぴよぴよ(467ポイント)
Date: 2009/02/14(土) 20:55
No:28763
|
|
Title: Re:静的変数取り過ぎ?
|
|
そうおっしゃられるということはやはりあまり一般的でなくおかしいことなのですね・・・
たしかにコードを公開し、優れた方にデバッグしてもらえば、
原因究明はすばやく済みそうですが、よければ経験から推測してもらえないでしょうか
まずは与えられた助言から自分で何とかしてみたいと思っています
勝手は承知ですが御寛恕願います
101ポイント を手に入れた。
|
|
|
|
|
Name: cou ..ぴよぴよ(523ポイント)
Date: 2009/02/14(土) 21:29
No:28765
|
|
Title: Re:静的変数取り過ぎ?
|
|
こんなに身勝手に質問しているのにご回答ありがとうございます
プログラムの動き的にそうかもしれません
心当たりあるところがあるので調べてみます
56ポイント を手に入れた。
|
|
|
|
|
Name: cou ..ぴよぴよ(561ポイント)
Date: 2009/02/14(土) 22:25
No:28770
|
|
Title: Re:静的変数取り過ぎ?
|
|
御津凪さんからの助言をもとにスタックサイズを変更してみました
プロジェクトのプロパティ→リンカ→システムで最初スタックサイズが0だったので
20MByteまで増やして実行してみましたがだめなようです
不思議な点としては、調べたところスタックサイズはデフォルトでは1MByteだということですが自分のは0だったことです
これおかしいのでしょうか・・・
ただ、スタックオーバーフロー、調べてみると、どうも自分のプログラムはその条件に似通ってるんですよね
サブルーチン内でわりと大きい配列取ってたり、無限ループはしてないけれども、比較的長いループをやってたり
一度、プログラムが暴走してVistaのセキュリティが反応したんですけど(システムに上書きされないように強制終了しました的な)、こういうことから何かわかりますかね・・・
調べているうちにそれこそスタックオーバーフローっぽいなぁって思ったんですけど
最初が0だったので、どれくらい大きくスタックサイズを取ったらいいかもわからず
20MByte程度でやめといたんですがどれくらいを指標にしたらいいんでしょう
これくらい取ってもプログラムが不正終了するなら別なところが原因かも・・・っていう基準値みたいなのありますか
2倍のポイントを手に入れた! 38ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(316,556ポイント)
Date: 2009/02/14(土) 23:09
No:28773
|
|
Title: Re:静的変数取り過ぎ?
|
|
止まった時の直接的な原因は何なのでしょう(OSが何故そこで止めたのか、です)?
又、その止まったときの情報は何かありませんか?
全コードは提示できなくても、その停止したときの詳細情報があれば何かしら
推測を立てやすいのですが、今のままではただの当てずっぽうでしかないので、
解決までに時間がかかってしまいます。
で、当てずっぽうで話をしますが、何らかの(メモリ配置に起因する)
潜在的なバグが有って、静的変数の数に関係なく今まで偶然動いていただけ
なのかもしれません。
現時点での情報からできることは、ポインタ系や配列など、
特に「サブルーチン内でわりと大きい配列」を使っているところで
用意した領域以上にプログラムがアクセスをしていないかを調べてみて下さい。
その他、ビルド時の設定で、バッファセキュリティチェックと
ランタイムチェックを有効にしてビルド・実行してテストすることと
あとは、malloc/newなどを多用しているのであれば、
ttp://msdn.microsoft.com/ja-jp/library/5at7yxcs(VS.80).aspx
の関数を使ってヒープの整合性チェックをするのもいいかと思います。
>これくらい取ってもプログラムが不正終了するなら別なところが
>原因かも・・・っていう基準値みたいなのありますか
1MBもあれば普通は十分です。むしろ多すぎるくらいです。
450ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(134,954ポイント)
Date: 2009/02/14(土) 23:10
No:28774
|
|
Title: Re:静的変数取り過ぎ?
|
|
どれだけ状況を詳しく書かれても、
どのように修正すればよいかは
ソースコードを見ないとたぶんわからないです。
ソースコードを開示していただけない現状では、
いくらやりとりしても解決に至らないと思います。
少なくとも私には無理です。
しかし、世の中には、ソースコードを見なくても
問題を解決できる人がいるかもしれません。その人に期待してください。
173ポイント を手に入れた。
|
|
|
|
|
Name: cou ..かけだし(1,443ポイント)
Date: 2009/02/15(日) 00:26
No:28778
|
|
Title: Re:静的変数取り過ぎ?
|
|
スタックオーバーフローについてもう少し調べてみたところよく起こる状況として再起関数を使っているときが
主なようですが自分のプログラムには再起処理はどこにも実装してないのでしばらく悩んでいました
Justyさん
>止まった時の直接的な原因は何なのでしょう(OSが何故そこで止めたのか、です)?
>又、その止まったときの情報は何かありませんか?
不正終了したときは動作が停止しましたとだけしかOSからメッセージが返ってこず、よくわかりません
>で、当てずっぽうで話をしますが、
御津凪さんもですが、自分の身勝手に付き合っていただき本当ありがとうございます
>何らかの(メモリ配置に起因する)
>潜在的なバグが有って、静的変数の数に関係なく今まで偶然動いていただけ
>なのかもしれません
ここまでくると、もう自分の力では解決できないように思います
>用意した領域以上にプログラムがアクセスをしていないかを
サブルーチン内のわりと大きな配列は2次元配列ですがそれでも200*2程度です
さらにその配列は静的に宣言しており、初期値を与えてあります
その配列を上書きするようなことはありませんのでバッファオーバーフローのようなことはないと思います
>その他〜
確認してみましたが、初期設定の状態で、おっしゃられている状態になっており、きちんとビルドしているようです
また、ヒープからのメモリ確保は行っておらず(というかやり方がわからない)、mallocもせいぜい1,2箇所、
プログラムも700行程度です
分割コンパイルは行っていません(これもやり方がわからない)
>1MBもあれば普通は十分です。むしろ多すぎるくらいです
しっかりとコーディングできていればそうなのですね・・・
boxさん
おっしゃられていることはごもっともだと思います
さらに、もう少し具体的に問題を挙げられればいいものを、
そうできない自分自身の力のなさも重々承知のうえ、このように身勝手な質問をし、
さらにお付き合いいただいていることにはもう本当に申し訳なく、と同時に(それでもご回答いただき)ありがたく思っています。
>ソースコードを開示していただけない現状では、
>いくらやりとりしても解決に至らないと思います。
助言をもとに自身で尽力し、それでどうしようもないなら
(そのときまだお付き合いいただけるかは当然別な問題でありますが)、
コードをいくらか綺麗にしたあと公開しようかと思います
882ポイント を手に入れた。
|
|
|
|
|
Name: cou ..かけだし(1,547ポイント)
Date: 2009/02/15(日) 00:38
No:28780
|
|
Title: Re:静的変数取り過ぎ?
|
|
tkmakwins15さん
>この配列の宣言を見せてください。型が構造体などの場合、sizeof(型)も見せてください。
const static TCHAR ref[80][2] = {TEXT("あ"),.....,TEXT("ん")};
とし、後は同様な宣言を他に3つ行っています
104ポイント を手に入れた。
|
|
|
|
|
Name: cou ..かけだし(1,726ポイント)
Date: 2009/02/15(日) 01:00
No:28781
|
|
Title: Re:静的変数取り過ぎ?
|
|
あまり参考にならないと思いますが、追加でわかったことを書きます
staticと宣言すれば型はなんであろうが(int, double, HANDLE etc...)、
プログラム実行時は不正終了します
デバッグモードでビルドするとこの症状がでますが
リリースモードでビルドすると症状は回避できます
デバッグモードとリリースモードのビルド時の設定はランタイムライブラリをマルチスレッドデバッグDLLにするか
マルチスレッドにするかの違いだけです
179ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(316,512ポイント)
Date: 2009/02/15(日) 01:00
No:28782
|
|
Title: Re:静的変数取り過ぎ?
|
|
>不正終了したときは動作が停止しましたとだけしかOSからメッセージが返ってこず、よくわかりません
えーと、VisualStudioで作っているのですよね?
デバッガからは何か情報は得られないのでしょうか?
>const static TCHAR ref[80][2] = {TEXT("あ"),.....,TEXT("ん")};
ん?
ref[80][3]の間違いでは?
44ポイント を落としてしまった。
|
|
|
|
|
Name: tkmakwins15 ..比類無きプログラマー(94,467ポイント)
Date: 2009/02/15(日) 01:07
No:28783
|
|
Title: Re:静的変数取り過ぎ?
|
|
原因が分かりましたよ。
TEXT("あ")を展開すると…
#ifdef UNICODE
#define TEXT(Q) L##Q
#else
#define TEXT(Q) Q
#endif
なので、もしUNICODEが定義されていない(TCHARをcharとして扱う)ならば、
char ref[2]="あ";//簡略化します。
という宣言をしていることになりますが、VCであれば、ひらがなは2バイトとして扱われますから、
"あ"
は、終端の\0も含めて3バイト必要です。
ですから、
const static TCHAR ref[80][2] = {TEXT("あ"),.....,TEXT("ん")};
は、
const static TCHAR ref[80][3] = {TEXT("あ"),.....,TEXT("ん")};
である必要があります。
225ポイント を手に入れた。
|
|
|
|
|
Name: cou ..かけだし(1,968ポイント)
Date: 2009/02/15(日) 01:43
No:28786
|
|
Title: Re:静的変数取り過ぎ?
|
|
Justyさん
>えーと、VisualStudioで作っているのですよね?
>デバッガからは何か情報は得られないのでしょうか?
Visual C++ 2008 Express Editionで開発しています
デバッグして実行、のことですか
リソースファイルがあるのですがデバッグして実行すると
リソースファイルが読まれず、よくわからないので、Debugフォルダに出来た実行ファイルを実行しています
>ref[80][3]の間違いでは?
>多分書きミス、しただけだと思いますよ
すみません、書きミスではないです、プログラムに実際にそのように記述しています
また、コンパイルは2バイトでも通ったようです
tkmakwins15さん
詳しい解説ありがとうございます
ご指摘されたことをもとに当箇所とそれに付随するところを修正しましたが、改善されませんでした
たかぎさん
>C++ならそうですが、Cなら2バイトで済みます。
ご指摘のとおり自分はプログラムは .c で作成しています
242ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(317,030ポイント)
Date: 2009/02/15(日) 01:51
No:28787
|
|
Title: Re:静的変数取り過ぎ?
|
|
>また、コンパイルは2バイトでも通ったようです
>すみません、書きミスではないです、プログラムに実際にそのように記述しています
すみません、勝手に C++だと思っていました。
>リソースファイルが読まれず、よくわからないので、Debugフォルダに出来た実行ファイルを実行しています
リソースファイルというのは、外部ファイルとしてアプリから読み込む
ファイルのことでしょうか?
であればそのリソースファイルを slnファイルと同じディレクトリに配置するか、
プロジェクトのプロパティで「構成プロパティ -> デバッグ」の中の
「作業ディレクトリ」にリソースファイルのある場所を指定して下さい。
(slnファイルのある場所からの相対パスか、絶対パスで)
これで普通にデバッグで実行できるようになるはずなので、
止まったときに何かしらの情報を得られると思います。
425ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(84,458ポイント)
Date: 2009/02/15(日) 01:52
No:28788
|
|
Title: Re:静的変数取り過ぎ?
|
|
結局ソースを提示しなければまともな回答は得られないと思います。
一番可能性が高いのは、バッファオーバーランかポインタ演算を間違って変なところを破壊しているのが原因ではないかと思います。
たまたま動いていたものが、静的変数をひとつでも増やすとメモリ配置が変わって、問題が顕在化するのでしょう。
140ポイント を手に入れた。
|
|
|
|
|
Name: cou ..かけだし(2,149ポイント)
Date: 2009/02/15(日) 02:04
No:28790
|
|
Title: Re:静的変数取り過ぎ?
|
|
たかぎさん
>一番可能性が高いのは、バッファオーバーランかポインタ演算を間違って変なところを破壊しているのが原因ではないかと思います。
>たまたま動いていたものが、静的変数をひとつでも増やすとメモリ配置が変わって、問題が顕在化するのでしょう。
なるほど
そういった問題があるのですね
何度もやったのですが、今一度プログラムを順をおって見ていき、だめそうなら(だめだろうけど)、
ある程度綺麗にしてソースを公開しようと思います
>あと、マルチスレッドとかだと、もっといろいろな原因が考えられます。
スレッド数は少ないですが(プロシージャともうひとつ)、マルチスレッドです(泣
181ポイント を手に入れた。
|
|
|
|
|
Name: cou ..かけだし(2,332ポイント)
Date: 2009/02/15(日) 02:34
No:28791
|
|
Title: Re:静的変数取り過ぎ?
|
|
Justyさん
初めてデバッグして実行をしたので読み解くのに時間かかりました(結局読み解けませんでした)
そして、参考になるかわかりませんが、不正終了時に以下のようなメッセージが出ています
MyGame.exeの 0x629c6a83 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x535ba25c を読み込み中にアクセス違反が発生しました。
とりあえず、デバッグして実行を覚えたので、できるかぎり自分でがんばってみようと思います
183ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(317,243ポイント)
Date: 2009/02/15(日) 03:12
No:28794
|
|
Title: Re:静的変数取り過ぎ?
|
|
>MyGame.exeの 0x629c6a83 でハンドルされていない例外が発生しました:
>0xC0000005: 場所 0x535ba25c を読み込み中にアクセス違反が発生しました
おかしなところで、おかしなメモリを読みにいって落ちているように見えますね。
可能性はいろいろありますが、一番高そうなのがスタックを破壊していることです。
例えばローカル変数の配列をオーバーして書き込みをするとよく起こります。
もしそうだとすれば、確実ではないですが基本ランタイムのチェックを有効にして
ビルド・実行すれば見つけられる可能性があります。
もしよければお試し下さい。
>できるかぎり自分でがんばってみようと思います
頑張って下さい!
213ポイント を手に入れた。
|
|
|
|
|
Name: cou ..入門者(2,880ポイント)
Date: 2009/02/15(日) 04:23
No:28796
|
|
Title: Re:静的変数取り過ぎ?
|
|
Justyさん
>可能性はいろいろありますが、一番高そうなのがスタックを破壊していることです。
>例えばローカル変数の配列をオーバーして書き込みをするとよく起こります
まさにこの通りだったのかと思います
デバッグしながら実行すると、どこが悪かったか矢印がでるのですね
最初は下にあるメモリ番地ばかり見ていてわけがわかりませんでしたが
プログラムを見てみると左側にちょこんと矢印が出ていました
そこを確認したところあまりよく理由はわかっていないのですが
どうも散々指摘されていたバッファオーバーランのようで、配列を大きく取ると症状は改善されました
構造体にメンバを4つ用意しておりそのメンバを、ひとつの配列につなげて格納したく、
wcscat_sを使ってつなげていたのですが、格納先の配列をconcMember[50]とすると
// ダメなプログラム
struct _tagPageInfo {
TCHAR content1[10];
TCHAR content2[10];
TCHAR content3[10];
TCHAR content4[10];
} PageInfo;
PageInfo *page;
<中略>
(関数内部)
TCHAR concMember[50];
wcscat_s(concMember, 50, page->content1);
wcscat_s(concMember, 50, page->content2);
wcscat_s(concMember, 50, page->content3);
wcscat_s(concMember, 50, page->content4);
<以下省略>
// ダメなプログラムここまで
// 変更してとりあえず動いてるプログラム
<省略>
(関数内部)
TCHAR concMember[200];
wcscat_s(concMember, 50, page->content1);
wcscat_s(concMember, 50, page->content2);
wcscat_s(concMember, 50, page->content3);
wcscat_s(concMember, 50, page->content4);
<以下省略>
としていて、メンバはひとつが大きさ10なので50あればいいだろうと思っていたのですがだめだったようです
また、上記のようなことができるならこうすればいいのかと以下を試してみましたが
// 変更してもダメなプログラム
<省略>
(関数内部)
TCHAR concMember[50];
wcscat_s(concMember, 10, page->content1);
wcscat_s(concMember, 10, page->content2);
wcscat_s(concMember, 10, page->content3);
wcscat_s(concMember, 10, page->content4);
<以下省略>
これはだめでした
concMemberを200にするととりあえずは改善されたのですが、これは、根本的な解決法になっているでしょうか
(なっていないような気がする)
しかし実際に、メンバの大きさは10で、つないでもせいぜい40なので200もいらず、少し不恰好な状況です
普通、このように文字列をつなぎたい場合、どういったプログラムを組むことが理想なのですか
とりあえず、質問のバグに関して症状が(一時的であるかもしれないけれども)改善されたので、ご報告と思いまして
548ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(135,165ポイント)
Date: 2009/02/15(日) 09:14
No:28803
|
|
Title: Re:静的変数取り過ぎ?
|
|
msdnのリファレンスから引用
>errno_t wcscat_s(
> wchar_t *strDestination,
> size_t numberOfElements,
> const wchar_t *strSource
>);
>
>パラメータ
>strDestination
>null で終わる追加先の文字列バッファ。
>
>numberOfElements
>追加先の文字列バッファのサイズ。
>
>strSource
>null で終わる元の文字列バッファ。
>
> 戻り値
>正常終了した場合は 0 を返します。失敗した場合はエラー コードを返します。
第3引数は、間違いなく'\0'で終端しているでしょうか?
また、戻り値はいくつでしょうか?
調べてみてはいかがでしょう。
211ポイント を手に入れた。
|
|
|
|
|
Name: cou ..入門者(2,642ポイント)
Date: 2009/02/15(日) 12:38
No:28807
|
|
Title: Re:静的変数取り過ぎ?
|
|
boxさん
ご回答ありがとうございます
>第3引数は、間違いなく'\0'で終端しているでしょうか?
>また、戻り値はいくつでしょうか?
一応、第3引数は終端文字は入っているようです
戻り値も正しいようです
変更してもダメなプログラムの方をデバッグしながらメモリの状態を確認していたのですが
どうも配列をある一定の大きさ以下にとるとおかしくなるようです
おかしくなるとは、concMemberは書き忘れましたがstaticで宣言していて、後の方で
for(j=0;j<200;j++) concMember[j] = 0;
と、リフレッシュ?している(つもり)のですが、どうもこれが配列をある一定の大きさ以下にとると
完全にリフレッシュされないまま
(ちょうどこの問題の関数のところはもうひとつのスレッドに依存しているので)新たなPageInfo構造体のメンバがやってくるようです
ある大きさ以上、ならリフレッシュ処理が追いついていないのかと疑うつもりでしたが
ある大きさ以下(この場合concMember[200]ではいいのですが[50]はダメなので)、なので原因を追求しています
手っ取り早く済ますには別なところで処理するか
つなぎ方をかえたりしたほうがいいのかといろいろ模索しています
238ポイント を落としてしまった。
|
|
|
|
|
Name: cou ..かけだし(2,387ポイント)
Date: 2009/02/16(月) 01:03
No:28844
| 解決!
|
Title: Re:静的変数取り過ぎ?
|
|
こんばんは
デバッグにハマっています
デバッグのやり方を覚えたので、手探りでですがいろいろと試しているところです
デバッグをしながらコードを見つめなおすことで新しい発見があったりしているので、
今のところ、自分の力だけでもずいぶん出来ることが増えました
以前はプログラムを走らせて異常があればプログラムを一から全部見直していたので、
何度もコードを変えたりしてそれでもダメで疲れ果ててしまっていたのですが、
デバッガの力を借りることである程度持久力がついてきました
質問の件は、上述したとおりまだまだ自分で出来ることがあるので、しばらく様子を見させてください
出来ることをやってそれでもダメならまた質問させてもらいます
今回、ご助力くださったみなさま、すごく親切にしていただき、嬉しかったです
ありがとうございました
特にデバッグのやり方を教えてくれたJustyさんには深く感謝しています
ありがとうございました
たぶんまた質問にくるので、そのときはよろしくお願いします
255ポイント を落としてしまった。
|
|
|
|
|
Name: たいちう ..上級者(24,377ポイント)
Date: 2009/02/16(月) 12:56
No:28858
|
|
Title: Re:静的変数取り過ぎ?
|
|
スレッドを全部読んではいないので、
同じアドバイスを受けているかもしれませんが、、、
原因と結果を勘違いしないように。
『「静的変数を追加」をするかしないかで、
実行時エラーが発生したりしなかったりする』
という結果の認識はまぁ良いのですが、
原因を「静的変数を追加」だけに求めるのは早計です。
別の所に原因があって、「静的変数を追加」することにより、
それが発覚するのかもしれません。
件の静的変数は残しておいて、プログラムの他の部分を削るとどうなるでしょうか?
208ポイント を手に入れた。
|
|
|
|
|