|
Name: moco ..ぴよぴよ(17ポイント)
Date: 2008/12/21(日) 22:28
No:25907
|
|
Title: BGMを流そうとすると
|
|
テトリス風の落ちものパズルゲームをDXライブラリを利用して作っているのですが
その際にBGMを流そうと思い、以下のように記述を行ったのですが
非常にメモリを使ってしまいます。
(BGM未使用の時は20000KB程度だったのが、使用したとたん一気に100000KBも占有してしまったり)
1分程度のループ音源でファイルサイズは700KB程度なのですが、これは仕方ないことなのでしょうか?
if(level != bgm_check){
if(CheckSoundMem(bgm)){
StopSoundMem(bgm);
DeleteSoundMem(bgm);
}
sprintf(str,".\\data\\bgm\\%d.ogg",level);
bgm =LoadSoundMem(str);
PlaySoundMem(bgm, DX_PLAYTYPE_LOOP);
bgm_check = level;
}
17ポイント を手に入れた。
|
|
|
|
Name: moco ..ぴよぴよ(0ポイント)
Date: 2008/12/22(月) 02:26
No:25919
| 解決!
|
Title: Re:BGMを流そうとすると
|
|
親切に答えていただきありがとうございます。
提案していただいた通り、効果音は事前にメモリに展開し
以後のBGMで扱う音声ファイルを教えていただいた関数で
必要な分だけリアルタイムで変換するようにした結果大分メモリの占有量が低下しました。
散々悩んでましたので大変助かりました。
本当にありがとうございました。
129ポイント を落としてしまった。
|
|
|
|
Name: J ..上級者(16,495ポイント)
Date: 2008/12/21(日) 19:00
No:25896
|
|
Title: int→char
|
|
DXのFileRead_open関数を用いてファイルを開こうと考えているのですが、
ファイル名を指定するにはchar型の文字列でないといけない・・・
私としては名前+連番.拡張子をfor文などで一気に開きたいのですが・・・
何か方法はありますか?リテラル文字列とかchar配列は苦手です><
129ポイント を手に入れた。
|
|
|
|
Name: J ..上級者(16,611ポイント)
Date: 2008/12/21(日) 21:04
No:25903
|
|
Title: Re:int→char
|
|
ありがとうございます!
リンク先をひょいっと見ましたがこれなら・・・
ところでワイド文字列って何でしょうか・・・?
2倍のポイントを手に入れた! 116ポイント を手に入れた。
|
|
|
|
Name: DIL ..入門者(4,359ポイント)
Date: 2008/12/21(日) 21:28
No:25904
|
|
Title: Win32API
|
|
ビットマップの描画について質問です。
BitBltを使って描画したのですが画像が、作成したウィンドウ上ではなく別の場所に描画されてしまいます。
どこが間違っているのかわからないので、どなたか助けてください。
使用したソースファイルとビットマップは添付しておきます。
開発環境は
WindowsVista HomePremium SP1
VisualC++2008
です。
157ポイント を手に入れた。
|
|
|
|
Name: たいちう ..上級者(17,994ポイント)
Date: 2008/12/21(日) 21:45
No:25905
|
|
Title: Re:Win32API
|
|
まず、WndProc。
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){
PAINTSTRUCT paint;
HDC hdc;
switch(msg){
(略)
case WM_PAINT://描画するとき
hdc = BeginPaint(hWnd, &paint);
DrawMain(hdc);
EndPaint(hWnd, &paint);
break;
次に、DrawMainとDrawPrayer(スペルミスですよ)。
void DrawMain(HDC hdc){
DrawPrayer(hdc);
};
void DrawPrayer(HDC hdc){
BitBlt(hdc,100,100,48,48,hCompateDC,0,0,SRCCOPY);
};
使っているのは、staticのhDCではなく、WndProcのローカルのhdcです。
私ならば、hDCは削除かな。
200ポイント を手に入れた。
|
|
|
|
|
Name: DIL ..入門者(4,305ポイント)
Date: 2008/12/21(日) 22:20
No:25906
|
|
Title: Re:Win32API
|
|
回答ありがとうございます。
hDCにかかわるところをいじっていたらどこをどう直せばいいのかわからなくなってきました。
loadの中身も訂正しないとダメですよね?
主にそこがわかりません。
すみませんが訂正したコードを添付していただけないでしょうか。
54ポイント を落としてしまった。
|
|
|
|
|
Name: たいちう ..上級者(18,023ポイント)
Date: 2008/12/21(日) 22:39
No:25910
|
|
Title: Re:Win32API
|
|
> loadの中身も訂正しないとダメですよね?
違いますよ。私が変更したところは、既に書いたところの他は、
DrawMainとDrawPrayerの宣言のみです。
29ポイント を手に入れた。
|
|
|
|
|
Name: DIL ..入門者(4,473ポイント)
Date: 2008/12/21(日) 23:06
No:25912
|
|
Title: Re:Win32API
|
|
ありがとうございます。
おかげさまで、できました。
>私ならば、hDCは削除かな。
とありますが、hDCを削除した場合はload関数内を変更しないとコンパイルできませんが、
その場合はどのように書き換えればいいのですか?
あと、もうひとつ疑問が出てきたのでついでに質問します。
ゲーム等を作るときには画像データをたくさん描画しますけど、それらの画像はそれぞれの
デバイスコンテキストとかメモリデバイスコンテキストを用意しないとだめなんですか?
168ポイント を手に入れた。
|
|
|
|
|
Name: たいちう ..上級者(18,566ポイント)
Date: 2008/12/22(月) 00:07
No:25914
|
|
Title: Re:Win32API
|
|
これで解りますか?
case WM_CREATE://ウィンドウが作成されたとき
hdc = GetDC(hWnd);//描画先となるウィンドウに対するデバイスコンテキストハンドルを取得
load(hdc);
ReleaseDC(hWnd,hdc);//ウィンドウのデバイスコンテキストハンドルを解放
break;
void load(HDC hdc){
//自機の画像をロード
img_ch = (HBITMAP)LoadImage(NULL,TEXT("0.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
if(img_ch == NULL){//ロードの確認
MessageBox(hWnd,"ロードに失敗しました。","エラー",MB_OK | MB_ICONWARNING);
return 0;
};
hCompateDC = CreateCompatibleDC(hdc);//メモリデバイスコンテキストハンドルを作成
himg_ch = SelectObject(hCompateDC,img_ch);//ロードしたビットマップを選択
}
ReleaseDCはWM_DESTROYから移動させています。
それと今気付きましたが、関数の最後の"}"の後に";"は不要です。
クラスや構造体の定義の場合と間違えていませんか?
ちょっと手元に資料が見当たらないのですが、HDCは必要なときにGetDCやBeginPaintで
取ってくるものだったと思います。EndPaintやReleaseDCはその対ですので、そばに書きたい。
処理の出発点はメッセージループですので、私の場合、WndProc内でHDCを取得することが
多いです。描画などの関数を呼ぶときは、HDCのインスタンスを引数で渡します。
ここに描いてね、という感じで。
私はWinAPIは殆ど趣味でしか使わず、HDCの扱い方も全くの我流ですので、
あまり参考にされないほうが良いのかもしれません。
ゲームでの画像の扱い方についても、ケースバイケースじゃないの?としか言えません。
ゲームの入門書を何冊か読んだ程度ですし、私の作るWinAPIのプログラムで、
そんなに多くの画像データが必要になることはありませんでした。
まぁ、これについては、管理人さんを始めとして経験豊かな方が多いようですので、
その方々の回答を待ちましょう。
543ポイント を手に入れた。
|
|
|
|
|
Name: DIL ..入門者(4,563ポイント)
Date: 2008/12/22(月) 00:32
No:25915
| 解決!
|
Title: Re:Win32API
|
|
>これで解りますか?
はい、わかりました。
>クラスや構造体の定義の場合と間違えていませんか?
"}"のあとは";"がいるものだと思ってました。
たいへん助かりました。本当にありがとうございました。
90ポイント を手に入れた。
|
|
|
|
Name: MEME ..ぴよぴよ(11ポイント)
Date: 2008/12/21(日) 16:38
No:25891
|
|
Title: VC++の設定
|
|
パソコンを再インストールし改めてVC++をインストールしたのですが
コンパイルエラーが出まくって困っています。
おそらくDirectXのlibとインクルードファイルの設定が間違っているのだと思いますがどうしたらいいか・・
使用しているものはMicrosoft Visual C++ 2005 Express Edition、DirectX9bSDK、PratformSDKです
オプションのVC++ディレクトリで
インクルードファイルの一番上から
C:\Program Files\Microsoft Platform SDK\Include
C:\Program Files\Microsoft Platform SDK\Include\mfc
C:\Program Files\Microsoft Platform SDK\Include\atl
C:\DXSDK\Include\DShowIDL
C:\DXSDK\Include
ライブラリファイルは
C:\Program Files\Microsoft Platform SDK\Lib
C:\DXSDK\Lib
としています
エラーは一部ですが
未解決の外部シンボル __imp__MessageBoxA@16 が参照されました。未解決です。
未解決の外部シンボル __imp__DeleteObject@4 が参照されました。未解決です。
という感じです。よろしくお願いします。
11ポイント を手に入れた。
|
|
|
|
Name: Justy ..ハッカー(290,084ポイント)
Date: 2008/12/21(日) 17:59
No:25893
|
|
Title: Re:VC++の設定
|
|
どちらかといえば、PratformSDKです。
user32.lib/gdi32.libがリンクされていないのではないでしょうか。
PratformSDKの libディレクトリへのパスが正しいかどうか、
ファイルが正しく存在するかどうか、プロジェクト側でリンク指定を
しているかどうか確認してみて下さい。
73ポイント を手に入れた。
|
|
|
|
|
Name: MEME ..ぴよぴよ(92ポイント)
Date: 2008/12/21(日) 18:20
No:25894
|
|
Title: Re:VC++の設定
|
|
両方のファイル共にありました。
パスもあっていましたが、プロジェクト側でのリンク指定とはどういういみでしょうか?
再インストールする前のソースなのでソース自体は変える必要ないと思っていたのですが、
どうなのでしょうか?
81ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(290,482ポイント)
Date: 2008/12/21(日) 19:38
No:25897
|
|
Title: Re:VC++の設定
|
|
>再インストールする前のソースなのでソース自体は変える必要ない
基本的にはないはず、なんですけどね。
インストール時に何かのパスが変わってしまったとか
設定が変わってしまったのだとは思いますが、正確にはわかりません。
>パスもあっていましたが、プロジェクト側でのリンク指定とはどういういみでしょうか
では試しに、ソースコードのどこかに
#pragma comment(lib, "user32.lib")
#pragma comment(lib, "gdi32.lib")
と書いてビルドしてみて下さい。
これでうまくリンクできないようでしたら、PratformSDKへのパスに問題がありそうです・
反対にうまくリンクできるようですと、プロジェクトの設定に問題があることになります。
プロジェクトのプロパティから「構成プロパティ -> リンカ -> 入力」の中の「追加の依存ファイル」の
右側の欄を1回クリックすると、右端に ...のボタンが現れると思います。
これをクリックすると、「追加の依存ファイル」ダイアログが現れますが、
ここ(編集可能な)上の欄と(編集不可の)下の欄のどちらかに user32.lib/gdi32.libが
あるかどうか確認して下さい。
多分ないはずです。
なければ、上の欄に1行ずつライブラリの名前を記述してOKボタンを押しダイアログを閉じて
もう1度ビルドしてみて下さい。
これでどうなりますでしょうか?
398ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(290,601ポイント)
Date: 2008/12/21(日) 19:43
No:25898
|
|
Title: Re:VC++の設定
|
|
あ、「追加の依存ファイル」ダイアログの下の欄にライブラリの名前が入っているようでしたら、
「親またはプロジェクトの既定値から継承する」のチェックボックスがどうなっているかを確認して下さい。
ここにチェックが入っていなければ付けてビルドしてみて下さい。
119ポイント を手に入れた。
|
|
|
|
Name: s-rush ..初心者(7,200ポイント)
Date: 2008/12/18(木) 21:57
No:25845
|
|
Title: マップの作り方。
|
|
いつもお世話になってます。前回のアドバイスのおかげで、無事に戦闘システムの
プログラムを完成させることができました。
次はマップ系のプログラムを作ろうとしているのですが、どのように作ればよいのかよくわかりません。
自分でも調べてはみたのですが、
map[5][5]={{1, 1, 1, 1, 1},
{1, 1, 2, 2, 2},
{1, 1, 2, 1, 1},
{1, 1, 2, 1, 1},
{1, ,1 2, 1, 1}};
のような配列を用意して初期化。
対応する数値のマップチップ?を読み込んで表示させる、
というものがほとんどでした。
その表示させるプログラムのサンプルがなかったので、
どのように表示するのかが、分かりませんでしたが・・・
小さなマップ(建物の中など)であればこのようなやり方でもいいのでしょうが、
大きなマップ(フィールドなど)となると、このようなやり方ではとても非効率だと思います。
他にもっと効率の良い方法というのはないのでしょうか?
それとも上記のように配列で表現するしかないのでしょうか?
どなたか回答お願いします。
参考になるHPがあれば、教えていただければありがたいです。
290ポイント を手に入れた。
|
|
|
|
Name: s-rush ..初心者(7,308ポイント)
Date: 2008/12/18(木) 22:01
No:25846
|
|
Title: Re:マップの作り方。
|
|
すいません。
どのようなマップを作りたいのかを書くの忘れてました。
ポケモンのゲームを作っているので(完全なパクリですが)、
3Dではなく2Dのマップです。
本当に申し訳ないですが、回答お願いします。
108ポイント を手に入れた。
|
|
|
|
|
Name: たいちう ..上級者(17,576ポイント)
Date: 2008/12/18(木) 22:48
No:25847
|
|
Title: Re:マップの作り方。
|
|
> 他にもっと効率の良い方法というのはないのでしょうか?
> それとも上記のように配列で表現するしかないのでしょうか?
ポケモンのゲームのマップというのは分からないけど、
初期のドラクエのマップのようなもの、と考えてよいのかな?
1000×1000のマップについて、データをint型で持ったとしても4MB。
今時の普通のパソコンならば余裕じゃないですか?
とりあえずこれで作成を進めて、何か問題があるようならば
再度質問されてはいかがですか?もっと具体的に。
もっと効率の良い方法というものは存在しますが、
何をもって効率が良いと定義するかが問題です。
実行時の処理速度とか、メモリサイズとか、ファイルサイズとか。
178ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(288,326ポイント)
Date: 2008/12/18(木) 23:09
No:25850
|
|
Title: Re:マップの作り方。
|
|
>大きなマップ(フィールドなど)となると、このようなやり方ではとても非効率だと思います
でしょうね。
ある程度規模が大きくなったら、ソースコードにマップデータを埋め込むやり方は
プレビューするのにもビルドの手間がかかる分非効率的になります。
作りたいツクール系のようなゲームに合ったマップチップを並べたり作ったりするエディタを
使うか作るかして、そのマップの配列データを外部ファイルとして出力します。
やっぱり、実際に絵を見ながら調整できるのでソースに埋め込むより遙かに効率がよくなります。
ゲーム本体のプログラムはそのデータを読み込んで、データの通り配置・表示するようにすれば
効率よく作業が進められるはずです。
状況とか用途によっては、エディタ機能をゲーム本体の内部にデバッグモードとして
れてしまうこともありますね。
そうすることで、編集・実行が1アプリで完結しますし、内部の何かのアルゴリズムを
変更したときもツールとゲームとを一緒に更新できるというメリットがあります・
ちなみに既存のマップエディタですと、こんなのがあります。
他にも探せばたくさんあるかと思います。
ME MapEditer(Windows95/98/Me / ゲーム)
ttp://www.vector.co.jp/soft/win95/game/se190983.tml
みずやん's Water World■TMapEditer2D
ttp://homepage1.nifty.com/mizu-yan/download/tools/tmap.tml
Map Editor
ttp://www.geocities.com/SiliconValley/Vista/7336/robmpy.htm
マップエディターQuoyle(Windows95/98/Me / ゲーム)
ttp://www.vector.co.jp/soft/win95/game/se386079.tml?site=n
マップエディター ANoME(あのみぃ)(Windows95/98/Me / プログラミング)
ttp://www.vector.co.jp/soft/win95/prog/se222575.tml
EgA(Windows95/98/Me / ゲーム)
ttp://www.vector.co.jp/soft/win95/game/se148524.tml
簡易凡用マップエディター(Windows95/98/Me / 文書作成)
ttp://www.vector.co.jp/soft/win95/writing/se203463.tml
660ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..初心者(7,229ポイント)
Date: 2008/12/18(木) 23:31
No:25851
|
|
Title: Re:マップの作り方。
|
|
早い回答ありがとうございます。
>たいちうさん map[10000][10000]と配列を作って、試みたことはあるのですが、
やはり、プログラムとして書くのも大変ですし、視覚的に分かりにくいので、
もうちょっと作りやすい方法を模索していたんです。
もっと詳しく記載しておくべきでした。
>Justyさん マップの配列データを外部ファイルとして出力するということは、ゲーム本体の
プログラムでfopenを使って読み込めばいいのでしょうか??
>状況とか用途によっては、エディタ機能をゲーム本体の内部にデバッグモードとして
れてしまうこともありますね。
というのはどういうことなんでしょうか?
はじめて聞く手法なので、できたら教えてほしいです。
79ポイント を落としてしまった。
|
|
|
|
|
Name: Justy ..ハッカー(289,502ポイント)
Date: 2008/12/19(金) 00:06
No:25855
|
|
Title: Re:マップの作り方。
|
|
>プログラムでfopenを使って読み込めばいいのでしょうか??
fopenでも fstreamでもいいですが、そうです。
>エディタ機能をゲーム本体の内部にデバッグモードとして
デバッグ用の機能で、ゲームアプリの中にデータを編集する機能を入れてしまう、
ということです(つまり、リリースするときはビルドから外すなど、オフにする)。
もちろん、ゲームとは別に独立したツールを作った方がいいこともありますので、
そのあたりは用途に応じて検討が必要ですが、ゲーム内にツール機能を含めると
ゲームの様々なアルゴリズム・・・RPGならエンカウント・バトル、イベントなど・・・
を完全に共有できるので、
マップを実際に目で確認しながら編集 -> 即実行して実際のキャラで歩いてみる
-> 編集モードに戻り再び気に入らないところを編集 -> 実際に歩く ->エンカウントする
-> 編集モードに戻りエンカウント率が高すぎるので調整する -> 実際に歩いて試す
-> 問題なければ保存
という動作がアプリを終了したり再起動したりすることなく実行できるようになります。
マップエディタに絞って一例を挙げるなら、編集モードON・OFFのフラグを作って
ONの時右クリックしたら、クリックしたところのマップチップが選択状態になり、
コンテキストメニューが出てきて、そのマップチップを別のものに変えたり、削除したり
イベントを埋め込んだり、前後の順番を入れ替えたりするメニューを出すとか。
で、編集モードをOFFにすれば普通にキャラがマップを歩けるようになるので
実際に歩いて確かめる、と。
こんな感じの機能です。
2倍のポイントを手に入れた! 1,176ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..初心者(7,385ポイント)
Date: 2008/12/20(土) 00:08
No:25877
|
|
Title: Re:マップの作り方。
|
|
Justyさん、回答ありがとうございます。
エディタ機能をゲーム本体の内部に組み込んだ方が、編集がしやすそうですね。
ですが、内部にデバッグモードとして組み込むには
何か設定する必要があるのでしょうか?
それともプログラムで制御するのでしょうか?
自分で調べるにもキーワードが分からないので、自力で解決するのは厳しいです。
質問してばかりで申し訳ないですが、お願いします。
開発環境はVC++2008です。
156ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(928,788ポイント)
Date: 2008/12/20(土) 00:31
No:25878
|
|
Title: Re:マップの作り方。
|
|
何か設定とかして外部ツール取り込むとかじゃなく、要はRPGツクールを作ってしまいましょうと言うことだと思います。
RPGツクールってあまり使った事は無いですけど、きっと制作画面で、RPG制作して、プレビュー画面で
どうなったか確認できたりするんだろうと思います。
システムを作るのは大変でしょうが、一度作ってしまえば、それを元にサクサク作れるようになると思いますし、
きっと大規模なゲーム制作はどこの会社も自分達独自のツールを作ってそれを利用しているでしょうし、
恐らくゲーム制作を本格的にするには、もっとも効率の良い方法なんじゃないかと思います。
マップチップを並べてデータ出力する&プレビューを見る位のツールならよくネットで見かけるので、
作るのがめんどうならそういうのも利用してみてはどうでしょう。
まぁ作った方が自分の物になるし、勉強になると思うので、作ってしまうのも良いと思いますが。
361ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(290,011ポイント)
Date: 2008/12/20(土) 03:08
No:25880
|
|
Title: Re:マップの作り方。
|
|
>何か設定する必要があるのでしょうか?
>それともプログラムで制御するのでしょうか?
リリース(リテール)ビルドの時は機能を無効にする、ビルドから外すなどの設定が必要ですが、
基本的にはプログラムで制御ということになります。
というかおおまかに言ってしまえば、普通に外部ツールとして作る場合と
たいして違いはありません。
違うのは本体と一体になっているか別になっているかとツールの起動方法などの
些細な点だけです。
検索して探すなら、普通にゲーム製作ツールの作り方、マップエディタの作り方、的な
ところで探すのがいいでしょう。
しかし、自作でツールを作るのは(ゲーム本体と別に作るか内包するかはともかく)
なかなかは大変で慣れも必要なので、管理人さんも仰っていますが今回は既存のツールを
使って作業を進めた方が早いかと思います。
既存のツールは上記で紹介したいように多数あります。
ケースによっては龍神録でやっているように本来ゲーム以外の用途で使われるソフト、
例えば Excelなどを利用して配置データを記述し、csvで出力してもいいですね。
或いは、画像データそのものをマップ配置データと見なすやりかたもあります。
200x100の広さのマップなら、100ピクセル×100ピクセルの画像を用意し、
その1ピクセル毎の色が、赤なら 0、青なら 1のようにルールを決めてしまえばペイントなどの
画像編集ソフトでも配置データを記述することはできます。
そんなかんじでやり方はたくさんありますので、いろいろ試して s-rushさんの状況に
合った方法を探してみて下さい。
509ポイント を手に入れた。
|
|
|
|
|
Name: J ..上級者(16,262ポイント)
Date: 2008/12/20(土) 22:52
No:25887
|
|
Title: Re:マップの作り方。
|
|
自分のプログラムにデバッグ用としてエディターを組み込むのであれば、
デバッグ用の定数を一つ作ると楽ですよ。
const int DEBUG_MODE = 1;
と言う風に
そうすれば、
if(DEBUG_MODE == 1 && ...etc)
のようにデバッグ時にのみ動作するようにできます
もちろんリリースの時には数字を0などに変えるだけです。
まあ配布されてるフリーソフトを活用された方が楽だと思いますが。。
202ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(42,251ポイント)
Date: 2008/12/21(日) 00:28
No:25889
|
|
Title: Re:マップの作り方。
|
|
自分が今丁度作ってるところですww
RPGツクール(もどき)を自作で^^;
正直言って作るのはかなり大変です。。
このままだとある程度妥協した作品になりそうです・・・。
っというかRPGを作るはずが、そのためのツールづくりで今進行しています^^;
マップ作成ツール
ノベル作成ツール
メニュー作成ツール
・・・
がんばってください^^;
131ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..初心者(7,470ポイント)
Date: 2008/12/21(日) 11:52
No:25890
| 解決!
|
Title: Re:マップの作り方。
|
|
皆さん、ありがとうございます。
自分で調べてみたのですが、エディタを作るのはなかなか大変そうですね。
今回は自分にあったフリーソフトを探してそれを利用させていただきますが、
そのうち自分で作ってみたいと思います。
完成するまでまだまだ時間がかかりますが、頑張って続けていきたいと思います。
85ポイント を手に入れた。
|
|
|
|
Name: 海老天 ..入門者(3,004ポイント)
Date: 2008/12/20(土) 03:52
No:25881
|
|
Title: ジャンケンのプログラムを改造したのですが・・・
|
|
管理人様のジャンケンのソースコードを元にして全体を弄り戦闘システムを作ったのですが全く動きません
恐らくおかしいのはmenu()関数だと思うのですがいくら書き直してもうまく動かすことができませんでした
どこが悪いのか指摘していただけると助かります
62ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(929,097ポイント)
Date: 2008/12/20(土) 04:30
No:25882
|
|
Title: Re:ジャンケンのプログラムを改造したのですが・・・
|
|
menu関数のwhile(1)で無限ループになってます。
GetHitKeyStateAll_2が呼ばれていないので、Keyデータは変わる事がありません。
かといって、このwhile文の中からGetHitKeyStateAll_2を呼ぶべきではありません。
このように、ある部分でループさせる書き方はよくないです。
処理は毎回メインループに戻すようにして下さい。
1/60秒以上処理がメインに返ってこないような処理がある場合はアルゴリズムの見直しをしてみて下さい。
//メッセージ処理をして応答不能になったりしないようにする関数
ProcessMessage()
//画面に書いてある内容を消す関数
ClearDrawScreen()
//キーの入力状態を格納する関数
GetHitKeyStateAll_2(Key)
//描画した内容をモニタに反映する関数
ScreenFlip();
これらの4つの処理は大抵の場合、必ず毎回呼ばないといけない4大関数ですが(というと誤解ありますが)、
これは慣れない内はメインループ以外には書かずに出来るようにしてみて下さい。
とりあえずmenu関数のwhile文をコメントアウトすると動きます。
なお、どこで止まっているかは、ブレイクポイントを使う事でわかります。
287ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(930,325ポイント)
Date: 2008/12/20(土) 04:45
No:25883
|
|
Title: Re:ジャンケンのプログラムを改造したのですが・・・
|
|
選択項目の実装サンプルです。もし参考になればどうぞ。
十字キーの上下で選択移動、Zキーを押すとその項目が選択された旨を2秒間表示して戻ります。
セレクト項目の最大数やその中身が変動する場合は、何かのデータから取ってくるような処理にするといいと思います。
ちょっと長いので、解読が面倒かもしれませんが・・。
#include "DxLib.h"
/* セレクト項目の最大数 */
#define SELECT_ELEMENT_MAX 10
/* セレクト項目の要素 */
typedef struct{
int iX, iY;
char cName[128];
}Element_t;
/* セレクト項目要素の親 */
typedef struct{
int iNum; //今選択されている番号
int iMax; //登録されている数
Element_t Element[ SELECT_ELEMENT_MAX ];
}Select_t;
/* キー状態格納変数 */
int Key[256];
/* キー入力管理関数 */
int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++)
{
if(GetHitKeyStateAll_Key[i]==1) GetHitKeyStateAll_InputKey[i]++;
else GetHitKeyStateAll_InputKey[i]=0;
}
return 0;
}
/* 呼ぶ関数を制御する変数 */
int FunctionState;
/* セレクト要素にメニュー情報を登録する */
void EnterSelectString( Select_t *Sel, int iX, int iY, char cStr[] ){
strcpy( Sel->Element[ Sel->iMax ].cName, cStr ); //文字列格納
Sel->Element[ Sel->iMax ].iX = iX; //座標格納
Sel->Element[ Sel->iMax ].iY = iY;
Sel->iMax++; //今いくつ要素が入っているかカウント
}
/* セレクト情報初期化 */
void SelectIni( Select_t *Sel ){
memset ( Sel, 0, sizeof(Select_t) ); //全て0に
EnterSelectString( Sel , 100, 100, "メニュー0" );
EnterSelectString( Sel , 100, 150, "メニュー1" );
EnterSelectString( Sel , 100, 200, "メニュー2" );
EnterSelectString( Sel , 100, 250, "メニュー3" );
EnterSelectString( Sel , 100, 300, "メニュー4" );
EnterSelectString( Sel , 400, 450, "メニューA" );
FunctionState=1; //次の関数を呼ぶ
}
/* キー入力などからセレクト状況を計算する */
void SelectCalc( Select_t *Sel){
/* 上下キーが押されたら現在選択されている番号を表す->iNumを変化させる */
if( Key[ KEY_INPUT_UP ] == 1 )
{
Sel->iNum--;
if( Sel->iNum < 0 )
{
Sel->iNum = Sel->iMax - 1 ;
}
}
if( Key[ KEY_INPUT_DOWN ] == 1 )
{
Sel->iNum = (++Sel->iNum) % Sel->iMax ;
}
}
/* セレクト項目と現在のセレクト状況描画 */
void SelectGraph( Select_t Sel){
int i, Col = GetColor(255,255,255) ;
for(i=0; i<Sel.iMax; i++)
{
DrawFormatString( Sel.Element[ i ].iX, Sel.Element[ i ].iY, Col, "%s", Sel.Element[ i ].cName );
}
DrawCircle( Sel.Element[ Sel.iNum ].iX-20, Sel.Element[ Sel.iNum ].iY+7, 7, Col, TRUE );
}
/* セレクトメイン */
void SelectMain( Select_t *Sel ){
SelectCalc( Sel ); //計算
SelectGraph( *Sel );//描画
if( Key[ KEY_INPUT_Z ] == 1 )
{
FunctionState = 2;//けって〜
}
}
//決定されて2秒間その項目を表示する
void Decided( Select_t Sel ){
int Col = GetColor( 255, 255, 255 );
static int cnt=0;
DrawFormatString( 100, 100, Col, "%sが選択されました。", Sel.Element[ Sel.iNum ].cName );
cnt++;
if( cnt > 120 )//60FPSのモニタで2秒たったら
{
cnt = 0;
FunctionState = 0;
}
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
Select_t Select;
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
//↑メッセージ処理 ↑画面をクリア ↑入力状態を保存 ↑ESCが押されていない
switch(FunctionState){
case 0:
//初期化
SelectIni( &Select );
break;
case 1:
//メイン計算
SelectMain( &Select );
break;
case 2:
//決定した瞬間その項目を表示->0に戻る
Decided( Select );
break;
}
ScreenFlip();
}
DxLib_End();
return 0;
}
1,228ポイント を手に入れた。
|
|
|
|
|
Name: 海老天 ..入門者(3,024ポイント)
Date: 2008/12/20(土) 21:53
No:25885
| 解決!
|
Title: Re:ジャンケンのプログラムを改造したのですが・・・
|
|
わざわざアドバイスありがとうございます
大変参考になりました!
20ポイント を手に入れた。
|
|
|
|
Name: ざこ ..初心者(8,069ポイント)
Date: 2008/12/19(金) 14:01
No:25863
|
|
Title: オセロ
|
|
現在VisualC++でオセロを作成しております。お手数ですがこちらをごらんください。
http://www.geocities.co.jp/SiliconValley-Bay/4543/Osero/Osero/Osero-5.html
こちらを参考にしてます。
BOOL COseroView::CanDropDown( int x, int y, int vect_x, int vect_y )
{
int put_stone;
if( m_FlagForWhite )put_stone = WHITE_STONE;//m_FlagForWhiteはbool変数
else put_stone = BLACK_STONE;
x += vect_x;
y += vect_y;
if( x < 0 || x >= MASU_NUM || y < 0 || y >= MASU_NUM )return( FALSE );
if( m_Board[x][y] == put_stone )return( FALSE );
if( m_Board[x][y] == BLANK )return( FALSE );
x += vect_x;
y += vect_y;
while( x >= 0 && x < MASU_NUM && y >= 0 && y < MASU_NUM )//MASU_NUMはマス数
{
if( m_Board[x][y] == BLANK )return( FALSE );
if( m_Board[x][y] == put_stone )return( TRUE );
x += vect_x;
y += vect_y;
}
return( FALSE );
}
これは八方向にひっくり返せる石があるか調べるプログラムなんですが
@1進める
8方向に1だけ進み
空白があればFALSE
同じ色の石があればFALSE
Aさらに1進める
同方向に1だけ進み
空白があればFALSE(終了)
同じ色の石があればTRUE(続ける)
Bこれをマス目超えるまで繰り返す
CFALSEを返す
それでこの結果をこちらで使うんですけど
BOOL COseroView::CanDropDown( int x, int y )
{
if( x >= MASU_NUM || y >= MASU_NUM )return( FALSE );
if( m_Board[x][y] != BLANK )return( FALSE );
if( CanDropDown( x, y, 1, 0 ) )return( TRUE ); //右
if( CanDropDown( x, y, 0, 1 ) )return( TRUE ); //下
if( CanDropDown( x, y, -1, 0 ) )return( TRUE ); //左
if( CanDropDown( x, y, 0, -1 ) )return( TRUE ); //上
if( CanDropDown( x, y, 1, 1 ) )return( TRUE ); //右下
if( CanDropDown( x, y, -1, -1 ) )return( TRUE ); //左上
if( CanDropDown( x, y, 1, -1 ) )return( TRUE ); //右上
if( CanDropDown( x, y, -1, 1 ) )return( TRUE ); //左下
return( FALSE );
}
として使ってます。オセロのルールですね。
画面外と石が置いてある場所には置けない
ひっくり返せないとこには置けないの2つ組み込んでます。
内容は書いてあるんでわかるのですが
プログラムがよくわかりません。
(a)上のプログラムではFALSEを返してますよね。でもAのときに空白があれば 例えば→方向(打ち手黒)とすると
○●[ ] 現在この状態ですよね。ここに置く事ができるからそこで終了ってなってるんだとは思いますが
置けない場合のFALSEとゴチャゴチャになってしまって結局何を返してるのかわからなくなってます・・
(b)下のプログラムがどうなってるのかがさっぱりです。TRUEとFALSEがどうなってるのかなど
(a),(b)について教えてください。
1,079ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(137,238ポイント)
Date: 2008/12/19(金) 14:17
No:25864
|
|
Title: Re:オセロ
|
|
1:これから検査しようとしているX座標、Y座標のどちらかがオセロ盤の外に指定された場合はFALSEを返す
2:これから検査しようとしている箇所が空白(黒でも白でもない)だったらFALSEを返す(検査する意味がない)
3:8方向を調べて、1方向でもコマを置く事が可能(上のCanDropDown関数の戻り値がTRUE)ならば、TRUEを返す
4:8方向を調べてみたが、置ける箇所が無いので、FALSEを返す
以上です。
ようするに、TRUEが返る場合は、その座標にコマを置くことができ、FALSEの場合は置けないという事ですね。
241ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(137,278ポイント)
Date: 2008/12/19(金) 14:21
No:25865
|
|
Title: Re:オセロ
|
|
(a)についてですが、whileループの中で、FALSEではなくTRUEを返すパターンは存在しています。
40ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..初心者(8,448ポイント)
Date: 2008/12/19(金) 14:34
No:25866
|
|
Title: Re:オセロ
|
|
修正多くて申し訳ないです。スレ内容を若干修正してあります。
その部分だけとりあげますと
@→Aに進むには→方向で打ち手黒の場合
○● 現在この状態ですよね
もう1個→に進み
○●( ) 現在( )の位置にいます。
この場合置けますよね。
>ようするに、TRUEが返る場合は、その座標にコマを置くことができ、FALSEの場合は置けないという事ですね。
ならばここはTRUEになるのでは?と思ってしまいます。
おそらく戻り値のFALSE,TRUEがよくわかっていないんだとおもいますが
上のプログラムの戻り値FALSEをTRUEにしても同じ結果でした。
下のプログラムの戻り値をFALSEをTRUEにしたら正常にできてませんでした。これはわかります。
上は何故でしょうか?
それが>>(a)についてですが、whileループの中で、FALSEではなくTRUEを返すパターンは存在しています
ということでしょうか?
379ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(138,353ポイント)
Date: 2008/12/19(金) 14:51
No:25867
|
|
Title: Re:オセロ
|
|
ごめんなさい、前の書き込みは間違いです。ちょっと勘違いしていました。
ソースにコメント入れてみたので、これで流れを追いかけてみてください。
// 置ける場所かどうかの判定を行う関数
// x = 判定を行う場所のX座標
// y = 判定を行う場所のY座標
BOOL COseroView::CanDropDown( int x, int y )
{
// 引数で指定されたX座標、Y座標のどちらかがMASU_NUM(おそらく8じゃないかと)以上ならば、オセロ盤の外が指定されたと判断し、FALSEを返す
if( x >= MASU_NUM || y >= MASU_NUM )return( FALSE );
// 指定された場所が空白ではない(既に白か黒のコマが置かれている状態)場合、検査しても意味がないので、FALSEを返す
if( m_Board[x][y] != BLANK )return( FALSE );
// 8方向のうち、1箇所でも置ける方向があった場合はTRUEを返す
if( CanDropDown( x, y, 1, 0 ) )return( TRUE ); //右
if( CanDropDown( x, y, 0, 1 ) )return( TRUE ); //下
if( CanDropDown( x, y, -1, 0 ) )return( TRUE ); //左
if( CanDropDown( x, y, 0, -1 ) )return( TRUE ); //上
if( CanDropDown( x, y, 1, 1 ) )return( TRUE ); //右下
if( CanDropDown( x, y, -1, -1 ) )return( TRUE ); //左上
if( CanDropDown( x, y, 1, -1 ) )return( TRUE ); //右上
if( CanDropDown( x, y, -1, 1 ) )return( TRUE ); //左下
// 置ける方向が見つからなかったので、この場所には置けないと判断し、FALSEを返す
return( FALSE );
}
// 指定された1方向に関して、置けるかどうかを判断する関数
// x = 判定を行う場所のX座標
// y = 判定を行う場所のY座標
// vect_x = 次の判定を行う場所へ移動する際の横方向の移動量
// vect_y = 次の判定を行う場所へ移動する際の縦方向の移動量
BOOL COseroView::CanDropDown( int x, int y, int vect_x, int vect_y )
{
// 今、置こうとしているコマの色情報を格納する変数
int put_stone;
// m_FlagForWhiteがTRUEの場合はput_stoneを白、そうでない場合は黒とする
if( m_FlagForWhite )put_stone = WHITE_STONE;//m_FlagForWhiteはbool変数
else put_stone = BLACK_STONE;
// 1マス進める
x += vect_x;
y += vect_y;
// 1マス進めた結果、オセロ盤の外へ移動してしまった場合は、FALSEを返す
if( x < 0 || x >= MASU_NUM || y < 0 || y >= MASU_NUM )return( FALSE );
// 1マス進めた場所がこれから置こうとするコマと同じ色だった場合は、置けない場所だと判断して、FALSEを返す
if( m_Board[x][y] == put_stone )return( FALSE );
// 1マス進めた場所が空白の場合は、置けない場所だと判断して、FASLSEを返す
if( m_Board[x][y] == BLANK )return( FALSE );
// 更にもう1マス進める
x += vect_x;
y += vect_y;
// 検査場所がオセロ盤の範囲内にある限りループを続ける
while( x >= 0 && x < MASU_NUM && y >= 0 && y < MASU_NUM )//MASU_NUMはマス数
{
// 検査場所が空白の場合はFALSEを返す
if( m_Board[x][y] == BLANK )return( FALSE );
// 検査場所がこれから置こうとするコマと同じ色ならば、TRUEを返す
if( m_Board[x][y] == put_stone )return( TRUE );
// 空白でも同じ色でもないという事は、違う色が存在しているので、1マス進める
x += vect_x;
y += vect_y;
}
// 置ける場所が見つからなかったので、FALSEを返す
return( FALSE );
}
1,075ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..初心者(8,946ポイント)
Date: 2008/12/19(金) 17:28
No:25869
|
|
Title: Re:オセロ
|
|
もう1つだけ教えて下さい。
void COseroView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたは……
int x, y;
x = point.x / MASU_SIZE;
y = point.y / MASU_SIZE;
if( CanDropDown( x, y ) ) DropDownStone( x, y );
CDC* pDC = GetDC(); //画面を再描画
DrawBoard( pDC );
ReleaseDC( pDC );
CView::OnLButtonDown(nFlags, point);
}
なんですがpoint.xでマウスがクリックしたところのx座標ってのはわかるんですが
x=point.x/MASU_SIZEってのがよくわかりません。
例えば■があった場合この白い部分を左クリックすれば実行される となってます。(64マスある一番左上端の1マスをとりだしている)
このときのxは0~7までの8個ですよね。すると上記の例ではx=0です
わからないのはこの白い■のどこをクリックしてもx=0と見なされるのがわからないのです。
point.xは浮動少数ならそれこそ無限にあります。整数でもたくさんあるはずです。
つまり一番上の行のマスを取り出してみて
@ABCDEFG
■■■■■■■■ この正方形が1辺10だとすると
1~10までの座標とy=0の座標の範囲をクリックすれば@のプログラムが(石配置)が行われます。
この範囲指定を行っているプログラムが見当たらないんですが教えてもらえませんか?
非常にわかりずらい質問になってしまいましたが要は
どっからどこまでの範囲をクリックすればそのマス目のプログラムが実行されるのか
その設定はどこでやっているのか などが質問です。
488ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(138,113ポイント)
Date: 2008/12/19(金) 17:51
No:25870
|
|
Title: Re:オセロ
|
|
マウスがクリックされた時点のマウスカーソルの座標をオセロ盤の座標に変換しているんです。
例えば、仮にウインドウのサイズが横320、縦320ピクセル、オセロ盤の1マスを横40、縦40ピクセルだとします。
そして、マウスがクリックされたのがX=100、Y=100の位置だとします。
この場合、マウスがクリックされたのはオセロ盤のどの場所(左から何マス目、上から何マス目か?)になるかを計算するにはどうすれば良いでしょうか?
そのプログラムでは、これと同じ作業を行なっています。
240ポイント を落としてしまった。
|
|
|
|
|
Name: ざこ ..中級者(9,011ポイント)
Date: 2008/12/19(金) 18:04
No:25871
|
|
Title: Re:オセロ
|
|
100÷40だから2,5 上からも2,5マス目かな?この場合3と3になってるので浮動少数は
切り上げということでしょうか。
65ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(138,169ポイント)
Date: 2008/12/19(金) 18:13
No:25873
|
|
Title: Re:オセロ
|
|
そういうことです(^-^)
ただし、C++の配列インデックスは0から始まりますので、プログラム上で使用する際は、小数点以下を切り捨てた値を使用してください。
56ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..中級者(9,099ポイント)
Date: 2008/12/19(金) 18:20
No:25874
|
|
Title: Re:オセロ
|
|
成る程です。しかし始めからそのようになってるのでしょうか?原因はわかりましたが仕組みの方があまり。。
次に五目並べを作ってみようと思ってます。五目並べの場合頂点クリックですから
切り上げされるとできないですよね。
88ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(138,215ポイント)
Date: 2008/12/19(金) 18:37
No:25875
|
|
Title: Re:オセロ
|
|
頂点をクリックした場合のみを有効にしたいのならば、1マス40ピクセルのグリッドが描かれていたとすると、X・Y座標ともに、40で割って余りが0の場所のみ有効となりますね。
46ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..上級者(22,236ポイント)
Date: 2008/12/20(土) 10:11
No:25884
|
|
Title: Re:オセロ
|
|
頂点クリックだと判定がシビアすぎて使いにくそうですね
判定は同じでいいと思います
ますの画像を□から+に変えるだけでいいでしょう
56ポイント を手に入れた。
|
|
|
|
Name: fumi ..ぴよぴよ(158ポイント)
Date: 2008/12/18(木) 22:59
No:25848
|
|
Title: 無題
|
|
こんばんは。
今回、異なるデータ型の計算で疑問に思ったことがあるので投稿致します。
事の発端は、物理シュミレーションで投げ上げを再現しようとしていたことにあります。
しかし、うまく動かず、原因がデータ型の異なる計算にあること(恐らく)までは発見しました。
ミスを再現したプログラムが以下になります。
#include <stdio.h>
#include <math.h>
void main()
{
int v0=-20;
unsigned int nowcnt=300;
double g=2.3333333;
printf("%f",v0*nowcnt+g*pow(double(nowcnt), 2.0)/2);
}
これを実行しますと、出力がえらいことになります。
これを、
printf("%f",v0*(int)nowcnt+g*pow(double(nowcnt), 2.0)/2);
としますと、正しい出力が得られました。v0を、
v0=20;
と正値にしても正しい結果が得られました。
ミスは恐らく、unsigned int型とint型(値は負)を乗算しているからだと思うのですが、正しいでしょうか?
また、この手のことはコンパイラに依存することなのでしょうか?(ちなみに、コンパイラは警告しませんでした。)
つまるところ、解決法はわかったが、原因がよくわかっていない状態です。
どうか、ご教授お願いします。
環境は、Visual C++ 2005 Express Editionです。
516ポイント を落としてしまった。
|
|
|
|
Name: ibis ..上級者(16,427ポイント)
Date: 2008/12/18(木) 23:45
No:25852
|
|
Title: Re:無題
|
|
なんでしょねぇ。
この場合なら暗黙的にintに変換されて、int同士の乗算になるはずなんですが。
多分関係ないですが、doubleのキャストは必要無いかと思います。
ところで、「出力がえらいことに」ってのと「正しい結果」はそれぞれどんな値ですか?
75ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(132,398ポイント)
Date: 2008/12/19(金) 00:04
No:25854
|
|
Title: Re:無題
|
|
> この場合なら暗黙的にintに変換されて、int同士の乗算になるはずなんですが。
そうなんですか?
私は、unsigned int型とint型の演算を行なうと、int型がunsigned int型に
変換されると思っていました。
sizeof(int)やsizeof(unsigned int)が4である場合、
int型の-20(0xffffffec)をunsigned int型とみなした結果4294967276となり、
それに300を掛けるとunsigned int型で表わせる範囲を超えてしまい、
下位のsizeof(unsigned int)バイトを取って4294961296となり、
本来ほしかったはずの-6000とは似ても似つかない結果となります。
192ポイント を手に入れた。
|
|
|
|
|
Name: fumi ..ぴよぴよ(580ポイント)
Date: 2008/12/19(金) 00:55
No:25856
|
|
Title: Re:無題
|
|
ibisさん、boxさん、ご回答ありがとうございます。
>ibisさん
わかりにくい表現で申し訳ないです。
「えらいことに」の値は「4295066295.998500」でした。
一方、「正しい結果」の値は「110999.998500」でした。
double型にキャストしていたのは、pow()がdouble型しか引数にとれないと思い込んでいたためですorz。
今まで、pow()の第1、2引数に両方int型を与えると、コンパイルに警告がでていましたので…
実際に、第1引数のキャストを外してみても、警告は出ませんでした。
ご指摘ありがとうございます。
>boxさん
わかりやすい解説ありがとうございます。
私もint型とunsigned int型を乗算した場合、暗黙的にint型にキャストされるだろうと勘違いしていたようです。
int型の負値が2の補数表現で表すため、unsigned int型にキャストされると、思ってもみない大きな値になってしまう、ということでよろしいでしょうか?
398ポイント を手に入れた。
|
|
|
|
|
Name: fumi ..ぴよぴよ(718ポイント)
Date: 2008/12/19(金) 01:06
No:25857
|
|
Title: Re:無題
|
|
すみません、ibisさんへの返答の追記です。
「正しい結果」の上記の値は、v0=20としたとき正しく計算されている、ということであり、
希望であった(冒頭のプログラムの)v0=-20のときの正しい値は、「98999.998500」でした。
2倍のポイントを手に入れた! 138ポイント を手に入れた。
|
|
|
|
|
Name: ibis ..上級者(16,470ポイント)
Date: 2008/12/19(金) 10:52
No:25860
|
|
Title: Re:無題
|
|
>unsigned int型とint型の演算を行なうと、int型がunsigned int型に変換される
あ、すみません、unsigned intに変換されますね。
勘違いでした。
>double
暗黙の変換でdouble型として扱われる、という意味です。
片方の引数がdoubleなら、他方はintでも大丈夫なんですよ。
わかりにくくてすみませんでした。
43ポイント を手に入れた。
|
|
|
|
|
Name: fumi ..ぴよぴよ(794ポイント)
Date: 2008/12/19(金) 23:26
No:25876
|
|
Title: Re:無題
|
|
>ibisさん
それは初耳でした。
暗黙的な変換って便利なのかもしれませんけど、わかりにくい一面がありますよね…
勉強になりました。ありがとうございます!
76ポイント を手に入れた。
|
|
|
|
Name: dic ..初心者(7,510ポイント)
Date: 2008/12/19(金) 08:56
No:25859
|
|
Title: ジョイスティックの挙動がおかしい?
|
|
現在 DirectInput8 のライブラリを作っているのですが
ジョイスティックの入力取得の挙動がおかしいので
どこかが間違っていると思うのですが、SDKのサンプルには
載っていなかったので質問させてもらいます
ソースは添付したものになりますが
肝心な入力の取得は CDxInput8::Test2() になります
初期化などで間違っているかもしれませんし、
全体にわたって見てみただけると助かります
現在の挙動はジョイスティックの十字キーを押すと何も反応ないのですが、
キーボードを押しっぱなしにした状態で十字キーを押すと正常に反応するという
現象が起きてしまいます
どこかがメモリエラー発生しているのかよくわからないのです
助言をお願いします
206ポイント を手に入れた。
|
|
|
|
Name: GPGA ..熟練のプログラマー(55,648ポイント)
Date: 2008/12/19(金) 13:24
No:25861
|
|
Title: Re:ジョイスティックの挙動がおかしい?
|
|
問題なのはTest2を呼び出している位置です。
GetMessageはメッセージが飛んでくるまでは、内部でスリープします。
従って、キーボード操作やマウス操作など、ウインドウメッセージが飛んで来た時しか
Test2が呼び出されることはありません。
61ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..上級者(22,180ポイント)
Date: 2008/12/19(金) 13:43
No:25862
|
|
Title: Re:ジョイスティックの挙動がおかしい?
|
|
PeekMessage( )でメッセージのチェックをして処理したらどうでしょう
for (;;) {
if (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) {
if (!GetMessage(&msg, NULL, 0, 0)) {
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else {
gInput8.Test2();
Sleep(10);
}
}
157ポイント を手に入れた。
|
|
|
|
|
Name: dic ..初心者(7,547ポイント)
Date: 2008/12/19(金) 18:13
No:25872
| 解決!
|
Title: Re:ジョイスティックの挙動がおかしい?
|
|
PeekMessage() 関数を使用することで解決しました
ありがとうございました
37ポイント を手に入れた。
|
|
|
|
Name: ざこ ..初心者(7,031ポイント)
Date: 2008/12/18(木) 15:43
No:25826
|
|
Title: 参考書
|
|
VC++の詳しい解説が載っている参考書など探しています。色んなファイルがいっぱいあって
どこにどれを書けばいいのかとかが理解できていません。図形を描画するときはOnDrawなどはわかるんですが。
初期化とかその辺が曖昧です。関数の知識も心許ないです。
今現在入門書を使っていますが、これはどういうものが作れるかなどを主に記載しており、
自分で考えてプログラムを作っていくというのには不向きです。ネットで調べることもできるんですが
肝心のファイルに何が書かれているのかとか関数の知識はないとそれもできません。
VC++を詳しい方などどのように勉強されたのでしょうか?
入門者が次に読むべき本 などありましたら教えてください
主にMFC関連の著書を探しています。
215ポイント を手に入れた。
|
|
|
|
Name: ざこ ..初心者(6,990ポイント)
Date: 2008/12/18(木) 16:17
No:25828
| 解決!
|
Title: Re:参考書
|
|
何か異常に安いのでとりあえず1冊目はこれにします。せっかくだから他にも何か買いますね。
ありがとうございました。
41ポイント を落としてしまった。
|
|
|
|
|
Name: バグ ..ハッカー(136,997ポイント)
Date: 2008/12/19(金) 08:14
No:25858
|
|
Title: Re:参考書
|
|
そうなんですよね。MFC自体は殆ど変化がないので、MFCでの開発がメインだというのならば、新しいVisualStudio(2005や2008など)を導入したとしても、古い参考書でも内容の変化で困る事は少ないと思います。
8ポイント を手に入れた。
|
|
|
|
Name: そねっと ..ぴよぴよ(73ポイント)
Date: 2008/12/12(金) 15:21
No:25582
|
|
Title: 再帰プログラム
|
|
えー聞くところが場違いかも知れませんが 教えてください。
再帰プログラムでメインクラス以外に2つ以上のクラスを再帰を用いたプログラムを作りなさい。
という問題が出たのですが・・・再帰プラグラムじたいが理解不能で・・・
どういうプログラムがありますか?C#です。
ご迷惑をおかけしますがよろしくお願いします
73ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(133,700ポイント)
Date: 2008/12/12(金) 17:01
No:25587
|
|
Title: Re:再帰プログラム
|
|
参考書なんかには、階乗の計算に使われていたりしますね。
私は落ち物パズルの消去判定(同じ色が何個隣接しているか?とか)に使ったりしますけど…
62ポイント を手に入れた。
|
|
|
|
|
Name: non ..上級者(21,211ポイント)
Date: 2008/12/12(金) 20:17
No:25600
|
|
Title: Re:再帰プログラム
|
|
再帰で有名なのはハノイの塔ですよね。
円盤と、棒で2つはクラスが作れるかな。3つとなるとね。何を作ろう。
他には順列・組み合わせ、最大公約数、マージソート、クイックソートなど。
迷路の探索に使ったこともあります。最近使ったのは、マインスイーパーを作った
ときに、クリックしたときに周辺部の所がいっぺんに開く部分です。
バグさんの隣接している色を調べるのと同じ方法ですね。たぶん。
175ポイント を手に入れた。
|
|
|
|
|
Name: ななし ..ぴよぴよ(380ポイント)
Date: 2008/12/12(金) 20:31
No:25601
|
|
Title: Re:再帰プログラム
|
|
2つ以上のクラスを使った再帰は、ファイルとディレクトリの構造を辿る際によく使用されますね。
Visitor パターンで検索すると、それなりに情報が出てくると思います。
ダブルディスパッチなんかも、2つ以上のクラスを使った再帰になるのかな?ちょっと自信ないです。
27ポイント を手に入れた。
|
|
|
|
|
Name: d@初心者 ..ぴよぴよ(269ポイント)
Date: 2008/12/13(土) 02:07
No:25613
|
|
Title: Re:再帰プログラム
|
|
冗長かもしれませんが。至極簡単に言えば
階乗の計算のとき使うとは
n>1のとき
F(n)=n*F(n-1) ----(@)
n=1のとき
F(1)=1
(i)の式で引数nで渡されたものを引数(n-1)にしてもう一回同じ処理をするために自分を呼びます
F(n)=n*{F(n-1)=(n-1)*F(n-2)}
ってな感じで自分を何回も呼んだあとに、nが1になったらnの階乗の出来上がりです。
値が収束するまで同じ関数を繰り返すときに使うかな?
クイックソートぐらいでしか使ったことないからなぁ・・・
考え方はこんな感じですればいいかと思うんですが
2つを使った・・・・再帰って無理に作るものじゃない気もしますけど、こういうのを考えるのも楽しいでしょうからがんばってください^^
269ポイント を手に入れた。
|
|
|
|
|
Name: そねっと ..ぴよぴよ(141ポイント)
Date: 2008/12/18(木) 16:53
No:25829
|
|
Title: Re:再帰プログラム
|
|
C#で、再帰プログラムを使用して、クラスを3つ使用して8クイーンプログラムを作りたいのですが、プログラムガ全然わからないので(構文)教えてもらえますでしょうか?
68ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(136,935ポイント)
Date: 2008/12/18(木) 17:05
No:25830
|
|
Title: Re:再帰プログラム
|
|
クラスを3つ指定されていますが、どのような振り分けになりますか?
なんでもいいので、クラスを3つ使用すればいいのでしょうか?
もっと仕様を明確にしてください。
74ポイント を手に入れた。
|
|
|
|
|
Name: そねっと ..ぴよぴよ(194ポイント)
Date: 2008/12/18(木) 17:17
No:25831
|
|
Title: Re:再帰プログラム
|
|
ご返事ありがとうございます。
何でもいいので クラスを3つ使用しているプログラムで大丈夫です。
・再帰を使用していること。
・なんでもいいので、クラスを3つしようしていること。
・C#で開発されていること。
くらいです。初心者で大変わかりにくい内容かとはございますが、よろしくお願いします。
53ポイント を手に入れた。
|
|
|
|
|
Name: dic ..初心者(7,304ポイント)
Date: 2008/12/18(木) 17:38
No:25835
|
|
Title: Re:再帰プログラム
|
|
再帰呼び出しの方法は簡単です。しかし、これでは問題があります。この関数を呼び出すと、プログラムはそのうち停止してしまいます。なぜなら、関数呼び出しが永遠に続いてしまうからです。つまり、最初のfunc関数の中で、次のfunc関数を呼び出し、さらに次のfunc関数を・・・のようになってしまうのです。
69ポイント を手に入れた。
|
|
|
|
|
Name: たいちう ..上級者(17,295ポイント)
Date: 2008/12/18(木) 20:57
No:25842
|
|
Title: Re:再帰プログラム
|
|
8クイーンについては、C言語ですが再帰の解説があります。
本来「再帰関数」というのは手段であって目的ではありません。
しかし学習者にとっては「再帰関数の学習」が目的であることが多く、
そのような例題ばかり見かけます。
その点、このページは手段としての「再帰関数」を扱っているといえるでしょう。
(8クイーンについては再帰関数を使う必然は無いと思いますが)
Cパズルプログラミング-再帰編
http://karetta.jp/book-cover/cpuzzle-recursion
同様に「クラス」というのも手段です。
オブジェクト指向の恩恵を受けられない規模のプログラムで
オブジェクト指向の学習をするというのは困難だと思います。
(教わる人も教える人も)
まず、クラスを意識しないでプログラムを完成させてから、
プログラムをここに載せれば、どの部分をクラス化すると良いか、
アドバイスが得られるのではないでしょうか。
236ポイント を手に入れた。
|
|
|
|
|
Name: そねっと ..ぴよぴよ(220ポイント)
Date: 2008/12/18(木) 23:52
No:25853
| 解決!
|
Title: Re:再帰プログラム
|
|
こんばんは。
皆さん 本当にありがとうございます。
無事 解決できました。
26ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(134,076ポイント)
Date: 2008/12/12(金) 17:59
No:25588
|
|
Title: 【雑談】C#deテトリスを作ってみました
|
|
開発言語は変わりましたが、内容は前回のDXライブラリを使用した物のバージョンアップ版です。
1:開始時にレベルを選択できるように変更
2:ホールドの実装
3:次に落ちてくるテトリミノを3つ先まで表示するように変更
4:得点計算の変更(数値は小さくなりました)
5:連続テトリス(4列消し)の回数に応じてボーナスがあります。
6:表示する値の増加(得点、消去ライン数、連続テトリス回数、レベル、ゴール)
7:エンドレスの実装
といった感じでしょうか。
前回の課題で音楽再生を実装するというのがありましたが、そこまでには至っておりません。
というか、以前こめかみさんに戴いていた音楽ファイルを間違えて削除してしまって、再生するデータがないので、途方にくれています(^_^;)
他にこんなのあったらいいよという機能があれば、提案をお願いします。
376ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(134,109ポイント)
Date: 2008/12/12(金) 18:01
No:25589
|
|
Title: Re【雑談】C#でテトリスを作ってみました
|
|
うは、また画像を添付するのを忘れてました。
まだ未完成なので、実行ファイルはまだ添付しておりません。
33ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(923,145ポイント)
Date: 2008/12/12(金) 18:16
No:25590
|
|
Title: Re:Re【雑談】C#でテトリスを作ってみました
|
|
おぉ、C#版ですか。制作お疲れ様です。やっぱりパズルゲーといえばバグさんですねw
>他にこんなのあったらいいよという機能があれば、提案をお願いします。
システムとしてはもうバッチリな感じなので、
「爽快感」を上げる為のエフェクト関係を充実させてみてはどうでしょう?
消える時に心地よい効果音と一緒に派手なエフェクトが表示されるとか。
テトリスオンラインとか結構キレイだったイメージがあります。
http://www.gungho.jp/game/tetris/
ぷよぷよって、落ちてブロック化している状態でもちょっと動いたり泣いたりしていますよね。
テトリスの落ちたブロックも時々キラっと光ったりさせてみたりしてもよさそうな気がします。
しかしエフェクトって凝り始めると完成しなくなるんですよねぇ^^;
285ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(134,239ポイント)
Date: 2008/12/12(金) 18:30
No:25593
|
|
Title: Re:【雑談】C#でテトリスを作ってみました
|
|
>>管理人さん
う…分かってはいたけど、あえて目を反らしていた部分です(笑)
今回の製作は、C#でDirectX未使用でどれだけできるんだろう…と思ったのが始まりでした。
意外なことに前回の物と比べても遜色ないくらいには動いています。
まぁ、グラフィック部分に大した処理をしていないお陰なんでしょうけどね(苦笑)
某所で日記にあげていたドクターマリオもどきもその内に完成させますんで(^_^;)
とりあえず、動くとこまで出来てしまうと満足して、製作を止めてしまうのは私の悪い癖です(苦笑)
130ポイント を手に入れた。
|
|
|
|
|
Name: ようすけ ..入門者(2,935ポイント)
Date: 2008/12/12(金) 19:25
No:25595
|
|
Title: Re:【雑談】C#でテトリスを作ってみました
|
|
画面を見る限り、おもしろそうですね(^v^)
ゲーセンにあったら、コインを投入しちゃいます(^u^)
早くやってみたいですね☆
44ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..熟練のプログラマー(40,178ポイント)
Date: 2008/12/12(金) 19:40
No:25596
|
|
Title: Re:【雑談】C#でテトリスを作ってみました
|
|
なんというスピード開発。
へー、C#というのでもDXライブラリ使えるのですか。
音データは、和音の調整とかしたいのでちょい待ってください。
ついでにサウンドエフェクトとか作ってみようかなっ
90ポイント を手に入れた。
|
|
|
|
|
Name: 烏 ..入門者(4,852ポイント)
Date: 2008/12/12(金) 19:51
No:25597
|
|
Title: Re:【雑談】C#でテトリスを作ってみました
|
|
ホールド機能までついててとてもおもしろそうです。
完成しましたらとてもやってみたいですw
あと、ドクターマリオもどきもとても気になります・・・w
2倍のポイントを手に入れた! 98ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..熟練のプログラマー(40,487ポイント)
Date: 2008/12/13(土) 01:22
No:25611
|
|
Title: Re:【雑談】C#でテトリスを作ってみました
|
|
修正する目処が立たないので、
前作った奴のoggファイル(+α)上げときます。
なかなか思うように加工できないものですね、精進します。
DXライブラリは音の再生時間の位置を指定できたはずなので使えるっちゃあ使えるのかも知れませんが、
コーディングする人だよりの音ファイル使うよりは、
もっと優れたフリーの音を使ったほうがいいかと思います。
調整する気はまだあるので、
進展があったらまた上げます。
でも気にしないで制作進めちゃってください。
たとえ没になっても音作りの練習になるし、
自分のゲームに使うかもしれないですしね。
効果音ぽいのも作ろうとしてみました。
ゲームオーバーとか、
テトリスの時の音とか、
ブロックの移動音とかに使えるかも。
いろいろ失敗してます。
ちゃんと作れるようもっと勉強します。
309ポイント を手に入れた。
|
|
|
|
|
Name: こめかみ ..熟練のプログラマー(40,496ポイント)
Date: 2008/12/13(土) 01:24
No:25612
|
|
Title: Re:【雑談】C#でテトリスを作ってみました
|
|
あれ?添付がうまくいってない…
すみません。ファイルが大きすぎました。
こちらでどぞ。
ttp://cid-d72819af3901253a.skydrive.live.com/self.aspx/%e5%85%ac%e9%96%8b%e7%b4%a0%e6%9d%90/%e7%bf%92%e4%bd%9c%e3%81%a7%e3%81%99%e3%81%8c%e3%81%a9%e3%81%86%e3%81%9e.zip
9ポイント を手に入れた。
|
|
|
|
|
Name: d@初心者 ..ぴよぴよ(531ポイント)
Date: 2008/12/13(土) 13:28
No:25618
|
|
Title: Re:【雑談】C#でテトリスを作ってみました
|
|
はじめまして。
バグさんの作られたテトリスで昨日遊ばせていただきました!
やっぱり落ち物ではテトリスが一番ですね。ものすごいハマってしまいました^^
・・・レベル15は僕にはムリでしたが。
バージョンアップ版楽しみにしてます!
一つ僕が気になったのは
隙間ができて、そこに回転させてはめ込みたいなーって時にうまくはめ込めない
っところです。
テトリスなんて久しくやってないからかもしれませんけど、回転させると違和感があるんですよね。
ソースを覗いてみたんですけど、いかんせんプログラミングの勉強をはじめて2ヶ月程度なんで、どこで回転の中心を決めたりしてるのかがさっぱりです(笑
C++は構文の勉強もしてないんでクラスの最後に;つけるんだぁ・・・レベルの発見をしています(汗
一番やってるのもC#,Javaなんで、マクロの定義がしっくりこないですし^^;
CとC++を勉強してきます・・・
C#版、楽しみにしてますね!
がんばってください!!
262ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(134,302ポイント)
Date: 2008/12/13(土) 14:12
No:25620
|
|
Title: Re:【雑談】C#deテトリスを作ってみました
|
|
回転処理そのものはCPieceクラスのrotateというメンバ関数で行なっていて、軸補正しながら回転させているのはCFieldクラスのpieceRotateというメンバ関数で行なっています。
そんなに難しい事はしていないので、ゆっくり流れを追いかけてみてください(^-^)
63ポイント を手に入れた。
|
|
|
|
|
Name: バグ [URL] ..ハッカー(135,269ポイント)
Date: 2008/12/15(月) 18:22
No:25712
|
|
Title: Re:【雑談】C#でテトリスを作ってみました
|
|
とりあえず、作業終了という事でアップしました…。
リンク先からダウンロードしてください。音楽ファイルを埋め込んだので、ちょっと容量が大きいです。(といっても3M強ですが)
テストプレイしまくったせいか、しばらくテトリスは遊びたくないかも…(苦笑)
100ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(135,333ポイント)
Date: 2008/12/15(月) 18:24
No:25713
|
|
Title: Re:【雑談】C#でテトリスを作ってみました
|
|
あ、操作方法を書いてなかったので、簡単に…
上…ハードドロップ
下…1段落下
左右…左右移動
Z…回転(時計周り)
X…回転(反時計周り)
C…ホールド
スペース…一時停止
64ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(926,740ポイント)
Date: 2008/12/15(月) 18:29
No:25715
|
|
Title: Re:【雑談】C#でテトリスを作ってみました
|
|
お疲れ様です^^
少しやってみました。
やはり音楽と、エフェクトがあるとより楽しくなりますね^^
音楽はなんだか昔を思い起こさせるような音楽ですねw ファミコンぽいw
パズルゲー得意じゃない人間なので、常識となっている仕様なのかどうかわからないですが、
左右移動時もう少し「ため」移動の方がよくないですか?
今だと、1列だけ動かしたいのに2列動いてしまう事があるので・・(私がドンクサイだけかもしれません^^;
後、効果音系入れるとより臨場感出るかもしれませんね^^
エフェクトはテトリスオンライン以上の豪快なエフェクト期待していますw
160ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(135,332ポイント)
Date: 2008/12/15(月) 18:47
No:25722
|
|
Title: Re:【雑談】C#deテトリスを作ってみました
|
|
プログラムの構造上、これ以上エフェクトを派手にしようとしたら、根本から作り直した方が早そうなので、今回はこれで勘弁してください(笑)
効果音は検討してはいたのですが、面倒になったので止めました。これも気が向いたら…という事で(^_^;)
左右移動は私がちょうどいいだろうという、思い切り個人的な好みで調整してますんで、同じような意見が多数出るようであれば、少し長めのウェイトを入れて調整しますね(^-^)
1ポイント を落としてしまった。
|
|
|
|
|
Name: 烏 ..入門者(4,714ポイント)
Date: 2008/12/16(火) 01:44
No:25731
|
|
Title: Re:【雑談】C#deテトリスを作ってみました
|
|
お疲れ様です。
早速プレイさせていただきました。
速さもちょうどよく落ちゲームが苦手な私でもとても楽しむことができましたw
音楽もとてもよかったです。
左右移動については、私はちょうどよいと感じました。(レベル6~10くらいしかできてませんが)
レベル高い方はやっぱり難しかったです・゜・(つД`)・゜・
143ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(135,458ポイント)
Date: 2008/12/16(火) 10:34
No:25736
|
|
Title: Re:【雑談】C#deテトリスを作ってみました
|
|
>>烏さん
ありがとうございます。
レベル6以降は速度の上がり方が緩やかになりますので、なれてしまえばなんとかなると思います。
レベル15以降はスピードには変化ありません。レベルアップに必要なポイントが増えていくだけで、一応レベル99までは表示されます。
カウンターストップ(999999点)目指して頑張ってください(笑)
126ポイント を手に入れた。
|
|
|
|
|
Name: ようすけ ..入門者(3,167ポイント)
Date: 2008/12/17(水) 21:16
No:25799
|
|
Title: Re:【雑談】C#deテトリスを作ってみました
|
|
ダウンロードしてやってみました。
よかったと思います☆
私はパズルゲーは苦手なのでレベルは6までしか行けませんでしたけど(@_@;)
でも、レベル15でやった時は、昔ゲーセンにあったテトリス・ザ・グランドマスターを
思い出しました(^v^)
スコアもカンストすると何か演出とかがあったりしたらおもしろいですね(まあ、私では無理ですが(汗)
164ポイント を手に入れた。
|
|
|
|
|
Name: d@初心者 ..ぴよぴよ(628ポイント)
Date: 2008/12/18(木) 01:18
No:25810
|
|
Title: Re:【雑談】C#deテトリスを作ってみました
|
|
おぉーいいですね!!
レベル設定できるので、レベル15から始められてるのとか^^
やっぱり音楽は大事ですねー
一番気になったのは、ゲームオーバーのときにスタート画面に戻ったら、Exitボタンがなかったんで、もう一回始めて閉じたことですが(笑
ホールド機能、速いので使うと自分自身に混乱の効果があるようです・・・・
97ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(136,462ポイント)
Date: 2008/12/18(木) 13:48
No:25825
|
|
Title: Re:【雑談】C#deテトリスを作ってみました
|
|
プレイしていただき有難うございます。
次回作はドクターマリオモドキか、コラムスモドキか、マジカルドロップモドキを製作しようかと思ってますので、また遊んでやってください(^-^)
>>ようすけさん
そうですね、カンストした時の演出はあっても面白いかもしれませんね。
今回のやつには入ってませんけど(苦笑)
TGMと比べていただくとは、恐れ多い…(^_^;)
あれは様々なテトリスがありますが、間違いなく名作の1つですよね。
ちなみに、私は頑張って気合入れてプレイして、レベル18で最高得点は21773点でした。
カンストまでは遥か彼方です(笑)
>>d@初心者さん
>一番気になったのは、ゲームオーバーのときにスタート画面に戻ったら、Exitボタンがなかったんで、もう一回始めて閉じたことですが(笑
あ、これは確かに不便ですね(^_^;)
そのうちに改善しときますm(__)m
>ホールド機能、速いので使うと自分自身に混乱の効果があるようです・・・・
携帯アプリのテトリスをお手本にしたので、こういうものだと思っていたのですが…うーむ。
481ポイント を手に入れた。
|
|
|
|
|
Name: d@初心者 ..ぴよぴよ(721ポイント)
Date: 2008/12/18(木) 21:02
No:25843
|
|
Title: Re:【雑談】C#deテトリスを作ってみました
|
|
>ホールド機能
携帯アプリとか使わないんで、現代のテトリスはこうなんでしょう^^
僕はスーファミのテトリス2+ボンブリスのボンブリスが大好きで友人とはまってましたー
ドクターマリオも大好きですけどね^^
楽しみにしてます!!
僕も自分の作りたいのが作れるレベルになるように勉強しますっ!
93ポイント を手に入れた。
|
|
|
|
Name: 山崎 ..入門者(4,465ポイント)
Date: 2008/12/18(木) 17:55
No:25836
|
|
Title: マスク処理の速度について
|
|
毎度お世話になります、山崎です。
今回はマスク処理の速度についてお伺いに参りました。
現在、RPGでいう「装備」のようなことを司るメニューを作っています。
左右のキーを押すことで文字列が横へスライドし、次の文字列がまた横から現れるといった感じの部分です。
この文字列のスライド(横方向への移動)をメニューウインドウとなる領域内だけで行い、
メニューウインドウの外へはみ出た文字列は描画しない、といった処理をしたいと思っています。
そこで、メニューウインドウ領域以外にマスクをして 領域内だけに文字列が描画されるようにしようと思い
CreateMaskScreen()関数を使ったところ、呼び出した瞬間に恐ろしいほど処理が重くなってしまいました。
フレームの切り替えを肉眼で指折り数えられるほどです。
なお、CreateMaskScreen()を試しに一度呼んだだけで、それ以外のマスク処理は全く行っておりません。
マスク処理にかかる負担はこれくらいで普通なのでしょうか?
それとも、何かほかに問題があって異常な遅さになっているのでしょうか。
それから余談なのですが、
DXライブラリの各関数を一回呼び出すのにかかる平均時間を知っておきたいと普段思っているのですが、
やはり引数によって一回の呼び出しにかかる時間が平均を求めても意味がないほどばらつくものなのでしょうか?
それとも、DrawBox()は平均何ミリ秒、CreateMaskScreen()は平均何ミリ秒と言えるものなのでしょうか?
444ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(136,989ポイント)
Date: 2008/12/18(木) 17:58
No:25837
|
|
Title: Re:マスク処理の速度について
|
|
PCのスペックなんかも影響するでしょうから、一概には言えないでしょうし…
計測用の関数を作成して、実際に計測してみては如何ですか?
54ポイント を手に入れた。
|
|
|
|
|
Name: 山崎 ..入門者(4,785ポイント)
Date: 2008/12/18(木) 18:25
No:25839
| 解決!
|
Title: Re:マスク処理の速度について
|
|
バグ様、管理人様、
すばやいご返信誠にありがとうございます。
やはりスペックによってばらつきが出てしまうものなのですね。
GetNowHiPerformanceCountなどの関数を使って、自分なりに関数一度にかかる
平均時間を計ってみようと思います。
変なパソコンは使ってないと思うので、私のパソコンでの結果でも
参考としてくらいなら皆さんの役に少しは立てるかも・・・?
そして管理人様、SetDrawAreaを教えていただきありがとうございます。
リファレンスは毎日何度も見ているのですがSetDrawAreaを今まで使ったことがなく
完全にその存在を忘れておりました・・・。(汗)
ものすごく基本的なことをお伺いしてしまい本当に恥ずかしいです、猛省いたします。
私生活でも基本的なことほど見落とす質なので、友人によく笑われております(汗)
ありがとうございました。
320ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(928,427ポイント)
Date: 2008/12/18(木) 19:03
No:25840
|
|
Title: Re:マスク処理の速度について
|
|
計測する時は、マルチタスクOSでは正確な時間は計れないという事を念頭に置いた方がいいかもしれません。
後、あまり細か過ぎると、測定したい処理以外にかかった時間も含まれてしまう可能性があります。
以下、Calcに指定した回数だけ掛け算するプログラムですが、
指定した回数が x10 になっているにもかかわらず、計測時間は x10 になっていないこと、
そして計測するごとに測定時間がかわることを示しました。
この辺も注意して調べてみるといいと思います。
#include "DxLib.h"
void Calc(int num){
int i;
volatile double z;
LONGLONG t;
t = GetNowHiPerformanceCount();
for(i=0,z=1; i<num; i++){
z *= 12345.6789;
}
printfDx("%lld\n",GetNowHiPerformanceCount()-t);
}
int WINAPI WinMain(
HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow ){
ChangeWindowMode(TRUE);
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0 )
return -1;
Calc(1);
Calc(10);
Calc(100);
Calc(1000);
Calc(10000);
Calc(100000);
Calc(100000);
Calc(100000);
Calc(100000);
ScreenFlip();
WaitKey();
DxLib_End();
return 0;
}
425ポイント を手に入れた。
|
|
|
|
|
Name: 山崎 ..入門者(4,857ポイント)
Date: 2008/12/18(木) 19:26
No:25841
| 解決!
|
Title: Re:マスク処理の速度について
|
|
管理人様
貴重な情報をありがとうございます!!
ぜひとも参考にして計測してみようと思います。
コードや結果まで例示していただき大変恐縮です。
72ポイント を手に入れた。
|
|
|
|
Name: もも ..かけだし(1,997ポイント)
Date: 2008/12/17(水) 18:12
No:25783
|
|
Title: 文字列
|
|
初めて質問させてもらいます。
文字列について質問があります^^
cのプログラミングを勉強しているのですが、
最近わからなくなってしまって友達にこのサイトのことを聞いてきました。
英語単語と日本語単語の対応表を配列で
char *dic[10][2] = {
{"important","大切な"}・・・}
のようにつくり、空白で区切られた英語単語列をgetcharで
行単位に読み込み,その中の英語を日本語にかえて表示するプログラムをつくるというもんだいです。(辞書にないものはそのまま出力できるようにする)
これでいきなりわからないことがでてきてしまいました。
getcharは1文字づつ入力するものなので文字列が入力できなくてこまってます。
行単位に読み込むというのもよくわかりません。
わかるかたよろしくお願いします。
できればやさしい回答をお願いします☆。
324ポイント を手に入れた。
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(46,179ポイント)
Date: 2008/12/17(水) 18:27
No:25786
|
|
Title: Re:文字列
|
|
行単位に読み込む関数に、 gets 関数があります。
(ファイルから読み込むなら fgets 関数)
こちらを使って、用意したバッファを渡せば、
バッファに一行読み込まれます。
その後に対応表と照らし合わせ、問題に合わせて出力し、
読み込んだバッファを全てチェックしたら、また一行読むように
コードを書いていけば良いでしょう。
一応、 getchar 関数を使っても以下のように、
char buf[1000];
char* c;
c = buf;
while((*c = getchar()) != '\n'){
++c;
}
*c = '\0';
と、処理すれば、 buf に一行読み込まれます。
242ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(927,708ポイント)
Date: 2008/12/18(木) 13:06
No:25824
|
|
Title: Re:文字列
|
|
>ももさん
こんにちは。ここのサイトを、お友達に聞いてくださったようで、その方によろしくお伝えくださいm(_ _)m
御津凪さんが的確に答えていらっしゃるので回答の必要ないかもしれませんけど、
getcharでも読み取ること出来ます。
1文字読み取る関数ではありますが、それを100回繰り返せば100文字取れます。
とりあえずこんなサンプルを作ってみました。
#include <stdio.h>
#include <string.h>
char DataStr[5][2][32]={
{"This","これ"},
{"is","は"},
{"a","一つの"},
{"pen","ペンです"},
{".","。"},
};
void GetStr(char str[]){
int i=0;
char ch; /* (1) */
//受け取った1文字が改行文字で無い限り格納し続ける
while((ch=getchar())!='\n'){
str[i] = ch; /* (2) */
i++;
}
str[i] = '\0';
}
int main(){
int i,s;
char InputStr[32];
for(i=0; i<5; i++){
GetStr(InputStr);//入力文字列をstrに格納する
for(s=0; s<5; s++){
if(strcmp(InputStr, DataStr[s][0]) == 0){//DataStrと同じだったら表示してループから抜ける
printf("%s -> %s\n",InputStr,DataStr[s][1]);
break;
}
}
}
return 0;
}
実行結果
This
This -> これ
is
is -> は
a
a -> 一つの
pen
pen -> ペンです
.
. -> 。
(1),(2)をはじめ、間違いや改善の余地のある部分がいろいろありますので、そこを見つけて改善してみてください。
型があっているか、オーバーフローしないか、などに注意してください。
文字列の対は構造体を利用したほうがわかりやすそうでしたが、3次元配列でやっていらっしゃるようなのでそのまま利用しました。
もし余力があれば構造体にしてみてください。
また、変換した文字列は最後に連続で表示するべきでしょうから、そのような処理になるように改良してみてください。
また、strcmpの関数を自作するなど、標準関数をなるべく自作するようにすると力がつくと思います。
ももさんが今どれ位理解されているのかわからないので、どの辺からどれ位アドバイスすればいいかわかりませんが、
とりあえずこのサンプルを元に、課題を完成させてみてください。
途中でわからなくなったらまた聞いてください。
761ポイント を手に入れた。
|
|
|
|
Name: ざこ ..初心者(5,962ポイント)
Date: 2008/12/17(水) 10:15
No:25766
|
|
Title: プログラム
|
|
前回のMFCによる○Xゲームを改良しています。前回はコンボボックスに○と×をいれておきどちらか選んでからstaticなどに貼り付けていました。今回はその選ぶ作業を省き
@AB
CDE
FGH
の各番号を押すと最初は○、次違う番号押すと×と交互に押していくという作業にしたいと思います。
@AB ○ ○× ○×
CDE→ → → ○
FGH
などのようにです。
わからない所は最初は○で次から交互にという作業のプログラムです。教えて下さい。
197ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(135,744ポイント)
Date: 2008/12/17(水) 11:57
No:25768
|
|
Title: Re:プログラム
|
|
1:○か×かの判定を行うBOOL型のメンバ変数を1つ追加する。(例:TRUEの場合は○、FALSEの場合は×とする)
2:最初の手順を○にする為に、OnInitDialog関数の中で、このメンバ変数をTRUEで初期化しておく。
3:ボタンが押されたら、押された番号に対応した場所に○か×を表示したあと、TRUEとFALSEを反転させる。(ついでに、一度押された場所を押せないようにする為にボタンを無効にしておくといいかもしれません)
180ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..初心者(6,034ポイント)
Date: 2008/12/17(水) 16:23
No:25776
|
|
Title: Re:プログラム
|
|
じっくり考えたのですがわかりません・・お手数ですが教えてください。
BOOLは整数型でCStringは文字列だからごちゃごちゃになって混乱してしまいました。
38ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(135,748ポイント)
Date: 2008/12/17(水) 17:26
No:25777
|
|
Title: Re:プログラム
|
|
うーん、私にはざこさんが何が分からないのかがよく分かりません。
私の前の書き込みの1〜3で理解出来た事(もしくは理解出来そうな事)と理解出来ない事、それから何が理解出来ないのかを「具体的」に挙げてもらえますか?
4ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..初心者(6,069ポイント)
Date: 2008/12/17(水) 17:59
No:25781
|
|
Title: Re:プログラム
|
|
簡単の為9個ではなく2個にしてます。@,Aの値がそれぞれp1,p2です。
void CMyDlg::OnButton1()
{
hantei();
}
void CMyDlg::OnButton2()
{
hantei();
}
void CMyDlg::hantei()
{
BOOL sw;
CString p1,p2;
if(p1=='○'||p2=='○'){
sw=true;//値が○のときtrueとする
}
else{
sw=false; //×のときfalseとする
if(sw==true){
SetDlgItemText(IDC_STATIC1,p1);
sw=false;
}
else{
SetDlgItemText(IDC_STATIC1,p1);
sw=true;
}
if(sw==true){
SetDlgItemText(IDC_STATIC2,p2);
sw=false;
}
else{
SetDlgItemText(IDC_STATIC2,p2);
sw=true;
}
}
}
というむちゃくちゃな文になってます。
5ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(45,937ポイント)
Date: 2008/12/17(水) 18:16
No:25784
|
|
Title: Re:プログラム
|
|
const char* CMyDlg::GetCheckMark(){
const char* mark;
if(mSetMarkIsMaru){
mark = "○";
}
else{
mark = "×";
}
mSetMarkIsMaru = !mSetMarkIsMaru;
return mark;
}
このメンバ関数と、 BOOL 型メンバ変数 mSetMarkIsMaru (初期値は TRUE とするように)
をCMyDlg に追加して、
各 OnButton 関数内で呼び出せば、この関数の戻り値で○と×が交互に返されます。
後は、バグさんの3.にあるように、○と×がついたボタンを押しても変化が無いように
書き換えるだけのはずです。
182ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..初心者(6,103ポイント)
Date: 2008/12/17(水) 18:41
No:25790
|
|
Title: Re:プログラム
|
|
いやそれはわかると思います。ちょっとやってみますね。ありがとうございました
34ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(135,797ポイント)
Date: 2008/12/17(水) 19:06
No:25793
|
|
Title: Re:プログラム
|
|
ひとつ気になったので…
WINAPIのBOOL型とbool型は別物です。
BOOL型は真がTRUE、偽がFALSEで、bool型は真がtrue、偽がfalseです。
使うべき箇所や使い方は同じで構いませんが、この違いは把握しておいてください。
9ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..初心者(6,406ポイント)
Date: 2008/12/17(水) 19:14
No:25795
|
|
Title: Re:プログラム
|
|
void CMyDlg::OnButton1()
{
GetCheckMark()
}
void CMyDlg::OnButton2()
{
GetCheckMark()
}
const char* CMyDlg::GetCheckMark(){
const char* mark;
if(mSetMarkIsMaru){
mark = "○";
}
else{
mark = "×";
}
mSetMarkIsMaru = !mSetMarkIsMaru;
return mark;
}
としたんですが文字列入力するのはどこでやるとよいのでしょうか?
コンボボックス使っていたときは追加した関数の中でしてたんですが今回はこれをすると
botton1押したら@だけでなくAとかも入力されちゃいますよね。
呼び出し元の関数でするのも判定のときにつらくなりそうなので・・
何か良い方法はありますか?
>バグさん
それは知りませんでした。きちんと勉強しておきますね。
303ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(135,850ポイント)
Date: 2008/12/17(水) 20:04
No:25798
|
|
Title: Re:プログラム
|
|
時間があったので、サンプルを書いてみました。
VC++6.0のMFC使用のダイアログベースアプリです。
分からない事があったら、また質問してください。
53ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..初心者(6,738ポイント)
Date: 2008/12/18(木) 10:53
No:25816
|
|
Title: Re:プログラム
|
|
ありがとうございました。
ところで判定のとき,Judgeのときです。
BOOL CMaruBatsuDlg::Judge(INT nNumber)
{
// Staticのテキストを取り出す
CString cString[9];
INT nStatic[] = {IDC_STATIC1, IDC_STATIC2, IDC_STATIC3, IDC_STATIC4, IDC_STATIC5, IDC_STATIC6, IDC_STATIC7, IDC_STATIC8, IDC_STATIC9};
for (INT i = 0; i < 9; ++i)
{
CStatic* pStatic = (CStatic*)GetDlgItem(nStatic[i]);
pStatic->GetWindowText(cString[i]);
}
のpStatic->GetWindowText(cString[i]);
の所でtypedef識別子にクラスメンバ アクセス演算子(->)を使用しましたって出てエラーが直らないんですが
どうすればいいのでしょうか?
332ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(135,924ポイント)
Date: 2008/12/18(木) 11:14
No:25818
|
|
Title: Re:プログラム
|
|
同じバージョンをこちらでビルドしてもエラーは起こりません。
何か変更しましたか?
2倍のポイントを手に入れた! 74ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..初心者(6,763ポイント)
Date: 2008/12/18(木) 11:14
No:25819
| 解決!
|
Title: Re:プログラム
|
|
自己解決しました。ありがとうございました。
コピペじゃなくて1つ1つ理解する為に自分で打ち込んでいったのでミスがあったようです;
pStatic->GetWindowText(cString[i]); →pStatic->GetWindowText(CString[i]); になってました。
25ポイント を手に入れた。
|
|
|
|
|
Name: Blue ..初心者(7,019ポイント)
Date: 2008/12/18(木) 11:15
No:25820
|
|
Title: Re:プログラム
|
|
GetWindowTextで間違いないですか?(Setではなくて)
取得するならCStringの変数を渡さないと。
2倍のポイントを手に入れた! 90ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..初心者(6,816ポイント)
Date: 2008/12/18(木) 12:04
No:25822
|
|
Title: Re:プログラム
|
|
なんかDの所おかしいんですが@D AD GD FD CDと押すとその時点で勝利とでます。
私の所だけかな・・
53ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(135,981ポイント)
Date: 2008/12/18(木) 12:13
No:25823
|
|
Title: Re:プログラム
|
|
5がおかしいならば、そこを判定している箇所がおかしいのでしょう。
Judge関数の中のswitchの中のcase 5の箇所がそうです。
ちなみにこちらでは誤判定は確認できません。
57ポイント を手に入れた。
|
|
|
|
Name: dic ..初心者(7,162ポイント)
Date: 2008/12/17(水) 22:21
No:25800
|
|
Title: コンパイルエラー その2
|
|
また、質問させてもらいます
自作のライブラリを改良しているのですが
CDicLog.cpp
c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(32) : error C2144: 構文エラー : 'int' は ';' によって先行されなければなりません。
c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(32) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
と出て stdio.h 内でコンパイルエラーが発生しているようで
手が出せません
#ifdef __cplusplus
extern "C" {
#endif
stdio.h内の上記の場所でエラーが発生するのですが
どういった対処が考えられるでしょうか?
使用コンパライは VC++ 2008 Express
使用OSは WindowsXP Home Editionです
266ポイント を手に入れた。
|
|
|
|
Name: box ..ハッカー(132,206ポイント)
Date: 2008/12/17(水) 22:37
No:25802
|
|
Title: Re:コンパイルエラー その2
|
|
> 自作のライブラリを改良しているのですが
改良した箇所に問題が隠れていて、
それがstdio.hのところで顕在化しているのかもしれません。
そこで、
> CDicLog.cpp
この中身を見せていただけますか?
32ポイント を手に入れた。
|
|
|
|
|
Name: たいちう ..上級者(16,990ポイント)
Date: 2008/12/17(水) 22:41
No:25804
|
|
Title: Re:コンパイルエラー その2
|
|
> stdio.h内の上記の場所でエラーが発生するのですが
> どういった対処が考えられるでしょうか?
stdio.hにバグのある可能性は無視して、あなたの書いたプログラムに
100%問題があるものと思ってください。少なくともとりあえずは。
Hello Worldのプログラムで、stdio.hを使いますよね?
コンパイルエラーにならないことを確認してください。
Hello Worldのプログラムと、あなたのプログラムとの間のどこかで、
コンパイルエラーが出るようになるはずですので、
何をしたらエラーになったのか探してください。
そこまで突き止められたら自分で解決できる場合も多いし、
できなくとも今よりもっと質問しやすいでしょう。
# 憶測では、変なマクロを使ってしまっているのが原因かな?
# もしかしたら、開示されている症状のみでアドバイスできる人も
# 現れるかもしれませんが、上で説明した手順を使えるようになっておくと、
# 自力解決できるケースが増えますよ。
307ポイント を手に入れた。
|
|
|
|
|
Name: dic ..初心者(7,212ポイント)
Date: 2008/12/18(木) 07:23
No:25811
|
|
Title: Re:コンパイルエラー その2
|
|
軽い状態にした環境で作り直しても
やはりコンパイルエラーが起きます
ソースを送付します
VC++ 2008 Expreee にてコンパイルしています
VC++ 6.0 でもコンパイルエラーになりました
50ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..上級者(22,023ポイント)
Date: 2008/12/18(木) 09:53
No:25813
|
|
Title: Re:コンパイルエラー その2
|
|
CDicLog.h
の先頭に意味不明な文字があります
z// 指定された文字列をファイルの末尾に追加します。
↑
51ポイント を手に入れた。
|
|
|
|
|
Name: たいちう ..上級者(17,059ポイント)
Date: 2008/12/18(木) 10:02
No:25814
|
|
Title: Re:コンパイルエラー その2
|
|
次の3つを直せばコンパイルはできるようになります。
CDicLog.hの冒頭のzを削除。
CDicLog.cppの冒頭に、#include "stdafx.h"を追加。
プロジェクトのプロパティで、構成プロパティ-全般-文字セットを
マルチバイト文字セットを使用する、に変更。
69ポイント を手に入れた。
|
|
|
|
|
Name: dic ..初心者(7,235ポイント)
Date: 2008/12/18(木) 10:56
No:25817
| 解決!
|
Title: Re:コンパイルエラー その2
|
|
ボンミスでした
解決しました
ありがとうございました
23ポイント を手に入れた。
|
|
|
|
Name: 匿名 ..入門者(4,700ポイント)
Date: 2008/11/17(月) 16:20
No:24231
|
|
Title: 進行方向に画像が向くショット
|
|
シューティングゲームの館とかの「進行方向に画像が向くショット」とかを読んだのですが、よくわかりませんでした。DrawRotaGraph関数の第四引数とかを1フレームあたりの移動距離とかから求めたいのですが、どういう式を書けばいいのでしょうか?
2倍のポイントを手に入れた! 218ポイント を手に入れた。
|
|
|
|
Name: 匿名 ..入門者(4,774ポイント)
Date: 2008/11/18(火) 22:02
No:24283
|
|
Title: Re:進行方向に画像が向くショット
|
|
うーん、まあそうだとは思うんですけど、具体的にはどういう計算をすれば回転率になるでしょうか?
34ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(892,191ポイント)
Date: 2008/11/19(水) 02:27
No:24295
|
|
Title: Re:進行方向に画像が向くショット
|
|
例えば弾データの構造体に角度を表す
〜.Angle
なる変数があるとします。
弾の発射角度を登録する時に、例えば下に発射する時は
〜.Angle = π/2;
ですよね。で、座標を計算する時は
〜.x += cos( 〜.Angle ) * 〜.Speed;
〜.y += sin( 〜.Angle ) * 〜.Speed;
で計算出来ますよね。
描画する時は仰っている関数の第四引数にこの〜.Angleを指定すればいいのです。
126ポイント を手に入れた。
|
|
|
|
|
Name: 匿名 ..入門者(4,893ポイント)
Date: 2008/11/20(木) 16:30
No:24361
|
|
Title: Re:進行方向に画像が向くショット
|
|
.Angle = π/2;
下ですからπは6.28ですかね?
ではいろいろな方向に撃つ時は2を変えればいいんですか?
それだったら2の部分に入る数値はどうやって出せばいいんですか?
〜.x += cos( 〜.Angle ) * 〜.Speed;
〜.y += sin( 〜.Angle ) * 〜.Speed;
見た感じcos( 〜.Angle )とsin( 〜.Angle )が1フレームにどれだけ増えるかを
計算してくれているようですね。
具体的にはどんな数値が出てくるのでしょうか?
119ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(892,207ポイント)
Date: 2008/11/20(木) 17:14
No:24363
|
|
Title: Re:進行方向に画像が向くショット
|
|
>.Angle = π/2;
>下ですからπは6.28ですかね?
円周率を2で割ったら6.28になりますか?
πとは円周率の事です。円周率がいくつかご存知でしょうか?
もしご存じなければぐぐってみましょう。
>ではいろいろな方向に撃つ時は2を変えればいいんですか?
2を変えるより、計算式を変えたほうがいいですね。
円周率と向きの関係はわかりますか?
問1. 180度は円周率を使うといくらと表せますか?440度はいくらですか?
それがわかればどちらの方向にもセット出来るはずです。
>見た感じcos( 〜.Angle )とsin( 〜.Angle )が1フレームにどれだけ増えるかを
>計算してくれているようですね。
そうではありません。cosとsinは単位円におけるx成分、y成分を求めているだけです。
実際の長さはスピードをかける必要があります。
サイン、コサインってどういうものかご存知でしょうか?
問2. 斜辺の長さ3の直角二等辺三角形の底辺の長さがいくらかわかりますか?
>具体的にはどんな数値が出てくるのでしょうか?
問1.2.の答えを理解した上で、自分で試してみれば一番良く解るかと思います。
試さなくても、理解していればどんな値が出るかは想像でき、
また、詳しく想像する必要も無い事がわかります。
疑問があるなら、省略せず一つ一つきちんと理解していくことが大事です。
197ポイント を手に入れた。
|
|
|
|
|
Name: 匿名 ..初心者(5,565ポイント)
Date: 2008/11/20(木) 18:55
No:24371
|
|
Title: Re:進行方向に画像が向くショット
|
|
ああπですか、すいません、よく見えませんでした。
π/2が下と言うことは1.57が下ですか?
画像の回転だと3.14が下だった気がするんですが。
>問1. 180度は円周率を使うといくらと表せますか?440度はいくらですか?
調べてみましたが180度はπだと思います。
440度は暗算ではパッと出ないので、電卓を使ってみると・・2.44πですかね・・
πって180度でしたっけ?
cos( 〜.Angle )とsin( 〜.Angle )ですがもう少し想像力を働かせると
進行方向に1進むとXとYがいくら増えるか・・ですかね?
で、それにスピードをかけるとN進むとXとYがこれだけ増える。
ってことですかね?少しは近づきましたか?
>問2. 斜辺の長さ3の直角二等辺三角形の底辺の長さがいくらかわかりますか?
直角二等辺三角形だから
斜辺は√2に対して残りの二辺は1だから・・
3の二乗で斜辺は9になるから、1辺は二乗して半分の4.5になる数と言うことで・・
底辺は√4.5・・なのかな・・
でセットですがπ/2が下だから
右はπ/4、左は・・π/1.5?、上はπですかね?
では撃つ方向が決まっていなかったらどうすればいいですかね?
少し苦労話をすると
相手の方に撃つ場合どうするか考えた結果が、まず当たり判定の時のように
(相手のY座標-自分のY座標)の2乗 + (相手のX座標-自分のX座標)の2乗
で斜辺の2乗を求めて、関数で平方根を求め斜辺の長さを出した後
相手とのY,X座標の差を斜辺の長さで割った数にスピードをかけて
1フレームでどのぐらい進むかを出して毎回その数を足しています。
自分でも見ていていやになる処理です。正確に相手に飛ばないし・・
角度の計算でこれがきちんとした物になるのなら助かります。
しかし、撃つ方向が決まっていない場合πを何で割るかを
どうやって求めればいいんでしょうか?
672ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(892,739ポイント)
Date: 2008/11/20(木) 19:34
No:24372
|
|
Title: Re:進行方向に画像が向くショット
|
|
>π/2が下と言うことは1.57が下ですか?
>画像の回転だと3.14が下だった気がするんですが。
使っている画像の初期方向が上なんじゃないでしょうか?
データファイルを確認して下さい。
描画の関係上、xが正の方向が右、yが正の方向が下ですね。
角度0は右ということになります。そして90度はπ/2ですよね。
ですから、プログラムの計算上、下はπ/2になります。
弾の画像が上向きなのなら、描画する時に
〜.angle + π/2
してやればいいと思います。
>cos( 〜.Angle )とsin( 〜.Angle )ですがもう少し想像力を働かせると
>・・・
>ってことですかね?少しは近づきましたか?
そうですね。
斜辺1に対するx,y成分なので、スピードをかけてやれば、その成分もスピード倍され、適切なスピードで指定した方向に飛びます。
>440度は暗算ではパッと出ないので、電卓を使ってみると・・2.44πですかね・・ πって180度でしたっけ?
そうですね。πは180度ですから
(440.0 / 180) * π
と表せますね。「720度はπであらわすと?」のようにフィーリングで答えられそうな問題だと自分がどんな計算式でそれを計算したのかわから無いかと思い、わざときっちり答えの出ない数字にしました。
もし答えを小数でかくなら仰るように2.4444....πですね。
計算は機械がやってくれるので、私達は式さえ作れたらオッケーです。
逆に言えば答えだけ出せたのではプログラムが作れない場合が多いです。
>直角二等辺三角形
この答えは是非サインコサインを使って欲しかったのです。
コサインって斜辺分の底辺ですよね?
って事は「斜辺×コサインθ」で斜辺が相殺されますから底辺が出ますね。
コサインは「√(2)分の1」ですね。斜辺は3なのですから「3/√(2)」になりますね。
コサインθがいくつになるかは知っている必要はありません。
機械が計算してくれます。
自分は「斜辺にコサインθをかければx成分が出るんだな」だけ知っておけばいいのです。
じゃ
問3. 斜辺の長さ5、角度θ=61°の直角三角形の対辺の長さはいくらですか?
>相手のいる方向に撃つ
これはアークタンジェント(逆正弦)を計算する関数で計算出来ます。
atan2 という関数に
atan2( 相手のy座標 - 自分のy座標 , 相手のx座標 - 自分のx座標 );
と渡してやるとその角度が返ります。
これを弾の発射角度にしてやればいいです。
532ポイント を手に入れた。
|
|
|
|
|
Name: 匿名 ..初心者(5,873ポイント)
Date: 2008/11/21(金) 18:43
No:24403
|
|
Title: Re:進行方向に画像が向くショット
|
|
>使っている画像の初期方向が上なんじゃないでしょうか?
>データファイルを確認して下さい。
まさにその通りです。
>描画の関係上、xが正の方向が右、yが正の方向が下ですね。
>角度0は右ということになります。そして90度はπ/2ですよね。
>ですから、プログラムの計算上、下はπ/2になります
では画像の初期方向は右のほうがいいんですか?
問3. 斜辺の長さ5、角度θ=61°の直角三角形の対辺の長さはいくらですか?
対辺ですからyですよね、式は5×サイン61°
61°は・・たしか0.57かな、
では対辺は2.85?
問4. この矢印の方向に撃つには・・
うーん、どうやったらいいですかね。
とりあえず矢印のどこかに点をとってyとxの差を出してPIをその割合で割れば出ますかね?
308ポイント を手に入れた。
|
|
|
|
|
Name: 匿名 ..初心者(6,179ポイント)
Date: 2008/11/22(土) 15:44
No:24439
|
|
Title: Re:進行方向に画像が向くショット
|
|
>いや、上にも書いたとおり、描画する時に+PI/2すればいいだけです。
Angle+PI/2の時にAngleにはなにが入っているのか気になりますが
やはり正規の方法の方がしっくりくるので右にしておきます。
>覚えてるんですか?
いえ覚えていたわけではなく、学校で電卓を使って出した後に下校時刻になったので
家に帰って書き込む時に確か0.57だったかなと思い出しただけです。
問4. この矢印の方向に撃つには・・
どうすればいいかなー
矢印の先に敵でもいればアークタンジェントで出せそうだけど
それじゃPIが使えないし・・
見た感じ矢印は上に対して45度ぐらいだから
右が0で下が1.57だったから左が3.14、上は4.71になる・・かな?
では逆算すると.Angle = π/0.625;ぐらいになるかな?
306ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(896,149ポイント)
Date: 2008/11/23(日) 01:45
No:24460
|
|
Title: Re:進行方向に画像が向くショット
|
|
>問1. 180度は円周率を使うといくらと表せますか?440度はいくらですか?
でせっかく計算式を作ったのでこれを使って見ましょう。
画像の矢印は特に角度をかかなかったので、はっきりした正解は無いですが、上に60°位のつもりでした。
45°でもいいです。
45°にしておきましょう。
では、この角度ってプログラム上、そして弧度法でいくらでしょうか?
右って0度ですよね。下って90度、左は180度、上は270度、右は360度ですよね。
上と右の間なので、270+45度ですね。
または-45度です。
45度って180度の4分の1ですよね。それならもう答えは出ますよね。
そうやって考えるとどちらの方向にも弾は飛ばせると思います。
169ポイント を手に入れた。
|
|
|
|
|
Name: 匿名 ..初心者(6,231ポイント)
Date: 2008/11/25(火) 15:54
No:24536
|
|
Title: Re:進行方向に画像が向くショット
|
|
だいぶわかってきました
ところで「〜.Angle 」ですが角度なので
int型だと小数点以下が切り捨てられるからfloat型とかにすればいいんですか?
そうだとしても座標は整数ですから少しずつずれてくるんじゃないでしょうか?
52ポイント を手に入れた。
|
|
|
|
|
Name: 匿名 ..初心者(6,271ポイント)
Date: 2008/11/26(水) 14:56
No:24602
|
|
Title: Re:進行方向に画像が向くショット
|
|
doubleですか、なるほどなるほど
でも描画系の関数にdouble型をつっこんでもちゃんと動くんですかね?
40ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(898,135ポイント)
Date: 2008/11/26(水) 15:17
No:24603
|
|
Title: Re:進行方向に画像が向くショット
|
|
DrawGraph関数に渡す座標は確かにint型ですが、計算はdoubleでやって、描画はintでやればいいのです。
DrawGraph( (int)〜.x, (int)〜.y, .... );
のように。また、小数点を表現できる描画関数も存在します。
DrawGraphF( (float)〜.x, (float)〜.y, .... );
関数の後ろにFをつけるとfloat型の座標を渡す事のできる描画関数になります。
ドット絵のRPGなどでは使ってもよく利点がわかりませんが、
シューティングのように細かい弾が大量に色んな方向に飛ぶようなシーンでは重宝します。
65ポイント を手に入れた。
|
|
|
|
|
Name: 匿名 ..初心者(6,412ポイント)
Date: 2008/11/27(木) 17:44
No:24652
|
|
Title: Re:進行方向に画像が向くショット
|
|
つまり毎回 int=double とでもしてから渡せばいいんですか?
(int)〜.xってどういう意味ですか?
話は変わりますが、今まで「構造体?配列でも同じじゃないの?」
とか言って目をそらしてきましたけど、そろそろ構造体を使ったほうがいいですね。
で、構造体の宣言はどうやるんでしたっけ?
141ポイント を手に入れた。
|
|
|
|
|
Name: 通りすがり ..中級者(12,894ポイント)
Date: 2008/11/27(木) 21:21
No:24662
|
|
Title: Re:進行方向に画像が向くショット
|
|
プログラムは自分で勉強するものです。
そして構造体やキャストはC言語の基本です。
ウェブの解説などでも十分勉強できるのですからまず自分で勉強しましょう。
81ポイント を手に入れた。
|
|
|
|
|
Name: 匿名 ..初心者(7,066ポイント)
Date: 2008/11/28(金) 16:58
No:24716
|
|
Title: Re:進行方向に画像が向くショット
|
|
と、言われたので一応調べてみました。
struct p {
int a;
char b[5];
double c;
};
で枠を作り
struct p a;
で宣言するようですね。
struct p = { 0 , "aaa", 00.0 };
が初期化みたいですね。b[5]に全部aaaが入るのかな?
struct p[3] {
int a;
char b[5];
double c;
};
と書くと構造体配列になるようですね。
struct p[3] = {
{ 0 , "aaa", 00.0 }
{ 0 , "aaa", 00.0 }
{ 0 , "aaa", 00.0 }
};
のように初期化するらしい、これまとめられないのかな?
struct p[3] {
struct s[3] {
int a;
char b[5];
double c;
}
};
で構造体の中に構造体、になるのか?
struct p[3] = {0};
とかで全部に0が入らないかな、これ。
p[0].a
のように書いて使うようですね。
p[0].s[0].a
構造体の中に構造体があったらこんな感じかな。
調べた結果はこんな感じ、結論を言うと自分には独学は向いていないらしい。質問したほうが早そうだ・・・
でも構造体の中に構造体と言うのは使えるかもしれない
一度に5個の弾を発射するショットの場合
struct s[10] {
int f;
struct s[5] {
int f2;
}
};
弾一つ一つのフラグをf2に格納し
すべて0になったらfを0にすればいいのだろう
これを10個作っているので5個一組の弾が同時に10個存在できることになると言うわけだ。
では具体的にいくつ変数がいるだろうか?
パッと思いつくのは
フラグ
X,Y座標
角度
カウンタ
になる
画像の種類は処理ごとに決まっているので書く必要はないと判断したがどうなのだろうか?
私はいつも弾の種類ごとに処理と描画を独立させているのだが
普通は一緒にするものだろうか?
だから画像の種類も飛ぶパターンも処理ごとに決まっているから
配列に入れる必要はなかったのだがこれでいいのだろうか?
とりあえず今までにわかったことを総合して構造体を作ってみよう
struct c {//1Pから4Pまで誰が撃っているか
struct p {//ショットの種類
struct t {//何発目か
int mf;//弾一組のフラグ
struct s {//弾一つの構造体
int f;//弾一つ一つのフラグ
double x,y;//X,Y座標
double a;//角度
int k;//カウンタ
};
};
};
};
struct s[10];
struct t[10];
struct p[8];
struct c[4];
今作ろうとしているゲームだとこんな感じになりますね。
ええ、おかしい事は自分でもわかっています。
なにこの四重構造体?ありえないでしょ
さてどうすればいいでしょうかね。
と言うより上に書いた構造体の作り方、あってますかね?
7割がた間違ってると思うんですけど。
654ポイント を手に入れた。
|
|
|
|
|
Name: 通りすがり ..中級者(13,079ポイント)
Date: 2008/11/28(金) 17:46
No:24717
|
|
Title: Re:進行方向に画像が向くショット
|
|
う〜ん、指摘ばかりするのもあれですが
>調べた結果はこんな感じ、結論を言うと自分には独学は向いていないらしい。質問したほうが早そうだ・・・
はっきり言って回答する気が無くなります。
まず、ソースコードはタグを使うなど規約を守るところから始めて下さい。
あと、構造体を階層化したい時は、構造体の定義の中でその構造体を宣言して下さい。
書いて、あってるか聞くんじゃなくて、自分でコンパイルしてみましょう。
141ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(900,725ポイント)
Date: 2008/11/28(金) 18:54
No:24724
|
|
Title: Re:進行方向に画像が向くショット
|
|
Cの基本がわからないと、ゲームを作っていてもしょっちゅう聞かないといけないことが出てくるでしょうし、
スムーズに制作出来ないと思います。
まずはコンソール画面を使ってCの基本をマスターしましょう。
いきなり4つにせず、構造体の構造体を作りたいならまず2層から試してみましょう。
コードを作ってみたらとにかくまずコンパイルしましょう。
エラーが出たらそのエラーメッセージからどうやってバグを推測すれば良いか考えるのもまたスキルの一つです。
検索するなり、バグを解決する力もつけましょう。
コンパイルした回数だけ上達します。
逆に言えば紙のうえ、キーボードの上だけじゃ上手になりません。
とりあえずコンソールで構造体を使ってジャンケンゲームを作るなどしてみてはどうですか?
181ポイント を手に入れた。
|
|
|
|
|
Name: 匿名 ..初心者(7,524ポイント)
Date: 2008/12/01(月) 17:22
No:24856
|
|
Title: Re:進行方向に画像が向くショット
|
|
そうですね、では身の丈に合った物を
struct s {//弾一つの構造体
int f;//弾一つ一つのフラグ
double x,y;//X,Y座標
double a;//角度
int k;//カウンタ
};
struct s a[10];
こう書くと、まずsと言う型が作られ、次にs型の構造体aを10個作ったことになる・・はず。
で2層ですが
struct s {//弾一つの構造体
int f;//弾一つ一つのフラグ
double x,y;//X,Y座標
double a;//角度
int k;//カウンタ
};
struct t {//何発目か
int mf;//弾一組のフラグ
struct s a[10];
}
struct t a[10];
これでs型の構造体aが10個が入ったt型の構造体aを10個作ったことになって
弾を10個単位で100個まで飛ばせるようになる・・はず。
s型とt型は違いますから構造体名が同じでもいいんですかね?
ではコンパイルして確認してきます。
しかしタグをつけても特に変化しませんね。何か間違えたかな?
458ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(903,592ポイント)
Date: 2008/12/01(月) 21:33
No:24870
|
|
Title: Re:進行方向に画像が向くショット
|
|
もう少し解り易いタグの名前にしたほうがよくないですか?
「弾」の情報をひと纏りにしたBullet_tという型を作ってみます。
typedef struct{
int flag;
double x,y;
} Bullet_t;
「弾」を1000個持った、「弾幕」の情報をひとまとまりにした型を作ってみます。
typedef struct{
int flag;
int kind;
Bullet_t Bullet[1000];
} Danmaku_t;
Danmaku_t Danmaku[100];
こうすると、フラグと座標データを持った「弾」を更に1000個、そしてフラグと種類情報をもった「弾幕」
データが100個作られます。
こうすれば
Danmaku[n].Bullet[m].flag
のように参照出来ます。
306ポイント を手に入れた。
|
|
|
|
|
Name: 匿名 ..初心者(6,688ポイント)
Date: 2008/12/02(火) 16:30
No:24927
|
|
Title: Re:進行方向に画像が向くショット
|
|
まあ本番ではタグの名前もちゃんとしたほうがいいですね・・
ところで調べたんですが
typedef struct{
int flag;
double x,y;
} Bullet_t;
のBullet_t;はtypedefを使ってBullet_t;型を作ることでstructをつけなくても宣言できるようにしているようですが、typedef struct{の所に構造体名というか型名が無いのはBullet_t;が代わりになってるから必要ないからですか?
あと話が変わりますけど、私は今まで弾の種類ごとに違う配列を使っていましたけど
シューティングゲームの館などを見ると、使っていない構造体を探してパターンを渡すことで
1つの配列ですんでいるようですね。
このようにすれば前に書いたような四重構造体なども必要なさそうですね。
ためしに今の知識で作ってみると
typedef struct {//弾一つの構造体
int flag;//フラグ
double x,y;//X,Y座標
double Angle;//角度
int Count;//カウンタ
int Pattern;//パターン
} Shot_t ;
Shot_t Shot[4][100];
二次元配列になっているのは、どのプレイヤーが撃った弾かぐらいは分けたほうがわかりやすいかな、と思ったからです。
これで弾を撃つ時に[4]の方に自分が何番のプレイヤーかを入れて[100]の方でfor文を使って使われていない構造体を探せばOKですね。
で、描画する時は[4]を0から3まで変化させて[100]を0から99まで変化させればいいという事になる。
パターンで処理を分ける時に[4]に入っている数を引数として渡せば敵味方も付きそうだからOKですね。
一度に何発撃つかは技ごとに違いますから、発射処理は分ける必要がありますね。
角度がしっかりしていればちゃんと一まとまりに飛んでくれると思うし[100]の所で一回区切って
Player.Shot.flagのように二重にしてもいいですね。
しかし配列1つで弾の処理が全部できるとは・・構造体ってすごいですね。
836ポイント を落としてしまった。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(905,117ポイント)
Date: 2008/12/02(火) 18:23
No:24939
|
|
Title: Re:進行方向に画像が向くショット
|
|
typedefは作った構造体の型に新しい名前を付ける効果があります。
#define
と似たようなものですね。解釈は違いますが。
あと、どのような敵から撃ったかわかるように二次元配列にすると仰っていますが、
弾幕情報にどの敵から撃ったか収めたほうがすっきりしませんか?
typedef struct{
int flag;
int EnemyID;
Bullet_t Bullet[1000];
} Danmaku_t;
こんな感じで、どの敵が発射している弾幕か記憶する必要があります。
そうでないと、EnemyIDのいる座標から弾を出す事も、
敵が倒された時それ以上弾を登録しなくする事もできなくなってしまいます。
しかしこのように構造体の中にいれることでこれらが可能になり、同時に二次元配列にする必要がなくなります。
二次元や三次元配列にするより、必要なデータはメンバに入れてやったほうが解り易いと思います。
しかしプレイヤーの弾情報と敵の弾情報を一緒にするのは適切かどうかわかりません。
必要な変数も違うでしょうし、当たり判定の計算や行いたい処理・効果も違うと思います。
467ポイント を手に入れた。
|
|
|
|
|
Name: 匿名 ..初心者(6,740ポイント)
Date: 2008/12/03(水) 19:24
No:24998
|
|
Title: Re:進行方向に画像が向くショット
|
|
確かにそうですね。
イメージで言うと四人対戦の格ゲーですから、敵もプレイヤーの場合がほとんどだと思いますけど、大量のザコ敵と戦う場合などを考えるとプレイヤーの数しか配列がないと大変な事になりますからね。
ところで
>計算はdoubleでやって、描画はintでやればいいのです。
とはどういう事でしょうか?
あと東方緋想天とかだと、相手の弾と自分の弾が相殺したりしてますけど、それっていちいち全部の敵弾との距離を測るしか方法が無いですかね?
52ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(907,284ポイント)
Date: 2008/12/03(水) 20:16
No:25000
|
|
Title: Re:進行方向に画像が向くショット
|
|
上にも同じことかきましたが、
DrawGraph関数に渡す座標は確かにint型ですが、計算はdoubleでやって、描画はintでやればいいのです。
DrawGraph( (int)〜.x, (int)〜.y, .... );
のように。キャストして書けばいいのです。
キャストの意味がわからないときはググって下さい。
しかしintでの描画はシューティングでは使わない方がいいです。
小数点を表現できる描画関数
DrawGraphF( (float)〜.x, (float)〜.y, .... );
が存在するのでそちらをお使い下さい。
相手の弾と自分の弾がある一定の距離にある時消すような処理をする為には、一般的には一つ一つ距離をはかるしか無いと思います。
自分より相対的に正の方向にある弾、負の方向にある為、などで条件わけしてデータを保存しておくなど、
効率化する方法はいくつかあるかもしれませんが、
全部判定してしまった方が管理がらくだと思います。
213ポイント を落としてしまった。
|
|
|
|
|
Name: 匿名 ..初心者(6,993ポイント)
Date: 2008/12/04(木) 18:07
No:25083
|
|
Title: Re:進行方向に画像が向くショット
|
|
ググって見ましたが、(float)とかを変数名とかの頭につければ、その時だけfloat型あつかいになるようですね。
そういえばどこかで見たような気がします。
構造体とかだと(float)Shot[i].x;見たいな感じですかね。
DrawGraphFのようにfをつけると小数点が表現できるようになるようですが、DrawRotaGraphとかDrawStringとかでも可能ですか?
ところで小数点にしても1ドットは1ピクセルで表現すると思うから変化が無いようにも見えますが・・まあフルスクリーンとかなら細かくなるかもしれませんが。
まあシューティングはまだ実力不足という事で今回は格ゲーですからそこまで正確でなくてもいいんですが、小数点も表現できたほうが何かと便利ですね。
253ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(910,016ポイント)
Date: 2008/12/04(木) 20:12
No:25097
|
|
Title: Re:進行方向に画像が向くショット
|
|
色は1か0で表現されているわけではありません。
「中間」も表現出来ます。例えば座標1.5なら2ピクセル目の色の濃度を50%にして描画すれば1.5ピクセル目に見えます。
ゲームプログラミングの館のコードを元にサンプルを作りましたので、実行して確認して下さい。
エンターを押しっぱなしにして、左右の列で違いをよく確認するとその意味がわかります。
どちらがスムーズに進んでいるように見えますか?
なお、どんな関数があるかは、ヘッダファイルを見るとわかります。
Ctrl + Fで探すとよいでしょう。
#include "DxLib.h"
struct shot{
double x,y;
int flag;
};
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
if( DxLib_Init() == -1 ) return -1; //DXライブラリ初期化 エラーが起きたら終了
int image[16],i,counter=0; //counter=発射してからのカウントをする変数。
char Key[256];
struct shot tama[10]; //tamaを10個作る。
for(i=0;i<10;i++){ //初期化処理
tama[i].x=640/2; tama[i].y=480; //座標代入
tama[i].flag=0; //飛んでいない事を示すフラグ=0
}
SetDrawMode( DX_DRAWMODE_BILINEAR );
SetDrawScreen( DX_SCREEN_BACK ) ;//描画先を裏画面に設定
LoadDivGraph( "char.png" , 16 , 4 , 4 , 32 , 32 , image ) ;//画像を分割してimage配列に保存
while(1){
ClearDrawScreen(); //裏画面のデータを全て削除
GetHitKeyStateAll( Key ) ; // すべてのキーの状態を得る
if( ProcessMessage() == -1 ) break ; //異常がおきたら終了
if(counter<10) //前にエンターを押してから5カウント未満なら
counter++; //カウントアップ
else if( Key[ KEY_INPUT_RETURN ] == 1 ){//5カウント以上たっていたら
counter=0; //カウンターを戻す
for(i=0;i<10;i++){
if(tama[i].flag==0){ //発射していない玉を探し、
tama[i].flag=1; //発射フラグを立てる
break;
}
}
}
for(i=0;i<10;i++){
if(tama[i].flag==1){ //発射している玉なら
tama[i].y-=3; //座標を8減らす
tama[i].x-=0.1; //座標を8減らす
DrawRotaGraph ( (int) (tama[i].x+100) , (int) (tama[i].y) ,4.0,0.0,image[1],TRUE );
DrawRotaGraphF( (float)(tama[i].x-100) , (float)(tama[i].y) ,4.0,0.0,image[1],TRUE );
if(tama[i].y < -32){ //もし画面外まで来たら
tama[i].y=480; //初期値に戻し、
tama[i].flag=0; //発射フラグを戻す
}
}
}
if( Key[ KEY_INPUT_ESCAPE ] == 1 ) break;//Escボタンが押されたらブレイク
ScreenFlip() ;//裏画面データを表画面へ反映
}
DxLib_End() ;// DXライブラリ使用の終了処理
return 0 ;// ソフトの終了
}
920ポイント を手に入れた。
|
|
|
|
|
Name: 匿名 ..初心者(7,352ポイント)
Date: 2008/12/05(金) 19:53
No:25146
|
|
Title: Re:進行方向に画像が向くショット
|
|
ああ、なるほどグラデーションですか。確かにグラデーションを付けてくれれば滑らかに動いているように見えますね。早速試してみます。
ところで
else if( Key[ KEY_INPUT_RETURN ] == 1 ){//5カウント以上たっていたら
counter=0; //カウンターを戻す
for(i=0;i<10;i++){
if(tama[i].flag==0){ //発射していない玉を探し、
tama[i].flag=1; //発射フラグを立てる
break;
}
}
}
のbreak;は、何をブレイクしているのでしょうか?
for文でしょうかね?以前学校の先輩にfor文はbreak;で抜けることができないと言われたのですが・・
あと、龍神録プログラミングの館に「敵の消滅エフェクトを作ってみよう」と言う項目がありますが、自機のショットに命中した時のエフェクトをつけたい場合はどうすればいいでしょうか?
359ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(911,309ポイント)
Date: 2008/12/05(金) 20:30
No:25147
|
|
Title: Re:進行方向に画像が向くショット
|
|
プログラムは演習でみにつきます。
疑問があるときはかたっぱしからコンパイルしてみてください。
今回あえて答えませんので、自分で確かめてみてください。
自分では解決できないことなら仕方ないですが、
今回for文からbreakで抜けられるかどうかは自分で試すか調べるかすれば解決できますよね。
いじわるしているわけではないです。「自力で解決すること」「調べること」もプログラミングスキルの一つですので、まずは自分で解決を試みてみてください。
>のbreak;は、何をブレイクしているのでしょうか?
あいている格納庫を見つけて登録しているわけですが、breakしなかったらどうなるでしょうか?
また、敵の消滅エフェクトの方法がわかれば自機にも応用できると思います。
とりあえずどの辺までわかって、どの辺の応用の仕方がわかりませんか?
206ポイント を手に入れた。
|
|
|
|
|
Name: 匿名 ..初心者(7,725ポイント)
Date: 2008/12/06(土) 17:09
No:25206
|
|
Title: Re:進行方向に画像が向くショット
|
|
まあ、確かに自分でも調べられるんなら自分で調べたほうがいいですね。
で、エフェクトですが。注釈を集中して見ればだいたいの流れは分かるんですが、弾の消滅エフェクトの場合はどんな方法が効率がいいのか、と言う事で悩んでいます。
私に思いつく方法といえば、龍神録のようにエフェクトを登録してから一括して処理を行う方法と、弾自体にエフェクトを組み込む方法です。
弾自体にエフェクトを組み込むと言うのは、弾のフラグとカウンタを使いまわす方法です。新たに変数を作ってもいいんですが、それはまあ後回しにして。
弾が敵に当たったらフラグを1から2にしてカウンタを0に戻します。フラグが2になっていたら弾の変わりにエフェクトを描画して、そのまま一定時間が経ったらフラグを0にする。と言うような物です。
弾とエフェクトでどっちが手前に来るかは統一したほうが綺麗なのでこの方法は使いたく無いんですが、一度頭に浮かんでしまうと、頭から離れなくなってしまうんですよね・・処理がかなり増えてしまうし・・
373ポイント を手に入れた。
|
|
|
|
|
Name: 匿名 ..初心者(7,889ポイント)
Date: 2008/12/06(土) 17:55
No:25219
|
|
Title: Re:進行方向に画像が向くショット
|
|
すいません日曜日はパソコンが使えないのでまとめて質問させていただきます。
上の画像の大きな弾がいい例ですが、普通透けてる感じを出すにはaブレンドを使いますけど、あの弾は白い部分ははっきりしていますが、赤い部分は透けてますよね。ああ言う表現はどうすればいいでしょうか?
まさか、赤い部分と白い部分を別々に描画してたり・・してませんよね・・
164ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(915,543ポイント)
Date: 2008/12/07(日) 23:42
No:25320
|
|
Title: Re:進行方向に画像が向くショット
|
|
どちらが効率良いかは、実際に両方実装してみて、考えてもいいのではないでしょうか。
明らかに非効率ではない限り、最初のうちはとにかく「トライアンドエラー」です。
試行錯誤することは非常に勉強になります。
2つ思いつく方法があるなら2つともやってみる。わからないことがあるなら調べまくる。わかりにくい使い方がある時は可能な限り自分で沢山実装してみる。
そうしているうちに自分のものになっていくと思います。
未熟ですから今でもそうですが、私も昔から非効率なプログラムはずっと書いてきました。
非効率なプログラムを書いているうちに、「あ、こうすれば効率的だな」とわかってきます。
そのたびに効率的にしていきます。
自分が思いついた方法は、人に聞いた方法の100倍身に付きます。
また、人から聞いた方法は応用が困難ですが、自分で思いついた方法はいくらでも応用できます。
もし館を参考に作っていただけるなら「登録」>「計算」>「描画」の3本柱で作っているプログラムですから、
まずエフェクトを登録する入れ物を作り、登録出来る格納庫を探して登録し、登録されているものを計算し、描画する、というシステムを作るのがいいのではないでしょうか。
敵の消滅エフェクトを登録・計算・描画するシステムがあるのですから、それと同じように作ればよさそうですね。
>一度頭に浮かんでしまうと、頭から離れなくなってしまうんですよね・・
このようなことが大事だと思います。私が勧める方法より、まず自分がやりたい実装方法を実装することの方が大事です。
自分で実装したみたあとで、人から聞いた方法を実装して、どう違うのか、どっちが効率的なのか比べれば大変勉強になると思います。
弾のアルファブレンドの件ですが、これは予め画像自体にアルファ値を設定しているのです。
私の用意した画像にもアルファ値が設定してあります。
PNG画像はRPGの色情報の他に透過が設定できます。
つまり「赤」「青」「緑」「透明」の4色で表現しているとでもいいますか、
「どれくらい透明か」という情報が設定できます。
ペイントでは無理ですが、少し高機能な画像編集ソフトなら透過色のあるPNGが編集できます。
PictBearやGIMPをインストールして開いてみて下さい。
img/bulletフォルダにある特にレーザーの画像なんかは解り易いと思います。
その画像を使うとどうなるか、レーザーを実装する章のプログラムを実行してみるとわかります。
800ポイント を手に入れた。
|
|
|
|
|
Name: 匿名 ..初心者(8,329ポイント)
Date: 2008/12/08(月) 15:54
No:25327
|
|
Title: Re:進行方向に画像が向くショット
|
|
よくわかりました、間違えたっていいんですよね。
館のソースはなかなか役に立ちそうですが、確かに自分で作らないと頭に入らないんですよね、なのでアルゴリズムを参考にさせてもらって自分で新しく作ってみます。
予めアルファ値を設定するんですか、なるほどなるほど、ではどのくらい透過するか決まっているものは予めアルファ値を設定しておけば、いちいちブレンドしなくてもいいんですね。
でも、そうじゃなかったら、やっぱりいちいちブレンドしなくてはいけないのでしょうか?ブレンドする時としない時がある場合は何か効率のいい方法はありませんか?
ところで前に見せていただいたサンプルですが、私の目が衰えているのでしょうか?どちらが滑らかか判別が付きませんでしたが、まあ使い方はよく分かりました。
あと緋想天の霊夢の亜空穴などがいい例ですが、キャラが縦に引き伸ばされる場合などは・・DrawModiGraph関数ですかね、でも普段はだいたいDrawRotaGraphですよね、使い分けるには・・もう1つフラグを増やすとか?もしくは本体は画面外に飛ばして弾として描画するとか、さてどうすればいいかな・・
そういえば永夜抄の現世斬みたいに本体を強制的に移動させる技なんかはどうすればいいでしょうか?
440ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(916,207ポイント)
Date: 2008/12/08(月) 21:55
No:25342
|
|
Title: Re:進行方向に画像が向くショット
|
|
>予めアルファ値を設定しておけば、いちいちブレンドしなくてもいいんですね。
>でも、そうじゃなかったら、やっぱりいちいちブレンドしなくてはいけないのでしょうか?
そうですね。アルファ値を設定していない画像を透過させるためにはプログラムで透過させてやらないといけません。
ブレンドする時としない時というのはどういうときでしょう?
例えば弾を透過させたいなら、弾情報に「透過」なる変数をもたせておき、
0〜255の値をセットしてやればいいのではないでしょうか。
この値は通常255になっていて、255以外の値がセットされた時は、描画部でアルファブレンドするようにすればいいと思います。
また、ブレンド形式を指定させるためには「BlendKind」とでも名づけたブレンドの種類を指定する変数を持たせてもいいかもしれません。
サンプルの方は、右側はよく見たらギザギザの軌跡を描いているようになっていると思います。
左側は少しぼやけたような描画になっているとは思いますが、スムーズに進んでいるようになっていると思います。
後、描画する関数を任意に変えたいと言う事ですが、これも先ほどと同じようにそれを表現する構造体に
描画関数を制御する変数を用意したらいいと思います。
それが面倒なら大きさなどを設定する変数を用意し、全部Modiで描画したらいいのではないでしょうか。
361ポイント を手に入れた。
|
|
|
|
|
Name: 匿名 ..初心者(8,529ポイント)
Date: 2008/12/09(火) 16:41
No:25402
|
|
Title: Re:進行方向に画像が向くショット
|
|
えーと、ブレンドしない時と言うよりは描画するたびに ブレンド→描画→ブレンド解除 の三度手間なんとかならないかなーって事です。確かに透過用の変数を用意すれば透過しないものもセットしないといけなくなりますが、描画した後ブレンドをいちいち解除する必要がないのでいいかもしれませんね。
ところで・・弾の描画ってどこでやるんですかね?弾にパターンを渡して処理を分けますから、パターンの中にそれぞれ描画する所があるんでしょうかね?それとも描画するのは同じなんだからパターンの外で描画してるんでしょうかね?
そもそも弾の種類や数が途中で変化する場合、パターンの中にパターンを作ればいいんですかね?
極端な例が永夜抄のフジヤマヴォルケイノですが、ああ言うのはパターンの中で弾を登録しているんでしょうか?
200ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(918,528ポイント)
Date: 2008/12/09(火) 17:23
No:25408
|
|
Title: Re:進行方向に画像が向くショット
|
|
>ブレンド→描画→ブレンド解除 の三度手間なんとかならないかなーって事です。
ブレンドするときは、ブレンドモードにして、必要なくなったらもとに戻す処理が必要です。
>確かに透過用の変数を用意すれば透過しないものもセットしないといけなくなりますが、描画した後ブレンドをいちいち解除する必要がないのでいいかもしれませんね。
そうではなく、必要な時だけブレンドモードにすればいいです。
上で
>>0〜255の値をセットしてやればいいのではないでしょうか。
>>この値は通常255になっていて、255以外の値がセットされた時は、
>>描画部でアルファブレンドするようにすればいいと思います。
と言った様に、255がセットされている時はブレンドの必要がないのですから、ブレンドモードをセットする必要はありません。
もし加算ブレンドなどをセットする場合は必要ですが。
>ところで・・弾の描画ってどこでやるんですかね
サンプルはご覧になっていますか?
もしプロジェクトをダウンロードされているならその中をご覧下さい。
描画関係はgraph.cppで行っています。
448ポイント を手に入れた。
|
|
|
|
|
Name: 匿名 ..初心者(8,675ポイント)
Date: 2008/12/10(水) 17:41
No:25498
|
|
Title: Re:進行方向に画像が向くショット
|
|
ブレンドする場合は描画する前に
SetDrawBlendMode( DX_BLENDMODE_ALPHA , 128 ) ;
とでもして
ブレンドしない場合は描画の前に
SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 ) ;
とでも書いておけばいちいちブレンド解除しなくてもブレンドのONとOFFができるということですか?
サンプルを見ましたが弾を動かす所と描画する所がどうつながっているのかがよく分かりませんでした。
ところで今一番分からない部分なんですが
描画する物の前後関係です。今作ろうとしているゲームは上視点なのですが、キャラの描画を1P→2P→3P→4Pの順番でやっているので、2Pが1Pの少し上に来たりすると2Pの足が1Pの顔にかかったりして目も当てられない状況に・・こういう時は・・マスク画面かな?
146ポイント を手に入れた。
|
|
|
|
|
Name: 匿名 ..初心者(8,704ポイント)
Date: 2008/12/12(金) 18:18
No:25591
|
|
Title: Re:進行方向に画像が向くショット
|
|
ところで、龍神録の画像を見てみましたが初期方向が上ですね。では描画する時に+π/2しているのですか?
29ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(923,257ポイント)
Date: 2008/12/12(金) 18:28
No:25592
|
|
Title: Re:進行方向に画像が向くショット
|
|
>とでも書いておけばいちいちブレンド解除しなくてもブレンドのONとOFFができるということですか?
いや、ブレンドしおわった時には常にノーブレンドにしておけば、必要ない時はブレンドモードをセットしなければいいだけですよね、ということです。
必要な時だけブレンドモードをセットしてやればいいです。
>キャラの描画を1P→2P→3P→4Pの順番でやっているので、2Pが1Pの少し上に来たりすると2Pの足が1Pの顔にかかったりして目も当てられない状況に
格ゲー作ってるんですよね?格ゲーで上視点ってどんな感じかイメージがわかないのですが、
奥にあるものを常に奥に表示したいのなら「奥行き」なる変数を用意し、その奥行きの順番で描画してやればいいと思います。
常に4P分の奥行きデータをソートし、その順番で描画してはどうでしょう。
>龍神録の画像を見てみましたが初期方向が上ですね。では描画する時に+π/2しているのですか?
弾の画像のことですか?graph.cppの弾を描画を見ていただいたら解ると思いますが、π/2ほど方向を変えて描画しています。
112ポイント を手に入れた。
|
|
|
|
|
Name: 匿名 ..初心者(8,943ポイント)
Date: 2008/12/13(土) 15:09
No:25621
|
|
Title: Re:進行方向に画像が向くショット
|
|
イメージで言うと↑こんな感じです。右上のような状況にならないようにするにはどうするべきか?
キャラのグラフィックは後で差し替える必要がありますね。
まあ、こんな感じの視点ですからY座標がそのまま奥行きになりそうですけど。
とりあえずキャラの描画だけなら画面の上にいるキャラから描画していけば問題はないんですが、これに弾が入ってくると話がややこしくなるんですよね・・小さい弾なら問題はないんですけど、例えば画面を横にレーザーが横切っている時に(画面の下の方)頭だけ切れたりするとすごく不自然になるんですよね・・
239ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(285,888ポイント)
Date: 2008/12/15(月) 03:08
No:25678
|
|
Title: Re:進行方向に画像が向くショット
|
|
>右上のような状況にならないようにするにはどうするべきか?
どうなれば正解なのか今ひとつ判っていないのですが、
管理人さんが書かれているとおり、奥行きの順番でソートして描画すればいいと思います。
それがレーザーであっても同じで、キャラとレーザーの位置をみてどっちが奥にあるかで
描画順を変えれば済みます。
このタイプのゲームであれば、確実に順番が固定されるもの、背景やメニュー、ゲージなどを
除いたマップの上に載っているものは全てソートして描画した方がいいかもしれません。
>描画する時に+π/2しているのですか
〜.x += cos( 〜.Angle ) * 〜.Speed;
〜.y += sin( 〜.Angle ) * 〜.Speed;
なところを
〜.x += sin( 〜.Angle ) * 〜.Speed;
〜.y -= cos( 〜.Angle ) * 〜.Speed;
とすれば、描画時の +π/2は要らなくなるような・・・。
>もちろん角度や座標のデータはfloatやdoubleにすべきです。doubleでいいと思います
floatでも doubleでもどちらでもいいのですが、現状 DXライブラリでゲームを作るので有れば、
DrawGraphF()などの引数が floatであることや、計算精度が制限されていることを考えると、
doubleを使う意味があまりないので floatで十分かな、と思います。
480ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(924,502ポイント)
Date: 2008/12/15(月) 03:45
No:25679
|
|
Title: Re:進行方向に画像が向くショット
|
|
右上がどういう状態になっているのかよくわからないですね;
まぁ仰るようにy座標順に描画してやればオッケーです。
>〜.x += sin( 〜.Angle ) * 〜.Speed;
>〜.y -= cos( 〜.Angle ) * 〜.Speed;
>とすれば、描画時の +π/2は要らなくなるような・・・。
あれ、こうすると移動方向自体が上下逆になりませんっけ?
試してないので違うかもしれませんが・・。
>double型ではなくfloat型
そうですね。
絵弾幕などの座標データは-1〜1で表現しており、原点からの角度や距離もその中で正確に計算する必要が龍神録であること、
そして「スピードデータ*0.9」を100回行い「スピードデータ/0.9」を100回行ってもとのスピードに戻すような処理があったので、
doubleの方がいいのかなと思いましたが、floatでも十分でしたね。
floatだといちいちキャストしないでいいので、多重定義もいりませんし、そちらの方がいいかもしれません。
255ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(286,279ポイント)
Date: 2008/12/15(月) 04:16
No:25684
|
|
Title: Re:進行方向に画像が向くショット
|
|
>試してないので違うかもしれませんが・・。
実は私も試してないんですけど、y側の符号を +から -にしているんで
多分大丈夫じゃないかなぁ、と・・・。
>doubleの方がいいのかなと思いましたが、floatでも十分でしたね
そもそもあれなんですよ。
DXライブラリを使うと、計算精度が悪くなるんですよね。
知っている人は知っている話なのですが
#define PI 3.141592653589793
volatile double add = 0;
double value1 = PI + add;
ChangeWindowMode(TRUE);
DxLib_Init();
double value2 = PI + add;
とすると value1と value2の値が微妙に異なるんですよ。
本来、addは 0なので value1も value2も PIの値になるはずなのですが、
value2は 3.1415927410...と小数点以下6桁目までしか一致しません。
そうなる理由はDXライブラリ、というか内部で使っている DirectXが
高速化の為に単精度まで精度を下げている為なのですが、こういうこともあるので
doubleを使うなら、精度を元に戻さないとあまり意味はないかな、と思うわけです。
64ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(925,649ポイント)
Date: 2008/12/15(月) 05:30
No:25686
|
|
Title: Re:進行方向に画像が向くショット
|
|
>実は私も試してないんですけど、y側の符号を +から -にしているんで多分大丈夫じゃないかなぁ、と・・・。
あぁ、sinとcos逆なんですね。なるほど、90度変わるわけですね。
しかし、確かに90度回転するんですが、進む方向自体が変わってしまいませんっけ・・?
移動する方向と画像の方向は一致するんですが、
例えばatan2で敵と自機との角度計算してangleに格納しても自機にむかって飛んでこなくなりません?
>知っている人は知っている話なのですが
えぇ・・そうなんですか・・。
勉強になります。
やってみましたが、特にaddの値が変化しているとか、そういうことではないんですね。
純粋に下6桁までしか信用できないと・・。
そしてvolatileってはじめて見ました^^;
最適化を防ぐための物なんですね。
今回これが使われているのは、最適化されてないのに、値がおかしくなるぞということを明示的にされているという事ですか?
335ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(285,733ポイント)
Date: 2008/12/15(月) 10:44
No:25692
|
|
Title: Re:進行方向に画像が向くショット
|
|
>例えばatan2で敵と自機との角度計算してangleに格納しても自機にむかって飛んでこなくなりません?
あー、そっか atan2を使うのですね。
そうなると、たしかに調整が必要になりますね。
いつもそういう場合 atan2ではなくて上向きのベクトルと対象のベクトルの内積と外積から
角度を求めていたのですっかり失念していました。
>純粋に下6桁までしか信用できないと・・。
ただの定値の代入だと問題はないのですが。加算などの演算が入ると DxLib_Init()前なら
普通の double(倍精度)で計算されるので正しく PIになるけど、
後だと float(単精度)しかないので、値が微妙に変化する、というわけです。。
>今回これが使われているのは、最適化されてないのに、値がおかしくなるぞと
>いうことを明示的にされているという事ですか?
すみません。ちょっと混乱させてしまったかもしれません。
volatileは addが最適化されて、加算という計算そのものが省略されることを防ぐために付けました。
最適化無しでビルドすれば、volatileなしでも同様の結果になると思います。
546ポイント を落としてしまった。
|
|
|
|
|
Name: Justy ..ハッカー(286,176ポイント)
Date: 2008/12/15(月) 15:07
No:25701
|
|
Title: Re:進行方向に画像が向くショット
|
|
>一般的には使われないんですか?
使われない、ってことはないと思いますけどね。
少なくとも内積・外積で説明されるより、atan2の方が直感的にわかりやすいので
それはそれでいいと思います。
>例えば真下は〜 .angle = PI/2; とかにセットしていますが
>sin,cos逆、そしてy方向反転だと、左に飛んでしまうのではないでしょうか?
左、ですか。
多分どこかで齟齬が生じているようですが、この考え方では
(描画時の回転オフセットが不要にする為)画像と同じく真上を 0度の回転と
しています。
なので、真下であれば 180度、つまり angle=PIに設定することになるので
sin(PI)は 0、-cos(PI)は 1となり [0, 1]で真下を向きます。
(時計回りで)右方向の PI/2であれば sin(PI/2)は 1、-cos(PI/2)は 0に
なりますので、向きは [1, 0]となり、一応画面的には右方向を指します。
とこんな感じなのですが、どこかおかしいでしょうか。
>atan2の方が圧倒的に計算スピードが遅そうですね
どっちが速いか、というのはいくらでも高速化の余地があるので
ちょっとわかりません。
443ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(925,440ポイント)
Date: 2008/12/15(月) 15:16
No:25703
|
|
Title: Re:進行方向に画像が向くショット
|
|
>少なくとも内積・外積で説明されるより、atan2の方が直感的にわかりやすいので
そうですね、「理論はわからないけど、関数は使える」という事もある意味重要ですよね。
小学生とかも館見ているようですし。
ごく初心者を対象にしている解説ですし、ベクトルの話が出てくると数学苦手な人は敬遠してしまう可能性もありますし、
とりあえず館はこのままにしておこうと思います。
>多分どこかで齟齬が生じているようですが、この考え方では画像と同じく真上を 0度の回転としています。
あぁ、なるほど、そうでしたか。
既存の弾幕計算式はそのままに、90度方向の異なる画像を扱う時には、
弾の軌道計算式の方を変えればいいのではという考え方だと誤解していました。
仰る事理解出来ました。くどくどと申し訳ないですm(_ _;)m
275ポイント を落としてしまった。
|
|
|
|
|
Name: 匿名 ..中級者(9,070ポイント)
Date: 2008/12/15(月) 16:44
No:25708
|
|
Title: Re:進行方向に画像が向くショット
|
|
なんだかレベルの高そうな話でよく分かりませんが、とりあえず角度や座標はfloatでもよさそうですね。
>調べてみると、atan2使うのってあまりメジャーじゃないんですね;
チラッと見てみましたが、なんだかatan2を覚える前に私が考えた方法と同じみたいですね。まあatan2の方が式が短そうなのでatan2でいいかな。
弾とキャラの奥行きだけならともかく、大きな弾だと弾と弾の奥行きも入ってくるので大変そうですね。今の段階で一度に5000発近くの弾が飛ぶ可能性もあるんですよね。そこにもうすぐ使い魔とかも入ってくるので、私の実力でそれらをすべて画面の上にある順番に描画するのは無理がある気がしますね。とりあえず弾の奥行きはあきらめて、レーザーがキャラにかかる場合は、そこまで当たり判定を広げてエフェクトを表示したりキャラを吹き飛ばしたりしてごまかすしかなさそうですね。
描画する時のPI/2をするかどうかは難しくてよく分かりませんが、まあ結果は同じだからいいかな。
127ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(926,511ポイント)
Date: 2008/12/15(月) 17:54
No:25710
|
|
Title: Re:進行方向に画像が向くショット
|
|
どこを基準にするかの違いです。
私の理論は右を0度としています。Justyさんが仰った方法は上を0度とする方法です。
>弾とキャラの奥行きだけならともかく、大きな弾だと弾と弾の奥行きも入ってくるので大変そうですね。
大きな弾の奥行きって何ですか?
後、y座標だけでソートしてはいけない理由って何ですか?
y座標でソートして表示するサンプル作ってみました。
http://www1.axfc.net/uploader/He/so/170258
DLKey : [1111]
実行結果一部
しばらくみているとわかると思いますが、ソートして弾を表示するとチラチラして見にくいですね。
それから5000個も弾を描画すると処理に時間がかかってしまうと思いますし、弾で埋め尽くされてしまう気がします。
サンプル内の
#define BULLET_MAX 2000
を5000にしてみて下さい。
325ポイント を手に入れた。
|
|
|
|
|
Name: 匿名 ..中級者(9,204ポイント)
Date: 2008/12/16(火) 14:51
No:25752
|
|
Title: Re:進行方向に画像が向くショット
|
|
まあ、奥行きというより画面の上にいる順番ですが、それはもういいでしょう。
5000個と言うのは最大数で実際には100個ぐらいしか飛びません、スペルのひとつに撃った弾が一定間隔で残像を置いて行き、スペル終了と同時に残像がすべて実体化する。と言う効果の物があるのですが、それを4人同時に出すと一度に弾が5000個ぐらい画面に出る可能性があるので弾を5000個用意しているだけです。
134ポイント を手に入れた。
|
|
|
|
|
Name: 匿名 ..中級者(9,532ポイント)
Date: 2008/12/16(火) 16:02
No:25753
|
|
Title: Re:進行方向に画像が向くショット
|
|
あの説明じゃわかりにくいですね。絵が粗いので見にくいと思いますけど上の画像の左側のような状態にならずに右側のような順番で描画してほしいのですよ、プレイヤー4人と弾5000個と使い魔50匹が・・
それはともかく、弾にホーミング機能をつけたいなら毎回atan2を使えばいいことですが、弾がいきなり向きを変えるのは格ゲーだと結構不自然なんですよね、カーブを描いてホーミングさせるにはどうしたらいいでしょうか?
あと原作でどうなっていたかは知りませんが、緋想天のアリスのアーティフルサクリファイスなどを作る時に着弾までの時間を一定にしたいんです。つまり敵が遠くにいれば早く、近くに入れば遅く飛ばしたいんですが・・そういえば山なりの軌道はどうしたらいいんだろう?
328ポイント を手に入れた。
|
|
|
|
|
Name: 木霊 ..プログラマー(27,807ポイント)
Date: 2008/12/16(火) 21:23
No:25754
|
|
Title: Re:進行方向に画像が向くショット
|
|
>匿名さん
質問されることは問題無いと思いますが、もはや表題と関係無い内容になっているので
改めて質問トピを立てられた方が良いと思います。
1トピにつき1つの問題に抑えていた方が後日訪れた人にとって参考にしやすい(検索しやすい)です。
>あの説明じゃわかりにくいですね。絵が粗いので見にくいと思いますけど上の画像の左側のような状態に
>ならずに右側のような順番で描画してほしいのですよ、プレイヤー4人と弾5000個と使い魔50匹が・・
管理人さんの言う通りY座標を奥行きに見立てて並び替えるのが一番だと思います。
力業でも出来ないことは無いですが、当然処理速度が犠牲になります。
DXライブラリのマスク機能も重いので、マスクを使うのなら自力で実装する必要があります。
252ポイント を手に入れた。
|
|
|
|
|
Name: レッツ ..ぴよぴよ(530ポイント)
Date: 2008/12/16(火) 21:29
No:25755
|
|
Title: Re:進行方向に画像が向くショット
|
|
1から10まで聞かずに少しは自分で考えないとキリがないですよ。
それに自分なりに考えてみないと身に付きませんよ。
あと、何度言ってもピンと来ない様子に見かねて折角管理人さんがサンプル作ってくれてるのに
それはもういいですとか言ってる人はじめて見ました。
2倍のポイントを手に入れた! 96ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(927,019ポイント)
Date: 2008/12/16(火) 23:33
No:25762
|
|
Title: Re:進行方向に画像が向くショット
|
|
前に書いたことと被りますが、描画の順番について、私が説明した理論でダメな理由は何でしょうか?
y座標順で描画したのではだめなんでしょうか?
もしまたご質問される時はその辺を明確にして下さい。
ホーミングについては物理の力学を学べば計算式が思い浮かぶと思います。
高校の教科書があればそれを見たらいいと思いますし、なければ書店で高校の参考書を買ってくればいいと思います。
加速度a,速度v,時間t,距離xこれらの関係がわかれば計算出来るようになると思います。
次質問される時は新しいトピをたてて下さい。
37ポイント を手に入れた。
|
|
|
|
|
Name: 匿名 ..中級者(9,617ポイント)
Date: 2008/12/18(木) 10:26
No:25815
| 解決!
|
Title: Re:進行方向に画像が向くショット
|
|
そういえばいつの間にか表題と関係ない話題になっていましたね、すいません。
一応自分でも考えてはいるのですが混乱させてしまうと思い書くのを控えていました。
いろいろ教えていただいたおかげで作業効率が10倍程に上がりました、どうもありがとうございます。
85ポイント を手に入れた。
|
|
|
|
Name: あいら ..ぴよぴよ(37ポイント)
Date: 2008/12/17(水) 17:47
No:25780
|
|
Title: 数値をバイナリファイルに書き込み、書き込んだデータをテキストファイルへ書き込む
|
|
#define _CRT_SECURE_NO_DEPRECATE 1
#include <stdio.h>
#include <string.h>
int main(void)
{
FILE *fb = fopen("Number.bin", "wb"),*ft = fopen("Number.txt", "w") ;
int num = 12345;
if(fb != NULL){
fwrite(&num, sizeof(int), 1,fb);
}
fprintf(ft,"%d", num);
return(0);
}
となったのですがあってるのでしょうか?
37ポイント を手に入れた。
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(45,755ポイント)
Date: 2008/12/17(水) 18:00
No:25782
|
|
Title: Re:数値をバイナリファイルに書き込み、書き込んだデータをテキストファイルへ書き込む
|
|
この処理は、
数値をバイナリ形式とテキスト形式でそれぞれ別のファイルへ書き込む
をしています。
タイトルとなっている、
「書き込んだデータ」を「読み込んでテキストファイルへ書き込む」
をしていません。
(と、解釈しましたが合っていますか?)
あと、処理をした後の fclose と、
ファイルをオープンできなかった場合の処理( ft に対して)が抜けています。
121ポイント を手に入れた。
|
|
|
|
|
Name: あいら ..ぴよぴよ(321ポイント)
Date: 2008/12/17(水) 18:18
No:25785
|
|
Title: Re:数値をバイナリファイルに書き込み、書き込んだデータをテキストファイルへ書き込む
|
|
御津凪さん返信ありがとうございます!
> 「書き込んだデータ」を「読み込んでテキストファイルへ書き込む」
> をしていません。
> (と、解釈しましたが合っていますか?)
→指摘の通り、合っています。
> あと、処理をした後の fclose と、
> ファイルをオープンできなかった場合の処理( ft に対して)が抜けています。
変数名少しわかりにくかったので修正しました。
#define _CRT_SECURE_NO_DEPRECATE 1
#include <stdio.h>
#include <string.h>
int main(void)
{
FILE *sf = fopen("Number.bin", "wb"), *lf = fopen("Number.bin","rb"),*sf2 = fopen("Number.txt", "w") ;
int num = 12345;
if(sf != NULL){
fwrite(&num, sizeof(int), 1,sf);
}
if(lf !=NULL){
fread(&num, sizeof(int), 1,lf);
}
if(sf2 !=NULL){
fprintf(sf2,"%d", num);
}
fclose(sf);
fclose(lf);
fclose(sf2);
return(0);
}
こうなったのですが、いかがでしょうか?
どうかよろしくお願いします。
284ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(46,341ポイント)
Date: 2008/12/17(水) 18:33
No:25788
|
|
Title: Re:数値をバイナリファイルに書き込み、書き込んだデータをテキストファイルへ書き込む
|
|
そのコードで実行してみましたか?
少なくともそれで正しく処理できたかどうかは分かるはずです。
(これでは正しく処理出来ませんが)
同じファイルをそれぞれ書き込みと読み込みで同時に開けません。
なのでこの場合は、
必要になった時にファイルを開き、
書き込み(または読み込み)、
閉じる。
この一連の処理をそれぞれしたほうが良いです。
162ポイント を手に入れた。
|
|
|
|
|
Name: 初級者 ..入門者(3,170ポイント)
Date: 2008/12/17(水) 18:51
No:25791
|
|
Title: Re:数値をバイナリファイルに書き込み、書き込んだデータをテキストファイルへ書き込む
|
|
>質問者さん
いかがでしょうか、と人にたずねる「前」に、
実行結果が正しいかどうかを
「自分で」確認すればよいと思います。
いかがでしょうか。
今後も、プログラムを修正するたびに
「いかがでしょうか」ですか?
自分の頭や手を使わないと、身につかないと思います。
いかがでしょうか。
61ポイント を手に入れた。
|
|
|
|
|
Name: あいら ..ぴよぴよ(516ポイント)
Date: 2008/12/17(水) 19:03
No:25792
|
|
Title: Re:数値をバイナリファイルに書き込み、書き込んだデータをテキストファイルへ書き込む
|
|
御津凪さん返信ありがとうございます。
一応下記のように修正したのですが・・・
結果は同じでした・・・。
何度もすみません。
#define _CRT_SECURE_NO_DEPRECATE 1
#include <stdio.h>
#include <string.h>
int main(void)
{
FILE *sf, *lf, *sf2;
int num = 12345;
sf = fopen("Number.bin", "wb");
if(sf != NULL){
fwrite(&num, sizeof(int), 1,sf);
}
fclose(sf);
lf = fopen("Number.bin","rb");
if(lf !=NULL){
fread(&num, sizeof(int), 1,lf);
}
fclose(lf);
sf2 = fopen("Number.txt", "w");
if(sf2 !=NULL){
fprintf(sf2,"%d", num);
}
fclose(sf2);
return(0);
}
195ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(46,408ポイント)
Date: 2008/12/17(水) 19:08
No:25794
|
|
Title: Re:数値をバイナリファイルに書き込み、書き込んだデータをテキストファイルへ書き込む
|
|
> 一応下記のように修正したのですが・・・
> 結果は同じでした・・・。
「何」と「どう」比べて同じだったのでしょうか?
それでは何がおかしいのか分かりません。
処理の結果は最初の質問と同じ出力結果で、
タイトルにあった処理をしているはずです。
いかがでしょうか。
67ポイント を手に入れた。
|
|
|
|
|
Name: あいら ..ぴよぴよ(678ポイント)
Date: 2008/12/17(水) 19:17
No:25796
| 解決!
|
Title: Re:数値をバイナリファイルに書き込み、書き込んだデータをテキストファイルへ書き込む
|
|
御津凪さんありがとうございます。
何度もすみません。
投稿したNo:25785の処理とNo:25792の処理で同一の結果が得られたのでおかしいのかなと思ってしまいました。
もうちょっと、勉強して出直してきます。
御津凪さん見たいに回答できるようにがんばりたいと思います。
長々とお付き合いいただきありがとうございました。
162ポイント を手に入れた。
|
|
|
|
|
Name: non ..上級者(24,605ポイント)
Date: 2008/12/17(水) 22:41
No:25803
|
|
Title: Re:数値をバイナリファイルに書き込み、書き込んだデータをテキストファイルへ書き込む
|
|
>投稿したNo:25785の処理とNo:25792の処理で同一の結果が得られたのでおかしいのかなと思ってしまいました。
確かにエラーは出ないようですね。
ファイルは正しいし、見かけ上は、うまくいったように見えます。
しかし、freadは正しく読まれていないはずです。データを別の変数に読んで出力してみたら
わかると思います。
または
printf("%d",fread(&num, sizeof(int), 1,lf));
に変更してみましょう。freadは成功したら、個数を返しますから1を返さなくてはいけません。
241ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(926,947ポイント)
Date: 2008/12/17(水) 23:27
No:25805
|
|
Title: Re:数値をバイナリファイルに書き込み、書き込んだデータをテキストファイルへ書き込む
|
|
>あいらさん
こんにちは。宿題でしょうか?お疲れ様ですm(_ _)m
遅くなりました、もう解決済みでしたかね。
もし腑に落ちないことがあれば遠慮なく聞いて下さいね。
何故ここがこうなるのかとか、ココはこれでいいのかとか。
>nonさん
こんな感じになりましたが、freadは正しく実行されていないのでしょうか?
#include <stdio.h>
#include <string.h>
int main(void) {
FILE *sf, *lf, *sf2;
int num = 12345, num2;
sf = fopen("Number.bin", "wb");
if(sf != NULL){
fwrite(&num, sizeof(int), 1,sf);
}
fclose(sf);
lf = fopen("Number.bin","rb");
if(lf !=NULL){
printf("%d\n",fread(&num2, sizeof(int), 1,lf));
printf("%d\n", num2);
}
fclose(lf);
return(0);
}
実行結果
1
12345
269ポイント を落としてしまった。
|
|
|
|
|
Name: 初級者 ..入門者(3,194ポイント)
Date: 2008/12/18(木) 07:58
No:25812
|
|
Title: Re:数値をバイナリファイルに書き込み、書き込んだデータをテキストファイルへ書き込む
|
|
1個の値を読み取り、
その内容が12345、
という結果を得ています。
何ら問題ありません。
24ポイント を手に入れた。
|
|
|
|
Name: ムンバ ..上級者(17,711ポイント)
Date: 2008/12/18(木) 00:02
No:25806
|
|
Title: バイナリファイルの書き込みと読み出しにつきまして
|
|
こんばんは。お世話になります。
今、参考書を参考にバイナリファイル(ファイルの入出力)の勉強をしている所です。
参考書のサンプルの実行結果(参考書に書かれてる結果)と
そのサンプルを私が実行した結果とが、少し違っているので
何度もスペルミスなど無いかどうか確認してみたのですが、うまく表示できませんでした。
↓バイナリファイルを作るプログラム(参考書のサンプルプログラム引用)
#include <stdio.h>
int main()
{
FILE *fp;
char *str = "ABC";
int a[3] = {14, 15, 16};
fp = fopen("binary.b", "wb");
fwrite(str, sizeof(char), strlen(str), fp);
fwrite(a, sizeof(int), 3, fp);
fclose(fp);
printf("書き込み終了。\n");
return 0;
}
↑これをバイナリエディタで開いて見ると↓
41 42 43 0E 00 00 00 0F 00 00 00 10 00 00 00
です。
↓このプログラムは、↑のバイナリファイルを読み出すプログラムです。(参考書のサンプルプログラム引用)
#include <stdio.h>
int main()
{
FILE *fp;
int a[3];
char buf[8];
memset(buf, '\0', sizeof(buf[8]));
fp = fopen("binary.b", "rb");
fread(buf, sizeof(char), 3, fp);
fread(a, sizeof(int), 3, fp);
fclose(fp);
printf("%s, %d, %d, %d\n", buf, a[0], a[1], a[2]);
return 0;
}
参考書の実行結果(コマンドプロンプト)には
ABC, 14, 15, 16
となっているのですが、私の実行結果(コマンドプロンプト)では
ABCフフフフフフフフフフフフフ■(←小さい白塗りの四角), 14, 15, 16
となってしまいます。
OS:Windows VISTA
環境:VC++ 2008
です。
フフフフフフフフフフフフフ■(←小さい白塗りの四角)
↑この部分が、できれば表示されない様にしたいのです。
無視して、このまま先に進んだ方がいいのでしょうか?
それとも、ここで解決しておいた方がいいのでしょうか?^^;
ご指導の程、宜しくお願い致します。
638ポイント を手に入れた。
|
|
|
|
Name: YuO ..プログラマー(26,148ポイント)
Date: 2008/12/18(木) 00:17
No:25807
|
|
Title: Re:バイナリファイルの書き込みと読み出しにつきまして
|
|
> memset(buf, '\0', sizeof(buf[8]));
ここ,本当に参考書の通りですか?
memset(buf, '\0', sizeof(buf)); ではなかったですか?
35ポイント を手に入れた。
|
|
|
|
|
Name: ムンバ ..上級者(17,735ポイント)
Date: 2008/12/18(木) 00:22
No:25808
|
|
Title: Re:バイナリファイルの書き込みと読み出しにつきまして
|
|
YuOさん、ご指摘ありがとうございます。
memset(buf, '\0', sizeof(buf[8]));
に、間違いありません。
24ポイント を手に入れた。
|
|
|
|
|
Name: ムンバ ..上級者(17,761ポイント)
Date: 2008/12/18(木) 00:32
No:25809
| 解決!
|
Title: Re:バイナリファイルの書き込みと読み出しにつきまして
|
|
あれっ!? ^^;
memset(buf, '\0', sizeof(buf[8]));<参考書は、このソースです。(汗
↓
memset(buf, '\0', sizeof(buf));
YuOさんの、ご指摘通りに修正して実行したところ
ABC, 14, 15, 16
と、うまく実行表示されました。
ありがとう御座います。
自己解析してみます。
どうもありがとうございました。(謝
26ポイント を手に入れた。
|
|
|
|
Name: 12 ..ぴよぴよ(63ポイント)
Date: 2008/12/17(水) 11:58
No:25769
|
|
Title: 画像処理
|
|
差分画像から
int Objxy[3][5];// 差分画像中の位置Min_x, Min_y, Max_x, Max_y の赤色の個数格納
を求めるプログラムを作成せよ。
このような場合どのようなことをすればいいのですか?
63ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(927,216ポイント)
Date: 2008/12/17(水) 12:34
No:25771
|
|
Title: Re:画像処理
|
|
差分を計算する為につかう画像はbmpですか?
ビットマップから色情報を取り出すプログラムは出来ていますか?
それから、「5個の入れ物を3つ用意」されている配列には何を入れるのですか?
「ある位置の赤の個数」という意味がよくわかりません・・。
後、変数名がMinやMaxであることから、何かの最小値、最大値だと思いますが、
この辺をもう少し具体的にしてもらえますか?
後、環境を書いていただけるとありがたいです。
詳しくは規約をご覧下さい。
126ポイント を手に入れた。
|
|
|
|
Name: 阿武隈のくま ..ぴよぴよ(220ポイント)
Date: 2008/12/16(火) 22:28
No:25758
|
|
Title: SetCurrentDirectory関数について
|
|
はじめて投稿します。
現在コンソールアプリケーション(テキストの文字化けを補正するコードを書いています)を作っています。
アプリ自体はsystem32内に入れ、
コマンドラインから
EDL "ファイル名またはパス"
で実行します。
実行すると、変換されたファイルが新たにできるというものです。
どのディレクトリで実行してもデスクトップ上のユーザー指定のフォルダ内に保存されるようにしたいと思っています。
問題は、
LPCWSTR型のポインタ変数に初期設定で、
wchar_t *pathname=L"C:\\Documents and Settings\\EPSON\\デスクトップ";
と設定しても、
SetCurrentDirectory(pathname);
の戻り値を調べると、失敗(0)になってしまいます。
しかし直接、
SetCurrentDirectory(L"C:\\Documents and Settings\\edit-room1\\デスクトップ");
とするとOKになります。
この関数は変数を引数にする場合何か問題があるのでしょうか。
お分かりの方、どうかよろしくお願いします。
220ポイント を手に入れた。
|
|
|
|
Name: Justy ..ハッカー(287,666ポイント)
Date: 2008/12/16(火) 22:57
No:25760
|
|
Title: Re:SetCurrentDirectory関数について
|
|
環境は何ですか?
>SetCurrentDirectory(pathname);
>の戻り値を調べると、失敗(0)になってしまいます。
うーん、何でしょうね。
ユーザーディレクトリ周りだとアクセスが拒否されているかもしれませんね。
失敗した直後で WinAPIの GetLastError()を使ってエラーコードを調べて見て下さい。
或いは VisualStudioが使えるならウォッチウインドウに
err
@err,hr
の2つ(或いはどちらかでもいいですが)を入れて、失敗した直後のところで
止めてみれば何かわかるはずです。
169ポイント を手に入れた。
|
|
|
|
|
Name: 阿武隈のくま ..ぴよぴよ(880ポイント)
Date: 2008/12/17(水) 13:34
No:25773
|
|
Title: Re:SetCurrentDirectory関数について
|
|
Justy ..ハッカーさん
御津凪さん
みなさん、ご回答頂きありがとうございます。
Justy ..ハッカーさん
>環境は何ですか?
visual studio 2008です。
>失敗した直後で WinAPIの GetLastError()を使ってエラーコードを調べて見て下さい。
エラーをみましたら、
”指定されたパスが見つかりません” でした。
それで今、確かめましたところ、初期化時に設定したものはokでした。
wchar_t *pathname=L"C:\\Documents and Settings\\EPSON\\デスクトップ";
ですが、このpathnameに利用者がコマンド引数で指定したパス文字列を
mbstowcs関数でwchar_t型に変換して、pathnameに渡すとダメになります。
もしかしてコードページ関係とかなのでしょうか。
御津凪さん
>実行者(ユーザー)以外のデスクトップには管理者権限でなければアクセスできないはずです。
申し忘れましたが、PC自体は複数のユーザーで使用していません。アプリ自体を色んな人が使うという状態です。
ディレクトリの設定は、替えたいときにコマンドの引数で指定して行うかたちです。
なので、初期設定は変数の初期化時に設定していますが、コマンド引数をそのままmbstowcs関数でwchar_t型に変換して、pathnameにポインタを代入しています。
>pathname に代入されているパスと、直接入力しているパスが同じではないようですが。
書き間違えでした。ごめんなさい。同じ名前です。
といった具合です。
よろしくお願いします。
660ポイント を手に入れた。
|
|
|
|
|
Name: YuO ..プログラマー(26,113ポイント)
Date: 2008/12/17(水) 13:49
No:25774
|
|
Title: Re:SetCurrentDirectory関数について
|
|
setlocaleはしていますよね。
これをしないと,日本語はワイド文字化されません。
SetCurrentDirectoryWを呼び出す直前に,pathnameの値が正しいことを調べてみるのがよいと思います。
例えば,MessageBoxW APIを使うとか。
# 個人的には,mbstowcs使うくらいならSetCurrentDirectoryAでいいと思う……。
109ポイント を手に入れた。
|
|
|
|
|
Name: 阿武隈のくま ..かけだし(1,005ポイント)
Date: 2008/12/17(水) 18:36
No:25789
| 解決!
|
Title: Re:SetCurrentDirectory関数について
|
|
ご回答頂いたみなさん、ありがとうございました。
YuOさん
>SetCurrentDirectoryWを呼び出す直前に,pathnameの値が正しいことを調べてみるのがよいと思います。
盲点でした。
調べましたら、NULL文字の前にスペースが入っていました!
みなさん、ありがとうございました。
スッキリしました。
125ポイント を手に入れた。
|
|
|
|
Name: non ..上級者(22,647ポイント)
Date: 2008/12/15(月) 18:47
No:25721
|
|
Title: seekpについて教えてください。
|
|
「猫でもわかる」の粂井さんのホームページで勉強中です。
さて、住所録を作ろうの所を行ってます。下のページです。
http://www.kumei.ne.jp/c_lang/cpp/cpp_38.htm
このままではVC2008ExpressEditionでエラーでしたので、修正しました。
それが添付ファイルです。
住所録を2回書き込んだとき、先頭にデータ件数、そのあとに2人分のデータが出力されなければ
いけないはずですが、2人目のデータしか書き込まれていません。すなわち、上書きされてます。
問題となる部分です。
Jout.open(JFILE, ios::out | ios::ate);
Jout.seekp(0, ios::beg);
Jout << no_of_data + 1 << endl;
Jout.seekp(0, ios::end);
Jout << data.name << endl;
さらに、まったく同じプログラムをBC++5.0で実行すると、すべてのデータが1件目の後に追加されます。
すなわち、先頭にシークできていません。
私の、何が間違っているのでしょうか?教えてください。
309ポイント を手に入れた。
|
|
|
|
Name: non ..上級者(23,224ポイント)
Date: 2008/12/16(火) 13:40
No:25743
|
|
Title: Re:seekpについて教えてください。
|
|
どなたからも回答がいただけないので、スレッドが古くならないように自己レスです。
プログラムが長いと、見たくないという方のために、要点だけを抜き取ったプログラムです。
#include <iostream>
#include <fstream>
using namespace std;
void infile()
{
ifstream ifs;
char ch;
ifs.open("abc.txt");
ifs.seekg(4,ios::beg);
ifs >> ch;
cout << ch <<endl;
ifs.seekg(-4,ios::end);
ifs >> ch;
cout << ch <<endl;
ifs.close();
}
void outfile()
{
ofstream ofs;
ofs.open("abc.txt",ios::ate);
ofs.seekp(4,ios::beg);
ofs << 'E';
ofs.seekp(-4,ios::end);
ofs << 'Y';
ofs.close();
}
int main(void)
{
infile();
outfile();
return 0;
}
ファイル abc.txtの中身は
abcdefghijklmnopqrstuvwxyz
最後は改行して終わってます。
従って実行結果の予想は、eとyが画面に出た後、ファイルの中身がeがE、yがYになるはずでした。
実際に実行してみると、
最初に
e
y
とディスプレイに出力されるところまではいいのですが、
その後のファイル出力で、abc.txtは
VisualC++2008ExpressEditionの場合とgccの場合は
.Y..E (.はNULLです)になります。
バイナリエディタで見ると、00 59 00 00 45 です。
また、BorlandC++5.0の場合
abcdefghijklmnopqrstuvwxyz
EY
になります。
このようにコンパイラで結果が違うとともに、思った通りの動作をしません。
577ポイント を手に入れた。
|
|
|
|
|
Name: non ..上級者(24,026ポイント)
Date: 2008/12/16(火) 14:09
No:25747
|
|
Title: Re:seekpについて教えてください。
|
|
再び、自己レスです。
Cで作成してみました。
#include <stdio.h>
void infile()
{
FILE *fp;
int ch;
fp=fopen("abc.txt","r");
fseek(fp,4,SEEK_SET);
ch=fgetc(fp);
putchar(ch);
fseek(fp,-4,SEEK_END);
ch=fgetc(fp);
putchar(ch);
fclose(fp);
}
void outfile()
{
FILE *fp;
fp=fopen("abc.txt","r+");
fseek(fp,4,SEEK_SET);
fputc('E',fp);
fseek(fp,-4,SEEK_END);
fputc('Y',fp);
fclose(fp);
}
int main(void)
{
infile();
outfile();
return 0;
}
これから言えることは、
ofs.open("abc.txt",ios::ate); は、
VC++2008の場合は、C言語の場合の
fp=fopen("abc.txt","w");のように働き、
BC++では
fp=fopen("abc.txt","a");のように働いているという事です。
C言語の"r+"のようなものはないのでしょうか?
2倍のポイントを手に入れた! 802ポイント を手に入れた。
|
|
|
|
|
Name: non ..上級者(24,206ポイント)
Date: 2008/12/16(火) 14:30
No:25750
|
|
Title: Re:seekpについて教えてください。
|
|
自己解決しました。
void outfile()
{
fstream ofs;
ofs.open("abc.txt",ios::in | ios::out);
ofs.seekp(4,ios::beg);
ofs << 'E';
ofs.seekp(-4,ios::end);
ofs << 'Y';
ofs.close();
}
正解かどうかは知りませんが、とにかく思った通り動きました。
2倍のポイントを手に入れた! 180ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(287,435ポイント)
Date: 2008/12/16(火) 22:07
No:25756
|
|
Title: Re:seekpについて教えてください。
|
|
もう解決してしまっているようなので、ご参考までに。
Visual C++ 7.1/9.0ではこんな対応になっているようです。
ios_base::in "r"
ios_base::out "w"
ios_base::out | ios_base::trunc "w"
ios_base::out | ios_base::app "a"
ios_base::in | ios_base::binary "rb"
ios_base::out | ios_base::binary "wb"
ios_base::out | ios_base::trunc | ios_base::binary "wb"
ios_base::out | ios_base::app | ios_base::binary "ab"
ios_base::in | ios_base::out "r+"
ios_base::in | ios_base::out | ios_base::trunc "w+"
ios_base::in | ios_base::out | ios_base::app "a+"
ios_base::in | ios_base::out | ios_base::binary "r+b"
ios_base::in | ios_base::out | ios_base::trunc | ios_base::binary "w+b"
ios_base::in | ios_base::out | ios_base::app | ios_base::binary "a+b"
これとは別に ios_base::ate があった場合は fseek(fp, 0, SEEK_END) をしています。
# そのケースですと、ios_base::out | ios_base::appでも望み通りの動作になるのかもしれません。
1,259ポイント を手に入れた。
|
|
|
|
|
Name: non ..上級者(24,302ポイント)
Date: 2008/12/17(水) 08:34
No:25765
|
|
Title: Re:seekpについて教えてください。
|
|
Justy さん。ご丁寧に、ありがとうございます。
あっちこっちのサイトを探しても情報がなく、苦労しました。
まして、ateの動作がコンパイラによって異なるとは、困ったものです。
もしかしたら、ateの動作が異なるのではなく、スイッチを省略したときの
defaultが異なるのかも知れませんが。
96ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(76,684ポイント)
Date: 2008/12/17(水) 14:00
No:25775
|
|
Title: Re:seekpについて教えてください。
|
|
少し調べてみました。
どうやら、Borland C++ Compiler 5.5.1のバグのようです。
少なくともBorland C++ Compiler 5.6.4では改善されています。
ボーランドの処理系は、バージョンによって標準C++ライブラリの実装がコロコロ変わるのが困ったものです。
なお、seekpは最終的にはstd::fseekを呼び出しますので、
> ofs.seekp(4,ios::beg);
> ofs.seekp(-4,ios::end);
のように、offsetに0またはtellpが返した値以外を指定した場合の動作は未定義だったはずです。
137ポイント を手に入れた。
|
|
|
|
|
Name: non ..上級者(24,364ポイント)
Date: 2008/12/17(水) 17:30
No:25778
|
|
Title: Re:seekpについて教えてください。
|
|
たかぎさんへ
バグですか。了解しました。
>offsetに0またはtellpが返した値以外を指定した場合の動作は未定義だったはずです。
未定義ですか。しかし、欲しい機能ですよね。VCもBCも動いたのでよしとしましょう。
62ポイント を手に入れた。
|
|
|
|
Name: KEI ..ぴよぴよ(3ポイント)
Date: 2008/12/17(水) 11:26
No:25767
|
|
Title: 龍神録に関して
|
|
龍神録のサンプルでを使って勉強させていただいているKEIというものです。
敵のパターンを自分で作って追加しようとしたらビルドの時点ではエラーは出ないのに、
画面を出してみるとRead error と出て何も表示され自機などが表示されません。
アドバイスをいただけないでしょうか?
3ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(927,090ポイント)
Date: 2008/12/17(水) 12:29
No:25770
|
|
Title: Re:龍神録に関して
|
|
まず、「read error」は何を意味しているのか考えて見ます。
Ctrl + F で検索画面で「read error」と入力し、検索対象を「現在のプロジェクト」にします。
するとload_story()関数内の、例えば47章だったら「../dat/csv/47章/storyH0.csv」が読み込みエラーになっていることが解りますね。
どのファイルがリードエラーになっているかわかったので、このファイルがちゃんとあるか確認してみます。
プロジェクトがあるフォルダから一つ上がって、dat -> csv -> 47章 ->と進み、そこにstoryH0.csvはありますか?
画像も全て表示されていない事から、datフォルダ自体おかしいのだと思います。
恐らくdatフォルダを消したか、自分でフォルダ構造を変えたか、解凍ミスで解凍できていないのでは無いかと思います。
トップフォルダにdatフォルダがあるか確認し、フォルダ構成が1章の通りになっているか確認して下さい。
71ポイント を手に入れた。
|
|
|
|
Name: dic ..初心者(6,843ポイント)
Date: 2008/12/16(火) 22:16
No:25757
|
|
Title: コンパイルエラー
|
|
#define DIRECTINPUT_VERSION 0x0800
#include <dinput.h>
HRESULT hr;
hr = DirectInput8Create( GetModuleHandle(NULL), DIRECTINPUT_VERSION,
IID_IDirectInput8, (VOID**)&g_pDI, NULL );
上記のソースを既存のスケルトンに追加すると
DxInput8.obj : error LNK2019: 未解決の外部シンボル _DirectInput8Create@20 が関数 "public: __thiscall CDxInput8::CDxInput8(void)" (??0CDxInput8@@QAE@XZ) で参照されました。
DxInput8.obj : error LNK2001: 外部シンボル "_IID_IDirectInput8W" は未解決です。
とコンパイルエラーがでて先に進めません
どうやれば、このシンボルは解決できるのでしょうか?
使用しているコンパイラは VC++ 2008 Express
追加しているライブラリは
DirectX SDK 9 -> dinput.lib のため
DXSDK_march2008 -> 最新のdinput.h のため
です。
272ポイント を手に入れた。
|
|
|
|
Name: Justy ..ハッカー(287,497ポイント)
Date: 2008/12/16(火) 22:33
No:25759
|
|
Title: Re:コンパイルエラー
|
|
>どうやれば、このシンボルは解決できるのでしょうか?
dinput8.libとか dxguid.libがリンクされていないのではないでしょうか。
62ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..初心者(6,910ポイント)
Date: 2008/12/17(水) 00:07
No:25763
|
|
Title: Re:コンパイルエラー
|
|
私も似たようなエラーに悩まされたことがあります。
私の場合、リンクの設定に不備があったので、同じエラーが出ました。
Justyさんのおっしゃる通り、一度リンクの設定を見直してみてください。
94ポイント を手に入れた。
|
|
|
|
|
Name: dic ..初心者(6,896ポイント)
Date: 2008/12/17(水) 08:21
No:25764
| 解決!
|
Title: Re:コンパイルエラー
|
|
Justy さんのおっしゃる通り
dxguid.lib をリンクに追加することで解決しました
ありがとうございました
53ポイント を手に入れた。
|
|
|
|
Name: ざこ ..入門者(4,762ポイント)
Date: 2008/12/16(火) 10:09
No:25733
|
|
Title: MFC
|
|
超初心者的な質問で申し訳ないのですが・・
MFCのダイアログベースで関数を追加すると例えばButtonをクリックしたときに実行する とした場合
void CMyDlg::OnButton1()
{
}
な感じの始まりになりますよね。この関数の結果を返したいんですがこの型はvoidで戻り値を設定できないです。
どういじくれば戻り値を設定できるのか教えて下さい。
89ポイント を手に入れた。
|
|
|
|
Name: ざこ ..入門者(4,896ポイント)
Date: 2008/12/16(火) 10:36
No:25737
|
|
Title: Re:MFC
|
|
関数の呼び出し元かな・・
例えば
void CMyDlg::OnButton1()
{
}
void CMyDlg::OnButton2()
{
}
の関数の2つの結果を元に判定がしたいのです。
83ポイント を手に入れた。
|
|
|
|
|
Name: Blue ..初心者(6,711ポイント)
Date: 2008/12/16(火) 10:49
No:25738
|
|
Title: Re:MFC
|
|
誰がそれらを呼ぶのでしょうか?
ふつうはWindowsのメッセージループから呼ばれる関数ですし。
どちらかのボタンを押したという情報を持ちたいのであればメンバ変数か何かを使ってみては。
そうではなくて、WM_COMMANDメッセージ以外ではなく明に呼ぶのであれば、戻り値を返す関数を
新たに作って、OnButton1ではそれを呼ぶような仕組みにしましょう。
void CMyDlg::OnButton1()
{
this->funcButton1();
}
int CMyDlg::funcButton1()
{
int hoge;
// 処理
return hoge;
}
239ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..初心者(5,290ポイント)
Date: 2008/12/16(火) 11:13
No:25739
|
|
Title: Re:MFC
|
|
ほんとはちょっと違う感じだったんですがわかりやすい質問にする為ちょっとかえてました。
void CMyDlg::OnDropdownCombo1
{
CComboBox *p1;
p1=(CComboBox *)GetDlgItem(IDC_COMBO1);
CString a1;
p1->GetWindowText(a1);
}
void CMyDlg::OnDropdownCombo2
{
CComboBox *p2;
p2=(CComboBox *)GetDlgItem(IDC_COMBO2);
CString a2;
p2->GetWindowText(a2);
}
void CMyDlg::OnDropdownCombo3
{ CComboBox *p3;
p3=(CComboBox *)GetDlgItem(IDC_COMBO3);
CString a3;
p3->GetWindowText(a3);
}
で3つの関数が同じ結果(a1とa2とa3が同じ値)を返した場合、実行する文がほしいんですね。
void CMyDlg::OnDropdownCombo1
{
CString a1;
a1->hantei;
}
void CMyDlg::OnDropdownCombo2
{
CSrting a2;
a2->hantei;
}
void CMyDlg::OnDropdownCombo3
{
CString a3;
a3->hantei
}
int hantei{
実行文
}
というような感じでしょうか?ちょっと試したらCStringにはoperator->がありませんとか言われてしました。
394ポイント を手に入れた。
|
|
|
|
|
Name: Blue ..初心者(6,929ポイント)
Date: 2008/12/16(火) 11:21
No:25740
|
|
Title: Re:MFC
|
|
1つのコンボボックスの処理が他の2つのコンボボックスの選択状態によって変わるということでしょうか?
戻り値があったところでどこにも格納できないわけですので、
前述通り、メンバ変数を使うか、逐一GetDlgItemで3つの値を取得するかどちらかでしょう。
アロー演算子(->)は通常はポインタ変数に対して使うものですが、
そこらへんの基礎知識は大丈夫でしょうか?
CString a;
の場合、ポインタ変数ではないので、「.」でメンバ関数を呼び出します。
(何でもかんでも->ではない)
また、CStringにhanteiというメンバ関数はないのでどっちにせよコンパイルエラーでしょう。
ダイアログのメンバ関数であれば this->hantei または単に hantei で呼び出せます。
(ダイアログの値に依存するのでメンバ関数にするのが普通でしょう。)
218ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..初心者(5,316ポイント)
Date: 2008/12/16(火) 11:27
No:25741
|
|
Title: Re:MFC
|
|
アロー演算子は初めてみたのでまだ不完全です。わかりやすい説明ありがとうございます。
26ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..初心者(5,745ポイント)
Date: 2008/12/16(火) 13:22
No:25742
|
|
Title: Re:MFC
|
|
void CMyDlg::OnDropdownCombo1
{
CComboBox *p1;
p1=(CComboBox *)GetDlgItem(IDC_COMBO1);
CString a1;
p1->GetWindowText(a1);
}
void CMyDlg::OnDropdownCombo2
{
CComboBox *p2;
p2=(CComboBox *)GetDlgItem(IDC_COMBO2);
CString a2;
p2->GetWindowText(a2);
}
void CMyDlg::OnDropdownCombo3
{ CComboBox *p3;
p3=(CComboBox *)GetDlgItem(IDC_COMBO3);
CString a3;
p3->GetWindowText(a3);
}
//メンバ関数を追加。
void CMyDlg::hantei(CString a1,CString a2, CString a3)
{
if(strcmp(a1,"文字列")==0){
if(strcmp(a2,"文字列")==0)
if(strcmp(a3,"文字列")==0){
実行文;
}
としましてエラーはでないのですが判定の方ができてないです。
間違っている点をご指摘お願いします。
429ポイント を手に入れた。
|
|
|
|
|
Name: たいちう ..上級者(16,683ポイント)
Date: 2008/12/16(火) 13:50
No:25745
|
|
Title: Re:MFC
|
|
これはどうですか?
void CMyDlg::OnDropdownCombo1
{
hantei();
}
void CMyDlg::OnDropdownCombo2
{
hantei();
}
void CMyDlg::OnDropdownCombo3
{
hantei();
}
void CMyDlg::hantei()
{
CComboBox *p1 = (CComboBox *)GetDlgItem(IDC_COMBO1);
CComboBox *p2 = (CComboBox *)GetDlgItem(IDC_COMBO2);
CComboBox *p3 = (CComboBox *)GetDlgItem(IDC_COMBO3);
CString a1, a2, a3;
p1->GetWindowText(a1);
p2->GetWindowText(a2);
p3->GetWindowText(a3);
if(strcmp(a1,"文字列")==0)
if(strcmp(a2,"文字列")==0)
if(strcmp(a3,"文字列")==0){
実行文;
}
}
193ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(135,564ポイント)
Date: 2008/12/16(火) 14:35
No:25751
|
|
Title: Re:MFC
|
|
せっかくMFCを使うなら、もう少しMFCっぽく判定しましょう。
if (a1 == "文字列" && a2 == "文字列" && a3 == "文字列")
{
実行文;
}
これでいいんではないかと…
106ポイント を手に入れた。
|
|
|
|
Name: 初心者 ..プログラマー(27,078ポイント)
Date: 2008/12/16(火) 13:47
No:25744
|
|
Title: 無題
|
|
はじめまして
今学校の演習でC言語を使っているのですがコンパイル時に
エラー E2206 タイトル.c 10 不正な文字' '(0x8104)(関数 main)
エラー E2206 タイトル.c 10 不正な文字' '(0x8104)(関数 main)
*** 2 errors in Compile ***
というエラーが出て困っています。
どこかが間違っているというのはわかりますがどこなのかがわからないんです。
この文章のどこかにヒントとかあったりしますか?
わかる方お願いします
208ポイント を手に入れた。
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(45,522ポイント)
Date: 2008/12/16(火) 14:05
No:25746
|
|
Title: Re:無題
|
|
ソースコードに日本語のスペースか何かを使っていませんか?
エラーの意味は多分それだと思います。
(タイトル.c の10行目にコードとして使うことの出来ない文字が使われていますよ、という意味)
ソースコードには、基本半角文字でしか書けません。
(コメントや文字列の中なら可能)
一応、「タイトル.c」って半角文字以外を使っているファイル名もやめたほうが良いかもしれません。
45ポイント を手に入れた。
|
|
|
|
|
Name: conio ..中級者(9,947ポイント)
Date: 2008/12/16(火) 14:20
No:25749
|
|
Title: Re:無題
|
|
恐らく、全角の空白を使ってしまっているのではないでしょうか。
空白なので、パッと見ただけでは分かりません。
【正しいプログラム】
----------------------------------------
#include <stdio.h>
int main(void)
{
printf("HELLO !\n");
return(0);
}
----------------------------------------
【誤ったプログラム】
----------------------------------------
#include <stdio.h>
int main(void)
{
printf("HELLO !\n");
return(0);
}
----------------------------------------
この場合は、6行目に全角の空白が入っています。
235ポイント を手に入れた。
|
|
|
|
Name: ざこ ..入門者(4,079ポイント)
Date: 2008/12/15(月) 11:14
No:25693
|
|
Title: ○×ゲーム
|
|
VC++で3行3列の○×ゲーム作ってるのですが(交互に○とX書いて先に1列そろった方が勝ちというゲーム)
今単純に9個のコンボックスに○と×データ用意して9個のリストボックスに貼り付けるという感じにしてるのですが
それだとbuttonも9個用意しなきゃならないし、1つ1つに関数用意してるから判定ができないです・・
何かいい方法ないですか?
111ポイント を落としてしまった。
|
|
|
|
Name: バグ ..ハッカー(134,486ポイント)
Date: 2008/12/15(月) 13:08
No:25694
|
|
Title: Re:○×ゲーム
|
|
>>今単純に9個のコンボックスに○と×データ用意して9個のリストボックスに貼り付けるという感じにしてるのですが
えっと、ここの意味がよくわからないのですが…
コンボックスというのは『コンボボックス』のことでしょうか?
リストボックスに貼り付けるというのはどういうことでしょうか?
>>それだとbuttonも9個用意しなきゃならないし、1つ1つに関数用意してるから判定ができないです・・
これも意味が分かりません。なぜボタンが9個必要になるのでしょうか?
何故、1つ1つに関数を用意してるから判定ができないのでしょうか?
184ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..入門者(4,188ポイント)
Date: 2008/12/15(月) 13:35
No:25696
|
|
Title: Re:○×ゲーム
|
|
@AB
CDE
FGH
とするとそれぞれの番号には○と×のデータが入っていてどちらか決めてbuttonを押しますと(@に○をいれる場合)
○AB
CDE
FGH
と表示していくようにしてるのです。
交互に○とXをつけていきたいので、butanが1つだと
2回目以降は次の行に書かれます。
交互に○とXをつけて一行そろった時点で勝利判定の文字を表示したいのです。
※コンボボックスのことです。
少し質問が意味不明になってしまったのでまとめさせていただきますね。
目的:○Xゲームを作る。
プログラム内容:交互に○と×を入れ一行そろった時点で勝利。ゲームの経過を表示する。
MessageBoxなどで勝利です などいれる
わからないこと:クラスなど構想内容や判定の仕方など
自分で考えたこと:ぐちゃぐちゃすぎるので忘れてください・・
109ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(134,960ポイント)
Date: 2008/12/15(月) 14:26
No:25699
|
|
Title: Re:○×ゲーム
|
|
すみません、何点か確認させてください。
123
456
789
という風に並んでいるのはボタンですか、それともコンボボックスですか?
>>とするとそれぞれの番号には○と×のデータが入っていてどちらか決めてbuttonを押しますと(@に○をいれる場合)
この『どちらかを決める』というのはどのようなインターフェースを想定されていますか?
『どちらかを決める』という事は、○か×かを選択できる箇所があって、選択した後に決定ボタンのような物を押すという事でしょうか?
通常、○か×は自動で切り替わりますが、それは考慮しなくてもいいという事でしょうか?
※ここからは私ならば、こうするという仕様です
1:必ず○が先手とする。
2:9個のボタンを用意する。初期状態では何も書かれていない状態にしておく。
3:○か×かの表示はボタンが押された際に直接描画する(SetWindowText関数を使用する)
4:ボタンが押された際に既に○か×かがセットされていたら、メッセージボックスで別のボタンを押すように促す。
5:勝利判定を行う。
6:9回繰り返した時点で勝敗がつかなった場合は引き分けとする。
7:勝敗がついてない場合は○と×を切り換えて、3に戻る
474ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..入門者(4,447ポイント)
Date: 2008/12/15(月) 14:37
No:25700
|
|
Title: Re:○×ゲーム
|
|
ありがとうございました。一応自分が考えたのでも不恰好ですができました。
>という風に並んでいるのはボタンですか、それともコンボボックスですか?
コンボボックスです。コンボボックスには通常データを入れておけて垂直バーで選択できますよね。
それに○と×を入れてます。
>通常、○か×は自動で切り替わりますが、それは考慮しなくてもいいという事でしょうか?
すいません。よくわかりません;
私が作った簡易版は
@コンボボックスに○と×を入れておき選択してButtonを押すとStaticに貼り付けるようにする。
SetDlgItemTextを使いました。
Aそれを3X3行列だから9個用意する
B前レスの例だと
@AB
CDE
FGH
@CF
ADG
BEH
BDF
@DH
がそれぞれ○かXで揃ったとき勝利判定にしました。
後バグさんの仰られた先手のときと引き分けのときとかも考えてみます。
259ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(135,169ポイント)
Date: 2008/12/15(月) 15:15
No:25702
|
|
Title: Re:○×ゲーム
|
|
ああ、なるほど。
あらかじめコンボボックスに○と×をセットしておき、どちらかを選択し、別に用意してある9つのボタンを押すと、その押した場所に対応したスタティックに○か×かがセットされるという事ですね。
0
123 123
456 456
789 789
上記の0がコンボボックスで、左の1〜9がボタン、右の1〜9がスタティックのようなイメージでしょうか?
なかなか面白いインターフェースですね(^-^)
209ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..入門者(4,673ポイント)
Date: 2008/12/15(月) 18:33
No:25716
|
|
Title: Re:○×ゲーム
|
|
そのような感じですね。ただムダが多すぎるということでNGになりました。修正する箇所は2つ
(a)○か×を選択してButtonを押すのはムダで、コンボボックス内の○か×をチェックした時にプログラムを実行するようにする。
(b)限られた箇所だけ判定する。例えば@に最初○かXいれるとき
判定するのは@AB @CF @DHだけ。
Aの場合
反対するのは@AB ADGだけ
(a)の条件から今まで1つの関数に詰め込んでいたのが
関数9つ作らないといけませんよね。そのせいで判定がややこしくなってわからなくなってしまいました。
お手数ですが教えてください。
226ポイント を手に入れた。
|
|
|
|
|
Name: ibis ..上級者(16,352ポイント)
Date: 2008/12/15(月) 21:23
No:25725
|
|
Title: Re:○×ゲーム
|
|
>(a)の条件から今まで1つの関数に詰め込んでいたのが
>関数9つ作らないといけませんよね。そのせいで判定がややこしくなってわからなくなってしまいました。
判定でしたら(b)ではないですか?
とりあえず(b)という前提で言いますが。
3つのコンボボックスを特定できる情報(例えば1〜9や0〜8の整数とか、コンボボックスのハンドルとか)を受け取って判定結果を返す関数を作れれば、あとは比較的簡単です。
例えばそれがint f(int, int, int);という関数だとすると、全ての判定を行う関数は例えば以下のようにできます。
int g(int input){
int n = 0;
switch(input){
case 1:
n = n ? n : f(1, 2, 3);
n = n ? n : f(1, 4, 7);
n = n ? n : f(1, 5, 9);
break;
case 2:
n = n ? n : f(1, 2, 3);
n = n ? n : f(2, 5, 8);
break;
・・・
}
return n;
}
データをどのように扱ってるかにもよりますが、多分こんな感じでできるのではないかと思います。
304ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..入門者(4,813ポイント)
Date: 2008/12/16(火) 10:12
No:25734
| 解決!
|
Title: Re:○×ゲーム
|
|
ありがとうございました。おそらくibisさんが扱ってるのはちょっと違うタイプのものだとは思いますが、
参考にさせていただきます。
51ポイント を手に入れた。
|
|
|
|
Name: BEMANI ..かけだし(1,021ポイント)
Date: 2008/12/14(日) 15:25
No:25642
|
|
Title: ファイル操作についての御質問です。
|
|
はじめまして。
趣味でプログラムをやっている者です。
ファイル操作に関してうまくいかなかったので御質問させて頂きます。
やりたいことは、コンストラクタで Score.txt という名前のファイルにスコアが書き出されていて
それを読み込み下の配列に格納するというものです。
int RScore[10]; // スコア保存用
これがコンストラクタでファイルから書き出したスコアを格納しようと試みているところで、
FileScoe がFILEポインタです。
// コンストラクタ*************************************************
for ( int i=0; i<10; i++ )
RScore[i] = i*100; // ランキングデータ初期化
// ファイル読み込み
if( !(FileScore = fopen("Score.txt", "wb")) == NULL )
{
fseek(FileScore, NULL, SEEK_SET); // ファイルの先頭に移動
fread(RScore, sizeof(RScore), 10, FileScore); // スコアデータ読み込み
}
// ここまで*****************************************************
書き出しは今のところデストラクタに書いています。
// デストラクタ*************************************************
// ファイルにスコアを保存
for ( int i=0; i<10; i++ )
fprintf(FileScore, "%d,", RScore[i]); // ランキングスコアをファイルに出力
fclose(FileScore);
// ここまで*****************************************************
となっております、書き出したテキストには
0,100,200,・・・900,
となっており、書き出しは大丈夫なのですが、
書き出した後に
ランキングデータ初期化の場所をコメントアウトして実行すると
RScoreには初期化されていない値が格納されています。
テキストを読み込んでRScoreには 0,100・・・900が入るようにしたいのですが
どの辺りが間違っているのでしょうか。
読み込みに関して、惜しいのか全く見当はずれなのかも解らないです。
自分ではもう少しだと思ってるのですが;
開発はXP、Visual C++ 2008 ExpressEdition、言語はC/C++です。
宜しくお願いします。
1,021ポイント を手に入れた。
|
|
|
|
Name: Mist ..プログラマー(35,451ポイント)
Date: 2008/12/14(日) 15:47
No:25643
|
|
Title: Re:ファイル操作についての御質問です。
|
|
> fopen("Score.txt", "wb")
wb : 書き込みでオープンしているから。
書き込みでオープンするとファイル内容はすべてクリアされます。
読み込むときは"rb"だよ。
42ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..プログラマー(35,322ポイント)
Date: 2008/12/14(日) 15:54
No:25645
|
|
Title: Re:ファイル操作についての御質問です。
|
|
追記
一度のfopenで読み書き両用でオープンするのであれば"r+b"ってのもあるけどあまりお勧めはしません。
コンストラクタで読み込み、デストラクタで書き込みしかしないのであれば、
・コンストラクタではリードオープンしてデータを読み込みクローズ
・デストラクタではライトオープンしてデータを書き込んでクローズ
がいいと思う。
129ポイント を落としてしまった。
|
|
|
|
|
Name: Justy ..ハッカー(284,809ポイント)
Date: 2008/12/14(日) 16:13
No:25646
|
|
Title: Re:ファイル操作についての御質問です。
|
|
Mistさんの指摘に加えて。
デストラクタでは fprintf()でテキストで数値を書き出していますが、
コンストラクタでは freadで構造体をバイナリとして丸ごと読みだそうとしています。
テキストで扱うのかバイナリで扱うのかを統一しないと正しく読み込めません。
2倍のポイントを手に入れた! 242ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..ぴよぴよ(45ポイント)
Date: 2008/12/14(日) 18:06
No:25652
| 解決!
|
Title: Re:御回答ありがとうございます!
|
|
Mistさん・Justyさんありがとうございます。
非常に助かりました!
>>Mistさん
御指摘の通り、読み込みたいのに書き込みで開いてるはおかしかったです;;
やりたかったことは出来ました!
上のソースコードでは開けなかった場合のエラー処理などは何もなく、
関数化してなかったのでそれぞれ実装してみました。
ファイルオープン・クローズは各々関数でやるように変更しました。
r+bは初めて聞きましたが、読み書き両用なのならば使わないと思います;
そういうのもあるんだな〜ということで覚えておきます。
Mistさんお力になって頂き感謝しています!
ありがとうございます!
>>Justyさん
fprintfはテキスト書き込みなるんですね・・・
変更点は、fprintfをfwriteで書き込み文字化けのような感じで出力されてきました。
それをfreedで読み込み、デバッグで調べてみたところきちんとRScoreにそれぞれ格納されました。
Justyさんの解答にも非常に助けられました!
ありがとうございます!
変更した後のソースを載せておきます。
もし、なにか変な所が御座いましたらご指摘お願い致します。
//*****************************************************************************************
// ランキングスコアをファイルに書き出す
// 引数 : なし
// 戻り値 : なし
//*****************************************************************************************
void CWriteScore(void)
{
// ファイルを書き込みモードで開く
FileScore = fopen("Score.txt", "wb");
// ファイルに書き出し
fwrite(RScore, sizeof(RScore), 10, FileScore);
// 使用したファイルを閉じる
fclose(FileScore);
}
//*****************************************************************************************
// ランキングスコアをファイルから読み取る
// 引数 : なし
// 戻り値 : なし
//*****************************************************************************************
void CReadScore(void)
{
// ファイルオープン:ファイルがないなら0点を入れて初期化する
if( (FileScore = fopen("Score.txt", "rb")) == NULL )
{
for ( int i=0; i<10; i++)
RScore[i] = i*100; // ランキングデータ初期化
return;
}
else
{
fseek(FileScore, NULL, SEEK_SET); // ファイルの先頭に移動
fread(RScore, sizeof(RScore), 10, FileScore); // スコアデータ読み込み
}
fclose(FileScore); // 使用したファイルを閉じる
}
以上二つの関数に分けました。
スペースを空けるなどして見やすくしてるつもりなのですが如何でしょうか?
またここで御質問することがあった場合見にくいソースだとさすがに自分も嫌なので
もし宜しければ御意見いただけると嬉しいです。
976ポイント を落としてしまった。
|
|
|
|
|
Name: box ..ハッカー(132,074ポイント)
Date: 2008/12/14(日) 18:35
No:25653
|
|
Title: Re:御回答ありがとうございます!
|
|
> FileScore = fopen("Score.txt", "wb");
fopenに失敗したときのことを考慮する必要があります。
> fseek(FileScore, NULL, SEEK_SET); // ファイルの先頭に移動
fopen直後はファイルの先頭を指しているはずです。
ここでのfseekは特にいらないと思います。書いてあっても間違いではないと思いますけれど。
100ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..ぴよぴよ(0ポイント)
Date: 2008/12/14(日) 19:34
No:25660
|
|
Title: Re:御回答ありがとうございます!
|
|
>>boxさん
fopen に失敗した際の処理を考慮に入れておきました。
確かに抜けていました;
ありがとうございます!
fseekに関してですが、
個人的に、一番最後を指しているような感じがしたのでつけてみたのですが
必要でないみたいなので削除しました。
boxさん。
御指摘ありがとうございます。
75ポイント を落としてしまった。
|
|
|
|
|
Name: BEMANI ..ぴよぴよ(343ポイント)
Date: 2008/12/15(月) 21:42
No:25727
|
|
Title: Re:御回答ありがとうございます!
|
|
>>Dixq(管理人)さん
次回ソースコードを載せるときに preタグを使ってみたいと思います。
予約語に色が付くと確かにいいですね〜。
明るい色を使ったので目が痛くなったかもしれません;
C言語の質問では無いのですが、龍神録の画像や音楽などは管理人様が作成したものなのでしょうか?
操作キャラはドット絵でしょうか?
>>Mistさん
このサイトいいですね!
とても解りやすいです〜。
困ったら活用してみます><
自分も縦シューを作ろうと、少しずつ形にしていってます。
ウインドウを作成する所から始まって、DirectXの力を借り、
new delete を使って弾をリスト構造にしてみたりと、ようやく色々出来るようになりました。
ファイル読み込みが出来なかったので、本当に感謝しています。
これでスコアに関してなんとか出来そうです。
ありがとうございます!
この質問はちょっと恥ずかしいのですが、凄く素朴な疑問です。
if(条件文){
処理;
}
と
if(条件文)
{
処理;
}
この二つ、括弧を下げるのと下げないのとで何か違いってあるのでしょうか・・・
プログラムに慣れている人は括弧を下げていない事が多いので何かあるのかな〜と思ったりしました。
ただ見易いかどうかだけならソレはソレでいいのですが;
343ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(132,174ポイント)
Date: 2008/12/15(月) 21:54
No:25728
|
|
Title: Re:御回答ありがとうございます!
|
|
> この二つ、括弧を下げるのと下げないのとで何か違いってあるのでしょうか・・・
コーディングの流儀の違いです。
どちらでもコンピュータにとっては同じです。
お好きな方を選べばよいです。ただ、1つのプログラムの中で
別々の流儀が混ざっているのは美しくないと思います。
美しいと感じるかたもいらっしゃるかもしれませんけれど。
100ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..ぴよぴよ(409ポイント)
Date: 2008/12/15(月) 22:04
No:25729
|
|
Title: Re:御回答ありがとうございます!
|
|
>>boxさん
そうなのですか・・・
特に違いがないのであれば今まで通り行きたいと思います。
回答ありがとうございます!
66ポイント を手に入れた。
|
|
|
|
Name: 烏 ..かけだし(1,708ポイント)
Date: 2008/12/02(火) 20:35
No:24949
|
|
Title: 動画投稿
|
|
前回はありがとうございました。
龍神録プログラミングの館の動画投稿の際の報告です。
どう報告すればよいかわからなかったので、ここに報告させていただきました。
ちなみに、報告は上記の文だけでよろしいでしょうか?
もし他に報告した方がいいことがあれば教えていただけると幸いです。
133ポイント を手に入れた。
|
|
|
|
Name: 烏 ..かけだし(1,545ポイント)
Date: 2008/12/03(水) 17:11
No:24973
|
|
Title: Re:動画投稿
|
|
>ナイさん
動画を投稿する前に報告しておいた方がいいと思い投稿はまだです。
>管理人さん
館のプログラムを使用した動画です。わかりずらい書き方をしてしまって申し訳ありませんでした。
動画は投稿完了後リンクを貼らせていただきたいと思います。
ただ、投稿もプログラムも初心者なので少しも期待しないでください・゜・(つД`)・゜・
163ポイント を落としてしまった。
|
|
|
|
|
Name: 烏 ..かけだし(2,243ポイント)
Date: 2008/12/03(水) 21:10
No:25003
|
|
Title: Re:動画投稿
|
|
>arrayさん
ありがとうございます^^
途中途中消えることに関してですが、仕様です。
MUGENの鬼巫女のアマテラスを弾幕化してみたものなので、途中途中の動きもできるだけ再現したかったので途中途中消えるようにしてみました。本当は消えた後はホーミングをしないようにした方がいいかなと後で思いましたが・・・。
今色々実装しようと龍神録プログラミングの支館でかなりお世話になっております^^
>管理人さん
ありがとうございます^^
私はEASYシューターなので避けきれませんが、上手い人はすぐ避けれると思っていましたが、管理人さんにそういわれると、避けれないような気がしてきました・・・
発射角度にランダム要素は無いので、ある一定の角度にいれば避けれるようにしたつもりだったのですが、もう少し簡単にしたほうがいいでしょうか?
全体攻撃だったので、あれくらい欲しかったのです・・・(もっと難しいものを一つ上のランクとして作成しようとしていたの内緒です)
でも、管理人さんだったらすぐクリアされそうで怖いです・・・w
>後、ニコニコは投稿直後に何かコメントを入れないと新着動画に載らないのでもし
>新着に載せたい場合は何か入れるといいですよ。
!?・・・そうだったのですか・・・
貴重な情報ありがとうございます^^
arrayさん、管理人さん、貴重なご意見ありがとうございます。
途中途中、あるいはすべて完成したら投稿しようと思っているので、その時はまた見ていただけるとうれしいです^^
見ていただきありがとうございました。
548ポイント を手に入れた。
|
|
|
|
|
Name: 烏 ..かけだし(2,459ポイント)
Date: 2008/12/08(月) 21:23
No:25337
|
|
Title: Re:動画投稿
|
|
>arrayさん
見てくださってありがとうございます^^
最初の弾幕は移動し始めたら1フレーム後には画面外のはずなので目視できてたら作り直し決定でした・・・w
龍魚ドリルに関してですが、チャレンジしてもらえるならとてもうれしいので、あまり多くは言いませんが、少しだけ。
弾の構造体に変数を少し追加しています。
あまり追加したくなかったのですが、私の頭では追加する以外にいい方法が思いつきませんでした。
追加した変数は言うとすぐ計算式がばれてしまいそうなので秘密でw
あと、弾の描画方法も一箇所のみ変更しています。
本当は上記の追加・変更無しで作りたかったのですが、どうもいい案が出なく妥協してしまいました・・・
鮮血の結末にて立体弾幕を使いたいのでまだまだ改良せねば・・・
正直しょぼいと思われると思っていたので、すごくうれしいですwありがとうございます^^
196ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(915,846ポイント)
Date: 2008/12/08(月) 21:48
No:25340
|
|
Title: Re:動画投稿
|
|
おぉ、ドリルすごいですね!
擬似的に3Dにする方法って色々あるんでしょうけど、発想次第でいくらでも面白くなりそうです。
私も時間を見つけて新しい弾幕考えてみたいですw
最初の弾幕は・・・、見えない弾ということで、ちょっと新鮮でしたねw
>arrayさん
見ましたよ〜、弾幕配置生成器!
すごいですね〜w
弾ごとに色の数違うと思いますが、ちゃんと制御されてますねw
なんというか欲しい機能が全てあるって感じですね。
バックスペースでいくらでも作業が戻せるのもすばらしい。
負けないでもっと良いツール作れるように頑張らなければw
195ポイント を手に入れた。
|
|
|
|
|
Name: array [URL] ..プログラマー(39,944ポイント)
Date: 2008/12/08(月) 23:02
No:25350
|
|
Title: Re:動画投稿
|
|
>鳥さん
挑戦すると言っておきながら、まだVC++を開いてすらいないですw
掲示板書き込み後も何度か見たんですが、動きが(計算式で)イメージできません
ifなど使って無理やりなら何とか表現できそうですが、個人的に計算式を使って華麗にプログラムを組んでみたいと思ってます。
実際 鳥さんの弾幕は統率がとれているので、なにかしらの法則があると睨んでます。
検証は動画を一時停止連打して動きを見るてるんですが、画像の縮小・拡大も使ってるんですかね。
閃いた時にでも挑戦してみます。
動画について、いまさらですが高画質ですねw
動画キャプチャーソフトについて
私は、管理人さんお勧めの「Dxtory」も使ってみましたが「DxCapture」と使い比べて
「DxCapture」こっちが良かったので、こちらを使ってます。
若干「Dxtory」の方が軽いですが、広告のが入るのを考慮したら「DxCapture」かなと。
良かったら、鳥さんの使用キャプチャソフトや編集ソフト、エンコードテクニックなど聞いてみたいです^^
> Dixq さん
評価してくれるととても嬉しいです♪
プログラムの大半も画像も、龍神録の館のものを使っているので、制作は楽でしたが
文字列やファイル入出力を扱うのが苦手なので苦労しました。
ツールを作った動機は、もちろんGFDさんの「 妹紅の不死「火の鳥 -鳳翼天翔-」の作り方 」(スレッド)を見てです。
こういうのはクリックで配置できたら便利かな、と思い挑戦してみました。
他に、想定してる機能追加は、出力形式の選択・・・とか色々考えるのは楽しいですねw
まぁなんにしろ就職先関係で忙しそうですが、頑張ってください^^
Dixqさんの次回作のゲーム期待してますw
377ポイント を手に入れた。
|
|
|
|
|
Name: 烏 ..入門者(3,142ポイント)
Date: 2008/12/09(火) 00:36
No:25356
|
|
Title: Re:動画投稿
|
|
>管理人さん
見てくださってありがとうございます^^
擬似立体弾幕は龍神録プログラミングの館のケロちゃん風雨に負けずをみて作ろうと思いましたw
あれを見なかったら多分立体弾幕の発想が出てないです・・・w
最初の弾幕は元を再現しようとしたら過程を消して結果だけを残すと説明があったのでああいう形になりました。最初は3箇所に設置無しでそのまま発射も考えてました・・・w
あと、これは質問なのですが、管理人さん と Dixqさん とどちらでお呼びした方がいいのでしょうか?
>arrayさん
実は私も今日はあんまりVC++開いてなかったりします・・・
法則・・・ですね、たぶんw
ちなみにあの方式だと円系しか楽に作れませんが・・・orz
縮小・拡大についてですが、使っています。
弾の描画方法の変更が縮小・拡大部分です。
使用キャプチャソフトは、アマレココを使用させてもらっています。
フリーで尚且つ軽いソフトなのでとても使いやすいですw
動画作成自体初めてだったので他のソフトは使ったことがありませんが、とても使いやすかったので、続けて使わせてもらっていますw
編集ソフトはwindowsムービーメーカーだったりします。
ニコニコ動画まとめwikiで紹介されていたやり方をそのまま使わせてもらっています。
アマレココで撮影→ムービーメーカーで編集→ローカル再生用ビデオ(2.1mbps)で保存→ニコエンコでmp4へ変換
の流れで動画作成しています。
いずれは他のソフトも試して見たいのですが、PCの性能的に軽くないとスムーズな動画が撮影できなくて・・・
まあ、決してスムーズに撮影できてるとも言いがたいですが・・・
弾幕配置生成器とてもすごいですね・・・
頭の中で考えてることが多かったのですが、大助かりですw
二重弾幕結界を息抜きと練習のために作成したいと思っていたので予想より短い時間ですみそうですw(これで授業も聞けr
ドリルについてですが、もしよろしければソースを公開してもいいでしょうか?
チャレンジしてもらえるなら嬉しいって言ってしまいましたが、そのせいでarrayさんに余計な労力を使わせてしまっても申し訳ないですし、少しでも参考になったら嬉しいので。
683ポイント を手に入れた。
|
|
|
|
|
Name: 烏 ..入門者(3,343ポイント)
Date: 2008/12/09(火) 00:51
No:25357
|
|
Title: Re:動画投稿
|
|
>kazuoniさん
見てくださってありがとうございます^^
なんとなく申し訳ありませんでした。
私はプログラムも初心者なので、皆さんはそんなすごいツールをうまく作れるのだろう とよく思います。
いつも画像などはどう移動させようか、どこに配置しようかなどかなり迷うのでありがたく使わせていただきます^^
私も弾幕の最初の一つがなかなかできませんでした。
でも、一つできたら次は最初より上手くできて嬉しいものでしたw
なので、ツールもゲームも両方の作成がんばってくださいw
201ポイント を手に入れた。
|
|
|
|
|
Name: array [URL] ..熟練のプログラマー(40,171ポイント)
Date: 2008/12/09(火) 16:04
No:25399
|
|
Title: Re:動画投稿
|
|
> 使用キャプチャソフトは、アマレココを使用させてもらっています。
確か以前うまく起動できなくて使用をあきらめましソフトですね ><
> 編集ソフトはwindowsムービーメーカーだったりします。
私もWMMを使って編集するのですが、Vista付属のWMMだったりします・・・・そして、ムービー出力をするとなぜか画質が落ちるんですよね。PCの動作が遅くなってから画質の劣化が気になり始めました。
特別にDivXなどのコーディックをインストールした方が良いんですかね。
> ドリルについてですが、もしよろしければソースを公開してもいいでしょうか?
> チャレンジしてもらえるなら嬉しいって言ってしまいましたが、そのせいでarrayさんに余計な労力を使わせてしまっても申し訳ないですし、少しでも参考になったら嬉しいので。
公開するのは自由だと思います。もし公開されるのであれば興味津々と見させてもらいます。
一応余計な労力とは思っておらず、趣味の範囲で楽しんでるので、ネタがあれば永遠とプログラムで遊んでます。
しかし、最近は忙しくて・・・(ノ_;)
227ポイント を手に入れた。
|
|
|
|
|
Name: 烏 ..入門者(4,077ポイント)
Date: 2008/12/09(火) 17:00
No:25404
|
|
Title: Re:動画投稿
|
|
>arrayさん
>確か以前うまく起動できなくて使用をあきらめましソフトですね ><
私も最初は起動の仕方がわからなくて諦めかけてたんですが、諦めがつかなくて何時間か粘ってたらできました・・・
>私もWMMを使って編集するのですが、Vista付属のWMMだったりします・・・・そして、ムービー出力をすると>なぜか画質が落ちるんですよね。PCの動作が遅くなってから画質の劣化が気になり始めました。
>特別にDivXなどのコーディックをインストールした方が良いんですかね。
ん〜・・・初期設定からローカル再生用ビデオ(2.1mbps)くらいしか変えていないので、XPとVistaで仕様が結構違ったりするのでしょうか・・・
>公開するのは自由だと思います。もし公開されるのであれば興味津々と見させてもらいます。
>一応余計な労力とは思っておらず、趣味の範囲で楽しんでるので、ネタがあれば永遠とプログラムで遊んでま>す。
>しかし、最近は忙しくて・・・(ノ_;)
すいません、余計な労力という書き方は間違えでした・・・
ツールの方で忙しいかと思いまして・・・
では、次のコメントで公開させていただきます。
>キューさん
では、キューさんと呼ばせていただきます。
>なるほど〜。まぁオリジナル弾幕じゃないのであれですが^^;
いえ、管理人さんの解説があったからこそです。
それまではスピードでの移動しか知りませんでしたからw
>私は弾幕作る時はいつも(東方はもちろんですが)夢終劇見てました。
とてもすばらしいですね・・・
インサニティファントムのアイデアどこかで参考にさせていただきたいですw
>あと、「龍神録ノート」なるものを持ち歩いて、弾幕が思いついたらその都度いつもメモするようにしてましたw
龍神録ノート!・・・とても見てみたいでs
私もアイデアを実装する時はなにか書くものがほしい時が多いのですが、PCの前か授業中が多いのでノートは目の前に・・・w
授業はちゃんとノートに取ってますw
>弾幕って考えるの、また、実装するの楽しいですよね♪
はいwとても楽しいですw
734ポイント を手に入れた。
|
|
|
|
|
Name: 烏 ..入門者(4,369ポイント)
Date: 2008/12/09(火) 17:40
No:25409
|
|
Title: Re:動画投稿
|
|
横に大幅に出ていたので適当なところで改行しています。
ところどころコメントのつける位置がまちまちですが、横にしすぎると出てしまうもののみその行の上につけさせていただきました。
本体のソースは添付です。
追加変数はソース内で使用しているものを参考にしてください。
下記は関数 void graph_bullet() 無いの変更点になります。
if(boss_shot.rittai==1){
DrawRotaGraphFdF(
boss_shot.bullet[j].x, boss_shot.bullet[j].y,
1.0-(boss_shot.bullet[j].z/300), disp_angle,
img_bullet[boss_shot.bullet[j].knd][boss_shot.bullet[j].col],TRUE);
}
else{
DrawRotaGraphFdF(
boss_shot.bullet[j].x, boss_shot.bullet[j].y,
1.0, disp_angle,
img_bullet[boss_shot.bullet[j].knd][boss_shot.bullet[j].col],TRUE);
}
あまり美しくないですが、自分なりに短くしたつもりです。
コメントは今つけたものが多少あるのでわからないところがあったら言ってくださると助かります。
292ポイント を手に入れた。
|
|
|
|
|
Name: array [URL] ..熟練のプログラマー(40,459ポイント)
Date: 2008/12/09(火) 18:24
No:25411
|
|
Title: Re:動画投稿
|
|
> Dixqさん
プロフェイルエディタというのは全然しりませんでした。で、さっそく試してたのですが
非圧縮など色々なコーデックを試してみたのですが、あまり変わらない・・・(画質は変化が分からないうえに再生が重くなった)
原因はよく分からないですがやっぱりPCのスペックに関係があるんじゃないかと思ったり・・・
コーディックにDivXも使えるのかなと思って、インストしてみましたが、読み込み方分からない〜もうちょっと調べてみます^^
> サムネイル機能
確かに便利そうなので、弾幕作成そっちのけでやってみますw
> 烏さん
弾幕について、動きのイメージは出来るんですけど、擬似3Dで考えると上に重ねて表示する弾と下に隠して表示させる弾をどうやって仕分けしようか悩んでます。重なりは分岐命令じゃ制御しにくいですし・・・。
ちなみに忙しいのはリアルのレポートや宿題で・・・先週は休めないほどの量で酷かったです。
また来週から忙しくなる(+_+)
ソース見ましたよ。コメントや改行がうまく使われてて見やすかったです。
> boss_shot_bulletH200()
H200ってw 200個目って事ですかww
ぱっと見じゃ分からないのでじっくり見させてもらいます^^
288ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(918,894ポイント)
Date: 2008/12/09(火) 18:36
No:25413
|
|
Title: Re:動画投稿
|
|
あら・・私もうまくいかなかったんですが、単に私のやり方が悪かったんだと思ってました。
どうもそうではないのかもしれませんね^^;
Video Studio 11ってソフト買ってみたんですが、対応していない拡張子もあり、これも色々とよくわからず・・。
動画関係ってホントわかりにくいですよね〜;
コーデックとか動画形式とか気にせず全部一つのソフトで操作できるようなもの出てこないんでしょうかね・・。
108ポイント を手に入れた。
|
|
|
|
|
Name: 烏 ..入門者(4,754ポイント)
Date: 2008/12/09(火) 20:38
No:25422
|
|
Title: Re:動画投稿
|
|
>キューさん
この記事の画像がそうだったのですか。
この記事を読んだ当初はプログラムを始めようかどうか悩んでいた時なので見ても全然わからなかった記憶がありますw
>今卒業前で忙しくてゲーム作れてないんですが、ノートの内容だけ着々と増えていますw
ということは・・・新作が出たら新弾幕がてんこもr
卒業前は確かに忙しそうですね。弾幕を考えながら脳を並列して授業を受ければなんとk
ではなく、授業や課題(卒論?)がんばってください^^
>arrayさん
>弾幕について、動きのイメージは出来るんですけど、擬似3Dで考えると上に重ねて表示する弾と下に隠して表示させる弾をどうやって仕分けしようか悩んでます。重なりは分岐命令じゃ制御しにくいですし・・・。
私は基本座標からの距離で考えていこうかと思っていたのですが、無理がありましたw
重なりはz軸+縮小・拡大表示で何とか対応できないかな〜と思想中です。
(下は小さく表示して上は大きく表示等々)
>ちなみに忙しいのはリアルのレポートや宿題で・・・先週は休めないほどの量で酷かったです。
また来週から忙しくなる(+_+)
う・・・それは大変そうですね・・・
休めないほどの量・・・想像したくないですw
私も来週から少し忙しくなるので、今週中に鬼巫女分+立体弾幕の案+なにか再現弾幕ができたらいいな〜と考えています。
・・・もしかしてarrayさんはその状況であのツールを作成されてたのですか!?すごい・・・
>H200ってw 200個目って事ですかww
いえwそんなわけありませんwww
H100〜:鬼巫女弾幕
H200〜:再現・自作弾幕と分けていたのでそうなりましたw
・・・はい・・・つまり一個目ですw
385ポイント を手に入れた。
|
|
|
|
|
Name: array [URL] ..熟練のプログラマー(40,511ポイント)
Date: 2008/12/14(日) 03:40
No:25635
|
|
Title: Re:動画投稿
|
|
弾幕
オリジナリティーがありませんが、公開されたソースを元に作ってみました。
やってみた感想ですが、やっぱり重なりを制御するのが難しいですね。
結局、その問題は放置して弾幕の速度を速くする事で誤魔化しました。
やっぱり、他人のソースを見ると勉強になります。
読むのは非常に難しかったですが、解読できた分、新たな知識を得ることができたと思います。
ドリル2列目以降の弾の配置の仕方は今までに無い考えだったので勉強になりました。
分からなかった部分があったのですが
> int num=((t-KANKAKU_TIME)/KANKAKU_TIME+1)*3;//現在何列目かを代入
この式を使うといい感じになりますが、何かの公式なのでしょうか。
そしても予想以上に、ややこしい移動計算式で疲れましたw
鳥さんのソースがなかったら絶対に途中でやめてました(>_<)
2倍のポイントを手に入れた! 52ポイント を手に入れた。
|
|
|
|
|
Name: lbfuvab ..中級者(11,508ポイント)
Date: 2008/12/14(日) 05:10
No:25637
|
|
Title: Re:動画投稿
|
|
追記させてもらいます。
>非圧縮など色々なコーデックを試してみたのですが、あまり変わらない・・・(画質は変化が分からないうえに再生が重くなった)
非圧縮ならPCのスペックが余程でないと再生時に重くなって当たり前です。
多分、huffyuvでも再生すると重さに呆れると思います。
91ポイント を手に入れた。
|
|
|
|
|
Name: 烏 ..入門者(4,433ポイント)
Date: 2008/12/14(日) 18:58
No:25655
|
|
Title: Re:動画投稿
|
|
>arrayさん
おお、見事にわかりやすくなってますねw
私もちゃんとまとめないといけないなと思いましたw
それと、紹介までしてもらってありがとうございます。
>やってみた感想ですが、やっぱり重なりを制御するのが難しいですね。
私も重なりでかなりてこづって結局z軸を使うことなりました・・・
>読むのは非常に難しかったですが、解読できた分、新たな知識を得ることができたと思います。
読み辛くてすいません。でも、お役に立てたみたいで嬉しいですw
>int num=((t-KANKAKU_TIME)/KANKAKU_TIME+1)*3;//現在何列目かを代入
これは・・・自分で見てもとてもわかりにくかったです・・・
(t-KANKAKU_TIME)
2列目が発射された時間を0にしてます。t-(一列目が発射されてからの経過時間)
(列番号-1)*3
がその列の周りを回転している弾の数になります。
と、分かりづらい説明をしてみました。
いまさらですが、
int num=(t/KANKAKU_TIME)*3;
これでいいような気がしてきました・・・。
移動計算式ですが、球の中心点からある座標(x,y,z)までの距離を求める計算式を参考にさせてもらっています。
もちろん、こんな知識は無かったので解説ページ頼みでしたが・・・
今は鳥とかが動くようにできたらいいな〜とか考えてますw
>lbfuvabさん
ありがとうございます^^
さっそく解説ページを読ませてもらってから試させてもらいます。
419ポイント を落としてしまった。
|
|
|
|
|
Name: array [URL] ..熟練のプログラマー(41,008ポイント)
Date: 2008/12/14(日) 19:23
No:25659
|
|
Title: Re:動画投稿
|
|
> (t-KANKAKU_TIME)
> 2列目が発射された時間を0にしてます。t-(一列目が発射されてからの経過時間)
なるほど、良く見れば公式とかじゃなくて、普通にそうですね。寝ぼけてました><
昨日見た時は
int num=((t-KANKAKU_TIME)/KANKAKU_TIME+1)*3;
が
int num=((t-KANKAKU_TIME)/(KANKAKU_TIME+1))*3;
こんな風に見えてました(汗
なんで+1するんだぁって悩んでました。(お騒がせしました)
移動計算方法、私も知らない知識だったので本当に勉強になりました^^
そんな方法で弾に回転する動きを表現できるとは。
>lbfuvabさん
私も、「huffyuv」がどんなものかと思いインストールしてみたのですが、「AviUtl」というのも必要になってくるのでしょうか。
個人的に、WMMに組み込んで(?)使ってみようかと思ってたのですが、未知なだけにどう模索すれば良いか分からず・・・。
ちなみにWMMの非圧縮で出力しても、画質が落ちるのは如何なものかと思ってるのですが。
画質が落ちるといってもスコアボードの「藍色(青?)」→「若干水色」に落ちたり、赤色が変色したり程度なのですが・・・。
340ポイント を手に入れた。
|
|
|
|
|
Name: 烏 ..入門者(4,531ポイント)
Date: 2008/12/14(日) 21:42
No:25667
|
|
Title: Re:動画投稿
|
|
>arrayさん
そうでしたか。
もしかして、昼は勉強などで疲れていて、その後プログラム等を夜遅くまでがんばっておられるのでは?
23ポイント を手に入れた。
|
|
|
|
|
Name: array [URL] ..熟練のプログラマー(41,587ポイント)
Date: 2008/12/14(日) 22:33
No:25669
|
|
Title: Re:動画投稿
|
|
> もしかして、昼は勉強などで疲れていて、その後プログラム等を夜遅くまでがんばっておられるのでは?
私はそんなに真面目な人じゃないですよw 普通以上にニコニコとか見てますし
勉強といっても確かに座学が多い(座学は疲れる)ですが、実習が割りと多い学校なので楽しいですよ。
ちなみにですね、おまけ編見ましたよ(さっき)
今までの弾幕で一番すごいと思ったかなりのクオリティーですね。
にしても、次から次へと動画をUPしていって羨ましいです。
私も、東方弾幕に詳しければ良い案がでてくるのかもしれませんが。
あんまり関係ないですが。
友達に地霊殿と風神録をやらせてもらったのですが、難しすぎるw ノーコンテニューなんて不可能ですよ。(弾幕綺麗なんて見てる場合じゃないですよw)
ちなみに龍神録なら頑張ってクリアできるようになったんですけどね(やり込み度が違う)
217ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(285,326ポイント)
Date: 2008/12/14(日) 23:02
No:25671
|
|
Title: Re:動画投稿
|
|
>WMMに組み込んで(?)使ってみようかと思ってたのですが、未知なだけにどう模索すれば良いか分からず・・・。
Windowsムービーメーカーですか?
あれは wmv用と言って差し支えない(一部の aviは出力できるようですが)ものなので
無圧縮で出力することは出来ても huffyuvを組み込むのは無理じゃないでしょうか。
>AviUtl」というのも必要になってくるのでしょうか
AviUtilじゃなくても、aviをエンコードできるソフトなら何でもいいと思いますよ。
VirtualDubModとか TMPGEncとか。
>ちなみにWMMの非圧縮で出力しても、画質が落ちるのは如何なものかと思ってるのですが
それが元素材からして劣化していたとか、ただの設定ミスとかでないとしたら、
別のソフトを使った方がいいかと……。
459ポイント を手に入れた。
|
|
|
|
|
Name: lbfuvab ..中級者(11,546ポイント)
Date: 2008/12/15(月) 02:42
No:25677
|
|
Title: Re:動画投稿
|
|
WMMは自分でコーデック選べないんですね。
使ったこと無かったのではじめて知りました。混乱させてしまいました。すいません。
38ポイント を手に入れた。
|
|
|
|
|
Name: array [URL] ..熟練のプログラマー(42,051ポイント)
Date: 2008/12/15(月) 18:42
No:25720
|
|
Title: Re:動画投稿
|
|
> Justyさん
とても分かりやすい説明ありがとうございます。
> wmv用と言って差し支えない
プロファイルエディタからも、コーディックを追加できない事から薄々感じてはいたのですが
やっぱり追加する事はできなかったんですね。
> 別のソフトを使った方がいいかと……。
多少劣化は気になりますけど、多分WMM並の編集ソフトを探すと有料になりそうなので
半ば諦め状態でWMM使い続けます^^;
Justyさん及びlbfuvabさん貴重な情報ありがとうございました^^
> Dixqさん
> 自分の作りたい弾幕になるように計算式考えてそれが忠実に実現できた時は嬉しいですよね☆
めちゃくちゃ共感しますw
病気レベルになると、弾幕ゲーム中にこの弾幕はこんな計算式で動いてるのかな〜って想像したり・・・。
そして実際に試して(微調整ながらも)動いた時は感動ものですねw
> しかしドンドン本家より支館の方が充実していく・・w
そう言われると、なぜか心苦しいのですが本家が盛り上がるように頑張らせてもらいます!
一番宣伝になりそうなのは、龍神録の館でこんなゲーム作りましたよ。って提示してるのが
館ユーザーのやる気に繋がると思うのですが、私制作中だったものは消えてしまったので軽く凹んでます。
とりあえず今、館で頑張ってる人達の作品にも期待しつつ、何か支舘でも手伝えそうな事がないかなと思ってます。
464ポイント を手に入れた。
|
|
|
|
|
Name: yu ..入門者(4,680ポイント)
Date: 2008/12/15(月) 19:36
No:25724
|
|
Title: Re:動画投稿
|
|
> Dixq様
> 自分の作りたい弾幕になるように計算式考えてそれが忠実に実現できた時は嬉しいですよね☆
自分はプログラムの練習のために
東方紅魔郷を自分なりに作っているのですが
管理者様が言うように、同じ計算式を見つけたらとてもうれしいですw
若干違って妥協してしまうこともありますが・・・
管理者様の弾幕結界は一切妥協がないですね。
全く同じで感動しました。
しかし、パクリのゲームの基盤はできているのですが、背景、エフェクト、ボムのグラフィックを
再現するのが難しいです;
パクルのも難しいとは・・・
ZUN様はすごいですね。
龍神録の館をかなり参考にしているので自分で作ったと言えないかもしれませんが・・・
しかし、無ければ作ろうって気にならなかったと思います。
ありがとうございます。m(_ _)m
> array様
>病気レベルになると、弾幕ゲーム中にこの弾幕はこんな計算式で動いてるのかな〜って想像したり・・・。
プログラム打ち始めてからそこら辺が気になるようになってしまいましたw
東方とかになるとそんなこと考えていられませんが・・・
array様の支館のほうもかなり参考になっています。
「一時停止」は、自分で作っていたのですが拡張性がなかったため
array様のものに書き換えさせてもらいました。
ありがとうございます。m(_ _)m
しかし、やっぱり東方と全く一緒は良くないかな・・・;
グラフィックとか・・・
460ポイント を手に入れた。
|
|
|
|
|
Name: 烏 ..入門者(4,571ポイント)
Date: 2008/12/15(月) 22:45
No:25730
|
|
Title: Re:動画投稿
|
|
>arrayさん
>私はそんなに真面目な人じゃないですよw 普通以上にニコニコとか見てますし
勉強といっても確かに座学が多い(座学は疲れる)ですが、実習が割りと多い学校なので楽しいですよ。
おお、いい学校ですねw
>にしても、次から次へと動画をUPしていって羨ましいです。
前回までは忙しくなる前にと急いでいたので、UP速度はがた落ちになりました・゜・(つД`)・゜・
>友達に地霊殿と風神録をやらせてもらったのですが、難しすぎるw ノーコンテニューなんて不可能ですよ。(弾幕綺麗なんて見てる場合じゃないですよw)
私もノーコンテニューはきついです・゜・(つД`)・゜・
>ちなみに龍神録なら頑張ってクリアできるようになったんですけどね(やり込み度が違う)
羨ましいです・・・・゜・(つД`)・゜・
>Justyさん
知らないことばかりでした・・・。
ありがとうございます^^
>lbfuvabさん
私は知らないことを知れて嬉しかったですw
ありがとうございます^^
>キューさん
>自分の作りたい弾幕になるように計算式考えてそれが忠実に実現できた時は嬉しいですよね☆
私もそう思いますw
>yuさん
今紅魔郷をしているのでとても気になります・・・w
40ポイント を手に入れた。
|
|
|
|
|
Name: array [URL] ..熟練のプログラマー(40,668ポイント)
Date: 2008/12/14(日) 18:47
No:25654
|
|
Title: Re:■windows100%に龍神録が掲載されました■
|
|
おめでとうございます〜
自分のプレイしたことのあるゲームが雑誌で紹介されるのはプレイヤーとしてもいい気分ですね。
制作者であるDixqさんは計り知れない喜びがあるんじゃないでしょうかw
まぁやっぱり言える事はひとつで おめでとうございますっ♪ (大事なことなので2度言いました)
157ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(45,468ポイント)
Date: 2008/12/14(日) 19:04
No:25656
|
|
Title: Re:■windows100%に龍神録が掲載されました■
|
|
掲載、おめでとうございます!
次もがんばらないと、ですね。
まあ、卒業のほうが大事ですが…。
私の住んでいるところでは、雑誌が発売されるのが2日ほど遅れます。
ので、まだ手にしていません。
明日辺り出るはずなので、そのときに買いますね。
(実は私も管理人さんの次回作に参加する予定だったりします)
104ポイント を手に入れた。
|
|
|
|
|
Name: 烏 ..入門者(4,508ポイント)
Date: 2008/12/14(日) 19:05
No:25657
|
|
Title: Re:■windows100%に龍神録が掲載されました■
|
|
おめでとうございます^^
画像付きでとても嬉しかったですw
近くにセブンイレブンが無いので・・・w
次回作までにはもうちょっと腕を上げて全部避けられるようになっておきたいですw
75ポイント を手に入れた。
|
|
|
|
|
Name: ようすけ ..入門者(3,003ポイント)
Date: 2008/12/14(日) 21:14
No:25666
|
|
Title: Re:■windows100%に龍神録が掲載されました■
|
|
おめでとうございます(*^_^*)
雑誌に掲載されるなんて凄いですね!
こちらのサイトのアクセスも一気に増えるんじゃないでしょうか?
これからも時間の許す限りゲーム作りがんばって下さい(^v^)
68ポイント を手に入れた。
|
|
|
|
|
Name: situmon ..上級者(18,727ポイント)
Date: 2008/12/14(日) 23:29
No:25672
|
|
Title: Re:■windows100%に龍神録が掲載されました■
|
|
おめでとうございます。
でも書店行く機会あるかなと思います。
でも龍神録はとても楽しいので
載っていてまったく不思議ではないと思います。
一月まえにHARDですべてやりましたが
もちろんだめなシューターですのでコテンパンにやられました・・・
112ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(285,408ポイント)
Date: 2008/12/14(日) 23:53
No:25674
|
|
Title: Re:■windows100%に龍神録が掲載されました■
|
|
掲載おめでとうございます。
雑誌に載るってそれが例え小スペースであっても結構嬉しいんですよね。
こうして紹介されて、プレイしてくる人が増え注目が集まると次を作るのも大変だと
思いますが、楽しみに期待しています!
82ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(924,247ポイント)
Date: 2008/12/15(月) 01:56
No:25676
|
|
Title: Re:■windows100%に龍神録が掲載されました■
|
|
皆様コメントありがとうございます^^
前回掲載された、iP!の11月号の記事はこちらです→
http://www.play21.jp/board/nextz.cgi?id=dixq&lognum=70&dispnum=21858
>kazuoniさん
ありがとうございます^^
昇格(?)したんでしょうかw
しかしいつも記事の書き方がうまいですよね。さすがプロと言うべきでしょうか(ノ▽`)ノ
>arrayさん
ありがとうございます☆イヤほんとありがとうございます(大事な事なn(ry
なんか雑誌に載ってるゲームとかって自分の世界とは全く違う世界のもののような気がしていたので、
雑誌に自分のソフトが掲載されるとそこだけ何か世界が違うような気がしますw
しかしこのゲームもZUNさんが培ってきた土台にいきなり乗らせてもらったものなんで、
自分のゲームというのはなんだか気が引けますね^^;現にパロゲーですが;
>御津凪さん
あ、全国同時じゃないんですね。そちらは寒そうですね・・^^;
お蔭様で、次回作もやる気が出ています!
まぁ今やらないといけないのは卒業ですね^^;
こんな時間の無い時に風邪ひいたりしていますが・・。
ちゃんと入社式に出れるよう頑張りますw
>鳥さん
ありがとうございます^^ 書店なら大抵あると思いますw
龍神録の難易度はムリゲーですからねw
多分今やったらEXステージクリア出来n・・(ry
>ようすけさん
ありがとうございます☆
ただ星の数ほどフリーゲームのあるこの世の中、PC雑誌についてくるフリーゲームでわざわざ遊んでくれる人は
そこまで多くないようで、アンケート見ても、全体の0.7%位のようです^^;
お越し下さった方にはホント感謝申し上げますm(_ _)m
・・って、設定しないと、最初強制的に公式サイトにとばされるやらしい仕様ですが^^;
>tkmakwins15さん
ありがとうございます^^
何でもそうですが「コンスタントに続ける」って難しいことですよね。
HP更新とか、すごく派手じゃなくても、毎日コツコツ続けてる人とかホントすごいと思います。
ZUNさんとか、毎年必ずといっていいほど何かされてますしね。
私のように集中力にむらのある人間からすると尊敬します^^;
>situmonさん
ありがとうございます☆
ハードは東方で慣れててそうとう腕に自信がある人じゃないと無理仕様になっているので、難しいと思います^^;
現に今ノーコン、アイテム無しで越せる自信ありませんorz
>御津凪さん
おぉ!本当だ!!
なんだこれ・・。
わかんなかった^^;
き、、奇妙ですねw なんなんでしょうw
>Justyさん
ありがとうございます^^
いつもミニゲームばかり作ってた私が、少し規模を大きく出来たのはJustyさんのお力添えあってこそだと思っています!
恥ずかしい話ですが、ボンバーマンの試作動画上げた時、ほめて貰えたのが嬉しくてあのゲームは完成させることが出来ました^^;
何か一つでも完成できた事はすごくその後の制作に影響しましたm(_ _)m
しかしボンバーマンといい、ぷよぷよといい、ちゃんと公開出来るような仕様にしなかったのは
今思うとちと惜しい・・orz
1,124ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..ハッカー(286,215ポイント)
Date: 2008/12/15(月) 03:59
No:25683
|
|
Title: Re:■windows100%に龍神録が掲載されました■
|
|
>ボンバーマンの試作動画上げた時、ほめて貰えたのが嬉しくてあのゲームは完成させることが出来ました^^;
あの時は正直びっくりしたんですよ。
モノが実に細かくよく動いていたので。
かなり研究されたんだろうなぁ、と。
>何か一つでも完成できた事はすごくその後の制作に影響しました
あー、わかります。
私が社会人になって一番最初に参加したプロジェクトは終わるまでに1年ちょっと
かかったのですが、あのときの経験は今でもいろいろ(いい意味でも悪い意味でもww)影響を
受けています。
>しかしボンバーマンといい、ぷよぷよといい、ちゃんと公開出来るような仕様にしなかったのは
今思うとちと惜しい・
んー、たしかに。
埋もれさせるには惜しい……。
なんとかならないものですかねぇ。
327ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(925,314ポイント)
Date: 2008/12/15(月) 05:06
No:25685
|
|
Title: Re:■windows100%に龍神録が掲載されました■
|
|
探したらその時の動画ありました〜w
辺り今以上に青臭さ感じますw
>あのときの経験は今でもいろいろ(いい意味でも悪い意味でもww)影響を受けています。
なるほどw 大変だった思い出って結構重要だったりしますよね。
試行錯誤することや、苦労すること、非効率な経験をすることって無駄じゃないですよね。
人間って経験して学んでいくものですし。
あんまり大変すぎてトラウマになってもいけませんがw
2倍のポイントを手に入れた! 466ポイント を手に入れた。
|
|
|
|
|
Name: J ..上級者(15,943ポイント)
Date: 2008/12/15(月) 16:47
No:25709
|
|
Title: Re:■windows100%に龍神録が掲載されました■
|
|
お久しぶりです。
ついにwin100でも掲載されましたか。
おめでとうございます。
これで私の毎月購入している雑誌2つすべてに載ったことになります(笑
帰りにでも購入していくつもりです。
ついに"変態"伝説は奇妙な方向へ・・・(謎
105ポイント を落としてしまった。
|
|
|
|
|
Name: ムンバ ..上級者(17,073ポイント)
Date: 2008/12/15(月) 21:30
No:25726
|
|
Title: Re:■windows100%に龍神録が掲載されました■
|
|
こんばんは。お世話になります。
今日、仕事の帰りに買ってみようと思ってたのですが・・・
「水戸○門」見る事モードに入ってしまってたんで家路を急ぎ、すっかり忘れてしまいました。(泣
(搭載された事に関して、水戸○門以下とか、そういう事を言いたいのではありませんよ。)
ごめんなさい。早く見てみたいと思ってます。<_ _>
余計なお世話ですが、体調崩さない様に無事卒業できます様、お祈り申し上げます。
がんばって下さい、としか言えませんが「がんばって下さいっ!」w
これからもっと寒くなるので、寝不足はいかんです。^^
私事ですが、ちょっと私の様な勘違いな質問ばかりさせて頂いてる者には
今後、質問しにくくなるかな〜?などと思ったのですが
私もがんばって勉強して、また理解できない事などあれば遠慮なく質問させて頂きます。
その節は、宜しくお願い致します。
管理人さん!搭載おめでとうございますっ♪^^
PS:私にはレス無しで、早く寝て下さい!(笑
2倍のポイントを手に入れた! 592ポイント を手に入れた。
|
|
|
|
|