作业week4 Pong!
来源:互联网 发布:山西软件开发公司 编辑:程序博客网 时间:2024/05/22 03:07
#!/usr/bin/env python# -*- coding: utf-8 -*-"""__title__ = 'Pong'__author__ = 'Steve'__mtime__ = '2017/9/27'"""# Impelementation of classic arcade game Pongimport SimpleGUICS2Pygame.simpleguics2pygame as simpleguiimport random# initialize globals - pos and vel encode vertical info for paddlesWIDTH = 600HEIGHT = 400BALL_RADIUS = 20PAD_WIDTH = 8PAD_HEIGHT = 80HALF_PAD_WIDTH = PAD_WIDTH / 2HALF_PAD_HEIGHT = PAD_HEIGHT / 2LEFT = FalseRIGHT = Trueball_vel = [0, 0]ball_pos = [0, 0]paddle1_pos = HEIGHT / 2 - HALF_PAD_HEIGHTpaddle2_pos = HEIGHT / 2 - HALF_PAD_HEIGHTpaddle1_vel = 0paddle2_vel = 0score1 = 0score2 = 0# initialize ball_pos and ball_vel for new bal in middle of table# if direction is RIGHT, the ball's velocity is upper right, else upper leftdef spawn_ball(direction): global ball_pos, ball_vel # these are vectors stored as lists ball_pos = [WIDTH / 2, HEIGHT / 2] ball_vel = [random.randrange(3, 5), random.randrange(1, 5)] if direction == LEFT: ball_vel[0] = -ball_vel[0]# define event handlersdef new_game(): global paddle1_pos, paddle2_pos, paddle1_vel, paddle2_vel # these are numbers global score1, score2 # these are ints score1 = 0 score2 = 0 spawn_ball(random.choice([LEFT, RIGHT]))def draw(c): global score1, score2, paddle1_pos, paddle2_pos, ball_pos, ball_vel, paddle1_vel, paddle2_vel # draw mid line and gutters c.draw_line([WIDTH / 2, 0], [WIDTH / 2, HEIGHT], 1, "White") c.draw_line([PAD_WIDTH, 0], [PAD_WIDTH, HEIGHT], 1, "White") c.draw_line([WIDTH - PAD_WIDTH, 0], [WIDTH - PAD_WIDTH, HEIGHT], 1, "White") if score1 < 5 and score2 < 5: # 先得5分获胜 # update ball ball_pos[0] += ball_vel[0] ball_pos[1] += ball_vel[1] if (ball_pos[1] <= BALL_RADIUS) or (ball_pos[1] >= HEIGHT - BALL_RADIUS): ball_vel[1] = -ball_vel[1] if ball_pos[0] <= BALL_RADIUS: if paddle1_pos <= ball_pos[1] <= paddle1_pos + PAD_HEIGHT: ball_vel[0] = -ball_vel[0] ball_vel[0] = ball_vel[0] * 1.1 ball_vel[1] = ball_vel[1] * 1.1 else: spawn_ball(LEFT) score2 += 1 elif ball_pos[0] >= WIDTH - BALL_RADIUS - 1: if paddle2_pos <= ball_pos[1] <= paddle2_pos + PAD_HEIGHT: ball_vel[0] = -ball_vel[0] ball_vel[0] = ball_vel[0] * 1.1 ball_vel[1] = ball_vel[1] * 1.1 else: spawn_ball(RIGHT) score1 += 1 # draw ball c.draw_circle(ball_pos, BALL_RADIUS, 1, "Grey", "White") else: if score1 >= 5: winner = "The left player wins!" else: winner = "The right player wins!" c.draw_polygon([[WIDTH / 2 - 150, HEIGHT / 2 - 100], [WIDTH / 2 + 150, HEIGHT / 2 - 100], [WIDTH / 2 + 150, HEIGHT / 2 - 50], [WIDTH / 2 - 150, HEIGHT / 2 - 50]], 5, "Red", "White") c.draw_text(winner, [WIDTH / 2 - 115, HEIGHT / 2 - 70], 30, "Red") # update paddle's vertical position, keep paddle on the screen paddle1_pos += paddle1_vel paddle2_pos += paddle2_vel if paddle1_pos <= 0 or paddle1_pos >= HEIGHT - PAD_HEIGHT: paddle1_vel = 0 if paddle2_pos <= 0 or paddle2_pos >= HEIGHT - PAD_HEIGHT: paddle2_vel = 0 # draw paddles c.draw_polygon([[0, paddle1_pos], [PAD_WIDTH, paddle1_pos], [PAD_WIDTH, paddle1_pos + PAD_HEIGHT],[0, paddle1_pos + PAD_HEIGHT]], 1, "White", "White") c.draw_polygon([[WIDTH - PAD_WIDTH, paddle2_pos], [WIDTH, paddle2_pos], [WIDTH, paddle2_pos + PAD_HEIGHT], [WIDTH - PAD_WIDTH, paddle2_pos + PAD_HEIGHT]], 1, "White", "White") # draw scores c.draw_text((str(score1) + " " + str(score2)), [WIDTH / 2 - 100, HEIGHT / 2 + 20], 80, "White")def keydown(key): global paddle1_vel, paddle2_vel vel = 5 if key == simplegui.KEY_MAP['w']: paddle1_vel = -vel elif key == simplegui.KEY_MAP['s']: paddle1_vel = vel elif key == simplegui.KEY_MAP['up']: paddle2_vel = -vel elif key == simplegui.KEY_MAP['down']: paddle2_vel = veldef keyup(key): global paddle1_vel, paddle2_vel if key == simplegui.KEY_MAP['w']: paddle1_vel = 0 elif key == simplegui.KEY_MAP['s']: paddle1_vel = 0 elif key == simplegui.KEY_MAP['up']: paddle2_vel = 0 elif key == simplegui.KEY_MAP['down']: paddle2_vel = 0def resetgame(): new_game()# create frameframe = simplegui.create_frame("Pong", WIDTH, HEIGHT)frame.set_draw_handler(draw)frame.set_keyup_handler(keyup)frame.set_keydown_handler(keydown)button_res = frame.add_button("Reset", resetgame, 200)# start framenew_game()frame.start()
阅读全文
0 0
- 作业week4 Pong!
- week4 编程作业 回顾
- 【算法设计作业】week4
- WEEK4 JAVA 作业
- WEEK4 C 作业
- 作业笔记:现操week4
- 斯坦福Machine Learning Week4总结(包括作业)
- week4
- Coursera机器学习 week4 神经网络的表示 编程作业代码
- 机器学习作业之 Multi-class Classification and Neural Networks(week4)
- Stanford 机器学习 Week4 作业 Multi-class Classification and Neural Networks
- [Coursera机器学习]Multi-class Classication and Neural Networks WEEK4编程作业
- [机器学习]week4编程作业:Multi-class Classification and Neural Networks
- An Introduction to Interactive Programming in Python 第四课作业 Pong
- POMM-week4
- FERMI-week4
- week4-4
- 周报week4
- JVM——深入解析之原理和运行机制
- 向小米学习android系统开发
- HDU 4609 3-idiots FFT入门
- java
- MacOS 开发
- 作业week4 Pong!
- redis安装及配置密码
- 洛谷 P2835 刻录光盘
- (一)How to Do Linear Regression using Gradient Descent
- 打开指定路径程序
- 解决 PHP 报错问题:Call to undefined function mysql_connect()
- Java8 I/O源码-InputStream
- solrCloud6.6集群搭建
- opencv绘图操作