Cet article présente principalement en détail le code d'écriture du jeu Python Snake. Il a une certaine valeur de référence. Les amis intéressés peuvent s'y référer
J'apprends Python récemment et je veux faire quelque chose. Snake sur la ligne de commande est généralement un projet de pratique en C, mais je n'ai rien trouvé d'autre pendant un moment, alors j'ai d'abord créé un serpent pour pratiquer une grammaire simple.
Comme il est difficile de surveiller le clavier en Python et qu'il n'y a pas de kbhit() en langage C, ce serpent gourmand ne bougera pas tout seul. L'effet de course est le suivant :
<.>
Exigences : Utilisez # pour représenter la bordure, * pour représenter la nourriture, o pour représenter le corps du serpent, O pour représenter la tête du serpent et utilisez wsad pour vous déplacer
Version Python : 3.6.1Environnement système : Win10Catégorie :
plateau : échiquier, qui est la zone de jeu serpent : serpent gourmand, en enregistrant chaque corps Cliquez pour enregistrer l'état du serpent Jeu : Catégorie de jeu Je voulais à l'origine une catégorie d'aliments, mais la nourriture n'a besoin que d'une seule coordonnée et un nouveau, donc j'utilise simplement une liste pour sauvegarder les coordonnées. Mettre le nouvel aliment dans le jeu n'est pas un gros problème logiquementCode source :
.# Write By Guobao # 2017/4//7 # # 贪吃蛇 # 用#做边界,*做食物,o做身体和头部 # python 3.6.1 import copy import random import os import msvcrt # the board class, used to put everything class 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 board self.clear() # put the snake points for x in snake_locations: self.__points[x[0]][x[1]] = 'o' # the head x = 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 class class 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 head def move(self, next_head): self.__points.pop(0) self.__points.append(next_head) # eat the food # give the next head def eat(self, next_head): self.__points.append(next_head) # calc the next state # and return the direction def next_head(self, direction='default'): # need to change the value, so copy it head = copy.deepcopy(self.__points[len(self.__points) - 1]) # calc the "default" direction if 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] - 1 elif direction == 'down': head[0] = head[0] + 1 elif direction == 'left': head[1] = head[1] - 1 elif direction == 'right': head[1] = head[1] + 1 return head # the game class game: board = board() snake = snake() food = [] count = 0 def __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] return def 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 directions operation_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 food if self.board.getPoint(new_head) == '*': self.snake.eat(new_head) self.count = self.count + 1 if self.count >= 15: self.show() print("Good Job") break else: self.new_food() self.show() # 反向一Q日神仙 elif new_head == self.snake.getPoints()[len(self.snake.getPoints()) - 2]: pass # rush the wall elif self.board.getPoint(new_head) == '#' or self.board.getPoint(new_head) == 'o': print('GG') break # normal move else: self.snake.move(new_head) self.show() op = msvcrt.getch() game().run()
Remarques :
1. Python n'a pas d'instruction de cas Switch, vous pouvez utiliser Dirt pour implémenter 2. Le signe = de Python est une copie, une référence de copie , la copie profonde doit utiliser la fonction deepcopy() de copy pour implémenter 3. Même au sein d'une fonction membre, vous devez utiliser self pour accéder aux variables membres, ce qui est très différent du C++ et du JAVACe qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!