コラムス作ってみました(雑談板)
コラムス作ってみました(雑談板)
以前作った、カラードロップのソースをかなり流用しまして、コラムスを作ってみました。
勿論、コンソールです。
見た目の印象を少しでも変えて、手抜きだと思われない為に敢えて色を変えてみました(笑)
勿論、コンソールです。
見た目の印象を少しでも変えて、手抜きだと思われない為に敢えて色を変えてみました(笑)
Re:コラムス作ってみました(雑談板)
バグさん、送っていただいたゲームですが、一瞬で終わってしまいます;
始まって0.1秒位で、終了画面になってしまいます;
おそらくすごいはやさでブロックが落ちているのではないでしょうか^^;
始まって0.1秒位で、終了画面になってしまいます;
おそらくすごいはやさでブロックが落ちているのではないでしょうか^^;
Re:コラムス作ってみました(雑談板)
え?私の家では普通に動いているんですけど…?(^_^;)
うーん…カーソルキーの上が押しっぱなしになっていると一瞬でブロック落ちてゲームオーバーにはなるんですけど、そうではないですよね?
うーん…カーソルキーの上が押しっぱなしになっていると一瞬でブロック落ちてゲームオーバーにはなるんですけど、そうではないですよね?
Re:コラムス作ってみました(雑談板)
私の環境が悪いのでしょうか;
ゲーム始めるためにZボタン押しますよね?
そうするとどこも押さなくてもやはり一瞬でゲームオーバーになってしまいます;
そのまま公開してもいいですか?
公開して使ってもらってやっぱり私と同じような状況になるならやはりバグがあると言うことに・・。
どうします?
ゲーム始めるためにZボタン押しますよね?
そうするとどこも押さなくてもやはり一瞬でゲームオーバーになってしまいます;
そのまま公開してもいいですか?
公開して使ってもらってやっぱり私と同じような状況になるならやはりバグがあると言うことに・・。
どうします?
Re:コラムス作ってみました(雑談板)
一度、管理人さんの環境でリビルドしてみてもらってもいいですか?
添付していたソースを全て空のコンソールアプリのプロジェクトに入れてもらえばビルドできるはずなので(^_^;)
その実行ファイルで同じ現象が起こるようならば、ソースを見直してみますんでm(__)m
添付していたソースを全て空のコンソールアプリのプロジェクトに入れてもらえばビルドできるはずなので(^_^;)
その実行ファイルで同じ現象が起こるようならば、ソースを見直してみますんでm(__)m
Re:コラムス作ってみました(雑談板)
管理人さんに送ってから、手を入れてないので間違いないとは思うんですが…
ちょっと、ソースを見直してみますね。お手数おかけしましたm(__)m
ちょっと、ソースを見直してみますね。お手数おかけしましたm(__)m
Re:コラムス作ってみました(雑談板)
手順でおかしいところがあればおしえてください。
実行
↓
Simple Columns
最高得点00000
最大連鎖 0
の画面
↓
Zボタン または エンターを押す
↓
何か一瞬ものがすごいスピードで落ちるようなモーションが見え、
↓
0.1秒後位に
↓
終了
再挑戦(Y/N)
の画面
これが何度やっても延々とループされます^^;
実行
↓
Simple Columns
最高得点00000
最大連鎖 0
の画面
↓
Zボタン または エンターを押す
↓
何か一瞬ものがすごいスピードで落ちるようなモーションが見え、
↓
0.1秒後位に
↓
終了
再挑戦(Y/N)
の画面
これが何度やっても延々とループされます^^;
Re:コラムス作ってみました(雑談板)
手順は問題無さそうなんですけど…何が問題なんだろう…(;^_^A
MAIN.cppのmain関数のnWaitの初期値は3000になってますよね?
高速落下するということは、mSecTimerクラスがうまく機能してないっぽい感じがしてるんですが…原因不明です…(T_T)
MAIN.cppのmain関数のnWaitの初期値は3000になってますよね?
高速落下するということは、mSecTimerクラスがうまく機能してないっぽい感じがしてるんですが…原因不明です…(T_T)
Re:コラムス作ってみました(雑談板)
初期値は3000になってます。
う~ん、とりあえず公開してみます?
もしかしたらどなたかバグ発見してくださるかも^^;
ほかの環境でも私のような状況になるかわかりませんし‥。
う~ん、とりあえず公開してみます?
もしかしたらどなたかバグ発見してくださるかも^^;
ほかの環境でも私のような状況になるかわかりませんし‥。
Re:コラムス作ってみました(雑談板)
こ、、こんな事あるんですか;
CPUはCore2DuoのE6700を使っています。
http://www.intel.co.jp/jp/products/proc ... ations.htm
2.66GHz x2
なので、2Ghz以上ってことになりますが、デュアルコアはあまり普及していないにしても、2Ghz以上のCPUはもうかなりのパソコンに普及しているんじゃないですか??
なるパソコンとならないパソコンの違いってなんなのでしょう・・・。
今大学にいるので、このパソコンでも試してみます。
CPUはCore2DuoのE6700を使っています。
http://www.intel.co.jp/jp/products/proc ... ations.htm
2.66GHz x2
なので、2Ghz以上ってことになりますが、デュアルコアはあまり普及していないにしても、2Ghz以上のCPUはもうかなりのパソコンに普及しているんじゃないですか??
なるパソコンとならないパソコンの違いってなんなのでしょう・・・。
今大学にいるので、このパソコンでも試してみます。
Re:コラムス作ってみました(雑談板)
大学のパソコンではうまくいきました;
CPU: Pentium 4 3.4GHz
あ~QueryPerformanceFrequencyってミリ秒以下の細かい測定が出来るあれですか!
周波数が高いから値が格納可能な31ビットの範囲の数値を超えてしまっているのが原因でしょうか。
CPU: Pentium 4 3.4GHz
あ~QueryPerformanceFrequencyってミリ秒以下の細かい測定が出来るあれですか!
周波数が高いから値が格納可能な31ビットの範囲の数値を超えてしまっているのが原因でしょうか。
Re:コラムス作ってみました(雑談板)
・・・ということは、
QueryPerformanceFrequency( &Timer.Counter );
ここのCounterがlongなのが原因だとすると、ここをlonglong型にすると直るかも?
QueryPerformanceFrequency( &Timer.Counter );
ここのCounterがlongなのが原因だとすると、ここをlonglong型にすると直るかも?
Re:コラムス作ってみました(雑談板)
>周波数が高いから値が格納可能な31ビットの範囲の数値を超えてしまっているのが原因でしょうか
ではないかなぁ、と。
32bit目が 1な場合、キャストしたときに負になってしまえば完全におかしくなるでしょうし、正のままだったとしても値は元のからするとかなり小さくなるので、やっぱり何かしらの影響があるかと思います。
ではないかなぁ、と。
32bit目が 1な場合、キャストしたときに負になってしまえば完全におかしくなるでしょうし、正のままだったとしても値は元のからするとかなり小さくなるので、やっぱり何かしらの影響があるかと思います。
Re:コラムス作ってみました(雑談板)
struct TIMER { long Start; // 計測開始時のカウンタ long End; // 計測終了時のカウンタ long Now; // 現在のカウンタ long long Count; // 1/1000秒間にカウントされた回数保持用 LARGE_INTEGER Counter; // カウンタ管理用 };では、このように変更して、家にかえってやってみます!
こんな簡単な事でいいんでしょうか?
Re:コラムス作ってみました(雑談板)
>こんな簡単な事でいいんでしょうか?
どうでしょう。
Start/End/Nowとかそれに絡む計算が longで行われているので、そのあたりも直さないといけないかもしれません。
どうでしょう。
Start/End/Nowとかそれに絡む計算が longで行われているので、そのあたりも直さないといけないかもしれません。
Re:コラムス作ってみました(雑談板)
ということは、管理人さんのPCがハイスペックだったが故に起きた不具合だった訳ですかぁ…なるほど(;^_^A
で、早速、longlong型への変換作業を行なってみたのですが、BCCはlonglong型がサポートされてないみたいで、コンパイルすら通りませんでしたよ…_| ̄|〇
明日、会社で使ってるVC++6.0の入っているノートを持って帰って、組み込んでみます(^-^)
で、早速、longlong型への変換作業を行なってみたのですが、BCCはlonglong型がサポートされてないみたいで、コンパイルすら通りませんでしたよ…_| ̄|〇
明日、会社で使ってるVC++6.0の入っているノートを持って帰って、組み込んでみます(^-^)
Re:コラムス作ってみました(雑談板)
おかしいですね・・大学のPCは3.4Ghzなのにそんなことおきませんでしたが・・。
理論的に2.1Ghz以上っていうだけであって実質の計算速度は理論値と同じにはならないでしょうから、そういう感じで大学のPCではバグが起きなかったんでしょうかね。
ムムム。バイト代貯めて生活費カツカツになりながら、夢のCPUでパソコン作ったもののそのせいでバグがおきるとは・・。
理論的に2.1Ghz以上っていうだけであって実質の計算速度は理論値と同じにはならないでしょうから、そういう感じで大学のPCではバグが起きなかったんでしょうかね。
ムムム。バイト代貯めて生活費カツカツになりながら、夢のCPUでパソコン作ったもののそのせいでバグがおきるとは・・。
Re:コラムス作ってみました(雑談板)
あ、バグさんlong long型はlong(スペース)longと入力しないとコンパイル通りませんが、そんな簡単なことじゃ・・・ないですよね^^;
初めてロングロングをつかったとき、スペースあけずに入力してコンパイル通らなかった覚えがあるので・・一応^^;
初めてロングロングをつかったとき、スペースあけずに入力してコンパイル通らなかった覚えがあるので・・一応^^;
Re:コラムス作ってみました(雑談板)
@管理人さん
>TIMER.h TIMER.cppのlongを全てlong longに変更したらうまくいきました
やはりこのあたりが原因でしたか。
>大学のPCは3.4Ghzなのにそんなことおきませんでしたが
キャストした結果がオリジナルの値とどれだけ異なるか、そしてキャストした結果負になるかどうか、負になっても問題のないコードになっているかが分かれ道になります。
こちらの環境では正常に動作いしているように見えるのでテストできないのですが、管理人さんのところで QueryPerformanceFrequency() / QueryPerformanceCounter()実行時、Timer.Counterに入った値が 64bit値としてみたときどういう値になっているか、longにキャストしたときどういう値になっているかを見てみると、はっきりするかと思います。
@バグさん
>BCCはlonglong型がサポートされてないみたいで
ボーランドって long longはなかったでしたっけ?
と、boostを確認してみたところ
#if __BORLANDC__ >= 0x561
#endif
この中を通過するならあるようです。
最新の BCCなら通過すると思いますが、ひょっとするとフリー版は通過しないかもしれませんね。
だとすると確認したことはないのですが Borlandの環境 ONLYで __int64という型が使えるかもしれません
ダメなら double型にしてしまってはどうでしょう。
>TIMER.h TIMER.cppのlongを全てlong longに変更したらうまくいきました
やはりこのあたりが原因でしたか。
>大学のPCは3.4Ghzなのにそんなことおきませんでしたが
キャストした結果がオリジナルの値とどれだけ異なるか、そしてキャストした結果負になるかどうか、負になっても問題のないコードになっているかが分かれ道になります。
こちらの環境では正常に動作いしているように見えるのでテストできないのですが、管理人さんのところで QueryPerformanceFrequency() / QueryPerformanceCounter()実行時、Timer.Counterに入った値が 64bit値としてみたときどういう値になっているか、longにキャストしたときどういう値になっているかを見てみると、はっきりするかと思います。
@バグさん
>BCCはlonglong型がサポートされてないみたいで
ボーランドって long longはなかったでしたっけ?
と、boostを確認してみたところ
#if __BORLANDC__ >= 0x561
#endif
この中を通過するならあるようです。
最新の BCCなら通過すると思いますが、ひょっとするとフリー版は通過しないかもしれませんね。
だとすると確認したことはないのですが Borlandの環境 ONLYで __int64という型が使えるかもしれません
[color=#d0d0ff" face="monospace] // サンプル
__int64 i ;
i = 1i64 << 50;
printf("%Ld\n", i); [/color]
確証はないですが。ダメなら double型にしてしまってはどうでしょう。
Re:コラムス作ってみました(雑談板)
>longにキャストしたときどういう値になっているかを見てみると、はっきりするかと思います。
そうですね。longをlong longにしたら直ったってことは、値がオーバーしてしまっていたのでしょうね。
unsigned long longの方がいいかも?・・そこまでいらないか^^;
そうですね。longをlong longにしたら直ったってことは、値がオーバーしてしまっていたのでしょうね。
unsigned long longの方がいいかも?・・そこまでいらないか^^;
Re:コラムス作ってみました(雑談板)
今回の件とは別にBCCでビルドした時に起こる不具合を2つも見つけてしまいましたよ(^_^;)
まず、CONSOLE.h内で定義している色に関する定数がconio.hの内部で定義されてある物と名前がかぶっていたようでして、コンパイルが通りません…
それから2つ目が、getch関数でキーボード入力を行っているのですが、カーソルキーの上下左右が押された時の戻り値がVC++を使用して作成した時と違うようでして、コンパイルは通りますが、ゲーム中でブロックの移動が出来ません…
カーソルキーを入力した時の戻り値は2回に分けて返ってくるのですが、VC++の時は1度目の戻り値が0xE0なのですが、BCCの場合は0x00になります。2度目の戻り値は同じだったので、MAIN.cpp内のInputKey関数内にあるswitch文のcase式を変更してやらなければいけませんでした。
環境の違いでこんなに色々と起こるとは…今回は本当に勉強になりましたよ(^_^;)
まず、CONSOLE.h内で定義している色に関する定数がconio.hの内部で定義されてある物と名前がかぶっていたようでして、コンパイルが通りません…
それから2つ目が、getch関数でキーボード入力を行っているのですが、カーソルキーの上下左右が押された時の戻り値がVC++を使用して作成した時と違うようでして、コンパイルは通りますが、ゲーム中でブロックの移動が出来ません…
カーソルキーを入力した時の戻り値は2回に分けて返ってくるのですが、VC++の時は1度目の戻り値が0xE0なのですが、BCCの場合は0x00になります。2度目の戻り値は同じだったので、MAIN.cpp内のInputKey関数内にあるswitch文のcase式を変更してやらなければいけませんでした。
環境の違いでこんなに色々と起こるとは…今回は本当に勉強になりましたよ(^_^;)
Re:コラムス作ってみました(雑談板)
>>Justyさん
__int64型を試してみたところ、正常に動作しました(^-^)
あと、前記の不具合を修正することで、BCCへ移植できました。
環境が違うだけで、色々と細かい部分が違うものなんですねぇ…(^_^;)
__int64型を試してみたところ、正常に動作しました(^-^)
あと、前記の不具合を修正することで、BCCへ移植できました。
環境が違うだけで、色々と細かい部分が違うものなんですねぇ…(^_^;)
Re:コラムス作ってみました(雑談板)
>>管理人さん
あ!そういえば、COLOR-DROPも同じタイマーを使用しているので、同じような不具合を抱えている事になりますね…(;´Д`)
近い内に対応してVC++版とBCC版のソースを添付してメールさせてもらいますねm(__)m
あ!そういえば、COLOR-DROPも同じタイマーを使用しているので、同じような不具合を抱えている事になりますね…(;´Д`)
近い内に対応してVC++版とBCC版のソースを添付してメールさせてもらいますねm(__)m
Re:コラムス作ってみました(雑談板)
あれ、カラードロップだとうまく動くんですが何故でしょう;
確かに思ったより早く落ちてくるので難しいなとは思ってたんですけど・・・ってそれは関係ないですねw
オーバーしていない限り正常な時間で落ちているはずか^^;
私の力ではあの速さ難しいですw
確かに思ったより早く落ちてくるので難しいなとは思ってたんですけど・・・ってそれは関係ないですねw
オーバーしていない限り正常な時間で落ちているはずか^^;
私の力ではあの速さ難しいですw
Re:コラムス作ってみました(雑談板)
>conio.hの内部で定義されてある物と名前がかぶっていたようでして
あー、Borlandの conio.hには最初からテキスト画面処理関数が入っているんですね。
>カーソルキーを入力した時の戻り値
getch()は戻り値は実装依存だから、ってところですかね。
ただ MSの方も
http://support.microsoft.com/default.as ... b;ja;57888
のように拡張文字を読み出す場合についてはこう書いてますから、こうしておけばどっちでも動くかもしれません。
>C++版とBCC版のソースを添付
幸い、MSVCと BCCは事前定義マクロでコンパイラの判別もできますから、差異を吸収する為のコンパイラコンフィグ用のヘッダを作ったり、ライブラリを作っておくとソースを2つも用意しなくても済むと思います。
今回のケースですと例えばコンフィグヘッダの構成を
config/config.hは事前定義マクロを判別して config/compile_config/msvc.hか config/compile_config/bcc.hのどちらかだけをインクルードします。
で、後は msvc.hと bcc.hに 64bit整数の型の定義とかをすれば、 MSVC/BCCどちらの環境でもコンパイルできるようになるはずです。
それに今後環境が増えたとしても拡張しやすいのではないでしょうか。
あー、Borlandの conio.hには最初からテキスト画面処理関数が入っているんですね。
>カーソルキーを入力した時の戻り値
getch()は戻り値は実装依存だから、ってところですかね。
ただ MSの方も
http://support.microsoft.com/default.as ... b;ja;57888
のように拡張文字を読み出す場合についてはこう書いてますから、こうしておけばどっちでも動くかもしれません。
>C++版とBCC版のソースを添付
幸い、MSVCと BCCは事前定義マクロでコンパイラの判別もできますから、差異を吸収する為のコンパイラコンフィグ用のヘッダを作ったり、ライブラリを作っておくとソースを2つも用意しなくても済むと思います。
今回のケースですと例えばコンフィグヘッダの構成を
[color=#d0d0ff" face="monospace]+ config
+ compile_config
msvc.h
bcc.h
compile_config.h
config.h
CONSOLE.h
CONSOLE.cpp
MAIN.cpp[/color]
のようにしておいて、ユーザは config/config.hだけをインクルードします。config/config.hは事前定義マクロを判別して config/compile_config/msvc.hか config/compile_config/bcc.hのどちらかだけをインクルードします。
で、後は msvc.hと bcc.hに 64bit整数の型の定義とかをすれば、 MSVC/BCCどちらの環境でもコンパイルできるようになるはずです。
それに今後環境が増えたとしても拡張しやすいのではないでしょうか。
Re:コラムス作ってみました(雑談板)
うちの環境のVC++6.0ではlong long型が無いみたいです(T_T)
代わりにLONGLONG型というのが用意されていました。符号あり64bit整数型だそうです。ちなみに、符号なし64bit整数型は用意されてないようです(^_^;)
とりあえず、mSecTimerクラスの中身をLONGLONG型にしておきました。高速CPUにも対応できるはずです(苦笑)
代わりにLONGLONG型というのが用意されていました。符号あり64bit整数型だそうです。ちなみに、符号なし64bit整数型は用意されてないようです(^_^;)
とりあえず、mSecTimerクラスの中身をLONGLONG型にしておきました。高速CPUにも対応できるはずです(苦笑)
Re:コラムス作ってみました(雑談板)
VC環境で64bit型は__int64が標準だと思います。
以下のように使用できます。
符号あり)
__int64 a;
符号なし)
unsigned __int64 ua;
以下のように使用できます。
符号あり)
__int64 a;
符号なし)
unsigned __int64 ua;
Re:コラムス作ってみました(雑談板)
まとめると
・ _MSC_VER >= 1200
__int64が使える
・ _MSC_VER >= 1310 且つ 言語拡張が有効
long long型が使える
・ __BORLANDC__ >= 0x561
long long型が使える
・ __BORLANDC__ >= 0x530 且つ bccの予約語が有効
__int64が使える
ってところでしょうか。
・ _MSC_VER >= 1200
__int64が使える
・ _MSC_VER >= 1310 且つ 言語拡張が有効
long long型が使える
・ __BORLANDC__ >= 0x561
long long型が使える
・ __BORLANDC__ >= 0x530 且つ bccの予約語が有効
__int64が使える
ってところでしょうか。
Re:コラムス作ってみました(雑談板)
結局__int64型を採用して、getch()の戻り値対策としてcase式を増やして、定数の名前を変更することで対応しました。これならば、VC++でもBCCでもコンパイルできるはずなので(^_^;)
ついでに、スピード重視のバージョン2を作ってみました。まだバランス調整中なので、『テストプレイしてやってもいいぜ!』という方がいましたら、連絡ください(^-^)
ついでに、スピード重視のバージョン2を作ってみました。まだバランス調整中なので、『テストプレイしてやってもいいぜ!』という方がいましたら、連絡ください(^-^)
Re:コラムス作ってみました(雑談板)
バグさん、送っていただいたコラムス修正版アップロードしておいたのですが、よかったですか?
まだ、あっぷしちゃいけなかったかな^^;
もしかして違うゲームとして扱ったほうがよかったのでしょうか?
私の環境ではうまくいきました^^
お邪魔ブロックが邪魔です(笑
まだ、あっぷしちゃいけなかったかな^^;
もしかして違うゲームとして扱ったほうがよかったのでしょうか?
私の環境ではうまくいきました^^
お邪魔ブロックが邪魔です(笑
Re:コラムス作ってみました(雑談板)
『お邪魔ブロック』という位ですから、邪魔でなければ困ります(笑)
それはさておき…
Dixqさんに送ったバージョン2でバグがみつかりました(^_^;)
時々ブロックが空中停止するんですよ。これはこれで面白いから放っておこうかとも思った(笑)んですが、すぐに原因が分かったので直しておく事にしました。あと、バランスの微調整もしてみたので、これから送るものを完成版として扱っていただけたら…と思います。
今回のバージョン2は3つ並べたら消えるという部分は同じですが、スピードだけが求められるゲーム性は、通常のコラムスからはかなり掛け離れてきていますので、タイトルを変更しようかと思っています。
それにコラムスというタイトルもヤバイかもしれないので、変えた方がいいですよね…(苦笑)
ただ全然、良いタイトル名が思いつかないんで、とりあえずColorDrop2という事でお願いします。
旧バージョンのスペースに掲載していただいて構いませんので、旧バージョンは無かった事にしてください(笑)
それはさておき…
Dixqさんに送ったバージョン2でバグがみつかりました(^_^;)
時々ブロックが空中停止するんですよ。これはこれで面白いから放っておこうかとも思った(笑)んですが、すぐに原因が分かったので直しておく事にしました。あと、バランスの微調整もしてみたので、これから送るものを完成版として扱っていただけたら…と思います。
今回のバージョン2は3つ並べたら消えるという部分は同じですが、スピードだけが求められるゲーム性は、通常のコラムスからはかなり掛け離れてきていますので、タイトルを変更しようかと思っています。
それにコラムスというタイトルもヤバイかもしれないので、変えた方がいいですよね…(苦笑)
ただ全然、良いタイトル名が思いつかないんで、とりあえずColorDrop2という事でお願いします。
旧バージョンのスペースに掲載していただいて構いませんので、旧バージョンは無かった事にしてください(笑)
Re:コラムス作ってみました(雑談板)
COLOR-DROP2のページ作りました^^
内容あってるか、あれでよいか確認してもらえますか?
http://dixq.net/game.html
ウィンドウが小さいとプレイしにくいと思うので、画面を大きくする方法も紹介しておきました^^
内容あってるか、あれでよいか確認してもらえますか?
http://dixq.net/game.html
ウィンドウが小さいとプレイしにくいと思うので、画面を大きくする方法も紹介しておきました^^
Re:コラムス作ってみました(雑談板)
おぉ~!キレイに紹介していただいて、有難うございます(^-^)
今回のカラドロ2は全10ステージと書いてありますが、作者の私も9面めでが限界で、全クリアはできてません。
10面クリアした方は、是非報告してほしいです(^_^;)
今回のカラドロ2は全10ステージと書いてありますが、作者の私も9面めでが限界で、全クリアはできてません。
10面クリアした方は、是非報告してほしいです(^_^;)