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.board.clear()
self.board.put_snake(Points())
self.board.put_food(self.food)
def new_food(self):
while 1:
line = random.randint(1, 20)
column = random.randint(1, 20)
if Point([column, line]) == ' ':
self.food = [column, line]
return
def show(self):
self.board.clear()
self.board.put_snake(Points())
self.board.put_food(self.food)
self.board.show()
def run(self):
self.board.show()
# the 'w a s d' are the directions
简单的java游戏代码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 = h()
while op != b'q':
if op not in operation_dict:
op = h()
else:
new_head = _head(operation_dict[op])
# get the food
if Point(new_head) == '*':
self.snake.eat(new_head)
unt >= 15:
self.show()
print("Good Job")
break
else:
self.show()
# 反向⼀Q⽇神仙
elif new_head == Points()[len(Points()) - 2]:
pass
# rush the wall
elif Point(new_head) == '#' or Point(new_head) == 'o':
print('GG')
break
# normal move
else:
ve(new_head)
self.show()
op = h()
game().run()
笔记:
  1.Python 没有Switch case语句,可以利⽤dirt来实现
  2.Python的=号是复制,复制引⽤,深复制需要使⽤copy的deepcopy()函数来实现
  3.即使在成员函数内,也需要使⽤self来访问成员变量,这和C++、JAVA很不⼀样更多关于python游戏的精彩⽂章请点击查看以下专题:
更多有趣的经典⼩游戏实现专题,分享给⼤家:
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。