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常见数据结构详解
Jul 24 Python
Python中的Numeric包和Numarray包使用教程
Apr 13 Python
Python Django框架实现应用添加logging日志操作示例
May 17 Python
Python3 串口接收与发送16进制数据包的实例
Jun 12 Python
java中的控制结构(if,循环)详解
Jun 26 Python
python实现大文件分割与合并
Jul 22 Python
Python 实现数组相减示例
Dec 27 Python
Tensorflow中k.gradients()和tf.stop_gradient()用法说明
Jun 10 Python
一些关于python 装饰器的个人理解
Aug 31 Python
python关于倒排列的知识点总结
Oct 13 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
Dec 07 Python
Python如何telnet到网络设备
Feb 18 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
用Socket发送电子邮件(利用需要验证的SMTP服务器)
2006/10/09 PHP
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
2014/08/28 PHP
ecshop实现smtp发送邮件
2015/02/03 PHP
jQuery实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
2010/03/21 Javascript
基于jquery1.4.2的仿flash超炫焦点图播放效果
2010/04/20 Javascript
JS实现的一个简单的Autocomplete自动完成例子
2014/04/16 Javascript
利用jQuery实现WordPress中@的ID悬浮显示评论内容
2015/12/11 Javascript
jQuery Mobile开发中日期插件Mobiscroll使用说明
2016/03/02 Javascript
JavaScript 对象字面量讲解
2016/06/06 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
JS 事件绑定、事件监听、事件委托详细介绍
2016/09/28 Javascript
Vue.js系列之vue-router(上)(3)
2017/01/03 Javascript
js实现手机发送验证码功能
2017/03/13 Javascript
jquery dataTable 获取某行数据
2017/05/05 jQuery
JS实现在文本指定位置插入内容的简单示例
2017/12/22 Javascript
Nuxt的路由动画效果案例
2020/11/06 Javascript
关于angular 8.1使用过程中的一些记录
2020/11/25 Javascript
[00:08]DOTA2勇士令状等级奖励“天外飞星”
2019/05/24 DOTA
[01:07:46]完美世界DOTA2联赛循环赛 Magma vs IO BO2第二场 11.01
2020/11/02 DOTA
[01:20:05]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第二场 2月5日
2021/03/11 DOTA
对numpy中向量式三目运算符详解
2018/10/31 Python
python读取txt文件中特定位置字符的方法
2018/12/24 Python
python json 递归打印所有json子节点信息的例子
2020/02/27 Python
详解Python yaml模块
2020/09/23 Python
Myprotein蛋白粉美国官网:欧洲畅销运动营养品牌
2016/11/15 全球购物
Hashtable 添加内容的方式有哪几种,有什么区别?
2012/04/08 面试题
财务会计专业应届毕业生求职信
2013/10/18 职场文书
自荐信模版
2013/10/24 职场文书
红领巾广播站广播稿
2014/02/01 职场文书
优秀员工评语
2014/02/10 职场文书
先进事迹演讲稿
2014/09/01 职场文书
六查六看剖析材料
2014/10/06 职场文书
2015大学生实训报告
2014/11/05 职场文书
归途列车观后感
2015/06/17 职场文书
Golang中异常处理机制详解
2021/06/08 Golang
pd.DataFrame中的几种索引变换的实现
2022/06/16 Python