软件实习项目2——贪吃喵(猫吃鱼版贪吃蛇)(代码实现)

  • 类变量的定义以及类的初始化__init__
  • 一、游戏的逻辑
    • 1、猫头的生成
    • 2、鱼的生成
    • 3、猫头和鱼骨的移动
    • 4、按下键盘,改变方向
  • 二、主窗口的绘制
  • 三、游戏开始与结束界面,以及主窗口的按钮
    • 1、开始游戏
    • 2、游戏速度设置
    • 3、猫咪选项设置
    • 4、结束游戏
    • 5、窗口中的按钮:暂停/开始、重来/退出
  • 四、游戏背景音乐

类变量的定义以及类的初始化__init__

class CatWindow(QWidget):row = 0  # 行数column = 0  # 列数direction = 0  # 猫头方向head_row = 0  # 猫头的行head_column = 0  # 猫头的列head_position = ''  # 猫头位置coordinate = []  # 猫头和鱼骨的位置列表fish_row = 0  # 鱼的行fish_column = 0  # 鱼的列fish_position = ''  # 鱼的位置score = 0  # 计分# 速度默认值为500speed = 500# 猫咪类型默认值是英短蓝白head_pic = 'head.png'dead_pic = 'dead.png'# 设置几个字体font1 = QtGui.QFont("Calibri", 20)font2 = QtGui.QFont("Calibri", 15)font3 = QtGui.QFont("Calibri", 13)font4 = QtGui.QFont("幼圆", 20)font5 = QtGui.QFont("幼圆", 13)# 所有按钮都按照这个样式buttons_style = "QPushButton{background-color: rgb(255, 255, 255); border-radius:10px}" \"QPushButton:hover{Background-color:qlineargradient(x1:0,y1:0,x2:0,y2:1,stop:0 #cdced1, stop:1 #f6f7fa);}" \"QPushButton:pressed{Background-color:qlineargradient(x1:0,y1:0,x2:0,y2:1,stop:0 #f6f7fa, stop:1 #cdced1);}"# 初始化def __init__(self):QWidget.__init__(self)self.setWindowTitle('贪吃喵')  # 窗口标题self.setStyleSheet('background-color:#deebf7')  # 游戏背景颜色self.setWindowIcon(QIcon('head.png'))  # 设置窗口图标ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID("myappid")  # 任务栏图标self.resize(850, 850)  # 游戏窗口大小self.row = 12  # 行数self.column = 12  # 列数pygame.mixer.init()  # 初始化背景音乐self.GameStart()self.windowButton()self.timer = QTimer()  # 计时器self.timer.start(self.speed)  # 开始计时self.timer.timeout.connect(self.moveCat)  # 超时即调用moveCat方法

一、游戏的逻辑

1、猫头的生成

 # 随机生成猫头位置def head(self):self.backgroundMuisc()self.score = 0  # 分数清零self.coordinate.clear()  # 坐标清空self.head_row = random.randint(2, self.row - 2)  # 随机选取猫头的行self.head_column = random.randint(1, self.column - 2)  # 随机选取猫头的列self.coordinate = [str(self.head_row) + "," + str(self.head_column)]  # 把猫头位置写入坐标列表中self.fish()  # 调用生成鱼的函数self.direction = random.randrange(0, 4)  # 随机选择方向self.update()

2、鱼的生成

     # 生成鱼的位置def fish(self):while True:self.fish_row = random.randint(1, self.row - 1)  # 随机选取鱼的行self.fish_column = random.randint(0, self.column - 1)  # 随机选取鱼的列self.fish_position = str(self.fish_row) + "," + str(self.fish_column)# 若随机生成的鱼的位置不在猫头和鱼骨的坐标列表中,则返回鱼的位置,否则重新生成if self.fish_position not in self.coordinate:return self.fish_position  # 返回鱼的位置

3、猫头和鱼骨的移动

 # QTimer的timeout触发的方法def moveCat(self):if self.direction == 0:self.head_row -= 1  # 猫头的行数-1elif self.direction == 1:self.head_row += 1  # 猫头的行数+1elif self.direction == 2:self.head_column -= 1  # 猫头的列数-1elif self.direction == 3:self.head_column += 1  # 猫头的列数+1# 猫头位置self.head_position = str(self.head_row) + "," + str(self.head_column)# 1、若吃到鱼了if self.head_position == self.fish_position:self.coordinate.insert(0, self.head_position)  # 鱼骨位置不变,在列表最前面插入猫头位置self.score += 10  # 每吃到一条鱼就加10分self.fish()  # 生成鱼# 2、若没吃到鱼else:# 若猫头和鱼骨没有相撞且猫头没有出界if 1 <= self.head_row < self.row and 0 <= self.head_column < self.column and self.head_position not in self.coordinate[1:]:# 1)移动所有鱼骨for i in range(len(self.coordinate) - 1, 0, -1):  # range函数的参数(start, stop, step)self.coordinate[i] = self.coordinate[i - 1]  # 所有坐标等于它的前一个坐标(往前一个移动)# 2)更新猫头位置self.coordinate[0] = self.head_position# 若猫头和鱼骨相撞或猫头出界,则游戏结束else:self.GameOver(True)returnself.update()

4、按下键盘,改变方向

# 按下键盘,改变方向def keyPressEvent(self, event):QWidget.keyPressEvent(self, event)key = event.key()# 1、按了↑if key == Qt.Key_W:self.direction = 0# 2、按了↓elif key == Qt.Key_S:self.direction = 1# 3、按了←elif key == Qt.Key_A:self.direction = 2# 4、按了→elif key == Qt.Key_D:self.direction = 3

二、主窗口的绘制

    # 绘制主窗口中的所有物体def paintEvent(self, event):QWidget.paintEvent(self, event)painter = QPainter(self)row_space = self.height() / self.row  # 行间距column_space = self.width() / self.column  # 列间距# 显示背景图片painter.drawImage(QRectF(0, 0, self.width(), self.height()), QImage('bg.jpg'))# 绘制行线和列线pen = QPen(QColor(255, 255, 255), 1, Qt.DotLine)  # 画笔颜色、粗细、线型painter.setPen(pen)for n in range(self.row + 1):painter.drawLine(QPointF(0, row_space * n), QPointF(self.width(), row_space * n))for n in range(self.column + 1):painter.drawLine(QPointF(column_space * n, column_space), QPointF(column_space * n, self.height()))# 显示分数text_painter = QPainter(self)text_pen = QPen(QColor(0, 0, 0))  # 画笔颜色、粗细、线型text_painter.setPen(text_pen)text_painter.setFont(self.font1)text_painter.drawText(350, 50, 'Score: ' + str(self.score))# 画猫头、鱼骨、鱼index = 0  # 记录coordinate的索引,为0时画猫头,大于0时画鱼骨for n in self.coordinate:row = int(n[:n.find(',')])column = int(n[n.find(',') + 1:])# 若猫头没出界且没有与鱼骨相撞,画猫头和鱼骨if 1 <= self.head_row < self.row and 0 <= self.head_column < self.column and self.head_position not in self.coordinate[1:]:# 猫头if index == 0:painter.drawImage(QRectF(column * column_space, row * row_space, column_space, row_space),QImage(self.head_pic))# 画鱼骨else:painter.drawImage(QRectF(column * column_space, row * row_space, column_space, row_space),QImage('bone.png'))index += 1# 若猫头出界了或与鱼骨相撞,画死亡猫头和鱼骨else:# 猫头if index == 0:painter.drawImage(QRectF(column * column_space, row * row_space, column_space, row_space),QImage(self.dead_pic))# 画鱼骨else:painter.drawImage(QRectF(column * column_space, row * row_space, column_space, row_space),QImage('bone.png'))index += 1# 画鱼painter.drawImage(QRectF(self.fish_column * column_space, self.fish_row * row_space, column_space, row_space),QImage('fish.png'))

三、游戏开始与结束界面,以及主窗口的按钮

1、开始游戏

 # 开始游戏def GameStart(self):# 消息框的大小和样式message_box = QMessageBox()message_box.setStyleSheet('width: 500; height: 70')message_box.setWindowTitle('WELCOME')message_box.setFont(self.font4)message_box.setText("欢迎来到贪吃喵												

软件实习项目2——贪吃喵(猫吃鱼版贪吃蛇)(代码实现)相关推荐

  1. 软件实习项目2——贪吃喵(猫吃鱼版贪吃蛇)(实验准备与设计)

    软件实习项目2--贪吃喵(猫吃鱼版贪吃蛇)(实验准备与设计) 实验内容 编程语言以及开发环境的选择 实验思路(游戏设计) 一.游戏的逻辑设计 1.猫头的生成 2.鱼的生成 3.猫头和鱼骨的移动 4.按 ...

  2. 软件实习项目2——贪吃喵(猫吃鱼版贪吃蛇)(成品展示)

    软件实习项目2--贪吃喵(猫吃鱼版贪吃蛇)(成品展示) 成品展示 1.开始游戏界面 2.游戏主界面 3.结束游戏界面 视频演示 成品展示 1.开始游戏界面 速度选择: 猫咪类型选择: 2.游戏主界面 ...

  3. 软件实习项目4——校园一卡通管理系统(成品展示)

    软件实习项目4--校园一卡通管理系统(成品展示) 成品展示 1.登录界面 2.密保验证 3.重置密码 4.主界面 视频演示 成品展示 1.登录界面 2.密保验证 3.重置密码 4.主界面 1)学生基本 ...

  4. 【训练4】猫吃鱼,狗吃肉(匿名内部类)

    [训练4]猫吃鱼,狗吃肉 参照下面的代码,创建Animal类的匿名子类对象,重写eat()方法,执行该方法后会在控制台打印"猫吃鱼,狗吃肉"字样. /*[训练4]猫吃鱼,狗吃肉* ...

  5. 【使用java swing制作简易贪吃蛇游戏】软件实习项目二

    一.项目准备 需求分析: 实现贪吃蛇游戏基本功能,屏幕上随机出现一个"食物",称为豆子,上下左右控制"蛇"的移动,吃到"豆子"以后" ...

  6. 软件实习项目二:贪吃蛇的游戏开发

    目录 一.实验内容: 二.实验准备 三.程序代码 四.成果展示 一.实验内容: 1)实现贪吃蛇游戏基本功能,屏幕上随机出现一个"食物",称为豆子.玩家能利用上下左右键控制" ...

  7. Java主人喂猫吃鱼的实验总结,小猫吃鱼的作文4篇

    小猫吃鱼的作文4篇 小猫吃鱼的作文1 夏天的一个星期天的早晨,万里晴空,骄阳似火.一只好看的小花猫肚子饿了,到野外找食吃.它来到小河边,看到河边的老槐树下拴着一条狗,黑黑的绒毛,四肢雪白,长长的尾巴往 ...

  8. JavaScript实现猫吃鱼小游戏

    贪吃猫小游戏 作为一名前端人员,撸猫我决定使用面向对象的方式书写贪吃猫小游戏,灵感来自有贪食蛇小游戏. 我们可以把整个游戏看成是一个游戏类,游戏类可以有各种各样的属性. 我们可以把贪吃猫中的猫作为一个 ...

  9. python入门小项目 | 开发一个《小猫抓鱼》小游戏

    小猫抓鱼 开发工具 讲解部分 一.游戏原理 二.游戏逻辑 三.重点代码实现 开发工具 python3.6.4 第三方库: pygame,random 讲解部分 一.游戏原理 游戏原理很简单,和接水果的 ...

最新文章

  1. mybatis自动生成代码工具
  2. 李开复给中国学生的第七封信:21世纪最需要的7种人才
  3. C++学习手记五:C++流操作
  4. 【每周NLP论文推荐】 对话管理中的标志性论文介绍
  5. mysql的jdbc版本_【jdbc】Mysql 8版本jdbc设置
  6. 前端开发 margin外边距 0229
  7. leetcode 只出现一次的数字
  8. 【EMC】电压暂降、短时中断和电压变化
  9. java 注解校验_Java开发编写自定义校验注解和校验器
  10. net core mysql 组件记录
  11. Spring整合log4j日志组件(转)
  12. OpenCV 单目摄像头(python版)
  13. 迅捷校园网自动登录脚本(网页端)
  14. 安徽大学本科毕业论文答辩和论文选题PPT模板
  15. 机器学习(十一) 迁移学习
  16. 汉化MapGuide
  17. BeautifulSoup用法详解
  18. 无线充电怎么测试软件,无线充电测试难点及解决方案
  19. stm8s103k3 周期 捕获_STM8S做输入捕获
  20. 汽车网络安全渗透测试

热门文章

  1. 应用基准化分析—Benchmark
  2. 强大的多媒体播放器:射手影音播放器SPlayer for Mac
  3. 双显卡只用独显好吗_双显卡如何切换到独立显卡?双显卡只用独显的方法
  4. ubuntu18.04 | soundfile安装报错与解决
  5. (杭电2188)选拔志愿者
  6. QQ 浏览器(iOS版)崩溃信息研究
  7. ap接口 php_cos-php-sdk-v5接口文档
  8. N - Sport Mafia(数学)
  9. [历年IT笔试题]2014京东校园招聘-软件开发笔试题
  10. All the Vowels Please