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

게임밸런스및시뮬레이션 13주차 - 검 강화 게임 만들기

by se.jeon 2023. 12. 4.
728x90
반응형

배열 복습, 가변적 배열 활용

 

사용자 정의 폼 추가

 

Userform은 사용자 정의 폼의 캔버스. 다양한 요소들을 올릴 수 있다.

F5를 눌러 만들어진 폼을 확인할 수 있다.

 

Public 변수 As Byte

Private Sub CommandButton1_Click()

변수 = 변수 + 1
UserForm1.Left = UserForm1.Left - 10
UserForm1.CommandButton1.Caption = 변수
UserForm1.CommandButton1.Font.Size = 변수

If 변수 Mod 2 = 1 Then
    UserForm1.CommandButton1.BackColor = vbRed
Else
    UserForm1.CommandButton1.BackColor = vbBlue
End If

End Sub

 

 

속성창에서 조절할 수 있는 옵션값들을 확인할 수 있다.

 

 

형식 > 맞춤 기능을 사용하여 정렬을 할 수 있다.

검은색 점과 흰점으로 대상과 기준을 구분할 수 있다.

 

폼 제작

 

데이터 제작

 

데이터 파싱

' 검데이터 배열 변수로 변환하기 위한 변수 선언
Public 검데이터 As Variant
Public 레벨 As Byte
Public 보유골드 As Long
Option Base 1

Sub 데이터파싱()
    ' 데이터 크기
    Dim 데이터X크기 As Byte, X As Byte
    Dim 데이터Y크기 As Byte, Y As Byte
    
    ' 데이터 크기 체크
    데이터X크기 = WorksheetFunction.CountA(Sheets("게임데이터").Range("1:1"))
    데이터Y크기 = WorksheetFunction.CountA(Sheets("게임데이터").Range("A:A")) - 1
    
    ' 배열 변수 선언
    ReDim 검데이터(데이터Y크기, 데이터X크기) As Variant
    
    ' 2중 for문을 통한 데이터 파싱
    For Y = 1 To 데이터Y크기 Step 1
        For X = 1 To 데이터X크기 Step 1
            ' 실제적인 데이터 파싱 구문 / 핵심은 For문을 통한 Offset 처리
            검데이터(Y, X) = Sheets("게임데이터").Range("A1").Offset(Y, X - 1).Value
            ' MsgBox 검데이터(Y, X)
        Next X
    Next Y
    
    ' 검데이터(Y, 1) = Y번째 검의 레벨
    ' 검데이터(Y, 2) = Y번째 검의 이름
    ' 검데이터(Y, 3) = Y번째 검의 강화 성공률
    ' 검데이터(Y, 4) = Y번째 검의 강화 실패 파괴 확률
    ' 검데이터(Y, 5) = Y번째 검의 강화 시도 비용
    ' 검데이터(Y, 6) = Y번째 검의 되팔기 가격
    
End Sub

 

 

 

 

돈이 부족할 때 버튼 비활성화 처리

Sub UI갱신()
    UserForm2.TextBox1.Text = 보유골드
    UserForm2.TextBox2.Text = 레벨
    UserForm2.TextBox3.Text = 검데이터(레벨, 2)
    UserForm2.TextBox4.Text = 검데이터(레벨, 3) / 100 & "%"
    UserForm2.TextBox5.Text = 검데이터(레벨, 4) / 100 & "%"
    UserForm2.TextBox6.Text = 검데이터(레벨, 5)
    UserForm2.TextBox7.Text = 검데이터(레벨, 6)
    
    UserForm2.Image1.Picture = LoadPicture(ThisWorkbook.Path & "\리소스\" & 레벨 & ".jpg")
    UserForm2.Image2.Picture = LoadPicture(ThisWorkbook.Path & "\리소스\" & 레벨 + 1 & ".jpg")

    UserForm2.TextBox8.Text = 레벨 + 1
    UserForm2.TextBox9.Text = 검데이터(레벨 + 1, 2)
    UserForm2.TextBox10.Text = 검데이터(레벨 + 1, 6)
    
    ' 보유 골드가 강화시도 비용보다 작을 때 버튼 비활성화 처리
    If 보유골드 < 검데이터(레벨, 5) Then
        UserForm2.CommandButton1.Enabled = False
        UserForm2.TextBox1.ForeColor = vbRed
    Else
        UserForm2.CommandButton1.Enabled = True
        UserForm2.TextBox1.ForeColor = vbBlack
    End If
    
    ' 되팔기 금액이 0원일 때 되팔기 버튼 비활성화 처리
    If 검데이터(레벨, 6) = 0 Then
        UserForm2.CommandButton2.Enabled = False
    Else
        UserForm2.CommandButton2.Enabled = True
    End If
    

End Sub

 

검 강화, 되팔기 처리

Sub 검강화하기()

    ' 1~10000사이의 랜덤을 제공하기 위한 변수 선언
    Dim 강화체크용랜덤 As Integer

    ' 보유골드 빼기
    보유골드 = 보유골드 - 검데이터(레벨, 5)
    
    강화체크용랜덤 = WorksheetFunction.RandBetween(1, 10000)
    
    ' 강화 성공 실패 체크
    ' 강화체크용랜덤이 검데이터(레벨, 3)보다 크지 않으면, 강화 성공으로 판단.
    
    
    ' 실패일 때
    If 강화체크용랜덤 > 검데이터(레벨, 3) Then
        ' 검 파괴 체크
        강화체크용랜덤 = WorksheetFunction.RandBetween(1, 10000)
        
        ' 실패 : 검이 파괴되지 않았을 때
        If 강화체크용랜덤 > 검데이터(레벨, 4) Then
            MsgBox "검 강화에 실패하였으나.. 다행히 검이 버텨주었다.", vbCritical, "검 강화 실패"
        ' 성공 : 검이 파괴되었을 때
        Else
            MsgBox "검이 파괴되었다.", vbCritical, "검 강화 실패로 파괴"
            레벨 = 1
        End If
    ' 성공일 때
    Else
        레벨 = 레벨 + 1
    End If
    
    
    Call UI갱신
    
End Sub


Sub 검되팔기()
    보유골드 = 보유골드 + 검데이터(레벨, 6)
    레벨 = 1
    
    MsgBox "검을 되팔아서" & 검데이터(레벨, 6) & "골드 만큼 벌었습니다.", vbInformation, "검되팔기 결과"
    Call UI갱신
    
End Sub

 

기말 과제

VBA 활용 능력을 보여줄 수 있는 포트폴리오 만들기

밸런스를 검증하는 시뮬레이터도 좋고, VBA 능력을 어필하는 미니게임도 좋다.

 

1순위 : 밸런스 시뮬레이터

2순위 : 게임

3순위 : 수업중 실습

 

과제 메일에 해당 VBA를 왜 만들었는지, 어떤 의미가 있는지 설명한다.

저장할 때 반드시 xlsm으로 저장한다.

 

총 40점

VBA 결과물의 효율성이 어떤가? : 20점

VBA와 엑셀 기능을 잘 활용했는가? : 10점

VBA의 완성도는 어떤가? : 10점

 

제출 기한 : 12월 17일 일요일 23:59 까지

제출 방식 : (교수님 이메일 주소)으로 메일 보내기

12월 18일 월요일 15주차 수업에 발표하고 종강 예정

728x90
반응형