国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python貪吃蛇游戲編寫代碼

2020-02-23 04:31:53
字體:
來源:轉載
供稿:網友

最近在學Python,想做點什么來練練手,命令行的貪吃蛇一般是C的練手項目,但是一時之間找不到別的,就先做個貪吃蛇來練練簡單的語法。

由于Python監聽鍵盤很麻煩,沒有C語言的kbhit(),所以這條貪吃蛇不會自己動,運行效果如下:

要求:用#表示邊框,用*表示食物,o表示蛇的身體,O表示蛇頭,使用wsad來移動

Python版本:3.6.1

系統環境:Win10

類:

  board:棋盤,也就是游戲區域

  snake:貪吃蛇,通過記錄身體每個點來記錄蛇的狀態

  game:游戲類

  本來還想要個food類的,但是food只需要一個坐標,和一個新建,所以干脆使用list來保存坐標,新建food放在game里面,從邏輯上也沒有太大問題

源碼:

# Write By Guobao# 2017/4//7## 貪吃蛇# 用#做邊界,*做食物,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 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 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 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 gameclass 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()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 佛冈县| 马山县| 肥东县| 富平县| 荆门市| 佛教| 绥棱县| 富民县| 永德县| 西盟| 外汇| 宁乡县| 江永县| 景泰县| 元阳县| 中方县| 太原市| 儋州市| 金华市| 临泽县| 历史| 淮滨县| 朝阳区| 庐江县| 炉霍县| 临桂县| 大埔县| 陇南市| 三江| 德安县| 九江市| 仙桃市| 建瓯市| 陵川县| 开远市| 苗栗市| 太原市| 乌鲁木齐市| 葵青区| 比如县| 临江市|