码迷,mamicode.com
首页 > 编程语言 > 详细

Interactive Programming in Python Week7 Code style

时间:2014-11-05 10:28:18      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   ar   os   for   sp   div   

 1 def draw(c):
 2     global paddle1_pos, paddle2_pos
 3     
 4     paddle_width = 80
 5 
 6     if paddle_width/2 <= paddle1_pos + paddle1_vel <= width - paddle_width/2:
 7         paddle1_pos += paddle1_vel
 8     if paddle_width/2 <= paddle2_pos + paddle2_vel <= width - paddle_width/2:
 9         paddle2_pos += paddle2_vel
10         
11     c.draw_line([width/2, 0],[width/2, height], 1, "White")
12     
13     c.draw_line([4, paddle1_pos-paddle_width/2], [4, paddle1_pos+paddle_width/2], 4, "White")
14     c.draw_line([width-4, paddle2_pos-paddle_width/2], [width-4, paddle2_pos+paddle_width/2], 4, "White")

week 4 项目pong中绘制滑板以及模拟其移动的语句,注意if语句(控制滑板不移动出画布范围)里的变量是pos+vel,即要保持更新后的状态在画布内。

现在通过引入paddle class 来使代码风格更为简练。

 1 class Paddle:
 2     def __init__(self, loc, pos, vel):
 3         self.loc = loc
 4         self.pos = pos
 5         self.vel = vel
 6         self.width = 80
 7     
 8     def move(self):
 9         if self.width/2 <= self.pos + self.vel <= width - self.width/2:
10             self.pos += self.vel
11             
12     def draw(c, self):
13         c.draw_line([self.loc, self.pos-self.width / 2], PADDLE_THICKNESS, "White")
14 
15 def draw(c):
16     paddle1.move()
17     paddle2.move()
18         
19     c.draw_line([width / 2, 0],[width / 2, height], 1, "White")
20     
21     paddle1.draw(c)
22     paddle2.draw(c)

对于原来的key handler(响应键盘的function),原来的code

 1 def keydown(key):
 2     global paddle1_vel, paddle2_vel
 3     if key == simplegui.KEY_MAP["up"]:
 4         paddle2_vel -= 2
 5     elif key == simplegui.KEY_MAP["down"]:
 6         paddle2_vel += 2
 7     elif key == simplegui.KEY_MAP["w"]:
 8         paddle1_vel -= 2
 9     elif key == simplegui.KEY_MAP["s"]:
10         paddle1_vel += 2

引入Dictionary 和一个iteration,即

1 inputs = {"up": [1, -2],
2           "down": [1, 2],
3           "w": [0, -2],
4           "s": [0, 2]}
5 
6 def keydown(key):
7     for i in inputs:
8         if key == simplegui.KEY_MAP[i]:
9             paddle_vel[inputs[i][0]] += inputs[i][1]

初看起来有些复杂 ,但是若看清inputs[i]的含义就瞬间通畅,比如当i是up时,inputs[i]代表[1,-2],所以inputs[i][0]就是1,input[i][1]则是-2

所以最后一条语句 代表 paddle_vel[1] += -2 即paddle1的速度变成朝上的2.

 

最后一条 ,尽量用通过变量间的关系来简化代码,尽量不用magic costant(满篇都是用手算出来的数字)

Interactive Programming in Python Week7 Code style

标签:style   blog   io   color   ar   os   for   sp   div   

原文地址:http://www.cnblogs.com/jiawengenius/p/4075509.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!