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

中A Project: ppball

[复制链接]

29

主题

86

回帖

3092

积分

超级版主

积分
3092
发表于 7-14-2025 21:44:03 | 显示全部楼层 |阅读模式
Pong是人类最早的电子游戏,是Nolan Bushnell于1972年设计的(软件加硬件)
Pong就说美式英语乒乓球,英国人说table tennis,显然我们翻译的美语哈哈



甚至因此他成立了人类第一个电子游戏公司:Atari雅达利


然后呢

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

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

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


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

29

主题

86

回帖

3092

积分

超级版主

积分
3092
 楼主| 发表于 7-14-2025 21:45:31 | 显示全部楼层
ppball V0.8的代码看着挺长,其实不长。
因为绝大部分代码是基于初级班最后一棵的Animation程序,所以本质上是复习。




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

29

主题

86

回帖

3092

积分

超级版主

积分
3092
 楼主| 发表于 7-14-2025 21:47:46 | 显示全部楼层


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





V0.9OK啦

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

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

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

29

主题

86

回帖

3092

积分

超级版主

积分
3092
 楼主| 发表于 7-15-2025 13:05:05 | 显示全部楼层
本帖最后由 liuyi 于 7-15-2025 14:56 编辑



本帖子中包含更多资源

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

×

0

主题

5

回帖

54

积分

提示词程序员

积分
54
QQ
发表于 7-15-2025 15:22:21 | 显示全部楼层
现在可以随便用

29

主题

86

回帖

3092

积分

超级版主

积分
3092
 楼主| 发表于 7-15-2025 15:22:57 | 显示全部楼层
同学们


努力学习!

29

主题

86

回帖

3092

积分

超级版主

积分
3092
 楼主| 发表于 7-15-2025 20:36:57 | 显示全部楼层
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

主题

86

回帖

3092

积分

超级版主

积分
3092
 楼主| 发表于 7-15-2025 20:48:51 | 显示全部楼层
本帖最后由 liuyi 于 7-15-2025 20:56 编辑

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, 就画出了曲线!


下一步,就是把V1.1做完整:音效和文字
首先,非常重要,请再次确定,你有本项目专用的文件夹,folder \ppball
因为,每个project,都需要一个folder,就像Finger和Piano,那么ppball也不例外
以后,每一个新版本,new version,都是new file,从上一个version中增加、修改代码而来。
这样,就不会出现“我想增加功能,功能没加上,老代码也不正常了”,也不会出现“老师要增加的代码是在上一个版本基础上,但是和我现在的代码差别很大,找不到地方!”,等等情况
pong.zip (2.58 MB, 下载次数: 32)
下载音效包pong.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啦

29

主题

86

回帖

3092

积分

超级版主

积分
3092
 楼主| 发表于 7-15-2025 21:08:58 | 显示全部楼层


V1.2

首先做好版本管理,版本号注释也写清楚


然后,ball.collide的代码做了修改:摩擦力要通过pad传递给ball
paddle里修改较多,认真看


最后,while True的键盘控制,修改的是paddle的加速度acc

现在,试试看,游戏应该有手感了!

0

主题

7

回帖

79

积分

提示词程序员

积分
79
发表于 7-16-2025 08:51:45 | 显示全部楼层
本帖最后由 zifeng2025 于 7-17-2025 14:47 编辑

{:4_215:}{:4_215:}{:4_215:}{:4_215:}{:4_215:}{:4_215:}{:4_215:}{:4_215:}{:4_215:}{:4_215:}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 7-24-2025 04:08 , Processed in 0.168574 second(s), 31 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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