初めて作ったシンプルな自作ゲーム
Re:「雑談トピ」Dixqさんへ質問
http://down11.ddo.jp/uploader/download/ ... %87%BA.zipに
アップさせていただきましたPASSはhiyokoです。
あまりにシンプルに作ったのでそんなに期待しないほうがいいと思います。
アップさせていただきましたPASSはhiyokoです。
あまりにシンプルに作ったのでそんなに期待しないほうがいいと思います。
Re:「雑談トピ」Dixqさんへ質問
シンプルです。とてもシンプルです。
が、もう少しゲーム性を追加したほうが良いかと。。
追加してほしいなっと思うものを挙げてみます。
・長押しに対応(毎度キーを押すのは大変)
・スコア(ゴールまでの時間とか、経路とかで)
・ゲーム中に終了できるようにする
・いけない箇所を作る。
・到達地点を一定の出現場所ではなく、ランダムにする。
こんな感じですかね^^;
スコアでは経路がなかなか凝った感じがします。
最短距離を求めて、オーバーした分だけ減点。
何歩以上かオーバーしたらゲームオーバーとかでもいいですね。
が、もう少しゲーム性を追加したほうが良いかと。。
追加してほしいなっと思うものを挙げてみます。
・長押しに対応(毎度キーを押すのは大変)
・スコア(ゴールまでの時間とか、経路とかで)
・ゲーム中に終了できるようにする
・いけない箇所を作る。
・到達地点を一定の出現場所ではなく、ランダムにする。
こんな感じですかね^^;
スコアでは経路がなかなか凝った感じがします。
最短距離を求めて、オーバーした分だけ減点。
何歩以上かオーバーしたらゲームオーバーとかでもいいですね。
Re:「雑談トピ」Dixqさんへ質問
まさにシンプル イズ ベストですね。
乱数を使って相手の出る位置をランダムにしたらもっと良くなるかも?
ループを使えばもっと良くなるかも?
と言う初心者の感想ですw
乱数を使って相手の出る位置をランダムにしたらもっと良くなるかも?
ループを使えばもっと良くなるかも?
と言う初心者の感想ですw
Re:「雑談トピ」Dixqさんへ質問
加えて途中から偽者出現とかあるとゲーム性がUPするかも?
画像を使って少しだけ違う本物と偽者を用意して、
面?が進む毎に増える偽者、迫るリミットタイム!?
とかどうでしょう。
画像を使って少しだけ違う本物と偽者を用意して、
面?が進む毎に増える偽者、迫るリミットタイム!?
とかどうでしょう。
Re:「雑談トピ」Dixqさんへ質問
ひよこさん
余計なお世話かもしれませんが、枠のDrawLineの整理のついでに乱数を使うようにしたんですが、
改変部分だけアップしましょうか?
余計なお世話かもしれませんが、枠のDrawLineの整理のついでに乱数を使うようにしたんですが、
改変部分だけアップしましょうか?
Re:「雑談トピ」Dixqさんへ質問
さすがにおやすみのようなので本来の用件だけ
Danjon関数内でDrawLine文の羅列がありますが、X(Y)が一定間隔で増加してますよね。
その場合、for文を使うと便利です。
乱数はそんなに難しくないですよ。
今回の場合、横20マス、縦16マスとして考えればいいんです。
この値に一マスの大きさを掛ければ表示したい座標が求まります。
なので
最後に長押し対応は%をうまく使ってやればできると思いますので頑張ってください。
Danjon関数内でDrawLine文の羅列がありますが、X(Y)が一定間隔で増加してますよね。
その場合、for文を使うと便利です。
int I = 0; for ( I = 0; I < 608; I += 32 ) { DrawLine ( I, 0, I, 480, GetColor ( 255, 255, 255 ) ); }或いは
int I = 0; for ( I = 0; I < 20; ++ I ) { DrawLine ( I *32, 0, I *32, 480, GetColor ( 255, 255, 255 ) ); }このどちらかで19本の縦線が引けます。横線も同じ要領で出来ます。
乱数はそんなに難しくないですよ。
今回の場合、横20マス、縦16マスとして考えればいいんです。
rand ()%20で0~19までの値ができます。
この値に一マスの大きさを掛ければ表示したい座標が求まります。
なので
( rand () %20 )*32と書いてやればOkです。
最後に長押し対応は%をうまく使ってやればできると思いますので頑張ってください。
Re:「雑談トピ」Dixqさんへ質問
プレイさせて頂きました。ありがとうございます。
う~んと、せっかくでしたらもう少し作りこんでから掲載してみませんか?
「どっかにいく」じゃなくてある規則で追うと相手をある程度追いやれるとか何かもう少しゲーム性が欲しい気がします。
また途中でエスケープを押せばいつでも脱出成功になるのもちょっと気になったり・・。
また、画像や効果音を用意するとグッとクオリティアップすると思います。
う~んと、せっかくでしたらもう少し作りこんでから掲載してみませんか?
「どっかにいく」じゃなくてある規則で追うと相手をある程度追いやれるとか何かもう少しゲーム性が欲しい気がします。
また途中でエスケープを押せばいつでも脱出成功になるのもちょっと気になったり・・。
また、画像や効果音を用意するとグッとクオリティアップすると思います。
Re:「雑談トピ」Dixqさんへ質問
こんにちは、返事遅くなりました。
いろいろありがとうございました。いろいろ参考になりました。
木霊さん>ありがたく乱数について使わせてもらいます。
Dixqさん>今回はあくまでシンプルに作ってみたので、
次回は効果音用意しておきます。
いろいろありがとうございました。いろいろ参考になりました。
木霊さん>ありがたく乱数について使わせてもらいます。
Dixqさん>今回はあくまでシンプルに作ってみたので、
次回は効果音用意しておきます。
Re:「雑談トピ」Dixqさんへ質問
2代目作ってきました。
http://down11.ddo.jp/uploader/download/ ... %BC%92.zipにアップさせてもらいました。PASSはhiyokoです。
http://down11.ddo.jp/uploader/download/ ... %BC%92.zipにアップさせてもらいました。PASSはhiyokoです。
Re:「雑談トピ」Dixqさんへ質問
初見で
104秒
スコア9531でしたw
右腕つるかと思いましたw
気づいた点?↓
偽者と本物が重なることがありました。
偽者に重なってる間音がずっとなってました。
別に修正しなくてもいいようなことですがw
104秒
スコア9531でしたw
右腕つるかと思いましたw
気づいた点?↓
偽者と本物が重なることがありました。
偽者に重なってる間音がずっとなってました。
別に修正しなくてもいいようなことですがw
Re:「雑談トピ」Dixqさんへ質問
早速プレイしていただきありがとうございます。
脱出の人104秒 スコア9531でしたw >すごくないですか。偽者なくてもそんなに早くできなかったです。
脱出の人104秒 スコア9531でしたw >すごくないですか。偽者なくてもそんなに早くできなかったです。
Re:「雑談トピ」Dixqさんへ質問
おぁ、疲れた。。w
ゲーム性は向上していますが、もう一歩です。
不具合について
・キー入力がおかしい。
っというのも、長押しに対応しているようで、うまくしていません。
4つ(?)ぐらいにしか一気に進みません。
また、一度押したつもりが、ループ毎にインクリメントしているせいか、
一気に進んでしまいます。一度押したら一マス、数十ループで長押し状態にし、一気に移動
っとしたほうが操作しやすいです。
あとはプレーヤー希望です。
・スコアの描写ですが、もろにステージ画面とかぶっています。
ここもステージとスコア描写は分けたほうがよいかと。
・100ステージは結構面倒ですw
もう少し減らすか、レベル別に難易度を変えるとかのが良いかも知れません。
例えば、一気にすべてではなくて、レベルごとに回答を減らすとかですかね。
神経衰弱みたいになってしまいますがw
エンディングが付き、効果音もついたことで、一気にゲーム性が付きました。
この調子で、コンティニュー機能や、一時停止機能など、もっともっとゲーム性を
自分なりにつけていってください^^
難易度が次の目標ですかね^^
ゲーム性は向上していますが、もう一歩です。
不具合について
・キー入力がおかしい。
っというのも、長押しに対応しているようで、うまくしていません。
4つ(?)ぐらいにしか一気に進みません。
また、一度押したつもりが、ループ毎にインクリメントしているせいか、
一気に進んでしまいます。一度押したら一マス、数十ループで長押し状態にし、一気に移動
っとしたほうが操作しやすいです。
あとはプレーヤー希望です。
・スコアの描写ですが、もろにステージ画面とかぶっています。
ここもステージとスコア描写は分けたほうがよいかと。
・100ステージは結構面倒ですw
もう少し減らすか、レベル別に難易度を変えるとかのが良いかも知れません。
例えば、一気にすべてではなくて、レベルごとに回答を減らすとかですかね。
神経衰弱みたいになってしまいますがw
エンディングが付き、効果音もついたことで、一気にゲーム性が付きました。
この調子で、コンティニュー機能や、一時停止機能など、もっともっとゲーム性を
自分なりにつけていってください^^
難易度が次の目標ですかね^^
Re:「雑談トピ」Dixqさんへ質問
お疲れ様です。
初回
タイム 191
スコア 883 でした。
残り55階くらいになるまで色の違いに気が付きませんでしたw
自分で言い出しておいてなんという… orz
不具合っぽいので気が付いたのは、
他の方が既に出しているような事ですね。
近場に出現してコンボが決まると気持ちよかったので、
今後はその辺りの演出を攻めてみたらどうかな。
初回
タイム 191
スコア 883 でした。
残り55階くらいになるまで色の違いに気が付きませんでしたw
自分で言い出しておいてなんという… orz
不具合っぽいので気が付いたのは、
他の方が既に出しているような事ですね。
近場に出現してコンボが決まると気持ちよかったので、
今後はその辺りの演出を攻めてみたらどうかな。
Re:「雑談トピ」Dixqさんへ質問
プレイさせていただきました。
シンプルでとても楽しくできました^^
100階は確かに少し多い気がしましたが、その分チャンスが増えた気もしました。
(50階で55秒とかの時とかの場合)
100階あったおかげで100秒以内でいけましたし・・・(50秒の時点で57秒くらいでしたorz)
ちなみに、初回は140秒くらいかかりました。
不具合に関してはもう出されていることでした。
個人的な意見ですが、間違ったところに行ったときのペナルティーが少し軽すぎるような気がしました。
あと、相手が逃げるモードなんてのはどうでしょうか?
あまりいいことが言えなくてすいません。
シンプルでとても楽しくできました^^
100階は確かに少し多い気がしましたが、その分チャンスが増えた気もしました。
(50階で55秒とかの時とかの場合)
100階あったおかげで100秒以内でいけましたし・・・(50秒の時点で57秒くらいでしたorz)
ちなみに、初回は140秒くらいかかりました。
不具合に関してはもう出されていることでした。
個人的な意見ですが、間違ったところに行ったときのペナルティーが少し軽すぎるような気がしました。
あと、相手が逃げるモードなんてのはどうでしょうか?
あまりいいことが言えなくてすいません。
Re:「雑談トピ」Dixqさんへ質問
初回で108秒、9124点でした
4秒負けたorz
最初の方は偽物なしで慣れてきた頃に偽物登場、更に進むと偽物増える
って方が単調にならないのでステージが多くても長さを感じさせないと思います。
あと、プレイ中は気にする余裕がなかったんですが、偽物を選んだ時のペナルティはあったほうが
面白くなると思いますよ。
最後にプログラムの事ですが3点ほど気になっているところを。
1・while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 )
がプログラム中に3回書かれています。
内、2つがDanjon関数内にありますが、これらをプログラム中に1回だけで済むようにしてみましょう。
2・DrawLineをfor文で回すと36行だったものが6~8行に収まります。
プログラムも見やすくなるのでfor文の練習と思ってやってみてください。
3・キー入力ですが1、5、10の時に反応するように一方向につき3つのif文が書かれていますが、
これだと反応回数を増やす度にif文が増えていきます。
これを1、6、11、16、21・・・にして考えてみてください。
「%」は割ったあまりを求める演算子なので上の数列とうまく組み合わせればとりあえず長押しできるようになります。
%の例 10 /3 = 3; 10 %3 = 1;
4秒負けたorz
最初の方は偽物なしで慣れてきた頃に偽物登場、更に進むと偽物増える
って方が単調にならないのでステージが多くても長さを感じさせないと思います。
あと、プレイ中は気にする余裕がなかったんですが、偽物を選んだ時のペナルティはあったほうが
面白くなると思いますよ。
最後にプログラムの事ですが3点ほど気になっているところを。
1・while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 )
がプログラム中に3回書かれています。
内、2つがDanjon関数内にありますが、これらをプログラム中に1回だけで済むようにしてみましょう。
2・DrawLineをfor文で回すと36行だったものが6~8行に収まります。
プログラムも見やすくなるのでfor文の練習と思ってやってみてください。
3・キー入力ですが1、5、10の時に反応するように一方向につき3つのif文が書かれていますが、
これだと反応回数を増やす度にif文が増えていきます。
これを1、6、11、16、21・・・にして考えてみてください。
「%」は割ったあまりを求める演算子なので上の数列とうまく組み合わせればとりあえず長押しできるようになります。
%の例 10 /3 = 3; 10 %3 = 1;
Re:「雑談トピ」Dixqさんへ質問
個人的な意見ですが、上下左右でループ移動できるといいかな?と思います。
一番上のマスで上を押すと一番下のマスへ、一番左のマスで左を押すと一番右のマスへ…みたいな感じですね。
一番上のマスで上を押すと一番下のマスへ、一番左のマスで左を押すと一番右のマスへ…みたいな感じですね。
Re:「雑談トピ」Dixqさんへ質問
まずモードを作ろうと思ったらエラーが出て困ってます。どうすればいいでしょうか?
------ ビルド開始: プロジェクト: 脱出, 構成: Debug Win32 ------
コンパイルしています...
脱出.cpp
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(73) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(73) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(73) : error C2146: 構文エラー : ';' が、識別子 'PlayerX' の前に必要です。
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(73) : error C3861: ' if': 識別子が見つかりませんでした
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(169) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(169) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(169) : error C2146: 構文エラー : ';' が、識別子 'PlayerX' の前に必要です。
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(169) : error C3861: ' if': 識別子が見つかりませんでした
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(249) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(249) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(249) : error C2146: 構文エラー : ';' が、識別子 'PlayerX' の前に必要です。
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(249) : error C3861: ' if': 識別子が見つかりませんでした
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(329) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(329) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(329) : error C2146: 構文エラー : ';' が、識別子 'PlayerX' の前に必要です。
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(329) : error C3861: ' if': 識別子が見つかりませんでした
ビルドログは "file://c:\documents and settings\デスクトップ\脱出4\脱出\Debug\BuildLog.htm" に保存されました。
脱出 - エラー 16、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
------ ビルド開始: プロジェクト: 脱出, 構成: Debug Win32 ------
コンパイルしています...
脱出.cpp
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(73) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(73) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(73) : error C2146: 構文エラー : ';' が、識別子 'PlayerX' の前に必要です。
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(73) : error C3861: ' if': 識別子が見つかりませんでした
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(169) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(169) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(169) : error C2146: 構文エラー : ';' が、識別子 'PlayerX' の前に必要です。
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(169) : error C3861: ' if': 識別子が見つかりませんでした
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(249) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(249) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(249) : error C2146: 構文エラー : ';' が、識別子 'PlayerX' の前に必要です。
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(249) : error C3861: ' if': 識別子が見つかりませんでした
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(329) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(329) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(329) : error C2146: 構文エラー : ';' が、識別子 'PlayerX' の前に必要です。
c:\documents and settings\デスクトップ\脱出4\脱出\脱出.cpp(329) : error C3861: ' if': 識別子が見つかりませんでした
ビルドログは "file://c:\documents and settings\デスクトップ\脱出4\脱出\Debug\BuildLog.htm" に保存されました。
脱出 - エラー 16、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
Re:「雑談トピ」Dixqさんへ質問
う、、腕が~!右腕が釣りましたw
>>yuさん
き・・九十六・・。
私は初回ですが、129秒でした。比較になりませんね^^;
>>ひよこさん
GetHitKeyStateAll_2を使っているなら
if( Key[○○] == 1 || Key[○○]> 10 ){
//移動
}
みたいにすれば押しっぱなしの時も一緒に移動出来ますよ。
後、これは以前言ったかもしれませんが、
while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 )
こういう処理は一箇所にだけ書いた方が効率的です。
条件分岐させて処理をさせれば一箇所に書いておけば充分対応出来ます。
また、
SetFontSize( 20 ) ;
この関数は毎回呼んではだめです。
今は大丈夫かもしれませんが、いくつか呼ぶとFPSが60保てなくなると思います。
複数の種類やサイズの違うフォントを作りたい時はフォントハンドルを作ってから描画してあげて下さい。
詳しくはリファレンスに書いてあります。
>>yuさん
き・・九十六・・。
私は初回ですが、129秒でした。比較になりませんね^^;
>>ひよこさん
GetHitKeyStateAll_2を使っているなら
if( Key[○○] == 1 || Key[○○]> 10 ){
//移動
}
みたいにすれば押しっぱなしの時も一緒に移動出来ますよ。
後、これは以前言ったかもしれませんが、
while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 )
こういう処理は一箇所にだけ書いた方が効率的です。
条件分岐させて処理をさせれば一箇所に書いておけば充分対応出来ます。
また、
SetFontSize( 20 ) ;
この関数は毎回呼んではだめです。
今は大丈夫かもしれませんが、いくつか呼ぶとFPSが60保てなくなると思います。
複数の種類やサイズの違うフォントを作りたい時はフォントハンドルを作ってから描画してあげて下さい。
詳しくはリファレンスに書いてあります。
Re:「雑談トピ」Dixqさんへ質問
上に書いてある事をわかりやすくかくと・・ キーの入力と移動の部分を以下のように書き換えて下さい。 static int count=0; if( Key[ KEY_INPUT_LEFT]==1 || ( Key[ KEY_INPUT_LEFT]>10) && count%2) x-=32; if( Key[ KEY_INPUT_RIGHT]==1|| ( Key[ KEY_INPUT_RIGHT]>10) && count%2) x+=32; if( Key[ KEY_INPUT_UP]==1 || ( Key[ KEY_INPUT_UP]>10) && count%2) y-=30; if( Key[ KEY_INPUT_DOWN]==1 || ( Key[ KEY_INPUT_DOWN]>10) && count%2) y+=30; count++; 後、配列要素を1つしか作ってないのに2つめにアクセスしているところがあります。 int Xde[1]; ↓ int Xde[2]; このように宣言を変えて下さい。あと、DrawLineはfor文で書いた方が楽ですよ;
Re:「雑談トピ」Dixqさんへ質問
Dixqさん、ほかの方々いろいろご指導ありがとうございます。
いろいろあって第三代目を作れました、ありがとうございます。
アップローダ様http://down11.ddo.jp/uploader/download/ ... 87%BA4.zip
PASSはhiyokoです。
まず、いろいろ変更があるのでREAD MEよんでください。そうしないとがっかりするかもしれません。
Dixqさんこれくらいのゲームじゃだめですかね?
いろいろあって第三代目を作れました、ありがとうございます。
アップローダ様http://down11.ddo.jp/uploader/download/ ... 87%BA4.zip
PASSはhiyokoです。
まず、いろいろ変更があるのでREAD MEよんでください。そうしないとがっかりするかもしれません。
Dixqさんこれくらいのゲームじゃだめですかね?
Re:「雑談トピ」Dixqさんへ質問
操作性がよくなりましたね(^-^)
そのせいか、余裕で100秒を切ってしまうのがなんとも…(苦笑)
でも、こういうシンプルなゲーム大好きです♪(私が作るのもシンプルなものばかりなんで(笑))
そのせいか、余裕で100秒を切ってしまうのがなんとも…(苦笑)
でも、こういうシンプルなゲーム大好きです♪(私が作るのもシンプルなものばかりなんで(笑))
Re:「雑談トピ」Dixqさんへ質問
ハード初見で
92秒
スコア5520
でしたw
偽者に引っかかってスコア減りまくったw
偽者にぶつかるとずらされるのは良いと思いました。
(斜めに移動してたら引っかかったw)
一マス移動は良いと思いましたがZXCVの配置は自分的には使いにくかったですね。
どの上とかがどのボタンか分からなくなって結局あんまり使いませんでした。
自分的にはWASDを使った方がやりやすかったと思います。
でも一マス移動と高速移動のボタン違うボタンに変えたのは良いと思いますよ。
なれれば使いやすくなると思いますし。
92秒
スコア5520
でしたw
偽者に引っかかってスコア減りまくったw
偽者にぶつかるとずらされるのは良いと思いました。
(斜めに移動してたら引っかかったw)
一マス移動は良いと思いましたがZXCVの配置は自分的には使いにくかったですね。
どの上とかがどのボタンか分からなくなって結局あんまり使いませんでした。
自分的にはWASDを使った方がやりやすかったと思います。
でも一マス移動と高速移動のボタン違うボタンに変えたのは良いと思いますよ。
なれれば使いやすくなると思いますし。
Re:「雑談トピ」Dixqさんへ質問
キー判定のところで
if( Key[ KEY_INPUT_RIGHT]%3==1)PlayerX+=32;
if( Key[ KEY_INPUT_RIGHT]%3==6)PlayerX+=32;
if( Key[ KEY_INPUT_RIGHT]%3==11)PlayerX+=32;
if( Key[ KEY_INPUT_RIGHT]%3==16)PlayerX+=32;
if( Key[ KEY_INPUT_RIGHT]%3==21)PlayerX+=32;
とありますが、Key[ KEY_INPUT_RIGHT]%3の結果は0、1、2のどれかにしかなりません。
「%」は余りを求める時に使うので、後ろに付いた数字より大きい値になることはありません。
という事は最初の一つ以外無駄になっています。
先日の例では5で割って余りが1の時に移動していたので11、16という数字を出したのですが・・・
if ( Key [ KEY_INPUT_RIGHT ] %3 == 1 ) { PlayerX += 32; }
こう書くだけで押し続けた時に3フレームに1度(60FPSの環境で1秒に20マス)進むようになります。
(ひよこさんの書いた一番上の部分だけを見やすくしただけです)
これを長押し対応にするには、管理人さんの書かれているようにKey [ KEY_INPUT_RIGHT ]の値が、
10(ある程度の大きさの数)以上であり、同時にKey [ KEY_INPUT_RIGHT ] %2(こちらも適当な数字)が1であればいいわけです。
if ( Key [ KEY_INPUT_RIGHT ] == 1 || ( ( Key [ KEY_INPUT_RIGHT ] -15 ) > 0 && ( Key [ KEY_INPUT_RIGHT ] -15 ) %5 == 1 ) ) { PlayerX += 32; }
前半部分(赤い所)が押した瞬間に、後半部分が15フレーム以上押している時(緑色の所)に
5フレームに1度だけ(青いところ)移動する(if文の判定が真になる)ようにしたものです。
15のところが押しっ放しにした時に動かない時間です。変数に入れておけば変更しやすいです。
(%の数字を大きくした時に判定にムラができるようなのでアレンジしました。すみません。)
また、管理人さんも仰ったように
while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 )
は一つだけにしておきましょう。今回の変更では逆に増えてます。
そういえばもう一つ、空白部分が半角スペース、全角スペース、タブの三つが混在してます。
全角スペースは時にエラーが出るので使わないようにした方がいいです。
サンプルへの掲載を目標にしておられるようなので、特にプログラム面をコメントしてみました。
応援してますよ。
if( Key[ KEY_INPUT_RIGHT]%3==1)PlayerX+=32;
if( Key[ KEY_INPUT_RIGHT]%3==6)PlayerX+=32;
if( Key[ KEY_INPUT_RIGHT]%3==11)PlayerX+=32;
if( Key[ KEY_INPUT_RIGHT]%3==16)PlayerX+=32;
if( Key[ KEY_INPUT_RIGHT]%3==21)PlayerX+=32;
とありますが、Key[ KEY_INPUT_RIGHT]%3の結果は0、1、2のどれかにしかなりません。
「%」は余りを求める時に使うので、後ろに付いた数字より大きい値になることはありません。
という事は最初の一つ以外無駄になっています。
先日の例では5で割って余りが1の時に移動していたので11、16という数字を出したのですが・・・
if ( Key [ KEY_INPUT_RIGHT ] %3 == 1 ) { PlayerX += 32; }
こう書くだけで押し続けた時に3フレームに1度(60FPSの環境で1秒に20マス)進むようになります。
(ひよこさんの書いた一番上の部分だけを見やすくしただけです)
これを長押し対応にするには、管理人さんの書かれているようにKey [ KEY_INPUT_RIGHT ]の値が、
10(ある程度の大きさの数)以上であり、同時にKey [ KEY_INPUT_RIGHT ] %2(こちらも適当な数字)が1であればいいわけです。
if ( Key [ KEY_INPUT_RIGHT ] == 1 || ( ( Key [ KEY_INPUT_RIGHT ] -15 ) > 0 && ( Key [ KEY_INPUT_RIGHT ] -15 ) %5 == 1 ) ) { PlayerX += 32; }
前半部分(赤い所)が押した瞬間に、後半部分が15フレーム以上押している時(緑色の所)に
5フレームに1度だけ(青いところ)移動する(if文の判定が真になる)ようにしたものです。
15のところが押しっ放しにした時に動かない時間です。変数に入れておけば変更しやすいです。
(%の数字を大きくした時に判定にムラができるようなのでアレンジしました。すみません。)
また、管理人さんも仰ったように
while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 )
は一つだけにしておきましょう。今回の変更では逆に増えてます。
そういえばもう一つ、空白部分が半角スペース、全角スペース、タブの三つが混在してます。
全角スペースは時にエラーが出るので使わないようにした方がいいです。
サンプルへの掲載を目標にしておられるようなので、特にプログラム面をコメントしてみました。
応援してますよ。
Re:「雑談トピ」Dixqさんへ質問
>>ひよこさん
制作お疲れ様です。
私がこんな偉そうなことをいえる立場ではないですが、
やはりサンプルプログラムとして提示するということは、
みんなこれを参考にして下さいといっているということだと思います。
という事は、ソースコードは解りやすく、適切である必要があり、
もしふさわしくない書き方があるなら適切なものにしておかないといけません。
とりあえず指摘されている所は全て直すようにしてみてください。
また、for文なしで沢山書いている部分をfor文などでまとめ、
意味のない部分を削除し、似たような変数が沢山あるものは配列にし、
書き方を効率化してみてください。
後、関数名がX一文字というのも少し気になります・・。
更に、コードを読んでもらう為には注釈が必要ですので、注釈を適度に入れて下さい。
そして、括弧の対応の仕方に一貫性を持たせ、読みやすくし、字下げも統一して下さい。
>>木霊さん
負の数の剰余が正になることはないので、緑の部分は必要ないかもしれませんね。
(追記:VC++での結果)
制作お疲れ様です。
私がこんな偉そうなことをいえる立場ではないですが、
やはりサンプルプログラムとして提示するということは、
みんなこれを参考にして下さいといっているということだと思います。
という事は、ソースコードは解りやすく、適切である必要があり、
もしふさわしくない書き方があるなら適切なものにしておかないといけません。
とりあえず指摘されている所は全て直すようにしてみてください。
また、for文なしで沢山書いている部分をfor文などでまとめ、
意味のない部分を削除し、似たような変数が沢山あるものは配列にし、
書き方を効率化してみてください。
後、関数名がX一文字というのも少し気になります・・。
更に、コードを読んでもらう為には注釈が必要ですので、注釈を適度に入れて下さい。
そして、括弧の対応の仕方に一貫性を持たせ、読みやすくし、字下げも統一して下さい。
>>木霊さん
負の数の剰余が正になることはないので、緑の部分は必要ないかもしれませんね。
(追記:VC++での結果)
Re:「雑談トピ」Dixqさんへ質問
負の数を割ったあまり・・というのは小学校の時習わなかったし、それ以来使った事も無かったので、
こういう事が正式にあってるのかどうかはしりませんが、
VC++で実行するといつも負になるので、いつもそうしているというだけです^^;
なんかこの辺参考になりそうですね。
http://0xcc.net/blog/archives/000083.html
負の数の剰余については処理系定義みたいです。(C99で明確化されたのかな?)
VC++以外での処理も考えるなら木霊さんが仰った方法の方が適切ですね。
>>ウィザード昇進おめでとうございます。
ありがとうございます。
あまりに遠い道のりですが、リアルもウィザードになれるよう精進しますw
こういう事が正式にあってるのかどうかはしりませんが、
VC++で実行するといつも負になるので、いつもそうしているというだけです^^;
なんかこの辺参考になりそうですね。
http://0xcc.net/blog/archives/000083.html
負の数の剰余については処理系定義みたいです。(C99で明確化されたのかな?)
VC++以外での処理も考えるなら木霊さんが仰った方法の方が適切ですね。
>>ウィザード昇進おめでとうございます。
ありがとうございます。
あまりに遠い道のりですが、リアルもウィザードになれるよう精進しますw
Re:「雑談トピ」Dixqさんへ質問
サンプルプログラムに入れるのはハードモードしか入ってないゲームでいいですか?
サンプルならシンプルのほうがいいと思いましたので。
ただいま関数の整理などやっております。
サンプルならシンプルのほうがいいと思いましたので。
ただいま関数の整理などやっております。
Re:「雑談トピ」Dixqさんへ質問
whileを使わないようにしてみました。
アップローダ様http://down11.ddo.jp/uploader/download/ ... %83%A0.zip PASSはhiyokoです。
あとキー操作をZXCVをWASDにしました。
アップローダ様http://down11.ddo.jp/uploader/download/ ... %83%A0.zip PASSはhiyokoです。
あとキー操作をZXCVをWASDにしました。
Re:「雑談トピ」Dixqさんへ質問
んん~なぜそこまでサンプルプログラムに希望するかは分かりませんが、^^;
とりあえず、字下げが今のままでは見づらいです。
あとSTAGE_TEKI()はもっと簡単にできそうですね。
今のままだとちょっと長いっといったイメージです。
とりあえず、字下げが今のままでは見づらいです。
あとSTAGE_TEKI()はもっと簡単にできそうですね。
今のままだとちょっと長いっといったイメージです。
Re:「雑談トピ」Dixqさんへ質問
それは今までのゲームと違ってきれいに完成したのってのもありますけど
やっぱりこんな初心者がこんなの作れたよ、わたしにもできるかなって考
えてもらえるとうれしいからですね。
やっぱりこんな初心者がこんなの作れたよ、わたしにもできるかなって考
えてもらえるとうれしいからですね。
Re:「雑談トピ」Dixqさんへ質問
kazuoniさん>>字下げが今のままでは見づらいです。
どのようにすればいいでしょうか。
kazuoniさん>>あとSTAGE_TEKI()はもっと簡単にできそうですね。
ではどうすればいいでしょうか。自作関数をつかって短縮するといいたいのでしょうか。
どのようにすればいいでしょうか。
kazuoniさん>>あとSTAGE_TEKI()はもっと簡単にできそうですね。
ではどうすればいいでしょうか。自作関数をつかって短縮するといいたいのでしょうか。
Re:「雑談トピ」Dixqさんへ質問
ちょっと違うスレのコードですか、こんな感じです。
自分のものと比べてみてください。タブが入ってるかいないかですけど^^;
これのほうが{}の対応関係も見やすいと思います。
(決してこれがいい!っと言うわけではないです。)
>もっと簡単に
別に特に重要ってわけではないんですけど、
if(PlayerX==deguchi2X
以下はすべて同じだと思うので、関数化できるかなと。
敵が4→15になったら面倒かつ長いコードになってしまうので。
あと、今のままでもいいのですが、
STAGE_TEKI()のif文は絶対にすべて条件を調べないといけませんか?
敵が重なっているってことがあれば別ですが、すべての敵がバラバラ
っという条件の時は敵あたりの条件にヒットしたら、
それ以外の敵とのあたり判定はしなくてもよいのでは?
まぁ、if....else if....とするだけなんですけど^^;
ただ、これをしてどうこうっということはないですが、
やはり皆さんに見てもらうっということでは、
以前たかぎさんもおっしゃっていましたが、
「コメントを書かないでも理解できるコード」
に近づけるために、やはり簡潔かつ分かりやすく(「簡潔=わかりやすい」ではないですが・・・)
記述するのが良い気がします。
自分のものと比べてみてください。タブが入ってるかいないかですけど^^;
これのほうが{}の対応関係も見やすいと思います。
(決してこれがいい!っと言うわけではないです。)
>もっと簡単に
別に特に重要ってわけではないんですけど、
if(PlayerX==deguchi2X
以下はすべて同じだと思うので、関数化できるかなと。
敵が4→15になったら面倒かつ長いコードになってしまうので。
あと、今のままでもいいのですが、
STAGE_TEKI()のif文は絶対にすべて条件を調べないといけませんか?
敵が重なっているってことがあれば別ですが、すべての敵がバラバラ
っという条件の時は敵あたりの条件にヒットしたら、
それ以外の敵とのあたり判定はしなくてもよいのでは?
まぁ、if....else if....とするだけなんですけど^^;
ただ、これをしてどうこうっということはないですが、
やはり皆さんに見てもらうっということでは、
以前たかぎさんもおっしゃっていましたが、
「コメントを書かないでも理解できるコード」
に近づけるために、やはり簡潔かつ分かりやすく(「簡潔=わかりやすい」ではないですが・・・)
記述するのが良い気がします。
Re:「雑談トピ」Dixqさんへ質問
↑のファイルをVC++で開いてみてください。
(ここで見る限りには見づらいです^^;)
・・・うまくみれないですかね。
とりあえず言いたかったことは、
・・・上手く説明できません。。
(ここで見る限りには見づらいです^^;)
・・・うまくみれないですかね。
とりあえず言いたかったことは、
if(PlayerX==deguchi4X && PlayerY==deguchi4Y){ PlaySoundMem( Sound , DX_PLAYTYPE_BACK ); Change[0]=Change[1]; score+=320; PlayerX=PlayerX-32;PlayerY=PlayerY+30; }よりは
if(PlayerX==deguchi4X && PlayerY==deguchi4Y){ PlaySoundMem( Sound , DX_PLAYTYPE_BACK ); Change[0]=Change[1]; score+=320; PlayerX=PlayerX-32;PlayerY=PlayerY+30; }のが見やすくないですか?
・・・上手く説明できません。。
Re:「雑談トピ」Dixqさんへ質問
>>ひよこさん
遊ばさせて頂きました。
気になった所です。
・キー操作
押しっぱなしが利くのはいいのですが、一マスだけ移動しようとすると
ニマス三マスと移動してしまうので、押しっぱなしをあるフレーム以上来たら・・・
という処理に変えてみるといいのではないでしょうか。
(一瞬だけ押せば一マス移動もできなくはないですが、ちょっと疲れます。)
・音
いきなり大きな音が鳴ってびっくりしました。
音量を下げてみるといいかもしれません。(フリーソフトなどで下げる)
・ソースコード
「1」ソースコードが縦一列に並んでいるのは見にくいかと思います。
どのようにするのか分からないのであれば、「インデント」などで調べてみてください。
参考になるサイトはいくらでもありますので、まず真似してみるといいと思います。
「2」同じような変数が連番で定義されているので、配列にしてみては如何でしょうか?
deguchiX[4], deguchiY[4]のように。
「3」同じ処理を関数にまとめるといいと思います。(STAGE_TEKI)
そこまで急いでサンプルに掲載されなければいけないのでしょうか?
「プログラム初心者がこんなの作れました」という気持ちは分からなくはないです。
が、ゲームだけでなく、ソースも参考にされる可能性があるため、
見にくいソースだと参考にならない、出来ないと思います。
遊ばさせて頂きました。
気になった所です。
・キー操作
押しっぱなしが利くのはいいのですが、一マスだけ移動しようとすると
ニマス三マスと移動してしまうので、押しっぱなしをあるフレーム以上来たら・・・
という処理に変えてみるといいのではないでしょうか。
(一瞬だけ押せば一マス移動もできなくはないですが、ちょっと疲れます。)
・音
いきなり大きな音が鳴ってびっくりしました。
音量を下げてみるといいかもしれません。(フリーソフトなどで下げる)
・ソースコード
「1」ソースコードが縦一列に並んでいるのは見にくいかと思います。
どのようにするのか分からないのであれば、「インデント」などで調べてみてください。
参考になるサイトはいくらでもありますので、まず真似してみるといいと思います。
「2」同じような変数が連番で定義されているので、配列にしてみては如何でしょうか?
deguchiX[4], deguchiY[4]のように。
「3」同じ処理を関数にまとめるといいと思います。(STAGE_TEKI)
そこまで急いでサンプルに掲載されなければいけないのでしょうか?
「プログラム初心者がこんなの作れました」という気持ちは分からなくはないです。
が、ゲームだけでなく、ソースも参考にされる可能性があるため、
見にくいソースだと参考にならない、出来ないと思います。
Re:「雑談トピ」Dixqさんへ質問
>>ひよこさん
失礼しました。書き方が悪かったです。
「READ ME.txt」にWASDで一マス移動できると、書いてあったのでそれはいいのですが、
移動キーを分けているのはなぜでしょうか?
キャラクター移動を十字キーだけにまとめることは可能だったはずです。
特別な理由がない限り、移動処理(一回だけ押す・押しっぱなし)は
まとめる方がいいのではないかと思います。
失礼しました。書き方が悪かったです。
「READ ME.txt」にWASDで一マス移動できると、書いてあったのでそれはいいのですが、
移動キーを分けているのはなぜでしょうか?
キャラクター移動を十字キーだけにまとめることは可能だったはずです。
特別な理由がない限り、移動処理(一回だけ押す・押しっぱなし)は
まとめる方がいいのではないかと思います。
Re:「雑談トピ」Dixqさんへ質問
個人的には別キーも有だと思います。慣れてしまえば押し間違えが少なくて済みますし。
ただ、私が同じ物を作るならば、シフトキーを使うかな?
シフトキーを押したままカーソルキーでスロー移動とか…
このへんは作り手の好みの話になってくるので、こういう意見もある程度に流しておいてください(^_^;)
ただ、私が同じ物を作るならば、シフトキーを使うかな?
シフトキーを押したままカーソルキーでスロー移動とか…
このへんは作り手の好みの話になってくるので、こういう意見もある程度に流しておいてください(^_^;)
Re:「雑談トピ」Dixqさんへ質問
それをやるなら、『0.5秒以上押されている、もしくは今押された場合に移動させる』としないと、チョン押しでの1マス移動が難しくなりますね(^_^;)
Re:「雑談トピ」Dixqさんへ質問
自分ではソース整理完了ってとこです。
これで掲載させてもらえませんか。
自分なりに精一杯やらせていただきました。
アップローダ様http://down11.ddo.jp/uploader/download/ ... %BC%92.zip PASSはhiyokoです。
これで掲載させてもらえませんか。
自分なりに精一杯やらせていただきました。
アップローダ様http://down11.ddo.jp/uploader/download/ ... %BC%92.zip PASSはhiyokoです。
Re:「雑談トピ」Dixqさんへ質問
とにかく一行に詰め込みすぎ?な感があります。
参考になるものがあった方が良いと思い
ある程度ソースを変更させてもらいました。
更なる注釈の記入と、今後の参考にしてみてください。
あと、直してませんがファイル名に"ENDINGU"としていますが
正しくはENDINGです。
参考になるものがあった方が良いと思い
ある程度ソースを変更させてもらいました。
更なる注釈の記入と、今後の参考にしてみてください。
あと、直してませんがファイル名に"ENDINGU"としていますが
正しくはENDINGです。
Re:「雑談トピ」Dixqさんへ質問
追記
これも直してませんが、変数名を統一したほうがいいですよ。
人様々ですが、私の場合は
グローバル変数の頭には以下のような小文字を付けます。
b bool
c char
r short
i int
g long
u unsigned
f float
d double
m マクロ
a 配列
p ポインタ
s 文字列
t 構造体
h ハンドル
例えば int型の配列であった場合
int iaKey[/url] といった名前になります。
これも直してませんが、変数名を統一したほうがいいですよ。
人様々ですが、私の場合は
グローバル変数の頭には以下のような小文字を付けます。
b bool
c char
r short
i int
g long
u unsigned
f float
d double
m マクロ
a 配列
p ポインタ
s 文字列
t 構造体
h ハンドル
例えば int型の配列であった場合
int iaKey[/url] といった名前になります。
Re:「雑談トピ」Dixqさんへ質問
隙間無く書かれたプログラムよりも、
DrawBox(PlayerX,PlayerY,PlayerX+32,PlayerY+30,BLUE,TRUE);
ある程度空間を入れることで個々の変数が識別しやすくなります。
DrawBox( PlayerX, PlayerY, PlayerX+32, PlayerY+30, BLUE, TRUE ) ;
コメントを行末ではなく上に移動させていますが、
これにも意味があります。
Sleep(1) ; // コメント
// コメント
Sleep(1) ;
編集するために頻繁にEndキー(行末移動)を使いますが
コメントが行末にあるとプログラム行末への移動の妨げになります。
編集する事が少ない場合や、行末にあった方がわかり易い場合は
そうしますが、それ以外は上のほうが良いでしょう。
ループ処理等を使う場合はインデントを入れて
どの部分がループされるのか処理されるのか分かり易くします。
※この出口判定部分の deguchiX が deguchiX[1]になっていたので
修正して下さいm(_ _)m
DrawBox(PlayerX,PlayerY,PlayerX+32,PlayerY+30,BLUE,TRUE);
ある程度空間を入れることで個々の変数が識別しやすくなります。
DrawBox( PlayerX, PlayerY, PlayerX+32, PlayerY+30, BLUE, TRUE ) ;
コメントを行末ではなく上に移動させていますが、
これにも意味があります。
Sleep(1) ; // コメント
// コメント
Sleep(1) ;
編集するために頻繁にEndキー(行末移動)を使いますが
コメントが行末にあるとプログラム行末への移動の妨げになります。
編集する事が少ない場合や、行末にあった方がわかり易い場合は
そうしますが、それ以外は上のほうが良いでしょう。
ループ処理等を使う場合はインデントを入れて
どの部分がループされるのか処理されるのか分かり易くします。
for( i=0; i<4; i++ ) // for文で繰り返される段落 if( PlayerX == deguchiX && PlayerY == deguchiY ) { // if文で処理される段落 }
※この出口判定部分の deguchiX が deguchiX[1]になっていたので
修正して下さいm(_ _)m
Re:「雑談トピ」Dixqさんへ質問
またまた私がこんなことをいえる立場では無いですが、掲載するからには、人の手本となるものとなると思います。
言い換えれば人に教える立場だと言うことですよね。
ですから間違いがあると、間違いまで人に一緒に教えてしまうことになりますし、
改善点の指摘が出ているならそれを直すべきだと思います。
とりあえず指摘が出たところは一通り直すようにしてみてはどうでしょうか。
言い換えれば人に教える立場だと言うことですよね。
ですから間違いがあると、間違いまで人に一緒に教えてしまうことになりますし、
改善点の指摘が出ているならそれを直すべきだと思います。
とりあえず指摘が出たところは一通り直すようにしてみてはどうでしょうか。
Re:「雑談トピ」Dixqさんへ質問
>とりあえず指摘が出たところは一通り直すようにしてみてはどうでしょうか。
ということで、とりあえず指摘の出たところは最低限直すようにしてみてはいかがでしょうか。
指摘が出るということは、ひよこさんのコードを参考に誰かがコードを書いたとき、
その人も同じ指摘を受けてしまうことになりますので・・。
ということで、とりあえず指摘の出たところは最低限直すようにしてみてはいかがでしょうか。
指摘が出るということは、ひよこさんのコードを参考に誰かがコードを書いたとき、
その人も同じ指摘を受けてしまうことになりますので・・。
Re:「雑談トピ」Dixqさんへ質問
一通り直そうとしたらDixqさんの
static int count=0;
if( Key[ KEY_INPUT_LEFT]==1 || ( Key[ KEY_INPUT_LEFT]>10) && count%2) x-=32;
if( Key[ KEY_INPUT_RIGHT]==1|| ( Key[ KEY_INPUT_RIGHT]>10) && count%2) x+=32;
if( Key[ KEY_INPUT_UP]==1 || ( Key[ KEY_INPUT_UP]>10) && count%2) y-=30;
if( Key[ KEY_INPUT_DOWN]==1 || ( Key[ KEY_INPUT_DOWN]>10) && count%2) y+=30;
count++;
のcountはどういう意味なのですか?
static int count=0;
if( Key[ KEY_INPUT_LEFT]==1 || ( Key[ KEY_INPUT_LEFT]>10) && count%2) x-=32;
if( Key[ KEY_INPUT_RIGHT]==1|| ( Key[ KEY_INPUT_RIGHT]>10) && count%2) x+=32;
if( Key[ KEY_INPUT_UP]==1 || ( Key[ KEY_INPUT_UP]>10) && count%2) y-=30;
if( Key[ KEY_INPUT_DOWN]==1 || ( Key[ KEY_INPUT_DOWN]>10) && count%2) y+=30;
count++;
のcountはどういう意味なのですか?
Re:「雑談トピ」Dixqさんへ質問
まず、どういう意味なのかな?と思ったら聞く前に意味を理解してみようとしてみて下さい。
「何か解らないな」>「聞く」
より
「何か解らないな」>「調べる、考える、試行錯誤してみる」
の方が上達が早いです。
なお、今回の場合は、countの意味が解らないなら、一度count無しで実行してみたり、
「%2」とかいてあるなら、2回に1回処理するわけですから、「%3==0」にして3回に1回処理するようにしたら
どう変化するかなどを見て、何の為にあるのか調べてみて下さい。
なお、条件式は0か0以外かで真か偽かが決まるので
count%3
これは2/3実行され、
count%3==0
これは1/3実行されます。
さて、どういう意味かお解かりになったでしょうか?
※
トピック名が「Dixqさんへ質問」よりこちらの題名の方がふさわしいと思いましたので変更しておきました。
「何か解らないな」>「聞く」
より
「何か解らないな」>「調べる、考える、試行錯誤してみる」
の方が上達が早いです。
なお、今回の場合は、countの意味が解らないなら、一度count無しで実行してみたり、
「%2」とかいてあるなら、2回に1回処理するわけですから、「%3==0」にして3回に1回処理するようにしたら
どう変化するかなどを見て、何の為にあるのか調べてみて下さい。
なお、条件式は0か0以外かで真か偽かが決まるので
count%3
これは2/3実行され、
count%3==0
これは1/3実行されます。
さて、どういう意味かお解かりになったでしょうか?
※
トピック名が「Dixqさんへ質問」よりこちらの題名の方がふさわしいと思いましたので変更しておきました。
Re:「雑談トピ」Dixqさんへ質問
書き方等はもういいのでは^^;
あとは分割ファイルにして管理しやすくする、
外部変数を減らす(これは二の次でいいと思いますが・・・)
等が考えられますかね。
あとは分割ファイルにして管理しやすくする、
外部変数を減らす(これは二の次でいいと思いますが・・・)
等が考えられますかね。
Re:「雑談トピ」Dixqさんへ質問
技術的・・・^^;
「C言語 分割ファイル」
っとググればたくさんの解説ページが出てきますが・・・。
今後のゲーム開発でよほど小規模でない限り、
ひとつのファイルにすべてを記述することは現実的ではないと思います。
ここで知識を身につけてみてはいかがでしょうか?
っと余計な事を言わせてもらいました。
「C言語 分割ファイル」
っとググればたくさんの解説ページが出てきますが・・・。
今後のゲーム開発でよほど小規模でない限り、
ひとつのファイルにすべてを記述することは現実的ではないと思います。
ここで知識を身につけてみてはいかがでしょうか?
っと余計な事を言わせてもらいました。
Re:「雑談トピ」Dixqさんへ質問
スコアを10000-scoreとして表示していますが、最初の値をscore=10000としておき、
そこから数値を減らしていく方が良いのではないでしょうか。
そうすれば、114, 134行目の処理がその上のコメントと一致するようになります。
表示する際には、DrawFormatString( 400,400, White, "スコア%d",score ) ; となり、見た目にも分かりやすいと思います。
(同様のことがdeguchicounterにも言えます)
そこから数値を減らしていく方が良いのではないでしょうか。
そうすれば、114, 134行目の処理がその上のコメントと一致するようになります。
表示する際には、DrawFormatString( 400,400, White, "スコア%d",score ) ; となり、見た目にも分かりやすいと思います。
(同様のことがdeguchicounterにも言えます)
Re:「雑談トピ」Dixqさんへ質問
externももちろん必要ですが、
分割ファイルにすれば、いろいろな管理がしやすくなります。
VC++ 2008 EEならば関数・変数はすぐに検索できたり、
関数においては一覧とかも出てきますが、
.cppごとに役割があるともっと管理がしやすいかと。
例えば
main.cpp→ゲームの流れを制御する関数の集合
draw.cpp→描写専用の関数の集合
calc.cpp→ゲーム内のあらゆる計算をする関数の集合
なんて感じです。
分割ファイルにすれば、いろいろな管理がしやすくなります。
VC++ 2008 EEならば関数・変数はすぐに検索できたり、
関数においては一覧とかも出てきますが、
.cppごとに役割があるともっと管理がしやすいかと。
例えば
main.cpp→ゲームの流れを制御する関数の集合
draw.cpp→描写専用の関数の集合
calc.cpp→ゲーム内のあらゆる計算をする関数の集合
なんて感じです。
Re:「雑談トピ」Dixqさんへ質問
おそらく、
extern int i;
extern void func2();
などを指していると思いますが、「extern」+「int i」のように考えると分かりやすいです。
つまり、externで外部へ参照している変数の型、関数の戻り値の型が違うだけです。
extern int i;
extern void func2();
などを指していると思いますが、「extern」+「int i」のように考えると分かりやすいです。
つまり、externで外部へ参照している変数の型、関数の戻り値の型が違うだけです。
Re:「雑談トピ」Dixqさんへ質問
そう言われればそうなんですが^^;
例えば
コードにいきなり
でも
「あ、Functionは戻り値voidの関数なんだったんだよな」
っと解釈してくれます。
なのでコンパイルエラーにはなりません。
これは分割ファイルをするにあたって必要です。
例えば
コードにいきなり
void Function();なんて書かれたらコンパイラは何のことか分かりません。
でも
extern void Function();と書けば、もし関数定義がなされる前にFunction()が出てきても、
「あ、Functionは戻り値voidの関数なんだったんだよな」
っと解釈してくれます。
なのでコンパイルエラーにはなりません。
これは分割ファイルをするにあたって必要です。
Re:「雑談トピ」Dixqさんへ質問
もしかして、変数はすべてextern int、関数はすべてextern voidとすると思っておられるのでしょうか。
そうではなく、例えば、
//a.cpp
int a;
float b;
int func() {}
void func2() {}
としていた場合、これを参照するためには、
//b.cpp
extern int a;
extern float b;
extern int func();
extern void func2();
としなければいけません。
これがSCIさんが仰ったことだと思います。
そうではなく、例えば、
//a.cpp
int a;
float b;
int func() {}
void func2() {}
としていた場合、これを参照するためには、
//b.cpp
extern int a;
extern float b;
extern int func();
extern void func2();
としなければいけません。
これがSCIさんが仰ったことだと思います。
Re:「雑談トピ」Dixqさんへ質問
一応分割にしてみましたが、なぜか最初の文字がでなくて上の時間と敵も表示されないのですが、
どこが原因でしょうか?
Zipにはソースしか入っておりませんので以前のファイルを使ってください。
どこが原因でしょうか?
Zipにはソースしか入っておりませんので以前のファイルを使ってください。
Re:「雑談トピ」Dixqさんへ質問
文字は表示されていますが、初期化する関数が呼ばれていないので、黒で書かれています。
そのため表示されないように見えますが、移動してみれば分かります。
また、画像をロードする処理も行われていないようです。
そのため表示されないように見えますが、移動してみれば分かります。
また、画像をロードする処理も行われていないようです。
Re:「雑談トピ」Dixqさんへ質問
fatensさん>>ありがとうございます。なおしてみたら文字も絵も出るようになりました。
Dixqさん>>かなりソースも変わりました。これでよろしいのでしたら新しくUPします。
下に修正したものをおいておきます。
Dixqさん>>かなりソースも変わりました。これでよろしいのでしたら新しくUPします。
下に修正したものをおいておきます。
#include "DxLib.h" #include "GlobalVariable.h" extern void Draw(); extern void img_sound_load(); extern void KEY(); extern void Set_Shoki(); extern void stage(); extern void stage2(); extern void STAGE_TEKI(); extern void TEKI_HANTEI(); void Opening() { //大きい文字にする。 SetFontSize( 64 ) ; DrawString(100,100,"脱出ゲーム",White); DrawString(100,200,"Z ハード",White); if(Key[KEY_INPUT_Z]==1) { SetFontSize( 20 ) ;function_status=1; } } void Danjon() { stage(); stage2(); Draw(); KEY(); STAGE_TEKI(); if(deguchicounter==100){function_status=2;} } void Ending() { int End=LoadGraph( "ENDINGU" ) ; DrawGraph( 0 , 0 , End , TRUE ) ; DrawFormatString( 400, 350, White, "%d秒でした", timer/100 ); DrawFormatString( 400,400, White, "スコア%d",10000-score ) ; DrawString(0,350,"Zを押してね",White); if(Key[KEY_INPUT_Z]==1) function_status=3; } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ ChangeWindowMode( TRUE ) ; if( DxLib_Init() == -1 ) return -1; SetDrawScreen( DX_SCREEN_BACK ) ; //裏画面を使用する。 Set_Shoki(); img_sound_load(); while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){ //↑メッセージ処理 ↑画面をクリア ↑入力状態を保存 ↑ESCが押されていない switch(function_status) { case 0: Opening(); break; case 1: Danjon(); break; case 2: Ending(); break; default: DxLib_End() ; return 0; break; } ScreenFlip() ; } DxLib_End() ; return 0 ; }
Re:「雑談トピ」Dixqさんへ質問
解りました。
こちらで字下げ、改行など部分的に修正してもよろしいでしょうか?
部分的に統一させていただき、アップロードさせて頂けたら有り難く思います。
こちらで字下げ、改行など部分的に修正してもよろしいでしょうか?
部分的に統一させていただき、アップロードさせて頂けたら有り難く思います。
Re:「雑談トピ」Dixqさんへ質問
Dixqさんにプログラムの字下げ、改行の修正して下さるなんて光栄です。
サンプルになったら私もそのサンプルを参考にさせて頂きたいと思います。
サンプルになったら私もそのサンプルを参考にさせて頂きたいと思います。
自作のC言語ターミナルゲームをパワーアップさせてください
どなたかお願いです。自作のC言語アップするんで、パワーアップさせて返してください!
いまは、ステータス異常の表記が上手く行かなくて困っています。
MACのアプリでダイアログとかReseditを使ったリソースで開発してくれると大助かりです。
一緒に組んでやる人がいないので誰か一緒にC言語のゲームを作りませんか?
キャッチボール式戦闘
http://www1.axfc.net/uploader/He/so/212129
いまは、ステータス異常の表記が上手く行かなくて困っています。
MACのアプリでダイアログとかReseditを使ったリソースで開発してくれると大助かりです。
一緒に組んでやる人がいないので誰か一緒にC言語のゲームを作りませんか?
キャッチボール式戦闘
http://www1.axfc.net/uploader/He/so/212129
この作品の仕様
.defaultで平均的なキャラクターの生成。
.statsでステータスを均等な値に決定。
.openでステータスファイルを読み込む。
.rmで既に入力したキャラを最戦闘。
.owで体重と身長を決定。
.d1で内部計算数値を表示。
技読み込みのフォーマットは
技名/発動台詞/攻撃修正値/発動相対確率/技消費ポイント/攻撃対象/会心修正/属性/技タイプ/リンク技
です。
攻撃修正は乗算値、修正値、加算値、近似値、絶対率、加算乗算値、絶対乗算値があります。
ダメージに乗算と修正はかけ算、加算はプラス、近似は絶対値に近い値、絶対率は最大HPの割合、加算乗算はプラスとかけ算、絶対乗算は絶対値に攻撃力かけ算です。
.statsでステータスを均等な値に決定。
.openでステータスファイルを読み込む。
.rmで既に入力したキャラを最戦闘。
.owで体重と身長を決定。
.d1で内部計算数値を表示。
技読み込みのフォーマットは
技名/発動台詞/攻撃修正値/発動相対確率/技消費ポイント/攻撃対象/会心修正/属性/技タイプ/リンク技
です。
攻撃修正は乗算値、修正値、加算値、近似値、絶対率、加算乗算値、絶対乗算値があります。
ダメージに乗算と修正はかけ算、加算はプラス、近似は絶対値に近い値、絶対率は最大HPの割合、加算乗算はプラスとかけ算、絶対乗算は絶対値に攻撃力かけ算です。
Re:この作品の仕様
^^;
基本ここは質問・回答中心の場なので、ちょっと場違いかと。。
>ステータス異常の表記が上手く行かなくて困っています。
どのようにうまくいかないのか明確に示すとよい回答が得られるかも知れません。
基本ここは質問・回答中心の場なので、ちょっと場違いかと。。
>ステータス異常の表記が上手く行かなくて困っています。
どのようにうまくいかないのか明確に示すとよい回答が得られるかも知れません。
Re:この作品の仕様
マルチポストは「両方の掲示板の規約で許されていたら可」としています。
また、質問掲示板関連は同じ方が見ていらっしゃる場合が多いようですので、
マルチポストをする意味はあまりないという意見が以前出たことがあります。
---
人が書いたプログラムを理解するのは難しいでしょうし、
そこまでせっかく作ったのなら、わからない部分を聞いて、機能追加を自分でやった方が
後々効率的では無いでしょうか?
また、質問掲示板関連は同じ方が見ていらっしゃる場合が多いようですので、
マルチポストをする意味はあまりないという意見が以前出たことがあります。
---
人が書いたプログラムを理解するのは難しいでしょうし、
そこまでせっかく作ったのなら、わからない部分を聞いて、機能追加を自分でやった方が
後々効率的では無いでしょうか?
Re:この作品の仕様
アチラでもレスしてますが、
意味の分からない変数名、特にグローバル変数書き換えまくりだったので、
それ以上に手を出す気がそげてしまいました。
s:先手、g:後手、k:攻撃、b:防御…などを解読しないと分からないのでは、
(ゲーム的な本質以前の面で)他の人に弄ってもらうソースとしては厳しいです。
「キー入力が少ない」とか「宣言が面倒」とか言うのはありえない。
変数名を見直しながら、グローバル変数を減らして構造体にまとめるのが最初かなという印象です。
意味の分からない変数名、特にグローバル変数書き換えまくりだったので、
それ以上に手を出す気がそげてしまいました。
s:先手、g:後手、k:攻撃、b:防御…などを解読しないと分からないのでは、
(ゲーム的な本質以前の面で)他の人に弄ってもらうソースとしては厳しいです。
「キー入力が少ない」とか「宣言が面倒」とか言うのはありえない。
変数名を見直しながら、グローバル変数を減らして構造体にまとめるのが最初かなという印象です。