PyGame实现小游戏案例[小甲鱼 PlayTheBall]

  • 游戏截图及玩法
  • 代码及图片音频资源

游戏截图及玩法

在下方缓慢拖动鼠标,球变灰色之后用键盘WASD控制上下左右.将灰球移动到灰洞上按下空格锁定.全部5个都进洞游戏胜利.

代码及图片音频资源

背景图
其他图




音频不能导入,留言邮箱我会私发

# -*- coding: utf-8 -*-
"""
Created on Sun Jan  5 15:36:12 2020@author: WSX
"""import pygame
from pygame.locals import *
import sys
from random import *#球类
class Ball(pygame.sprite.Sprite):def __init__(self, green_ball_image, gray_ball_image, position, speed, bg_size, target):pygame.sprite.Sprite.__init__(self)self.green_ball_image = pygame.image.load(green_ball_image).convert_alpha()self.gray_ball_image = pygame.image.load(gray_ball_image).convert_alpha()self.rect = self.green_ball_image.get_rect()self.rect.left, self.rect.top = positionself.speed = speedself.side = [1 if self.speed[0] >= 0 else -1, 1 if self.speed[1] >= 0 else -1]self.width, self.height = bg_size[0], bg_size[1]self.radius = self.rect.width / 2 + 5;self.target = targetself.control = Falsedef move(self):self.rect = self.rect.move(self.speed)if self.rect.left >= self.width:self.rect.right = 0elif self.rect.right <= 0:self.rect.left = self.widthif self.rect.top >= self.height:self.rect.bottom = 0elif self.rect.bottom <= 0:self.rect.top = self.heightdef check(self, motion):if self.target - 5 < motion < self.target + 5:return Trueelse:return False#玻璃面板类
class Glass(pygame.sprite.Sprite):def __init__(self, glass_image, mouse_image, bg_size):pygame.sprite.Sprite.__init__(self)self.glass_image = pygame.image.load(glass_image).convert_alpha()self.glass_rect = self.glass_image.get_rect()self.glass_rect.left, self.glass_rect.top = (bg_size[0] - self.glass_rect.width) // 2,\bg_size[1] - self.glass_rect.heightself.mouse_image = pygame.image.load(mouse_image).convert_alpha()self.mouse_rect = self.mouse_image.get_rect()self.mouse_rect.left, self.mouse_rect.top = self.glass_rect.left, self.glass_rect.toppygame.mouse.set_visible(False)
def main():pygame.init()#添加图片green_ball_image = 'green_ball.png'gray_ball_image = 'gray_ball.png'bg_image = 'bg.png'glass_image = 'glass.png'mouse_image = 'hand.png'useless_image = 'useless.png'#添加音乐pygame.mixer.music.load('gaming2.ogg')pygame.mixer.music.set_volume(0.2)pygame.mixer.music.play()#添加音效hole_sound = pygame.mixer.Sound('hole.ogg')hole_sound.set_volume(0.1)win_sound = pygame.mixer.Sound('win.ogg')win_sound.set_volume(0.1)fail_sound = pygame.mixer.Sound('fail.ogg')fail_sound.set_volume(0.1)laugh_sound = pygame.mixer.Sound('laugh.ogg')laugh_sound.set_volume(0.1)#音乐播放完,游戏结束GAMEOVER = USEREVENTpygame.mixer.music.set_endevent(GAMEOVER)#发送到消息队列中#指定窗口标题,背景,宽高,键盘重复响应速度bg_size = width, height = 1024, 511screen = pygame.display.set_mode(bg_size)background = pygame.image.load(bg_image).convert_alpha()pygame.display.set_caption('PLAY THE BALL!')pygame.key.set_repeat(100, 100)#第一个参数代表第一次发送事件的延迟,第二个参数指定重复发送事件的时间间隔,无参数表示取消重复发送#存放小球的列表balls = []group =pygame.sprite.Group()#使用spritecollide方法,需要使用sprite.Group()#spritecollide(sprite, group, dokill, collide = None),第三个参数是是否从组中删除,第四个是碰撞检测方法#洞holes = [(154,158,221,225),(367,371,92,96),(467,471,334,338),\(770,774,343,347),(831,835,143,147)]#消息队列msgs = []#实例化小球,并加入碰撞检测for i in range(5):position = randint(0, width-50), randint(0, height-50)speed = [randint(-5, 5), randint(-5, 5)]ball = Ball(green_ball_image, gray_ball_image, position, speed, bg_size, 6 * (i+1))while pygame.sprite.spritecollide(ball, group, False, pygame.sprite.collide_circle):ball.rect.left, ball.rect.top = randint(0, width-50), randint(0, height-50)balls.append(ball)group.add(ball)#实例化玻璃glass = Glass(glass_image, mouse_image, bg_size)motion = 0MYTIMER = USEREVENT + 1pygame.time.set_timer(MYTIMER, 1 * 1000)#运行起来clock = pygame.time.Clock()running = Truewhile running:for event in pygame.event.get():if event.type == QUIT:pygame.quit()sys.exit()elif event.type == GAMEOVER:fail_sound.play()pygame.time.delay(2000)laugh_sound.play()running = Falseelif event.type == MYTIMER:if motion:print(motion)for each in group:if each.check(motion):each.speed = [0, 0]each.control = Truemotion = 0elif event.type == MOUSEMOTION:motion += 1elif event.type == KEYDOWN:if event.key == K_w:for each in group:if each.control:each.speed[1] -= 1if event.key == K_s:for each in group:if each.control:each.speed[1] += 1if event.key == K_a:for each in group:if each.control:each.speed[0] -= 1if event.key == K_d:for each in group:if each.control:each.speed[0] += 1if event.key == K_SPACE:for each in group:if each.control:for i in holes:if i[0] <= each.rect.centerx <= i[1] and i[2] <= each.rect.centery <= i[3]:hole_sound.play()each.speed = [0, 0]group.remove(each)temp = balls.pop(balls.index(each))balls.insert(0, temp)holes.remove(i)if not holes:pygame.mixer.music.stop()win_sound.play()msg = pygame.image.load(useless_image).convert_alpha()msg_pos = (width - msg.get_width()) // 2, (height - msg.get_height()) // 2msgs.append((msg, msg_pos))laugh_sound.play()#绘制背景screen.blit(background, (0, 0))#绘制玻璃,指针glass.mouse_rect.left, glass.mouse_rect.top = pygame.mouse.get_pos()if glass.mouse_rect.left < glass.glass_rect.left:glass.mouse_rect.left = glass.glass_rect.leftif glass.mouse_rect.right > glass.glass_rect.right:glass.mouse_rect.right = glass.glass_rect.rightif glass.mouse_rect.top < glass.glass_rect.top:glass.mouse_rect.top = glass.glass_rect.topif glass.mouse_rect.bottom > glass.glass_rect.bottom:glass.mouse_rect.bottom = glass.glass_rect.bottomscreen.blit(glass.glass_image, glass.glass_rect)screen.blit(glass.mouse_image, glass.mouse_rect)#绘制小球for each in balls: each.move()if each.control == True:screen.blit(each.gray_ball_image, each.rect)else:screen.blit(each.green_ball_image, each.rect)#碰撞检测   for each in group:group.remove(each) if pygame.sprite.spritecollide(each, group, False, pygame.sprite.collide_circle):each.side = [1 if each.speed[0] >= 0 else -1, 1 if each.speed[1] >= 0 else -1]each.speed = [randint(1, 5)*(-each.side[0]), randint(1, 5)*(-each.side[1])]each.control = Falsegroup.add(each)#打印消息for msg in msgs:screen.blit(msg[0], msg[1])#图像显示到屏幕上pygame.display.flip()clock.tick(30)         pygame.quit()sys.exit()
if __name__ == '__main__':main()

PyGame实现小游戏案例[小甲鱼 PlayTheBall]相关推荐

  1. 初识JAVA:猜数字小游戏案例---系统产生一个1-100之间的随机数,猜出这个数是多少?

    package com.pku.wuyu.io; import java.util.IllegalFormatCodePointException; import java.util.Random; ...

  2. 视频教程-Layabox3D游戏开发入门-微信3D小游戏案例 -微信开发

    Layabox3D游戏开发入门-微信3D小游戏案例 有多年Unity程序开发经验,有策划和美术设计的经验.愿意在csdn这个平台和大家一起分享! 金龙 ¥29.00 立即订阅 扫码下载「CSDN程序员 ...

  3. 学习飞刀小游戏案例(cocos creator)

    学习飞刀小游戏案例(cocos creator) 首先,我们先进行布局,搭建好靶点与小刀节点,小刀位置(0,-300),靶点位置(0,300),小刀生成预制体,一会需要用到. [截图] 1.在onLo ...

  4. 安卓小游戏:小板弹球

    安卓小游戏:小板弹球 前言 这个是通过自定义View实现小游戏的第三篇,是小时候玩的那种五块钱的游戏机上的,和俄罗斯方块很像,小时候觉得很有意思,就模仿了一下. 需求 这里的逻辑就是板能把球弹起来,球 ...

  5. 小程序源码:修复图片音频全新升级带特效喝酒神器小游戏微信小程序

    这是一款全新升级带特效喝酒神器小游戏微信小程序源码 小编发现很多喝酒神器小程序都不带特效和音效的 感觉差了那么一点意思而且感觉也不炫酷 所以小编今天给大家带来一款带特效,音效炫酷的喝酒神器 该款神器由 ...

  6. 微信小游戏和小程序的区别

    微信小游戏在小程序的基础上提供了WebGL接口的封装,使渲染能力和性能有大幅度提升. 和H5游戏相比 小游戏 = H5游戏 + (微信社交能力.文件系统.工具链) - (DOM.BOM.CSS.EVA ...

  7. java小游戏-java小游戏-大鱼吃小鱼

    java小游戏-java小游戏-大鱼吃小鱼 1 创建窗口 2 添加背景图 3 启动封面 4 启动页面的点击事件 5 游戏开始时的背景添加 6 双缓存解决闪屏问题 7 地方第一条小鱼的添加 8 敌方左方 ...

  8. 幼儿园小游戏:小兔种萝卜

    幼儿园小游戏:小兔种萝卜 玩法描述: 老师讲述游戏规则. 小朋友们都到老师的身边来,今天我们玩一个小兔种萝卜的游戏.老师当兔妈妈,小朋友们都是兔宝宝.春天来了,兔妈妈想在远处的天地里种一些萝卜.要想中 ...

  9. 酒桌小游戏喝酒小程序

    文章目录 前言 一.酒桌小游戏喝酒小程序 1.广告ID配置 二.程序演示与下载 1.程序演示 2.程序下载 前言 经常有饭局的朋友们,为了让酒桌上的氛围更加热烈,常常都离不开酒桌小游戏的助兴,主要是增 ...

  10. 最新酒桌小游戏喝酒小程序源码/带流量主

    2022最新酒桌小游戏喝酒小程序源码,带流量主:喝酒神器3.6,我修改增加了广告位,根据文档直接替换即可,原版本没有广告位 直接上传源码到开发者端即可,通过后改广告代码,然后关闭广告展示提交,通过后打 ...

最新文章

  1. Jedis操作Redis数据库
  2. 15个最佳的代码评审(Code Review)工具
  3. 遍历 HashMap 的 5 种最佳方式,我不信你全知道!
  4. python中elif老是出错_python为什么会存在if执行了依然会执行elif的情况?
  5. Android 点击图片进行浏览
  6. lombok几个基本注解的使用及遇到的坑点
  7. ASP.NET MVC HandleError异常过滤器过滤器用法
  8. 搜索引擎优化学习原理_如何使用数据科学原理来改善您的搜索引擎优化工作
  9. Android入门(15)| 网络
  10. spring5高级编程_Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新
  11. python会内存泄漏吗_Python内存泄漏和内存溢出的解决方法
  12. myeclipse 中解决Hibernate 和Struts 2的冲突
  13. Python入门-散点图绘制
  14. 面向车、路、城,华人运通“智路”示范项目开通试运行
  15. 小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_18、SpringBoot测试进阶高级篇之MockMvc讲解...
  16. 3.3Packet Tracer - 实施基本连接
  17. 关于killer网卡与win10 擦出火花 内存爆炸的原因
  18. 如何下载并安装mysql_超详细的MySQL下载与安装教程
  19. 1044 火星数字(C语言)
  20. 如何实现百度mapv开源库与ol3的结合

热门文章

  1. 小程序tabBar不显示?
  2. 企业微信 Android端开发
  3. 【数据结构课设】家谱管理系统(内附源码)
  4. matlab插值:拉格朗日插值
  5. 理论力学知识要点(五)
  6. 解读住房公积金提取买房、租房、贷款新政
  7. 为什么大龄程序员不能去创业?网友:看完这四个原因你就懂了
  8. png格式的图片怎么变成jpg格式?png图片怎么转格式?
  9. 链表初始化typedef struct LNode{}LNode,*linklist的理解
  10. android webview file,Android WebView实现文件下载功能