コラムス作ってみました(雑談板)

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
バグ

コラムス作ってみました(雑談板)

#1

投稿記事 by バグ » 17年前

以前作った、カラードロップのソースをかなり流用しまして、コラムスを作ってみました。
勿論、コンソールです。
見た目の印象を少しでも変えて、手抜きだと思われない為に敢えて色を変えてみました(笑)

管理人

Re:コラムス作ってみました(雑談板)

#2

投稿記事 by 管理人 » 17年前

バグさん、送っていただいたゲームですが、一瞬で終わってしまいます;
始まって0.1秒位で、終了画面になってしまいます;

おそらくすごいはやさでブロックが落ちているのではないでしょうか^^;

バグ

Re:コラムス作ってみました(雑談板)

#3

投稿記事 by バグ » 17年前

え?私の家では普通に動いているんですけど…?(^_^;)
うーん…カーソルキーの上が押しっぱなしになっていると一瞬でブロック落ちてゲームオーバーにはなるんですけど、そうではないですよね?

管理人

Re:コラムス作ってみました(雑談板)

#4

投稿記事 by 管理人 » 17年前

私の環境が悪いのでしょうか;

ゲーム始めるためにZボタン押しますよね?
そうするとどこも押さなくてもやはり一瞬でゲームオーバーになってしまいます;

そのまま公開してもいいですか?
公開して使ってもらってやっぱり私と同じような状況になるならやはりバグがあると言うことに・・。

どうします?

バグ

Re:コラムス作ってみました(雑談板)

#5

投稿記事 by バグ » 17年前

一度、管理人さんの環境でリビルドしてみてもらってもいいですか?
添付していたソースを全て空のコンソールアプリのプロジェクトに入れてもらえばビルドできるはずなので(^_^;)
その実行ファイルで同じ現象が起こるようならば、ソースを見直してみますんでm(__)m

管理人

Re:コラムス作ってみました(雑談板)

#6

投稿記事 by 管理人 » 17年前

ビルドしました。
やはり一瞬でおわります(T_T)

修正前のデータとか、完成品じゃないのを間違って送ってたりってことありません?

バグ

Re:コラムス作ってみました(雑談板)

#7

投稿記事 by バグ » 17年前

管理人さんに送ってから、手を入れてないので間違いないとは思うんですが…
ちょっと、ソースを見直してみますね。お手数おかけしましたm(__)m

管理人

Re:コラムス作ってみました(雑談板)

#8

投稿記事 by 管理人 » 17年前

手順でおかしいところがあればおしえてください。

実行

Simple Columns

最高得点00000
最大連鎖  0

の画面

Zボタン または エンターを押す

何か一瞬ものがすごいスピードで落ちるようなモーションが見え、

0.1秒後位に

終了

再挑戦(Y/N)

の画面

これが何度やっても延々とループされます^^;

バグ

Re:コラムス作ってみました(雑談板)

#9

投稿記事 by バグ » 17年前

手順は問題無さそうなんですけど…何が問題なんだろう…(;^_^A
MAIN.cppのmain関数のnWaitの初期値は3000になってますよね?
高速落下するということは、mSecTimerクラスがうまく機能してないっぽい感じがしてるんですが…原因不明です…(T_T)

管理人

Re:コラムス作ってみました(雑談板)

#10

投稿記事 by 管理人 » 17年前

初期値は3000になってます。


う~ん、とりあえず公開してみます?

もしかしたらどなたかバグ発見してくださるかも^^;

ほかの環境でも私のような状況になるかわかりませんし‥。

バグ

Re:コラムス作ってみました(雑談板)

#11

投稿記事 by バグ » 17年前

そうですね。お願いします(;^_^A

管理人

Re:コラムス作ってみました(雑談板)

#12

投稿記事 by 管理人 » 17年前

http://dixq.net/game.html

こちらからコラムスがダウンロード出来るようにしておきました。

おかしいとこあったら教えてください^^;

Justy

Re:コラムス作ってみました(雑談板)

#13

投稿記事 by Justy » 17年前

  管理人さんのところで巧く動かないのはこれが原因だったりしませんか?

http://support.microsoft.com/kb/327809/ja

管理人

Re:コラムス作ってみました(雑談板)

#14

投稿記事 by 管理人 » 17年前

こ、、こんな事あるんですか;

CPUはCore2DuoのE6700を使っています。

http://www.intel.co.jp/jp/products/proc ... ations.htm

2.66GHz x2

なので、2Ghz以上ってことになりますが、デュアルコアはあまり普及していないにしても、2Ghz以上のCPUはもうかなりのパソコンに普及しているんじゃないですか??

なるパソコンとならないパソコンの違いってなんなのでしょう・・・。

今大学にいるので、このパソコンでも試してみます。

管理人

Re:コラムス作ってみました(雑談板)

#15

投稿記事 by 管理人 » 17年前

大学のパソコンではうまくいきました;

CPU: Pentium 4 3.4GHz



あ~QueryPerformanceFrequencyってミリ秒以下の細かい測定が出来るあれですか!

周波数が高いから値が格納可能な31ビットの範囲の数値を超えてしまっているのが原因でしょうか。

管理人

Re:コラムス作ってみました(雑談板)

#16

投稿記事 by 管理人 » 17年前

・・・ということは、

QueryPerformanceFrequency( &Timer.Counter );

ここのCounterがlongなのが原因だとすると、ここをlonglong型にすると直るかも?

Justy

Re:コラムス作ってみました(雑談板)

#17

投稿記事 by Justy » 17年前

周波数が高いから値が格納可能な31ビットの範囲の数値を超えてしまっているのが原因でしょうか
 ではないかなぁ、と。

 32bit目が 1な場合、キャストしたときに負になってしまえば完全におかしくなるでしょうし、正のままだったとしても値は元のからするとかなり小さくなるので、やっぱり何かしらの影響があるかと思います。
 

管理人

Re:コラムス作ってみました(雑談板)

#18

投稿記事 by 管理人 » 17年前

struct	TIMER
{
	long	Start;				// 計測開始時のカウンタ
	long	End;				// 計測終了時のカウンタ
	long	Now;				// 現在のカウンタ
	long long	 Count;				// 1/1000秒間にカウントされた回数保持用
	LARGE_INTEGER	Counter;	// カウンタ管理用
};
では、このように変更して、家にかえってやってみます!

こんな簡単な事でいいんでしょうか?

Justy

Re:コラムス作ってみました(雑談板)

#19

投稿記事 by Justy » 17年前

こんな簡単な事でいいんでしょうか?
 どうでしょう。
 Start/End/Nowとかそれに絡む計算が longで行われているので、そのあたりも直さないといけないかもしれません。

管理人

Re:コラムス作ってみました(雑談板)

#20

投稿記事 by 管理人 » 17年前

そうですね。一度、バグさんにlong long型で検討してもらってみましょう><

バグ

Re:コラムス作ってみました(雑談板)

#21

投稿記事 by バグ » 17年前

ということは、管理人さんのPCがハイスペックだったが故に起きた不具合だった訳ですかぁ…なるほど(;^_^A

で、早速、longlong型への変換作業を行なってみたのですが、BCCはlonglong型がサポートされてないみたいで、コンパイルすら通りませんでしたよ…_| ̄|〇

明日、会社で使ってるVC++6.0の入っているノートを持って帰って、組み込んでみます(^-^)

管理人

Re:コラムス作ってみました(雑談板)

#22

投稿記事 by 管理人 » 17年前

おかしいですね・・大学のPCは3.4Ghzなのにそんなことおきませんでしたが・・。

理論的に2.1Ghz以上っていうだけであって実質の計算速度は理論値と同じにはならないでしょうから、そういう感じで大学のPCではバグが起きなかったんでしょうかね。

ムムム。バイト代貯めて生活費カツカツになりながら、夢のCPUでパソコン作ったもののそのせいでバグがおきるとは・・。

管理人

Re:コラムス作ってみました(雑談板)

#23

投稿記事 by 管理人 » 17年前

あ、バグさんlong long型はlong(スペース)longと入力しないとコンパイル通りませんが、そんな簡単なことじゃ・・・ないですよね^^;

初めてロングロングをつかったとき、スペースあけずに入力してコンパイル通らなかった覚えがあるので・・一応^^;

管理人

Re:コラムス作ってみました(雑談板)

#24

投稿記事 by 管理人 » 17年前

TIMER.h TIMER.cppのlongを全てlong longに変更したらうまくいきました^^

Justy

Re:コラムス作ってみました(雑談板)

#25

投稿記事 by Justy » 17年前

@管理人さん
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:コラムス作ってみました(雑談板)

#26

投稿記事 by 管理人 » 17年前

>longにキャストしたときどういう値になっているかを見てみると、はっきりするかと思います。

そうですね。longをlong longにしたら直ったってことは、値がオーバーしてしまっていたのでしょうね。
unsigned long longの方がいいかも?・・そこまでいらないか^^;

バグ

Re:コラムス作ってみました(雑談板)

#27

投稿記事 by バグ » 17年前

今回の件とは別にBCCでビルドした時に起こる不具合を2つも見つけてしまいましたよ(^_^;)
まず、CONSOLE.h内で定義している色に関する定数がconio.hの内部で定義されてある物と名前がかぶっていたようでして、コンパイルが通りません…

それから2つ目が、getch関数でキーボード入力を行っているのですが、カーソルキーの上下左右が押された時の戻り値がVC++を使用して作成した時と違うようでして、コンパイルは通りますが、ゲーム中でブロックの移動が出来ません…

カーソルキーを入力した時の戻り値は2回に分けて返ってくるのですが、VC++の時は1度目の戻り値が0xE0なのですが、BCCの場合は0x00になります。2度目の戻り値は同じだったので、MAIN.cpp内のInputKey関数内にあるswitch文のcase式を変更してやらなければいけませんでした。

環境の違いでこんなに色々と起こるとは…今回は本当に勉強になりましたよ(^_^;)

バグ

Re:コラムス作ってみました(雑談板)

#28

投稿記事 by バグ » 17年前

>>Justyさん
__int64型を試してみたところ、正常に動作しました(^-^)
あと、前記の不具合を修正することで、BCCへ移植できました。
環境が違うだけで、色々と細かい部分が違うものなんですねぇ…(^_^;)

バグ

Re:コラムス作ってみました(雑談板)

#29

投稿記事 by バグ » 17年前

>>管理人さん
あ!そういえば、COLOR-DROPも同じタイマーを使用しているので、同じような不具合を抱えている事になりますね…(;´Д`)
近い内に対応してVC++版とBCC版のソースを添付してメールさせてもらいますねm(__)m

管理人

Re:コラムス作ってみました(雑談板)

#30

投稿記事 by 管理人 » 17年前

あれ、カラードロップだとうまく動くんですが何故でしょう;

確かに思ったより早く落ちてくるので難しいなとは思ってたんですけど・・・ってそれは関係ないですねw

オーバーしていない限り正常な時間で落ちているはずか^^;

私の力ではあの速さ難しいですw

Justy

Re:コラムス作ってみました(雑談板)

#31

投稿記事 by Justy » 17年前

conio.hの内部で定義されてある物と名前がかぶっていたようでして
 あー、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:コラムス作ってみました(雑談板)

#32

投稿記事 by バグ » 17年前

うちの環境のVC++6.0ではlong long型が無いみたいです(T_T)
代わりにLONGLONG型というのが用意されていました。符号あり64bit整数型だそうです。ちなみに、符号なし64bit整数型は用意されてないようです(^_^;)
とりあえず、mSecTimerクラスの中身をLONGLONG型にしておきました。高速CPUにも対応できるはずです(苦笑)

GPGA

Re:コラムス作ってみました(雑談板)

#33

投稿記事 by GPGA » 17年前

VC環境で64bit型は__int64が標準だと思います。
以下のように使用できます。

符号あり)
__int64 a;

符号なし)
unsigned __int64 ua;

Justy

Re:コラムス作ってみました(雑談板)

#34

投稿記事 by Justy » 17年前

 まとめると

・ _MSC_VER >= 1200
__int64が使える

・ _MSC_VER >= 1310 且つ 言語拡張が有効
long long型が使える

・ __BORLANDC__ >= 0x561
long long型が使える

・ __BORLANDC__ >= 0x530 且つ bccの予約語が有効
__int64が使える

 ってところでしょうか。

バグ

Re:コラムス作ってみました(雑談板)

#35

投稿記事 by バグ » 17年前

結局__int64型を採用して、getch()の戻り値対策としてcase式を増やして、定数の名前を変更することで対応しました。これならば、VC++でもBCCでもコンパイルできるはずなので(^_^;)

ついでに、スピード重視のバージョン2を作ってみました。まだバランス調整中なので、『テストプレイしてやってもいいぜ!』という方がいましたら、連絡ください(^-^)

管理人

Re:コラムス作ってみました(雑談板)

#36

投稿記事 by 管理人 » 17年前

バグさん、送っていただいたコラムス修正版アップロードしておいたのですが、よかったですか?

まだ、あっぷしちゃいけなかったかな^^;
もしかして違うゲームとして扱ったほうがよかったのでしょうか?

私の環境ではうまくいきました^^
お邪魔ブロックが邪魔です(笑

バグ

Re:コラムス作ってみました(雑談板)

#37

投稿記事 by バグ » 17年前

『お邪魔ブロック』という位ですから、邪魔でなければ困ります(笑)

それはさておき…

Dixqさんに送ったバージョン2でバグがみつかりました(^_^;)
時々ブロックが空中停止するんですよ。これはこれで面白いから放っておこうかとも思った(笑)んですが、すぐに原因が分かったので直しておく事にしました。あと、バランスの微調整もしてみたので、これから送るものを完成版として扱っていただけたら…と思います。

今回のバージョン2は3つ並べたら消えるという部分は同じですが、スピードだけが求められるゲーム性は、通常のコラムスからはかなり掛け離れてきていますので、タイトルを変更しようかと思っています。

それにコラムスというタイトルもヤバイかもしれないので、変えた方がいいですよね…(苦笑)
ただ全然、良いタイトル名が思いつかないんで、とりあえずColorDrop2という事でお願いします。

旧バージョンのスペースに掲載していただいて構いませんので、旧バージョンは無かった事にしてください(笑)

管理人

Re:コラムス作ってみました(雑談板)

#38

投稿記事 by 管理人 » 17年前

COLOR-DROP2のページ作りました^^
内容あってるか、あれでよいか確認してもらえますか?

http://dixq.net/game.html

ウィンドウが小さいとプレイしにくいと思うので、画面を大きくする方法も紹介しておきました^^

バグ

Re:コラムス作ってみました(雑談板)

#39

投稿記事 by バグ » 17年前

おぉ~!キレイに紹介していただいて、有難うございます(^-^)

今回のカラドロ2は全10ステージと書いてありますが、作者の私も9面めでが限界で、全クリアはできてません。

10面クリアした方は、是非報告してほしいです(^_^;)

閉鎖

“C言語何でも質問掲示板” へ戻る