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

项目-坦克大战学习笔记-控制玩家坦克不超出地图范围

控制坦克不超出地图范围的思路非常简单,创建一个每帧检测坦克自身x,y,的方法

private void chaochu()
{
    if (Fangxiang == fangxiang.Up)//检测坦克目前朝向
    {
        if (y - speed < 0)//如果在前进一帧会大于地图边界
        {
            yidong = false; return;//停止前进
        }
    }
    else if (Fangxiang == fangxiang.Down)
    {
        if (y + speed + gao > 450)
        {
            yidong = false; return;
        }
    }
    else if(Fangxiang==fangxiang.Left)
    {
        if(x - speed < 0)
        {
            yidong = false; return;
        }
    }
    else if(Fangxiang==fangxiang.Right)
    {
        if((x + speed+kuang) > 450)
        {
            yidong = false; return;
        }
    }
}

由于坦克自身有占用像素格,而坦克生成位置是以左上角x,y的点开始生成,所有坦克向下和向右的实际碰撞位置应该是坦克生成位置加上坦自身宽或高,而坦克有四个方向就有4种对象碰撞可能,所以我们在物体对象的父类中声明存储物体宽和高的int类型

public int gao { get;set;}//放置图片对象的高
public int kuan {  get;set;}//放置图像的宽

然后在gudin类和keyidong类中将高和宽赋值

gudin类中图片对象是由直接放入的image决定,所以我们重写image的构造函数按照传入的图片给宽高赋值

 public Image image;//声明Image
 private Image  Image { get { return image; }
     set {
         image = value;
         gao = image.Height;//设置父类继承过来的图片对象高
         kuan = image.Width;//设置父类继承过来的图片对象宽
             } }//重写Image构造函数

而keyidong类中会根据移动方向传入不同的对象,我们需要在方向定义处根据设置的方向传递不同对象的宽高

private  fangxiang fangxiang;//声明枚举类型fangxiang
public fangxiang Fangxiang { get { return fangxiang; }
    set
    {
        fangxiang = value;
        Bitmap bitmap = null;//设置一个临时图片变量储存图片信息
        switch (fangxiang)
        {
            case fangxiang.Up://如果当前方向为上
                bitmap = BitmapUp;//将临时图片信息传入
                break;
            case fangxiang.Down:
                bitmap = BitmapDown; break;
            case fangxiang.Left:
                bitmap = BitmapLeft; break;
            case fangxiang.Right:
                bitmap = BitmapRight; break;


        }
        gao = bitmap.Height;//将图片的高记录
        kuan = bitmap.Width;//将图片的宽记录
    }
}//重写方向构造函数,调用传入的方向信息设置图片的宽高信息

这样,调用不同图片对象时的宽高就设置好了


http://www.kler.cn/news/335061.html

相关文章:

  • 详解根据IP查询所在国家地区的后台实现方案
  • YoloV8改进策略:BackBone改进|CAFormer在YoloV8中的创新应用,显著提升目标检测性能
  • Docker版MKVtoolnix的安装及中文显示
  • 深度学习项目----用LSTM模型预测股价(包含LSTM网络简介,代码数据均可下载)
  • 38 文件包含(标准库头文件、自定义头文件)、相对路径与绝对路径、条件编译(#if、#ifdef、#if define、#ifndef)
  • python-pptx 中 placeholder 和 shape 有什么区别?
  • Python 3 和 MySQL(PyMySQL) 的完美结合
  • 解决数藏平台中因用户使用科技脚本而导致服务器卡顿的方法
  • JavaEE: 数据链路层的奇妙世界
  • 启动redis
  • Node.js安装Express,Node.js支持Typescript以及Express支持Typescript的步骤
  • 代码随想录一刷完结
  • 网站建设开发方法
  • 【论文阅读】Simulating 500 million years of evolution with a language model
  • 实验4 循环结构
  • 测绘地理信息赋能新质生产力
  • Element-UI Plus 暗黑主题切换及自定义主题色
  • 《重生到现代之从零开始的C语言生活》—— 内存函数
  • 数据库(MySQL):使用命令从零开始在Navicat创建一个数据库及其数据表(二).设置主键自增等特点
  • 【笔记】Day1.1.24测试