系统环境:Win10
类:
board:棋盘,也就是游戏区域
snake:贪吃蛇,通过记录身体每个点来记录蛇的状态
game:游戏类
本来还想要个food类的,但是food只需要一个坐标,和一个新建,所以干脆使用list来保存坐标,新建food放在game里面,从逻辑上也没有太大问题
源码
如果你对python感兴趣,我这有个学习Python基地,里面有很多学习资料,感兴趣的+Q群:688244617# 贪吃蛇# 用#做边界,*做食物,o做身体和头部# python 3.6.1import copyimport randomimport osimport msvcrt# the board class, used to put everythingclass board:__points =[]def __init__(self):self.__points.clear()for i in range(22):line = []if i == 0 or i == 21:for j in range(22):line.append('#')else:line.append('#')for j in range(20):line.append(' ')line.append('#')self.__points.append(line)def getPoint(self, location):return self.__points[location[0]][location[1]]def clear(self):self.__points.clear()for i in range(22):line = []if i == 0 or i == 21:for j in range(22):line.append('#')else:line.append('#')for j in range(20):line.append(' ')line.append('#')self.__points.append(line)def put_snake(self, snake_locations):# clear the boardself.clear()# put the snake pointsfor x in snake_locations:self.__points[x[0]][x[1]] = 'o'# the headx = snake_locations[len(snake_locations) - 1]self.__points[x[0]][x[1]] = 'O'def put_food(self, food_location):self.__points[food_location[0]][food_location[1]] = '*'def show(self):os.system("cls")for i in range(22):for j in range(22):print(self.__points[i][j], end='')print()# the snake classclass snake:__points = []def __init__(self):for i in range(1, 6):self.__points.append([1, i])def getPoints(self):return self.__points# move to the next position# give the next headdef move(self, next_head):self.__points.pop(0)self.__points.append(next_head)# eat the food# give the next headdef eat(self, next_head):self.__points.append(next_head)# calc the next state# and return the directiondef next_head(self, direction='default'):# need to change the value, so copy ithead = copy.deepcopy(self.__points[len(self.__points) - 1])# calc the "default" directionif direction == 'default':neck = self.__points[len(self.__points) - 2]if neck[0] > head[0]:direction = 'up'elif neck[0] < head[0]:direction = 'down'elif neck[1] > head[1]:direction = 'left'elif neck[1] < head[1]:direction = 'right'if direction == 'up':head[0] = head[0] - 1elif direction == 'down':head[0] = head[0] + 1elif direction == 'left':head[1] = head[1] - 1elif direction == 'right':head[1] = head[1] + 1return head# the gameclass game:board = board()snake = snake()food = []count = 0def __init__(self):self.new_food()self.board.clear()self.board.put_snake(self.snake.getPoints())self.board.put_food(self.food)def new_food(self):while 1:line = random.randint(1, 20)column = random.randint(1, 20)if self.board.getPoint([column, line]) == ' ':self.food = [column, line]returndef show(self):self.board.clear()self.board.put_snake(self.snake.getPoints())self.board.put_food(self.food)self.board.show()def run(self):self.board.show()# the 'w a s d' are the directionsoperation_dict = {b'w': 'up', b'W': 'up', b's': 'down', b'S': 'down', b'a': 'left', b'A': 'left', b'd': 'right', b'D': 'right'}op = msvcrt.getch()while op != b'q':if op not in operation_dict:op = msvcrt.getch()else:new_head = self.snake.next_head(operation_dict[op])# get the foodif self.board.getPoint(new_head) == '*':self.snake.eat(new_head)self.count = self.count + 1if self.count >= 15:self.show()print("Good Job")breakelse:self.new_food()self.show()# 反向一Q日神仙elif new_head == self.snake.getPoints()[len(self.snake.getPoints()) - 2]:pass# rush the wallelif self.board.getPoint(new_head) == '#' or self.board.getPoint(new_head) == 'o':print('GG')break# normal moveelse:self.snake.move(new_head)self.show()op = msvcrt.getch()game().run()
如果觉得《用python实现头脑王者全自动答题》对你有帮助,请点赞、收藏,并留下你的观点哦!