coursera-miniproject Pang任务总结
球是纯白的,板子也是纯白的。球已经画出来了,但是加了几个全局变量(球的位置,球的初速度)
# Implementation of classic arcade game Pong import simplegui
import random # initialize globals - pos and vel encode vertical info for paddles
WIDTH = 600
HEIGHT = 400
BALL_RADIUS = 20
PAD_WIDTH = 8
PAD_HEIGHT = 80
HALF_PAD_WIDTH = PAD_WIDTH / 2
HALF_PAD_HEIGHT = PAD_HEIGHT / 2
LEFT = False
RIGHT = True
ball_pos = [WIDTH / 2, HEIGHT / 2]#需要么?
vel = [-3, -1]#需要么?
paddle1_pos = 200#建议是数字不是list
paddle2_pos = 200
paddle1_vel = 0#建议是数字不是list
paddle2_vel = 0
soccera = 0
soccerb = 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 left
def spawn_ball(direction):
global ball_pos, vel # these are vectors stored as lists
#产生球的函数,功能是给一个初始位置和初始速度
if direction == RIGHT:#True和FALSE是啥?
vel[0] = random.randrange(2, 4)#速度有问题?太快了?
vel[1] = - random.randrange(1, 3)
ball_pos = [300, 200] if direction == LEFT:
vel[0] = - random.randrange(2, 4)
vel[1] = - random.randrange(1, 3)
ball_pos = [300, 200] # define event handlers
def new_game():
global paddle1_pos, paddle2_pos, paddle1_vel, paddle2_vel # these are numbers
global soccera, soccerb # these are ints
soccera = 0
soccerb = 0
paddle1_pos = 200
paddle2_pos = 200
paddle1_vel = 0
paddle2_vel = 0
spawn_ball(RIGHT) def draw(canvas):
global score1, score2, paddle1_pos, paddle2_pos, ball_pos, vel, soccera, soccerb
# draw mid line and gutters
canvas.draw_line([WIDTH / 2, 0],[WIDTH / 2, HEIGHT], 1, "White")
canvas.draw_line([PAD_WIDTH, 0],[PAD_WIDTH, HEIGHT], 1, "White")
canvas.draw_line([WIDTH - PAD_WIDTH, 0],[WIDTH - PAD_WIDTH, HEIGHT], 1, "White")
# update ball
ball_pos[0] += vel[0]
ball_pos[1] += vel[1]
#撞击上下墙壁反弹
if ball_pos[1] <= BALL_RADIUS:
vel[1] = - vel[1]
elif ball_pos[1] >= HEIGHT - 1 - BALL_RADIUS:
vel[1] = - vel[1]
#球撞击gutter后要复位游戏,调用spawn_ball
elif ball_pos[0] <= BALL_RADIUS + PAD_WIDTH and paddle1_pos - 40 <= ball_pos[1] <= paddle1_pos + 40:
vel[0] = - vel[0] * 1.1
vel[1] = vel[1] * 1.1
elif ball_pos[0] >= WIDTH - 1 - BALL_RADIUS - PAD_WIDTH and paddle2_pos - 40 <= ball_pos[1] <= paddle2_pos + 40:
vel[0] = - vel[0] * 1.1
vel[1] = vel[1] * 1.1
elif ball_pos[0] <= BALL_RADIUS + PAD_WIDTH and ball_pos[1] < paddle1_pos - 40:
spawn_ball(RIGHT)
soccerb += 1
elif ball_pos[0] <= BALL_RADIUS + PAD_WIDTH and ball_pos[1] > paddle1_pos + 40:
spawn_ball(RIGHT)
soccerb += 1
elif ball_pos[0] >= WIDTH - 1 - BALL_RADIUS - PAD_WIDTH and ball_pos[1] < paddle2_pos - 40:
spawn_ball(LEFT)
soccera += 1
elif ball_pos[0] >= WIDTH - 1 - BALL_RADIUS - PAD_WIDTH and ball_pos[1] > paddle2_pos + 40:
spawn_ball(LEFT)
soccera += 1
# draw ball
canvas.draw_circle(ball_pos, BALL_RADIUS, 2, "White", "White")
# update paddle's vertical position, keep paddle on the screen
paddle1_pos += paddle1_vel
if paddle1_pos <= 40:
paddle1_pos = 40
elif paddle1_pos >= 360:
paddle1_pos = 360 paddle2_pos += paddle2_vel
if paddle2_pos <= 40:
paddle2_pos = 40
elif paddle2_pos >= 360:
paddle2_pos = 360
# draw paddles
canvas.draw_line([0, paddle1_pos], [8, paddle1_pos], 80, "White")
canvas.draw_line([592,paddle2_pos], [600, paddle2_pos], 80, "White")
# draw scores
canvas.draw_text(str(soccera), [140, 100], 50, "White")
canvas.draw_text(str(soccerb), [450, 100], 50, "White")
def keydown(key):
global paddle1_vel, paddle2_vel
if key == simplegui.KEY_MAP["w"]:
paddle1_vel -= 4
elif key == simplegui.KEY_MAP["s"]:
paddle1_vel += 4
elif key == simplegui.KEY_MAP["up"]:
paddle2_vel -= 4
elif key == simplegui.KEY_MAP["down"]:
paddle2_vel += 4 def 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 = 0
# create frame
frame = simplegui.create_frame("Pong", WIDTH, HEIGHT)
frame.set_draw_handler(draw)
frame.set_keydown_handler(keydown)
frame.set_keyup_handler(keyup)
frame.add_button("Restart", new_game,100) # start frame
new_game()
frame.start()
多年以后,我会看到我的挣扎
coursera-miniproject Pang任务总结的更多相关文章
- Coursera,Udacity,Edx 课程列表(更新ing)
Coursera,Udacity,Edx 课程列表(更新ing) Coursera有很多特别好的课程,平时没有机会听到国外大牛的课程,通过Coursera算是可以弥补一下吧,国外的课程普遍比国内的老师 ...
- Coursera上一个不错的Java课
地址:https://www.coursera.org/learn/java-chengxu-sheji/home/welcome 复习天昏地暗,看点视频调剂一下.发现这个讲的还是很不错的.北大毕竟比 ...
- Coursera系列-R Programming第二周
博客总目录,记录学习R与数据分析的一切:http://www.cnblogs.com/weibaar/p/4507801.html --- 好久没发博客 且容我大吼一句 终于做完这周R Progra ...
- Coursera系列-R Programming第三周-词法作用域
完成R Programming第三周 这周作业有点绕,更多地是通过一个缓存逆矩阵的案例,向我们示范[词法作用域 Lexical Scopping]的功效.但是作业里给出的函数有点绕口,花费了我们蛮多心 ...
- Coursera Robotics系列课心得
Robotics Perception Professor Kostas and Jianbo Shi week 1: camera model 凸透镜成像原理:凸透镜焦点与焦距是固定的,这是物理性质 ...
- coursera机器学习-聚类,降维,主成分分析
#对coursera上Andrew Ng老师开的机器学习课程的笔记和心得: #注:此笔记是我自己认为本节课里比较重要.难理解或容易忘记的内容并做了些补充,并非是课堂详细笔记和要点: #标记为<补 ...
- coursera机器学习-支持向量机SVM
#对coursera上Andrew Ng老师开的机器学习课程的笔记和心得: #注:此笔记是我自己认为本节课里比较重要.难理解或容易忘记的内容并做了些补充,并非是课堂详细笔记和要点: #标记为<补 ...
- coursera机器学习笔记-建议,系统设计
#对coursera上Andrew Ng老师开的机器学习课程的笔记和心得: #注:此笔记是我自己认为本节课里比较重要.难理解或容易忘记的内容并做了些补充,并非是课堂详细笔记和要点: #标记为<补 ...
- coursera机器学习笔记-神经网络,学习篇
#对coursera上Andrew Ng老师开的机器学习课程的笔记和心得: #注:此笔记是我自己认为本节课里比较重要.难理解或容易忘记的内容并做了些补充,并非是课堂详细笔记和要点: #标记为<补 ...
- coursera机器学习笔记-神经网络,初识篇
#对coursera上Andrew Ng老师开的机器学习课程的笔记和心得: #注:此笔记是我自己认为本节课里比较重要.难理解或容易忘记的内容并做了些补充,并非是课堂详细笔记和要点: #标记为<补 ...
随机推荐
- php 三元运算符使用说明和写法
PHP三元运算的2种写法代码实例 首先,我们现在看一个简单的例子: 代码如下: <?php //写法一: $a = 2; ($a == 1) ? $test = "我们" : ...
- MVC的处理过程
MVC的处理过程,首先控制器接受用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户.
- Java 完美判断中文字符
Java判断一个字符串是否有中文一般情况是利用Unicode编码(CJK统一汉字的编码区间:0x4e00–0x9fbb)的正则来做判断,但是其实这个区间来判断中文不是非常精确,因为有些中文的标点符号比 ...
- JVM的GC理论详解
GC的概念 GC:Garbage Collection 垃圾收集.这里所谓的垃圾指的是在系统运行过程当中所产生的一些无用的对象,这些对象占据着一定的内存空间,如果长期不被释放,可能导致OOM(堆溢出) ...
- asp.net 未能写入输出文件--“拒绝访问”的解决办法
概述 将网部署在IIS 7 上,访问本地磁盘路径的时候,提示"**文件拒绝访问". 解决办法 将需要访问的文件夹赋于IIS_IUSRS完全控制的权限即可,不用添加NET ...
- LightOJ1360 Skyscraper(DP)
题目大概是,一个数轴上n个线段,每个线段都有起始坐标.长度和权值,问从中取出没有公共交点的线段的最大权和. 取k次是个经典的最小费用最大流问题,不过这题建容量网络有20W个点,离散化最多也要6W个点, ...
- Java多线程编程详解
转自:http://programming.iteye.com/blog/158568 线程的同步 由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题.Ja ...
- Idea_从Eclipse转Intellij IDEA
场景:使用Intellij IDEA感觉还是不是很顺手,想放弃又舍不得它,如:强大的代码提示功能. 本人使用IntelliJ IDEA其实并不太久,用了这段时间以后,觉得的确很是好用.刚刚从Eclip ...
- mysql中datetime比较大小问题 (转的)
方法一: 你也可以:select * from t1 where unix_timestamp(time1) > unix_timestamp('2011-03-03 17:39:05') an ...
- 简单了解Flux,注意这是一个设计思想,是一个架构!!!!!
在RN开发中,我们总是需要去更改一个组件个数据(也就是所谓的状态),我们一般是采用是在初始化的函数constror()(好像拼错了) 在这个函数里面申明我们的初始化数据(状态)eg:this.stat ...