人生ゲームっぽいゲームを作ってます

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

人生ゲームっぽいゲームを作ってます

#1

投稿記事 by ハンディー » 10年前

初めての投稿です。
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;

}

Rittai_3D
記事: 525
登録日時: 12年前

Re: 人生ゲームっぽいゲームを作ってます

#2

投稿記事 by Rittai_3D » 10年前

コードを貼る場合はcodeタグでくくってくださると読みやすくて助かります。
フォーラムルールをお読みください。

同じ数値を足し続けているので一定の回転しかしないと思います。
printfDx()やDrawFormatString()などで数値を見てみるとわかると思います。
初心者です

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 人生ゲームっぽいゲームを作ってます

#3

投稿記事 by softya(ソフト屋) » 10年前

速度と加速度が違うように、角速度と角加速度も別のものです。
今の処理は一定速度の角速度で回転角の処理を行っています。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ハンディー

Re: 人生ゲームっぽいゲームを作ってます

#4

投稿記事 by ハンディー » 10年前

ありがとうございます
前のコードをそのままコピーしました。

コード:

#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: 人生ゲームっぽいゲームを作ってます

#5

投稿記事 by softya(ソフト屋) » 10年前

まず理解すべきことがあります。
一定時間辺りに同じ角度で角度が変われば、それは加速も減速もしていません。等速の回転運動です。
加速や減速をするためには、一定時間毎の角度の値が変わらないといけません。
rは現在の角度ですので、それに定数を足すことは等速の回転運動になります。
こういう物を作るには物理・数学的なイメージの理解は避けれないので考えてみてください。
その上でわからないことを質問されると良いと思います。
※ 図を書いてみるのも理解の助けになると思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 人生ゲームっぽいゲームを作ってます

#6

投稿記事 by みけCAT » 10年前

ハンディー さんが書きました:ありがとうございます
前のコードをそのままコピーしました。

(略)

えっと、とりあえず「 += 」 のところを「 ++ 」に変えてみたんですけど上手くいきません
・No:1のコードとは違うものが貼ってあるようですが、「前のコード」とは何ですか?
・mrの定義が提示されたコード中に無いので、これだけではコンパイルが通らないと思います。
・提示されたコード中に「 ++ 」が見当たりません。
ハンディー さんが書きました:どうすればできますか?
まず正しい現状のコードを貼っていただけますか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ハンディー

Re: 人生ゲームっぽいゲームを作ってます

#7

投稿記事 by ハンディー » 10年前

返事が遅くなってすみません

現状のコードがこんな感じです

コード:

#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: 人生ゲームっぽいゲームを作ってます

#8

投稿記事 by softya(ソフト屋) » 10年前

>えっと、回転の速さが変わってますが、思った動きがしません。

思った動きを理解しているのではハンディーさんだけですので、それを説明しないとアドバイスも難しいです。
とりあえず現状は角度に角度を足しているのででたらめな動きに見えるのではないでしょうか?
私のアドバイスにコメントがもらえないので、何処でつまずいているか良く分かりません。
理論面なのか、コードにすること自体なのかも把握できないです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ハンディー

Re: 人生ゲームっぽいゲームを作ってます

#9

投稿記事 by ハンディー » 10年前

すみません、softya(ソフト屋)さん

僕が思っている動きは人生ゲームのルーレットを手で回している感じ動きをしたいんです

理論的には分かっているのですが、コードにすることがわかりません

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 人生ゲームっぽいゲームを作ってます

#10

投稿記事 by softya(ソフト屋) » 10年前

>僕が思っている動きは人生ゲームのルーレットを手で回している感じ動きをしたいんです

言いたいことは分かりますが、人生ゲームのルーレットは単純な加速→減速と言う動きでもないんです。
あのバネというか、引っ掛かりが動きの肝なんですが、そこも再現するのでしょうか?
こういう状態を仕様が明確ではない状態と言って、個人個人が思っていることが違うので共同作業すると思ったものがと違う物が出来上がる典型的なパターンになります。
掲示板でも質問も同様で、細かく正確に仕様を伝える事をしないと望んだアドバイスは得られない事になります。

>理論的には分かっているのですが、コードにすることがわかりません

では、回転数は秒間何回転でしょうか?
1.初期の秒間回転数
2.加速時の秒間回転数の増加割合と加速時間
3.減速時の秒間回転数の減速割合。
は書き出せますか?

で肝心のプログラムですが
r += (r + mr);//回転
で、この式に込めた意味は何でしょうか?
理論とプログラムとの間が何処が分からず埋められないのか分からないとアドバイスが難しいので説明をお願いできますか。
ベースに考えた数式とかがあればお願いします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ハンディー

Re: 人生ゲームっぽいゲームを作ってます

#11

投稿記事 by ハンディー » 10年前

softya(ソフト屋)さん
お返事ありがとうございます
言いたいことは分かりますが、人生ゲームのルーレットは単純な加速→減速と言う動きでもないんです。
あのバネというか、引っ掛かりが動きの肝なんですが、そこも再現するのでしょうか?
こういう状態を仕様が明確ではない状態と言って、個人個人が思っていることが違うので共同作業すると思ったものがと違う物が出来上がる典型的なパターンになります。
僕は単純な加速から減速の回転をしたいだけなんです。細かいことは難しいのでやりません
では、回転数は秒間何回転でしょうか?
1.初期の秒間回転数
2.加速時の秒間回転数の増加割合と加速時間
3.減速時の秒間回転数の減速割合。
は書き出せますか?
すみません、わかりません
で肝心のプログラムですが
r += (r + mr);//回転
で、この式に込めた意味は何でしょうか?
理論とプログラムとの間が何処が分からず埋められないのか分からないとアドバイスが難しいので説明をお願いできますか
プログラムの方は、とりあえず動かすことをしてたので、意味はありません

アドバイスをいただいているのですが、まだまだ勉強不足です。
すみません

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 人生ゲームっぽいゲームを作ってます

#12

投稿記事 by softya(ソフト屋) » 10年前

ちょっと時間が取れないので返答はあとになります。

> では、回転数は秒間何回転でしょうか?
ここはプログラム関係ないので考えてみてください。
あとで調整するので、とりあえず値で良いです。
ゲームプログラミングはイメージを形にするものなので、形に落としこむ過程をすっ飛ばすことは出来ませんよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ハンディー

Re: 人生ゲームっぽいゲームを作ってます

#13

投稿記事 by ハンディー » 10年前

softya(ソフト屋)さん
返事が遅くなってすみません

回転数(n)=1(秒)÷周期(T)

の公式で合ってますか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 人生ゲームっぽいゲームを作ってます

#14

投稿記事 by softya(ソフト屋) » 10年前

合っていますが、この場合それが分かって役に立つのでしょうか?
どう応用されるおつもりですか。

【補足】
学校で勉強しているものは、必要に応じで応用できるように基礎的な理論を勉強してます。
日常的なものを数式で表現したり、実はこういう原理で動いているんだよとか学びます。
それをどう応用するのは、みなさんが考えなければいけないことです。
くれぐれも勉強のための勉強では無く、応用のための勉強だということを忘れないで下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: 人生ゲームっぽいゲームを作ってます

#15

投稿記事 by usao » 10年前

>r += 0.01f;

現状,とりあえずコレで 「等速回転」 しているのですよね?

では,ここを仮に
r += 0.02f;
と変更したら,変更前の倍の回転速度で等速回転するだろう ということはOKですか?

同様に,
r += 0.03f;
とすれば,最初の3倍の回転速度で等速回転することになるでしょう.

ということは…
この式の右辺に用いられる値をプログラム中で動的に変化させたとしたら
各時刻における回転速度はその変化に応じて変わりますよね.
例えば右辺の値をだんだん大きくしていけば,回転速度は加速していきますよね.
逆に,だんだん減らしていけば,減速になる.
(ということがイメージできているのでしょうか?)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 人生ゲームっぽいゲームを作ってます

#16

投稿記事 by softya(ソフト屋) » 10年前

そうですね。
応用できるというのは、例えば次の問題が解けますか?

【問題】
現在秒速5回転で回転しています。
10秒後に等加速度で秒速10回転にしたいとします。
さて、1秒間にどれだけづつ回転数を上げればよいでしょうか?
このとき、1/60秒辺りの回転角を、それぞれ(現在の回転角、10秒後の回転角、1/60秒辺りに増加する回転角)を答えて下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

TroughTheEvning

Re: 人生ゲームっぽいゲームを作ってます

#17

投稿記事 by TroughTheEvning » 10年前

取り敢えず、これを実行してみて下さい。

コード:

#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: 人生ゲームっぽいゲームを作ってます

#18

投稿記事 by ハンディー » 10年前

TroughTheEvning さん、ありがとうございます!

softya(ソフト屋)さん、 usaoさん、 みけCATさん、 3D_3Dさんもご協力ありがとうございます!

僕もまだまだ、勉強不足です。
なので、頑張ります

みなさん、本当にありがとうございました

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: 人生ゲームっぽいゲームを作ってます

#19

投稿記事 by usao » 10年前

オフトピック
ちょっと雰囲気が不安な感じなので,余計なことを書きますが…

「なんか動くコードが来たのでOK!」
みたいな その場限りの解決ではなく,ちゃんと理屈(?)を理解されることを個人的にお勧めします.

なんというか,速度と加速度の話は 普通に生きていくうえでも必要だと思うので…

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 人生ゲームっぽいゲームを作ってます

#20

投稿記事 by softya(ソフト屋) » 10年前

私も危険な兆候な気が。
フォーラム違反でもあるので、できるだけ答えていただきたかったです。
怒ったりはしませんが、後々困らなかれば良いけどと思う次第です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

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