15 puzzle game: Difference between revisions
Content added Content deleted
No edit summary |
imported>Chinhouse No edit summary |
||
Line 8,126: | Line 8,126: | ||
Seed = time(NULL); |
Seed = time(NULL); |
||
").</syntaxhighlight> |
").</syntaxhighlight> |
||
=={{header|MiniScript}}== |
|||
Text-based game that works with both command-line and MiniMicro versions of MiniScript. The MiniMicro has animation showing the changes in the board when the tiles are being shuffled or a move is made. |
|||
<syntaxhighlight lang="miniscript"> |
|||
isMiniMicro = version.hostName == "Mini Micro" |
|||
// These coordinates are [row,col] not [x,y] |
|||
Directions = {"up": [-1,0], "right": [0,1], "down": [1, 0], "left": [0,-1]} |
|||
TileNum = range(1, 15) |
|||
Puzzle15 = {"grid":[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]], |
|||
"blankPos": [3,3]} |
|||
Puzzle15.__setTile = function(position, value) |
|||
row = position[0]; col = position[1] |
|||
self.grid[row][col] = value |
|||
end function |
|||
Puzzle15.__getTile = function(position) |
|||
row = position[0]; col = position[1] |
|||
return self.grid[row][col] |
|||
end function |
|||
Puzzle15.__getOppositeDirection = function(direction) |
|||
directions = Directions.indexes |
|||
oppix = (directions.indexOf(direction) + 2) % 4 |
|||
return directions[oppix] |
|||
end function |
|||
Puzzle15.getState = function |
|||
return self.grid |
|||
end function |
|||
Puzzle15.getBlankPos = function |
|||
return self.blankPos |
|||
end function |
|||
Puzzle15.hasWon = function |
|||
count = 1 |
|||
for r in range(0, 3) |
|||
for c in range(0, 3) |
|||
if self.grid[r][c] != count then return false |
|||
count += 1 |
|||
end for |
|||
end for |
|||
return true |
|||
end function |
|||
Puzzle15.move = function(direction) |
|||
if not Directions.hasIndex(direction) then return false |
|||
move = Directions[direction] |
|||
curPos = self.blankPos[:] |
|||
newPos = [curPos[0] + move[0], curPos[1] + move[1]] |
|||
if (-1 < newPos[0] < 4) and (-1 < newPos[1] < 4) then |
|||
value = self.__getTile(newPos) |
|||
self.__setTile(curPos, value) |
|||
self.__setTile(newPos, 16) // 16 is the blank tile |
|||
self.blankPos = newPos |
|||
return true |
|||
else |
|||
return false |
|||
end if |
|||
end function |
|||
Puzzle15.shuffle = function(n) |
|||
lastMove = "" |
|||
directions = Directions.indexes |
|||
for i in range(1, 50) |
|||
while true |
|||
moveTo = directions[floor(rnd * 4)] |
|||
oppMove = self.__getOppositeDirection(moveTo) |
|||
if self.__getOppositeDirection(moveTo) != lastMove and self.move(moveTo) then |
|||
lastMove = moveTo |
|||
if isMiniMicro then |
|||
self.displayBoard |
|||
wait 1/33 |
|||
end if |
|||
break |
|||
end if |
|||
end while |
|||
end for |
|||
end function |
|||
Puzzle15.displayBoard = function |
|||
if isMiniMicro then clear |
|||
for r in range(0, 3) |
|||
for c in range(0, 3) |
|||
grid = self.getState |
|||
if grid[r][c] == 16 then |
|||
s = " " |
|||
else |
|||
s = (" " + grid[r][c])[-3:] |
|||
end if |
|||
print s, "" |
|||
end for |
|||
print |
|||
end for |
|||
end function |
|||
Puzzle15.shuffle |
|||
while not Puzzle15.hasWon |
|||
if isMiniMicro then |
|||
clear |
|||
else |
|||
print |
|||
end if |
|||
Puzzle15.displayBoard |
|||
while true |
|||
print |
|||
move = input("Enter the direction to move the blank in (up, down, left, right): ") |
|||
move = move.lower |
|||
if Directions.hasIndex(move) and Puzzle15.move(move) then break |
|||
print "Please enter a valid move." |
|||
end while |
|||
end while |
|||
print "Congratulations! You solved the puzzle!"</syntaxhighlight> |
|||
=={{header|MUMPS}}== |
=={{header|MUMPS}}== |