Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待

4999元包邮

去购买 >

先看看最后效果

图片的话是从网上小鱼儿那个案例里面拿的,实现的效果是通过方向键操作乌龟,进行吃鱼,吃鱼的时候根据乌龟的x,y坐标和鱼的x,y进行检测,在碰撞区域则干掉这条鱼,给乌龟加点分啥的

实现代码

import random

import pygame

import sys

from pygame.locals import * #导入一些常用的函数

pygame.init()

screen=pygame.display.set_mode([640,480])

pygame.display.set_caption('乌龟吃鱼') #定义窗口的标题为'乌龟吃鱼'

background = pygame.image.load("C:\\Users\\Administrator\\Desktop\\game\\images\\haidi.jpg").convert()

fishImg = pygame.image.load("C:\\Users\\Administrator\\Desktop\\game\\images\\fish.png").convert_alpha()

wuguiImg = pygame.image.load("C:\\Users\\Administrator\\Desktop\\game\\images\\turtle.png").convert_alpha()

w_width = wuguiImg.get_width() #得到乌龟图片的宽度,后面留着吃鱼的时候用

w_height = wuguiImg.get_height() #得到乌龟图片的高度

y_width = fishImg.get_width() #得到鱼图片的宽度

y_height = fishImg.get_height()#得到鱼图片的高度

#乌龟类

class Turtle:

def __init__(self):

self.power=100 #体力

#乌龟坐标

self.x=random.randint(0,640)

self.y=random.randint(0,400)

#乌龟移动的方法:移动方向均随机 第四条

def move(self,new_x,new_y):

#判断移动后是否超出边界

if new_x<0:

self.x=0-new_x

elif new_x>640:

self.x=640-(new_x-640)

else:

#不越界则移动乌龟的位置

self.x=new_x

if new_y<0:

self.y=0-new_y

elif new_y>480:

self.y=480-(new_y-480)

else:

#不越界则移动乌龟的位置

self.y=new_y

self.power-=1 #乌龟每移动一次,体力消耗1

def eat(self):

self.power+=20 #乌龟吃掉鱼,乌龟体力增加20

if self.power>100:

self.power=100 #乌龟体力100(上限)

#鱼类

class Fish:

def __init__(self):

#鱼坐标

self.x=random.randint(0,680)

self.y=random.randint(0,480)

def move(self):

#计算移动后的新位置(只有四种可能)

new_x=self.x+random.choice([1,-1])

new_y=self.y+random.choice([1,-1])

#判断移动后是否超出边界

if new_x<0:

self.x=0-new_x

elif new_x>640:

self.x=640-(new_x-640)

else:

#不越界则移动鱼的位置

self.x=new_x

if new_y<0:

self.y=0-new_y

elif new_y>480:

self.y=480-(new_y-480)

else:

#不越界则移动鱼的位置

self.y=new_y

#开始测试数据

tur=Turtle() #生成1只乌龟

fish=[] #生成10条鱼

for item in range(10):

newfish=Fish()

fish.append(newfish) #把生成的鱼放到鱼缸里

#pygame有一个事件循环,不断检查用户在做什么。事件循环中,如何让循环中断下来(pygame形成的窗口中右边的插号在未定义前是不起作用的)

while True:

for event in pygame.event.get():

if event.type==pygame.QUIT:

sys.exit()

if event.type == KEYDOWN:

#通过上下左右方向键控制乌龟的动向

if event.key==pygame.K_LEFT:

tur.move(tur.x-10,tur.y)

if event.key==pygame.K_RIGHT:

tur.move(tur.x+10,tur.y)

if event.key==pygame.K_UP:

tur.move(tur.x,tur.y-10)

if event.key==pygame.K_DOWN:

tur.move(tur.x,tur.y+10)

screen.blit(background, (0, 0)) #绘制背景图片

for item in fish:

screen.blit(fishImg, (item.x, item.y))#绘制鱼

screen.blit(wuguiImg, (tur.x, tur.y)) #绘制乌龟

#判断游戏是否结束:当乌龟体力值为0(挂掉)或者鱼儿的数量为0游戏结束

if tur.power<0 or len(fish)==0:

print("Game Over ~")

sys.exit()

for item in fish:

# print("鱼",item.x,item.y,y_width,y_height)

# print("乌龟",tur.x,tur.y,w_width,w_height)

if ((tur.x < item.x + y_width) and (tur.x + w_width > item.x) and (tur.y < item.y + y_height) and (w_height + tur.y > item.y)) :

tur.eat()

fish.remove(item)

print("死了一只鱼")

print("乌龟最新体力值为 %d"%tur.power)

pygame.display.update() #更新到游戏窗口

原文链接:https://segmentfault.com/a/1190000012773811

python乌龟吃鱼_Python面向对象练习-通过pygame改良乌龟吃鱼相关推荐

  1. python小鱼_Python面向对象练习-通过pygame改良乌龟吃鱼

    先看看最后效果 图片的话是从网上小鱼儿那个案例里面拿的,实现的功能如下: 是通过方向键操作乌龟,进行吃鱼 吃鱼的时候根据乌龟的x,y坐标和鱼的x,y进行检测,在碰撞区域则干掉这条鱼 背景音乐和吃鱼音乐 ...

  2. python类详解_python面向对象编程:python类和实例讲解

    东尧爱分享 这是东尧每天一篇文章的第51天 东尧写文章的目标:分享东尧的经验和思考,帮你获取物质和精神两方面幸福. 1 什么是对象 在python里面,一切皆为对象.也就是说python里的所有数据都 ...

  3. python如何定义类_Python 面向对象

    Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过 ...

  4. python对象点方法_python面向对象知识点疏理

    面向对象技术简介 类:用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例.class 类变量:类变量在整个实例化的对象中是公用的.类变量定义在类中且在 ...

  5. python继承的特点_python面向对象三大特性之继承

    继承是创建新类的方法,以下是几个概念 父类,基类,超类: 被继承的类 子类,派生类:继承而产出的类 单继承:继承一个父类 多继承:继承多个父类 继承: 什么是什么的关系 父类中没有的属性,在字类中出现 ...

  6. python modbus类封装_Python | 面向对象程序设计来了!

    当当当,技术小E又来了! 经过前几次的基础贴的培训 相信很多同学对python的基础知识 已经有了一个简单的认识 那么下面我们来讲一讲 python面向对象程序设计. 我们在写程序的时候一般有两种方式 ...

  7. python和对象复习_python 面向对象基础和高级复习

    面向对象基础 面向对象编程 面向过程编程:类似于工厂的流水线 优点:逻辑清晰 缺点:扩展性差 面向对象编程:核心是对象二字,对象属性和方法的集合体,面向对象编程就是一堆对象交互 优点:扩展性强 缺点: ...

  8. python面对对象实验_Python面向对象实现方法总结

    总结 类的定义 很久以前,语言都是面向过程的,经过计算机科学家的探索,出现了面向对象.面向对象可以解释生活中很多东西.比如人,人就是个对象,有参数,比如器官,身高啥的,有方法,比如跑步,学习等.不扯那 ...

  9. python制作学生管理系统_Python——面向对象,简易学生信息管理系统

    一.概述 1.1涉及到的知识点 项目开发:创建项目,创建包,导入包: 面向对象:静态方法,继承,内置函数,自定义函数: 数据类型:列表,字典,字符串.列表.字典的转换和自动生成导向: 异常处理:捕获异 ...

  10. python函数封装图解_Python面向对象之封装

    前文导读 知识框架: 1.什么是封装 2.封装的优点与原则 3.私有变量和私有方法 4.封装的更多说明 什么是封装 封装是面向对象编程的一大特点,面向对象编程的第一步将属性和方法封装到一个抽象类中,外 ...

最新文章

  1. log4j配置不生效
  2. python、PyTorch图像读取与numpy转换
  3. 最容易看懂的汇编语言书籍:汇编语言 王爽
  4. setup.s 分析—— Linux-0.11 学习笔记(二)
  5. 织梦生成的html路径,织梦dedecms安装在子目录网页生成在根目录如何设置
  6. C++之第一个程序Hello World,使用IO库输出Hello World
  7. 趣谈Linux操作系统01:概述
  8. MySQL数据监控案例_zabbix 监控多实例mysql
  9. 笔记本触摸板没反应,且设置里没有触摸板选项
  10. 【限流算法】java实现滑动时间窗口算法
  11. PS用圆角矩形工具画出来的是实线而是虚线,哪里出问题了?
  12. 我在亚马逊云平台的学习成长之路
  13. EntityUtils MapStruct BeanCopier 数据实体类转换工具 DO BO VO DTO 附视频
  14. 【Nutz】Nutz起步
  15. GaitSet: Cross-view Gait Recognition through Utilizing Gait as a Deep Set 阅读笔记
  16. java 小米抢购_java 小米商城抢手机redmik30 pro
  17. vuejs滚动条_VUE滚动条插件——vue-happy-scroll
  18. 每日英语阅读(十九)
  19. 5G NR 下行调度算法流程
  20. linux扫描仪安装程序,Linux桌面的4种扫描工具

热门文章

  1. 怎么给计算机上锁键盘,想把笔记本电脑的键盘锁住,用外置键盘怎样做?
  2. MTK T750平台:CCCI驱动调试
  3. 批量合并工作簿,包含三种合并方式,Excel技能演示
  4. 8个接私活的网站,只要你有码,那就有钱!
  5. 什么是全国大学生电子设计大赛?如何备战?
  6. HOG特征,LBP特征,Haar特征(图像特征提取)
  7. 主流编程语言的特点分析
  8. Python统计列表元素出现次数
  9. android最佳投屏,Android投屏神器(scrcpy使用教程)
  10. 中文词典的扩充和组织