找回密码
 立即注册
搜索
热搜: 活动 交友
查看: 91|回复: 8

中A Project: ppball

[复制链接]

29

主题

83

回帖

3106

积分

超级版主

积分
3106
发表于 昨天 14:54 | 显示全部楼层 |阅读模式
本帖最后由 liuyi 于 8-17-2025 15:10 编辑

Pong是人类最早的电子游戏,是Nolan Bushnell于1972年设计的(软件加硬件)
Pong就说美式英语乒乓球,英国人说table tennis,显然我们翻译的美语哈哈






29

主题

83

回帖

3106

积分

超级版主

积分
3106
 楼主| 发表于 昨天 15:12 | 显示全部楼层
甚至因此他成立了人类第一个电子游戏公司:Atari雅达利



然后呢

这个公司的第40名员工是上图这位先生



29

主题

83

回帖

3106

积分

超级版主

积分
3106
 楼主| 发表于 昨天 15:13 | 显示全部楼层
本帖最后由 liuyi 于 8-18-2025 17:19 编辑



后来他拉着他的好伙伴做了Pong的升级版:打砖块(上图)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

29

主题

83

回帖

3106

积分

超级版主

积分
3106
 楼主| 发表于 昨天 15:14 | 显示全部楼层
本帖最后由 liuyi 于 8-17-2025 21:51 编辑



再后来和这位好伙伴Stephen Gary Wozniak创办了苹果公司


我们中A的核心项目ppball,就是向经典致敬的一款游戏



29

主题

83

回帖

3106

积分

超级版主

积分
3106
 楼主| 发表于 昨天 15:16 | 显示全部楼层
本帖最后由 liuyi 于 8-17-2025 15:17 编辑

ppball V0.8的代码看着挺长,其实不长。
因为绝大部分代码是基于初级班最后一棵的Animation程序,所以本质上是复习。





上面是代码,虽然看着多,但其实大部分甚至可以直接从初级班程序中直接copy,尤其第一个函数可以一点不改。
作业:
现在ball是有顺时针旋转效果,请想办法让ball旋转的方向和水平运动方向匹配:
如果spdX > 0, ball向右,那么顺时针旋转
如果spdX < 0, ball向左,那么逆时针旋转
提示:顺时针旋转效果就是当前每次绘制ball的时候,actList的下标是012301230123......
如果要逆时针,那就应该是321032103210......

29

主题

83

回帖

3106

积分

超级版主

积分
3106
 楼主| 发表于 10 小时前 | 显示全部楼层


from V0.8 to V0.9
请一定关注两段代码的异同
比如那个画点阵的函数,一点都没改
但是每个小球的字符串点阵,结尾的赋值代码,稍微有改动
还有很多细节.....代码在下面





V0.9OK啦

然后就可以向V1.0进发啦
V1.0算正式版,那就一定可以接球

请自己想办法完成:就写好ball.collide函数里的if语句即可

当前这个if语句里还没写具体条件,永远都是False,条件永远不成立,当然就永远接不到球......
所以,请认真理解ppt中的内容,理解”游戏里的各种判断,主要就是对坐标的计算和判断”

29

主题

83

回帖

3106

积分

超级版主

积分
3106
 楼主| 发表于 4 小时前 | 显示全部楼层

ppball V1.0

V0.9~1.0,增加的是碰撞处理,具体在方法函数ball.collide的if中添加
在这个函数中,self就是ball
所以是两个矩形之间的“是否互相碰上”的判断:
self.x, self.y, self.w, self.h
pad.x, pad.y, pad.w, pad.h
矩形4元组(x,y,w,h)的含义分别是:左上角坐标(x,y), 矩形宽度w,矩形高度h
注意计算机坐标系左上角(0,0), y轴向下。

但是具体做游戏的时候,要考虑到ball的spdX,因为比如spdX = 2, 那么上一秒还有距离1,下一秒又重叠了1,永远没有“紧挨着”的状态。
考虑到实现“球拍击球”功能后,如果没有接住球,还要增加“新开一局”功能,都在V1.0中实现。
具体代码:

注意增加了碰撞精度ACCURACY变量,意思是:如果ball的右侧与pad的左侧具体在ACCURACY之内,就算打到。碰撞暂定为2,这个数值与spdX的最大值有关。
函数set_new_ball在没接住球,“死球”后调用。

ball.collide中的碰撞检测,坐标判断,注意考虑了ACCURACY

键盘event处理,增加“空格键重玩”。

这样ppball V1.0就OK啦!

29

主题

83

回帖

3106

积分

超级版主

积分
3106
 楼主| 发表于 2 小时前 | 显示全部楼层
本帖最后由 liuyi 于 8-18-2025 15:23 编辑

ppball V1.1
首先,请先做好版本管理:
*建立本项目专用文件夹ppball,new folder \ppball
*copy ppball V1.0 python file to folder \ppball
*new file ppball V1.1,文件名和注释都写清楚V1.1
*然后,我们在V1.0代码的基础上做V1.1

在V1.1版本里,我们做两件事:
1、重力引擎,物理学来啦!
2、音效、文字。
先来重力引擎吧


从物理学角度来讲:需要引入重力加速度acceleration of gravity


L7的G= 0.01, G就是重力加速度
为什么要用大写字母呢?因为编程的世界里,纯大写字母的变量表明“这是个常量”
为什么是0.01(不是9.8)呢?因为这是个科幻世界呀,这里的物理量标准不是meter、second,而是pixel, FPS......
先用0.01吧,等你程序OK了,物理学掌握了,再自己修改着玩吧
SPEED_Y_MAX = 3, 意味着ball的Y向速度有上限。为什么有上限呢?因为雨滴从10000米高空落地也不会砸伤人,对吧


这些代码,其实就是ball.move里增加3句:
单位时间内速度的变化就是加速度:  self.spdY += G
Y向速度要有上限:if self.spdY > SPEED_Y_MAX: #add in V1.1
                                 self.spdY = SPEED_Y_MAX
注意,原有的:self.y += self.spdY 还在

现在运行程序试试看,能不能看到小球在空中划出抛物线?
发现了吗,只是增加了一个加法:spdY += G, 就画出了曲线!


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

29

主题

83

回帖

3106

积分

超级版主

积分
3106
 楼主| 发表于 2 小时前 | 显示全部楼层
下一步,就是把V1.1做完整:音效和文字
首先,非常重要,请再次确定,你有本项目专用的文件夹,folder \ppball
因为,每个project,都需要一个folder,就像Finger和Piano,那么ppball也不例外
以后,每一个新版本,new version,都是new file,从上一个version中增加、修改代码而来。
这样,就不会出现“我想增加功能,功能没加上,老代码也不正常了”,也不会出现“老师要增加的代码是在上一个版本基础上,但是和我现在的代码差别很大,找不到地方!”,等等情况


下载音效包pong.zip,里面有一堆音效。当然,如果你有sound.zip,音效更多!
然后去找一个font文件copy到ppbal的folder里,可以直接用Finger项目里的simkai.ttf,更欢迎用自己喜欢的font。Windows的Font folder位置是:c:\windows\fonts\,Mac的请同学自己找,文件copy过来就可以
然后就是代码啦

增加函数RT_show_txt,这个函数看着眼熟吗?就是Finger里用过的

在主程序的while True前增加声音和字体的初始化,请先确保这些文件与Python程序文件在同一个folder

在draw_filed里增加一句

在ball的类定义里,ball.move中碰到挡板用pong2声音,ball.collide中接到球用pong4声音
还有几个声音留着以后备用。


V1.1就OK啦

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RealDevClub ( 沪ICP备2024093864号-1 )

GMT+8, 8-18-2025 17:54 , Processed in 0.622885 second(s), 29 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表