
Word Jumble 게임은
영어단어 'apple'이 'eplpa'나 'lpape' 로 섞여 있을때 원래 단어 'apple'을 맞추는 게임입니다.

섞여 있는 철자의 원래 단어를 찾아내는 것이 쉽지만은 않습니다.
첫글자나 중간 글자에 대한 힌트라도 있다면 좀 더 풀기 편해집니다.
온라인에 Jumble 풀이에 도움을 주는 사이트도 있습니다.
https://word.tips/jumble-solver/
Word Jumble 퀴즈를 파워포인트 슬라이드에 만들 경우에
단어 철자를 섞고 문제를 만드는 것이 귀찮기도 하고 자칫 잘못하면 철자를 틀리기 쉽습니다.
그래서 이번 기회에 여러 단어에 대한 Word Jumble 게임 슬라이드를
일괄로 자동으로 생성하는 VBA매크로를 만들어 보았습니다.
첫번째 버전입니다.

위처럼 타이틀 슬라이드, 템플릿 슬라이드, 문제 슬라이드들로 구성됩니다.
Alt+F8을 누르고 Load_XL을 실행하면
엑셀파일 단어 목록으로부터
Word Jumble 문제 슬라이드들을 일괄로 자동 생성합니다.
1, 엑셀파일은 다른 양식이 필요 없고 A1셀부터 아래로 단어목록을 입력하고 저장하면 됩니다.

2. 문제슬라이드가 생성되는 템플릿 슬라이드가 2슬라이드입니다.
매크로 실행 전에 이 슬라이드를 먼저 수정하는 것이 좋습니다.
특히 Scrambled와 Unscrambled 텍스트상자(도형)이 중요합니다.
폰트나 글자색상, 글자크기, 글자효과, 애니메이션이 모두 그대로 문제 슬라이드에 반영됩니다.
슬라이드의 배경이나 제목문구, 라운드 숫자, 10초 타이머 애니메이션, 타임오버 애니메이션 등도 수정해도 됩니다.
제목문구나 여러가지 그래픽은 구글 Gemini의 도움을 받았습니다.

기본적인 애니메이션은 아래와 같이 구성되어 있습니다.
전구아이콘은 힌트 글자가 뜨게하는 트리거 도형인데 자동으로 생성되므로 수정할 필요 없습니다.
(제목에 있는 작은 전구도형을 복사하므로 혹시 지워버리면 힌트가 작동하지 못합니다.)

3. 엑셀 파일과 문제 템플릿 슬라이드가 준비되었다면 이제 매크로 실행만 하면 됩니다.
Alt+F8을 누르고 LoadXL 매크로를 실행하고 엑셀파일을 선택합니다.

4. Questions 영역에 문제 슬라이드들이 복제되어 생성됩니다.

5. 실행 화면
전구모양 힌트 아이콘을 누르면 글자가 나타납니다.
(원래 나타난 글자를 다시 누르면 사라지게 하려고 했으나
나중에 나타나는 정답 글자 아래에 있어서 그 기능은 현재 작동하지 않습니다.)
이 프레젠테이션에는 사용된 폰트는 렉시굴림 폰트입니다.
렉시굴림 도도 수정본
https://blog.naver.com/slayers_dodo/220767325724
VBA코드입니다.
Option Explicit
Private Sub NameShapes()
Dim pNum As Integer, usr$, shp As Shape
usr = InputBox("도형이름 시작문구를 입력하세요.", , "_")
If Len(usr) = 0 Then Exit Sub
For Each shp In ActiveWindow.Selection.ShapeRange
pNum = pNum + 1
shp.Name = usr & Format(pNum, "00")
Next shp
End Sub
Function shpExist(oSld As Slide, strName As String) As Boolean
Dim shp As Shape
For Each shp In oSld.Shapes
If shp.Name = strName Then shpExist = True: Exit Function
Next shp
shpExist = False
End Function
'shuffle
Sub shufflerange(Optional Notused As Boolean)
Dim Iupper As Integer, Ilower As Integer
Dim Ifrom As Integer, Ito As Integer, Default As Integer, i As Integer
Iupper = ActivePresentation.Slides.Count
Ilower = Default + 1 'slide number to start shuffle
If Iupper > ActivePresentation.Slides.Count Or Ilower <= Default Then GoTo err
For i = 1 To 2 * Iupper
Randomize
Ifrom = Int((Iupper - Ilower + 1) * Rnd + Ilower)
Ito = Int((Iupper - Ilower + 1) * Rnd + Ilower)
ActivePresentation.Slides(Ifrom).MoveTo (Ito)
Next i
MsgBox (Iupper - Ilower) & "slides were mixed in order."
Exit Sub
err:
MsgBox "ERROR) Generate a new slideshow first.", vbCritical
End Sub
'사용법
' =shuffle(A1) : 첫번째 단어부터 섞기
' =shuffle(A11,2) : 세번째 단어부터 섞기
Private Sub testShuffle()
Debug.Print Shuffle("try to", 0)
End Sub
Function Shuffle(str As String, Optional Except As Integer = 1) As String
Dim Words() As String, temp As String
Dim total As Integer, start As Integer, i As Integer, r As Integer
'주어진 문장 조각내기
Words = Split(Trim(str), " ")
total = UBound(Words)
start = LBound(Words)
If total = 0 Then Shuffle = str: Exit Function
'단어 배열 섞기 시작
Randomize '랜덤 시드 초기화
'만약 처음 몇단어를 제외하고 섞는다면
If Except Then start = start + Except
For i = start To total
r = Int(Rnd * (total - start)) + start
temp = Words(i) '랜덤 위치의 배열과 서로 교환
Words(i) = Words(r)
Words(r) = temp
Next i
'결과 문장 생성
Shuffle = ""
For i = LBound(Words) To total
Shuffle = Shuffle & Words(i)
If i <> total Then Shuffle = Shuffle & " " '"/ "
Next i
Shuffle = Shuffle & ""
End Function
Private Sub testScramble()
Debug.Print Scramble("try to")
End Sub
Function Scramble(word As String) As String
Dim temp() As String
Dim i As Integer
word = Shuffle(Trim(word), 0)
temp = Split(word, " ")
For i = LBound(temp) To UBound(temp)
temp(i) = ScrambleWord(temp(i))
Next i
If UBound(temp) = LBound(temp) Then
Scramble = temp(LBound(temp))
Else
Scramble = Join(temp, " ")
End If
End Function
Function ScrambleWord(str As String) As String
Dim Scr() As String, temp As String
Dim total As Integer, i As Integer, r As Integer
'주어진 단어 조각내기
str = StrConv(Trim(str), vbUnicode)
Scr = Split(Left(str, Len(str) - 1), vbNullChar)
total = UBound(Scr)
'단어 배열 섞기 시작
Randomize '랜덤 시드 초기화
For i = LBound(Scr) To total
r = Int(Rnd * total)
temp = Scr(i) '랜덤 위치의 배열과 서로 교환
Scr(i) = Scr(r)
Scr(r) = temp
Next i
'결과 단어 생성
ScrambleWord = Join(Scr, "")
End Function
Sub LoadXL()
Dim FD As FileDialog, xlFile$
Dim xL As Object, xBook As Object, xSht As Object, xRng As Object, xRngLast As Object
Dim prs As Presentation, sld As Slide, shp As Shape, Default&, i&
Set prs = ActivePresentation
Default = 2 '기준 슬라이드
Set FD = Application.FileDialog(msoFileDialogFilePicker)
With FD
.Filters.Clear
.Filters.Add "Word List Excel", "*.xls?,*.csv"
.InitialFileName = prs.Path & "\"
If .Show = -1 Then xlFile = .SelectedItems(1)
End With
If xlFile = "" Then Exit Sub
'// 기존 슬라이드 삭제
If prs.Slides.Count > Default Then
If MsgBox("기존 슬라이드들을 지울까요?", vbOKCancel) = vbOK Then
For i = prs.Slides.Count To Default + 1 Step -1
prs.Slides(i).Delete
Next i
End If
End If
Set xL = CreateObject("Excel.Application")
If xL Is Nothing Then Exit Sub
Set xBook = xL.workbooks.Open(xlFile)
Set xSht = xBook.Worksheets(1)
Set xRngLast = xSht.Cells(xSht.Rows.Count, "A").End(-4162)
For Each xRng In xSht.Range("A1:A" & xRngLast.Row)
Set sld = prs.Slides(Default).Duplicate(1)
sld.MoveTo prs.Slides.Count
If xRng.Row = 1 Then sld.MoveToSectionStart 3
sld.SlideShowTransition.Hidden = msoFalse
sld.Shapes("Scrambled").TextFrame.TextRange = Scramble(xRng.Text)
sld.Shapes("Unscrambled").TextFrame.TextRange = Trim(xRng.Text)
addHint sld
If sld.Shapes("Ruler").Fill.GradientStops.Count = 2 Then _
sld.Shapes("Ruler").Fill.GradientStops(2).Color.RGB = RGB(Rnd * 125, Rnd * 125, Rnd * 125)
sld.Shapes("Round").TextFrame.TextRange = Format(xRng.Row, "00") & " / " & xRngLast.Row
Next xRng
If Not xBook Is Nothing Then xBook.Close
If Not xL Is Nothing Then Set xL = Nothing
End Sub
Function delShapes(sld As Slide, pref As String)
Dim i As Long
For i = sld.Shapes.Count To 1 Step -1
If sld.Shapes(i).Name Like pref Then sld.Shapes(i).Delete
Next i
End Function
Private Sub doAddhint()
Dim sld As Slide
Set sld = ActivePresentation.Slides(2)
addHint sld
End Sub
Function addHint(oSld As Slide)
Dim hshp As Shape, shp As Shape, sshp As Shape, eft As Effect
Dim x!, y!, w!, h!, sw!, sh!, i&, j&, id&
Set hshp = oSld.Shapes("Hint")
sw = hshp.Width: sh = hshp.Height
y = (oSld.Shapes("Scrambled").Top + oSld.Shapes("Scrambled").Height)
y = y + (oSld.Shapes("Unscrambled").Top - y) / 2
Call delShapes(oSld, "Hint_*")
Call delShapes(oSld, "Uns_*")
With oSld.Shapes("Unscrambled").TextFrame.TextRange
For i = 1 To Len(.Text)
If .Characters(i) <> " " Then '빈칸 제외
'힌트 트리거 도형 생성
x = .Characters(i).BoundLeft
w = .Characters(i).BoundWidth
h = .Characters(i).BoundHeight
Set shp = hshp.Duplicate(1): DoEvents
shp.Left = x + w / 2 - sw / 2
shp.Top = y - sh / 2
shp.Rotation = 0
shp.Name = "Hint_" & i
id = oSld.TimeLine.MainSequence.FindFirstAnimationFor(oSld.Shapes("Scrambled")).Index
Set eft = oSld.TimeLine.MainSequence.AddEffect(shp, msoAnimEffectAppear, , msoAnimTriggerAfterPrevious, id + 1)
'힌트 글자 도형 생성
With oSld.Shapes("Unscrambled")
Set sshp = .Duplicate(1)
sshp.Name = "Uns_" & i
sshp.ZOrder msoSendToBack
sshp.TextFrame2.TextRange.Font.Shadow.Visible = msoFalse
oSld.TimeLine.MainSequence.FindFirstAnimationFor(sshp).Delete
End With
With sshp.TextFrame.TextRange.Characters
For j = .Count To 1 Step -1
If j <> i Then .Characters(j).Delete
Next j
End With
sshp.Width = w 'sshp.Height = h
sshp.Left = x
sshp.Top = .Characters(i).BoundTop
sshp.TextFrame.TextRange.Font.Color = rgbLightGray
'힌트 도형 누르면 나타나기
Set eft = oSld.TimeLine.InteractiveSequences.Add().AddTriggerEffect( _
sshp, msoAnimEffectFade, msoAnimTriggerOnShapeClick, shp)
'글자 누르면 사라지기 (가려져서 미작동)
Set eft = oSld.TimeLine.InteractiveSequences.Add().AddTriggerEffect( _
sshp, msoAnimEffectFade, msoAnimTriggerOnShapeClick, sshp)
eft.Exit = msoTrue
End If
Next i
End With
End Function
파일은 위쪽에 있습니다.
다음으로 Word Jumble 게임을 Bomb Game 형식으로 생성하는 버전도 만들어 보았습니다.
'PPT GAME' 카테고리의 다른 글
| 초성게임 자동 생성기 (0) | 2025.10.28 |
|---|---|
| Word Jumble + Bomb Game 영어/한글 단어 맞추기 게임 자동 생성기 v2 (0) | 2025.10.26 |
| [Bomb Game] '코끼리'에 관한 퀴즈 자동 생성 (0) | 2025.09.09 |
| [Bomb Game] 화성 OX 퀴즈 (3) | 2025.06.18 |
| [Bomb Game]Bomb Game 생성기 24 (1) | 2025.05.13 |
| 랜덤 주사위 + 누적 통계 차트 (2) | 2024.08.30 |
| [Bomb Game 템플릿] OX퀴즈 템플릿, 16칸짜리 (0) | 2024.06.04 |
| [게임] 윷놀이 (6가지 스킨) (9) | 2022.02.02 |

최근댓글