python-pygame作品之“人间”大炮和海浪
大家好,我是涵子码农。今天我会为大家带来两个pygame小程序。希望大家可以多多点赞,关注。
我们废话不多说,进入正题!
目录
一、“人间”大炮
1.1.提前准备
1.2.开始编写
1.3.知识分解
1.3.1.认识math.sin和math.cos
1.3.2.认识pygame.mixer和pygame.transform
1.3.3.开关思维
1.3.4.part
1.4.完整代码
二、海浪
2.1.提前准备
2.2.开始编写
2.3.完整代码
三、总结
小提示
没有pygame模块的朋友们要到cmd里面pip一下,程序如下:
pip install pygame
一、“人间”大炮
1.1.提前准备
导入pygame模块和math模块
# import pygame and math
import pygame as pg
import math# init program
pg.init()
pg.mixer.init()screen = pg.display.set_mode((900, 800))
pg.display.set_caption("Code5-2-1_pygame_CannonBomb", "2.0")
1.2.开始编写
这里我们先看一下代码:
def playSound():# play soundpg.mixer.music.load(r"素材\boom.wav")pg.mixer.music.set_volume(0.5)pg.mixer.music.play()# class bomb
class Bomb():def __init__(self):self.color = (0, 0, 0)self.dot = [200, 500]self.r = 10self.speedx = 0 # two speedself.speedy = 0# creat variables
# switch thinking
fps = pg.time.Clock()
power = 0
statueflag = 1
cannonflag = 1
bakage = 1
direction = 0
dirflag = 1
partflag = 1 # what part is now
# check quit and fps
while True:fps.tick(60)event = pg.event.poll()if event.type == pg.QUIT:pg.quit()exit()screen.fill((255, 255, 255))pg.draw.line(screen, (0, 255, 0), (0, 580), (900, 580), 10)# partflag changeif partflag == 1:# make power to up and down# don't worry += -1# it just means -= 1power += statueflag# load image# check statueflag and bakageif power == 0:statueflag = 1 # statue changeif power == 100:statueflag = -1 # statue changeif pg.mouse.get_pressed()[0] and partflag == 1:bakage = statueflagstatueflag = 0 # statue changepartflag = 2# loop to waitwhile pg.mouse.get_pressed()[0]:# must check quitevent = pg.event.poll()if event.type == pg.QUIT:pg.quit()exit()if pg.mouse.get_pressed()[2] and statueflag == 1 and partflag == 1:statueflag = bakage # statue changeif pg.mouse.get_pressed()[1] and statueflag == 0:power = 0 # power change# drawy = (1- power / 100) * 400 + 100pg.draw.line(screen, (0, 0, 0), (60, 100), (60, 500), 50)pg.draw.line(screen, (255, 0, 0), (60, y), (60, 500), 50)# directionif partflag == 2:direction += dirflagif direction < 0:dirflag = 1if direction > 90:dirflag = -1if pg.mouse.get_pressed()[0] == 1:dirflag = 0partflag = 3# loop to waitwhile pg.mouse.get_pressed()[0]:# must check quitevent = pg.event.poll()if event.type == pg.QUIT:pg.quit()exit()# load imagecannon = pg.image.load(r"素材\cannon.png")cannon = pg.transform.scale(cannon,(100, 100))cannon = pg.transform.rotate(cannon, direction)screen.blit(cannon, (50, 500))# part 3if partflag == 3:if pg.mouse.get_pressed()[0]:# cos and sin!# triangle!# ready firebomb = Bomb()bomb.speedx = power*math.cos(2 * math.pi/(360/direction))bomb.speedy = power*math.sin(2 * math.pi/(360/direction))*(-1)pg.draw.circle(screen, bomb.color, bomb.dot, bomb.r, 0)partflag = 4while pg.mouse.get_pressed()[0]:# must check quitevent = pg.event.poll()if event.type == pg.QUIT:pg.quit()exit()if partflag == 4:# fire!bomb.dot[0] += int(bomb.speedx) / 4bomb.dot[1] += int(bomb.speedy) / 4bomb.speedy += 0.09pg.draw.circle(screen, bomb.color, bomb.dot, bomb.r, 0)# if hits the ground...if bomb.dot[1] >= 580:partflag = 5continueif partflag == 5:# bomb!playSound()boom = pg.image.load(r"素材\boom.png")boom = pg.transform.scale(boom,(200, 200))screen.blit(boom, (int(bomb.dot[0]), int(bomb.dot[1] - 75)))partflag = 6if partflag == 6:# stoppass# display programpg.display.update()
这里用到了很多个知识,我来讲一下几个知识。
1.3.知识分解
1.3.1.认识math.sin和math.cos
这就是sin函数。这个涉及到初中知识。由于我还是个四年级的小学生(这才知道啊~),所以我只会放一张图片和百度的讲解。大家看不懂或者已经知道了的可以略过此段。(蓝字为链接,可以打开百度百科讲解)
三角函数是数学中属于初等函数中的超越函数的一类函数。它们的本质是任意角的集合与一个比值的集合的变量之间的映射。通常的三角函数是在平面直角坐标系中定义的,其定义域为整个实数域。另一种定义是在直角三角形中,但并不完全。现代数学把它们描述成无穷数列的极限和微分方程的解,将其定义扩展到复数系。
由于三角函数的周期性,它并不具有单值函数意义上的反函数。
三角函数在复数中有较为重要的应用。在物理学中,三角函数也是常用的工具。
在RT△ABC中,如果锐角A确定,那么角A的对边与邻边的比便随之确定,这个比叫做角A 的正切,记作tanA
即tanA=角A 的对边/角A的邻边
同样,在RT△ABC中,如果锐角A确定,那么角A的对边与斜边的比便随之确定,这个比叫做角A的正弦,记作sinA
即sinA=角A的对边/角A的斜边
同样,在RT△ABC中,如果锐角A确定,那么角A的邻边与斜边的比便随之确定,这个比叫做角A的余弦,记作cosA
即cosA=角A的邻边/角A的斜边
1.3.2.认识pygame.mixer和pygame.transform
pygame中的mixer库可以放出音乐
pygame中的transform库可以把图片进行很多处理
更多知识到后面会进行更加细致的学习~
1.3.3.开关思维
开关思维,就是一种思维上的开关。
开关控制着程序的运行,进度条的上下运动,大炮的发射,都由开关控制。
1.3.4.part
part把程序分为几个部分
就好比如:part1:进度条运动
if partflag == 1:# make power to up and down# don't worry += -1# it just means -= 1power += statueflag# load image# check statueflag and bakageif power == 0:statueflag = 1 # statue changeif power == 100:statueflag = -1 # statue changeif pg.mouse.get_pressed()[0] and partflag == 1:bakage = statueflagstatueflag = 0 # statue changepartflag = 2# loop to waitwhile pg.mouse.get_pressed()[0]:# must check quitevent = pg.event.poll()if event.type == pg.QUIT:pg.quit()exit()if pg.mouse.get_pressed()[2] and statueflag == 1 and partflag == 1:statueflag = bakage # statue changeif pg.mouse.get_pressed()[1] and statueflag == 0:power = 0 # power change
part2:大炮转向
if partflag == 2:direction += dirflagif direction < 0:dirflag = 1if direction > 90:dirflag = -1if pg.mouse.get_pressed()[0] == 1:dirflag = 0partflag = 3# loop to waitwhile pg.mouse.get_pressed()[0]:# must check quitevent = pg.event.poll()if event.type == pg.QUIT:pg.quit()exit()
......
1.4.完整代码
# import pygame and math
import pygame as pg
import math# init program
pg.init()
pg.mixer.init()screen = pg.display.set_mode((900, 800))
pg.display.set_caption("Code5-2-1_pygame_CannonBomb", "2.0")def playSound():# play soundpg.mixer.music.load(r"素材\boom.wav")pg.mixer.music.set_volume(0.5)pg.mixer.music.play()# class bomb
class Bomb():def __init__(self):self.color = (0, 0, 0)self.dot = [200, 500]self.r = 10self.speedx = 0 # two speedself.speedy = 0# creat variables
# switch thinking
fps = pg.time.Clock()
power = 0
statueflag = 1
cannonflag = 1
bakage = 1
direction = 0
dirflag = 1
partflag = 1 # what part is now
# check quit and fps
while True:fps.tick(60)event = pg.event.poll()if event.type == pg.QUIT:pg.quit()exit()screen.fill((255, 255, 255))pg.draw.line(screen, (0, 255, 0), (0, 580), (900, 580), 10)# partflag changeif partflag == 1:# make power to up and down# don't worry += -1# it just means -= 1power += statueflag# load image# check statueflag and bakageif power == 0:statueflag = 1 # statue changeif power == 100:statueflag = -1 # statue changeif pg.mouse.get_pressed()[0] and partflag == 1:bakage = statueflagstatueflag = 0 # statue changepartflag = 2# loop to waitwhile pg.mouse.get_pressed()[0]:# must check quitevent = pg.event.poll()if event.type == pg.QUIT:pg.quit()exit()if pg.mouse.get_pressed()[2] and statueflag == 1 and partflag == 1:statueflag = bakage # statue changeif pg.mouse.get_pressed()[1] and statueflag == 0:power = 0 # power change# drawy = (1- power / 100) * 400 + 100pg.draw.line(screen, (0, 0, 0), (60, 100), (60, 500), 50)pg.draw.line(screen, (255, 0, 0), (60, y), (60, 500), 50)# directionif partflag == 2:direction += dirflagif direction < 0:dirflag = 1if direction > 90:dirflag = -1if pg.mouse.get_pressed()[0] == 1:dirflag = 0partflag = 3# loop to waitwhile pg.mouse.get_pressed()[0]:# must check quitevent = pg.event.poll()if event.type == pg.QUIT:pg.quit()exit()# load imagecannon = pg.image.load(r"素材\cannon.png")cannon = pg.transform.scale(cannon,(100, 100))cannon = pg.transform.rotate(cannon, direction)screen.blit(cannon, (50, 500))# part 3if partflag == 3:if pg.mouse.get_pressed()[0]:# cos and sin!# triangle!# ready firebomb = Bomb()bomb.speedx = power*math.cos(2 * math.pi/(360/direction))bomb.speedy = power*math.sin(2 * math.pi/(360/direction))*(-1)pg.draw.circle(screen, bomb.color, bomb.dot, bomb.r, 0)partflag = 4while pg.mouse.get_pressed()[0]:# must check quitevent = pg.event.poll()if event.type == pg.QUIT:pg.quit()exit()if partflag == 4:# fire!bomb.dot[0] += int(bomb.speedx) / 4bomb.dot[1] += int(bomb.speedy) / 4bomb.speedy += 0.09pg.draw.circle(screen, bomb.color, bomb.dot, bomb.r, 0)# if hits the ground...if bomb.dot[1] >= 580:partflag = 5continueif partflag == 5:# bomb!playSound()boom = pg.image.load(r"素材\boom.png")boom = pg.transform.scale(boom,(200, 200))screen.blit(boom, (int(bomb.dot[0]), int(bomb.dot[1] - 75)))partflag = 6if partflag == 6:# stoppass# display programpg.display.update()
二、海浪
2.1.提前准备
和之前差不多:
import pygame as pg
import math, random# init program
pg.init()
screen = pg.display.set_mode((1000, 800))
pg.display.set_caption("Code5-2-4_pygame_WaterWave", "2.0")
2.2.开始编写
定义变量,这里用到了random.uniform,这是用来随机小数的。
这里还有for循环嵌套。
开关思维又来了!
sin函数又来了!
# pos
pos = [0, 600]
# waveX
waveX = 0
# waveY
waveY = 0
# y
y = 1# check loop and fps
fps = pg.time.Clock()
while True:# fps tickfps.tick(60)# check quitevent = pg.event.poll()if event.type == pg.QUIT:pg.quit()exit()# fill screenscreen.fill((255, 255, 255))waveX += random.uniform(0.05, 0.1) # random.uniform is used for decimal representation # switch thinking again!waveY += yif waveY == -5:y = 1 # speed changeif waveY == 200:y = -1 # speed change# drawfor i in range(250):# posX changepos[0] = 4 * i# posY changefor j in range(50):# use math.sinpos[1] = 10 * j + 600 + waveY * math.sin(i / 40 + waveX)# draw circlespg.draw.circle(screen, (0, 55, 120), pos, 10, 0)# display programpg.display.update()
2.3.完整代码
# import pygame, math and random
import pygame as pg
import math, random# init program
pg.init()
screen = pg.display.set_mode((1000, 800))
pg.display.set_caption("Code5-2-4_pygame_WaterWave", "2.0")# pos
pos = [0, 600]
# waveX
waveX = 0
# waveY
waveY = 0
# y
y = 1# check loop and fps
fps = pg.time.Clock()
while True:# fps tickfps.tick(60)# check quitevent = pg.event.poll()if event.type == pg.QUIT:pg.quit()exit()# fill screenscreen.fill((255, 255, 255))waveX += random.uniform(0.05, 0.1) # random.uniform is used for decimal representation # switch thinking again!waveY += yif waveY == -5:y = 1 # speed changeif waveY == 200:y = -1 # speed change# drawfor i in range(250):# posX changepos[0] = 4 * i# posY changefor j in range(50):# use math.sinpos[1] = 10 * j + 600 + waveY * math.sin(i / 40 + waveX)# draw circlespg.draw.circle(screen, (0, 55, 120), pos, 10, 0)# display programpg.display.update()
三、总结
你们觉得python好用吗?我觉得挺好用的。
作为一个初级编程学习者,python适用于任何人。
我认为,大家可以多多编程。同时增长知识。
大家高考加油!一起度过疫情难关!
python-pygame作品之“人间”大炮和海浪相关推荐
- python创意作品-python的作品
广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 发现了编程与艺术又一个契合点,小开心一下. 其实这个过程非常简单. 我们 ...
- Python pygame 坦克大战
Python pygame 坦克大战 import pygame, time, random from pygame.sprite import SpriteSCREEN_WIDTH = 750 SC ...
- PYTHON pygame库实战——实现双人弹球小游戏
PYTHON pygame实战--运用pygame库实现双人弹球小游戏 使用python pygame库实现一个双人弹球小游戏,两人分别控制一个左右移动的挡板用来拦截小球,小球会在两板间不停弹跳,拦截 ...
- python pygame 简单小游戏
python pygame 简单小游戏 最近学习了pygame,感觉十分有意思,花了一点时间制作了一个简单的小游戏 效果图 这是一个很简单的防守类小游戏 玩家可以使用wasd控制人物移动,并且鼠标控制 ...
- 保姆级教学——Python+Pygame怎么实现吃豆豆游戏
耽搁十几天的时间,我顺利的从阳转阴啦, 以后的日子一切恢复正常,好好工作,积极分享.希望在座的小伙伴阳了的全部健康转阴,没阳的全部不会变阳,新的一年,一切顺顺利利. 不知道最近大家学习得怎么样?有没有 ...
- 小甲鱼python游戏代码_【小甲鱼】零基础学习python pygame 飞机大战可执行源代码...
[实例简介] [小甲鱼]零基础学习python pygame 飞机大战可执行源代码,觉得挺有意思,故此分享. [实例截图] [核心代码] 飞机大战 └── 飞机大战 ├── bullet.py ├── ...
- python毕业设计作品基于django框架 校园二手书籍交易系统毕设成品(8)毕业设计论文模板
python校园二手书籍交易 django校园二手书籍交易 python毕业设计作品成品 django毕业设计作品成品 整个项目包含了:开题报告 + 开题报告PPT + 任务书 + 中期报告 + 论文 ...
- python毕业设计作品基于django框架 校园二手书籍交易系统毕设成品(5)任务书
python校园二手书籍交易 django校园二手书籍交易 python毕业设计作品成品 django毕业设计作品成品 整个项目包含了:开题报告 + 开题报告PPT + 任务书 + 中期报告 + 论文 ...
- python +pygame 制作五子连珠小游戏
python +pygame 制作五子连珠小游戏 学习python半年了,今天分享一个利用pygame制作的五子连珠游戏. 一.代码: 1.球类,ball.py """ ...
最新文章
- node编写定时任务,for循环只执行一遍的解决办法
- python面试题_Python面试题大全
- matlab中find函数_在R中使用Matlab函数
- [react] Mern和Yeoman脚手架有什么区别?
- 怎么从mysql注册表删除用户_mysql 创建和删除用户
- SQL命令向表中添加列
- Rabbit MQ 安装
- Apache部署django项目
- windows 搭建kms服务器激活_自建KMS激活服务器的技巧
- 百度EasyDL图像分类的使用
- QCustomPlot之光标划过曲线显示点的坐标
- 七年一冠、IG牛13的背后是什么!
- 云计算的定义和特点是什么?
- 基于YOLOV5的目标检测模型-口罩检测
- app中我的页面头像及背景效果实现
- python爬取b站弹幕_如何爬取B站弹幕
- 零基础扫盲:什么是人工智能
- Extjs介绍(一)
- 服务器显示器如何更换,笔记本怎么换显示器_笔记本换显示器教程-win7之家
- 融资-0420-v1.0张雅慧