<script language="JavaScript1.1">
<!---- Hide script from old browsers
// Slot Puzzle Game
// written by Stephen Battey - August 1997
// http://www.oocities.org/Heartland/Plains/5287
//------------------------------------------------
// Global Game Variables
//------------------------------------------------
PlayMode=0
HoleCol=1
HoleRow=1
InPosition=0
Moves=0
Seconds=0
Minutes=0
ShufflesLeft=0
ShuffleDelay=0
NoNextMov=0
ImageTags = new Array()
for (i=1; i<6; i++) {
ImageTags[i] = new Array()
}
//------------------------------------------------
// Low level functions
//------------------------------------------------
function Round(number) {
// function returns the extracted integer part
// of a decimal number - Math.round is not used
// since it is only availiable on a Unix platform
v=number.toString()
dp=v.indexOf(".")
if ( dp==-1 )
return number
if ( ( dp==0 ) | ( v.substring(0,dp)=="-" ) )
return 0
return eval(v.substring(0,dp))
}
function NumText(v,width,use) {
// returns the number 'v' in a text string of minimum
// length 'width', preceeding spaces being filled with
// the character specified in 'use'
post=v.toString()
pre=""
uselen=width-post.length
for (i=1; i<=uselen; i++) {
pre+=use
}
return pre+post
}
function mMODn(m,n) {
// Function returns the least
// residue of : m (mod n)
while ( m>=n )
m=m-n
return m
}
now4Random = new Date()
mRandom=1024
cRandom=55
aRandom=13
rRandom=((now4Random.getSeconds()-1)/60)*mRandom
function Random(minv,maxv) {
// Function returns a random number in the range
// minv - maxv
rRandom=mMODn(((aRandom*rRandom)+cRandom),mRandom)
return ( ((rRandom/1024)*(maxv-minv))+minv )
}
//------------------------------------------------
// Sub-Level Functions
//------------------------------------------------
function RefreshSlot(r,c) {
// Refresh row 'r' col 'c' slot in puzzle
ImNo=(r*5)+c+20
document.images[ImNo].src=ImageTags[r][c]
}
function ResetSlate() {
// set up a completed puzzle
for (row=1; row<6; row++) {
for (col=1; col<6; col++) {
PicName="ChurTile"+row.toString()+col.toString()+".jpg"
ImageTags[row][col]=PicName
RefreshSlot(row,col)
}
}
HoleRow=1
HoleCol=1
InPosition=25
}
function ShowTime() {
// shows the time on the screen
ToShow=NumText(Minutes,2," ")+":"+NumText(Seconds,2,"0")
document.Disp.time.value=ToShow
}
function ShowMoves() {
// show the number of moves taken on the screen
document.Disp.moves.value=NumText(Moves,5," ")
}
function MovePiece(d) {
// move the piece in the direction denoted by 'd'
// into the current empty slot
// d : 1-up , 2-left , 3-right , 4-down
if ( ( d==1 ) & ( HoleRow==1 ) )
return -1
if ( ( d==4 ) & ( HoleRow==5 ) )
return -1
if ( ( d==2 ) & ( HoleCol==1 ) )
return -1
if ( ( d==3 ) & ( HoleCol==5 ) )
return -1
if ( ( d==1 ) | ( d==4 ) ) {
FromCol=HoleCol
if ( d<2 )
FromRow=HoleRow-1
else
FromRow=HoleRow+1
} else {
FromRow=HoleRow
if ( d>2 )
FromCol=HoleCol+1
else
FromCol=HoleCol-1
}
InPic=ImageTags[FromRow][FromCol]
IntoRow=eval(InPic.substring(8,9))
IntoCol=eval(InPic.substring(9,10))
if ( ( IntoRow==FromRow ) & ( IntoCol==FromCol ) )
InPosition--
if ( ( HoleRow==1 ) & ( HoleCol==1 ) )
InPosition--
ImageTags[FromRow][FromCol]="ChurTile11.jpg"
ImageTags[HoleRow][HoleCol]=InPic
RefreshSlot(HoleRow,HoleCol)
RefreshSlot(FromRow,FromCol)
if ( ( IntoRow==HoleRow ) & ( IntoCol==HoleCol ) )
InPosition++
if ( ( FromRow==1 ) & ( FromCol==1 ) )
InPosition++
HoleRow=FromRow
HoleCol=FromCol
return 0
}
function EndShuffle() {
// end shuffling procedure
PlayMode=2
Moves=0
ShowMoves()
Minutes=0
Seconds=0
ShowTime()
window.status="GO ! ! !"
TimeTimer=window.setTimeout("UpdateTime()",1000)
}
function Shuffle() {
// shuffle a piece in the puzzle
donemove=false
while ( !donemove ) {
movedir=Round(Random(1,4.99))
if ( movedir!=NoNextMov ) {
if ( MovePiece(movedir)==0 )
donemove=true
}
}
NoNextMov=5-movedir
ShufflesLeft--
if ( ShufflesLeft==0 )
ShuffleTimer=window.setTimeout("EndShuffle()",ShuffleDelay)
else
ShuffleTimer=window.setTimeout("Shuffle()",ShuffleDelay)
if ( ShuffleDelay>10 ) {
UnitStr="0123456789"
ShufT=Round(ShufflesLeft/10)
ShufU=ShufflesLeft-(10*ShufT)
ToShow = "Shuffling : " + NumText(ShufT,2," ")
+ " - " + UnitStr.substring(0,ShufU)
window.status=ToShow
} else {
if ( ShufflesLeft==40 )
window.status="READY..."
if ( ShufflesLeft<20 )
window.status="STEADY.."
}
}
function UpdateTime() {
// move the clock counter on one second
Seconds++
if ( Seconds==60 ) {
Seconds=0
Minutes++
}
ShowTime()
if ( ( Minutes==0 ) & ( Seconds==5 ) )
window.status=""
TimeTimer=window.setTimeout("UpdateTime()",1000)
}
//------------------------------------------------
// Top-Level Functions
//------------------------------------------------
function StartShuffle() {
// begin the shuffling of the puzzle
if ( PlayMode==2 )
clearTimeout(TimeTimer)
window.scroll(0,300)
ResetSlate()
PlayMode=1
menu=document.GameType.deepthval
ShufflesLeft=eval(menu.options[menu.selectedIndex].value)
ShuffleDelay=10
if ( document.GameType.slowshuff.checked )
ShuffleDelay=350
NoNextMov=0
ShuffleTimer=window.setTimeout("Shuffle()",ShuffleDelay)
}
function Move(ClickRow,ClickCol) {
// handles move requests from the user
if ( PlayMode<2 )
return
if ( ( ClickRow==HoleRow ) & ( ClickCol==HoleCol ) )
return
if ( ( ClickRow!=HoleRow ) & ( ClickCol!=HoleCol ) )
return
if ( ClickRow==HoleRow ) {
if ( ClickCol<HoleCol ) {
dir=2
ToMove=HoleCol-ClickCol
} else {
dir=3
ToMove=ClickCol-HoleCol
}
} else {
if ( ClickRow<HoleRow ) {
dir=1
ToMove=HoleRow-ClickRow
} else {
dir=4
ToMove=ClickRow-HoleRow
}
}
for (m=1; m<=ToMove; m++) {
MovePiece(dir)
}
Moves++
ShowMoves()
if ( InPosition==25) {
clearTimeout(TimeTimer)
PlayMode=0
alert("\n**************************\n\n !! COMPLETE !! \n\n**************************\n" )
}
}
// end hiding -->
</script>