python利用simplguitk方向键控制小球并且小球碰壁停止
时间: 2023-07-21 18:06:55 浏览: 126
好的,下面是一个示例代码,可以实现利用simplguitk方向键控制小球移动,并且当小球碰到窗口边缘时停止运动:
```python
import simplegui
# 初始化小球位置和速度
ball_pos = [50, 50]
ball_vel = [0, 0]
# 定义画布大小
CANVAS_WIDTH = 500
CANVAS_HEIGHT = 500
# 定义小球半径
BALL_RADIUS = 20
# 定义小球速度增量
BALL_VEL_INC = 1
# 定义键盘按下事件处理函数
def keydown_handler(key):
global ball_vel
if key == simplegui.KEY_MAP['left']:
ball_vel[0] -= BALL_VEL_INC
elif key == simplegui.KEY_MAP['right']:
ball_vel[0] += BALL_VEL_INC
elif key == simplegui.KEY_MAP['up']:
ball_vel[1] -= BALL_VEL_INC
elif key == simplegui.KEY_MAP['down']:
ball_vel[1] += BALL_VEL_INC
# 定义键盘松开事件处理函数
def keyup_handler(key):
global ball_vel
if key == simplegui.KEY_MAP['left']:
ball_vel[0] += BALL_VEL_INC
elif key == simplegui.KEY_MAP['right']:
ball_vel[0] -= BALL_VEL_INC
elif key == simplegui.KEY_MAP['up']:
ball_vel[1] += BALL_VEL_INC
elif key == simplegui.KEY_MAP['down']:
ball_vel[1] -= BALL_VEL_INC
# 定义画布绘制函数
def draw(canvas):
global ball_pos, ball_vel
# 更新小球位置
ball_pos[0] += ball_vel[0]
ball_pos[1] += ball_vel[1]
# 如果小球碰到窗口边缘,则停止运动
if ball_pos[0] - BALL_RADIUS < 0 or ball_pos[0] + BALL_RADIUS > CANVAS_WIDTH:
ball_vel[0] = 0
if ball_pos[1] - BALL_RADIUS < 0 or ball_pos[1] + BALL_RADIUS > CANVAS_HEIGHT:
ball_vel[1] = 0
# 绘制小球
canvas.draw_circle(ball_pos, BALL_RADIUS, 2, "Red", "White")
# 创建画布并绑定事件处理函数
frame = simplegui.create_frame("Ball Control", CANVAS_WIDTH, CANVAS_HEIGHT)
frame.set_draw_handler(draw)
frame.set_keydown_handler(keydown_handler)
frame.set_keyup_handler(keyup_handler)
# 启动画布
frame.start()
```
在这个示例代码中,我们利用了SimpleGUI库,创建了一个画布,并在画布上绘制了一个小球。我们通过```keydown_handler```和```keyup_handler```两个函数来处理键盘按下和松开事件,根据按键的不同,我们修改小球的速度向量。在```draw```函数中,我们根据小球当前的速度更新小球的位置,并检查小球是否碰到了窗口边缘。如果小球碰到了窗口边缘,则停止小球的运动。最后,我们在画布上绘制小球。
希望这个示例代码对你有所帮助。
阅读全文