게임제작/소스코드

[소스코드]주가 및 가격변동 알고리즘 구현

게임코드프리 2021. 4. 20. 16:53
반응형

 

물가 혹은 가격의 변동값을 계산해주는 알고리즘이 없을까...찾던 중

딱히 정론이 없는 것 같고 알고리즘을 알려주는 곳이 없어 직접 아무렇게나 게임메이커 스튜디오2로 

코딩을 해보았고 원하는 내용이 나왔기에 공개합니다.

프로그래밍을 잘하는 사람이 아닌 그냥 일반인이기 때문에 너무 알고리즘을 신뢰하진 마시고

이 사람은 이런식으로 해결했구나 하고 생각해 주셨으면 합니다.

 

1. 우선 실행될 오브젝트를 생성합니다.

2. 룸에 만든 오브젝트를 배치.

 

필요한 준비물

 

3. 업다운용 이미지 파일을 준비.

 

 

이미지 파일안에 두가지 업/다운 이미지를 넣어서 이미지 인덱스값으로 변경할 예정이므로 위와 같이 준비합니다.

 

[크리에이트 이벤트]


randomize();
coin = irandom_range(10,300);

type = 0;

next_day = false;

y_coin = coin;
updown_value = 0
arrow = 0;

 

randomize() 의 경우에는 매번 랜덤 함수를 초기화 하여 제대로 된 랜덤 값을 뽑을 수 있는 함수이며

coin 의 경우에는 초기 코인 값을 정하기 귀찮아서 랜덤으로 설정.

type 변수는 타입 0~5가지로 가격 변동을 일으키기 위한 변수로 활용하기 위해 설정했습니다.

next_day 는 엔터를 치면 그냥 다음날로 빠르게 확인하기 위해 온/오프용 변수.

y_coin 은 어제의 가격을 저장하여 오늘의 코인값과 비교연산하기 위한 변수이고

updown_value 의 경우 어제와 오늘의 코인 차액값을 저장하기 위한 변수입니다.

arrow 는 그냥 이미지 인덱스 값을 업/다운 으로 구별할때 체크용 변수.

 

[스텝이벤트]


if (next_day=false)
{
	if keyboard_check_pressed(vk_enter)
	{
		next_day = true;
		type = irandom(4);
	}
}

if (next_day=true)
{
	switch(type)
	{
		case 0 :
			y_coin = coin;
			var per = irandom_range(1,5);
			coin = round(coin * (1 + per /100));
			next_day = false;
			if (coin <= 0.5)
			{
				coin = irandom_range(10,50);
			}
		break;
		
		case 1 :
			y_coin = coin;
			var per = irandom_range(50,100);
			coin = round(coin * (1 + per /100));	
			next_day = false;
			if (coin <= 0.5)
			{
				coin = irandom_range(10,300);
			}			
		break;
		
		case 2 :
			y_coin = coin;		
			var per = irandom_range(10,20);
			coin = round(coin * (1 - per /100));
			next_day = false;
			if (coin <= 0.5)
			{
				coin = irandom_range(50,100);
			}			
		break;
		
		case 3 :
			y_coin = coin;		
			var per = irandom_range(70,200)
			coin = round(coin * (1 - per /100));				
			next_day = false;
			if (coin <= 0.5)
			{
				coin = irandom_range(10,300);
			}			
		break;
		
		case 4 :
			y_coin = coin;		
			var per = irandom_range(0,5);
			coin = round(coin * (1 - per /100));
			next_day = false;
			if (coin <= 0.5)
			{
				coin = irandom_range(10,300);
			}			
		break;
	}
}
updown_value = abs(y_coin - coin)

if (y_coin < coin)
{
	show_debug_message("up")
	arrow = 0;
}else
{
	show_debug_message("down")
	arrow = 1;
}

 

대충 엔터를 치면 다음날로 넘어가며 위에서 언급한 타입을 랜덤하게 돌려 변동값을 얼마를 줄지

아래의 스윗치문으로 변동값을 주었습니다.

테스트를 여러번 해보다보니 0값이 나오는 경우가 있었기에 0값이 나오지 않도록 다시 재조정하는 계산을 넣고

아래에는 어제의 코인값과 오늘의 코인값의 차액계산(updown_value)을 해주고

상승했을시에는 이미지 인덱스 값을 0(arrow=0) 아니면 1을 주는 계산만이 스텝이벤트의 전부입니다.

 

[드로우 이벤트]


draw_set_font(font_number);
draw_set_halign(fa_center);
draw_set_color(c_white);
draw_text(240,220,coin);
draw_sprite(spr_updown,arrow,240+60,220);
if (arrow = 0)
{
	draw_set_color(c_red)
}else
{
	draw_set_color(c_blue)
}

draw_text(240+150,220,updown_value);
draw_set_color(c_white);

 

폰트의 세팅들과 좌표들뿐이며 특이점으로는 스프라이트 인덱스를 바꿔줄 변수 대입이나

상승할때와 하락할때의 글씨색을 변경해주기 위한 IF문이 전부입니다.

 

설명이 부족해서 뭔 말인지 모를 분들을 위해 파일첨부.

change_value.yyz
0.03MB

 

반응형
facebook twitter kakaoTalk kakaostory naver band shareLink
人気ブログランキングでフォロー