用鼠标创建小球,一个蹦来蹦去的解压小游戏……


本次需要的外置包: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写一个解压小游戏相关推荐

  1. 【python实战】使用 pygame 写一个 flappy-bird 类小游戏 | 涉及思路+项目结构+代码详解 | 新手向

    基于 pygame 的 Amazing-brick 实现 本文涉及三个 .py 文件: amazing_brick / amazing_brick_utils.py/ wrapped_amazing_ ...

  2. 你写一个web网页小游戏

    写一个 web 网页小游戏需要以下几个步骤: 选择一种编程语言,常用的有 HTML.CSS.JavaScript 和 Python. 使用编辑器创建一个 HTML 文件,这个文件将是你的网页的基础. ...

  3. 【牛客刷题】上手用C语言写一个三子棋小游戏超详解哦(电脑优化)

    作者:[南航科院小张 南航科院小张的博客 专栏:从c语言的入门到进阶 学习知识不只是要懂,还要会用:想要找到好的工作,这里给大家介绍一件可以斩获诸多大厂offer的利器–牛客网 点击免费注册和我一起开 ...

  4. c语言写一个简单的小游戏-推箱子

    在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...

  5. 一个简单的c 游戏编程语言,编程达人 c语言写一个简单的小游戏-推箱子

    在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...

  6. 用c++帮我写一个闯关小游戏

    很高兴为您写一个闯关小游戏!这个游戏将分为3个关卡,每个关卡都有不同的挑战.第一关的挑战是收集3个物品,这些物品分别在不同的位置,你必须找到它们才能过关.第二关的挑战是找到一个宝藏,你必须通过解决难题 ...

  7. vs2010c语言小游戏,用C语言写一个三子棋小游戏(用VS2010实现,加强版)

    前几天写了一个三子棋小游戏,但是比较简单,因为以前写的游戏棋盘只能是3x3那么大.今天对那个程序做了两点改进: 1.现在可以实现在任意大小的棋盘上下棋了. 2.因为棋盘可能变大,为了玩家方便确定坐标, ...

  8. 【Python游戏】Python基于第三方库pygame实现一个魂斗罗小游戏,毕业设计必备 | 附源码

    前言 halo,包子们下午好 今天给打击整一个魂斗罗小游戏 很多小伙伴接触魂斗罗应该是在小时候的一个手柄游戏上面吧 我记得作为90后的我,玩这一款游戏是在小学的时候 废话不多说,直接上才艺 今天给大家 ...

  9. c++编写手机小游戏代码_玩过自己开发的贪吃蛇吗?点这里,教你用Python写一个贪吃蛇小游戏!(附源代码)...

    后台回复'0816',加入Python交流群~ 往日回顾:Python必读好书,这9本份量十足~ 本文代码的实现效果,获取源代码,请直接滑到文末~都说Python除了生孩子,什么都能干.咱们今天,就用 ...

最新文章

  1. Data Mapper
  2. html滚动条样式自定义,CSS3自定义滚动条样式
  3. vb excel遍历列_EXCEL如何把多个表格合并成一个表格
  4. 计算机专业英语主要句型及翻译技巧,计算机专业英语单词及翻译等技巧-20210420072747.ppt-原创力文档...
  5. oracle和mysql数据实时同步_异构数据源的CDC实时同步系统——最终选型实战
  6. 初学c#读书笔记(一)--c#和.NET Framework
  7. JS设计模式初识(四)-迭代器模式
  8. linux大一实验报告,linux实验报告
  9. Linux虚拟机中安装VMware Tools
  10. Ps 初学者教程,如何让照片成为手绘美图?
  11. java 实现mvcc_HBase中MVCC的实现机制及应用情况
  12. Android实战开发-Kotlin教程(入门篇 1.0)
  13. c语言编程运行符号是什么,c语言编程用的符号有哪些
  14. ios共享账号公众号_新增iOS应用账号共享03
  15. VS2010中文版微软官方下载
  16. 2019 11月 月末总结
  17. JAVA学习日志 关于周易数字卦的一个算法
  18. 精确休息法——《万维钢.精英日课3》笔记
  19. 【JavaScript】案例1:使用JS完成注册页面校验
  20. STM32 Simulink 自动代码生成电机控制:基于反电动势观测器的锁相环设计

热门文章

  1. centos 8.2 指南
  2. falcon 监控 tcp closewait
  3. 计算机网络(一)带宽
  4. 采用外中断控制的条形LED彩灯设计
  5. AnimationPath路径动画实现详解
  6. MS2107 CVBS转USB2.0 音视频采集芯片,支持1080P@30HZ输出
  7. 二进制计数器、johnson计数器、环形计数器原理和实现
  8. 织梦dedecms百度PHP主动推送设置方法
  9. 劳力士格林尼治多少价格_劳力士格林尼治型ll价格是多少
  10. 高清的基础知识__DVBCN数字电视中文网