华容道问题求解第一部分_详细设计(一)之棋子和游戏类_初始化部分

按:因为自控力和能力的原因,这个其实是在和代码同时进行的。

主要 类 说明

这一层是整个项目的基础,将对未来的算法的效率产生重要影响。为了和界面隔离,以及自身逻辑的清晰,下面的两个类是必须的,棋子类和游戏类。棋子类定义了棋子相关属性,游戏类中重点是算法方面的方法设计。

UML 略图如下
在这里插入图片描述
生成一个HrdGame的实例,就可以进行基本的处理了。HrdGame有默认的布局,即经典的“横刀立马”布局,并且实现了UI部分的功能,只要传入标准的C#控件,就可以进行图形部分的渲染。主要的Class 即HrdGame和Prece,其余类都是辅助类,用于对棋子形状和尺寸的刻画,以及求解过程中队列或者堆栈元素的记录。

Piece Class

在这里插入图片描述

PIece中的Key property 是 位置和形状,由于华容道形状都是矩形,因此形状属性弱化为SIze,即只保留了形状中的尺寸属性。
这两个属性是
HrdPos :位置
HrdSize:大小
具体刻画使用 HrdPoint 进行定义,HrdPoint 是一个用户定制类的基本类,定义如下:

在这里插入图片描述
使用这个定制类的目的,是为了和系统的Point 类进行区分。
这里的X,Y属性一个抽象的数据,它表示系统用于显示棋子控件的相对大小。并不对应屏幕的像素数值,是一个相对的数据。这样做的目的,是便于将棋子显示在不同大小的控件中。

#HRDGame 类
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
该类集中了华容道算法的布局和处理已经UI渲染的全部功能,这里主要介绍其核心方法。

构造函数

      public HRDGame(Form form,Control ctrl){_mainForm = form;_ctrl = ctrl;this._ctrl.Paint += new System.Windows.Forms.PaintEventHandler(this.HrdPaint);this._ctrl.Resize += new System.EventHandler(this.Resize);_setDefayultLayout();InitializeTimer();}

构造函数中需要传入 两个参数,调用的Form已经用于显示棋盘的控件。注意构造函数中对Paint 和Resize属性进行了调用,这样就最大程度地减少外部函数对UI的控制。
其中 _setDefayultLayout() 进行了基础布局,即“横刀立马”布局;

(基本)布局函数

布局函数的核心代码如下:

     private void _setDefayultLayout(){for (int i = 0; i < gameState.pieces.Length; i++){gameState.pieces[i] = new Piece();}gameState.pieces[0].CreatePiece("空", 0, new HrdPoint(2, 5), new HrdPoint(1, 1), 5, PieceClr[5], "单元方块");gameState.pieces[1].CreatePiece("白", 1, new HrdPoint(3, 5), new HrdPoint(1, 1), 5, PieceClr[5], "单元方块");....// represent the entity. foreach (var pcs in gameState.pieces){FillLayoutArr(pcs);}}

该函数完成对所有棋子的初始逻辑定义,然后根据传进来的控件进行渲染,渲染在 FillLayoutArr(pcs)中完成基本的数据设定,然后调用Paint函数进行具体的施画过程。
FillLayoutArr 函数完成棋子的具体描述。棋盘的底层数据为一个5*4的数组,每个数组元素表示一个单位正方形,利用这些单位正方形来刻画具体的棋子。例如: 小卒 就是一个基本的单位正方形,而曹操由4个单位正方形构成。我们因为棋子的左上角坐标表示整个棋子的位置,其余单位正方形的位置彩色与固定位置描述的方法,具体由棋子的 HrdType 属性决定。

Hrdtype的定义采用Hard Code 定义的,具体如下:

 ///  _type = 5 , the blank block on the board, size is (1,1) (width, height)///        = 1, the soldier block , size is (1,1)///        = 2, the vertical blcok, size is (2,1) 张飞,赵云,马超,黄忠 ///        = 3, the horizaontal blcok , size is (1,2) 关羽///        = 4 , the biggest block , size is (2,2) 曹操///        = 0, null, this area is out of the board 

这样做是为了简化程序的数据结构和过程,我们不处理其余更复杂和灵活的布局以及棋子形状。

布局完成后,就进入了求解过程。(待续)

马拉孙于BJFWDQ
2024-03-04

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/509662.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL篇—执行计划之覆盖索引Using index和条件过滤Using where介绍(第三篇,总共三篇)

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux&#xff0c;也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&#xff0c;并且也会默默的点赞收藏加关注❣…

文献速递:帕金森的疾病分享--使用功能性磁共振成像和机器学习预测帕金森病深部脑刺激的最优参数

文献速递&#xff1a;帕金森的疾病分享–使用功能性磁共振成像和机器学习预测帕金森病深部脑刺激的最优参数 Title 题目 Predicting optimal deep brain stimulation parameters for Parkinson’s disease using functional MRI and machine learning 使用功能性磁共振成像…

亚马逊、沃尔玛测评、采购、退款必备技巧:如何防关联,保护账号安全

今天&#xff0c;我将向各位深入介绍在亚马逊、沃尔玛等平台进行测评、采购、退款等操作时&#xff0c;如何运用防关联、防封号的技术手段来确保账号安全。这些底层技术原理对于大多数人来说可能较为陌生&#xff0c;涉及一些高难度的IT技术。通过了解这些技术&#xff0c;我们…

LabVIEW高精度天线自动测试系统

LabVIEW高精度天线自动测试系统 系统是一个集成了LabVIEW软件的自动化天线测试平台&#xff0c;提高天线性能测试的精度与效率。系统通过远程控制测试仪表&#xff0c;实现了数据采集、方向图绘制、参数计算等功能&#xff0c;特别适用于对天线辐射特性的精确测量。 在天线的…

【C++练级之路】【Lv.10】【STL】priority_queue类和反向迭代器的模拟实现

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《C语言》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 一、仿函数1.1 仿函数的介绍1.2 仿函数的优势 二、priority_queue2.1 push2.2 pop2.3 top2.4 size2.5 empty 三、…

【JavaEE进阶】使用云服务器实现Linux环境搭建

文章目录 &#x1f343;前言&#x1f332;Linux背景知识&#x1f6a9;Linux 是什么&#xff1f;&#x1f6a9;Linux发行版&#x1f6a9;Linux的优势 &#x1f384;Linux环境搭建&#x1f6a9;环境的搭建方式&#x1f6a9;使用云服务器 &#x1f38b;使用终端软件连接到Linux&am…

RFID助力小区精细化管理!RFID电瓶车管理

2024年2月24日凌晨&#xff0c;南京市召开新闻发布会&#xff0c;通报了雨花台区“223”火灾事故的相关情况。据统计&#xff0c;截至23日24时&#xff0c;该火灾造成15人遇难&#xff0c;44人在医院接受治疗。南京市消防救援支队负责人介绍称&#xff0c;初步分析认为该火灾是…

数学建模中编程手是不是最不重要的?

数学建模比赛中编程手是较为重要的角色&#xff0c;不仅需要根据建模手的思路完成代码的编写&#xff0c;还需要与写作手沟通结果分析与呈现。所以他们真的已经很努力了&#xff0c;别再老说他们摆烂了&#xff0c;为什么这样讲呢&#xff1f;我们往下看&#xff1a; 网友&…

定制红酒:从想法到成品,全程跟踪的定制服务流程

云仓酒庄洒派提供从想法到成品&#xff0c;全程跟踪的定制红酒服务流程。这过程确保了消费者从始至终都能得到专业、细致的服务&#xff0c;获得满足自己需求的红酒。 首先&#xff0c;云仓酒庄洒派会与消费者进行初步的沟通&#xff0c;了解他们的定制需求和期望。这一环节主…

进程操作(Win32, C++)

CProcessUtils.h #pragma once#include <wtypesbase.h> #include <tchar.h> #include <vector> #include <map> #include <string>#ifdef _UNICODE using _tstring std::wstring; #else using _tstring std::string; #endif// 进程信息 typed…

三位数反转问题易被忽略的两大细节

【题目描述】 输入一个三位数&#xff0c;分离出它的百位、十位和个位&#xff0c;反转后输出。 【样例输入】 127 【样例输出】 721 这个问题并不难&#xff0c;只需要两步&#xff1a; ①将这个三位数分离成三个数字&#xff08;参见“整数的分离与合成”一文&#xff…

内核中的Kconfig文件

Kconfig解析 编译内核时用于配置的Kconfig文件 以内核中的ttyprintk.c为例&#xff0c;其位于/kernel-sources/dirver/char/ttyprintk.c 如何将其编译进内核&#xff1f; 在char目录下有Kconfig文件&#xff0c;其中有如下内容 tristate 表示该模块可以选择 Y N M(以.ko形…