Python贪吃蛇游戏

写在开始

萌新的第一份博客,希望能通过这样的形式记录下自己的成长吧。废话不多说,下面进入正题。

项目描述

贪吃蛇游戏:
1.一款终端控制游戏,通过四个方向键wsad控制蛇的移动,蛇头和食物重叠后,发生吞食,蛇的长度变长,在其他位置生成新的食物。
2.蛇头和边框,或身体的任意部分碰触,游戏结束
3.随着分数的提高,蛇的移动速度逐渐加快

框架

在着手实现代码之前先把框架理清楚
在这里插入图片描述

代码实现

构造地图

要写一个贪吃蛇出来,其实实现的功能说少也不算少,总之先从简单的来,一步一步实现吧,先把小蛇的舞台给它搭好。

# 假设游戏区域是24x24的方块矩阵,则每个方块(像素)拥有一个坐标
# 先建一个坐标类,用这个类创建的对象就是一个像素了
class Point:
    def __init__(self, x=0, y=0):
        self.__x = x  # 行
        self.__y = y  # 列
    
    # property属性
    @property
    def x(self):
        return self.__x

    @x.setter
    def x(self, value):
        self.__x = value

    @property
    def y(self):
        return self.__y

    @y.setter
    def y(self, value):
        self.__y = value

这里我用了property属性,主要是为了练习一下。x,y直接设为公有属性这里应该也无伤大雅。

有了像素接下来就是用位置信息一点点把围墙造出来了,这里建的就是一个普通的正方形围墙。

# 创建围墙
class Wall:
    def __init__(self):
    	# 创建一个空列表用来存放像素对象
        self.__position = []
        size = 24 	# 设置size为24   即24*24的分辨率
        # 利用for循环将围墙的像素对象存进列表
        for i in range(0, size):
            # 第一列和最后一列
            self.__position.append(Point(0, i)) 	# Point即之前创建的坐标类(像素点)
            self.__position.append(Point(size-1, i))
            # 第一行和最后一行
            if i != 0 and i != size-1: 	# 防止四个角的冲突(其实不加影响也不大)
                self.__position.append(Point(i, 0))
                self.__position.append(Point(i, size-1))
	
	# 设置一个返回围墙位置信息的方法
    def get_position(self):
        return self.__position

有了围墙的信息,接下来就是让它显示在屏幕上了。再创建一个显示模块。

class Display:
    @staticmethod
    def display(wall_list): 		# 传入的参数就是墙的像素点的位置信息(列表)
        size = 24					# 分辨率24*24
        s = ""
        for x in range(0, size):
            for y in range(0, size):
                for i in wall_list:
                    if x == i.x and y == i.y:   # 判断当前坐标的点是否在列表里(是否被占用)
                        temp = True
                        break
                    else:
                        temp = False
                if temp:                
                    s += " o"			# 存在则这个点的内容就是“ o”
                else:
                    s += "  "           # 否则就是“  ”
            s += "\n"		
        print(s)

试试效果

wall = Wall()
Display.display(wall.get_position())

在这里插入图片描述
需要补充的一点就是,最后display模块每次打印之前需要先清一次屏,这里我没有写上以免混淆。最后的完整代码会加上

创建小蛇

跟造围墙同样的思路,总之先不考虑小蛇的功能先把它的身体造出来

class Snake:
    def __init__(self):
        self.__position = []							# 存储位置信息
        self.__position.append(Point(1, 2))				# 两个初始位置
        self.__position.append(Point(1, 1))
        self.speed = 1.6								# 移动速度
        self.__toward = "d"								# 移动方向  开始时默认向右走
    @property
    def toward(self):
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值