# Prism Chess **Repository Path**: cygsd/prism-chess ## Basic Information - **Project Name**: Prism Chess - **Description**: 中国象棋,采用C# WPF PRISM DRYIOC构建,MVVM架构。 - **Primary Language**: C# - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 11 - **Forks**: 8 - **Created**: 2022-09-28 - **Last Updated**: 2025-06-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: WPF, PRism, DryIoc ## README # Prism Chess #### 介绍 中国象棋,单机版,在已开发完成的“[中国象棋CHESS](https://gitee.com/cygsd/Chess)”的基础上,进行了重构。 #### 软件架构 软件架构说明:MVVM架构,采用C# WPF PRISM DRYIOC构建。 #### 设计说明 不久前,已利用C#WPF完成了“中国象棋”的软件设计,链接为:[Chess](https://gitee.com/cygsd/Chess.git) 但是,越到后来,感觉软件维护越复杂,主要原因就是模块之间的耦合度太高,一点点改动就需要动很多地方。 于是,想采用MVVM模式,对该”中国象棋“软件进行重构。 于是,选择了PRISM+DRYICO框架,主要是利用其松耦合的特性,便于软件的深度设计和维护。 当然,也是一边学习,一边查资料,一边进行设计,相关资料还是比较欠缺,能查到的大多都是一些基础性的东西, #### 遇到的问题及解决方案 象棋软件必然会用到一些动画,动画代码如何更符合MVVM设计思想,是设计和学习过程中遇到的最大障碍。 1. 象棋棋子设计为UserControl,共32个棋子,为便于设计和控制,传统模式下(非MVVM模式)一般是在后台代码中定义一个控件数组,new出32个棋子实例,再放置到XAML的canvas中。问题:在MVVM模式中,如何做更符合MVVM设计思想?仍还没有搞明白。 2. 象棋棋子移动时使用了动画,棋子移动的目标位置通过鼠标点击棋盘而计算而来,是个变量,XAML中的动画参数不允许设置为变量(例如Binding变量)必须是固定值,否则会报错,因为牵涉到线程安全问题。 问题:不得已,只能在后台中设计动画代码。在MVVM模式下,又是怎么做呢?不知道。 3. MVVM大神们的强烈建议是,后台代码越少越好,控制逻辑要放到ViewModel中。但目前,我还是无法做到,特别是涉及到控件属性的操作。 4. 有更好的建议,请大神们在评论区给予指导吧,拜谢! #### 使用说明 #### 参与贡献 #### 特技