メニューとかについて。
Re:メニューとかについて。
アイテムが落ちてきてそれを制限時間内に決まった数キャッチできればステージクリアとなるタイプのゲームです。
(管理人による補足:このコメントは成りすましのようです)
(管理人による補足:このコメントは成りすましのようです)
Re:メニューとかについて。
付けるというのは構造の話でしょうか?
関数の中で関数を呼び、その関数の中でさらに関数を呼ぶ
という処理を繰り返して作ればいいんじゃないでしょうか?
それともメニューやリザルトを表示する処理の中身ですか?
ちょっと長いですが私のコードでよければ提供しますけど・・
関数の中で関数を呼び、その関数の中でさらに関数を呼ぶ
という処理を繰り返して作ればいいんじゃないでしょうか?
それともメニューやリザルトを表示する処理の中身ですか?
ちょっと長いですが私のコードでよければ提供しますけど・・
Re:メニューとかについて。
シーケンス遷移であれば、自分は以下のようにswitch文で分けたりしました。 ----------------------------------------------------------- StateID{ STATE_TITLE, STATE_MENU, STATE_PLAY, STATE_RANK }; StateID GameState = STATE_TITLE; void Title(void) { if(//エンターが押されたら) GameState = STATE_MENU; } void Menu(void) { //様々な処理 } //****************************** //その他、Play(),Rank()なども作る //****************************** void GameMain(HWND hWnd) { clock_t end = 0; while(1){ end = clock() + 16; switch(GameState) { case STATE_TITLE: Title(); break; case STATE_MENU: Menu(); break; case STATE_PLAY: Play(); break; case STATE_RANK: Rank(); break; default:break; } InvalidateRect(hWnd, NULL, FALSE); while(clock() < end_time)Sleep(1); } } -----------------------------------------------------------
Re:メニューとかについて。
えーと、あと質問したい内容は処理の中身ですね。
龍神録プログラミングの館ではゲームスタートの瞬間に始まって終了するための処理も書かれていませんでしたので…
龍神録プログラミングの館ではゲームスタートの瞬間に始まって終了するための処理も書かれていませんでしたので…
Re:むぅ…
メニュー画面
リザルト
ランキング
などについては
現在のゲームの状態を表すステータスを変数で用意しておく。
ゲーム開始(プログラム起動時)は0
メニュー(タイトル)画面=1
ゲーム画面2
リザルト3
ランキング4
などと決めておきます。(もちろん値は自由)
conioさんのように文字で置き換えておくと見やすくてよいでしょう。
あとはそのステータスをみてswitch文やif文などでそれぞれの処理(関数)へ飛ばしてあげればいいでしょう。
そのswitch文を書く場所は・・・まあ主にゲームのメイン関数になるでしょうか。
最初は0だからメニュー画面へ
メニュー画面ではゲーム開始が選ばれたらステータスを2に変更して戻る。
ランキングが選ばれたらステータスを4に変更して戻る。
などステータスの変更に留めておく。
メニュー画面処理が終わったらメイン関数に戻るので、きちんとループしていれば
改めてステータスにしたがってゲーム開始なり、ランキング画面になり飛ばせるでしょう。
というのがconioさんが書かれたプログラムの説明になります。
リザルト
ランキング
などについては
現在のゲームの状態を表すステータスを変数で用意しておく。
ゲーム開始(プログラム起動時)は0
メニュー(タイトル)画面=1
ゲーム画面2
リザルト3
ランキング4
などと決めておきます。(もちろん値は自由)
conioさんのように文字で置き換えておくと見やすくてよいでしょう。
あとはそのステータスをみてswitch文やif文などでそれぞれの処理(関数)へ飛ばしてあげればいいでしょう。
そのswitch文を書く場所は・・・まあ主にゲームのメイン関数になるでしょうか。
最初は0だからメニュー画面へ
メニュー画面ではゲーム開始が選ばれたらステータスを2に変更して戻る。
ランキングが選ばれたらステータスを4に変更して戻る。
などステータスの変更に留めておく。
メニュー画面処理が終わったらメイン関数に戻るので、きちんとループしていれば
改めてステータスにしたがってゲーム開始なり、ランキング画面になり飛ばせるでしょう。
というのがconioさんが書かれたプログラムの説明になります。
Re:むぅ…
--------------------------------------------------------------------------- #include "DxLib.h" char Key[256]; enum StateID{ STATE_TITLE, STATE_MENU, STATE_PLAY, STATE_PAUSE, STATE_RANK, }; StateID GameState = STATE_TITLE; int Color; void Title(void) { DrawString( 0 , 0 , "タイトル画面" , Color ); DrawString( 0 , 50 , "Enterでメニュー画面に行きます。" , Color ); if(CheckHitKey(KEY_INPUT_RETURN)) { GameState = STATE_MENU; } } void Menu(void) { DrawString( 20 , 0 , "メニュー画面(はじめから)" , Color ); DrawString( 20 , 50 , " P でプレイ画面に行きます。" , Color ); if(CheckHitKey(KEY_INPUT_P)) { GameState = STATE_PLAY; } } void Play(void) { static int zanki = 250; DrawFormatString( 0, 0, Color, "残機:%d ", zanki); if((zanki -= 1) <= 0){ zanki = 250; GameState = STATE_PAUSE; } } void Pause(void) { static int temp = 200; DrawString( 20 , 0 , "残機が0になりました。" , Color ); DrawString( 20 , 40 , "しばらくするとメニュー画面に戻ります。" , Color ); if((temp -= 1) <= 0){ temp = 200; GameState = STATE_MENU; } } void Rank(void) { } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ ChangeWindowMode( TRUE ) ; // ウィンドウモードに変更 if( DxLib_Init() == -1 ) return -1 ; // DXライブラリ初期化処理 SetDrawScreen( DX_SCREEN_BACK ) ; // 描画先を裏画面に設定 Color = GetColor(255,255,255); while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]) { ClearDrawScreen(); // 裏画面のデータを全て削除 switch(GameState) { case STATE_TITLE: Title(); break; case STATE_MENU: Menu(); break; case STATE_PLAY: Play(); break; case STATE_PAUSE:Pause(); break; case STATE_RANK: Rank(); break; default:break; } ScreenFlip(); } DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 } --------------------------------------------------------------------------- 多分、これで動くはずです。(DXライブラリver) 残機が0になる処理は、適当にデクリメントしてます。 "動くプログラムそのもの"なので、これで「分からない」と言われると、アドバイスしようがないです。
Re:むぅ…
コピペ結果↓
(66) : error C3872:'0x3000': この文字を識別子で使用することはできません
(66) : error C3861:' ChangeWindowMode': 識別子が見つかりませんでした
(71) : error C3872:'0x3000': 構文エラー : ';'が、識別子' 'の前に必要です。
(70) : error C3872:'0x3000': ' while': 識別子が見つかりませんでした
(71) : error C3872:'0x3000': ' ': 定義されていない識別子です
等102個のエラーが…orz
(66) : error C3872:'0x3000': この文字を識別子で使用することはできません
(66) : error C3861:' ChangeWindowMode': 識別子が見つかりませんでした
(71) : error C3872:'0x3000': 構文エラー : ';'が、識別子' 'の前に必要です。
(70) : error C3872:'0x3000': ' while': 識別子が見つかりませんでした
(71) : error C3872:'0x3000': ' ': 定義されていない識別子です
等102個のエラーが…orz
Re:むぅ…
エラー増えました(泣
effect.obj : error LNK2001: 外部シンボル ""int * img_eff_bom" (?img_eff_bom@@3PAHA)" は未解決です。
load.obj : error LNK2001: 外部シンボル ""int * img_eff_bom" (?img_eff_bom@@3PAHA)" は未解決です。
key.obj : error LNK2001: 外部シンボル ""struct configpad_t configpad" (?configpad@@3Uconfigpad_t@@A)" は未解決です。
graph.obj : error LNK2001: 外部シンボル ""struct configpad_t configpad" (?configpad@@3Uconfigpad_t@@A)" は未解決です。
cshot.obj : error LNK2001: 外部シンボル ""struct configpad_t configpad" (?configpad@@3Uconfigpad_t@@A)" は未解決です。
boss_shotH.obj : error LNK2001: 外部シンボル ""struct configpad_t configpad" (?configpad@@3Uconfigpad_t@@A)" は未解決です。
calc.obj : error LNK2001: 外部シンボル ""struct configpad_t configpad" (?configpad@@3Uconfigpad_t@@A)" は未解決です。
char.obj : error LNK2001: 外部シンボル ""struct configpad_t configpad" (?configpad@@3Uconfigpad_t@@A)" は未解決です。
effect.obj : error LNK2001: 外部シンボル ""struct configpad_t configpad" (?configpad@@3Uconfigpad_t@@A)" は未解決です。
ini.obj : error LNK2001: 外部シンボル ""struct configpad_t configpad" (?configpad@@3Uconfigpad_t@@A)" は未解決です。
等150個超のエラーorz
effect.obj : error LNK2001: 外部シンボル ""int * img_eff_bom" (?img_eff_bom@@3PAHA)" は未解決です。
load.obj : error LNK2001: 外部シンボル ""int * img_eff_bom" (?img_eff_bom@@3PAHA)" は未解決です。
key.obj : error LNK2001: 外部シンボル ""struct configpad_t configpad" (?configpad@@3Uconfigpad_t@@A)" は未解決です。
graph.obj : error LNK2001: 外部シンボル ""struct configpad_t configpad" (?configpad@@3Uconfigpad_t@@A)" は未解決です。
cshot.obj : error LNK2001: 外部シンボル ""struct configpad_t configpad" (?configpad@@3Uconfigpad_t@@A)" は未解決です。
boss_shotH.obj : error LNK2001: 外部シンボル ""struct configpad_t configpad" (?configpad@@3Uconfigpad_t@@A)" は未解決です。
calc.obj : error LNK2001: 外部シンボル ""struct configpad_t configpad" (?configpad@@3Uconfigpad_t@@A)" は未解決です。
char.obj : error LNK2001: 外部シンボル ""struct configpad_t configpad" (?configpad@@3Uconfigpad_t@@A)" は未解決です。
effect.obj : error LNK2001: 外部シンボル ""struct configpad_t configpad" (?configpad@@3Uconfigpad_t@@A)" は未解決です。
ini.obj : error LNK2001: 外部シンボル ""struct configpad_t configpad" (?configpad@@3Uconfigpad_t@@A)" は未解決です。
等150個超のエラーorz
Re:むぅ…
>エラーはなくなりましたが、残機0になっても俺つえー状態が解消されませんorz
意味が分からないです。俺つえー状態って??
急いでいるのは分かりますが、もう少し分かりやすい表現をして下さい。
「今日中にカタチを~」というのもそちらの都合というだけで、善意で回答してくださっているということを忘れないで下さい。回答者に義務はありません。提供したコードについても完全にフォローしなければいけないということではありません。もちろんコードが間違っていれば、提供した側も気持ちがいいものではありませんので、ある程度のフォローはあるでしょうが。
全体的に、質問の意図(正確な状況、実現したいこと、問題点)が分かりにくい文章のようです。
ご自分が分かっていることでも画面の向こう側にいる人がおなじ思考回路を持っているわけではありませんので、そのあたりを踏まえてご質問願います。
意味が分からないです。俺つえー状態って??
急いでいるのは分かりますが、もう少し分かりやすい表現をして下さい。
「今日中にカタチを~」というのもそちらの都合というだけで、善意で回答してくださっているということを忘れないで下さい。回答者に義務はありません。提供したコードについても完全にフォローしなければいけないということではありません。もちろんコードが間違っていれば、提供した側も気持ちがいいものではありませんので、ある程度のフォローはあるでしょうが。
全体的に、質問の意図(正確な状況、実現したいこと、問題点)が分かりにくい文章のようです。
ご自分が分かっていることでも画面の向こう側にいる人がおなじ思考回路を持っているわけではありませんので、そのあたりを踏まえてご質問願います。
Re:むぅ…
いやだから何が分からないのかが不明瞭なんですよ。
1.自分で作ったソースは見せられないのですか?
零崎虚識さんは自作している部分を全く提示してないから閲覧者は問題点が見えません、分かりません
2.conioさんの提示したソースはどのように活用したのですか?
コピペしただけ?
コピペして自作部分を追加?
参考にして自作部分に追加?
ソースが出てるのにそれをどう使ったのか分からないと現状を把握出来ません。
3.最終的に何がしたいのか?
おそらく龍神録のソースを元に改変してるんだと思いますが
どういう改変をして零崎虚識さんの言う「ある程度のカタチ」なのか
何が出来ていて何が出来ていないのか。日本語で良いので示してください。
4.C言語の理解度を教えてください
教える側も質問者の理解度に応じて詳細に書いたり簡易に書いたりします。
例えば「No:34921」のconioさんの言ってる内容をソースでどこを変えれば良いとのか分かるか等
極端に言えば龍神録を通じてC言語覚えたいと思います、現在は基本もほとんど分かっていません。
でも良いと思います。
1.自分で作ったソースは見せられないのですか?
零崎虚識さんは自作している部分を全く提示してないから閲覧者は問題点が見えません、分かりません
2.conioさんの提示したソースはどのように活用したのですか?
コピペしただけ?
コピペして自作部分を追加?
参考にして自作部分に追加?
ソースが出てるのにそれをどう使ったのか分からないと現状を把握出来ません。
3.最終的に何がしたいのか?
おそらく龍神録のソースを元に改変してるんだと思いますが
どういう改変をして零崎虚識さんの言う「ある程度のカタチ」なのか
何が出来ていて何が出来ていないのか。日本語で良いので示してください。
4.C言語の理解度を教えてください
教える側も質問者の理解度に応じて詳細に書いたり簡易に書いたりします。
例えば「No:34921」のconioさんの言ってる内容をソースでどこを変えれば良いとのか分かるか等
極端に言えば龍神録を通じてC言語覚えたいと思います、現在は基本もほとんど分かっていません。
でも良いと思います。
Re:むぅ…
>>やそさん
敵の弾などに当たってやられる事を"ピチュる"と表現したりするようです。
確か"東方"というシューティングゲームが元だったと思います。
(本題と離れていきそうだったので、あえて再三の指摘はしませんでしたが)
>>しかしボスのスペカの体力設定が未だに……
残念ながらゲームの仕様や内部構造や用語は分からないので、どうしようもないです。
ひとり言なのか、質問なのかも曖昧です。
あと、何で今日中に形にしないといけないのかは知りませんが、どうにも無理があるように見受けられます。
-----------------------------------
①就職活動で企業に提出する
②学校の課題で出さなければならない
③友人などに、遊ばせる約束をした
-----------------------------------
色んな理由が考えられますが、明らかにゲームを制作するだけの経験が不足しています。
"残機の減らし方が分からない"(普通の引き算)という質問もありました。
どれくらいの能力を要求されているのかは分かりませんが、
「単純にゲームとして遊べるものを提出する」
という事であれば、コンソールアプリケーションのものでも良いのでは無いでしょうか。
どうしても、画像なども使ったゲームを作らなければならないと言うのであれば、
今回は、プログラムの把握・理解は後回しにして、やっつけ作業をせざるを得ないですね。
(好ましくは無いのですが)
敵の弾などに当たってやられる事を"ピチュる"と表現したりするようです。
確か"東方"というシューティングゲームが元だったと思います。
(本題と離れていきそうだったので、あえて再三の指摘はしませんでしたが)
>>しかしボスのスペカの体力設定が未だに……
残念ながらゲームの仕様や内部構造や用語は分からないので、どうしようもないです。
ひとり言なのか、質問なのかも曖昧です。
あと、何で今日中に形にしないといけないのかは知りませんが、どうにも無理があるように見受けられます。
-----------------------------------
①就職活動で企業に提出する
②学校の課題で出さなければならない
③友人などに、遊ばせる約束をした
-----------------------------------
色んな理由が考えられますが、明らかにゲームを制作するだけの経験が不足しています。
"残機の減らし方が分からない"(普通の引き算)という質問もありました。
どれくらいの能力を要求されているのかは分かりませんが、
「単純にゲームとして遊べるものを提出する」
という事であれば、コンソールアプリケーションのものでも良いのでは無いでしょうか。
どうしても、画像なども使ったゲームを作らなければならないと言うのであれば、
今回は、プログラムの把握・理解は後回しにして、やっつけ作業をせざるを得ないですね。
(好ましくは無いのですが)
Re:むぅ…
>>すずめさん
こんにちは
それで、問題ないと思います。
ウィンドウの×を押した時と同じように消えると思います。
あと補足なのですが、同じキーで複数の状態遷移を通過するときは、
上記のプログラムでは、不都合があると思います。
例
【タイトル】 (Enter)⇒ 【メニュー】 (Enter)⇒ 【ステージ選択】 (Enter)⇒ 【ゲーム開始】
このように遷移するようにしている場合、Enterを押すと一瞬でゲームが始まります。
(何度もループが実行されているため)
なので、この場合は時間を計ったり、ループが何回か実行されたらキー入力を受け付ける
というような処理にする必要があります。
こんにちは
それで、問題ないと思います。
ウィンドウの×を押した時と同じように消えると思います。
あと補足なのですが、同じキーで複数の状態遷移を通過するときは、
上記のプログラムでは、不都合があると思います。
例
【タイトル】 (Enter)⇒ 【メニュー】 (Enter)⇒ 【ステージ選択】 (Enter)⇒ 【ゲーム開始】
このように遷移するようにしている場合、Enterを押すと一瞬でゲームが始まります。
(何度もループが実行されているため)
なので、この場合は時間を計ったり、ループが何回か実行されたらキー入力を受け付ける
というような処理にする必要があります。
Re:むぅ…
>「残機0になっても俺つえー状態が解消されない」というのは
>キャラに弾が当たってパワーアップアイテムが放出してるのにもかかわらず
>パワーの数字が減らなくて困ってるってことなんじゃないですか?
「困ってる」ことは分かるんですが、一体全体どういう状況で、どうなって欲しくて、
どういうエラーが出ているのかいないのか。
質問の文章からではちんぷんかんぷんでございます(笑)
通りすがりさんの解釈も間違っていないと思います。
そういう状況なのかなーとも思うんですけど・・・
「残機0になっても俺つえー状態が解消されない」
とか「ピチュ」とかでは
相手に正確な状況、意図が伝わらないんじゃないかと思ってます。
私は「東方~」はやったことありませんので、そのへんの方言はよく分かりません^^;
(なんとなくニュアンスで分かりそうですが)
>キャラに弾が当たってパワーアップアイテムが放出してるのにもかかわらず
>パワーの数字が減らなくて困ってるってことなんじゃないですか?
「困ってる」ことは分かるんですが、一体全体どういう状況で、どうなって欲しくて、
どういうエラーが出ているのかいないのか。
質問の文章からではちんぷんかんぷんでございます(笑)
通りすがりさんの解釈も間違っていないと思います。
そういう状況なのかなーとも思うんですけど・・・
「残機0になっても俺つえー状態が解消されない」
とか「ピチュ」とかでは
相手に正確な状況、意図が伝わらないんじゃないかと思ってます。
私は「東方~」はやったことありませんので、そのへんの方言はよく分かりません^^;
(なんとなくニュアンスで分かりそうですが)
Re:むぅ…
俺つえー状態・・・。なんという個性的な説明^^;
そうですね~龍神録プログラミングの館は色々と中途ハンパですからねぇ(汗
実は本家龍神録とコード違いますし^^;
一から解説するのに元のコードをバラバラにする方がややこしかったので、
いっそのことわかりやすそうなコードで一から作りました。
そのせいで、微妙にところどころ違うんですが・・。
>このように遷移するようにしている場合、Enterを押すと一瞬でゲームが始まります。
ご存知かとは思いますが、一応このような関数を作れば実装出来ること、コメ残しておきます。
http://dixq.net/g/#40
そうですね~龍神録プログラミングの館は色々と中途ハンパですからねぇ(汗
実は本家龍神録とコード違いますし^^;
一から解説するのに元のコードをバラバラにする方がややこしかったので、
いっそのことわかりやすそうなコードで一から作りました。
そのせいで、微妙にところどころ違うんですが・・。
>このように遷移するようにしている場合、Enterを押すと一瞬でゲームが始まります。
ご存知かとは思いますが、一応このような関数を作れば実装出来ること、コメ残しておきます。
http://dixq.net/g/#40
~から、~まで
はじめまして。最近C言語を習い始めたばかりの初心者ですがお願いします。
今、学校でゲームを作っているのですが「~から、~まで」の効率良い作り方がわかりません。
10から15の値を出したいのです。
自分がやった感じは
そこで
こういう風でも良いのですが、*の所で「~から」というの制御できませんでしょうか?
今、学校でゲームを作っているのですが「~から、~まで」の効率良い作り方がわかりません。
10から15の値を出したいのです。
自分がやった感じは
int r; r = rand()%15; printf("ランダム=%d\n",r)これだと15までの値しかでません。
そこで
int r; r = rand()15;* if(r >= 10){ printf("ランダム=%d\n",r); }という風にif文でやってみました。
こういう風でも良いのですが、*の所で「~から」というの制御できませんでしょうか?
Re:~から、~まで
私も皆さんの方法でやると思いますが、一応参考に
ttp://homepage3.nifty.com/mmgames/c_guide/21-02.html#S3
ttp://homepage3.nifty.com/mmgames/c_guide/21-02.html#S3
Re:~から、~まで
----------------------------------
int r;
r = rand()%15;
printf("ランダム=%d\n",r)
これだと15までの値しかでません。
----------------------------------
いや、15の値は出ないですよ。
出るのは、0~14までの値です。
---------------------
int r;
r = 10 + rand() % 6;
---------------------
10~15までの値を出したいのであれば、
こうすれば良いと思います。
「10 + 0~5のどれか」 と考えれば分かりやすいのではないかな、と。
int r;
r = rand()%15;
printf("ランダム=%d\n",r)
これだと15までの値しかでません。
----------------------------------
いや、15の値は出ないですよ。
出るのは、0~14までの値です。
---------------------
int r;
r = 10 + rand() % 6;
---------------------
10~15までの値を出したいのであれば、
こうすれば良いと思います。
「10 + 0~5のどれか」 と考えれば分かりやすいのではないかな、と。
Re:~から、~まで
MNSさん、チルチルさん、pookaさん、conioさんありがとうございます!
こうすれば良かったのですね。ありがとうございます。
<conioさん
すみません。勘違いをしていました。
こうすれば良かったのですね。ありがとうございます。
<conioさん
すみません。勘違いをしていました。