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

게임밸런스및시뮬레이션 10주차 - 반복문과 배열

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

반복문 

반복문 : For/ Next

조건 반복문 : Do/ Loop

 

For문

For 카운터 변수 = 시작 수 To 끝 수 [step 증감값]

   반복해서 처리할 내용

   'For문을 강제로 나가고 싶을 때 Exit For

Next [카운터 변수]

 

실습 진행

- For문으로 A1부터 오른쪽으로 1칸씩 이동하며 증가하는 숫자를 기입

Sub For문연습1()
    
    Dim a As Byte 'for문을 카운트 하기위한 카운트 변수 선언
    
    For a = 1 To 10 Step 1 ' a가 0부터 10까지 1씩 증가하며 for문을 실행
        ' 반복할 구문 처리 (A1에 0을 찍고 우측으로 옮겨가며 10까지 찍기)
        Range("A1").Offset(0, a).Value = a
    Next a

End Sub

 

 

Sub For문연습1()
    
    Dim a As Byte 'for문을 카운트 하기위한 카운트 변수 선언
    
    For a = 0 To 10 Step 1 ' a가 0부터 10까지 1씩 증가하며 for문을 실행
        ' 반복할 구문 처리 (A1에 0을 찍고 우측으로 옮겨가며 10까지 찍기)
        ' Range("A1").Offset(0, a).Value = a
        
        ' 셀속성으로 동일한 처리하기
        Cells(1, a + 1).Value = a
        
        ' 0일 때는 검은색, 홀수일 때는 빨간색, 짝수일 때는 파란색
        ' 검은색 = vbblack / 빨간색 = vbred / 파란색 = vbblue
        ' \몫 / mod 나머지
    
        If (a = 0) Then '결과값이 0이라면
            Cells(1, a + 1).Font.Color = vbBlack
        
        ElseIf a Mod 2 = 0 Then '결과값이 짝수라면
            Cells(1, a + 1).Font.Color = vbBlue
        
        Else '결과값이 0이 아니고, 짝수도 아닌 홀수라면
            Cells(1, a + 1).Font.Color = vbRed
        
        End If
    Next a
End Sub

 

For문으로 30번 루프를 돌면서 1~5사이 랜덤 돌리기

1. For문을 사용하여 30번 루프를 돈다.

2. 변수를 선언하고 루프 시마다 1~5 사이 랜덤 값을 지정한다.

3. A1부터 옆으로 이동하며 랜덤값을 찍는다

4. 랜덤값이 5가 나오면 메시지박스를 생성하고
     For 문을 종료한다.
     (제목 : 오에서종료 / 내용 : n번 만에 5가 나옴)
     (n번은 히스토리를 찍은 횟수임)
     (vbExclamation 와 vbOkOnly 사용)
5. 메시지박스를 닫으면 찍었던 값들을 삭제한다.

Sub For문연습2()
    
    ' 포문 카운트를 하기 위한 카운트 변수 선언 필요
    ' 랜덤을 처리하기 위한 변수 선언 필요
    Dim a As Byte, b As Byte ' a : 카운트변수 / b : 랜덤 변수
    
    ' for문 영역 = 반복해서 처리해야 하는 영역
    For a = 1 To 30 Step 1
    
        ' 랜덤 변수에 1~5 랜덤값 대입 처리 필요 / for 내부
        b = Application.RandBetween(1, 5)
        
        ' A1 셀부터 우측으로 이동하며 값을 찍는 처리 필요 (offset이나 cells 필요)
        Range("A1").Offset(0, a).Value = b '미완성 상태
        
        ' 랜덤값이 5가 나오면 for문을 강제로 종료하기
        ' Exit For : for문을 강제로 종료하기
        
        If b = 5 Then
            Exit For
        End If
    Next a
    
    ' 메시지 박스를 생성해서 몇 번만에 5가 나왔는지 알려주기
    MsgBox a & "번만에 깔끔하게 클리어!"
    
    [1:1].Value = "" ' 1번 줄 전체를 지우기
    
End Sub

 

구구단 만들기

Sub 구구단()
    Dim 입력 As Byte, i As Byte
    
    입력 = InputBox("숫자를 입력하세요.", "몇 단이 필요하신가요?")
    
    For i = 1 To 9 Step 1
        ActiveCell.Offset(i - 1, 0).Value = 입력
        ActiveCell.Offset(i - 1, 1).Value = "X"
        ActiveCell.Offset(i - 1, 2).Value = i
        ActiveCell.Offset(i - 1, 3).Value = "="
        ActiveCell.Offset(i - 1, 4).Value = 입력 * i
    Next i
    
    ' 구구단이 있는 위치를 선택하는 구문
    Range(ActiveCell, ActiveCell.Offset(8, 4)).Select
    Selection.HorizontalAlignment = xlCenter
End Sub

 

살 때마다 해당 물품 가격만큼 계속 비싸지는 물건

1. For문을 사용하여 구매개수만큼 루프 돌기

2. For문 내부에서 물건 가격이 구매 개수에 따라 증가하도록 설정

3. Function 리턴 값으로 구매개수를 모두 샀을 때의 총 필요 비용을 표시

Function udf점점비싸게(물건원가, 구매갯수)

    Dim 최종물건가격 As Long
    Dim a As Long
    
    For a = 1 To 구매갯수 Step 1
       ' 반복 처리해야 하는 구문 / 물건 가격을 누적해서 계산해주기
       최종물건가격 = 최종물건가격 + 물건원가 * a
       
    Next a
    
    udf점점비싸게 = 최종물건가격 ' 계산된 최종 물건 가격 리턴

End Function

 

Do while : 조건이 맞지 않으면 한 번도 실행하지 않는다.

Do : 조건이 맞지 않아도 한 번은 시도한다.

Sub 조건반복문1()
    
    Dim a As Byte
    
    Do While a > 10
        ' 반복 구문
        
        Cells(1, a + 1).Value = a
        
        ' 조건을 바꿔주는 구문
        a = a + 1
    Loop

End Sub
Sub 리스트추가()

    Dim i As Integer
    
    ' 몇 칸이 채워져 있는지 확인하는 구문
    Do While Range("B2").Offset(i, 0).Value <> ""
        i = i + 1
    Loop

    Range("B2").Offset(i, 0).Value = "번호 " & i
    Range("B2").Offset(i, 1).Value = "이름 " & i
    Range("B2").Offset(i, 2).Value = "등급 " & i

End Sub

 

Do until은 Do while의 반대 형태를 가진다.

 

조건 반복문 실습

1. 변수 A, B, C를 선언한다.
2. 변수 A, B, C에 랜덤으로 1~5의 숫자를 대입한다.
3. 선택된 셀부터 1칸씩 우측으로 히스토리를 표시한다.
4. A, B, C가 겹치지 않을 때까지 반복한다.
5. A, B, C가 겹치지 않게 되면, 메시지 박스로 반복 횟수를 표시한다.

Sub 실습()

    Dim A As Byte
    Dim B As Byte
    Dim C As Byte
    Dim i As Byte
    Dim Flag As Byte
    
    
    A = Application.RandBetween(1, 5)
    B = Application.RandBetween(1, 5)
    C = Application.RandBetween(1, 5)
    
    
    Do While Flag = 0
        i = i + 1
    
        If (A <> B And A <> C And B <> C) Then
            Flag = 1
        End If
        
        If (A = B) Then
            B = Application.RandBetween(1, 5)
        End If
        
        If (A = C) Then
            C = Application.RandBetween(1, 5)
        End If
        
        If (B = C) Then
            C = Application.RandBetween(1, 5)
        End If
    Loop
    
    MsgBox A & "," & B & "," & C & ": " & i & "회만에 성공"
    
End Sub

728x90
반응형