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中取整的几种方法小结
Jan 06 Python
一个基于flask的web应用诞生 记录用户账户登录状态(6)
Apr 11 Python
Python pandas常用函数详解
Feb 07 Python
在cmd中运行.py文件: python的操作步骤
May 12 Python
python使用正则筛选信用卡
Jan 27 Python
将数据集制作成VOC数据集格式的实例
Feb 17 Python
python实现批量修改文件名
Mar 23 Python
Python requests模块session代码实例
Apr 14 Python
python脚本和网页有何区别
Jul 02 Python
python3中for循环踩过的坑记录
Dec 14 Python
python中实现词云图的示例
Dec 19 Python
python 数据类型强制转换的总结
Jan 25 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
各种效果的jquery ui(接口)介绍
2008/09/17 Javascript
jquery 表单取值常用代码
2009/12/22 Javascript
onclick与listeners的执行先后问题详细解剖
2013/01/07 Javascript
jQuery的attr与prop使用介绍
2013/10/10 Javascript
JQUERY 设置SELECT选中项代码
2014/02/07 Javascript
页面加载完毕后滚动条自动滚动一定位置
2014/02/20 Javascript
Jquery实现由下向上展开效果的例子
2014/12/08 Javascript
jQuery实现的简洁下拉菜单导航效果代码
2015/08/26 Javascript
jQuery css() 方法动态修改CSS属性
2016/09/25 Javascript
Javascript的this用法
2017/01/16 Javascript
JavaScript变量类型以及变量作用域详解
2017/08/14 Javascript
让bootstrap的carousel支持滑动滚屏的实现代码
2017/11/27 Javascript
jquery动态添加以及遍历option并获取特定样式名称的option方法
2018/01/29 jQuery
详解Angular系列之变化检测(Change Detection)
2018/02/26 Javascript
Angular5中调用第三方js插件的方法
2018/02/26 Javascript
Bootstrap fileinput 上传新文件移除时触发服务器同步删除的配置
2018/10/08 Javascript
vue-cli脚手架引入弹出层layer插件的几种方法
2019/06/24 Javascript
ZK中使用JS读取客户端txt文件内容问题
2019/11/07 Javascript
vue使用nprogress加载路由进度条的方法
2020/06/04 Javascript
[05:03]显微镜下的DOTA2第十期——Ti3豪之超神幽鬼
2014/06/23 DOTA
python基础教程之数字处理(math)模块详解
2014/03/25 Python
python实现批量修改图片格式和尺寸
2018/06/07 Python
Python线性拟合实现函数与用法示例
2018/12/13 Python
Python实现的读取文件内容并写入其他文件操作示例
2019/04/09 Python
Python下利用BeautifulSoup解析HTML的实现
2020/01/17 Python
Python @property原理解析和用法实例
2020/02/11 Python
Python如何实现自带HTTP文件传输服务
2020/07/08 Python
HTML5的自定义属性data-*详细介绍和JS操作实例
2014/04/10 HTML / CSS
教师的实习自我鉴定
2013/12/17 职场文书
给朋友的道歉信
2014/01/09 职场文书
校三好学生主要事迹
2014/01/11 职场文书
放飞中国梦演讲稿
2014/04/23 职场文书
全民创业工作总结
2015/08/13 职场文书
Oracle 触发器trigger使用案例
2022/02/24 Oracle
Mysql表数据比较大情况下修改添加字段的方法实例
2022/06/28 MySQL
使用HBuilder制作一个简单的HTML5网页
2022/07/07 HTML / CSS