拍3游戏python_python3实现弹弹球小游戏

news/2024/7/23 9:49:25 标签: 拍3游戏python

本文实例为大家分享了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("", self.turn_left)

self.canvas.bind_all("", 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()

20191125143734188.jpg

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

本文标题: python3实现弹弹球小游戏

本文地址: http://www.cppcns.com/jiaoben/python/288602.html


http://www.niftyadmin.cn/n/867852.html

相关文章

mysql standby_standby数据库的一些笔记

使用LGWR 进程的SYNC 方式alter system set log_archive_dest_2 SERVICEST LGWR SYNC NET_TIMEOUT30 scopeboth;alter system set log_archive_dest_2 SERVICEST LGWR SYNC AFFIRM NET_TIMEOUT30 scopeboth;使用LGWR进程的ASYNC 方式alter system set log_archive_dest…

git原理解密

前言 近几年技术发展十分迅猛&#xff0c;让部分同学养成了一种学习知识停留在表面&#xff0c;只会调用一些指令的习惯。我们时常有一种“我会用这个技术、这个框架”的错觉&#xff0c;等到真正遇到问题&#xff0c;才发现事情没有那么简单。 而Git也是一个大部分人都知道如…

mysql导入微信小程序云开发_微信小程序-云开发数据库上传json文件

小程序新增了云开发功能&#xff0c;对于个人开发者是个利好消息。可以省去购买服务器&#xff0c;购买域名以及繁琐配置等步骤&#xff0c;减轻了开发者的负担。至于如何云开发我就不在这里赘述了&#xff0c;请移步微信小程序云开发官方文档&#xff0c;说的很清楚。这篇文章…

tars cpp项目开发流程

1.安装依赖环境 软件 软件要求 linux内核版本: 2.6.18及以上版本 gcc版本: 4.8 及以上版本、glibc-devel bison工具版本: 2.5及以上版本 flex工具版本: 2.5及以上版本 cmake版本&#xff1a; 2.8.8及以上版本 mysql版…

python 映射关系_研究Python的ORM框架中的SQLAlchemy库的映射关系

研究Python的ORM框架中的SQLAlchemy库的映射关系来源&#xff1a;中文源码网 浏览&#xff1a; 次 日期&#xff1a;2018年9月2日研究Python的ORM框架中的SQLAlchemy库的映射关系 前面介绍了关于用户账户的User表&#xff0c;但是现实生活中随着问题的复杂化数据库存储的…

java对象反序列化_java对象序列化和反序列化

一.序列化和反序列化(1)序列化&#xff1a;将内存中的对象转化为字节序列&#xff0c;用于持久化到磁盘中或者通过网络传输。对象序列化的最主要的用处就是传递和保存对象&#xff0c;保证对象的完整性和可传递性。序列化是把对象转换成有序字节流&#xff0c;以便在网络上传输…

继承和覆盖 java_JAVA中的继承和覆盖

java里面的继承是子类继承父类的一些方法和属性(除private属性和方法之外)&#xff1b;对于父类的私有属性和方法子类是没有继承的&#xff1b;但是要想子类也能访问到父类的私有属性&#xff0c;必须给私有属性以外界访问的方法接口。package com.PengRong;public class Demo …

java cpu psu_Java CPU 和 PSU 版本解释

Java CPU 和 PSU 版本解释 2014 年 10 月 14 日从 2014 年 10 月发布 Java SE 7 Update 71 (Java SE 7u71) 开始&#xff0c;Oracle 将在发布重要补丁更新 (CPU) 的同时发布相应的 Java SE 7 补丁集更新 (PSU)。我应当选择哪个 Java 版本&#xff1a;CPU 还是 PSU&#xff1f;O…