python3实现弹弹球小游戏


Posted in Python onNovember 25, 2019

本文实例为大家分享了python3实现弹弹球小游戏的具体代码,供大家参考,具体内容如下

from tkinter import *
from tkinter import messagebox
import random
import time
from PIL import Image, ImageTk
import sys
 
 
class Game:
  def __init__(self):
    self.tk = Tk()
    self.times = 0
    sw = self.tk.winfo_screenwidth()
    sh = self.tk.winfo_screenheight()
    image = Image.open(r'02.jpg')
    background_image = ImageTk.PhotoImage(image)
    ww = background_image.width()
    wh = background_image.height()
    x = (sw-ww)/2
    y = (sh-wh)/2
    self.tk.geometry("%dx%d+%d+%d" % (ww, wh, x, y))
    self.tk.title('欢迎进入弹弹弹')
    background_label = Label(self.tk, image=background_image)
    background_label.place(x=0, y=0, relwidth=1, relheight=1)
    self.tk.resizable(False, False)
    self.tk.wm_attributes("-topmost", 1) # at top
    btn1 = Button(self.tk, text='减少难度', background='#FFFF67',
           activebackground='#3EC23B', command=self.test1)
    btn2 = Button(self.tk, text='增加难度', background='#FFFF67',
           activebackground='#3EC23B', command=self.test2)
 
    btn1.place(x=380, y=10, width=80, height=30)
    btn2.place(x=500, y=10, width=80, height=30)
    self.canvas = Canvas(self.tk, width=500, height=400,
               bd=0, highlightthickness=0, background='#FFFFFF')
    self.canvas.place(x=190, y=90, width=500, height=400)
 
    self.tk.update()
    self.xunhuan()
 
  def xunhuan(self):
    try:
      paddle = Paddle(self.canvas, 'green', 100)
      ball = Ball(self.canvas, paddle, '#D11C43', 0)
      while True:
        if ball.hit_bottom == False:
          ball.draw()
          paddle.draw()
        else:
          b = messagebox.askyesno(
            '失败', message="您的分数为:" + str(ball.score)+"\n是否重新开始游戏?")
          if bool(b) is True:
            paddle.canvas.delete(paddle.id)
            self.sever()
          else:
            sys.exit()
        self.tk.update_idletasks()
        self.tk.update()
        time.sleep(0.01+self.times)
    except:
      sys.exit('游戏已退出!')
 
  def sever(self):
    self.xunhuan()
 
  def test1(self):
    self.times += 0.001
 
  def test2(self):
    self.times -= 0.001
 
 
class Ball:
  def __init__(self, canvas, paddle, color, score):
    self.score = 0
    self.canvas = canvas
    self.paddle = paddle
    self.id = canvas.create_oval(
      20, 20, 35, 35, fill=color, outline='green')
    self.canvas.move(self.id, 245, 100)
    startx = [-3, -2, -1, 1, 2, 3]
    random.shuffle(startx)
    self.x = startx[0]
    self.y = -3
    self.canvas_height = self.canvas.winfo_height()
    self.canvas_width = self.canvas.winfo_width()
    self.hit_bottom = False
    b = messagebox.askyesno('game', '游戏是否开始?')
    if bool(b) is True:
      self.draw()
    else:
      sys.exit()
 
  def draw(self):
    self.canvas.move(self.id, self.x, self.y)
    pos = self.canvas.coords(self.id)
    if pos[1] <= 0 or self.hit_paddle(pos) == True:
      self.y = -self.y
    if pos[0] <= 0 or pos[2] >= self.canvas_width:
      self.x = -self.x
    if pos[3] >= self.canvas_height:
      self.hit_bottom = True
 
  def hit_paddle(self, pos):
    paddle_pos = self.canvas.coords(self.paddle.id)
    if pos[2] >= paddle_pos[0] and pos[0] <= paddle_pos[2]:
      if pos[3] >= paddle_pos[1] and pos[3] <= paddle_pos[3]:
        self.score += 1
        return True
    return False
 
 
class Paddle:
  def __init__(self, canvas, color, width):
    self.canvas = canvas
    self.id = canvas.create_rectangle(0, 0, width, 10, fill=color)
    self.x = 0
    self.y = 0
    self.canvas.move(self.id, 200, 300)
    self.canvas_width = self.canvas.winfo_width()
    self.canvas.bind_all("<Key-Left>", self.turn_left)
    self.canvas.bind_all("<Key-Right>", self.turn_right)
 
  def draw(self):
    pos = self.canvas.coords(self.id)
    if pos[0] + self.x >= 0 and pos[2] + self.x <= self.canvas_width:
      self.canvas.move(self.id, self.x, 0)
 
  def turn_left(self, event):
    self.x = -4
 
  def turn_right(self, event):
    self.x = 4
 
 
def main():
  game = Game()
 
 
if __name__ == '__main__':
  main()

python3实现弹弹球小游戏

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
Jun 10 Python
Python每天必学之bytes字节
Jan 28 Python
python django使用haystack:全文检索的框架(实例讲解)
Sep 27 Python
利用numpy实现一、二维数组的拼接简单代码示例
Dec 15 Python
详解django中url路由配置及渲染方式
Feb 25 Python
python:按行读入,排序然后输出的方法
Jul 20 Python
用python画一只可爱的皮卡丘实例
Nov 21 Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
Dec 18 Python
Selenium启动Chrome时配置选项详解
Mar 18 Python
keras绘制acc和loss曲线图实例
Jun 15 Python
Linux系统下升级pip的完整步骤
Jan 31 Python
Django框架中表单的用法
Jun 10 Python
python数据化运营的重要意义
Nov 25 #Python
python实现拉普拉斯特征图降维示例
Nov 25 #Python
python模块hashlib(加密服务)知识点讲解
Nov 25 #Python
Python3如何对urllib和urllib2进行重构
Nov 25 #Python
python pygame实现球球大作战
Nov 25 #Python
Python内置加密模块用法解析
Nov 25 #Python
python使用pygame实现笑脸乒乓球弹珠球游戏
Nov 25 #Python
You might like
PHP 查找字符串常用函数介绍
2012/06/07 PHP
深入分析php之面向对象
2013/05/15 PHP
ThinkPHP2.x防范XSS跨站攻击的方法
2015/09/25 PHP
Yii2超好用的日期和时间组件(值得收藏)
2016/05/05 PHP
分享PHP-pcntl 实现多进程代码
2016/09/30 PHP
php图片裁剪函数
2018/10/31 PHP
Laravel如何创建服务器提供者实例代码
2019/04/15 PHP
利用javascript实现一些常用软件的下载导航
2009/08/03 Javascript
中国地区三级联动下拉菜单效果分析
2012/11/15 Javascript
js对象与打印对象分析比较
2013/04/23 Javascript
JavaScript获得url查询参数的方法
2015/07/02 Javascript
解析Node.js异常处理中domain模块的使用方法
2016/02/16 Javascript
ES6生成器用法实例分析
2017/04/10 Javascript
解决Vue2.0自带浏览器里无法打开的原因(兼容处理)
2017/07/28 Javascript
react 应用多入口配置及实践总结
2018/10/17 Javascript
一次Webpack配置文件的分离实战记录
2018/11/30 Javascript
Django+vue跨域问题解决的详细步骤
2019/01/20 Javascript
Vue数字输入框组件示例代码详解
2020/01/15 Javascript
js实现盒子拖拽动画效果
2020/08/09 Javascript
举例讲解Python设计模式编程中对抽象工厂模式的运用
2016/03/02 Python
Python模拟三级菜单效果
2017/09/11 Python
Python2.X/Python3.X中urllib库区别讲解
2017/12/19 Python
使用python 3实现发送邮件功能
2018/06/15 Python
Python实现多线程/多进程的TCP服务器
2019/09/03 Python
python中seaborn包常用图形使用详解
2019/11/25 Python
Python爬虫之Selenium警告框(弹窗)处理
2020/12/04 Python
详解如何用canvas画一个微笑的表情
2019/03/14 HTML / CSS
澳大利亚手表品牌:Time IV Change
2018/10/06 全球购物
shallow copy和deep copy的区别
2016/05/09 面试题
元旦促销方案
2014/03/15 职场文书
专题组织生活会方案
2014/06/15 职场文书
学校社会实践活动总结
2014/07/03 职场文书
超市周年庆活动方案
2014/08/16 职场文书
安全事故隐患排查治理制度
2015/08/05 职场文书
Go语言基础map用法及示例详解
2021/11/17 Golang
Java中Quartz高可用定时任务快速入门
2022/04/03 Java/Android