基于Python-Pycharm实现的猴子摘桃小游戏(源代码)


Posted in Python onFebruary 20, 2021

源码及注释:

import pygame
from sys import exit
from random import randint
import time
import os

# 定义窗口分辨率
SCREEN_WIDTH = 700
SCREEN_HEIGHT = 600

current_path = os.path.abspath(os.path.dirname(__file__))
root_path = current_path[:current_path.find("monkey-picking-peach\\") + len("monkey-picking-peach\\")] \
   + "resource\\images\\"
# 图片
BACKGROUND_IMAGE_PATH = root_path + "background.jpg"
MONKEY_IMAGE_PATH = root_path + "monkey.png"
APPLE_IMAGE_PATH = root_path + "apple.png"
JUMP_STATUS = False
OVER_FLAG = False
START_TIME = None
offset = {pygame.K_LEFT: 0, pygame.K_RIGHT: 0, pygame.K_UP: 0, pygame.K_DOWN: 0}

# 定义画面帧率
FRAME_RATE = 60

# 定义动画周期(帧数)
ANIMATE_CYCLE = 30

ticks = 0
clock = pygame.time.Clock()


# 猴子类
class Monkey(pygame.sprite.Sprite):
 # 苹果的数量
 apple_num = 0

 def __init__(self, mon_surface, monkey_pos):
  pygame.sprite.Sprite.__init__(self)
  self.image = mon_surface
  self.rect = self.image.get_rect()
  self.rect.topleft = monkey_pos
  self.speed = 5

 # 控制猴子的移动
 def move(self, _offset):
  global JUMP_STATUS
  x = self.rect.left + _offset[pygame.K_RIGHT] - _offset[pygame.K_LEFT]
  y = self.rect.top + _offset[pygame.K_DOWN] - _offset[pygame.K_UP]
  if y < 0:
   self.rect.top = 0
   JUMP_STATUS = True
  elif y >= SCREEN_HEIGHT - self.rect.height:
   self.rect.top = SCREEN_HEIGHT - self.rect.height
   JUMP_STATUS = False
  else:
   self.rect.top = y
   JUMP_STATUS = True

  if x < 0:
   self.rect.left = 0
  elif x > SCREEN_WIDTH - self.rect.width:
   self.rect.left = SCREEN_WIDTH - self.rect.width
  else:
   self.rect.left = x

 # 接苹果
 def picking_apple(self, app_group):

  # 判断接到几个苹果
  picked_apples = pygame.sprite.spritecollide(self, app_group, True)

  # 添加分数
  self.apple_num += len(picked_apples)

  # 接到的苹果消失
  for picked_apple in picked_apples:
   picked_apple.kill()


# 苹果类
class Apple(pygame.sprite.Sprite):
 def __init__(self, app_surface, apple_pos):
  pygame.sprite.Sprite.__init__(self)
  self.image = app_surface
  self.rect = self.image.get_rect()
  self.rect.topleft = apple_pos
  self.speed = 1

 def update(self):
  global START_TIME
  if START_TIME is None:
   START_TIME = time.time()
  self.rect.top += (self.speed * (1 + (time.time() - START_TIME) / 40))
  if self.rect.top > SCREEN_HEIGHT:
   # 苹果落地游戏结束
   global OVER_FLAG
   OVER_FLAG = True
   self.kill()


# 初始化游戏
pygame.init()
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("猴子接苹果")

# 载入图片
background_surface = pygame.image.load(BACKGROUND_IMAGE_PATH).convert()
monkey_surface = pygame.image.load(MONKEY_IMAGE_PATH).convert_alpha()
apple_surface = pygame.image.load(APPLE_IMAGE_PATH).convert_alpha()

# 创建猴子
monkey = Monkey(monkey_surface, (200, 500))

# 创建苹果组
apple_group = pygame.sprite.Group()

# 分数字体
score_font = pygame.font.SysFont("arial", 40)

# 主循环
while True:

 if OVER_FLAG:
  break

 # 控制游戏最大帧率
 clock.tick(FRAME_RATE)

 # 绘制背景
 screen.blit(background_surface, (0, 0))

 if ticks >= ANIMATE_CYCLE:
  ticks = 0

 # 产生苹果
 if ticks % 30 == 0:
  apple = Apple(apple_surface,
      [randint(0, SCREEN_WIDTH - apple_surface.get_width()), -apple_surface.get_height()])
  apple_group.add(apple)

 # 控制苹果
 apple_group.update()

 # 绘制苹果组
 apple_group.draw(screen)

 # 绘制猴子
 screen.blit(monkey_surface, monkey.rect)
 ticks += 1

 # 接苹果
 monkey.picking_apple(apple_group)

 # 更新分数
 score_surface = score_font.render(str(monkey.apple_num), True, (0, 0, 255))
 screen.blit(score_surface, (620, 10))
 # 更新屏幕
 pygame.display.update()

 for event in pygame.event.get():
  if event.type == pygame.QUIT:
   pygame.quit()
   exit()

  # 控制方向
  if event.type == pygame.KEYDOWN:
   if event.key in offset:
    if event.key == pygame.K_UP:
     offset[event.key] = 80
    else:
     offset[event.key] = monkey.speed
  elif event.type == pygame.KEYUP:
   if event.key in offset:
    offset[event.key] = 0

 # 移动猴子
 if JUMP_STATUS:
  offset[pygame.K_DOWN] = 5
  offset[pygame.K_UP] = 0
 monkey.move(offset)

# 游戏结束推出界面
score_surface = score_font.render(str(monkey.apple_num), True, (0, 0, 255))
over_surface = score_font.render(u"Game Over!", True, (0, 0, 255))
screen.blit(background_surface, (0, 0))
screen.blit(score_surface, (620, 10))
screen.blit(over_surface, (250, 270))

while True:

 pygame.display.update()
 for event in pygame.event.get():
  if event.type == pygame.QUIT:
   pygame.quit()
   exit()

食用指南: 使用的图片

monkey.png:

基于Python-Pycharm实现的猴子摘桃小游戏(源代码)

background.jpg:

基于Python-Pycharm实现的猴子摘桃小游戏(源代码)

apple.png:

基于Python-Pycharm实现的猴子摘桃小游戏(源代码)

这是我的文件目录,学习者也可改为自己的:

基于Python-Pycharm实现的猴子摘桃小游戏(源代码)

更改的代码位置:

root_path = current_path[:current_path.find("monkey-picking-peach\\") + len("monkey-picking-peach\\")] \
   + "resource\\images\\"

游戏截图:

基于Python-Pycharm实现的猴子摘桃小游戏(源代码)

到此这篇关于基于Python-Pycharm实现的猴子摘桃小游戏的文章就介绍到这了,更多相关Python 猴子摘桃小游戏内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python yield 小结和实例
Apr 25 Python
跟老齐学Python之复习if语句
Oct 02 Python
python回溯法实现数组全排列输出实例分析
Mar 17 Python
几个提升Python运行效率的方法之间的对比
Apr 03 Python
解读Python中degrees()方法的使用
May 18 Python
Python2.7读取PDF文件的方法示例
Jul 13 Python
pytorch构建网络模型的4种方法
Apr 13 Python
python之Flask实现简单登录功能的示例代码
Dec 24 Python
基于python2.7实现图形密码生成器的实例代码
Nov 05 Python
pytorch 彩色图像转灰度图像实例
Jan 13 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
Jan 15 Python
python获取响应某个字段值的3种实现方法
Apr 30 Python
pandas按条件筛选数据的实现
Feb 20 #Python
python实现b站直播自动发送弹幕功能
Feb 20 #Python
如何用 Python 制作 GitHub 消息助手
Feb 20 #Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
Feb 20 #Python
Python 的 f-string 可以连接字符串与数字的原因解析
Feb 20 #Python
安装不同版本的tensorflow与models方法实现
Feb 20 #Python
python爬虫scrapy基本使用超详细教程
Feb 20 #Python
You might like
一个用于mysql的数据库抽象层函数库
2006/10/09 PHP
windows下安装php的memcache模块的方法
2015/04/07 PHP
PHP实现微信退款功能
2018/10/02 PHP
JavaScript asp.net 获取当前超链接中的文本
2009/04/14 Javascript
Microsoft Ajax Minifier 压缩javascript的方法
2010/03/05 Javascript
让textarea自动调整大小的js代码
2011/04/12 Javascript
如何在一个页面显示多个百度地图
2013/04/07 Javascript
jquery批量设置属性readonly和disabled的方法
2014/01/24 Javascript
js实现右下角提示框的方法
2015/02/03 Javascript
jQuery中$.extend()用法实例
2015/06/24 Javascript
jQuery实现的网页左侧在线客服效果代码
2015/10/23 Javascript
jQuery插件ajaxFileUpload使用实例解析
2016/10/19 Javascript
jQuery中页面返回顶部的方法总结
2016/12/30 Javascript
jQuery日程管理插件fullcalendar使用详解
2017/01/07 Javascript
使用bootstrap-paginator.js 分页来进行ajax 异步分页请求示例
2017/03/09 Javascript
JS实现上传图片实时预览功能
2017/05/22 Javascript
Angular.js中上传指令ng-upload的基本使用教程
2017/07/30 Javascript
微信小程序实现红包功能(后端PHP实现逻辑)
2018/07/11 Javascript
vue在手机中通过本机IP地址访问webApp的方法
2018/08/15 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
2018/08/19 Javascript
使用vue-cli3新建一个项目并写好基本配置(推荐)
2019/04/24 Javascript
微信小程序3种位置API的使用方法详解
2019/08/05 Javascript
vue中动态select的使用方法示例
2019/10/28 Javascript
javascript绘制简单钟表效果
2020/04/07 Javascript
在antd Form表单中select设置初始值操作
2020/11/02 Javascript
python在windows和linux下获得本机本地ip地址方法小结
2015/03/20 Python
Python的collections模块中的OrderedDict有序字典
2016/07/07 Python
Python利用heapq实现一个优先级队列的方法
2019/02/03 Python
Python元组知识点总结
2019/02/18 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
Python lxml模块的基本使用方法分析
2019/12/21 Python
Python numpy大矩阵运算内存不足如何解决
2020/11/19 Python
Python应用自动化部署工具Fabric原理及使用解析
2020/11/30 Python
Giglio美国站:意大利奢侈品购物网
2018/02/10 全球购物
班级旅游计划书
2014/05/03 职场文书
接触艺术对孩子学习思维有益
2019/08/06 职场文书