先看看最后效果

图片的话是从网上小鱼儿那个案例里面拿的,实现的功能如下:

是通过方向键操作乌龟,进行吃鱼

吃鱼的时候根据乌龟的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()

#乌龟吃掉小鱼的音乐 mp3格式的不行,wav格式的

eatsound = pygame.mixer.Sound("C:\\Users\\Administrator\\Desktop\\achievement.wav")

#背景音乐

pygame.mixer.music.load("C:\\Users\\Administrator\\Desktop\\game_music.mp3")

pygame.mixer.music.play(loops=0, start=0.0)

#成绩文字显示

count=0

font =pygame.font.SysFont("arial", 40)

score = font.render("score %d"%count, True, (255, 255, 255))

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

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

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

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

fpsClock=pygame.time.Clock() #创建一个新的Clock对象,可以用来跟踪总共的时间

#乌龟类

class Turtle:

def __init__(self):

self.power=100 #体力

#乌龟坐标

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

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,500)

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

def move(self):

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

if new_x<0:

self.x=650

else:

self.x=new_x

#开始测试数据

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)) #绘制背景图片

screen.blit(score,(500,20))#绘制分数

#绘制鱼

for item in fish:

screen.blit(fishImg, (item.x, item.y))

# pygame.time.delay(100)

item.move() #鱼移动

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) #鱼死掉

#吃鱼音乐

eatsound.play()

count=count+1 #累加

score = font.render("score %d"%count, True, (255, 255, 255))

print("死了一只鱼")

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

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

fpsClock.tick(10) #通过每帧调用一次fpsClock.tick(10),这个程序就永远不会以超过每秒10帧的速度运行

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

  1. pygame制作小猫吃鱼1

    pygame 界面 创立一个pygame的界面 # python pygame '''引入模块''' import pygame, sys, random from pygame.locals imp ...

  2. 面向对象编程项目案例(栈与队列封装和乌龟吃鱼游戏)

    一.Pygame相关介绍 1.Pygame是跨平台Python模块,专为电子游戏设计,包含图像.声音.允许实时电子游戏研发而无需被低级语言(如机器语言和汇编语言)束缚.Pygame常用模块 2.一个游 ...

  3. python 对象_python面向对象

    OOP -面向对象 1.python的面向对象相关概念 2.类与对象 2.1 类和对象的创建 2.2 类属性与实例属性 2.3 类方法和实例方法 2.4 self 3.面向对象编程 封装 继承 构造i ...

  4. python多态_Python面向对象教程之多态

    今天给大家介绍面向对象最后一个重要的特性--多态.如果想温习前两个重要特性(继承和封装),可以点开:<Python面向对象教程之基本概念>.<Python面向对象教程之单继承> ...

  5. python 封装_Python 面向对象三大特性之封装

    封装 定义:隐藏对象的属性和实现细节,仅对外提供公共访问方式. [好处] 将变化隔离: 便于使用: 提高复用性: 提高安全性: [封装原则] 将不需要对外提供的内容都隐藏起来: 把属性都隐藏,提供公共 ...

  6. cs精英游戏python代码_python面向对象-cs游戏示例

    #!/usr/local/bin/python3 # -*- coding:utf-8 -*- class Role(object): n = 123 # 类变量 name = "我是类na ...

  7. python小鱼_Python 入门第五天

    一.流程控制之while循环1.什么是循环? 循环指的就是重复做某一件事 2.为何要有循环 循环就是为了让计算机能够像人一样去重复做某件事 3.如何用循环 while循环,又称之为条件循环 1.能够重 ...

  8. Python 小甲鱼教程 乌龟吃鱼游戏

    整个程序按照答案来敲的,我觉得按照自己的水平完全没思路写得出来框架,就当熟悉代码风格来处理吧. import random as r legal_x = [0,10]           #先定义范围 ...

  9. python的类和对象_Python面向对象之类和对象实例详解

    本文实例讲述了Python面向对象之类和对象.分享给大家供大家参考,具体如下: 类和对象(1) 对象是什么? 对象=属性(静态)+方法(动态): 属性一般是一个个变量:方法是一个个函数: #类的属性 ...

最新文章

  1. 关于Verilog HDL的一些技巧、易错、易忘点(不定期更新)
  2. 史上最全!27种神经网络简明图解:模型那么多,我该怎么选?
  3. win8+XAML Binding(数据绑定)
  4. 2018明星学术公众号TOP 10重磅发布,PaperWeekly再度入选
  5. Live Source Address 2019最新的电视广播包_Arturia MiniLab MkII迷你MIDI键盘2019年换新装:反色纯黑版...
  6. Ant build.xml中的各种变量
  7. CUDA C编程权威指南 第五章 共享内存和常量内存
  8. 微信小程序豆瓣电影项目的改造过程经验分享
  9. 在导出Altium Designer09 PCB BOM清单时,如何把不同层的元器件分开。
  10. mysql 5.7版本下载安装
  11. ai可以滚轮缩放吗_Illustrator CC for MAC按住alt键滑动鼠标无法缩放?
  12. 全球前沿技术趋势报告;华为发布Mate 40/Pro 系列新机;Windows 计算器移植到到 Linux...
  13. tomcat java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11.XToolkit异常解决
  14. Arch Linux 安装 Anbox
  15. 华硕ac68u无线最佳设置_华硕AC86U,AC88U的掉线、断流问题何时彻底解决?
  16. 用计算机过去机读卡,阅卷机读卡机答题卡使用流程
  17. 购物表单mysql还是mongodb_日志数据是选择mysql 还是 mongodb 还是 postgredb
  18. linux卸载nps,CentOS安装nps
  19. 第9课:scratchjr等待指令
  20. 计算机office比赛,理工学院成功举办第十四届科技文化月之计算机设计大赛——MS Office文档设计比赛...

热门文章

  1. Java基础面试典籍60+ | 大别山码将
  2. 【docker】镜像的导出保存及载入
  3. 【神界原罪2】被困的精灵(The Imprisoned Elf)[支线]桔子洛斯对话第三项可以得到桔子
  4. 微软小娜开发者平台负责人:未来人机交互界面可能不是APP,而是Bots
  5. Ubuntu 16的中文输入法安装 (How to install chinese input methods)
  6. ArcGIS栅格擦除步骤
  7. 游戏行业人才结构分析
  8. 刚学Tableau的小白也可以作出美观大气的数据图表
  9. 用户画像(一)数仓与表结构的基本构建
  10. SQL server使用sa登录方法和出现错误18456的解决