同画像の複数表示(ランダムな値)について質問
-
kiyu
同画像の複数表示(ランダムな値)について質問
初めましてkiyuと申します。
現在課題の提出のためにプログラミングに初挑戦中なのですが如何せんわからないところが出てきましたので今回質問させて頂きました。
・DXライブラリで音ゲー(ビーマニ)のようなものを製作予定(途中完成でも可)
・プログラミング経験は無し(今回が初めて)
・提出までの期間にあまり余裕がないので本来は自分で考え、反映するべきなのですが今回はサンプルとして何かアイディアをいただければ幸いです。
※同じ画像を複数回登場させる(ビーマニで言う落ちてくる画像)ことがイマイチ理解できていません。譜面までは作る予定がなく、ランダムな値で作成予定ですが自分で組んでみたところエラーが出てしまい余計訳がわからなくなったので出来ているところまで載せます。
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode( TRUE ); // ウィンドウモードに設定
DxLib_Init(); // DXライブラリ初期化処理
SetDrawScreen( DX_SCREEN_BACK ); //描画先を裏画面に設定
int Cr;
int a = 1;
int b = 1;
int c = 1;
int d = 1;
int e = 1;
int Random[5];
int Handle; // 画像格納用ハンドル
Handle = LoadGraph( "greenber.png" ); // 画像のロード
Random[0] = GetRand(10);
Random[1] = GetRand(10);
Random[2] = GetRand(10);
Random[3] = GetRand(10);
Random[4] = GetRand(10);
// while(裏画面を表画面に反映, メッセージ処理, 画面クリア)
while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){
DrawGraph( 100, a, Handle, TRUE ); //画像の描画
DrawGraph( 130, b, Handle, TRUE );
DrawGraph( 160, c, Handle, TRUE );
DrawGraph( 190, d, Handle, TRUE );
DrawGraph( 220, e, Handle, TRUE );
a = a + Random[0];
b = b + Random[1];
c = c + Random[2];
d = d + Random[3];
e = e + Random[4];
Cr = GetColor( 255 , 255 , 255 ); // 白色の値を取得y480x640
DrawLine(100 , 0, 100,480 , Cr);
DrawLine(130 , 0, 130,480 , Cr);
DrawLine(160 , 0, 160,480 , Cr);
DrawLine(190 , 0, 190,480 , Cr);
DrawLine(220 , 0, 220,480 , Cr);
DrawLine(250 , 0, 250,480 , Cr);
Cr = GetColor( 255 , 0 , 0 ) ; // 判定ライン
DrawLine(90 , 430, 260 ,430 , Cr ) ;
ScreenFlip(); //裏画面を表画面に反映
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}
現在課題の提出のためにプログラミングに初挑戦中なのですが如何せんわからないところが出てきましたので今回質問させて頂きました。
・DXライブラリで音ゲー(ビーマニ)のようなものを製作予定(途中完成でも可)
・プログラミング経験は無し(今回が初めて)
・提出までの期間にあまり余裕がないので本来は自分で考え、反映するべきなのですが今回はサンプルとして何かアイディアをいただければ幸いです。
※同じ画像を複数回登場させる(ビーマニで言う落ちてくる画像)ことがイマイチ理解できていません。譜面までは作る予定がなく、ランダムな値で作成予定ですが自分で組んでみたところエラーが出てしまい余計訳がわからなくなったので出来ているところまで載せます。
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode( TRUE ); // ウィンドウモードに設定
DxLib_Init(); // DXライブラリ初期化処理
SetDrawScreen( DX_SCREEN_BACK ); //描画先を裏画面に設定
int Cr;
int a = 1;
int b = 1;
int c = 1;
int d = 1;
int e = 1;
int Random[5];
int Handle; // 画像格納用ハンドル
Handle = LoadGraph( "greenber.png" ); // 画像のロード
Random[0] = GetRand(10);
Random[1] = GetRand(10);
Random[2] = GetRand(10);
Random[3] = GetRand(10);
Random[4] = GetRand(10);
// while(裏画面を表画面に反映, メッセージ処理, 画面クリア)
while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){
DrawGraph( 100, a, Handle, TRUE ); //画像の描画
DrawGraph( 130, b, Handle, TRUE );
DrawGraph( 160, c, Handle, TRUE );
DrawGraph( 190, d, Handle, TRUE );
DrawGraph( 220, e, Handle, TRUE );
a = a + Random[0];
b = b + Random[1];
c = c + Random[2];
d = d + Random[3];
e = e + Random[4];
Cr = GetColor( 255 , 255 , 255 ); // 白色の値を取得y480x640
DrawLine(100 , 0, 100,480 , Cr);
DrawLine(130 , 0, 130,480 , Cr);
DrawLine(160 , 0, 160,480 , Cr);
DrawLine(190 , 0, 190,480 , Cr);
DrawLine(220 , 0, 220,480 , Cr);
DrawLine(250 , 0, 250,480 , Cr);
Cr = GetColor( 255 , 0 , 0 ) ; // 判定ライン
DrawLine(90 , 430, 260 ,430 , Cr ) ;
ScreenFlip(); //裏画面を表画面に反映
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}
Re: 同画像の複数表示(ランダムな値)について質問
こちらで実行してみたところ、画像の複数表示については問題なく出来ていますので、音楽ゲーム構築の方に言及してみます。
画像の複数表示について何が具体的に分からないのか教えてくださると答えやすいかと思います。
なお、私もそこまで精通しているわけではないので間違いが含まれる可能性があります。
現在のコードでは、スピードの異なるノート(っていうんでしたっけ?)が5つ同じタイミングで出ているようですが、
私の感覚では、スピードは一定なものがスタンダードだと思います。
なので、スピードは一定にして、出てくるタイミングを管理する方針にしてみたらいかがでしょうか?
構造体はご存知ですか?
例えばですが、使用されているか判断するためのフラグ、ノートの出てくる列、現在位置yを管理する構造体を作ってみるといいと思います。 そして、あらかじめ、落ちてくるタイミングを管理する一次元配列型変数を用いて、いわゆるタイミングリストを作っておきましょう。 あとは、そのリストの時間が来たら、新しいノートをランダムな列に追加していけばいいのではないかと思います。
画像の複数表示について何が具体的に分からないのか教えてくださると答えやすいかと思います。
なお、私もそこまで精通しているわけではないので間違いが含まれる可能性があります。
現在のコードでは、スピードの異なるノート(っていうんでしたっけ?)が5つ同じタイミングで出ているようですが、
私の感覚では、スピードは一定なものがスタンダードだと思います。
なので、スピードは一定にして、出てくるタイミングを管理する方針にしてみたらいかがでしょうか?
構造体はご存知ですか?
例えばですが、使用されているか判断するためのフラグ、ノートの出てくる列、現在位置yを管理する構造体を作ってみるといいと思います。 そして、あらかじめ、落ちてくるタイミングを管理する一次元配列型変数を用いて、いわゆるタイミングリストを作っておきましょう。 あとは、そのリストの時間が来たら、新しいノートをランダムな列に追加していけばいいのではないかと思います。
-
kiyu
Re: 同画像の複数表示(ランダムな値)について質問
回答ありがとうございます。
本来であればタイミングは自分で作るのが正しいとは思いますが如何せん時間がないもので、
今回はランダムにさせて頂いており、構造体に関しましても理解するまでに時間がかかってしまい、間に合わなくなるので今回は無しの方向でお願いします。
で、画像の表示に関しまして私の説明不足でした。
今のままでは一つしかそれぞれに落ちてこないので指定した個数がランダム?な、タイミングで落ちてくるようにしたいのです。
二度手間になってしまい申し訳ございません。
本来であればタイミングは自分で作るのが正しいとは思いますが如何せん時間がないもので、
今回はランダムにさせて頂いており、構造体に関しましても理解するまでに時間がかかってしまい、間に合わなくなるので今回は無しの方向でお願いします。
で、画像の表示に関しまして私の説明不足でした。
今のままでは一つしかそれぞれに落ちてこないので指定した個数がランダム?な、タイミングで落ちてくるようにしたいのです。
二度手間になってしまい申し訳ございません。
Re: 同画像の複数表示(ランダムな値)について質問
指定した個数というのは、それぞれの列に対して、個数を決めるのですか?Priest さんが書きました:今のままでは一つしかそれぞれに落ちてこないので指定した個数がランダム?な、タイミングで落ちてくるようにしたいのです。
一番右の列には合計5個、左隣は4個、…という感じですか?
それとも、全列の合計数を決めるということですか?
-
kiyu
Re: 同画像の複数表示(ランダムな値)について質問
どちらでも構わないとは思ってるんですが・・合計の方が設定が行いやすい?
と勝手に解釈してしまってますすいません・・。
設定しやすい方が私自身理解しやすいのでどちらでも構わないと考えています。
と勝手に解釈してしまってますすいません・・。
設定しやすい方が私自身理解しやすいのでどちらでも構わないと考えています。
Re: 同画像の複数表示(ランダムな値)について質問
ならば、合計の方が簡単です。
まず、4つの変数を用意してみましょう。
ここで、waitはwhile文の最後でデクリメントされていることを前提とします。
アルゴリズムはこんな感じでどうでしょう。
ノードを叩くことはまだですが、これで表示はでき…そう?
試してみてください。
まず、4つの変数を用意してみましょう。
ここで、waitはwhile文の最後でデクリメントされていることを前提とします。
/*
配列Noteについて
[0]=存在フラグ (0=存在しない 1=存在する)
[1]=そのノートの列 (-1で初期化しておく。 0=右端、1=右から2番目、… 、4=左端 のように決めておく)
[2]=ノートの位置y座標
…を10個。(一度に10個まで表示できる)
*/
int Note[3][10];
int Wait; // 待機時間を格納する
int NumNote; // 現在のノート数。
int MaxNote; // 目標ノート数。全部で何個のノードを出すか。
目標ノート数を代入;
最初に変数waitに待機時間をランダム値で入れておく; // wait = GetRand(10); など
While(){
if(待機時間が0になった){
for(10個全てのノート枠){
if(空いているノート枠がある){
そのノートの存在フラグを立てる;
そのノートの列をランダムに代入;
そのノートのy座標を0に初期化;
ノートの総数カウントを1増やす;
変数waitに待機時間をランダムに入れる;
}
}
}
for(全部のノート){
if(そのノートの存在フラグが立っている){
ノートを描写;
そのノートのy座標を1足す;
}
if(そのノートが一番下まで到達した){
存在フラグを降ろす;
}
}
待機時間を1減らす;
if(目標ノート数に達した){
終わり;
}
}
試してみてください。
-
kiyu
Re: 同画像の複数表示(ランダムな値)について質問
返答ありがとうございます。
こんなお時間まで申し訳ございません。
ただ私の知識ではアルゴリズムをまだ理解できていないようです・・・。
待機時間=WaitTime ? とその程度の知識です。
一応音楽の設定までは完了致しましたが、
ノートに関しては私には難しいみたいです(苦笑
課題の提出には多分間に合わない(プログラムが思いつかない)ので今回は諦めて、
個人的にアルゴリズムに関してこれから学ぼうと思います。
こんなお時間まで申し訳ございません。
ただ私の知識ではアルゴリズムをまだ理解できていないようです・・・。
待機時間=WaitTime ? とその程度の知識です。
一応音楽の設定までは完了致しましたが、
ノートに関しては私には難しいみたいです(苦笑
課題の提出には多分間に合わない(プログラムが思いつかない)ので今回は諦めて、
個人的にアルゴリズムに関してこれから学ぼうと思います。
Re: 同画像の複数表示(ランダムな値)について質問
このような感じになれば成功ですね!
Re: 同画像の複数表示(ランダムな値)について質問
おお、そうですか!
今の時期が一番つらい時期ですが、分かってくるとプログラミングが楽しくなって来るので是非頑張ってください!
(追記)課題の提出日はいつですか?
今の時期が一番つらい時期ですが、分かってくるとプログラミングが楽しくなって来るので是非頑張ってください!
(追記)課題の提出日はいつですか?
-
kiyu
Re: 同画像の複数表示(ランダムな値)について質問
確認したところ、
どうやら時間的に今日になってしまったようです笑
なんとか画像のようにまではたどり着きたかったのですが間に合いそうもなさそうです。
専攻科目ではないもので、これから私的に学ぼうと思います。
どうやら時間的に今日になってしまったようです笑
なんとか画像のようにまではたどり着きたかったのですが間に合いそうもなさそうです。
専攻科目ではないもので、これから私的に学ぼうと思います。
Re: 同画像の複数表示(ランダムな値)について質問
>今日
ああw それは厳しいですね。
お時間があればいくらでも教えることができたのですけどね…ザンネン。
この先もプログラミングに興味を持ってくださると幸いです。ではではまたの機会にー。
(追記:) あ、一応、このトピックを終わる際には、解決!ボタンを押しとくといいです。
ああw それは厳しいですね。
お時間があればいくらでも教えることができたのですけどね…ザンネン。
この先もプログラミングに興味を持ってくださると幸いです。ではではまたの機会にー。
(追記:) あ、一応、このトピックを終わる際には、解決!ボタンを押しとくといいです。
-
kiyu
Re: 同画像の複数表示(ランダムな値)について質問
こんなお時間までありがとうございました。
音ゲーはサンプルのプログラムが見当たらないので情報が少ないようですね。
私のように時間に余裕がない人以外は是非参考になさってみてください。
音ゲーはサンプルのプログラムが見当たらないので情報が少ないようですね。
私のように時間に余裕がない人以外は是非参考になさってみてください。
Re: 同画像の複数表示(ランダムな値)について質問
最後に丸投げして終わり!
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){
ChangeWindowMode( TRUE ); // ウィンドウモードに設定
DxLib_Init(); // DXライブラリ初期化処理
SetDrawScreen( DX_SCREEN_BACK );
int Cr;
int NumNote=0;
int MaxNote=25;
int Wait;
int Note[3][30];
Wait=GetRand(5);
for(int i=0;i<10;i++){
Note[0][i]=0;
Note[1][i]=-1;
Note[2][i]=0;
}
// ループ処理
while(ScreenFlip()==0&&ProcessMessage()==0&&ClearDrawScreen()==0){
if(Wait<=0){
for(int i=0;i<10;i++){
if(Note[0][i]==0){
Note[0][i]=1;
Note[1][i]=1+GetRand(4);
Note[2][i]=0;
NumNote++;
Wait=5+GetRand(5);
break;
}
}
}
for(int i=0;i<10;i++){
if(Note[0][i]==1){
DrawLine(70+Note[1][i]*30,Note[2][i],100+Note[1][i]*30,Note[2][i],GetColor(0,252,0));
Note[2][i]+=5;
}
if(Note[2][i]>=430){
Note[0][i]=0;
}
}
Wait--;
Cr = GetColor( 255 , 255 , 255 ); // 白色の値を取得y480x640
DrawLine(100 , 0, 100,480 , Cr);
DrawLine(130 , 0, 130,480 , Cr);
DrawLine(160 , 0, 160,480 , Cr);
DrawLine(190 , 0, 190,480 , Cr);
DrawLine(220 , 0, 220,480 , Cr);
DrawLine(250 , 0, 250,480 , Cr);
Cr = GetColor( 255 , 0 , 0 ) ; // 判定ライン
DrawLine(90 , 430, 260 ,430 , Cr ) ;
ScreenFlip(); //裏画面を表画面に反映
}
DxLib_End(); // 後処理
return 0;
}
Re: 同画像の複数表示(ランダムな値)について質問
著作権のように課題なら大丈夫なんでしょうかね。
譜面マークが画面の上から降りてきて、画面下のマークに重なったときにタイミングよくボタンを押す、というゲームのデザインはコナミが特許を持っています。
譜面マークを一定のタイミングでインクリメントして画面上を動かすアルゴリズムはヤマハが特許を持っています。
音楽に合わせて譜面マークを出現させるなど複合条件になってますが。
どちらも訴訟関係で有名になっているので用心するに越したことはないと思います。
譜面マークが画面の上から降りてきて、画面下のマークに重なったときにタイミングよくボタンを押す、というゲームのデザインはコナミが特許を持っています。
譜面マークを一定のタイミングでインクリメントして画面上を動かすアルゴリズムはヤマハが特許を持っています。
音楽に合わせて譜面マークを出現させるなど複合条件になってますが。
どちらも訴訟関係で有名になっているので用心するに越したことはないと思います。