蹦起来!Python 用物理引擎Pymunk写一个解压小游戏
用鼠标创建小球,一个蹦来蹦去的解压小游戏……
本次需要的外置包:pygame,pymunk,cmd运行该命令安装:
pip install pygame
pip install pymunk
首先,导入
import pymunk
import pygame
from pygame.locals import *
import sys
import random as rd
结合pygame,创建若干障碍,并设置重力、弹跳力等参数
class Demo:WIDTH=800HEIGHT=800def __init__(self):pygame.init()self.screen=pygame.display.set_mode((self.WIDTH,self.HEIGHT))pygame.display.set_caption("BALLS!")self.balls=[]self.space=pymunk.Space()self.space.gravity=(0,280)self.elasticity=0.9self.segment_1_pos=((0,self.HEIGHT-125),(self.WIDTH,self.HEIGHT-65))self.segment_1_body=pymunk.Body(body_type=pymunk.Body.STATIC)self.segment_1_shape=pymunk.Segment(self.segment_1_body,self.segment_1_pos[0],self.segment_1_pos[1],10)self.segment_1_shape.elasticity=self.elasticityself.space.add(self.segment_1_body,self.segment_1_shape)self.segment_2_pos=((0,self.HEIGHT-500),(150,self.HEIGHT-400))self.segment_2_body=pymunk.Body(body_type=pymunk.Body.STATIC)self.segment_2_shape=pymunk.Segment(self.segment_2_body,self.segment_2_pos[0],self.segment_2_pos[1],10)self.segment_2_shape.elasticity=self.elasticityself.space.add(self.segment_2_body,self.segment_2_shape)self.segment_3_pos=((self.WIDTH,self.HEIGHT-500),(self.WIDTH-150,self.HEIGHT-400))self.segment_3_body=pymunk.Body(body_type=pymunk.Body.STATIC)self.segment_3_shape=pymunk.Segment(self.segment_3_body,self.segment_3_pos[0],self.segment_3_pos[1],10)self.segment_3_shape.elasticity=self.elasticityself.space.add(self.segment_3_body,self.segment_3_shape)self.circle_1_pos=(self.WIDTH/2,self.HEIGHT/2)self.circle_1_body=pymunk.Body(body_type=pymunk.Body.STATIC)self.circle_1_shape=pymunk.Circle(self.circle_1_body,30,self.circle_1_pos)self.circle_1_shape.elasticity=self.elasticityself.space.add(self.circle_1_body,self.circle_1_shape)
写一个自动创建新球的函数
def newBall(self,x,y,r):body=pymunk.Body(1,100,body_type=pymunk.Body.DYNAMIC)body.position=x,yshape=pymunk.Circle(body,r)shape.elasticity=self.elasticityself.space.add(body,shape)self.balls.append((shape,r))
事件监听
def listen(self):for event in pygame.event.get():if event.type==QUIT:sys.exit()if event.type==MOUSEBUTTONDOWN:self.newBall(*pygame.mouse.get_pos(),rd.randint(5,10))
绘制并检测物体跳出边界并删除
def draw(self):self.screen.fill((255,255,255))pygame.draw.line(self.screen,(0,0,0),self.segment_1_pos[0],self.segment_1_pos[1],10)pygame.draw.line(self.screen,(0,0,0),self.segment_2_pos[0],self.segment_2_pos[1],10)pygame.draw.line(self.screen,(0,0,0),self.segment_3_pos[0],self.segment_3_pos[1],10)pygame.draw.circle(self.screen,(0,0,0),self.circle_1_pos,30)for ball,r in self.balls:pygame.draw.circle(self.screen,(255,0,0),(ball.body.position.x,ball.body.position.y),r)c=0while c<len(self.balls) and len(self.balls):x,y=self.balls[c][0].body.positionif x<0 or x>self.WIDTH or y>self.HEIGHT:self.space.remove(self.balls[c][0])self.balls.pop(c)c-=1c+=1
主循环
def run(self):while True:self.listen()self.draw()self.space.step(0.001)pygame.display.update()
启动
if __name__ == '__main__':demo=Demo()demo.run()
最终代码:
import pymunk
import pygame
from pygame.locals import *
import sys
import random as rdclass Demo:WIDTH=800HEIGHT=800def __init__(self):pygame.init()self.screen=pygame.display.set_mode((self.WIDTH,self.HEIGHT))pygame.display.set_caption("BALLS!")self.balls=[]self.space=pymunk.Space()self.space.gravity=(0,280)self.elasticity=0.9self.segment_1_pos=((0,self.HEIGHT-125),(self.WIDTH,self.HEIGHT-65))self.segment_1_body=pymunk.Body(body_type=pymunk.Body.STATIC)self.segment_1_shape=pymunk.Segment(self.segment_1_body,self.segment_1_pos[0],self.segment_1_pos[1],10)self.segment_1_shape.elasticity=self.elasticityself.space.add(self.segment_1_body,self.segment_1_shape)self.segment_2_pos=((0,self.HEIGHT-500),(150,self.HEIGHT-400))self.segment_2_body=pymunk.Body(body_type=pymunk.Body.STATIC)self.segment_2_shape=pymunk.Segment(self.segment_2_body,self.segment_2_pos[0],self.segment_2_pos[1],10)self.segment_2_shape.elasticity=self.elasticityself.space.add(self.segment_2_body,self.segment_2_shape)self.segment_3_pos=((self.WIDTH,self.HEIGHT-500),(self.WIDTH-150,self.HEIGHT-400))self.segment_3_body=pymunk.Body(body_type=pymunk.Body.STATIC)self.segment_3_shape=pymunk.Segment(self.segment_3_body,self.segment_3_pos[0],self.segment_3_pos[1],10)self.segment_3_shape.elasticity=self.elasticityself.space.add(self.segment_3_body,self.segment_3_shape)self.circle_1_pos=(self.WIDTH/2,self.HEIGHT/2)self.circle_1_body=pymunk.Body(body_type=pymunk.Body.STATIC)self.circle_1_shape=pymunk.Circle(self.circle_1_body,30,self.circle_1_pos)self.circle_1_shape.elasticity=self.elasticityself.space.add(self.circle_1_body,self.circle_1_shape)def newBall(self,x,y,r):body=pymunk.Body(1,100,body_type=pymunk.Body.DYNAMIC)body.position=x,yshape=pymunk.Circle(body,r)shape.elasticity=self.elasticityself.space.add(body,shape)self.balls.append((shape,r))def listen(self):for event in pygame.event.get():if event.type==QUIT:sys.exit()if event.type==MOUSEBUTTONDOWN:self.newBall(*pygame.mouse.get_pos(),rd.randint(5,10))def draw(self):self.screen.fill((255,255,255))pygame.draw.line(self.screen,(0,0,0),self.segment_1_pos[0],self.segment_1_pos[1],10)pygame.draw.line(self.screen,(0,0,0),self.segment_2_pos[0],self.segment_2_pos[1],10)pygame.draw.line(self.screen,(0,0,0),self.segment_3_pos[0],self.segment_3_pos[1],10)pygame.draw.circle(self.screen,(0,0,0),self.circle_1_pos,30)for ball,r in self.balls:pygame.draw.circle(self.screen,(255,0,0),(ball.body.position.x,ball.body.position.y),r)c=0while c<len(self.balls) and len(self.balls):x,y=self.balls[c][0].body.positionif x<0 or x>self.WIDTH or y>self.HEIGHT:self.space.remove(self.balls[c][0])self.balls.pop(c)c-=1c+=1def run(self):while True:self.listen()self.draw()self.space.step(0.001)pygame.display.update()if __name__ == '__main__':demo=Demo()demo.run()
现在,启动程序,移动你的鼠标,点击鼠标创建一个个不同大小的球吧!
(p.s. 滑动滚轮也可以哟~~~)
喜欢的就来个3连吧~~
蹦起来!Python 用物理引擎Pymunk写一个解压小游戏相关推荐
- 【python实战】使用 pygame 写一个 flappy-bird 类小游戏 | 涉及思路+项目结构+代码详解 | 新手向
基于 pygame 的 Amazing-brick 实现 本文涉及三个 .py 文件: amazing_brick / amazing_brick_utils.py/ wrapped_amazing_ ...
- 你写一个web网页小游戏
写一个 web 网页小游戏需要以下几个步骤: 选择一种编程语言,常用的有 HTML.CSS.JavaScript 和 Python. 使用编辑器创建一个 HTML 文件,这个文件将是你的网页的基础. ...
- 【牛客刷题】上手用C语言写一个三子棋小游戏超详解哦(电脑优化)
作者:[南航科院小张 南航科院小张的博客 专栏:从c语言的入门到进阶 学习知识不只是要懂,还要会用:想要找到好的工作,这里给大家介绍一件可以斩获诸多大厂offer的利器–牛客网 点击免费注册和我一起开 ...
- c语言写一个简单的小游戏-推箱子
在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...
- 一个简单的c 游戏编程语言,编程达人 c语言写一个简单的小游戏-推箱子
在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...
- 用c++帮我写一个闯关小游戏
很高兴为您写一个闯关小游戏!这个游戏将分为3个关卡,每个关卡都有不同的挑战.第一关的挑战是收集3个物品,这些物品分别在不同的位置,你必须找到它们才能过关.第二关的挑战是找到一个宝藏,你必须通过解决难题 ...
- vs2010c语言小游戏,用C语言写一个三子棋小游戏(用VS2010实现,加强版)
前几天写了一个三子棋小游戏,但是比较简单,因为以前写的游戏棋盘只能是3x3那么大.今天对那个程序做了两点改进: 1.现在可以实现在任意大小的棋盘上下棋了. 2.因为棋盘可能变大,为了玩家方便确定坐标, ...
- 【Python游戏】Python基于第三方库pygame实现一个魂斗罗小游戏,毕业设计必备 | 附源码
前言 halo,包子们下午好 今天给打击整一个魂斗罗小游戏 很多小伙伴接触魂斗罗应该是在小时候的一个手柄游戏上面吧 我记得作为90后的我,玩这一款游戏是在小学的时候 废话不多说,直接上才艺 今天给大家 ...
- c++编写手机小游戏代码_玩过自己开发的贪吃蛇吗?点这里,教你用Python写一个贪吃蛇小游戏!(附源代码)...
后台回复'0816',加入Python交流群~ 往日回顾:Python必读好书,这9本份量十足~ 本文代码的实现效果,获取源代码,请直接滑到文末~都说Python除了生孩子,什么都能干.咱们今天,就用 ...
最新文章
- Data Mapper
- html滚动条样式自定义,CSS3自定义滚动条样式
- vb excel遍历列_EXCEL如何把多个表格合并成一个表格
- 计算机专业英语主要句型及翻译技巧,计算机专业英语单词及翻译等技巧-20210420072747.ppt-原创力文档...
- oracle和mysql数据实时同步_异构数据源的CDC实时同步系统——最终选型实战
- 初学c#读书笔记(一)--c#和.NET Framework
- JS设计模式初识(四)-迭代器模式
- linux大一实验报告,linux实验报告
- Linux虚拟机中安装VMware Tools
- Ps 初学者教程,如何让照片成为手绘美图?
- java 实现mvcc_HBase中MVCC的实现机制及应用情况
- Android实战开发-Kotlin教程(入门篇 1.0)
- c语言编程运行符号是什么,c语言编程用的符号有哪些
- ios共享账号公众号_新增iOS应用账号共享03
- VS2010中文版微软官方下载
- 2019 11月 月末总结
- JAVA学习日志 关于周易数字卦的一个算法
- 精确休息法——《万维钢.精英日课3》笔记
- 【JavaScript】案例1:使用JS完成注册页面校验
- STM32 Simulink 自动代码生成电机控制:基于反电动势观测器的锁相环设计