泡泡屏保
import random
import tkinter
'''
要求,
1 建立屏保程序,
2. 屏保是隨機球,自己運動
3. 鼠標移動則清除分析:
1, 需要一個ScreenSaver類,一個Ball的類
2. ScreenSaver:1.1: 需要一個canvas, 大小與屏幕一致1.2:程序已啟動,就開始在屏幕上畫小球,小球位置隨機,會動,速度,方向隨機1.3: 鼠標一移動,則程序退出1.4: 多少個小球,建議允許輸入
2. RandomBall:2.1: 大小,顏色,出現位置,運動方向,速度,完全隨機2.2: 球就有移動功能,可以被調用
'''class RandomBall:def __init__(self, canvas, scrnwidth, scrnheight):self.canvas = canvasself.xpos = random.randint(10, int(scrnwidth))self.ypos = random.randint(10, int(scrnheight))self.xvelocity = random.randint(4,20)self.yvelocity = random.randint(4,20)self.scrnwidth = scrnwidthself.scrnheight = scrnheightself.radius = random.randint(20,120)c = lambda : random.randint(0,255)self.color = '#%02x%02x%02x'%(c(),c(),c())def create_ball(self):x1 = self.xpos - self.radiusy1 = self.ypos - self.radiusx2 = self.xpos + self.radiusy2 = self.ypos + self.radiusself.item = self.canvas.create_oval(x1,y1,x2,y2, fill=self.color, outline=self.color)def move_ball(self):self.xpos += self.xvelocityself.ypos += self.yvelocityif self.ypos >= self.scrnheight - self.radius:self.yvelocity = - self.yvelocityif self.ypos <= self.radius:self.yvelocity = abs(self.yvelocity)if self.xpos >= self.scrnwidth - self.radius or self.xpos <= self.radius:self.xvelocity = - self.xvelocityself.canvas.move(self.item, self.xvelocity, self.yvelocity)class ScreenSaver:balls = []def __init__(self,num_balls):self.root = tkinter.Tk()# 取消邊框self.root.overrideredirect(1)# 任何鼠標移動self.root.bind('<Motion>', self.myquit)w,h = self.root.winfo_screenwidth(), self.root.winfo_screenheight()self.canvas = tkinter.Canvas(self.root, width=w, height=h )self.canvas.pack()for i in range(num_balls ):ball = RandomBall(self.canvas, scrnwidth=w, scrnheight=h)ball.create_ball()self.balls.append(ball)self.run_screen_saver()self.root.mainloop()def run_screen_saver(self):for ball in self.balls:ball.move_ball()self.canvas.after(200, self.run_screen_saver)def myquit(self,event):self.root.destroy()if __name__ == "__main__":ScreenSaver(12)
總結
- 上一篇: 2018年研究生数学建模优秀论文汇总
- 下一篇: 基于改进注意力机制的U-Net模型实现及