Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

시작은 0부터

12. List 중복 제거 , 레이싱 게임 적들 무작위 드랍 구현을 위한 시도(미구현) 본문

C# 학습일지

12. List 중복 제거 , 레이싱 게임 적들 무작위 드랍 구현을 위한 시도(미구현)

0base 2022. 7. 18. 00:59

화면 위쪽에서 적들이 균일하게 떨어지게 하는 방법은 구현했고, 적들이 같은 Y값 안에서 무작위로 출현하게 하는 방법도 구현했다. 그러나 동시에 적들이 서로 다른 Y값에서 동시에 떨어지게 하는 방법은 여전히 구현하지 못했다. 교수님께서는 코드를 클래스화하여 구현하라고 하셨는데, 클래스화를 하기 전에 구현 조차 하지 못했다..

 

2차원 배열을 사용하여 x값과 y값을 설정했다. 2차원 배열 구조는 쉼표( , ) 를 기준으로 오른쪽 값이 최대값으로 도달할 때 마다 왼쪽 값이 하나씩 증가되는 구조이기 때문에 첫번째 값이 Y, 두번째 값을 X로 하는 것이 구조적으로 맞다.

 

x값은 리스트를 사용하여 그 리스트에 랜덤함수를 사용하여 X축 범위 내 랜덤값을 랜덤하게 부여하는 방식으로 Y값에 랜덤한 적을 넣는 것까지는 구현했다.

//초기화

Random rd = new Random();
int enemyCount = 0;
int enemyInstance = 0;
int mapX = 30;
List<int> xList = new List<int>();

//While문 안

enemyCount = rd.Next(0,mapX -1)
for(int i = 0; i < enemyCount; i++)
{
	enemyInstance = rd.Next(0, mapX)
    xList.Add(enemyInstance);
}

xList = xList.Distinct().ToList();

랜덤 값으로 동일한 Y축에 적을 얼마나 생성할 것인지를 설정하고, 랜덤 값으로 정해진 적 갯수만큼 랜덤한 x값에 집어넣고 중복되는 값은 없앤다. 

 

list = list.Distinct().ToList();

: 리스트 안에 값들을 고유화하여 중복값들을 없애는 함수. 말그대로 고유화이기 때문에 하나로 통일시킬 뿐, 중복되는 값 자체를 없애는 것은 아니다.

 

그런데 Y값이 문제다. 한 줄로 떨어질 때는 Y값을 하나로 설정하고 그 값을 반복문이 돌 때마다 증가시키는 형식으로 떨어뜨리고, Y값이 배열 높이 최대값에 도달하면 다시 0으로 만들면 계속 떨어지는 루프를 만들 수 있다.

그런데 적이 내려오는 도중에 새로 생성해서 다른 Y값에서 또 내려오게 하는 건 이 방법으로는 할 수 없다. 그런데 Y값을 각각 따로 쓰면서 동시에 계속 내려오게하고 없애는 방법이 생각나지 않는다. 

 

2차원 배열의 Y를 나타내는 첫번째 값에 +1이 증가된 위치에다가 기존의 값을 옮겨넣는 방법도 사용해봤는데 생각처럼 되지는 않았다. ▼

//반복문 안

for(int y = 0; y < mapY; y++)
{
	for(iny x = 0; x < mapX; y++)
    	{
            if(y+1 < mapY)
            {
            	map[y+1, x] = map[y,x]
            }
            else
            {
            	map[y, x] = map[0, x]
            }
        }
}

 

구글링을 해서 답을 빨리 얻는 것보다 직접 구조를 만들어보고 싶었는데 좀처럼 진전이 없다. 내일 다시 파봐야겠다.