python3实现弹弹球小游戏
作者:拒绝不评论 发布时间:2021-04-21 07:12:56
标签:python,python3,弹弹球
本文实例为大家分享了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()
来源:https://blog.csdn.net/BO_0125/article/details/80921551


猜你喜欢
- 一、目标之前无意中看到有某位博主写过人像动漫化这样的文章,看着还挺好玩,所以我也想尝试一下。利用百度智能云中的人工智能,对图片进行处理达到人
- 一、前言用Java开发企业应用软件, 经常会采用Spring+MyBatis+Mysql搭建数据库框架。如果数据量很大,一个MYSQL库存储
- 本文实例为大家分享了python实现flappy bird的简单代码,供大家参考,具体内容如下import pygamefrom pygam
- 我们可以使用 asyncio.wait_for() 函数等待 asyncio 任务或协程超时完成。如果在任务完成之前超时已过,任务将被取消。
- 注释注释就是对代码的解释和说明。目的是为了让别人和自己很容易看懂。为了让别人一看就知道这段代码是做什么用的。正确的程序注释一般包括序言性注释
- 1.字符串函数 长度与分析用 datalength(Char_expr) 返回字符串包含字符数,但不包含后面的空格 substring(ex
- MySQL 目前的最新版本是 5.7.11,在 Linux 下提供特定发行版安装包(如 .rpm)以及二进制通用版安装包(.tar.gz)。
- Jupyter Notebook 的快捷键使用前需要进行安装:pip install jupyter (前提是你已经安装好Python,并将
- 对模型中的字段进行验证Django模型中的内置字段验证是所有Django字段预定义的默认验证。每个字段都带有来自Django验证器的内置验证
- 回顾装饰器的基本用法装饰器的本质是闭包,是python的一种语法糖def outer(fun): def inne
- 打印100-999之间的回文数(即百位和个位的数字相等),并每10个打印一行i = 100x = 0 # 使用计数器,每10个换行打印whi
- 问题初始化数据库时mysqld --initialize --user mysql报错:mysqld: error while loadin
- getpwname只能得到gid一个username。import pwdmyGroupId = pwd.getpwnam(username
- 1、爬取网页分析爬取的目标网址为:https://www.gushiwen.cn/在登陆界面需要做的工作有,获取验证码图片,并识别该验证码,
- 现在市场上的OA基本上可归结为两大阵营,即php阵营和java阵营。但对接触Oa不久的用户来说,看到的往往只是它们的表相,只是明显的价格差异
- 1.打包项目期间遇到的坑,提前说下,避免重复工作。1.1打包的app出现白屏。出现原因:路径不对,需要改config\index.js解决办
- 引言:刚学python好几天了,从java到python,基础学起来确实比较容易,语法掌握,基本概念上都比较容易入脑。唯一比较郁闷的是老想着
- Bootstrap提供了四种用于<img>类的样式,分别是:.img-rounded:圆角 (IE8 不支持),添加 borde
- 1.阈值化分割原理通过对图像的灰度直方图进行数学统计,选择一个或多个阈值将像素划分为若干类。一般情况下,当图像由灰度值相差较大的目标和背景组
- 尾递归简介尾递归是函数返回最后一个操作是递归调用,则该函数是尾递归。递归是线性的比如factorial函数每一次调用都会创建一个新的栈(la