옛날에 아주 머나먼 옛적에 했었던 추억의 탱크 게임이다.
HTA 로 별에 별 짓 다해 보기 시리즈 중에 인공지능(???!!!)이 탑재된 ...... 왠지 미안하다.
조작방법은 숫자키거나 AWSD and Space 키다.
해상도(?)를 상당히 조악하게 만든 이유는 단순히 성능 때문이다...
원래는 탱크 모양이 더 이뻤는데, 테이블 형식으로 구현되어 있다보니
테이블 칸이 많아지면 성능이 기하급수적으로 느려지게 된다.
일단 바둑판 모양으로 판을 짠 다음에 랜덤으로 지우는 방식으로 맵을 만들어 낸다.
중간 중간에 랜덤으로 철벽도 심어 놓았다.
랜덤으로 맵을 만들다 보니까 난이도(라고 할꺼 까지도 없지만...)가 그때그때 다르다.
팩맨이랑은 다르게 벽이 부셔지다 보니까 얘네들 움직임을 잡는데 꽤나 애먹었다.
(팩맨 소스 기반으로 만든거라서 주석에 팩맨의 향기가 많이 남아 있다... 귀찮아서 정리 안 함)
사방이 뚫여 있으니까 움직이던 방향에서 언제 턴을 하느냐를 잘 잡아 줘야 한다.
별에 별짓을 다해서 그나마 이 정도라도 움직인다...
적군들을 랜덤으로만 움직이게 만들었더니 난이도가 최최하하가 되어 버려서
내 탱크가 있는 방향으로 움직이도록 살짝 트릭도 넣어 놓았다.
알파고 같은 건 학습을 통해서 스타크레프트까지 한다는데 이건 고작 탱크 따라가기도 바쁘다.
내 탱크 위치를 글로벌로 들고 있고, 적군이 움직일때 내 탱크 위치를 기반으로 랜덤으로 상/하, 좌/우 로 가게 만들었다.
쟤네를 세트로 묶은 이유는... 저렇게 안 하면 아주 지랄발광이 나서 탱크까지 못 간다.
[Tank.hta]
<html>
<meta charset="euc-kr">
<head>
<title>Tank</title>
<HTA:APPLICATION
ID="강멍멍이"
APPLICATIONNAME="Tank"
SCROLL="no"
SINGLEINSTANCE="yes"
WINDOWSTATE="normal"
/>
<style>
BODY {
font-size:8pt;
font-family:돋움체;
}
TABLE, TR, TD {
font-size:1pt;
text-indent:-10000px;
border:0px solid black;
border-collapse:collapse;
}
.hide {
opacity : 0;
transition: opacity 1s linear;
-webkit-transition: opacity 1s linear;
}
</style>
<script language="VBScript">
'text-indent:-10000px;
Dim interval, levelCnt, levelCntMax , intervalMinus, viewLevel
Dim intRow, intCol
Dim rowBound, colBound
Dim aniXDir, aniYDir
Dim packManArr(4,2)
Dim packManDir
Dim poewrPackManYn, packManColor, powerCode, powerTime, powerTimeLimit
Dim fireCannonYn ' , cannonRow, cannonCol, cannonDir
Dim enemiesArr(7,5) '적군 갯수
Dim enemyArr(4,2)
Dim tankCannonArr(10,4) '캐논 위치
Dim cannonCnt, tankCannoCnt, enemyCannoCnt
Dim endGameYn
Dim eatFoodCnt
Dim timerID, cannonTimerID, animateTimerID
Dim colorArr
Dim faceType
Dim packManCode, enemyCode, initWallCode, wallCode, borderWallCode, appleCode
Dim eagleCode, enemyEagleCode
Dim myEnergy, enemyEnergy
Dim enemyResponeCnt
Sub Window_OnLoad
window.resizeTo 370, 400
window.moveTo 1200, 350
colorArr = Array("aqua", "lime", "darkkhaki", "darkred", "plum", "salmon", "orange", "pink", "purple")
rowBound = CInt(labRow.innerHTML)
colBound = CInt(labCol.innerHTML)
packManCode = "1"
appleCode = "2"
enemyCode = "3"
powerCode = "4"
eagleCode = "5"
enemyEagleCode = "6"
wallCode = "8"
borderWallCode = "9"
'판때기 생성
For nRow = 1 To rowBound
Set tblRow = mainTbl.insertRow()
For nCell = 1 To colBound
Set tblCell = tblRow.insertCell()
tblCell.style.width = 2
tblCell.style.height = 2
tblCell.style.backgroundcolor = "ffffff"
tblCell.innerHtml= "0"
Next
Next
'테두리
For nRow = 0 To rowBound - 1
mainTbl.Rows(nRow).Cells(0).innerHtml = wallCode
mainTbl.Rows(nRow).Cells(0).style.backgroundcolor = "gray"
mainTbl.Rows(nRow).Cells(colBound - 1).innerHtml = wallCode
mainTbl.Rows(nRow).Cells(colBound - 1).style.backgroundcolor = "gray"
Next
For nCol = 0 To colBound - 1
mainTbl.Rows(0).Cells(nCol).innerHtml = wallCode
mainTbl.Rows(0).Cells(nCol).style.backgroundcolor = "gray"
mainTbl.Rows(rowBound - 1).Cells(nCol).innerHtml = wallCode
mainTbl.Rows(rowBound - 1).Cells(nCol).style.backgroundcolor = "gray"
Next
aniXDir = 0
aniYDir = 0
intRow = CInt(rowBound / 2)
intCol = CInt(colBound / 2)
'animateTimerID = window.setTimeOut("animate", 500)
End Sub
'sleep 패키지 시작 --------------------------------------------------------------
Sub doSleep
Set objSleep = CreateObject("WScript.Shell")
objSleep.Run "%COMSPEC% /c ECHO " & Chr(7), 0, false
window.setTimeOut "doNothing", 1 '0.001초 대기 후 doNothing 을 실행한다.
End Sub
'처리 현황. 암것도 안 함. 단지 슬립할려고 부른다.
Sub doNothing
End Sub
'sleep 패키지 끝 ----------------------------------------------------------------
'게임 시작. 초기화 ----------------------------------------------------------------------------------
Sub startGame
document.body.focus() '시작버튼에 있는 포커스 제거
loadingDiv.innerHTML = "<center><font size=3pt color=white><b>Loading ...</b></font></center>"
loadingDiv.style.visibility = "visible"
doSleep
window.clearTimeOut(animateTimerID)
levelCntMax = 100
intervalMinus = 10
interval = 180 '성능이 안 받쳐줘서 이거 이하로 내려도 의미 없다.
levelCnt = 1
viewLevel = 1
scoreCnt = 0
endGameYn = "N"
eatFoodCnt = 0
poewrPackManYn = "N"
packManColor = "teal"
powerTime = 0
powerTimeLimit = 100
'fireCannonYn = "N"
cannonCnt = 0
tankCannoCnt = 0
enemyCannoCnt = 0
myEnergy = 3
enemyEnergy = 7
enemyResponeCnt = 0
labLevelCnt.innerHTML = viewLevel
'초기화
For nRow = 1 To rowBound - 2
For nCol = 1 To colBound - 2
mainTbl.Rows(nRow).Cells(nCol).innerHtml = 0
mainTbl.Rows(nRow).Cells(nCol).style.backgroundcolor = "white"
Next
Next
On Error Resume Next
'COL 줄 긋기
For nRow = 0 To rowBound - 1
For nCol = 0 To colBound - 1 Step + 7
'악당들은 여백이 있어야 최초에 자유로이 움직일 수 있다.
IF nRow < rowBound - 7 THEN
mainTbl.Rows(nRow).Cells(nCol - 1).innerHtml = wallCode
mainTbl.Rows(nRow).Cells(nCol - 1).style.backgroundcolor = "gray"
END IF
mainTbl.Rows(nRow).Cells(nCol).innerHtml = wallCode
mainTbl.Rows(nRow).Cells(nCol).style.backgroundcolor = "gray"
Randomize
thinYn = Int(3 * Rnd)
IF thinYn = 2 THEN
mainTbl.Rows(nRow).Cells(nCol + 1).innerHtml = wallCode
mainTbl.Rows(nRow).Cells(nCol + 1).style.backgroundcolor = "gray"
'양쪽 젤 끝에 통로는 안 막는다.(안 된다..?)
'If (nCol > 1 And nCol < colBound - 1) Then
' If (nRow > 0 And nRow < 7) OR (nRow > rowBound - 8 And nRow < rowBound - 1) Then
' mainTbl.Rows(nRow).Cells(nCol).innerHtml = 0
' mainTbl.Rows(nRow).Cells(nCol).style.backgroundcolor = "white"
' End If
'End If
END IF
Next
Next
'ROW 줄 긋기
For nCol = 0 To colBound - 1
For nRow = 0 To rowBound - 1 Step + 7
'악당들은 여백이 있어야 최초에 자유로이 움직일 수 있다.
IF nRow < rowBound - 7 THEN
mainTbl.Rows(nRow - 1).Cells(nCol).innerHtml = wallCode
mainTbl.Rows(nRow - 1).Cells(nCol).style.backgroundcolor = "gray"
END IF
mainTbl.Rows(nRow).Cells(nCol).innerHtml = wallCode
mainTbl.Rows(nRow).Cells(nCol).style.backgroundcolor = "gray"
Randomize
thinYn = Int(3 * Rnd)
IF thinYn = 2 THEN
mainTbl.Rows(nRow + 1).Cells(nCol).innerHtml = wallCode
mainTbl.Rows(nRow + 1).Cells(nCol).style.backgroundcolor = "gray"
'양쪽 젤 끝에 통로는 안 막는다.
'If (nRow > 1 And nRow < rowBound - 1) Then
' If (nCol > 0 And nCol < 7) OR (nCol > colBound - 8 And nCol < colBound - 1) Then
' mainTbl.Rows(nRow).Cells(nCol).innerHtml = 0
' mainTbl.Rows(nRow).Cells(nCol).style.backgroundcolor = "white"
' End If
'End If
END IF
Next
Next
'보더 코드값 변경
For nRow = 0 To rowBound - 1
mainTbl.Rows(nRow).Cells(0).innerHtml = borderWallCode
mainTbl.Rows(nRow).Cells(0).style.backgroundcolor = "black"
mainTbl.Rows(nRow).Cells(colBound - 1).innerHtml = borderWallCode
mainTbl.Rows(nRow).Cells(colBound - 1).style.backgroundcolor = "black"
Next
For nCol = 0 To colBound - 1
mainTbl.Rows(0).Cells(nCol).innerHtml = borderWallCode
mainTbl.Rows(0).Cells(nCol).style.backgroundcolor = "black"
mainTbl.Rows(rowBound - 1).Cells(nCol).innerHtml = borderWallCode
mainTbl.Rows(rowBound - 1).Cells(nCol).style.backgroundcolor = "black"
Next
'팩맨 초기화
intRow = 9
intCol = CInt(colBound / 2) - 2
packManArr(0, 0) = intRow
packManArr(0, 1) = intCol
packManArr(1, 0) = intRow
packManArr(1, 1) = intCol + 3
packManArr(2, 0) = intRow + 3
packManArr(2, 1) = intCol
packManArr(3, 0) = intRow + 3
packManArr(3, 1) = intCol + 3
packManDir = 2
okFalg = drawPackMan(packManArr, intRow, intCol, "teal", "Y", packManDir)
Call makeStage
loadingDiv.style.visibility = "hidden"
doSleep
'Call moveRight
timerID = window.setTimeOut("movePackMan", interval)
'cannonTimerID = window.setTimeOut("fireCannonMove 0, 0, 0", 50)
cannonTimerID = window.setTimeOut("fireCannonMove", 50)
Call makeEnemies
End Sub
'스테이지 렌덤 생성 ----------------------------------------------------------------------------------
Sub makeStage
'ROW 내벽 빵꾸 내기
For nRow = 7 To rowBound - 7 Step + 7
wallPos = 0
Do While wallPos < colBound - 7
Randomize
deleteYn = Int(3 * Rnd)
If deleteYn = 0 Then
For nCol = wallPos + 1 To wallPos + 6
If nCol > colBound - 1 Then
Exit For
End If
mainTbl.Rows(nRow - 1).Cells(nCol).innerHtml = 0
mainTbl.Rows(nRow - 1).Cells(nCol).style.backgroundcolor = "white"
mainTbl.Rows(nRow).Cells(nCol).innerHtml = 0
mainTbl.Rows(nRow).Cells(nCol).style.backgroundcolor = "white"
mainTbl.Rows(nRow + 1).Cells(nCol).innerHtml = 0
mainTbl.Rows(nRow + 1).Cells(nCol).style.backgroundcolor = "white"
Next
End If
wallPos = wallPos + 7
Loop
Next
'COL 내벽 빵꾸 내기
For nCol = 7 To colBound - 7 Step + 7
wallPos = 0
Do While wallPos < rowBound - 7
Randomize
deleteYn = Int(3 * Rnd)
If deleteYn = 0 Then
For nRow = wallPos + 1 To wallPos + 6
If nRow > rowBound - 1 Then
Exit For
End If
mainTbl.Rows(nRow).Cells(nCol - 1).innerHtml = 0
mainTbl.Rows(nRow).Cells(nCol - 1).style.backgroundcolor = "white"
mainTbl.Rows(nRow).Cells(nCol).innerHtml = 0
mainTbl.Rows(nRow).Cells(nCol).style.backgroundcolor = "white"
mainTbl.Rows(nRow).Cells(nCol + 1).innerHtml = 0
mainTbl.Rows(nRow).Cells(nCol + 1).style.backgroundcolor = "white"
Next
End If
wallPos = wallPos + 7
Loop
Next
'ROW 철벽 만들기
For nRow = 7 To rowBound - 7 Step + 7
wallPos = 0
Do While wallPos < colBound - 7
Randomize
ironYn = Int(7 * Rnd)
'가운데 철벽은 항상 생성한다.
IF nRow = 21 AND wallPos = 21 THEN
ironYn = 0
END IF
If ironYn = 0 Then
For nCol = wallPos + 1 To wallPos + 6
If nCol > colBound - 1 Then
Exit For
End If
mainTbl.Rows(nRow).Cells(nCol).innerHtml = borderWallCode
mainTbl.Rows(nRow).Cells(nCol).style.backgroundcolor = "black"
Next
End If
wallPos = wallPos + 7
Loop
Next
'COL 철벽 만들기
For nCol = 7 To colBound - 7 Step + 7
wallPos = 0
Do While wallPos < rowBound - 7
Randomize
ironYn = Int(7 * Rnd)
If ironYn = 0 Then
For nRow = wallPos + 1 To wallPos + 6
If nRow > rowBound - 1 Then
Exit For
End If
mainTbl.Rows(nRow).Cells(nCol).innerHtml = borderWallCode
mainTbl.Rows(nRow).Cells(nCol).style.backgroundcolor = "black"
Next
End If
wallPos = wallPos + 7
Loop
Next
'아군 독수리 만들기
eagleColSPos = CInt(colBound / 2) - 2
eagleRowSPos = 2
For nCol = 1 To 2
mainTbl.Rows(eagleRowSPos).Cells(eagleColSPos + nCol).innerHtml = eagleCode
mainTbl.Rows(eagleRowSPos).Cells(eagleColSPos + nCol).style.backgroundcolor = "774420"
Next
For nRow = 0 To 1
For nCol = 0 To 3
mainTbl.Rows(eagleRowSPos + 1 + nRow).Cells(eagleColSPos + nCol).innerHtml = eagleCode
mainTbl.Rows(eagleRowSPos + 1 + nRow).Cells(eagleColSPos + nCol).style.backgroundcolor = "77aa30"
Next
Next
mainTbl.Rows(eagleRowSPos + 3).Cells(eagleColSPos + 2).innerHtml = eagleCode
mainTbl.Rows(eagleRowSPos + 3).Cells(eagleColSPos + 2).style.backgroundcolor = "77a180"
'적군 독수리 만들기
eagleColSPos = CInt(colBound / 2) - 2
eagleRowSPos = rowBound - 5
For nCol = 1 To 2
mainTbl.Rows(eagleRowSPos).Cells(eagleColSPos + nCol).innerHtml = enemyEagleCode
mainTbl.Rows(eagleRowSPos).Cells(eagleColSPos + nCol).style.backgroundcolor = "dd8820"
Next
For nRow = 0 To 1
For nCol = 0 To 3
mainTbl.Rows(eagleRowSPos + 1 + nRow).Cells(eagleColSPos + nCol).innerHtml = enemyEagleCode
mainTbl.Rows(eagleRowSPos + 1 + nRow).Cells(eagleColSPos + nCol).style.backgroundcolor = "ddaa30"
Next
Next
mainTbl.Rows(eagleRowSPos + 3).Cells(eagleColSPos + 2).innerHtml = enemyEagleCode
mainTbl.Rows(eagleRowSPos + 3).Cells(eagleColSPos + 2).style.backgroundcolor = "dda180"
End Sub
'팩맨, 악당 그리기 전에 현재 이미지 삭제 --------------------------------------------------------------
Sub deletePackMan(getRow, getCol, isPackMan)
On Error Resume Next
For nRow = 0 To 3
For nCol = 0 To 3
'악당은 사과를 먹을 수 없어
IF isPackMan = "N" AND mainTbl.Rows(getRow + nRow).Cells(nCol + getCol).innerHtml = appleCode Then
mainTbl.Rows(getRow + nRow).Cells(nCol + getCol).innerHtml = appleCode
mainTbl.Rows(getRow + nRow).Cells(nCol + getCol).style.backgroundcolor = "salmon"
ELSEIF isPackMan = "N" AND mainTbl.Rows(getRow + nRow).Cells(nCol + getCol).innerHtml = powerCode Then
mainTbl.Rows(getRow + nRow).Cells(nCol + getCol).innerHtml = powerCode
mainTbl.Rows(getRow + nRow).Cells(nCol + getCol).style.backgroundcolor = "blue"
Else
IF mainTbl.Rows(getRow + nRow).Cells(nCol + getCol).innerHtml <> 7 THEN
mainTbl.Rows(getRow + nRow).Cells(nCol + getCol).innerHtml = 0
END IF
mainTbl.Rows(getRow + nRow).Cells(nCol + getCol).style.backgroundcolor = "white"
End If
Next
Next
End Sub
'팩맨, 악당 그리기 ----------------------------------------------------------------------------------
Function drawPackMan(getBodyArr, getRow, getCol, getColor, isPackMan, getDir)
getBodyArr(0, 0) = getRow
getBodyArr(0, 1) = getCol
getBodyArr(1, 0) = getRow
getBodyArr(1, 1) = getCol + 3
getBodyArr(2, 0) = getRow + 3
getBodyArr(2, 1) = getCol
getBodyArr(3, 0) = getRow + 3
getBodyArr(3, 1) = getCol + 3
chk1Row = getBodyArr(0, 0)
chk1Col = getBodyArr(0, 1)
chk2Row = getBodyArr(1, 0)
chk2Col = getBodyArr(1, 1)
chk3Row = getBodyArr(2, 0)
chk3Col = getBodyArr(2, 1)
chk4Row = getBodyArr(3, 0)
chk4Col = getBodyArr(3, 1)
drawPackMan = "Y"
If isPackMan = "Y" Then
markValue = packManCode
Else
markValue = enemyCode
End If
'상단 벽 체크
On Error Resume Next
For chkCol = chk1Col To chk2Col
getResult = chkWallAndCrash(chk1Row, chkCol, isPackMan, getColor)
IF getResult <> "Y" Then
drawPackMan = getResult
Exit Function
End IF
Next
'우측 벽 체크
For chkRow = chk2Row To chk4Row
getResult = chkWallAndCrash(chkRow, chk2Col, isPackMan, getColor)
IF getResult <> "Y" Then
drawPackMan = getResult
Exit Function
End IF
Next
'하단 벽 체크
For chkCol = chk3Col To chk4Col
getResult = chkWallAndCrash(chk3Row, chkCol, isPackMan, getColor)
IF getResult <> "Y" Then
drawPackMan = getResult
Exit Function
End IF
Next
'좌측 벽 체크
For chkRow = chk1Row To chk3Row
getResult = chkWallAndCrash(chkRow, chk1Col, isPackMan, getColor)
IF getResult <> "Y" Then
drawPackMan = getResult
Exit Function
End IF
Next
'나와라 팩맨
For nRow = 0 To 3
For nCol = 0 To 3
'악당은 사과를 먹을 수 없어
IF isPackMan = "N" AND mainTbl.Rows(getRow + nRow).Cells(nCol + getCol).innerHtml = appleCode Then
mainTbl.Rows(getRow + nRow).Cells(nCol + getCol).innerHtml = appleCode
mainTbl.Rows(getRow + nRow).Cells(nCol + getCol).style.backgroundcolor = "salmon"
ELSEIF isPackMan = "N" AND mainTbl.Rows(getRow + nRow).Cells(nCol + getCol).innerHtml = powerCode Then
mainTbl.Rows(getRow + nRow).Cells(nCol + getCol).innerHtml = powerCode
mainTbl.Rows(getRow + nRow).Cells(nCol + getCol).style.backgroundcolor = "blue"
Else
'네모박스로 몽땅 채운 다음에 지워나간다.
mainTbl.Rows(getRow + nRow).Cells(nCol + getCol).innerHtml = markValue
mainTbl.Rows(getRow + nRow).Cells(nCol + getCol).style.backgroundcolor = getColor
'체인 상,하 전체
If (getDir = 1 OR getDir = 2) AND (nCol = 0 OR nCol = 3) Then
mainTbl.Rows(getRow + nRow).Cells(nCol + getCol).style.backgroundcolor = "black"
End If
'체인 좌,우 전체
If (getDir = 3 OR getDir = 4) AND (nRow = 0 OR nRow = 3) Then
mainTbl.Rows(getRow + nRow).Cells(nCol + getCol).style.backgroundcolor = "black"
End If
'체인 상 공백
If (getDir = 1 AND nRow = 0) AND (nCol = 0 OR nCol = 3) Then
mainTbl.Rows(getRow + nRow).Cells(nCol + getCol).style.backgroundcolor = "white"
End If
'체인 하 공백
If (getDir = 2 AND nRow = 3) AND (nCol = 0 OR nCol = 3) Then
mainTbl.Rows(getRow + nRow).Cells(nCol + getCol).style.backgroundcolor = "white"
End If
'체인 좌 공백
If (getDir = 3 AND nCol = 0) AND (nRow = 0 OR nRow = 3) Then
mainTbl.Rows(getRow + nRow).Cells(nCol + getCol).style.backgroundcolor = "white"
End If
'체인 우 공백
If (getDir = 4 AND nCol = 3) AND (nRow = 0 OR nRow = 3) Then
mainTbl.Rows(getRow + nRow).Cells(nCol + getCol).style.backgroundcolor = "white"
End If
End If
Next
Next
labScore.innerHTML = eatFoodCnt
End Function
'벽, 사과, 악당 만났는지 체크 --------------------------------------------------------------------------
'drawPackMan에서 상,하,좌,우 체크 할 때 동일한 로직으로 호출 함.
Function chkWallAndCrash(chkRow, chkCol, isPackMan, getColor)
chkWallAndCrash = "Y"
'사과를 먹자
IF mainTbl.Rows(chkRow).Cells(chkCol).innerHtml = appleCode And isPackMan = "Y" THEN
mainTbl.Rows(chkRow).Cells(chkCol).innerHtml = 0
eatFoodCnt = eatFoodCnt + 1
END IF
'파워 팩맨 변신
IF mainTbl.Rows(chkRow).Cells(chkCol).innerHtml = powerCode And isPackMan = "Y" THEN
mainTbl.Rows(chkRow).Cells(chkCol).innerHtml = 0
eatFoodCnt = eatFoodCnt + 1
poewrPackManYn = "Y"
packManColor = "red"
END IF
'벽을 지나갈 수는 없지
IF mainTbl.Rows(chkRow).Cells(chkCol).innerHtml = wallCode OR _
mainTbl.Rows(chkRow).Cells(chkCol).innerHtml = borderWallCode OR _
mainTbl.Rows(chkRow).Cells(chkCol).innerHtml = eagleCode OR _
mainTbl.Rows(chkRow).Cells(chkCol).innerHtml = enemyEagleCode THEN
chkWallAndCrash = "N"
Exit Function
End If
'악당이 팩맨을 만나다.
IF isPackMan = "N" AND endGameYn = "N" AND mainTbl.Rows(chkRow).Cells(chkCol).innerHtml = packManCode THEN
IF poewrPackManYn = "Y" THEN
chkWallAndCrash = "X"
Call destroyEnemy(getColor)
ELSE
window.clearTimeOut(timerID)
window.clearTimeOut(cannonTimerID)
loadingDiv.innerHTML = "<center><font size=3pt color=white><b>STAGE FAIL !</b></font></center>"
loadingDiv.style.visibility = "visible"
doSleep
'MsgBox "STAGE FAIL !"
endGameYn = "Y"
END IF
Exit Function
End IF
End Function
'악당 죽었다 ----------------------------------------------------------------------------------
Sub destroyEnemy(getEnemyColor)
For nRow = 0 To UBound(colorArr) - 1
IF colorArr(nRow) = getEnemyColor THEN
targetEnemy = nRow
Exit For
END IF
Next
enemiesArr(targetEnemy, 4) = "N" 'DIE
Call deletePackMan(enemiesArr(targetEnemy, 1), enemiesArr(targetEnemy, 2), "N")
End Sub
'악당 만들기 ----------------------------------------------------------------------------------
Sub makeEnemies
ennDir = 0
For ennRow = 0 To UBound(enemiesArr) - 1
IF ennRow <> 3 THEN '독수리 자리는 빼고 만든다.
ennDir = ennDir + 1
IF ennDir > 4 THEN
ennDir = ennDir - 1
END IF
enemy1Row = 44
enemy1Col = 44 - (ennRow * 7)
enemyArr(0, 0) = enemy1Row
enemyArr(0, 1) = enemy1Col
enemyArr(1, 0) = enemy1Row
enemyArr(1, 1) = enemy1Col + 3
enemyArr(2, 0) = enemy1Row + 3
enemyArr(2, 1) = enemy1Col
enemyArr(3, 0) = enemy1Row + 3
enemyArr(3, 1) = enemy1Col + 3
enemiesArr(ennRow, 0) = enemyArr
enemiesArr(ennRow, 1) = enemy1Row
enemiesArr(ennRow, 2) = enemy1Col
enemiesArr(ennRow, 3) = ennDir '악당 방향
enemiesArr(ennRow, 4) = "Y" '살아 있음
okFalg = drawPackMan(enemiesArr(ennRow, 0), enemiesArr(ennRow, 1), enemiesArr(ennRow, 2), colorArr(ennRow), "N", enemiesArr(ennRow, 3))
END IF
Next
End Sub
'팩맨 이동 --------------------------------------------------------------------------------
Sub movePackMan
If endGameYn = "Y" Then
window.clearTimeOut(timerID)
Exit Sub
'Call startGame
End If
IF poewrPackManYn = "Y" Then
powerTime = powerTime + 1
End IF
'파워 팩맨 끝날때 쯤에 번쩍 번쩍
IF poewrPackManYn = "Y" AND powerTime > (powerTimeLimit - 15) Then
IF packManColor = "red" THEN
packManColor = "teal"
ELSE
packManColor = "red"
END IF
End IF
IF powerTime = powerTimeLimit And poewrPackManYn = "Y" Then
powerTime = 0
poewrPackManYn = "N"
packManColor = "teal"
End IF
'악당 먼저 이동(충돌시 악당 색깔을 가져와야 한다)
Call moveEnemies
'팩맨 이동
If packManDir = 1 Then
Call moveUp
ElseIf packManDir = 2 Then
Call moveDown
ElseIf packManDir = 3 Then
Call moveLeft
ElseIf packManDir = 4 Then
Call moveRight
End If
'Call fireCannonMove(cannonRow, cannonCol, cannonDir)
myScoreDiv.style.visibility = "hidden"
enemyScoreDiv.style.visibility = "hidden"
window.clearTimeOut(timerID)
timerID = window.setTimeOut("movePackMan", interval)
End Sub
'악당 이동 ----------------------------------------------------------------------------------
Sub moveEnemies
responeCount.innerHTML = enemyResponeCnt
Randomize
setTarget = Int(8 * Rnd)
On Error Resume Next
For enemyRow = 0 To UBound(enemiesArr) - 1
IF enemiesArr(enemyRow, 4) = "Y" THEN '살아 있는 악당만 움직인다.
Call deletePackMan(enemiesArr(enemyRow, 1), enemiesArr(enemyRow, 2), "N")
moveFlag = enemyChkTurnDir(enemiesArr(enemyRow, 0), enemiesArr(enemyRow, 1), enemiesArr(enemyRow, 2), enemiesArr(enemyRow, 3))
enemyColor = colorArr(enemyRow)
If moveFlag = "1" Then
enemiesArr(enemyRow, 1) = enemiesArr(enemyRow, 1) - 1
enemiesArr(enemyRow, 3) = 1
ElseIf moveFlag = "2" Then
enemiesArr(enemyRow, 1) = enemiesArr(enemyRow, 1) + 1
enemiesArr(enemyRow, 3) = 2
ElseIf moveFlag = "3" Then
enemiesArr(enemyRow, 2) = enemiesArr(enemyRow, 2) - 1
enemiesArr(enemyRow, 3) = 3
ElseIf moveFlag = "4" Then
enemiesArr(enemyRow, 2) = enemiesArr(enemyRow, 2) + 1
enemiesArr(enemyRow, 3) = 4
End If
okFalg = drawPackMan(enemiesArr(enemyRow, 0), enemiesArr(enemyRow, 1), enemiesArr(enemyRow, 2), enemyColor, "N", enemiesArr(enemyRow, 3))
'악당 캐논 발사!
IF setTarget = enemyRow THEN
Call fireCannon(enemiesArr(enemyRow, 1), enemiesArr(enemyRow, 2), enemiesArr(enemyRow, 3), 2)
END IF
END IF
IF enemiesArr(enemyRow, 4) = "N" THEN
enemyResponeCnt = enemyResponeCnt + 1
END IF
'악당 리스폰
IF enemyResponeCnt >= 70 AND enemiesArr(enemyRow, 4) = "N" THEN
enemy1Row = 44
IF setTarget > 3 THEN
enemy1Col = 44 - (7 * 4)
ELSE
enemy1Col = 44 - (7 * 2)
END IF
enemyArr(0, 0) = enemy1Row
enemyArr(0, 1) = enemy1Col
enemyArr(1, 0) = enemy1Row
enemyArr(1, 1) = enemy1Col + 3
enemyArr(2, 0) = enemy1Row + 3
enemyArr(2, 1) = enemy1Col
enemyArr(3, 0) = enemy1Row + 3
enemyArr(3, 1) = enemy1Col + 3
enemiesArr(enemyRow, 0) = enemyArr
enemiesArr(enemyRow, 1) = enemy1Row
enemiesArr(enemyRow, 2) = enemy1Col
enemiesArr(enemyRow, 4) = "Y"
enemyResponeCnt = 1
END IF
Next
End Sub
'악당 자동 방향 전환 ----------------------------------------------------------------------
Function enemyChkTurnDir(getBodyArr, getRow, getCol, getDir)
getBodyArr(0, 0) = getRow
getBodyArr(0, 1) = getCol
getBodyArr(1, 0) = getRow
getBodyArr(1, 1) = getCol + 3
getBodyArr(2, 0) = getRow + 3
getBodyArr(2, 1) = getCol
getBodyArr(3, 0) = getRow + 3
getBodyArr(3, 1) = getCol + 3
chk1Row = getBodyArr(0, 0)
chk1Col = getBodyArr(0, 1)
chk2Row = getBodyArr(1, 0)
chk2Col = getBodyArr(1, 1)
chk3Row = getBodyArr(2, 0)
chk3Col = getBodyArr(2, 1)
chk4Row = getBodyArr(3, 0)
chk4Col = getBodyArr(3, 1)
canMoveCnt = 0
enemyChkTurnDirUp = "N"
enemyChkTurnDirDown = "N"
enemyChkTurnDirLeft = "N"
enemyChkTurnDirRight = "N"
'상단 벽 체크
For chkCol = chk1Col To chk2Col
IF mainTbl.Rows(chk1Row - 1).Cells(chkCol).innerHtml <> wallCode AND _
mainTbl.Rows(chk1Row - 1).Cells(chkCol).innerHtml <> borderWallCode AND _
mainTbl.Rows(chk1Row - 1).Cells(chkCol).innerHtml <> enemyCode AND _
mainTbl.Rows(chk1Row - 1).Cells(chkCol).innerHtml <> eagleCode AND _
mainTbl.Rows(chk1Row - 1).Cells(chkCol).innerHtml <> enemyEagleCode THEN
canMoveCnt = canMoveCnt + 1
End If
Next
If canMoveCnt = 4 Then
enemyChkTurnDirUp = "Y"
End If
canMoveCnt = 0
'우측 벽 체크
For chkRow = chk2Row To chk4Row
IF mainTbl.Rows(chkRow).Cells(chk2Col + 1).innerHtml <> wallCode AND _
mainTbl.Rows(chkRow).Cells(chk2Col + 1).innerHtml <> borderWallCode AND _
mainTbl.Rows(chkRow).Cells(chk2Col + 1).innerHtml <> enemyCode AND _
mainTbl.Rows(chkRow).Cells(chk2Col + 1).innerHtml <> eagleCode AND _
mainTbl.Rows(chkRow).Cells(chk2Col + 1).innerHtml <> enemyEagleCode THEN
canMoveCnt = canMoveCnt + 1
End If
Next
If canMoveCnt = 4 Then
enemyChkTurnDirRight = "Y"
End If
canMoveCnt = 0
'하단 벽 체크
For chkCol = chk3Col To chk4Col
IF mainTbl.Rows(chk3Row + 1).Cells(chkCol).innerHtml <> wallCode AND _
mainTbl.Rows(chk3Row + 1).Cells(chkCol).innerHtml <> borderWallCode AND _
mainTbl.Rows(chk3Row + 1).Cells(chkCol).innerHtml <> enemyCode AND _
mainTbl.Rows(chk3Row + 1).Cells(chkCol).innerHtml <> eagleCode AND _
mainTbl.Rows(chk3Row + 1).Cells(chkCol).innerHtml <> enemyEagleCode THEN
canMoveCnt = canMoveCnt + 1
End If
Next
If canMoveCnt = 4 Then
enemyChkTurnDirDown = "Y"
End If
canMoveCnt = 0
'좌측 벽 체크
For chkRow = chk1Row To chk3Row
IF mainTbl.Rows(chkRow).Cells(chk1Col - 1).innerHtml <> wallCode AND _
mainTbl.Rows(chkRow).Cells(chk1Col - 1).innerHtml <> borderWallCode AND _
mainTbl.Rows(chkRow).Cells(chk1Col - 1).innerHtml <> enemyCode AND _
mainTbl.Rows(chkRow).Cells(chk1Col - 1).innerHtml <> eagleCode AND _
mainTbl.Rows(chkRow).Cells(chk1Col - 1).innerHtml <> enemyEagleCode THEN
canMoveCnt = canMoveCnt + 1
End If
Next
If canMoveCnt = 4 Then
enemyChkTurnDirLeft = "Y"
End If
Randomize
rndDir = Int(10 * Rnd)
'탱크 한테 가자!!(상,하)
IF rndDir < 5 THEN
IF chk1Row > intRow AND enemyChkTurnDirUp = "Y" THEN
getDir = 1
enemyChkTurnDirLeft = "N"
enemyChkTurnDirRight = "N"
enemyChkTurnDirDown = "N"
END IF
IF chk1Row < intRow AND enemyChkTurnDirDown = "Y" THEN
getDir = 2
enemyChkTurnDirLeft = "N"
enemyChkTurnDirRight = "N"
enemyChkTurnDirUp = "N"
END IF
END IF
'탱크 한테 가자!!(좌,우)
IF rndDir > 5 THEN
IF chk1Col > intCol AND enemyChkTurnDirLeft = "Y" THEN
getDir = 3
enemyChkTurnDirUp = "N"
enemyChkTurnDirRight = "N"
enemyChkTurnDirDown = "N"
END IF
IF chk1Col < intCol AND enemyChkTurnDirRight = "Y" THEN
getDir = 4
enemyChkTurnDirLeft = "N"
enemyChkTurnDirDown = "N"
enemyChkTurnDirUp = "N"
END IF
END IF
'이동 중인 방향이 정상이고 선택지가 없다면 그 쪽으로 쭉 간다.
'교차로가 나오면 꺽을 수도 있고 그냥 갈 수도 있다.
'교차로에서 가던 방향의 반대 방향외의 선택지가 있으면 다른 쪽을 우선적으로 선택한다. (왕복 방지)
If getDir = 1 And enemyChkTurnDirUp = "Y" Then
enemyChkTurnDir = "1"
If rndDir > 7 Then
'가는 방향으로 문제 없지만 갈림길이 나오면 꺽는다.
If enemyChkTurnDirLeft = "Y" AND enemyChkTurnDirRight = "Y" Then
enemyChkTurnDir = "3"
If rndDir = 1 Then
enemyChkTurnDir = "4"
End If
ElseIf enemyChkTurnDirLeft = "Y" Then
enemyChkTurnDir = "3"
ElseIf enemyChkTurnDirRight = "Y" Then
enemyChkTurnDir = "4"
End If
End If
ElseIf getDir = 2 And enemyChkTurnDirDown = "Y" Then
enemyChkTurnDir = "2"
If rndDir > 7 Then
If enemyChkTurnDirLeft = "Y" AND enemyChkTurnDirRight = "Y" Then
enemyChkTurnDir = "3"
If rndDir = 1 Then
enemyChkTurnDir = "4"
End If
ElseIf enemyChkTurnDirLeft = "Y" Then
enemyChkTurnDir = "3"
ElseIf enemyChkTurnDirRight = "Y" Then
enemyChkTurnDir = "4"
End If
End If
ElseIf getDir = 3 And enemyChkTurnDirLeft = "Y" Then
enemyChkTurnDir = "3"
If rndDir > 7 Then
If enemyChkTurnDirUp = "Y" AND enemyChkTurnDirDown = "Y" Then
enemyChkTurnDir = "1"
If rndDir = 1 Then
enemyChkTurnDir = "2"
End If
ElseIf enemyChkTurnDirUp = "Y" Then
enemyChkTurnDir = "1"
ElseIf enemyChkTurnDirDown = "Y" Then
enemyChkTurnDir = "2"
End If
End If
ElseIf getDir = 4 And enemyChkTurnDirRight = "Y" Then
enemyChkTurnDir = "4"
If rndDir > 7 Then
If enemyChkTurnDirUp = "Y" AND enemyChkTurnDirDown = "Y" Then
enemyChkTurnDir = "1"
If rndDir = 1 Then
enemyChkTurnDir = "2"
End If
ElseIf enemyChkTurnDirUp = "Y" Then
enemyChkTurnDir = "1"
ElseIf enemyChkTurnDirDown = "Y" Then
enemyChkTurnDir = "2"
End If
End If
Else
'그 외에는 이동 가능한 방향으로 보낸다.
'교차로에서 가던 방향의 반대 방향 외의 선택지가 있으면 다른 쪽을 우선적으로 선택한다. (왕복 방지)
detFlag = "N"
If getDir = 1 Or getDir = 2 Then
If enemyChkTurnDirLeft = "Y" And enemyChkTurnDirRight = "Y" Then
If rndDir = 0 Then
enemyChkTurnDir = "3"
Else
enemyChkTurnDir = "4"
End If
detFlag = "Y"
ElseIf enemyChkTurnDirLeft = "Y" Then
enemyChkTurnDir = "3"
detFlag = "Y"
ElseIf enemyChkTurnDirRight = "Y" Then
enemyChkTurnDir = "4"
detFlag = "Y"
End If
ElseIf getDir = 3 Or getDir = 4 Then
If enemyChkTurnDirUp = "Y" And enemyChkTurnDirDown = "Y" Then
If rndDir = 0 Then
enemyChkTurnDir = "1"
Else
enemyChkTurnDir = "2"
End If
detFlag = "Y"
ElseIf enemyChkTurnDirUp = "Y" Then
enemyChkTurnDir = "1"
detFlag = "Y"
ElseIf enemyChkTurnDirDown = "Y" Then
enemyChkTurnDir = "2"
detFlag = "Y"
End If
End If
Do While 1 = 1
Randomize
rndDetDir = Int(4 * Rnd)
If enemyChkTurnDirUp = "Y" And rndDetDir = 0 Then
enemyChkTurnDir = "1"
Exit Do
ElseIf enemyChkTurnDirLeft = "Y" And rndDetDir = 1 Then
enemyChkTurnDir = "3"
Exit Do
ElseIf enemyChkTurnDirDown = "Y" And rndDetDir = 2 Then
enemyChkTurnDir = "2"
Exit Do
ElseIf enemyChkTurnDirRight = "Y" And rndDetDir = 3 Then
enemyChkTurnDir = "4"
Exit Do
End If
IF enemyChkTurnDirUp <> "Y" AND enemyChkTurnDirLeft <> "Y" AND enemyChkTurnDirDown <> "Y" AND enemyChkTurnDirRight <> "Y" THEN
Exit Do
END IF
Loop
End If
End Function
Sub fireCannon(getRow, getCol, getDir, getType)
IF tankCannoCnt >= 2 THEN
EXIT SUB
END IF
IF enemyCannoCnt >= UBound(enemiesArr) THEN
EXIT SUB
END IF
cannonRow = getRow
cannonCol = getCol
cannonDir = getDir
'탱크 방향
If getDir = 1 Then
cannonRow = cannonRow
cannonCol = cannonCol + 1
ElseIf getDir = 2 Then
cannonRow = cannonRow + 3
cannonCol = cannonCol + 1
ElseIf getDir = 3 Then
cannonRow = cannonRow + 1
cannonCol = cannonCol
ElseIf getDir = 4 Then
cannonRow = cannonRow + 1
cannonCol = cannonCol + 3
End If
mainTbl.Rows(cannonRow).Cells(cannonCol).style.backgroundcolor = "blue"
cannonCnt = cannonCnt + 1
IF getType = 1 THEN
tankCannoCnt = tankCannoCnt + 1
ELSE
enemyCannoCnt = enemyCannoCnt + 1
END IF
tankCannonArr(cannonCnt, 0) = cannonRow
tankCannonArr(cannonCnt, 1) = cannonCol
tankCannonArr(cannonCnt, 2) = cannonDir
tankCannonArr(cannonCnt, 3) = getType '탱크/적군 캐논 구분
End Sub
Sub fireCannonMove
IF endGameYn = "Y" THEN
EXIT Sub
END IF
For nRow = 1 To cannonCnt
getRow = tankCannonArr(nRow, 0)
getCol = tankCannonArr(nRow, 1)
getDir = tankCannonArr(nRow, 2)
tankType = tankCannonArr(nRow, 3)
targetRow = getRow
targetCol = getCol
'보더벽 맞은 경우
IF targetRow >= rowBound - 2 OR targetRow <= 1 THEN
mainTbl.Rows(targetRow).Cells(targetCol).style.backgroundcolor = "white"
'포탄 갯수 줄이기
For rRow = nRow To cannonCnt
tankCannonArr(rRow, 0) = tankCannonArr(rRow + 1, 0)
tankCannonArr(rRow, 1) = tankCannonArr(rRow + 1, 1)
tankCannonArr(rRow, 2) = tankCannonArr(rRow + 1, 2)
tankCannonArr(rRow, 3) = tankCannonArr(rRow + 1, 3)
Next
cannonCnt = cannonCnt - 1
IF tankType = 1 THEN
tankCannoCnt = tankCannoCnt - 1
ELSE
enemyCannoCnt = enemyCannoCnt - 1
END IF
Exit For
END IF
'보더벽 맞은 경우
IF targetCol >= colBound - 2 OR targetCol <= 1 THEN
mainTbl.Rows(targetRow).Cells(targetCol).style.backgroundcolor = "white"
'포탄 갯수 줄이기
For rRow = nRow To cannonCnt
tankCannonArr(rRow, 0) = tankCannonArr(rRow + 1, 0)
tankCannonArr(rRow, 1) = tankCannonArr(rRow + 1, 1)
tankCannonArr(rRow, 2) = tankCannonArr(rRow + 1, 2)
tankCannonArr(rRow, 3) = tankCannonArr(rRow + 1, 3)
Next
cannonCnt = cannonCnt - 1
IF tankType = 1 THEN
tankCannoCnt = tankCannoCnt - 1
ELSE
enemyCannoCnt = enemyCannoCnt - 1
END IF
Exit For
END IF
mainTbl.Rows(targetRow).Cells(targetCol).style.backgroundcolor = "white"
'포탄 방향
If getDir = 1 Then
targetRow = targetRow - 1
ElseIf getDir = 2 Then
targetRow = targetRow + 1
ElseIf getDir = 3 Then
targetCol = targetCol - 1
ElseIf getDir = 4 Then
targetCol = targetCol + 1
End If
tankCannonArr(nRow, 0) = targetRow
tankCannonArr(nRow, 1) = targetCol
getColor = mainTbl.Rows(targetRow).Cells(targetCol).style.backgroundcolor
IF tankType = 1 THEN '아군포탄
mainTbl.Rows(targetRow).Cells(targetCol).style.backgroundcolor = "222299"
ELSE
mainTbl.Rows(targetRow).Cells(targetCol).style.backgroundcolor = "red"
END IF
'철벽은 부실수 없다.
If mainTbl.Rows(targetRow).Cells(targetCol).innerHtml = borderWallCode Then
mainTbl.Rows(targetRow).Cells(targetCol).innerHtml = borderWallCode
mainTbl.Rows(targetRow).Cells(targetCol).style.backgroundcolor = "black"
'포탄 갯수 줄이기
For rRow = nRow To cannonCnt
tankCannonArr(rRow, 0) = tankCannonArr(rRow + 1, 0)
tankCannonArr(rRow, 1) = tankCannonArr(rRow + 1, 1)
tankCannonArr(rRow, 2) = tankCannonArr(rRow + 1, 2)
tankCannonArr(rRow, 3) = tankCannonArr(rRow + 1, 3)
Next
cannonCnt = cannonCnt - 1
IF tankType = 1 THEN
tankCannoCnt = tankCannoCnt - 1
ELSE
enemyCannoCnt = enemyCannoCnt - 1
END IF
Exit For
End If
'악당이 포탄을 맞았다.
IF tankType = 1 AND mainTbl.Rows(targetRow).Cells(targetCol).innerHtml = enemyCode AND getColor <> "black" THEN
'포탄 갯수 줄이기
For rRow = nRow To cannonCnt
tankCannonArr(rRow, 0) = tankCannonArr(rRow + 1, 0)
tankCannonArr(rRow, 1) = tankCannonArr(rRow + 1, 1)
tankCannonArr(rRow, 2) = tankCannonArr(rRow + 1, 2)
tankCannonArr(rRow, 3) = tankCannonArr(rRow + 1, 3)
tankCannonArr(rRow, 3) = tankCannonArr(rRow + 1, 3)
Next
cannonCnt = cannonCnt - 1
IF tankType = 1 THEN
tankCannoCnt = tankCannoCnt - 1
ELSE
enemyCannoCnt = enemyCannoCnt - 1
END IF
Call destroyEnemy(getColor)
Exit For
End IF
'탱크가 악당 한테 당했다.
IF tankType = 2 AND mainTbl.Rows(targetRow).Cells(targetCol).innerHtml = packManCode THEN
'포탄 갯수 줄이기
For rRow = nRow To cannonCnt
tankCannonArr(rRow, 0) = tankCannonArr(rRow + 1, 0)
tankCannonArr(rRow, 1) = tankCannonArr(rRow + 1, 1)
tankCannonArr(rRow, 2) = tankCannonArr(rRow + 1, 2)
tankCannonArr(rRow, 3) = tankCannonArr(rRow + 1, 3)
tankCannonArr(rRow, 3) = tankCannonArr(rRow + 1, 3)
Next
cannonCnt = cannonCnt - 1
IF tankType = 1 THEN
tankCannoCnt = tankCannoCnt - 1
ELSE
enemyCannoCnt = enemyCannoCnt - 1
END IF
window.clearTimeOut(cannonTimerID)
window.clearTimeOut(timerID)
loadingDiv.innerHTML = "<center><font size=3pt color=white><b>STAGE FAIL !</b></font></center>"
loadingDiv.style.visibility = "visible"
doSleep
endGameYn = "Y"
Exit For
End IF
'아군이 아군 독수리 맞추면 그냥 제낌
IF tankType = 1 AND mainTbl.Rows(targetRow).Cells(targetCol).innerHtml = eagleCode THEN
mainTbl.Rows(targetRow).Cells(targetCol).style.backgroundcolor = getColor
'포탄 갯수 줄이기
For rRow = nRow To cannonCnt
tankCannonArr(rRow, 0) = tankCannonArr(rRow + 1, 0)
tankCannonArr(rRow, 1) = tankCannonArr(rRow + 1, 1)
tankCannonArr(rRow, 2) = tankCannonArr(rRow + 1, 2)
tankCannonArr(rRow, 3) = tankCannonArr(rRow + 1, 3)
tankCannonArr(rRow, 3) = tankCannonArr(rRow + 1, 3)
Next
cannonCnt = cannonCnt - 1
IF tankType = 1 THEN
tankCannoCnt = tankCannoCnt - 1
ELSE
enemyCannoCnt = enemyCannoCnt - 1
END IF
Exit For
END IF
'적군이 적군 독수리 맞추면 그냥 제낌
IF tankType = 2 AND mainTbl.Rows(targetRow).Cells(targetCol).innerHtml = enemyEagleCode THEN
mainTbl.Rows(targetRow).Cells(targetCol).style.backgroundcolor = getColor
'포탄 갯수 줄이기
For rRow = nRow To cannonCnt
tankCannonArr(rRow, 0) = tankCannonArr(rRow + 1, 0)
tankCannonArr(rRow, 1) = tankCannonArr(rRow + 1, 1)
tankCannonArr(rRow, 2) = tankCannonArr(rRow + 1, 2)
tankCannonArr(rRow, 3) = tankCannonArr(rRow + 1, 3)
tankCannonArr(rRow, 3) = tankCannonArr(rRow + 1, 3)
Next
cannonCnt = cannonCnt - 1
IF tankType = 1 THEN
tankCannoCnt = tankCannoCnt - 1
ELSE
enemyCannoCnt = enemyCannoCnt - 1
END IF
Exit For
END IF
'적군 독수리 맞았다.
IF tankType = 1 AND mainTbl.Rows(targetRow).Cells(targetCol).innerHtml = enemyEagleCode THEN
'포탄 갯수 줄이기
For rRow = nRow To cannonCnt
tankCannonArr(rRow, 0) = tankCannonArr(rRow + 1, 0)
tankCannonArr(rRow, 1) = tankCannonArr(rRow + 1, 1)
tankCannonArr(rRow, 2) = tankCannonArr(rRow + 1, 2)
tankCannonArr(rRow, 3) = tankCannonArr(rRow + 1, 3)
tankCannonArr(rRow, 3) = tankCannonArr(rRow + 1, 3)
Next
cannonCnt = cannonCnt - 1
IF tankType = 1 THEN
tankCannoCnt = tankCannoCnt - 1
ELSE
enemyCannoCnt = enemyCannoCnt - 1
END IF
enemyEnergy = enemyEnergy - 1
enemyScoreDiv.innerHTML = "<center><font size=8pt color=red><b>" & enemyEnergy & "</b></font></center>"
enemyScoreDiv.style.visibility = "visible"
IF enemyEnergy = 0 THEN
window.clearTimeOut(timerID)
window.clearTimeOut(cannonTimerID)
loadingDiv.innerHTML = "<center><font size=3pt color=white><b>STAGE CLEAR !</b></font></center>"
loadingDiv.style.visibility = "visible"
doSleep
endGameYn = "Y"
END IF
Exit For
End IF
'아군 독수리 맞았다.
IF tankType = 2 AND mainTbl.Rows(targetRow).Cells(targetCol).innerHtml = eagleCode THEN
'포탄 갯수 줄이기
For rRow = nRow To cannonCnt
tankCannonArr(rRow, 0) = tankCannonArr(rRow + 1, 0)
tankCannonArr(rRow, 1) = tankCannonArr(rRow + 1, 1)
tankCannonArr(rRow, 2) = tankCannonArr(rRow + 1, 2)
tankCannonArr(rRow, 3) = tankCannonArr(rRow + 1, 3)
tankCannonArr(rRow, 3) = tankCannonArr(rRow + 1, 3)
Next
cannonCnt = cannonCnt - 1
IF tankType = 1 THEN
tankCannoCnt = tankCannoCnt - 1
ELSE
enemyCannoCnt = enemyCannoCnt - 1
END IF
myEnergy = myEnergy - 1
myScoreDiv.innerHTML = "<center><font size=8pt color=red><b>" & myEnergy & "</b></font></center>"
myScoreDiv.style.visibility = "visible"
IF myEnergy = 0 THEN
window.clearTimeOut(timerID)
window.clearTimeOut(cannonTimerID)
loadingDiv.innerHTML = "<center><font size=3pt color=white><b>STAGE FAIL !</b></font></center>"
loadingDiv.style.visibility = "visible"
doSleep
endGameYn = "Y"
END IF
Exit For
End IF
'벽 뽀개기
If mainTbl.Rows(targetRow).Cells(targetCol).innerHtml = wallCode Then
On Error Resume Next
For brkRow = 0 To 3
For brkCol = 0 To 3
'내벽만 뽀갤 수 있다
IF mainTbl.Rows(targetRow + brkRow - 1).Cells(targetCol + brkCol - 1).innerHtml = wallCode THEN
mainTbl.Rows(targetRow + brkRow - 1).Cells(targetCol + brkCol - 1).innerHtml = 0
mainTbl.Rows(targetRow + brkRow - 1).Cells(targetCol + brkCol - 1).style.backgroundcolor = "white"
END IF
Next
Next
'포탄 갯수 줄이기
For rRow = nRow To cannonCnt
tankCannonArr(rRow, 0) = tankCannonArr(rRow + 1, 0)
tankCannonArr(rRow, 1) = tankCannonArr(rRow + 1, 1)
tankCannonArr(rRow, 2) = tankCannonArr(rRow + 1, 2)
tankCannonArr(rRow, 3) = tankCannonArr(rRow + 1, 3)
Next
cannonCnt = cannonCnt - 1
IF tankType = 1 THEN
tankCannoCnt = tankCannoCnt - 1
ELSE
enemyCannoCnt = enemyCannoCnt - 1
END IF
Exit For
End If
Next
window.clearTimeOut(cannonTimerID)
cannonTimerID = window.setTimeOut("fireCannonMove", 50)
End Sub
Sub moveUp
Call deletePackMan(intRow, intCol, "Y")
intRow = intRow - 1
packManDir = 1
okFalg = drawPackMan(packManArr, intRow, intCol, packManColor, "Y", packManDir)
IF okFalg = "N" THEN
intRow = intRow + 1
okFalg = drawPackMan(packManArr, intRow, intCol, packManColor, "Y", packManDir)
END IF
End Sub
Sub moveDown
Call deletePackMan(intRow, intCol, "Y")
intRow = intRow + 1
packManDir = 2
okFalg = drawPackMan(packManArr, intRow, intCol, packManColor, "Y", packManDir)
IF okFalg = "N" THEN
intRow = intRow - 1
okFalg = drawPackMan(packManArr, intRow, intCol, packManColor, "Y", packManDir)
END IF
End Sub
Sub moveLeft
Call deletePackMan(intRow, intCol, "Y")
intCol = intCol - 1
packManDir = 3
okFalg = drawPackMan(packManArr, intRow, intCol, packManColor, "Y", packManDir)
IF okFalg = "N" THEN
intCol = intCol + 1
okFalg = drawPackMan(packManArr, intRow, intCol, packManColor, "Y", packManDir)
END IF
End Sub
Sub moveRight
Call deletePackMan(intRow, intCol, "Y")
intCol = intCol + 1
packManDir = 4
okFalg = drawPackMan(packManArr, intRow, intCol, packManColor, "Y", packManDir)
IF okFalg = "N" THEN
intCol = intCol - 1
okFalg = drawPackMan(packManArr, intRow, intCol, packManColor, "Y", packManDir)
END IF
End Sub
Sub chekKeyPress
'msgbox window.event.Keycode '키 값을 알고 싶다면?
If endGame <> "Y" Then
IF (window.event.Keycode = 119 Or window.event.Keycode = 56) THEN 'w키, 상
Call moveUp
END IF
IF (window.event.Keycode = 115 Or window.event.Keycode = 53) THEN 's키, 하
Call moveDown
END IF
IF (window.event.Keycode = 97 Or window.event.Keycode = 52) THEN ' a키, 좌
Call moveLeft
END IF
IF (window.event.Keycode = 100 Or window.event.Keycode = 54) THEN 'd키, 우
Call moveRight
END IF
IF (window.event.Keycode = 32) THEN '스페이스키, 파이어!
Call fireCannon(intRow, intCol, packManDir, 1)
END IF
IF (window.event.Keycode = 27) THEN 'ESC 중지/시작
MsgBox "일시중지!!"
END IF
End If
End Sub
Sub animate
Randomize
aniDir = Int(2 * Rnd)
If aniDir = 0 Then
If aniXDir = 0 Then
intRow = intRow + 1
Else
intRow = intRow - 1
End If
If intRow = colBound - 2 Then
aniXDir = 1
End If
If intRow = 1 Then
aniXDir = 0
End If
End If
Randomize
aniDir = Int(2 * Rnd)
If aniDir = 0 Then
If aniYDir = 0 Then
intCol = intCol + 1
Else
intCol = intCol - 1
End If
If intCol = rowBound - 2 Then
aniYDir = 1
End If
If intCol = 1 Then
aniYDir = 0
End If
End If
On Error Resume Next
Randomize
aniColor = Int(10 * Rnd)
mainTbl.Rows(intRow).Cells(intCol).style.backgroundcolor = colorArr(aniColor)
window.clearTimeOut(animateTimerID)
animateTimerID = window.setTimeOut("animate", 100)
End Sub
</script>
</head>
<body onKeyPress="chekKeyPress">
<button onClick="startGame" style="width:35px;height:20px">Start</button>
[Row:<label id="labRow">50</label>
Col:<label id="labCol">50</label>]
lv:<label id="labLevelCnt">1</label>
Sc:<label id="labScore">0</label>
Rsp:<label id="responeCount">0</label>
<br>
<div style="float:left;width:100%;height:95%;margin:3px;">
<table id="mainTbl" style="width:100%;height:100%"></table>
<div id="loadingDiv" style="position:absolute;border:2px solid;padding:5px;top:50%;left:25%;width:55%;height:5%;overflow:none;background-color:black;visibility:hidden;">
<center><font size=3pt color=white><b>Loading ...</b></font></center>
</div>
<div id="myScoreDiv" style="position:absolute;border:0px solid;padding:5px;top:10%;left:40%;width:20%;height:3%;overflow:none;background-color:none;visibility:hidden;">
<center><font size=8pt color=red><b>5</b></font></center>
</div>
<div id="enemyScoreDiv" style="position:absolute;border:0px solid;padding:5px;top:82%;left:40%;width:20%;height:3%;overflow:none;background-color:none;visibility:hidden;">
<center><font size=8pt color=red><b>5</b></font></center>
</div>
</div>
</body>
</html>
보기에는 허접하지만 나름대로 꽤나 머리를 써서 만든 코드라서 아까워서 불펌은 절대 금지 합니다.
출처 표기도 안 되요 그냥 여기에 고이 놔둬 주세요. 부탁드려요 :)
댓글