大家好,我是涵子码农。今天我会为大家带来两个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作品之“人间”大炮和海浪相关推荐

  1. python创意作品-python的作品

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 发现了编程与艺术又一个契合点,小开心一下. 其实这个过程非常简单. 我们 ...

  2. Python pygame 坦克大战

    Python pygame 坦克大战 import pygame, time, random from pygame.sprite import SpriteSCREEN_WIDTH = 750 SC ...

  3. PYTHON pygame库实战——实现双人弹球小游戏

    PYTHON pygame实战--运用pygame库实现双人弹球小游戏 使用python pygame库实现一个双人弹球小游戏,两人分别控制一个左右移动的挡板用来拦截小球,小球会在两板间不停弹跳,拦截 ...

  4. python pygame 简单小游戏

    python pygame 简单小游戏 最近学习了pygame,感觉十分有意思,花了一点时间制作了一个简单的小游戏 效果图 这是一个很简单的防守类小游戏 玩家可以使用wasd控制人物移动,并且鼠标控制 ...

  5. 保姆级教学——Python+Pygame怎么实现吃豆豆游戏

    耽搁十几天的时间,我顺利的从阳转阴啦, 以后的日子一切恢复正常,好好工作,积极分享.希望在座的小伙伴阳了的全部健康转阴,没阳的全部不会变阳,新的一年,一切顺顺利利. 不知道最近大家学习得怎么样?有没有 ...

  6. 小甲鱼python游戏代码_【小甲鱼】零基础学习python pygame 飞机大战可执行源代码...

    [实例简介] [小甲鱼]零基础学习python pygame 飞机大战可执行源代码,觉得挺有意思,故此分享. [实例截图] [核心代码] 飞机大战 └── 飞机大战 ├── bullet.py ├── ...

  7. python毕业设计作品基于django框架 校园二手书籍交易系统毕设成品(8)毕业设计论文模板

    python校园二手书籍交易 django校园二手书籍交易 python毕业设计作品成品 django毕业设计作品成品 整个项目包含了:开题报告 + 开题报告PPT + 任务书 + 中期报告 + 论文 ...

  8. python毕业设计作品基于django框架 校园二手书籍交易系统毕设成品(5)任务书

    python校园二手书籍交易 django校园二手书籍交易 python毕业设计作品成品 django毕业设计作品成品 整个项目包含了:开题报告 + 开题报告PPT + 任务书 + 中期报告 + 论文 ...

  9. python +pygame 制作五子连珠小游戏

    python +pygame 制作五子连珠小游戏 学习python半年了,今天分享一个利用pygame制作的五子连珠游戏. 一.代码: 1.球类,ball.py """ ...

最新文章

  1. node编写定时任务,for循环只执行一遍的解决办法
  2. python面试题_Python面试题大全
  3. matlab中find函数_在R中使用Matlab函数
  4. [react] Mern和Yeoman脚手架有什么区别?
  5. 怎么从mysql注册表删除用户_mysql 创建和删除用户
  6. SQL命令向表中添加列
  7. Rabbit MQ 安装
  8. Apache部署django项目
  9. windows 搭建kms服务器激活_自建KMS激活服务器的技巧
  10. 百度EasyDL图像分类的使用
  11. QCustomPlot之光标划过曲线显示点的坐标
  12. 七年一冠、IG牛13的背后是什么!
  13. 云计算的定义和特点是什么?
  14. 基于YOLOV5的目标检测模型-口罩检测
  15. app中我的页面头像及背景效果实现
  16. python爬取b站弹幕_如何爬取B站弹幕
  17. 零基础扫盲:什么是人工智能
  18. Extjs介绍(一)
  19. 服务器显示器如何更换,笔记本怎么换显示器_笔记本换显示器教程-win7之家
  20. 融资-0420-v1.0张雅慧

热门文章

  1. Unity烘焙相关问题知识点及问题总结
  2. 充电桩与后台服务器通迅协议,充电桩平台通讯协议.doc
  3. 自己写的gaptool(Lua版本)
  4. python3半自动爬虫,获取风暴英雄官方壁纸
  5. java poi导出兼容office
  6. 2021年终总结-----收获、相遇、向前
  7. 【python】anaconda 管理 python 环境
  8. QT 如何获取主窗口的指针
  9. 21.NVIC中断优先级管理
  10. 20200321细碎