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

源码及注释:

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:

background.jpg:

apple.png:

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

更改的代码位置:

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

游戏截图:

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

(0)

相关推荐

  • python3实现弹弹球小游戏

    本文实例为大家分享了python3实现弹弹球小游戏的具体代码,供大家参考,具体内容如下 from tkinter import * from tkinter import messagebox import random import time from PIL import Image, ImageTk import sys class Game: def __init__(self): self.tk = Tk() self.times = 0 sw = self.tk.winfo_scre

  • python实现猜拳小游戏

    用python实现猜拳小游戏,供大家参考,具体内容如下 本练习旨在养成良好的编码习惯和练习逻辑思考. 1.使用python版本: 3.7.3: 2.代码内容实现如下 #!/usr/bin/env python # -*- coding: utf-8 -*- """ 简单实现猜拳小游戏,默认每回合 五局 Version: 0.1 Author: smartbabble Date: 2018-03-12 """ from random import

  • python实现猜单词小游戏

    Python初学者小游戏:猜单词,供大家参考,具体内容如下 游戏逻辑:就像我们曾经英语学习机上的小游戏一样,电脑会从事先预置的词库中抽取单词,然后给出单词的字母数量,给定猜解次数,然后让玩家进行猜测,并给出每次猜测的正确字母与错误字母. 涉及知识点:random.randint(),print(),input()(raw_input()) 参考实现代码: #!/usr/bin/python # -*- coding: utf-8 -*- from __future__ import print_

  • python实现飞机大战小游戏

    本文实例为大家分享了python实现飞机大战的具体代码,供大家参考,具体内容如下 初学Python,写了一个简单的Python小游戏. 师出bilibili某前辈 pycharm自带了第三方库pygame,安装一下就好了,很方便. 虽然很多大佬已经给出了步骤,我这里还是啰嗦一下,也为了自己巩固一下. 上图: 这里再给出代码的逻辑架构 plane_main.py import pygame from plane_sprites import * class PlaneGame(object): "

  • Python实现打砖块小游戏代码实例

    这次用Python实现的是一个接球打砖块的小游戏,需要导入pygame模块,有以下两条经验总结: 1.多父类的继承2.碰撞检测的数学模型 知识点稍后再说,我们先看看游戏的效果和实现: 一.游戏效果 二.游戏代码 #导入模块 import pygame from pygame.locals import * import sys,random,time,math class GameWindow(object): '''创建游戏窗口类''' def __init__(self,*args,**kw

  • python实现扫雷小游戏

    前面我们用python实现了贪吃蛇.坦克大战.飞船大战.五子棋等游戏 今天我们用python来实现一下扫雷游戏 本游戏代码量和源文件较多 可以从我的GitHub地址中获取 构建地雷区 import random from enum import Enum BLOCK_WIDTH = 30 BLOCK_HEIGHT = 16 SIZE = 20 # 块大小 MINE_COUNT = 99 # 地雷数 class BlockStatus(Enum): normal = 1 # 未点击 opened

  • Python实现猜数字小游戏

    Python初学者小游戏:猜数字 游戏逻辑:电脑随机生成一个数字,然后玩家猜数字,电脑提示猜的数字大了还是小了,供玩家缩小数字范围,达到既定次数后,玩家失败.若在次数内猜对,玩家获胜. 涉及知识点:random.randint() , print() , input() ( raw_input() ) 参考实现代码: #!/usr/bin/env python # encoding: utf-8 #使用print("",end=...)标准 from __future__ import

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

    源码及注释: 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-

  • 基于Python实现开心消消乐小游戏的示例代码

    目录 前言 一.准备 1.1 图片素材 1.2 音频素材 二.代码 2.1 导入模块 2.2 游戏音乐设置 2.3 制作树类 2.4 制作鼠标点击效果 2.5 制作出现元素 2.6 数组 2.7 制作人物画板 三.效果展示(仅部分) 3.1 初始页面 3.2 第一关画面 3.3 失败画面 3.4 第十关画面 穿过云朵升一级是要花6个金币的,有的时候金币真的很重要 前言 嗨喽,大家好呀!这里是魔王~ 一天晚上,天空中掉下一颗神奇的豌豆种子,正好落在了梦之森林的村长屋附近. 种子落地后吸收了池塘的水

  • 基于Python编写一个中秋节嫦娥投食小游戏

    目录 游戏设计 1.游戏背景 2.功能设计 效果展示 代码素材 代码 素材 山河远阔,烟火人间,又一年,千里婵娟~ 今天给大家带来的是给玉兔投喂月饼的小游戏.八月十五中秋夜晚,让我们对着月亮许愿:希望我们在意和在意我们的人,诸邪避退.百事无忌.平安喜乐.万事胜意.提前祝大家中秋节快乐. 中秋节的起源 中秋节起源于上古时代,普及于汉代,定型于唐朝初年,盛行于宋朝以后.中秋节是秋季时令习俗的综合,其所包含的节俗因素,大都有古老的渊源.中秋节以月之圆兆人之团圆,为寄托思念故乡,思念亲人之情,祈盼丰收.

  • 基于Python实现简易的植物识别小系统

    导语 "  花草树木 皆有呈名 热爱自然,从认识自然开始 " 现在的植物爱好者,遇到不认得的植物.怎么办呢? 前几天去逛商场,一进商城一一一一门口的花店吸引了我的注意:摆放在店门口的各色鲜花植物花卉真的特别好看! 忍不住进门逛了一圈,发现我真的不认识,种类太多,对花卉的品种了解颇少. 回来之后找到了2款简单好用的植物识别APP一一一伴侣跟形色蛮好用的! 闲着也是闲着:默默用Python编写了一款简单的植物识别系统给大家正好la~ 正文 1)环境安装 本文用到的环境:Python3.7 

  • 基于Python制作B站视频下载小工具

    目录 1. 原理简介 2. 网页分析 3. 视频爬取 4. 存入本地 5. GUI工具制作 1. 原理简介 原理很简单,就是获取视频资源的源地址,然后爬取视频的二进制内容,再写入到本地即可. 2. 网页分析 打开该网页,然后F12进入开发者模式,接着点开网络—>全部,因为视频资源一般比较大,我这里根据大小进行了从大到小的排序,找到了第一条这些可能和视频源地址有关. 然后,我们复制找到的这条里的url部分不变的部分,回到元素中ctrl+F搜索,找到了可能和视频源地址有关的节点. 果然,我们复制这部

  • python中的pygame实现接球小游戏

    目录 一.介绍模块 1.Pygame和sys模块 2.random模块 二.相关功能 1.窗口尺寸改变 2.键盘控制挡板 3.鼠标控制 4.挡板接住小球并得分 5.小球未接住小球 6.小球移动 7.显示分数 三.完整代码 一.介绍模块 最小开发框架: 基于python 的Pygame最小开发框架 1.Pygame和sys模块 import pygame #制作游戏时要使用的模块 import sys #python的标准库,对内部各功能模块进行初始化创建,系统模块 2.random模块 需要在屏

  • 教你使用一行Python代码玩遍童年的小游戏

    写在前面 贪吃蛇,吃豆人,迷宫,井字游戏......这些小游戏我相信大家小的时候肯定玩过,或许在某个时段还沉迷过. 随着年龄的增长,这些小游戏离我们越来越远,但是我相信大家的童心还是一直在的 今天就分享一个真正可以玩耍的GitHub项目 --- free-python-games 安装与使用 python大家都懂的,安装第三方库非常简单 pip install freegames Python 由于该项目中的所有游戏均是基于Python内置模块Turtle制作,所以没有太多依赖,安装不会有困难

  • Python Pygame实战之打砖块小游戏

    目录 导语 一.准备中 1)游戏规则: 2)环境安装 二.开始敲代码 1)配置文件 2)定义一些类 3)定义开始.结束界面 4)定义游戏 5)主函数与运行界面 三.效果展示 导语 嘿!前不久刚刚给大家过一款反弹球的小游戏嘛! 不知道大家还记得不?不记得可以看下往期的内容呢,在上一期的基础上升级了这款打砖块的小游戏,界面的话也挺简单的,经典配色原汁原味哈哈哈. 大家好,我是木木子,一个上的编程下的厅堂的女码农!今天带大家编写一款经典的打砖块儿小游戏! 小科普: 打砖块最早是由雅达利公司开发的一款独

  • 基于Python编写简易的成语接龙游戏

    目录 前言 1.游戏规则 2.正式敲代码 2.1模块导入 2.2读取txt数据 2.3界面设置 2.4电脑接龙 2.5重新开始新游戏 2.6成语是否合法 2.7读取成语的数据 2.8附完整的项目源码 3.效果展示 前言 "胸藏文墨怀如谷,腹有诗书气自华".      ——<和董传留别> 成语接龙是中华民族传统的文字游戏. 它历史悠久,是传统文字.文化.文明的一个缩影,也是老少皆宜的民间文化娱乐活动. 成语接龙:"龙腾虎跃,该你了!"          

随机推荐