利用python编写一个弹球小游戏

  介绍

本篇文章给大家分享的是有关利用python编写一个弹球小游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

运行效果

利用python编写一个弹球小游戏

实现代码

 # - * -编码:utf - 8 - *
  进口tkinter作为tkinter
  进口tkinter。对话框是mb
  进口随机,时间
  
  班级舞会():
  & # 39;& # 39;& # 39;
  创建球类,初始化对象,即创建对象设置属性,
  init函数是在对象被创建的同时就设置属性的一种方法,Python会在创建新对象时自动调用这个函数。
  & # 39;& # 39;& # 39;
  
  def __init__(自我、帆布、桨、分数、颜色、init_x=100, init_y=100):
  & # 39;& # 39;& # 39;
  球类初始化属性
  :param帆布画布
  :param桨:球拍
  :param得分:得分
  :param颜色:小球的颜色
  :param init_x:小球球的初始横坐标,有默认值,可不传
  :param init_y:小球球的初始纵坐标,有默认值,可不传
  & # 39;& # 39;& # 39;
  自我。帆布画布=自我。桨=桨
  自我。分数=分数
  自我。颜色=颜色
  
  #保存tkinter画小球返回的id,为后期移动屏幕上的小球做准备,
  #参数分别表示为:(10,10)表示左上角x, y坐标,(30、30)表示右下角x, y坐标,即创建一个直径为20的圆
  #填充为小球的填充色
  自我。id=canvas.create_oval(10年,10、30、30、填充=self.color)
  #将小球移动到初始位置,初始位置可通过传参进行更改,有默认值
  self.canvas.move (self.id init_x init_y)
  
  #给一串x分量的起始值(x和y代表横坐标和纵坐标的分量)
  开始=[3、2、1,1,2,3]
  # shuffle()方法将序列的所有元素随机排序
  random.shuffle(开始)
  #随机混排的序,赋值给对象变量x,让它起始的时候获得随机分量值,引起球每次起始角度都不同
  自我。x=开始[0]
  #对象变量y就是垂直分量移动的初始值,等价于上下移动,值代表移动多少像素点
  自我。y=3
  
  # winfo_height()函数来获取画布当前的高度,赋值给对象变量
  自我。canvas_height=self.canvas.winfo_height ()
  # winfo_width()函数来获取画布当前的宽度,赋值给对象变量
  自我。canvas_width=self.canvas.winfo_width ()
  #小球是否碰触到画布底部,初始值为假,即没有碰的到
  自我。hit_bottom=False
  
  
  def画(自我):
  & # 39;& # 39;& # 39;
  该函数用于让小球水平和垂直运动,在运动的过程中,判断是否得分,游戏是否结束
  & # 39;& # 39;& # 39;
  #让小球可以水平和垂直运动
  self.canvas.move (self.id self.x self.y)
  #坐标函数通过id返回画布球的坐标列表(两个坐标,左上角的坐标和右下角的两个坐标)
  位置=self.canvas.coords (self.id)
  #判断小球是否撞到画布顶部或者底部,保证小球反弹回去,不消失
  如果位置[1]& lt;=0: #如果小球的左上角y坐标小于0,则向下移动3个像素
  自我。y=3
  如果位置[3]祝辞=自我。canvas_height: #如果小球的右下角y坐标大于画布宽度,则表示小球碰到了画布底部,游戏结束
  自我。hit_bottom=True
  如果self.hit_paddle(位置)==True: #判断球是否碰到了球拍,如果碰到了则使小球回弹
  自我。y=3
  如果位置[0]& lt;=0: #如果小球的左上角x坐标小于等于0,则向右移动3个像素
  自我。x=3
  如果位置[2]祝辞=自我。canvas_width: #如果小球的右下角x坐标大于等于画布宽度,则向左移动3个像素
  自我。x=3
  
  
  def hit_paddle(自我、位置):
  & # 39;& # 39;& # 39;
  该函数用于判断球是否碰到了球拍,如果碰到了则使小球回弹,否则游戏结束
  :param位置:小球的坐标
  & # 39;& # 39;& # 39;
  #获取球拍在画布的坐标,返回一个数组(两个坐标,左上角的坐标和右下角的两个坐标)
  paddle_position=self.canvas.coords (self.paddle.id)
  打印(& # 39;paddle_position: & # 39;, paddle_position [0], paddle_position [1], paddle_position [2], paddle_position [3])
  #如果小球的右下角x坐标大于等于球拍左上角x坐标,且小球左上角x坐标小于等于球拍右下角x坐标
  如果位置[2]祝辞=paddle_position[0]和[0]位置& lt;=paddle_position [2]:
  #如果小球右下角y坐标大于等于球拍左上角y坐标,且小球右下角y坐标小于等于球拍右下角坐标
  如果位置[3]祝辞=paddle_position[1]和[3]位置& lt;=paddle_position [3]:
  #横坐标等于
  自我。x +=self.paddle.x
  颜色=[& # 39;红色# 39;& # 39;绿色# 39;】
  # shuffle()方法将序列的所有元素随机排序,以便随机获得小球颜色
  random.shuffle(颜色)
  自我。颜色=颜色[0]
  #
  self.canvas.itemconfig (self.id填补=颜色[0])
  #计算得分并展示,且同时将小球的颜色,关卡颜色同步
  self.score。打击(ball_color=self.color)
  self.canvas.itemconfig (self.paddle.id填补=self.color)
  #增加或减少球拍的宽度
  self.adjust_paddle (paddle_position)
  还真
  
  返回假
  
  
  def adjust_paddle(自我,paddle_position):
  & # 39;& # 39;& # 39;
  该函数用于增加或减少球拍的宽度
  :paddle_position:球拍的位置坐标
  & # 39;& # 39;& # 39;
  #球拍每次的增量大小
  paddle_grow_length=30
  #球拍的宽度=球拍的右下角x坐标——球拍的左上角x坐标
  paddle_width=paddle_position [2]——paddle_position [0]
  如果自我。颜色==& # 39;红色# 39;:#如果当前球的颜色为红色
  如果paddle_width比;30:#如果球拍的宽度大于60
  如果paddle_position[2]祝辞=自我。canvas_width: #如果球拍右下角的x坐标大于等于画布宽度
  #球拍右下角x坐标=球拍右下角x坐标——增量的值
  paddle_position [2]=paddle_position paddle_grow_length [2]
  其他:
  #球拍的左上角x坐标=球拍的左上角x坐标+增量的值
  paddle_position [0]=paddle_position [0] + paddle_grow_length
  
  elif自我。颜色==& # 39;绿色# 39;:#如果当前球的颜色为绿色
  如果paddle_width & lt;300:#如果球拍的宽度小于300年
  如果paddle_position[2]祝辞=自我。canvas_width: #如果球拍的右下角x坐标大于等于画布宽度
  #球拍左上角x坐标——增量的值
  paddle_position [0]=paddle_position [0] - paddle_grow_length
  其他:
  #球拍右下角x坐标+增量的值
  paddle_position [2]=paddle_position [2] + paddle_grow_length
  
  
  类桨:
  & # 39;& # 39;& # 39;
  球拍类
  & # 39;& # 39;& # 39;
  def __init__(自我、画布、颜色):
  & # 39;& # 39;& # 39;
  :param帆布画布
  :param颜色:球拍的颜色
  & # 39;& # 39;& # 39;
  自我。帆布画布=# winfo_width()函数来获取画布当前的宽度,赋值给对象变量
  自我。canvas_width=self.canvas.winfo_width ()
  # winfo_height()函数来获取画布当前的高度,赋值给对象变量
  自我。canvas_height=self.canvas.winfo_height ()
  #保存tkinter画球拍时返回的id,为后期移动屏幕上的球拍做准备,
  # create_rectangle画矩形、填充为球拍的颜色
  自我。id=canvas.create_rectangle(0, 0180, 15日填=颜色)
  #将球拍移动至初始位置
  self.canvas.move(200年self.id self.canvas_height * 0.75)
  #设置对象变量x,初始值为0,也就是球拍先不移动
  自我。x=0
  #游戏是否开始,默认为误,即不开始
  自我。开始=False
  #是否继续游戏,默认值为否
  自我。continue_game=False
  #初始化时将事件的按下左键& # 39;和函数向左移动绑定
  self.canvas.bind_all (& # 39; & lt; KeyPress-Left> & # 39;, self.turn_left)
  #初始化时将事件的按下右键& # 39;和函数向右移动绑定
  self.canvas.bind_all (& # 39; & lt; KeyPress-Right> & # 39;, self.turn_right)
  #初始化时将事件的按下输入键& # 39;和函数继续游戏绑定
  self.canvas.bind_all (& # 39; & lt; KeyPress-Enter> & # 39;, self.continue_game)
  #按任意键开始游戏
  self.canvas.bind_all (& # 39; & lt; Button-1> & # 39;, self.start_game)
  #初始化时将事件的按下空格键& # 39;和函数暂停游戏绑定
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null

利用python编写一个弹球小游戏