python pygame实现球球大作战


Posted in Python onNovember 25, 2019

本文实例为大家分享了python pygame球球大作战的具体代码,供大家参考,具体内容如下

球球大作战:(大球吃小球,代码如下:)

from random import randint,randrange
import pygame
from math import sqrt,pi


class Ball(object):
  def __init__(self, center, color, radius, sx, sy):
    self._center = center
    self._color = color
    self._radius = radius
    self._sx = sx
    self._sy = sy

  @property
  def center(self):
    return self._center

  @property
  def radius(self):
    return self._radius

  @radius.setter
  def radius(self,radius):
    self._radius = radius

  def move(self):
    x, y = self._center[0], self._center[1]
    x += self._sx
    y += self._sy
    self._center = (x, y)
    # if x + self._radius > 800:
    #   self._sx = -abs(self._sx)
    # elif x + self._radius < 0:
    #   self._sx = abs(self._sx)
    # elif y +self._radius > 800:
    #   self._sy = -abs(self._sy)
    # elif y +self._radius < 0:
    #   self._sy = abs(self._sy)
    if x + self._radius >= 800 or x - self._radius <= 0 or x <= 0:
      self._sx = -self._sx
    if y +self._radius >= 800 or y - self._radius <= 0 or y <= 0:
      self._sy = -self._sy

  def draw(self,screen):
    pygame.draw.circle(screen, self._color, self._center, self._radius, 0)

  def eat(self, other):
    a = sqrt((self._center[0] - other.center[0]) ** 2 + (self._center[1] - other.center[1]) ** 2)
    if a < self._radius + other.radius and self._radius < other.radius:
      other.radius = self._radius + other.radius
      self.radius = 0
    elif a < self._radius + other.radius and self._radius > other.radius:
      self._radius = self._radius + other.radius
      other.radius = 0


def main():
  balls = []
  pygame.init()
  screen = pygame.display.set_mode([800,800])
  pygame.display.set_caption('大球吃小球')
  c = pygame.time.Clock()
  running = True
  while running:
    for event in pygame.event.get():
      if event.type == pygame.QUIT:
        running = False
      elif event.type == pygame.MOUSEBUTTONDOWN and \
         event.button == 1:
        color = random_color()
        radius = randint(10,100)
        sx, sy = randint(-10,10), randint(-10,10)
        ball = Ball(event.pos, color, radius, sx, sy)
        balls.append(ball)
    refresh(screen,balls)
    c.tick(20) # 50帧
    for ball in balls:
      ball.move()
    balls_len = len(balls)
    for i in range(balls_len):
      for x in range(balls_len):
        balls[i].eat(balls[x])
    for ball in balls:
      if ball.radius == 0:
        balls.remove(ball)


  pygame.quit()


def refresh(screen,balls):
  bg_color = [255, 255, 255]
  screen.fill(bg_color)
  for ball in balls:
    ball.draw(screen)
  pygame.display.flip()


def random_color():
  return [randint(1,255), randint(1,255), randint(1,255)]


if __name__ == '__main__':
  main()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
学习python的几条建议分享
Feb 10 Python
Python中使用copy模块实现列表(list)拷贝
Apr 14 Python
Python实现数据库并行读取和写入实例
Jun 09 Python
Python中__slots__属性介绍与基本使用方法
Sep 05 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
Jan 08 Python
Python3.5装饰器典型案例分析
Apr 30 Python
python 缺失值处理的方法(Imputation)
Jul 02 Python
python实现一个函数版的名片管理系统过程解析
Aug 27 Python
python字典排序的方法
Oct 12 Python
从python读取sql的实例方法
Jul 21 Python
Python使用pyenv实现多环境管理
Feb 05 Python
python元组拆包实现方法
Feb 28 Python
Python内置加密模块用法解析
Nov 25 #Python
python使用pygame实现笑脸乒乓球弹珠球游戏
Nov 25 #Python
Django项目基础配置和基本使用过程解析
Nov 25 #Python
nginx+uwsgi+django环境搭建的方法步骤
Nov 25 #Python
python找出列表中大于某个阈值的数据段示例
Nov 24 #Python
python对Excel按条件进行内容补充(推荐)
Nov 24 #Python
使用Python的datetime库处理时间(RPA流程)
Nov 24 #Python
You might like
怎样辨别一杯好咖啡
2021/03/03 新手入门
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
2016/07/09 PHP
php实现自定义中奖项数和概率的抽奖函数示例
2017/05/26 PHP
TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
2019/12/31 PHP
php 中的信号处理操作实例详解
2020/03/04 PHP
jQuery 动态酷效果实现总结
2009/12/27 Javascript
jQuery移动和复制dom节点实用DOM操作案例
2012/12/17 Javascript
打开新窗口关闭当前页面不弹出关闭提示js代码
2013/03/18 Javascript
node.js中的http.createServer方法使用说明
2014/12/14 Javascript
基于JavaScript实现百叶窗动画效果不只单纯flas可以实现
2016/02/29 Javascript
Vue.js弹出模态框组件开发的示例代码
2017/07/26 Javascript
最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
2017/08/16 Javascript
jQuery无冲突模式详解
2019/01/17 jQuery
Vue+Typescript中在Vue上挂载axios使用时报错问题
2019/08/07 Javascript
浅谈layui里的上传控件问题
2019/09/26 Javascript
js 实现碰撞检测的示例
2020/10/28 Javascript
JavaScript实现轮播图效果
2020/10/30 Javascript
Python实现多线程下载文件的代码实例
2014/06/01 Python
详解在Python程序中自定义异常的方法
2015/10/16 Python
说一说Python logging
2016/04/15 Python
python3库numpy数组属性的查看方法
2018/04/17 Python
python在每个字符后添加空格的实例
2018/05/07 Python
Python3.5 Pandas模块之Series用法实例分析
2019/04/23 Python
浅谈pyqt5在QMainWindow中布局的问题
2019/06/21 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
2020/06/01 Python
Python自动创建Excel并获取内容
2020/09/16 Python
生产车间班组长岗位职责
2014/01/06 职场文书
2014社区三八妇女节活动总结
2014/03/01 职场文书
婚礼司仪主持词
2014/03/14 职场文书
办理信用卡工作证明
2014/09/30 职场文书
公司领导班子召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
社区工作者个人总结
2015/02/28 职场文书
冲出亚马逊观后感
2015/06/03 职场文书
环境卫生标语
2015/08/03 职场文书
2016年寒假生活小结
2015/10/10 职场文书
Nginx实现会话保持的两种方式
2022/03/18 Servers