欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python貪吃蛇游戲編寫代碼

 更新時(shí)間:2020年10月26日 08:49:37   作者:華夏國(guó)寶  
這篇文章主要為大家詳細(xì)介紹了Python貪吃蛇游戲的編寫代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

最近在學(xué)Python,想做點(diǎn)什么來練練手,命令行的貪吃蛇一般是C的練手項(xiàng)目,但是一時(shí)之間找不到別的,就先做個(gè)貪吃蛇來練練簡(jiǎn)單的語法。

由于Python監(jiān)聽鍵盤很麻煩,沒有C語言的kbhit(),所以這條貪吃蛇不會(huì)自己動(dòng),運(yùn)行效果如下:

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

Python版本:3.6.1

系統(tǒng)環(huán)境:Win10

類:

  board:棋盤,也就是游戲區(qū)域

  snake:貪吃蛇,通過記錄身體每個(gè)點(diǎn)來記錄蛇的狀態(tài)

  game:游戲類

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

源碼:

# 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()

筆記:

  1.Python 沒有Switch case語句,可以利用dirt來實(shí)現(xiàn)

  2.Python的=號(hào)是復(fù)制,復(fù)制引用,深復(fù)制需要使用copy的deepcopy()函數(shù)來實(shí)現(xiàn)

  3.即使在成員函數(shù)內(nèi),也需要使用self來訪問成員變量,這和C++、JAVA很不一樣

更多關(guān)于python游戲的精彩文章請(qǐng)點(diǎn)擊查看以下專題:

python俄羅斯方塊游戲集合

python經(jīng)典小游戲匯總

python微信跳一跳游戲集合

更多有趣的經(jīng)典小游戲?qū)崿F(xiàn)專題,分享給大家:

C++經(jīng)典小游戲匯總

JavaScript經(jīng)典游戲 玩不停

java經(jīng)典小游戲匯總

javascript經(jīng)典小游戲匯總

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python實(shí)現(xiàn)視頻分幀的方法分享

    Python實(shí)現(xiàn)視頻分幀的方法分享

    這篇文章主要為大家詳細(xì)介紹了如何通過Python語言實(shí)現(xiàn)視頻分幀的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起嘗試一下
    2023-03-03
  • 詳解?python?logging日志模塊

    詳解?python?logging日志模塊

    這篇文章主要介紹了詳解?python?logging日志模塊,記錄日志最簡(jiǎn)單的方法就是在你想要記錄的地方加上一句?print?,?我相信無論是新手還是老鳥都經(jīng)常這么干。在簡(jiǎn)單的代碼中或者小型項(xiàng)目中這么干一點(diǎn)問題都沒有,需要的朋友可以參考下
    2022-01-01
  • Mysql數(shù)據(jù)庫反向生成Django里面的models指令方式

    Mysql數(shù)據(jù)庫反向生成Django里面的models指令方式

    這篇文章主要介紹了Mysql數(shù)據(jù)庫反向生成Django里面的models指令方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python偏函數(shù)實(shí)現(xiàn)原理及應(yīng)用

    Python偏函數(shù)實(shí)現(xiàn)原理及應(yīng)用

    這篇文章主要介紹了Python偏函數(shù)實(shí)現(xiàn)原理及應(yīng)用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Python Map 函數(shù)詳解

    Python Map 函數(shù)詳解

    這篇文章主要為大家介紹了Python Map 函數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • python編寫暴力破解zip文檔程序的實(shí)例講解

    python編寫暴力破解zip文檔程序的實(shí)例講解

    下面小編就為大家分享一篇python編寫暴力破解zip文檔程序的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 使用Python進(jìn)行數(shù)據(jù)可視化實(shí)現(xiàn)引人注目的視覺效果

    使用Python進(jìn)行數(shù)據(jù)可視化實(shí)現(xiàn)引人注目的視覺效果

    這篇文章主要介紹了使用Python進(jìn)行數(shù)據(jù)可視化實(shí)現(xiàn)引人注目的視覺效果,您將了解基本的數(shù)據(jù)可視化概念,以及如何創(chuàng)建各種引人注目的圖表和圖形,從而更好地理解和呈現(xiàn)數(shù)據(jù)
    2023-04-04
  • 淺談pytorch中stack和cat的及to_tensor的坑

    淺談pytorch中stack和cat的及to_tensor的坑

    這篇文章主要介紹了pytorch中stack和cat的及to_tensor的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • pip安裝python庫時(shí)報(bào)Failed?building?wheel?for?xxx錯(cuò)誤的解決方法

    pip安裝python庫時(shí)報(bào)Failed?building?wheel?for?xxx錯(cuò)誤的解決方法

    最近在使用pip安裝python的時(shí)候遇到些問題,所以下面這篇文章主要給大家介紹了關(guān)于pip安裝python庫時(shí)報(bào)Failed?building?wheel?for?xxx錯(cuò)誤的解決方法,需要的朋友可以參考下
    2023-01-01
  • 在PyCharm中找不到Conda創(chuàng)建的環(huán)境的解決方法

    在PyCharm中找不到Conda創(chuàng)建的環(huán)境的解決方法

    本文主要介紹了在PyCharm中找不到Conda創(chuàng)建的環(huán)境的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07

最新評(píng)論