Macro
자주 사용하는 여러 개의 명령어를 묶어서 하나의 키 동작이나 메뉴 등을 이용해 실행되도록 만든 것
VBA (Visual Basic for Application)
VBA는 MS-Office 응용 프로그램에서 매크로를 기록하는 데에 사용하는 프로그래밍 언어이다.
VBA 문법은 VB와 같지만, 대응 프로그램이 없으면 사용이 불가능하다.
Word나 PPT에서도 사용 가능하다.
- 어플리케이션 (엑셀 자체)
- 프로젝트 & 모듈 (프로시저의 집합)
- 프로시저 (명령문의 집합)
개발 도구 활성화하기
체크박스를 사용하면 개발 도구 탭이 활성화된다.
매크로 기록
매크로 기록 기능을 사용하여 내가 진행한 행동을 반복 할 수 있다.
F4로 이전 행동을 반복 할 수 있는데 굳이 매크로를 사용하는 이유는 무엇일까?
매크로는 기록한 기능을 꿰뚫어볼 수 있기 때문이다.
Alt + F11을 누르거나 Visual Basic을 사용하여 확인 할 수 있다.
주석에 대한 설명 진행
탭을 눌러 한 칸을 밀 수 있고, Shift 탭을 이용하여 앞으로 돌아올 수 있다.
Sub 글자굵게()
'
' 글자굵게 매크로
'
' 바로 가기 키: Ctrl+e
'
If Selection.Font.Bold = False Then
' 조건이 참일 때 처리할 것들
Selection.Font.Bold = True
Else
' 조건이 참이 아닐 때 처리할 것들
Selection.Font.Bold = False
End If
End Sub
위와 같이 조건을 사용하고, 제공되는 기능들을 이용하여 다양한 일들을 할 수 있다.
이를 이용해서 게임을 만드는 사람들도 있을 정도.
셀의 특정 위치를 선택 해 보자
Range 속성
- Range("주소").Select //ex : Range("B2").Select
Cells 속성
- Cells(Row번호.Column번호).Select //ex : Cells(2.2).Select
속성 뒤에는 Select, Copy, PasteSpecial, Delete, Value 등의 다양한 명령들이 붙을 수 있다.
Ctrl + J로 사용할 수 있는 기능을 확인 할 수 있다.
대괄호의 경우에는 조회되지 않는다.
Sub 주소참조()
'
' 일반적으로 주소를 바로 참조할 때는 Range를 사용하지만,
' 상대참조를 사용할 때 Cells를 사용한다.
Cells(2, 4).Select
Range("B2:B5, 1:2").Select
' 대괄호를 사용해서도 셀 주소 지정이 가능하다.
[E4, 1:2].Select
' D열을 복사해서 M열에 붙여넣기
Range("D:D").Copy
Range("M:M").PasteSpecial
' M4의 내용을 지운다.
Range("M4").ClearContents
End Sub
Activate와 Select의 차이
- Activate : 활성화 되어있는 하나의 셀.
- Select : 선택된 모든 영역, 하나 이상의 개체.
VBA를 사용하면 Ctrl + Z를 이용한 되돌리기가 안 된다.
따라서 VBA를 사용 할 때는 사전에 백업을 해 두는 것이 좋다.
Offset 메서드는 선택된 곳으로부터 상대적인 위치를 불러올 때 사용한다.
실습 진행
선택된 셀에는 "선택", 그리고 동서남북 적기
Sub 오프셋()
ActiveCell.Offset(0, 0).Value = "선택"
ActiveCell.Offset(0, 1).Value = "동"
ActiveCell.Offset(0, -1).Value = "서"
ActiveCell.Offset(1, 0).Value = "남"
ActiveCell.Offset(-1, 0).Value = "북"
End Sub
위치를 전부 참조할 수 없으면 오류가 발생한다.
한칸 왼쪽에서 스크립트를 실행시키면 서에서 오류가 남을 확인 할 수 있다.
변수 (variable)
값을 기억하기 위해 저장 영역에 부여한 이름으로, 저장되는 데이터의 종류에 따라 데이터형(타입)을 가진다.
선언 방식
- [Dim, Static, Private, Public] As 데이터형 (생략 가능)
데이터형
- Byte
- Integer
- Long
- Date
- String
- Variant
- Boolean
코딩 스타일 표기법
카멜 표기법 : camelCase - 시작은 소문자, 각 단어의 첫글자만 대문자로
파스칼 표기법 : PascalCase - 시작 포함 모든 단어의 첫 글자를 대문자로
스네이크 표기법 : snake_case - 단어 사이에 언더바를 추가
헝가리안 표기법 : intHungarian - 접두어로 데이터형을 추가
전역변수, 모듈변수, 지역변수
전역변수 - Public, 프로젝트 수준, 프로그램 내 모든 프로시저에서 사용 가능
모듈변수 - Private, Module 수준, 선언된 같은 모듈 내 모든 프로시저에서 사용 가능
지역 변수 - Dim, Procedure 수준, 선언된 프로시저에서만 사용 가능, 실행할 때마다 초기화
Sub 변수()
Dim 값 As Byte
값 = 100
Range("A1").Value = 값 * 5
End Sub
Byte형은 255까지 지원하기 때문에 값에 300을 넣으면 오버플로우 오류가 뜨게 된다.
앞으로 자주 사용하게 될 랜덤에 대해서
- WorkSheetFunction.RandomBetween(a, b) : 액셀 함수 - a와 b사이의 랜덤한 값을 불러온다.
- Application.RandBetween(a, b) : 기능 라이브러리 - a와 b 사이의 랜덤한 값을 불러온다.
액셀 함수가 좀 더 명확한 면이 있다.
Sub 랜덤()
Dim 값 As Long
' 값 = Application.RandBetween(0, 1000)
값 = WorksheetFunction.RandBetween(0, 1000)
Range("A1").Value = 값
End Sub
실습 진행
RGB 랜덤 색상 옆으로 3개의 셀에 R, G, B를 별도로 찍어보자
각 셀에 R, G, B 값을 흰색 스트링으로 찍어주고 다른 값이 9인 상태로 표시 해 보자. (ex : r이 4이고, g와 b가 0인 상태)
Sub 색칠하기_RGB()
Dim Red As Byte
Dim Green As Byte
Dim Blue As Byte
' 셀색상채우기 + 오프셋
' 셀랜덤값 스트링 표시
' 변수 선언하기 (R, G, B)
' 랜덤 처리
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Red = WorksheetFunction.RandBetween(0, 255)
ActiveCell.Offset(0, 0).Interior.Color = RGB(Red, 0, 0)
ActiveCell.Offset(0, 0).Value = Red
ActiveCell.Offset(0, 0).Font.Color = vbWhite
Red = WorksheetFunction.RandBetween(0, 255)
ActiveCell.Offset(1, 0).Interior.Color = RGB(Red, 0, 0)
ActiveCell.Offset(1, 0).Value = Red
ActiveCell.Offset(1, 0).Font.Color = vbWhite
Red = WorksheetFunction.RandBetween(0, 255)
ActiveCell.Offset(2, 0).Interior.Color = RGB(Red, 0, 0)
ActiveCell.Offset(2, 0).Value = Red
ActiveCell.Offset(2, 0).Font.Color = vbWhite
Red = WorksheetFunction.RandBetween(0, 255)
ActiveCell.Offset(3, 0).Interior.Color = RGB(Red, 0, 0)
ActiveCell.Offset(3, 0).Value = Red
ActiveCell.Offset(3, 0).Font.Color = vbWhite
Green = WorksheetFunction.RandBetween(0, 255)
ActiveCell.Offset(0, 1).Interior.Color = RGB(0, Green, 0)
ActiveCell.Offset(0, 1).Value = Green
ActiveCell.Offset(0, 1).Font.Color = vbWhite
Green = WorksheetFunction.RandBetween(0, 255)
ActiveCell.Offset(1, 1).Interior.Color = RGB(0, Green, 0)
ActiveCell.Offset(1, 1).Value = Green
ActiveCell.Offset(1, 1).Font.Color = vbWhite
Green = WorksheetFunction.RandBetween(0, 255)
ActiveCell.Offset(2, 1).Interior.Color = RGB(0, Green, 0)
ActiveCell.Offset(2, 1).Value = Green
ActiveCell.Offset(2, 1).Font.Color = vbWhite
Green = WorksheetFunction.RandBetween(0, 255)
ActiveCell.Offset(3, 1).Interior.Color = RGB(0, Green, 0)
ActiveCell.Offset(3, 1).Value = Green
ActiveCell.Offset(3, 1).Font.Color = vbWhite
Blue = WorksheetFunction.RandBetween(0, 255)
ActiveCell.Offset(0, 2).Interior.Color = RGB(0, 0, Blue)
ActiveCell.Offset(0, 2).Value = Blue
ActiveCell.Offset(0, 2).Font.Color = vbWhite
Blue = WorksheetFunction.RandBetween(0, 255)
ActiveCell.Offset(1, 2).Interior.Color = RGB(0, 0, Blue)
ActiveCell.Offset(1, 2).Value = Blue
ActiveCell.Offset(1, 2).Font.Color = vbWhite
Blue = WorksheetFunction.RandBetween(0, 255)
ActiveCell.Offset(2, 2).Interior.Color = RGB(0, 0, Blue)
ActiveCell.Offset(2, 2).Value = Blue
ActiveCell.Offset(2, 2).Font.Color = vbWhite
Blue = WorksheetFunction.RandBetween(0, 255)
ActiveCell.Offset(3, 2).Interior.Color = RGB(0, 0, Blue)
ActiveCell.Offset(3, 2).Value = Blue
ActiveCell.Offset(3, 2).Font.Color = vbWhite
End Sub
매크로를 제외하고 저장할 것인지를 물어보는 것이기 때문에 예를 하면 큰일난다.
xlsm으로 저장해야 한다.
사용자와의 피드백
Inputbox : 사용자에게 값을 입력받는 함수
변수명 = inputbox("메세지 내용" [, "제목"], [, 기본값], [,가로 위치], [세로 위치])
Msgbox : 사용자에게 값을 리턴해주는 함수
변수명 = msgbox("메시지 내용" [, 단추 종류 + 아이콘 종류 ... ] [, "제목])
Sub 사용자인터랙션()
Dim 석식 As String
석식 = InputBox("오늘 저녁은 뭘 먹을까?", "저녁 메뉴 결정")
' Range("A1").Value = 석식
MsgBox 석식
End Sub
다양한 msgbox 설정값들
실습 진행
인풋박스로 값을 3개 입력 받아서 RGB 색상의 색을 엑셀 인테리어로 표시하기
중간 과제 공지
캐릭터 밸런스 분석하기
깊이 있는 밸런스 과제를 위해 형평성을 해제하였다.
가장 자신 있고, 잘 알고 있는 게임을 자유롭게 골라 캐릭터 밸런스를 분석하는 과제
특정 게임의 캐릭터 (or 클래스) 분석하기
- 자유 형식으로 캐릭터 (or 클래스) 분석
- 캐릭터 기획의도 및 목적성을 명확하게 분석 (장, 단점 포함)
- 스탯값 및 스킬 고찰 필수 (비교를 통한 거시적 분석)
- 분석한 내용을 통해 문제점이 있을 경우 밸런스 수정 제안 (기획 의도 파악 후 해당 캐릭터를 더욱 목적성에 맞도록 수정 제안)
필요 항목
게임에 대한 기본적인 정리 (이해를 돕기 위한 개요)
밸런스 요소 정리 (밸런스에 영향을 주는 항목 뽑기)
선택한 캐릭터 분석 (자유 형식을 통한 분석)
캐릭터 수정 보완 제안 (캐릭터의 목적성에 맞도록)
캐릭터 밸런스 분석하기 - 예시
캐릭터의 목적성에 집중한다. (ex : 벽을 깨부술 수 있는 곡사화기 영웅이 필요해 나온 정크랫)
장/단점(특징과 차이점 및 상성) 분석
스탯, 스킬 분석을 통해서 정량적 밸런스에 접근한다. 캐릭터는 스탯과 스킬을 통해 기본적인 캐릭터성을 갖는다.
다양한 접근이 가능하다 (개발자의 밸런스 노트, 유저 자유 게시판의 밸런스 갑론을박)
누군가의 결과물을 그대로 카피할 생각은 하지 말자. 본인의 성장에도 도움이 되지 않을 뿐더러, 평가 형평성에도 문제를 일으킨다.
이번 중간과제는 발표하지 않습니다.
- 과제 가독성 매우 중요.
- 부연 설명의 경우 슬라이드 노트를 활용하자.
필수 제출 과제물
과제의 이름 맞춰서 보낼 것 (학번_ㅇㅇ게임ㅇㅇ캐릭터분석서_이름)
'옵션'에서 파일의 글꼴을 포함해서 보낼 것
총 40점
1. 캐릭터 분석 관찰 범위와 깊이의 우수성 20점
2. 능력치 수치에 대한 밸런스 고찰의 우수성 20점
제출 기한 : (2주) 오늘부터 ~ 10월 29일 일요일 22시까지
제출 방식 : 교수님 이메일로 메일 보내기
'대학생활 > 수업' 카테고리의 다른 글
리얼타임엔진 7주차 - 중간 과제 공지, 개별 면담 (0) | 2023.10.17 |
---|---|
게임인공지능 7주차 - Shortest Path, Dijkstra, A* Algorithm (0) | 2023.10.17 |
게임그래픽프로그래밍심화 6주차 - DirectX 기본 활용 (0) | 2023.10.16 |
리얼타임엔진 6주차 - 중간고사 준비 (0) | 2023.10.10 |
게임인공지능 6주차 - Graph, Path Finding, Shortest Path, Dijkstra (0) | 2023.10.10 |