2025年Python代码:声呐搜索

Python代码:声呐搜索import random class OceanTreasur def init self self board 60 for row in range 15 self chests while len self

大家好,我是讯享网,很高兴认识大家。
import random class OceanTreasure: def __init__(self): self.__board = [['~'] * 60 for row in range(15)] self.__chests = [] while len(self.__chests) < 3: coord = [str(random.randint(0, 59)), str(random.randint(0, 14))] if coord not in self.__chests: self.__chests.append(coord) def getChests(self): # returns the list of coordinates of the chests still to be found. return self.__chests def getTreasuresLeft(self): # returns the number of treasure chests still to be found. return len(self.__chests) def dropSonar(self, x, y, sonar): distance = self.checkDistance(x, y) if distance == None: sonar = 'O' elif distance == 0: self.__chests.remove([x, y]) sonar = 'X' elif distance > 0: sonar = str(distance) elif distance < 0: if distance == -1: sonar = 'a' elif distance == -2: sonar = 'b' elif distance == -3: sonar = 'c' elif distance == -4: sonar = 'd' elif distance == -5: sonar = 'e' self.__board[int(y)][int(x)] = sonar # change the character def checkDistance(self, x, y): location = [x, y] if location in self.__chests: return 0 distanceList = [] coordList = [] coordDict = { 
   } for chest in self.__chests: distance = ((int(chest[0]) - int(float(x))) ** 2 + ( int(chest[1]) - int(float(y))) ** 2) ** 0.5 distanceList.append(distance) coordList.append(chest) for i in range(0, 3): coordDict[distanceList[i-1]] = coordList[i-1] closedChest = coordDict[min(distanceList)] xRange = abs(int(closedChest[0]) - int(x)) yRange = abs(int(closedChest[1]) - int(y)) if xRange < 10 and yRange < 6: if xRange < 2 * yRange and xRange != 0 or yRange == 0: return xRange else: return -yRange def drawBoard(self): print(" " * 4, "1", "2", "3", "4", "5", sep=" " * 9) print(" " * 3 + "0" * 6) index = 0 for line in self.__board: leftIndex = "%2d" % (index) row = "" for grid in line: row += grid print(leftIndex, row, str(index), sep=" ") index += 1 print(" " * 4, "1", "2", "3", "4", "5", sep=" " * 9) print(" " * 3 + "0" * 6) def main(): ocean = OceanTreasure() chestLocation = ocean.getChests() gameOver = False droppedSpot = [] position = ['', ''] usedSonar = 0 haveInput = False print(chestLocation) while not gameOver: ocean.drawBoard() print("You have " + str(20 - usedSonar) + " sonar devices available. Treasures found: " + \ str(3 - ocean.getTreasuresLeft()) + ". Still to be found: " + \ str(ocean.getTreasuresLeft()) + ".") print('Where do you want to drop your sonar?') while not haveInput: userInput = input( 'Enter coordinates x y (x in [0, 59] and y in [0, 14], 用空格隔开) (or Q to quit and H for help): ') try: if userInput.lower() in ['q', 'h']: try: if userInput.lower() == 'q': # quit game haveInput = True # quit the loop gameOver = True break elif userInput.lower() == 'h': # get help print( 'your input should be a pair of x y which sepreted by a space (x in [0, 59] and y in [0. 14])') haveInput = False except Exception as exce: print(exce) else: try: haveInput = True position = userInput.split(' ') assert (len(position) == 2 and isinstance(int(position[0]), int) and isinstance(int(position[1]), int) and int(position[0]) in range(0, 60) and int(position[1]) in range(0, 15)),"You must enter a pair of coordinates separated by a space (or Q to quit and H for help).\n" if position not in droppedSpot: droppedSpot.append(position) else: print('You have already dropped a sonar there. You lost a sonar device.\n') except: haveInput = False print( 'your input should be a pair of x y which is separated by a space (x in [0, 59] and y in [0, 14])') except: haveInput = False try: ocean.dropSonar(position[0], position[1], '') usedSonar += 1 haveInput = False print(chestLocation) except: print('Thanks for playing') # end the game gameOver = True if usedSonar == 20 and ocean.getTreasuresLeft() > 0: # check if all the sonars have been used gameOver = True print('You lost all your 20 sonar devises.\nThe remaining chests were in: ' + str(ocean.getChests())) elif ocean.getTreasuresLeft() == 0: # check if there is no chest left gameOver = True print('You found all the 3 treasure Chests using ', usedSonar, ' out of 20 sonar devices.') main() 

讯享网
小讯
上一篇 2025-03-03 13:22
下一篇 2025-04-05 13:37

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/119231.html