当前位置: 首页 > news >正文

pong_Day 3:AI 对手球拍 + 计分系统 + 胜负判定

对pong这个游戏我们不必要真的接入一个ai,我们只需要对手球拍能追踪球y轴方位移动就行了

1. 创建 AI 球拍

复制player,并改名为ai_player

ai_player脚本(一定要先分离原来player脚本在创建一个新脚本):

extends CharacterBody2D @export var ai_paddle_speed:float=280 var ball:CharacterBody2D = null func _physics_process(delta:float): if ball == null: return var dif_y=ball.position.y - position.y if abs(dif_y)>10 : velocity.y = sign(dif_y) * ai_paddle_speed else: velocity.y = 0 velocity.x = 0 move_and_slide() position.y=clamp(position.y,40,440)

将ai_player添加到game场景里,调整位置 x : 560 y : 240

2.让ai看见球

给game场景添加脚本

extends Node2D func _ready() -> void: # $节点名 var ai = $ai_player var ball = $Ball #让ai这个节点识别到球 ai.ball = ball

3.创建得分检测区域

创建area2D和collisionshape2d,一个不可视的区域,当有物体进入该区域就会发出信号

更名为LeftScoreZone

将碰撞层尺寸和位置修改一下

重复上面步骤把右边的得分区也做了

4.创建 UI 显示分数

在game节点下创建canvaslayer

改名叫UI(不论背景怎么动,这个canvaslayer上的节点都不会动,很适合用于做UI)

再在UI节点下创建label用来做比分

改名score

设置水平居中,垂直居中

将字的大小调整到 48

size x : 200 y : 67

position x : 220 y : 30

再创建一个label,改名为message

和上面的操作差不多,就参数上再微调一下(这里是未来的我,size.x调成500,position.x调成70会更好,其他不变)

visible关掉,默认隐藏

5.给 Game 脚本添加计分逻辑

extends Node2D # 分数变量 var player_score : int = 0 var ai_score : int= 0 var win_score : int= 11 # 这的enum和c语言中一样 # 游戏状态 enum GameState {PLAYING,PLAYER_WIN,AI_WIN} var game_state : GameState = GameState.PLAYING # @onready可以理解成我们ready执行前才执行 # 如果不加上的话,ai_player等节点还没有被创建 # 最后会被赋值null @onready var ai : CharacterBody2D = $ai_player @onready var ball : CharacterBody2D = $Ball @onready var score_label : Label = $UI/score @onready var message_label : Label = $UI/message func _ready() -> void: ai.ball = ball # body_entered :检测是否有东西进入 # 若有则触发_on_left_score函数 $leftscorezone.body_entered.connect(_on_left_score) $rightscorezone.body_entered.connect(_on_right_score) update_score_display() func _on_left_score(body): # ai进球得分 if game_state != GameState.PLAYING : return if body == ball : ai_score += 1 check_winner() func _on_right_score(body): # 玩家进球得分 if game_state != GameState.PLAYING : return if body == ball : player_score += 1 check_winner() func check_winner(): if player_score >= win_score: game_state = GameState.PLAYER_WIN message_label.text = "You win!\n press space to restart" message_label.visible = true elif ai_score >= win_score: game_state = GameState.AI_WIN message_label.text = "AI win!\n press space to restart" message_label.visible = true else : ball.reset_ball() update_score_display() # 更新比分 func update_score_display(): score_label.text = str(player_score) + " - " + str(ai_score) # _input(event)特殊函数,当有输入的时候自动调用 func _input(event: InputEvent) -> void: if event.is_action_pressed("ui_accept"): if game_state == GameState.PLAYER_WIN or game_state == GameState.AI_WIN : restart_game() # 重开游戏 func restart_game(): player_score = 0 ai_score = 0 message_label.visible = false game_state = GameState.PLAYING update_score_display() ball.reset_ball()

这是程序流程图可以和代码配合来看

6.结果展示

7.个人错误改证

ball要改一下初始位置,因为我们原来的初始位置就在leftscorezone上,ai会在游戏刚开始时多得一分

http://www.jsqmd.com/news/1036933/

相关文章:

  • 2026甘肃电动卷闸门定制安装多少钱 - 精选优质企业推荐官
  • Win11Debloat终极指南:一键清理Windows系统臃肿的免费工具
  • 基于Python的终端快速SSH连接工具
  • 2026年建站服务哪家靠谱?高口碑商家汇总! - FaiscoJeff
  • 2026年国内垂直升降/水平旋转智能货柜生产厂家综合排行 - 起跑123
  • # P3622 \[APIO2007] 动物园
  • 2026年夏邑县靠谱的驾校,连霍高速口黄金区位,返乡学车一站直达:夏邑大地驾校 C1C2 便民学车纪实专访 - GrowthUME
  • 雅思备考不烧钱,这些性价比高的外教线上课程值得重点关注 - 品牌2026
  • 2026年6月最新泰格豪雅中国官方售后电话地址客服热线服务网点 - 亨得利官方服务中心
  • 北京执行分配方案异议律所:分配方案不公如何维权?5步异议提出与诉讼指引 - 品牌2026
  • MPC857T CPM通用定时器:原理、配置与嵌入式通信实战
  • MPC837xE-RDS参考设计板深度解析:从硬件架构到嵌入式系统开发实践
  • 沈阳卖黄金不踩坑|2026 诚信回收商家完整攻略 - 逸程
  • PCL-Silane 硅烷改性PCL普通PCL与硅烷PCL性能对比
  • 联邦学习中的SSR-FL技术:高效图像特征压缩与隐私保护
  • 海珠无折旧费回收黄金,无损光谱验金,7 天复检总部兜底售后 - 花生花生1
  • 2026北上广深雅思机构排名——一线城市家庭选课,本质上是在管理一笔留学的 - 资讯速览
  • 高效解决Sketch文本批量替换难题:Find and Replace插件深度解析
  • 多语言语音识别中的上下文对齐技术解析与应用
  • 多语言建站系统推荐2026版|网站制作公司哪家好?外贸同行都在用! - FaiscoJeff
  • 2026 澄迈老城代理记账哪家强?工业园区企业优选,全年记账报税财税托管服务 - 资讯速览
  • yolov11 obb数据集准备说明
  • 东营换轮胎怎么选?本地市场盘点、轮胎选购避坑+门店筛选完整指南 - 国麟测评
  • Python 练习题讲解 3 · 字符串
  • 2026年无锡名表回收实测:添加收高端手表回收变现首选门店 - 薛定谔的梨花猫
  • 石门县黄金回收避坑指南! - 衡金阁
  • 换季整理翻出旧翡翠?成都回收攻略来了,禹竞名奢汇报价最实在 - 奢品小当家
  • 2026 年 6 月最新|涂胶设备实测排名:汽车涂胶设备 / 3C涂胶设备 / 新能源涂胶设备靠谱厂家权威榜单汇总 - 商业新知
  • 证件照处理全流程:从像素尺寸到抠图技巧,掌握合规制作核心方法
  • Element Plus 组件库 + 美化页面