人生ゲームっぽいゲームを作ってます
人生ゲームっぽいゲームを作ってます
初めての投稿です。
DXライブラリで人生ゲームで使うルーレットを作ってるんですけど一定の回転しかしなくて、加速しません。
「 += 」の使い方は、あってますか?
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){
SetGraphMode(800, 600, 32),
ChangeWindowMode(TRUE),
DxLib_Init(),
SetDrawScreen(DX_SCREEN_BACK);
int roulette = LoadGraph("res/roulette.png");//画像
float r = 0;
while (ScreenFlip() == 0
&& ProcessMessage() == 0
&& ClearDrawScreen() == 0){
r += 0.01f;//段々早くなる
DrawRotaGraph(400, 300, 1.0, r, roulette, TRUE); //画像の描画
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}
DXライブラリで人生ゲームで使うルーレットを作ってるんですけど一定の回転しかしなくて、加速しません。
「 += 」の使い方は、あってますか?
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){
SetGraphMode(800, 600, 32),
ChangeWindowMode(TRUE),
DxLib_Init(),
SetDrawScreen(DX_SCREEN_BACK);
int roulette = LoadGraph("res/roulette.png");//画像
float r = 0;
while (ScreenFlip() == 0
&& ProcessMessage() == 0
&& ClearDrawScreen() == 0){
r += 0.01f;//段々早くなる
DrawRotaGraph(400, 300, 1.0, r, roulette, TRUE); //画像の描画
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}
Re: 人生ゲームっぽいゲームを作ってます
コードを貼る場合はcodeタグでくくってくださると読みやすくて助かります。
フォーラムルールをお読みください。
同じ数値を足し続けているので一定の回転しかしないと思います。
printfDx()やDrawFormatString()などで数値を見てみるとわかると思います。
フォーラムルールをお読みください。
同じ数値を足し続けているので一定の回転しかしないと思います。
printfDx()やDrawFormatString()などで数値を見てみるとわかると思います。
初心者です
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 人生ゲームっぽいゲームを作ってます
速度と加速度が違うように、角速度と角加速度も別のものです。
今の処理は一定速度の角速度で回転角の処理を行っています。
今の処理は一定速度の角速度で回転角の処理を行っています。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 人生ゲームっぽいゲームを作ってます
ありがとうございます
前のコードをそのままコピーしました。
えっと、とりあえず「 += 」 のところを「 ++ 」に変えてみたんですけど上手くいきません
どうすればできますか?
前のコードをそのままコピーしました。
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){
SetGraphMode(800, 600, 32),
ChangeWindowMode(TRUE),
DxLib_Init(),
SetDrawScreen(DX_SCREEN_BACK);
int anime = LoadGraph("res/roulette.png");//画像
float r = 0.01f;
while (ScreenFlip() == 0
&& ProcessMessage() == 0
&& ClearDrawScreen() == 0){
r += 0.01f;//加速する
DrawRotaGraph(400, 300, 1.0, mr, anime, TRUE); //画像の描画
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}
どうすればできますか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 人生ゲームっぽいゲームを作ってます
まず理解すべきことがあります。
一定時間辺りに同じ角度で角度が変われば、それは加速も減速もしていません。等速の回転運動です。
加速や減速をするためには、一定時間毎の角度の値が変わらないといけません。
rは現在の角度ですので、それに定数を足すことは等速の回転運動になります。
こういう物を作るには物理・数学的なイメージの理解は避けれないので考えてみてください。
その上でわからないことを質問されると良いと思います。
※ 図を書いてみるのも理解の助けになると思います。
一定時間辺りに同じ角度で角度が変われば、それは加速も減速もしていません。等速の回転運動です。
加速や減速をするためには、一定時間毎の角度の値が変わらないといけません。
rは現在の角度ですので、それに定数を足すことは等速の回転運動になります。
こういう物を作るには物理・数学的なイメージの理解は避けれないので考えてみてください。
その上でわからないことを質問されると良いと思います。
※ 図を書いてみるのも理解の助けになると思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 人生ゲームっぽいゲームを作ってます
・No:1のコードとは違うものが貼ってあるようですが、「前のコード」とは何ですか?ハンディー さんが書きました:ありがとうございます
前のコードをそのままコピーしました。
(略)
えっと、とりあえず「 += 」 のところを「 ++ 」に変えてみたんですけど上手くいきません
・mrの定義が提示されたコード中に無いので、これだけではコンパイルが通らないと思います。
・提示されたコード中に「 ++ 」が見当たりません。
まず正しい現状のコードを貼っていただけますか?ハンディー さんが書きました:どうすればできますか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 人生ゲームっぽいゲームを作ってます
返事が遅くなってすみません
現状のコードがこんな感じです
えっと、回転の速さが変わってますが、思った動きがしません。
現状のコードがこんな感じです
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){
SetGraphMode(800, 600, 32),
ChangeWindowMode(TRUE),
DxLib_Init(),
SetDrawScreen(DX_SCREEN_BACK);
int anime = LoadGraph("res/roulette.png");//画像
float r = 0.0f;
float mr = 0.01f;
while (ScreenFlip() == 0
&& ProcessMessage() == 0
&& ClearDrawScreen() == 0){
r += (r + mr);//回転
DrawRotaGraph(400, 300, 1.0, r, anime, TRUE); //画像の描画
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 人生ゲームっぽいゲームを作ってます
>えっと、回転の速さが変わってますが、思った動きがしません。
思った動きを理解しているのではハンディーさんだけですので、それを説明しないとアドバイスも難しいです。
とりあえず現状は角度に角度を足しているのででたらめな動きに見えるのではないでしょうか?
私のアドバイスにコメントがもらえないので、何処でつまずいているか良く分かりません。
理論面なのか、コードにすること自体なのかも把握できないです。
思った動きを理解しているのではハンディーさんだけですので、それを説明しないとアドバイスも難しいです。
とりあえず現状は角度に角度を足しているのででたらめな動きに見えるのではないでしょうか?
私のアドバイスにコメントがもらえないので、何処でつまずいているか良く分かりません。
理論面なのか、コードにすること自体なのかも把握できないです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 人生ゲームっぽいゲームを作ってます
すみません、softya(ソフト屋)さん
僕が思っている動きは人生ゲームのルーレットを手で回している感じ動きをしたいんです
理論的には分かっているのですが、コードにすることがわかりません
僕が思っている動きは人生ゲームのルーレットを手で回している感じ動きをしたいんです
理論的には分かっているのですが、コードにすることがわかりません
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 人生ゲームっぽいゲームを作ってます
>僕が思っている動きは人生ゲームのルーレットを手で回している感じ動きをしたいんです
言いたいことは分かりますが、人生ゲームのルーレットは単純な加速→減速と言う動きでもないんです。
あのバネというか、引っ掛かりが動きの肝なんですが、そこも再現するのでしょうか?
こういう状態を仕様が明確ではない状態と言って、個人個人が思っていることが違うので共同作業すると思ったものがと違う物が出来上がる典型的なパターンになります。
掲示板でも質問も同様で、細かく正確に仕様を伝える事をしないと望んだアドバイスは得られない事になります。
>理論的には分かっているのですが、コードにすることがわかりません
では、回転数は秒間何回転でしょうか?
1.初期の秒間回転数
2.加速時の秒間回転数の増加割合と加速時間
3.減速時の秒間回転数の減速割合。
は書き出せますか?
で肝心のプログラムですが
r += (r + mr);//回転
で、この式に込めた意味は何でしょうか?
理論とプログラムとの間が何処が分からず埋められないのか分からないとアドバイスが難しいので説明をお願いできますか。
ベースに考えた数式とかがあればお願いします。
言いたいことは分かりますが、人生ゲームのルーレットは単純な加速→減速と言う動きでもないんです。
あのバネというか、引っ掛かりが動きの肝なんですが、そこも再現するのでしょうか?
こういう状態を仕様が明確ではない状態と言って、個人個人が思っていることが違うので共同作業すると思ったものがと違う物が出来上がる典型的なパターンになります。
掲示板でも質問も同様で、細かく正確に仕様を伝える事をしないと望んだアドバイスは得られない事になります。
>理論的には分かっているのですが、コードにすることがわかりません
では、回転数は秒間何回転でしょうか?
1.初期の秒間回転数
2.加速時の秒間回転数の増加割合と加速時間
3.減速時の秒間回転数の減速割合。
は書き出せますか?
で肝心のプログラムですが
r += (r + mr);//回転
で、この式に込めた意味は何でしょうか?
理論とプログラムとの間が何処が分からず埋められないのか分からないとアドバイスが難しいので説明をお願いできますか。
ベースに考えた数式とかがあればお願いします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 人生ゲームっぽいゲームを作ってます
softya(ソフト屋)さん
お返事ありがとうございます
アドバイスをいただいているのですが、まだまだ勉強不足です。
すみません
お返事ありがとうございます
僕は単純な加速から減速の回転をしたいだけなんです。細かいことは難しいのでやりません言いたいことは分かりますが、人生ゲームのルーレットは単純な加速→減速と言う動きでもないんです。
あのバネというか、引っ掛かりが動きの肝なんですが、そこも再現するのでしょうか?
こういう状態を仕様が明確ではない状態と言って、個人個人が思っていることが違うので共同作業すると思ったものがと違う物が出来上がる典型的なパターンになります。
すみません、わかりませんでは、回転数は秒間何回転でしょうか?
1.初期の秒間回転数
2.加速時の秒間回転数の増加割合と加速時間
3.減速時の秒間回転数の減速割合。
は書き出せますか?
プログラムの方は、とりあえず動かすことをしてたので、意味はありませんで肝心のプログラムですが
r += (r + mr);//回転
で、この式に込めた意味は何でしょうか?
理論とプログラムとの間が何処が分からず埋められないのか分からないとアドバイスが難しいので説明をお願いできますか
アドバイスをいただいているのですが、まだまだ勉強不足です。
すみません
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 人生ゲームっぽいゲームを作ってます
ちょっと時間が取れないので返答はあとになります。
> では、回転数は秒間何回転でしょうか?
ここはプログラム関係ないので考えてみてください。
あとで調整するので、とりあえず値で良いです。
ゲームプログラミングはイメージを形にするものなので、形に落としこむ過程をすっ飛ばすことは出来ませんよ。
> では、回転数は秒間何回転でしょうか?
ここはプログラム関係ないので考えてみてください。
あとで調整するので、とりあえず値で良いです。
ゲームプログラミングはイメージを形にするものなので、形に落としこむ過程をすっ飛ばすことは出来ませんよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 人生ゲームっぽいゲームを作ってます
合っていますが、この場合それが分かって役に立つのでしょうか?
どう応用されるおつもりですか。
【補足】
学校で勉強しているものは、必要に応じで応用できるように基礎的な理論を勉強してます。
日常的なものを数式で表現したり、実はこういう原理で動いているんだよとか学びます。
それをどう応用するのは、みなさんが考えなければいけないことです。
くれぐれも勉強のための勉強では無く、応用のための勉強だということを忘れないで下さい。
どう応用されるおつもりですか。
【補足】
学校で勉強しているものは、必要に応じで応用できるように基礎的な理論を勉強してます。
日常的なものを数式で表現したり、実はこういう原理で動いているんだよとか学びます。
それをどう応用するのは、みなさんが考えなければいけないことです。
くれぐれも勉強のための勉強では無く、応用のための勉強だということを忘れないで下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 人生ゲームっぽいゲームを作ってます
>r += 0.01f;
現状,とりあえずコレで 「等速回転」 しているのですよね?
↓
では,ここを仮に
r += 0.02f;
と変更したら,変更前の倍の回転速度で等速回転するだろう ということはOKですか?
↓
同様に,
r += 0.03f;
とすれば,最初の3倍の回転速度で等速回転することになるでしょう.
↓
ということは…
この式の右辺に用いられる値をプログラム中で動的に変化させたとしたら
各時刻における回転速度はその変化に応じて変わりますよね.
例えば右辺の値をだんだん大きくしていけば,回転速度は加速していきますよね.
逆に,だんだん減らしていけば,減速になる.
(ということがイメージできているのでしょうか?)
現状,とりあえずコレで 「等速回転」 しているのですよね?
↓
では,ここを仮に
r += 0.02f;
と変更したら,変更前の倍の回転速度で等速回転するだろう ということはOKですか?
↓
同様に,
r += 0.03f;
とすれば,最初の3倍の回転速度で等速回転することになるでしょう.
↓
ということは…
この式の右辺に用いられる値をプログラム中で動的に変化させたとしたら
各時刻における回転速度はその変化に応じて変わりますよね.
例えば右辺の値をだんだん大きくしていけば,回転速度は加速していきますよね.
逆に,だんだん減らしていけば,減速になる.
(ということがイメージできているのでしょうか?)
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 人生ゲームっぽいゲームを作ってます
そうですね。
応用できるというのは、例えば次の問題が解けますか?
【問題】
現在秒速5回転で回転しています。
10秒後に等加速度で秒速10回転にしたいとします。
さて、1秒間にどれだけづつ回転数を上げればよいでしょうか?
このとき、1/60秒辺りの回転角を、それぞれ(現在の回転角、10秒後の回転角、1/60秒辺りに増加する回転角)を答えて下さい。
応用できるというのは、例えば次の問題が解けますか?
【問題】
現在秒速5回転で回転しています。
10秒後に等加速度で秒速10回転にしたいとします。
さて、1秒間にどれだけづつ回転数を上げればよいでしょうか?
このとき、1/60秒辺りの回転角を、それぞれ(現在の回転角、10秒後の回転角、1/60秒辺りに増加する回転角)を答えて下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 人生ゲームっぽいゲームを作ってます
取り敢えず、これを実行してみて下さい。
細かいミスがありましても、ご容赦下さい。
ルーレットに関しては、徐々に加速したり、妙な開始・停止アクションがあったり、予め停止位置を決める等の処理はありません。
左回転ルーレットは、右回転ルーレットの逆の事をすれば良いので、応用して簡単に追加できると思います。
ここから先は、ご自身で改造してお楽しみ下さい。
ご健闘、お祈り申し上げます。
#include "DxLib.h"
#define PAI 3.14159265f //円周率
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){
SetGraphMode(800, 600, 32),
ChangeWindowMode(TRUE),
DxLib_Init(),
SetDrawScreen(DX_SCREEN_BACK);
int anime = LoadGraph("res/roulette.png"); //画像ハンドル読み込み
float r = 0.0f; //描画角度
float mr = 0.0f; //回転速度[/frame]
float ur = 0.01f; //回転加速度
BOOL roulette_r = FALSE; //右回転ルーレット状態フラグ
int fontcolor = GetColor(255, 255, 255); //文字色
while (ScreenFlip() == 0
&& ProcessMessage() == 0
&& ClearDrawScreen() == 0){
if (CheckHitKey(KEY_INPUT_UP)) mr += ur; //上方向キー入力で、回転速度UP(左回転時は速度DOWN)
if (CheckHitKey(KEY_INPUT_DOWN)) mr -= ur; //下方向キー入力で、回転速度DOWN(左回転時は速度UP)
if (CheckHitKey(KEY_INPUT_SPACE)) mr = 0.0f; //スペースキー入力で、強制停止
if (CheckHitKey(KEY_INPUT_Z)) r = 0.0f; //Zキー入力で、角度を正位置にする
//右方向キーで右回転ルーレット開始
if (CheckHitKey(KEY_INPUT_RIGHT))
{
mr = 1.0f + (float)GetRand(10) / 10.0f; //初速を1.0f~2.0fの範囲でランダム設定
roulette_r = TRUE; //右方向キーで右回転ルーレット開始
}
//右回転ルーレット中の処理
if (roulette_r == TRUE)
{
mr -= ur; //回転の勢いを徐々に弱める
//回転速度に勢いがなくなったら、右ルーレット終了
if (mr <= 0.0f)
{
mr = 0.0f; //回転停止(微細に動いている場合があるので、キッチリ停止させる)
roulette_r = FALSE; //右ルーレット終了
}
}
r += mr; //回転
while (r < 0.0f) r += 2.0f * PAI; //描画角度下限補正
while (r >= 2.0f * PAI) r -= 2.0f * PAI; //描画角度上限補正
DrawRotaGraph(400, 300, 1.0, r, anime, TRUE); //画像の描画
DrawFormatString(10, 10, fontcolor, "現在の角度 r = %10.6f", r); //角度表示
DrawFormatString(10, 30, fontcolor, "現在の回転速度 mr = %10.6f", mr); //速度表示
DrawFormatString(10, 50, fontcolor, "回転加速度 ur = %10.6f", ur); //加速度表示
char* str = ""; //状態文字列表示用一時変数(念の為、初期化して置く)
if (mr == 0.0f) str = "停止中!"; //速度が0なら、停止中!
else
if (mr > 0.0f) str = "右回転中!"; //速度が+なら、右回転中!
else
if (mr < 0.0f) str = "左回転中!"; //速度が-なら、左回転中!
else
str = "回転方向不明!"; //速度がその他なら、回転方向不明!
DrawFormatString(10, 70, fontcolor, "%s", str); //回転状態表示
if (roulette_r == TRUE) str = "右回転ルーレット稼働中!"; //右回転ルーレット状態フラグがTRUEなら、右回転ルーレット稼働中!
else str = "右回転ルーレット停止中!"; //右回転ルーレット状態フラグFALSEなら、右回転ルーレット停止中!
DrawFormatString(10, 90, fontcolor, "%s", str); //右回転ルーレット状態表示
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}
ルーレットに関しては、徐々に加速したり、妙な開始・停止アクションがあったり、予め停止位置を決める等の処理はありません。
左回転ルーレットは、右回転ルーレットの逆の事をすれば良いので、応用して簡単に追加できると思います。
ここから先は、ご自身で改造してお楽しみ下さい。
ご健闘、お祈り申し上げます。
Re: 人生ゲームっぽいゲームを作ってます
TroughTheEvning さん、ありがとうございます!
softya(ソフト屋)さん、 usaoさん、 みけCATさん、 3D_3Dさんもご協力ありがとうございます!
僕もまだまだ、勉強不足です。
なので、頑張ります
みなさん、本当にありがとうございました
softya(ソフト屋)さん、 usaoさん、 みけCATさん、 3D_3Dさんもご協力ありがとうございます!
僕もまだまだ、勉強不足です。
なので、頑張ります
みなさん、本当にありがとうございました
Re: 人生ゲームっぽいゲームを作ってます
オフトピック
ちょっと雰囲気が不安な感じなので,余計なことを書きますが…
「なんか動くコードが来たのでOK!」
みたいな その場限りの解決ではなく,ちゃんと理屈(?)を理解されることを個人的にお勧めします.
なんというか,速度と加速度の話は 普通に生きていくうえでも必要だと思うので…
「なんか動くコードが来たのでOK!」
みたいな その場限りの解決ではなく,ちゃんと理屈(?)を理解されることを個人的にお勧めします.
なんというか,速度と加速度の話は 普通に生きていくうえでも必要だと思うので…
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 人生ゲームっぽいゲームを作ってます
私も危険な兆候な気が。
フォーラム違反でもあるので、できるだけ答えていただきたかったです。
怒ったりはしませんが、後々困らなかれば良いけどと思う次第です。
フォーラム違反でもあるので、できるだけ答えていただきたかったです。
怒ったりはしませんが、後々困らなかれば良いけどと思う次第です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。