博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python贪吃蛇设计报告_用Python写一个贪吃蛇
阅读量:1540 次
发布时间:2019-04-21

本文共 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()

转载地址:http://lrhdy.baihongyu.com/

你可能感兴趣的文章
【毕业设计】自动泊车系统(APS)记录
查看>>
UVA 10100- Longest Match(dp之最长公共子序列)
查看>>
SDUT 3364-数据结构实验之图论八:欧拉回路(并查集)
查看>>
图的基础(C++)
查看>>
SAP 上线切换
查看>>
OA软件实施中三个不能做的
查看>>
SAP中的记忆功能没有了,怎么办?
查看>>
不将就
查看>>
财务审批流程都有哪些步骤呢?
查看>>
OA开发很简单,OA实施很复杂!
查看>>
OA系统如何控制每个人的权限?
查看>>
用户对OA实施的一些认识误区
查看>>
SAP MM移动平均价和标准价逻辑
查看>>
SAP MM模块相关透明表收集
查看>>
王峰记忆法 解密王峰记忆法之迷
查看>>
传统BI为什么注定会失败?
查看>>
ETL工具大全,你了解多少
查看>>
TRFC/QRFC
查看>>
18、Power Query-SQL筛选
查看>>
46、Power Query-Table.FillDown函数简介
查看>>