본문 바로가기
대학생활/수업

게임밸런스및시뮬레이션 12주차 - 가챠 뽑기 시뮬레이터 만들기

by se.jeon 2023. 11. 27.
728x90
반응형

배열 복습

Option Base 1 '배열을 1부터 사용하겠다는 모듈 선언문

Sub 배열복습()
    Dim 배열1(5 To 10) As Variant
    Dim 배열2 As Variant
    Dim 배열3 As Variant
    
    배열2 = Array("금", "은", "동")
    배열3 = spilt("금-은-동", "-")
    
    'MsgBox "배열1 = " & LBound(배열1) & " ~ " & UBound(배열1)
    'MsgBox "배열2 = " & LBound(배열2) & " ~ " & UBound(배열2)
    'MsgBox "배열3 = " & LBound(배열3) & " ~ " & UBound(배열3)
    
End Sub

 

Sub 버킷리스트()

    Dim arrBucketList(5) As Variant
    Dim i As Integer
    
    For i = 1 To 5 Step 1
        arrBucketList(i) = InputBox(i & "번째 버킷리스트?", "버킷리스트 저장")
    Next i
    
    '에러창을 생략하는 코드
    On Error Resume Next
    
    Do
        i = InputBox("몇 번째 버킷리스트를 찾을까요?" & vbCr & "99를 입력하면 종료합니다.", "버킷리스트 찾기")
        MsgBox arrBucketList(i)
    Loop While i <> 99

End Sub

 

Range를 사용하면 현재 선택된 시트를 기준으로 하기 때문에 시트를 지정 해 주는 것이 좋다.

 

Option Base 1 '배열을 1부터 사용하겠다는 모듈 선언문
Public 몬스터데이터 As Variant '배열변수로 변경하기 위한 몬스터 변수 선언

Sub 데이터파싱()

    Dim 데이터X크기 As Long, 데이터Y크기 As Long

    ' 데이터의 X, Y 크기를 체크하기
    데이터X크기 = WorksheetFunction.CountA(Sheets("Monster_Master").Range("1:1"))
    
    ' 컬럼 제목 부분을 사용하지 않기 위해 -1 처리
    데이터Y크기 = WorksheetFunction.CountA(Sheets("Monster_Master").Range("A:A")) - 1
    
    
    ReDim 몬스터데이터(데이터Y크기, 데이터X크기)
    
    ' 2중 For문을 사용하여 데이터를 배열변수에 대입 / 데이터 파싱
    For y = 1 To 데이터Y크기 Step 1
        For x = 1 To 데이터X크기 Step 1
            ' 데이터 파싱하기
            ' MsgBox y & " - " & x
            몬스터데이터(y, x) = Sheets("Monster_Master").Range("A1").Offset(y, x - 1).Value
            MsgBox 몬스터데이터(y, x)
        Next x
    Next y
    
End Sub

 

가챠

가중치 랜덤은 전체 중에서 자신의 비중을 판단하는 방식이기 때문에 다른 값들에 따라서 값이 바뀐다.

전리품 상자의 가치 계산식 = SUM(들어있는 아이템의 확률 * 들어있는 아이템의 가격)

Sub 뽑기시뮬레이터만들기()

    '랜덤범위를 확인하기 위한 변수 선언
    Dim 랜덤최소범위 As Byte
    Dim 랜덤최대범위 As Long
    Dim 랜덤결과값 As Long
    Dim 아이템번호 As Byte
    Dim 아이템이름 As String
    Dim 뽑기횟수 As Long
    Dim i As Long
    
    '데이터 Get Rate 컬럼을 통해서 랜덤의 최소범위와 최대범위를 알아온다.
    랜덤최소범위 = WorksheetFunction.Min(Sheets("뽑기시뮬레이터").Range("A:B"))
    랜덤최대범위 = WorksheetFunction.Max(Sheets("뽑기시뮬레이터").Range("A:B"))
        
    
    뽑기횟수 = InputBox("몇 번 뽑을까요?", "뽑기횟수지정")
    
    For i = 1 To 뽑기횟수 Step 1
        'MsgBox 랜덤최소범위 & "~" & 랜덤최대범위
        랜덤결과값 = WorksheetFunction.RandBetween(랜덤최소범위, 랜덤최대범위)


        '반복해야 하는 처리 구문
        'H2 셀에 랜덤결과값을 표시한다.
        Sheets("뽑기시뮬레이터").Range("I2").Value = 랜덤결과값
        
        아이템번호 = WorksheetFunction.VLookup(True, Sheets("뽑기시뮬레이터").Range("C:E"), 3, False)
        아이템이름 = WorksheetFunction.VLookup(아이템번호, Sheets("Item_Master").Range("A:B"), 2, False)
        Sheets("뽑기시뮬레이터").Range("J2").Value = 아이템이름
        
        '히스토리 찍기
        Sheets("뽑기시뮬레이터").Range("L1").Offset(i, 0).Value = i & "번째"
        Sheets("뽑기시뮬레이터").Range("L1").Offset(i, 1).Value = 아이템번호
        Sheets("뽑기시뮬레이터").Range("L1").Offset(i, 2).Value = 아이템이름
        
    Next i
    
End Sub

 

이번 주 금요일 21시 비교과 특강 있음

728x90
반응형