|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
, n) Y" ]8 X& {7 B__author__ = 'ChenYan'
X( R$ _ h- D+ r' f0 y5 ]! c7 C+ X; T6 ^$ K
from random import randint
0 M6 H, S& J/ E M$ ?) Y$ [* e0 b( sfrom tkinter import *4 Y% `5 Y7 r6 D, K
, e0 N! I% j2 G
class Randball():
9 n9 o% O! N9 x% ` def __init__(self, canvas, scrnwidth, scrnheight):. g7 j y0 B8 ~
#初始化画布
* g' w1 t; G$ j7 E/ x1 e self.canvas = canvas
8 C! L2 Z* t) I, r) w #初始化球的圆心坐标% k+ J- y9 y/ u' M/ M c6 S
self.x_pos = randint(80, int(scrnwidth))
; F, w) \4 |# K. \# Z self.y_pos = randint(80, int(scrnheight))" V3 g* }9 {* T0 ~
#球移动的距离
, x; S" E7 E5 D self.x_move = 10
" s9 ^5 S, v) [* y0 p) z2 A self.y_move = 10- y, E: D# u! _( ^
#整个屏幕的宽和高
/ N) ^- ?; U) A3 }$ y: I self.scrnwidth = scrnwidth
3 }* h/ b. `4 [) [/ b, u% e self.scrnheight = scrnheight
2 r' p' p1 S) y1 G3 ~ #初始化球的半径
. E" w% {7 Z _% h; S) i' x) a self.radius = randint(40, 70)
* Y# C& x8 g. z* o2 O! Q5 { #随机产生球的颜色
7 q3 e0 s3 @% _( q, G6 v rc = lambda :randint(0,255)
`1 G( x$ y6 @7 |/ J. H self.color = '#%02x%02x%02x' % (rc(), rc(), rc())8 q( d" \3 [) e
. y- E! k& E2 R" O4 e8 G def create_ball(self):: }8 g1 {; E$ E9 k% v7 ]4 E
#计算得到用于创建球的四个坐标- m: \' N* S, v% t0 |8 Q; ~3 S
x1 = self.x_pos - self.radius
y+ K/ m8 u. N& ?8 G/ D t y1 = self.x_pos - self.radius" _# @( U v' }; r# d2 m% S% p
x2 = self.x_pos + self.radius
( \% A$ j: h0 ^2 i7 g- n4 S" S y2 = self.x_pos + self.radius. Z# ]1 u( i- ~1 e- d8 u$ |
#画球
. j5 h0 r, [! `8 |: H self.item = self.canvas.create_oval(x1, y1, x2, y2, fill=self.color, outline=self.color)
$ f5 s' O: t2 q" ^ e1 i5 I
4 [/ X9 _; A+ W$ X" Y2 _7 _ def move_ball(self):
4 O& l/ Q- S6 [- Q) z4 d4 e '''按指定的距离移动球,如果球碰到障碍向相反的方向移动'''
% t5 h+ A h' x5 A* l; ^* s& X5 K self.x_pos += self.x_move% X. F/ v' `; k* Z
self.y_pos += self.y_move: Y# L& N0 T/ g# J. I1 T8 S
' b2 D7 Z+ c5 {! Q6 R, c if self.x_pos >= self.scrnwidth - self.radius:/ z' W4 H6 l' ^' Z
self.x_move = -self.x_move
) C# ` z4 V% g7 D z% U* r if self.y_pos >= self.scrnheight - self.radius:3 w# p8 {) j/ n+ G& }8 W& {, g4 N' J
self.y_move = -self.y_move6 ]" P! E2 U/ H; s& {& S
if self.x_pos < self.radius:
5 f3 o8 l, I6 `6 `- ~& n+ N self.x_move = abs(self.x_move)
) W% z( c- F7 f9 v! a* D if self.y_pos < self.radius:
! I0 L( c1 }% L% M# N. z: T self.y_move = abs(self.y_move)
' P& ?9 _: c9 l" S0 ~, m self.canvas.move(self.item, self.x_move, self.y_move)
3 Y, w1 |$ W8 a5 w/ A; q: Z" `4 ?8 H+ ]9 s0 S
class Screensaver():' d/ r3 P4 L( N' }
balls = []( w6 Q+ s' h. T( y
def __init__(self, ball_nums):2 e, p( Z( \4 p' n' L
self.win = Tk()
0 s( ?% f0 [6 }8 {. X8 J( W self.width = self.win.winfo_screenwidth()
( @2 K& o t% V/ f/ m# E; L- S self.height = self.win.winfo_screenheight()# u4 d3 ]# [9 | X" [) d
self.win.overrideredirect(True)/ I" H1 z+ f- P5 T7 }8 j; O0 K
self.win.attributes('-alpha', 0.3)
# m1 t, h9 X- [% h4 v! P8 S3 z #绑定事件,有任何动作退出屏保
( i6 ^& _0 \2 R1 m; i self.win.bind('<Any-Button>', self.exit_screensaver)
! r& ]3 p) r; S* N& n self.win.bind('<Motion>', self.exit_screensaver)
% t! E- M2 n8 J: Y self.canvas = Canvas(self.win, width=self.width, height=self.height, bg='#00FFFF'). j' _" V: g# f; ?# d& m
self.canvas.pack()
5 u" j, V9 y. G- g7 Q+ K3 R( B& B% R6 I9 |0 C
for i in range(0,ball_nums):
, i# P5 h: k* n i& A( A- c ball = Randball(self.canvas, scrnwidth=self.width, scrnheight=self.height): ^/ [' l. s% X! C# @
ball.create_ball()
& U8 K! J# C% D+ P8 \" y self.balls.append(ball)
' a" v+ h. T) L! I @ self.run_screensaver()
+ p1 j5 F+ W' I! S self.win.mainloop()3 N( S& A, l2 ~$ w I5 \$ w
, D2 r. ?7 v2 ^8 v( h# f; b$ ~4 C3 r def run_screensaver(self):
) E: S6 g. W! W9 K0 [: [) m for ball in self.balls:. @! O. q. o+ ~) x- }+ b& k% v
ball.move_ball()* {$ l! x% N5 o5 _; B5 S
self.canvas.after(20, self.run_screensaver). c: _2 H, \" Y O
) Z- Y7 O, t5 O: R def exit_screensaver(self, event):( ]# ]& r3 c9 F; y, v' |' K
self.win.destroy()
( O- a# j' W9 _7 T' y+ c
( L" {7 I! Q% }4 {* Y4 H7 [+ h6 ?5 \ N; h
def main():
. Q' A$ [% `# | D% b! E Screensaver(15). K' V/ D0 j( }$ P$ Y h
* D% F. x7 k# X4 D7 g8 p8 G- g+ ~. n! }" W6 c# o, T. \8 ^
if __name__=='__main__':% _# n1 k% d9 V% a; h, y7 {# g
main()
" m" j" T' _2 e) S H- C复制代码 |
|