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

게임밸런스및시뮬레이션 9주차 - 간단한 게임 만들기 : 로우하이

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

로우하이 게임

1~100사이의 임의의 정답을 세팅한다.

인풋박스를 통해서 유저의 예상값을 받는다.

예상값이 정답보다 크면 "로우", 작으면 "하이"로 결과를 알려준다.

6회 내로 정답을 맞추면 축하 msgbox를, 못 맞추면 정답을 알려주고 격려 msgbox를 생성한다.

 

 

 

직접 실행 창을 이용하여 바로 입력할 수 있다.

 

실습 진행

Public 정답 As Byte, 스위치 As Byte, 도전 As Byte
Public Min As Byte, Max As Byte, Percent As Byte
Private Sub Workbook_Open()
    Call 게임세팅

End Sub


Sub 게임세팅()
    스위치 = 0
    도전 = 0
    정답 = 0
    Min = 1
    Max = 100
    
    For I = 0 To 6
        'Range("B12:E18").Value = ""
        Range("B12").Offset(I, 0).Value = ""
        Range("B12").Offset(I, 1).Value = ""
        Range("B12").Offset(I, 2).Value = ""
        Range("B12").Offset(I, 3).Value = ""
    Next
    
End Sub


Sub 게임플레이()
    
    Dim 입력 As Variant
    Dim 재시작확인 As Byte
    
    '스위치 = 0 : 게임 세팅이 필요한 상황
    '스위치 = 1 : 게임세팅이 필요없는 상황
    
    If 스위치 = 0 Then
        게임세팅
        정답 = WorksheetFunction.RandBetween(1, 100)
        스위치 = 1
    ElseIf 스위치 = 2 Then
        재시작확인 = MsgBox("게임을 다시 시작하시겠습니까?", vbQuestion + vbYesNo, "게임 재시작")
        ' 유저 재시작 확인 입력에 따른 처리
        If 재시작확인 = vbYes Then
            Call 게임세팅 ' 게임세팅 매크로를 실행한다.
        Else '아니오를 눌렀을 때
            Exit Sub
        End If
    End If
    

    
    Percent = WorksheetFunction.Round((1 / (Max - Min + 1)) * 100, 2)
    입력 = InputBox(Min & "부터 " & Max & "까지의 숫자 중에 정답이 있습니다." & vbNewLine & "정답확률 = " & Percent & "%", "정답 맞추기 도전 " & 도전 + 1 & "/6")
        
    
    If IsNumeric(입력) = False Then
        MsgBox "1~100까지의 숫자를 입력하세요.", vbCritical, "잘못된 값"
    
    Else
        'If 입력 <= 0 Then
        '    MsgBox "최소값은 1입니다.", vbCritical, "잘못된 값"
        'ElseIf 입력 > 100 Then
        '    MsgBox "최대값은 100입니다.", vbCritical, "잘못된 값"
        If 입력 <= 0 Or 입력 > 100 Then
            MsgBox "1~100 사이의 값을 입력하세요.", vbCritical, "잘못된 값"
        ElseIf 입력 - Int(입력) <> 0 Then '소수로 값이 올 경우
            MsgBox "정수 값을 입력하세요.", vbCritical, "잘못된 값"
        Else
            도전 = 도전 + 1
            Range("B12").Offset(도전, 0).Value = 도전
            Range("B12").Offset(도전, 1).Value = 입력
            
            If 입력 < 정답 Then
                Range("B12").Offset(도전, 2).Value = "하이"
                Range("B12").Offset(도전, 3).Value = "정답은 더 큽니다."
                
                If Min <= 입력 Then
                    Min = 입력 + 1
                End If
            
            ElseIf 입력 > 정답 Then
                Range("B12").Offset(도전, 2).Value = "로우"
                Range("B12").Offset(도전, 3).Value = "정답은 더 작습니다."
                
                If Max >= 입력 Then
                    Max = 입력 - 1
                End If
            
            Else 'If 입력 = 정답 Then
                Range("B12").Offset(도전, 2).Value = "정답"
                Range("B12").Offset(도전, 3).Value = "정답입니다."
                스위치 = 2
                Exit Sub
            
            End If
        End If
    End If
    
    If 도전 = 6 Then
        MsgBox "정답은 " & 정답 & "이었습니다.", vbInformation, "게임오버"
        스위치 = 2
    End If
    
End Sub

 

 

 

 

 

 

시트를 껐다가 켜도 반영되게 하려면 시트가 켜지자마자 동작하게 구문을 셋팅 해 주어야 한다.

Workbook_Open()을 이용하여 셋업 해 줄 수 있다.

728x90
반응형