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
投稿
猜你喜欢
- 需要安装pywin32模块,pip install pywin32##pip install pywin32import win32api,
- 区别IE6与FF:background:orange;*background:blue;区别IE6与IE7:background:green
- tensorflow对图像进行多个块的行列拼接tf.concat(), tf.stack()在深度学习过程中,通过卷积得到的图像块大小是8×
- 一、QQ邮箱SSL发送获取qq授权码ssl发送方式不是使用邮箱密码,而是需要授权码,具体步骤如下:登录发送人qq邮箱>>设置&g
- 用在产品内容展示的页面上,给产品图片加上提示工具条,鼠标移动图片上即可看到效果,效果还是不错的:带黑白效果和放大图片效果(by misshj
- 一种小技巧,可以让python捕获信号量HUP 然后当使用 kill 发起HUP信号量的时候 捕获到进行处理,可以处理为重新读取配置文件并重
- 前言python类与实例的方法的调用中觉得云里雾里,思考之后将自己的想法记录下,一来加深自己理解,巩固自己记忆,而来帮助一些想要学习pyth
- 在Web标准中一个很重要的概念就是强调页面的结构与表现分离。说的通俗一点就是XHTML中应该没有样式化的东西,而且Web在浏览器中除内容外都
- 破解滑块验证码的思路主要有2种:获得一张完整的背景图和一张有缺口的图片,两张图片进行像素上的一一对比,找出不一样的坐标。获得一张有缺口的图片
- 目录一、for在 Python 中使用循环进行迭代二、使用 Python 的 enumerate()三、用 Python 练习 enumer
- 这篇文章主要介绍了Python实现序列化及csv文件读取,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- Python过滤txt文件内重复内容,并将过滤后的内容保存到新的txt中示例如下 原文件处理之后的文件 直接上代码# -*-coding:u
- 希尔排序希尔排序是一个叫希尔的数学家提出的一种优化版本的插入排序。首先取一个整数d1=n//2,将元素分为d1个组,每组相邻元素之间的距离为
- 在这个自动化时代,我们有很多重复无聊的工作要做。 想想这些你不再需要一次又一次地做的无聊的事情,让它自动化,让你的生活更轻松。 那么在本文中
- 数据的安全性策略: 数据的生考虑应基于数据的重要性。如果数据不是很重要,那么数据的安全性策略可以稍稍放松一些。然而,如果数据很重要,那么应该
- 我们都知道在9i之前,要想获得建表和索引的语句是一件很麻烦的事。我们通常的做法都是通过export with rows=no来得到,但它的输
- 编写思路:把本地文件在客户端通过base64编码以后发送目的地.测试过程中,上传文件过大,导致超时不成功,后来经过改善.把编码分
- 本文实例讲述了PHP+redis实现添加处理投票的方法。分享给大家供大家参考,具体如下:<?php header("Cont
- 1. 利用resnet18做迁移学习import torchfrom torchvision import models if __name
- 在部署一套内网测试环境时,频繁宕机,开机后不断的吃内存,重启apache之后内存占用会不停的上涨,直到swap用完,直到死机,由于是内网环境