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程序设计入门(5)类的使用简介
Jun 16 Python
Python and、or以及and-or语法总结
Apr 14 Python
浅谈终端直接执行py文件,不需要python命令
Jan 23 Python
Python PyQt5标准对话框用法示例
Aug 23 Python
Python socket实现简单聊天室
Apr 01 Python
CentOS下Python3的安装及创建虚拟环境的方法
Nov 28 Python
python实现简单名片管理系统
Nov 30 Python
pyqt5对用qt designer设计的窗体实现弹出子窗口的示例
Jun 19 Python
django 多对多表的创建和插入代码实现
Sep 09 Python
如何用Python编写一个电子考勤系统
Feb 08 Python
详解Python小数据池和代码块缓存机制
Apr 07 Python
Python学习之包与模块详解
Mar 19 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
joomla内置的表单验证功能使用方法
2010/06/11 PHP
如何使用PHP批量去除文件UTF8 BOM信息
2013/08/05 PHP
查找php配置文件php.ini所在路径的二种方法
2014/05/26 PHP
Laravel给生产环境添加监听事件(SQL日志监听)
2017/06/19 PHP
PHP中cookie知识点学习
2018/05/06 PHP
一个对于Array的简单扩展
2006/10/03 Javascript
extJs 文本框后面加上说明文字+下拉列表选中值后触发事件
2009/11/27 Javascript
javascript:history.go()和History.back()的区别及应用
2012/11/25 Javascript
window.addEventListener来解决让一个js事件执行多个函数
2012/12/26 Javascript
javascript使用onclick事件改变选中行的颜色
2013/12/30 Javascript
js 通过cookie实现刷新不变化树形菜单
2014/10/30 Javascript
jquery模拟alert的弹窗插件
2015/07/31 Javascript
js检测iframe是否加载完成的方法
2015/11/26 Javascript
分享JS数组求和与求最大值的方法
2016/08/11 Javascript
jQuery Easy UI中根据第一个下拉框选中的值设置第二个下拉框是否可以编辑
2016/11/29 Javascript
JavaScript数组去重的6个方法
2017/01/21 Javascript
js实现textarea限制输入字数
2017/02/13 Javascript
ionic App问题总结系列之ionic点击系统返回键退出App
2017/08/19 Javascript
详解开发react应用最好用的脚手架 create-react-app
2018/04/24 Javascript
angularjs的单选框+ng-repeat的实现方法
2018/09/12 Javascript
微信小程序中插入激励视频广告并获取收益(实例代码)
2019/12/06 Javascript
react antd表格中渲染一张或多张图片的实例
2020/10/28 Javascript
Python使用functools实现注解同步方法
2018/02/06 Python
如何使用python把ppt转换成pdf
2019/06/29 Python
配置python的编程环境之Anaconda + VSCode的教程
2020/03/29 Python
python在地图上画比例的实例详解
2020/11/13 Python
为智能设备设计个性化保护套网站:caseable
2017/01/05 全球购物
优秀毕业大学生推荐信
2013/11/13 职场文书
外贸业务员工作职责
2014/01/06 职场文书
李培根演讲稿
2014/05/22 职场文书
乳制品整治工作方案
2014/05/29 职场文书
物理教育专业求职信
2014/06/25 职场文书
中专生自荐信
2014/06/25 职场文书
民警个人对照检查剖析材料
2014/09/17 职场文书
2014年维修电工工作总结
2014/11/20 职场文书
公司人事管理制度
2015/08/05 职场文书