项目二:使用 python pygame模块做简单的贪吃蛇。面向对象方法,使用类和对象结构。

小白第二次发博客,可能有很多问题,望指正!

讲的比较简单,不是很详细,提供一个思路。

目录:

  1. 成果展示
  2. 代码说明
  3. 完整代码
  4. 其他补充和参考资料

——————分割线————————

1.成果展示

最初的:

我扩展后的:(杂乱的点太多,不讲这个)

主要思路:

  1. 把窗口界面划分为网格,每个格子有横纵坐标(可以理解为x、y或者行、列)
  2. 主要分为三个部分:蛇头、蛇身和食物,都由一个或多个格子组成
  3. 蛇头移动时,移动一个格子,而不是一个像素
  4. 蛇身移动时,删除最后一个蛇身,在最前面插入一个新的蛇身
  5. 蛇头坐标和食物坐标重合时,不删除最后的蛇身(这样就增加一个蛇身),食物重新随机生成

2.代码说明

扩展的部分就不多说了,拿最根本的部分来讲

(1)初始框架,创建方格类

# 初始框架
import random
from pygame import *

# 基础窗口数值(许多类和方法中用的到,所以设成全局变量)
W = 800
H = 600
ROW = 30
COL = 40


# 基础方格类,用于生成方格
class Point:
    row = 0
    col = 0

    def __init__(self, row, col):
        self.row = row
        self.col = col

    def copy(self):
        return Point(row=self.row, col=self.col)
  • 创建方格类,后面蛇头,蛇身,食物都是用方格类生成的
  • 变量W、H、ROW、COL分别表示窗口的宽、高,方格的行数、列数

  • copy方法方便后面插入新的蛇身

(2)创建蛇头类

# 蛇头类
class SnakeHead:
    row = int(ROW / 2)
    col = int(COL / 2)
    head = Point(row=row, col=col)
    direct = 'left'

    def __init__(self,  window):
        self.window = window
        pass

    def head_move(self):
        if self.direct == 'left':
            self.head.col -= 1
        elif self.direct == 'right':
            self.head.col += 1
        elif self.direct == 'up':
            self.head.row -= 1
        elif self.direct == 'down':
            self.head.row += 1
        pass
  • 蛇头类有一个方格对象head属性,具有横纵坐标属性,方便后续比较坐标关系

  • head_move方法用来实现蛇头的移动

(3)创建蛇身类

# 蛇身类
class SnakeBody:
    headBFollow = SnakeHead
    body = [
        Point(row=headBFollow.head.row, col=headBFollow.head.col + 1),
        Point(row=headBFollow.head.row, col=headBFollow.head.col + 2),
        Point(row=headBFollow.head.row, col=headBFollow.head.col + 3)
    ]

    def __init__(self, window):
        self.window = window

    def body_move_i(self):
        self.body.insert(0, self.headBFollow.head.copy())

    def body_move_o(self):
        self.body.pop()

    def normal_move(self):
        self.body_move_i()
        self.body_move_o()

    def body_add(self):
        self.body_move_i()
        # 优化蛇头吃到食物后蛇头消失一下的情况(实际上只是加快了一下,并没有解决)
        if self.headBFollow.direct == 'left':
            self.headBFollow.head.col -= 1
        elif self.headBFollow.direct == 'right':
            self.headBFollow.head.col += 1
        elif self.headBFollow.direct == 'up':
            self.headBFollow.h
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值