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 相关文章推荐
基于wxpython实现的windows GUI程序实例
May 30 Python
python 获取list特定元素下标的实例讲解
Apr 09 Python
对matplotlib改变colorbar位置和方向的方法详解
Dec 13 Python
Python3爬虫教程之利用Python实现发送天气预报邮件
Dec 16 Python
python 切换root 执行命令的方法
Jan 19 Python
解决py2exe打包后,总是多显示一个DOS黑色窗口的问题
Jun 21 Python
python深copy和浅copy区别对比解析
Dec 26 Python
Python日志syslog使用原理详解
Feb 18 Python
Python实现代码块儿折叠
Apr 15 Python
opencv python 图片读取与显示图片窗口未响应问题的解决
Apr 24 Python
在django中查询获取数据,get, filter,all(),values()操作
Aug 09 Python
对PyTorch中inplace字段的全面理解
May 22 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
如何在symfony中导出为CSV文件中的数据
2011/10/06 PHP
PHP实现批量上传单个文件
2015/12/29 PHP
jquery next nextAll nextUntil siblings的区别介绍
2013/10/05 Javascript
jQuery中removeAttr()方法用法实例
2015/01/05 Javascript
js实现显示当前状态的导航效果代码
2015/08/28 Javascript
如何消除inline-block属性带来的标签间间隙
2016/03/31 Javascript
js传值后台中文出现乱码的解决方法
2016/06/30 Javascript
完美解决IE9浏览器出现的对象未定义问题
2016/09/29 Javascript
设置cookie指定时间失效(实例代码)
2017/05/28 Javascript
详解基于Node.js的微信JS-SDK后端接口实现代码
2017/07/15 Javascript
Vue 组件间的样式冲突污染
2017/08/31 Javascript
JavaScript实现重力下落与弹性效果的方法分析
2017/12/20 Javascript
Angular学习教程之RouterLink花式跳转
2018/05/03 Javascript
简单通过settimeout看javascript的运行机制
2019/05/10 Javascript
解决Python中由于logging模块误用导致的内存泄露
2015/04/23 Python
Python 虚拟空间的使用代码详解
2019/06/10 Python
pyqt5 comboBox获得下标、文本和事件选中函数的方法
2019/06/14 Python
python实现将文件夹内的每张图片批量分割成多张
2019/07/22 Python
详解python中index()、find()方法
2019/08/29 Python
python、PyTorch图像读取与numpy转换实例
2020/01/13 Python
Python3爬虫中Ajax的用法
2020/07/10 Python
Python无损压缩图片的示例代码
2020/08/06 Python
Python抖音快手代码舞(字符舞)的实现方法
2021/02/07 Python
IE8下CSS3选择器nth-child() 不兼容问题的解决方法
2016/11/16 HTML / CSS
美国畅销的跑步机品牌:ProForm
2017/02/06 全球购物
Ramy Brook官网:美国现代女装品牌
2019/06/18 全球购物
英国网上自行车商店:Tredz Bikes
2019/10/29 全球购物
总裁岗位职责
2013/12/04 职场文书
一句话工作感言
2014/03/01 职场文书
英语教师岗位职责
2014/03/16 职场文书
原料仓管员岗位职责
2014/04/12 职场文书
会计岗位说明书
2014/07/29 职场文书
2014年英语教研组工作总结
2014/12/06 职场文书
部队个人年终总结
2015/03/02 职场文书
pytorch 梯度NAN异常值的解决方案
2021/06/05 Python
JS 4个超级实用的小技巧 提升开发效率
2021/10/05 Javascript