项目-坦克大战学习笔记-地图对象绘制思路

server/2024/10/5 18:10:13/

在窗体绘制地图对象时我们需要考虑到绘制对象的分类,首先统一称为Object类,

细分为不可移动类(墙体),可移动类(玩家,人机,子弹),可移动类又分为三类

在Object类中有4个子类,他们都继承在Object,在父类中,我们需要实现对象的绘制,坐标的定义

坐标的定义

 public int x{get;set;}
 public int y{get;set;}

用构造函数在设置坐标

对象的绘制我们需要一个对象绘制函数

public void HuiZhi()//绘制功能的函数
{
    Graphics g = tankthread.g;//创建一个画布变量并使他拥有画布组件
    g.DrawImage(shehziImage(),x,y);//调用画布变量的绘制图片方法,传入(图片,坐标)
}

一个图片设置的方法

 protected abstract Image shehziImage(); //抽象方法,需要在子类重写,方法重写后传回的参数传入绘制函数

需要将父类设置为抽象类abstract才能在里面设置抽象方法,抽象方法在父类中调用却在子类中定义,根据子类中定义后传入的image返回值传入绘制方法中调用方法在窗体中绘制对象

在可移动子类中分为上下左右四种情况的图片对象,我们需要一个枚举类型来设置当前方向

enum fangxiang
{
    Up,
    Down, 
    Left, 
    Right
}

在可移动对象中要设置每个方向对应的对象,还要设置移动速度,设置移动方向

 public Bitmap BitmapUp { get; set; }//设置向上的图片
 public Bitmap BitmapDown { get; set; }//设置向下的图片
 public  Bitmap BitmapLeft { get; set; }//设置向左的图片
 public Bitmap BitmapRight { get; set; }//设置向右的图片
 public int speed {  get; set; }//设置速度
 public fangxiang fangxiang { get; set; }//设置方向

在重写父类中设置图片的方法,根据当前方向运用switch选择根据fangxaing设置image

protected override Image shehziImage()//根据方向设置图片传到GameObject类的绘制函数将指定图片绘制出来
{Bitmap image = null;//创建一个空的Bitmap对象
  switch(fangxiang)//设置image的图片
    {
        case fangxiang.Up:
            image = BitmapUp;
            break;
            case fangxiang.Down:
            image = BitmapDown;
            break;
            case fangxiang.Left:
            image = BitmapLeft;
            break;
            case fangxiang.Right:
            image = BitmapRight;
            break;  
    }
    image.MakeTransparent(Color.Black);//调用Bitmap中的方法将黑色设置为透明
    return image;//将image的对象返回出函数
}

可移动图片有黑色底色,所以得运用Bitmap内置的方法将图片的黑色设置为透明

  image.MakeTransparent(Color.Black);//调用Bitmap中的方法将黑色设置为透明

然后设置调整好的图片为返回值

窗体底色的设置:窗体变量.Clear(Color.Black);//调用Clear方法,清除覆盖掉当前窗体内容,用黑色


http://www.ppmy.cn/server/127587.html

相关文章

数据科学:Data+AI驾驭数据的智慧之旅

数据科学:DataAI驾驭数据的智慧之旅 前言一、数据存储计算二、数据治理三、结构化数据分析四、语音分析五、视觉分析六、文本分析七、知识图谱 前言 今天想和大家深入聊聊数据科学这个充满魅力又极具挑战的领域。在当今数字化时代,数据如同潮水般涌来&a…

MATLAB中数据导入与导出的全面指南

在MATLAB中,数据的导入与导出是数据处理工作流中的两个基本步骤。导入是将外部数据加载到MATLAB工作区的过程,而导出则是将工作区中的数据保存到外部文件中。这两个步骤对于数据分析、可视化和结果共享至关重要。本文将详细介绍如何在MATLAB中进行数据的…

java往word中添加水印,往excel中添加图片

通过aspose-words往word中添加水印 1、添加依赖 <dependency><groupId>com.aspose</groupId><artifactId>aspose-words</artifactId><version>15.8.0</version><scope>system</scope><systemPath>${project.bas…

论文翻译 | Generated Knowledge Prompting for Commonsense Reasoning

摘要 整合外部知识是否有利于常识推理&#xff0c;同时保持预训练序列模型的灵活性&#xff0c;这仍然是一个悬而未决的问题。为了研究这个问题&#xff0c;我们开发了生成知识提示&#xff0c;它包括从语言模型生成知识&#xff0c;然后在回答问题时提供知识作为附加输入。我们…

【Nacos架构 原理】内核设计之Nacos通信通道

文章目录 Nacos通信通道 &#xff08;长链接&#xff09;现状背景场景分析配置服务 长链接核心诉求功能性诉求负载均衡连接生命周期 Nacos通信通道 &#xff08;长链接&#xff09; 现状背景 Nacos 1.X 版本 Config/Naming 模块各自的推送通道都是按照自己的设计模型来实现的…

【MySQL】数据库基础知识

【MySQL】数据库基础知识 文章目录 【MySQL】数据库基础知识数据库相关概念MySQL下载MySQL的启动于停止客户端连接关系型数据库(RDBMS)SQL通用语法SQL分类DDL-数据库操作DDL表操作结语 博客主页: He guolin-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索…

MFC工控项目实例之十九手动测试界面输出信号切换

承接专栏《MFC工控项目实例之十八手动测试界面输入信号实时检测》 根据板卡设置界面组合框选项设定的输出信号&#xff0c;通过读取文件中保存的键值&#xff0c;用单选按钮切换输出信号接通、关闭。 1、在Data_1.h文件中添加代码 CString COMB_Data_O_1[]{"夹紧",&…

uMCN支持不同数据类型

1. 数据大小的动态配置 在uMCN中&#xff0c;数据的类型和大小是通过消息中心&#xff08;McnHub&#xff09;的结构体定义来支持的。特别是&#xff0c;通过McnHub结构体中的 obj_size 字段动态确定数据的大小&#xff0c;而不是固定使用某种数据类型。这使得uMCN能够处理不同…