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
반응형
'대학생활 > 수업' 카테고리의 다른 글
리얼타임엔진 14주차 - 종강 공지 (2) | 2023.12.05 |
---|---|
게임인공지능 14주차 - 데이터 증강 (0) | 2023.12.05 |
게임그래픽프로그래밍심화 13주차 (0) | 2023.12.04 |
게임배경음악과효과음 11주차 - 칼 소리, 인트로 루프 + 자연스러운 배경음악 전환 (0) | 2023.11.30 |
게임기획과비주얼스크립팅 12주차 - 비헤이비어 트리 (0) | 2023.11.30 |