python贪吃蛇设计报告_用Python写一个贪吃蛇
发布日期:2021-06-24 15:50:43 浏览次数:2 分类:技术文章

本文共 3419 字,大约阅读时间需要 11 分钟。

#Write By Guobao#2017/4//7#

#贪吃蛇#用#做边界,*做食物,o做身体和头部#python 3.6.1

importcopyimportrandomimportosimportmsvcrt#the board class, used to put everything

classboard:__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)defgetPoint(self, location):return self.__points[location[0]][location[1]]defclear(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)defput_snake(self, snake_locations):#clear the board

self.clear()#put the snake points

for x insnake_locations:

self.__points[x[0]][x[1]] = ‘o‘

#the head

x = snake_locations[len(snake_locations) - 1]

self.__points[x[0]][x[1]] = ‘O‘

defput_food(self, food_location):

self.__points[food_location[0]][food_location[1]] = ‘*‘

defshow(self):

os.system("cls")for i in range(22):for j in range(22):print(self.__points[i][j], end=‘‘)print()#the snake class

classsnake:__points =[]def __init__(self):for i in range(1, 6):

self.__points.append([1, i])defgetPoints(self):return self.__points

#move to the next position

#give the next head

defmove(self, next_head):

self.__points.pop(0)

self.__points.append(next_head)#eat the food

#give the next head

defeat(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]

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

returnhead#the game

classgame:

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)defnew_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

defshow(self):

self.board.clear()

self.board.put_snake(self.snake.getPoints())

self.board.put_food(self.food)

self.board.show()defrun(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 inoperation_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()

转载地址:https://blog.csdn.net/weixin_33642922/article/details/113678913 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:python要有什么基础知识_Python基础知识
下一篇:python调度web_Python调用WSGI接口实现简单的web应用

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月22日 16时39分34秒