Pygame实战练习之保护单身狗游戏
作者:顾木子吖 发布时间:2022-07-04 03:30:28
标签:Pygame,保护单身狗游戏,Python
导语
各位戏精大家好!我是木木子,这个中秋已经结束了,你们都带着对象回家了码?
中秋那几天朋友圈简直是大型秀恩爱现场。
又是一年中秋夜,依旧凭实力单身!呼吁大家记得保护下单身狗啊喂!
作为一条人畜无害可可爱爱的单身狗
每年的假期几乎都被伤的体无完肤,今年我们不仅要好好生存,还要勇敢报复,让情侣们知道:
单身狗不是这么好欺负的~单身狗们报仇吧!今天带大家写一款贼有趣的单身狗小游戏~
首先准备好图片素材等:
bgm音乐必备:
import pygame
class Sound():
def __init__(self):
pygame.mixer.music.load('../sound/baab.mp3')
pygame.mixer.music.play()
先上效果图嘿嘿嘿 看好哈:
游戏界面——
程序运行——
(1)设置滚动的背景:
#地图滚动
import pygame
import random
class GameBackground(object):
# 初始化地图
def __init__(self, scene):
# 加载相同张图片资源,做交替实现地图滚动
self.image1 = pygame.image.load("../image/background.png")
self.image2 = pygame.image.load("../image/background.png")
# 保存场景对象
self.main_scene = scene
# 辅助移动地图
self.x1 = 0
self.x2 = 1280
self.snowflag=False
# 计算地图图片绘制坐标
def action(self):
self.x1 = self.x1 - 1
self.x2 = self.x2 - 1
if self.x1 <= -1279:
self.x1 = 1279
if self.x2 <= -1279:
self.x2 = 1279
# 绘制地图的两张图片
def draw(self):
self.main_scene.blit(self.image1, (self.x1,0))
self.main_scene.blit(self.image2, (self.x2,0))
class Snow():
# 雪花的竖直速度
def __init__(self):
self.x = 0 # 雪花的横坐标
self.y = 0 # 雪花的纵坐标
self.vx = 0 # 雪花的水平速度
self.vy = 0
self.x = random.randint(0,1280) # 初始化雪花横坐标
self.y = random.randint(0,390) #初始化雪花纵坐标
def getsnowpos(self):
return self.x,self.y # 返回雪花坐标位置
(2)单身狗不能碰到情侣检测碰撞:
import pygame
class Collide():
def __init__(self):
self.gamestatus=True
self.snowflag=False
self.dogflag=0
self.score=0
self.scoreup=200
self.gameover=False
self.count=0
def dogs_cpdogs(self,dogs,cpdogs):
boooooooooooooooool=pygame.sprite.groupcollide(dogs,cpdogs,False,True)
if boooooooooooooooool:
self.score += self.scoreup
print(self.score)
def dog_cpdog(self,dog,cpdog2s):
booooooool=pygame.sprite.spritecollide(dog,cpdog2s,True)
if booooooool:
self.snowflag = True
self.count += 1
if self.count>=3:
self.gameover=True
(3)主函数:
import pygame
import sys,os
import random
from background import GameBackground,Snow
from dog import MySprite
from cpdog import Monster,MySprite2
from pygame.sprite import Group
from collidedetection import Collide
from sound import Sound
from score import Fontf
from crydog import MySpritec
pygame.init()
screen=pygame.display.set_mode((1280,390))
fpsset=pygame.time.Clock()
bgcolor=(255,240,30)
background=GameBackground(screen)
dog=MySprite()
dog.load("../image/dog.png", 82, 62, 3)
dog.X = 0
dog.Y = 285
dogs = pygame.sprite.Group()
dogs.add(dog)
cpdogs=Group()
lasttimecreat=0
collidetest=Collide()
sound=Sound()
cpdog2s = pygame.sprite.Group()
snowlist = []
for i in range(0, 50): # 建立50个雪花
snow=Snow()
snowlist.append(snow)
scor=Fontf(screen)
onoff = True
crydog=None
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
# player ctrl
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_RIGHT:
dog.movieRight=True
if event.key == pygame.K_LEFT:
dog.movieLeft=True
if event.key==pygame.K_SPACE:
if not dog.jumping:
dog.jumping=True
dog.vUP = -14
if event.type == pygame.KEYUP:
if event.key == pygame.K_RIGHT:
dog.movieRight=False
if event.key==pygame.K_LEFT:
dog.movieLeft=False
if event.type==pygame.MOUSEBUTTONDOWN:
mousex,mousey=pygame.mouse.get_pos()
if mousex>=540 and mousex<=540 + scor.text_width:
if mousey>=180 and mousey<=180 + scor.text_height:
onoff = False
if dog.jumping:
if dog.vUP < 0:
dog.vUP += 0.6
elif dog.vUP >= 0:
dog.vUP += 0.8
dog.Y += dog.vUP
if dog.Y >= 290:
dog.jumping = False
dog.Y = 290
dog.vUP = 0.0
if not collidetest.gameover:
if onoff:
scor.beginpage()
print(onoff)
else:
print(onoff)
#碰撞检测
collidetest.dogs_cpdogs(dogs,cpdogs)
collidetest.dog_cpdog(dog,cpdog2s)
#背景
background.action()
background.draw()
#分数
# scor.beginpage()
collidetest.score+=1
scor.displayScore(collidetest.score)
#时间控制
ticks = pygame.time.get_ticks()
#player绘制
dogs.update(ticks)
dogs.draw(screen)
cpdog2s.update(ticks)
cpdog2s.draw(screen)
if ticks >lasttimecreat + random.randint(1000,20000):
#生成障碍物
cp = Monster(screen)
cpdogs.add(cp)
cpdog2 = MySprite2()
cpdog2.load("../image/cpdogs.png", 113, 62, 3)
cpdog2.X = 1280
cpdog2.Y = 285
cpdog2s.add(cpdog2)
lasttimecreat=ticks
for m in cpdogs:
m.draw_monster()
if m.rect.x <=640:
del m
cpdogs.update()
#snow
if collidetest.snowflag:
for snow in snowlist:
# 每个雪花位置的变换
# if random.randint(0,1):
snow.vx = random.randint(-3,3) # 雪花的横向速度
snow.vy = 1 # 雪花的竖直速度
snow.x += snow.vx # 雪花的横轴移动位置
snow.y += snow.vy # 雪花的纵轴移动位置
if snow.y > 500:
snow.y = 0
pygame.draw.circle(screen,[255,255,255],snow.getsnowpos(),1)
else:
if collidetest.snowflag:
background.action()
background.draw()
for snow in snowlist:
snow.vx = random.randint(-3, 3)
snow.vy = 1
snow.x += snow.vx
snow.y += snow.vy
if snow.y > 500:
snow.y = 0
pygame.draw.circle(screen, [255, 255, 255], snow.getsnowpos(), 1)
if not crydog:
crydog=MySpritec()
crydog.load("../image/crydog.png", 82, 62,3)
crydog.X = 100
crydog.Y = 285
crydogs=Group()
crydogs.add(crydog)
ticks = pygame.time.get_ticks()
# player绘制
crydogs.update(ticks)
crydogs.draw(screen)
scor.gameoverrrrrrrrr()
if crydog.X>1280:
sys.exit()
fpsset.tick(60)
pygame.display.update()
效果图:游戏规则躲避情侣狗,一直奔跑加分!
总结
好啦!单身狗大战即将开始,come on。
哈哈哈哈 这游戏蛮有趣的撒!你们的支持是我最大的动力,记得三连哦~木啊!
来源:https://blog.csdn.net/weixin_55822277/article/details/120413467
0
投稿
猜你喜欢
- 使用Django框架搭建后端服务器,后台接收前端传递过来xlsx的文件,直接将前端传递的文件转化为DataFrame或直接将文件保存。url
- 概述在进行TCP Socket开发时,都需要处理数据包粘包和分包的情况。本文详细讲解解决该问题的步骤。使用的语言是Python。实际上解决该
- 没有使用动态语句直接报错 错误的 代码如下:alter proc testpapers as begin declare @tems nva
- 1.data参数data是可选的,需要使用bytes()方法将参数转化为字节编码格式的内容。如果传递了这个参数,请求方式就不是GET方式,而
- 前言在安装完python及pip,setuptools等工具后,即可以创建virualenv虚拟环境了,这个类似于虚拟机的工具,可以让同一台
- 1、Python 有两种类型可以表示字符序列bytes:实例包含的是 原始数据 ,即 8 位的无符号值(通常按照 ASCII 编码 标准来显
- 本文实例讲述了Python中Django框架利用url来控制登录的方法。分享给大家供大家参考。具体如下:from django.conf.u
- 本文实例讲述了JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果。分享给大家供大家参考,具体如下:思路:1、首先用把密码框用txt暂
- 利用 vue+canvas 实现拼图小游戏,供大家参考,具体内容如下思路步骤一个拼图拼盘和一个原图参照对原图的切割以及随机排序通过W/A/D
- 今天发现 WordPress 连接不上数据库,登录 window server 服务器查看,所有服务均运行正常。使用 root 账号登录 m
- 训练用PyTorch编写的LSTM或RNN时,在loss.backward()上报错:RuntimeError: Trying to bac
- 最近各地中小学都在开展线上教学,有些不自觉的小朋友们用电脑在线学习的时候会趁家长不在的时候偷偷玩游戏、看漫画。本程序screenshot.p
- 要调用RPC接口,python提供了一个框架grpc,这是google开源的rpc相关文档:https://grpc.io/docs/tut
- 01 InnoDB ReplicaSet(副本集)介绍 在MySQL8.0引入了InnoD
- 本文实例讲述了jsp中select的onchange事件用法。分享给大家供大家参考,具体如下:<script language = &
- 一、模型方法 本工程采用的模型方法为朴素贝叶斯分类算法,它的核心算法思想基于概率论。我们
- 本文实例讲述了php设计模式之适配器模式。分享给大家供大家参考,具体如下:星际的很多兵种,都有至少一项特殊技能。而且有些兵种的技能是相同的,
- 今天在写一个研究生创新项目申报书时涉及到一个python画图问题,对于在x轴各个区段显示自定义的字符串有些疑问,特此记录。界面如下所示:代码
- 目录关于Web服务器和应用服务器Python项目部署架构关于cgi、wsgi、uwsgi、http协议关于cgi、fastcgi、php-f
- 目录前言环境依赖代码前言本文主要分享一个可以将图片或者视频模糊化的工具代码。技术路线主要是使用ffmpeg滤镜。环境依赖ffmpeg环境部署