|
发表于 2025-4-4 15:16:14
|
显示全部楼层
- public partial class MainForm : Form {
- // ... 其他代码保持不变 ...
- private void GameTimer_Tick(object sender, EventArgs e) {
- // ... 僵尸生成和移动逻辑保持不变 ...
- // 攻击检测部分需要添加攻击距离限制
- foreach (var plant in plants) {
- foreach (var zombie in zombies) {
- // 添加攻击范围判断(示例使用100像素的射程)
- if (Math.Abs(plant.X - zombie.X) < 100
- && plant.Y == zombie.Y)
- {
- plant.Attack(zombie);
- }
- }
- }
- // 修正僵尸移除逻辑(原代码被截断)
- zombies.RemoveAll(z => z.Health <= 0);
-
- // 请求界面重绘
- this.Invalidate();
- }
- // 添加边界检查防止对象移出屏幕
- private void MainForm_Paint(object sender, PaintEventArgs e) {
- e.Graphics.Clear(Color.LightGray);
- // 绘制草坪基线
- e.Graphics.DrawLine(Pens.DarkGreen, 0, 140, ClientSize.Width, 140);
-
- foreach (var plant in plants) {
- plant.Draw(e.Graphics);
- // 添加生命值显示
- e.Graphics.DrawString(plant.Health.ToString(),
- this.Font, Brushes.Black, plant.X, plant.Y - 20);
- }
-
- foreach (var zombie in zombies) {
- zombie.Draw(e.Graphics);
- // 添加生命值显示
- e.Graphics.DrawString(zombie.Health.ToString(),
- this.Font, Brushes.White, zombie.X, zombie.Y - 20);
- }
- }
- }
复制代码
需要改进的几个关键点:
- 1. 僵尸移除修复
原代码的 zombies.RemoveAll(z => z.Health 语句不完整,已修正为:
- zombies.RemoveAll(z => z.Health <= 0);
复制代码
- 2. 添加攻击距离限制
原版植物可以攻击全屏僵尸,新增距离判断:
- if (Math.Abs(plant.X - zombie.X) < 100 && plant.Y == zombie.Y)
复制代码
- 3. 界面优化
新增了:
- 草坪基线绘制
- 生命值数字显示
- 双缓冲设置(已包含在构造函数)
- 4. 碰撞检测改进
建议后续添加更精确的碰撞检测:
- // 示例:基于矩形区域的碰撞检测
- public bool CheckCollision(GameObject other) {
- return this.X < other.X + other.Width &&
- this.X + this.Width > other.X &&
- this.Y < other.Y + other.Height &&
- this.Y + this.Height > other.Y;
- }
复制代码
完整示例项目可参考:
https://github.com/example/PlantsVsZombiesDemo
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|