Artgineer_기술 배우는 아티스트

[인표몬의 그래스호퍼]주사위게임 알고리즘 만들기 본문

Grasshopper ⚙️

[인표몬의 그래스호퍼]주사위게임 알고리즘 만들기

인표몬 2024. 5. 8. 09:21
반응형

 

그래스호퍼로 주사위 게임을 만들어보았습니다.

 

처음에 알고리즘을 실행하기 위한

Button 컴포넌트를 생성합니다.

그리고 Heteroptera 라는 애드온 기능인 Seed Generator 컴포넌트와 연결해 줍니다.

 

Button 이용하여 랜덤시드 생성하기

 

Button 을 클릭 해보면, 잠깐 임의의 숫자가 생겼다가 사라지는 걸 확인할 수 있습니다.

이유는

클릭한 상태: True

클릭하지 않는 상태: False

이기 때문에, 눌렀을 때만 숫자가 생성되는 것입니다.

 

Button 컴포넌트 우클릭 후, T/F 를 서로 바꿔주도록 합니다.

 

True, False 값 바꾸는 모습.

 

 

 

이젠 클릭하면 랜덤시드가 업데이트되고 상시 숫자가 출력되고 있습니다.

 

그치만 숫자가 너무 크죠??

최소값과 최대값을 정해야할듯 합니다.

 

Construct Domain 이라는 컴포넌트를 생성해줍니다.

 

 

1 to 6 이라는 수식 생성.

 

왼쪽 사진처럼, Pannel 자체에 1 To 6 이라고 기입해도 되고,

우측 사진처럼 Construct Domain 컴포넌트에 A(최소값)=1, B(최대값)=6 을 각각 입력해도 무방합니다.

 

이것을 Range (범위) 라고 부릅니다.

 

이제 1부터 6까지의 숫자를 랜덤으로 뽑아야 주사위게임이 되므로 Random 컴포넌트를 생성하여 연결해줍니다.

 

 

 

Random 컴포넌트 연결 후 1~6 의 무작위 숫자 생성.

 

이렇게 주사위처럼 1부터 6까지의 무작위 숫자를 출력할 수 있게 되었습니다.

 

다만 소수점자리까지 표현되고 있으므로 이를 정수로 변환해주는 Integer 노드를 추가해주면 되겠죠.

 

 

 

 

 

 

 

 

이렇게 정수로 반올림해주니, 1~6 의 정수가 생성되고 있습니다.

 

여기 문제가 있습니다.

 

1 이상, 6 이하의 소수를 반올림하여 정수로 변환하는 것이므로

 

1이 등장할 범위는 1.00 ~ 1.49 약 0.5

6이 등장할 범위는 5.50 ~ 6.00 약 0.5

 

2가 등장할 범위는 1.50 ~ 2.49 약 1.0

3이 등장할 범위도 약 1.0

4가 등장할 범위도 약 1.0

5가 등장할 범위도 약 1.0

 

그러므로 1과 6과 등장할 확률이 상대적으로 낮게 됩니다.

이를 해결하기 위해선,

 

애초부터 Range를 1~6으로 설정할 게 아니라,

0~6 로 설정 후, 반올림이 아닌 올림으로 설정하는것이 적합할것입니다.

 

즉 Integer 는 소수를 정수로 변환해 주지만 디폴트값으로 반올림을 하기 때문에

Integer 가 아닌 Round 컴포넌트를 사용해야 합니다.

 

 

이로써 주사위게임을 완성해보았구요, 이런식으로 복권 번호 자동 추첨 알고리즘도 만들 수 있겠습니다.

 

글을 마칩니다.

 

728x90