日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python制作贪吃蛇游戏_用Python写贪吃蛇游戏的代码实例

發布時間:2025/6/17 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python制作贪吃蛇游戏_用Python写贪吃蛇游戏的代码实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這篇文章主要為大家詳細介紹了Python貪吃蛇游戲的編寫代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下

最近在學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.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來實現

2.Python的=號是復制,復制引用,深復制需要使用copy的deepcopy()函數來實現

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

以上就是用Python寫貪吃蛇游戲的代碼實例的詳細內容,更多請關注php中文網其它相關文章!

本文原創發布php中文網,轉載請注明出處,感謝您的尊重!

總結

以上是生活随笔為你收集整理的python制作贪吃蛇游戏_用Python写贪吃蛇游戏的代码实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。