#WPF制作蜘蛛纸牌
##一、结果展示

##二、需求分析
###1. 蜘蛛纸牌游戏逻辑分析:
胜利规则:移除游戏界面内的所有牌;
操作:通过鼠标拖动,将一组(张)牌从一个牌堆移动到另一个牌堆;发牌;
发牌规则:为每一个牌堆新增一张牌;只有每一个牌堆里都有牌时才允许该操作;
移动规则:这组牌为同种花色且从上到下牌面数字形成降序排列。
移除规则:一个牌堆里出现从K到A的同色降序牌组;
得分规则:一次移动的牌组数目越多,得分越多;

###2. WPF程序功能分析:
1)支持选择游戏难度:单花色或者双花色;
2)支持新建游戏、保存游戏、打开游戏;

###3. WPF界面分析:
1)中间区域显示操作数以及得分;
2)右下角区域为发牌区,方便玩家发牌;
3)左下角区域为已经完成的牌组;

##三、代码设计

###采用WPF完成界面:
该游戏中共有三个窗体:MainWindow窗体为主游戏窗体、GameWay窗体实现选择游戏方式的功能(新游戏或者打开存盘游戏)、MyDifficultyChooser窗体实现选择游戏难度的功能(单花色或者双花色);
###游戏逻辑部分:

  1. 游戏逻辑主要在PuckStack类完成,包括判断是否可以移动牌组、接收牌组、移除牌组等功能;PuckStackServer类是PuckStack类的一个管理类,相当于MVC架构中的C,沟通前端数据源和数据处理者;

  2. FinishPosition类、GameStackPosition类、UnfinishPosition类为三个与位置相关的辅助类,分别负责左下角区域相关图片绘制时的坐标计算、牌堆中牌图片的坐标计算和发牌区图片坐标计算;

  3. card类是Puck类的浓缩版,在PuckMaker类洗牌时使用,但是使用了这个类来记录牌的基本信息,然后根据这些基本信息生成List<Puck>,在写博客时发现完全不需要这么做,只需要为Puck类添加一个2参数的构造函数即可,为什么会出现这种情况?答案在最后揭晓 :-)~

  4. PuckGroup只有一个成员变量,就是一个List<Puck> 为什么使用一个类来做外壳呢?因为在生成游戏牌组的时候是10张牌每组,共10组余4张,然后再分配给第1~4组,一个组里面的牌分别属于十个游戏组,每一游戏组对应游戏界面一个游戏堆;游戏管理是按游戏组管理的,而游戏组内部也使用List<Puck> 作为数据容器,当很多地方都出现<Puck> 时就很容易搞混,当时应该是对游戏组和生成的牌组之间的关系不太明白,所以就用了类做外壳;

###菜单设计:
在对应窗体的waml文件里编辑即可;

##四、知识点

  1. 蜘蛛纸牌涉及到的计算比五子棋游戏要复杂一些;主要的计算为图片坐标的计算;

  2. 将蜘蛛纸牌的游戏规则转换为代码逻辑的过程中下标的应用很容易混淆:这个变量到底是从1开始的还是从0开始的?,到底要不要减一?(有时候使用从1开始的计数比较方便,比如标记个数,第1个总比第0个好理解一点,有时0会比较好,比如获取数组里的对象之类的),可怕的是没有一个统一的标准,两种同时混用,如果记得不是很清楚(比如,今天使用昨天声明的变量等情况),很容易出现数组越界之类让人头大的bug;

  3. 其实这是大二上C#实验课的结课作业,当时编程经验少,也没什么面向对象的概念,觉得变量、方法凑一起就算封装啦,所以代码中有很多现在看来很明显的不足,card类的使用就是一例:大概是因为考虑到List交换元素(洗牌)的过程中需要移除元素然后再插入元素,这样效率很低,所以就想先用数组产生牌的相关序列信息,然后用这些信息再产生List<Puck>于是有了card类;但是为啥没用Puck的数组?可能是以为对象间赋值会产生新的中间对象(应该是对C#面向对象以及对象数组的本质认识不足[说的现在就很了解一样:-)]),反正就蠢蠢地“面向对象”了。还有就是将游戏中的Image同代码中Puck类相关联的字典,的确在游戏中存在根据图像找到Puck(判断是否可以移动之类的)和根据Puck找到图像(收牌的时候需要将图片从界面中移除)的场景,所以我使用了两个Dictionary!一个Image做键,一个Puck做键,当然功能上来说没有问题,可是应该有更合理的方法(未测试,如有错误,还请指正):继承Image类,产生Image类的子类MyImage,然后在里面持有一个Puck类对象,然后在Puck类里持有一个MyImage对象,这样似乎更“面向对象”一些

    WPF实现蜘蛛纸牌游戏相关推荐

    1. 【180930】WPF蜘蛛纸牌游戏源码

      WPF版蜘蛛纸牌游戏源码 可以配置难度级别,记录分数,时间以及排行 欢迎感兴趣的用户下载研究 源码下载地址:点击下载 备用下载地址:点击下载

    2. 基于JavaSwing开发蜘蛛纸牌游戏 课程设计 大作业源码

      基于JavaSwing开发蜘蛛纸牌游戏:   (大作业) 开发环境: Windows操作系统 开发工具: Eclipse+Jdk 运行效果图: 基于JavaSwing开发蜘蛛纸牌游戏:   (大作业) ...

    3. 计算机上的蜘蛛纸牌游戏打不开,win10系统系统笔记本打不开蜘蛛纸牌游戏的具体方法...

      win10系统使用久了,好多网友反馈说win10系统系统笔记本打不开蜘蛛纸牌游戏的问题,非常不方便.有什么办法可以永久解决win10系统系统笔记本打不开蜘蛛纸牌游戏的问题,面对win10系统系统笔记本 ...

    4. 蜘蛛纸牌java课设_java蜘蛛纸牌游戏设计

      java蜘蛛纸牌游戏设计 java蜘蛛纸牌游戏源程序 AboutDialog.java import javax.swing.*; import java.awt.*; /* **"关于&q ...

    5. java蜘蛛纸牌课程设计_Java课程设计-蜘蛛纸牌游戏.doc

      Java课程设计-蜘蛛纸牌游戏.doc 还剩 33页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: Java 课 ...

    6. 蜘蛛纸牌 java代码_java实现蜘蛛纸牌游戏

      [实例简介] 用java技术实现windows自带的蜘蛛纸牌游戏 [实例截图] [核心代码] CardsGame └── CardsGame ├── bin │   └── com │   └── g ...

    7. 计算机上的蜘蛛纸牌游戏打不开,win7系统系统笔记本打不开蜘蛛纸牌游戏的解决方法...

      今天和大家分享一下win7系统系统笔记本打不开蜘蛛纸牌游戏问题的解决方法,在使用win7系统的过程中经常不知道如何去解决win7系统系统笔记本打不开蜘蛛纸牌游戏的问题,有什么好的办法去解决win7系统 ...

    8. Araneid 蜘蛛纸牌游戏源代码

      Araneid 蜘蛛纸牌游戏源代码 2004年7月1日  作者:dujid  Matrix-与Java共舞             Araneid 蜘蛛纸牌游戏 详细参考工程主页: http://pu ...

    9. Araneid 蜘蛛纸牌游戏源代码 (转)

      Araneid 蜘蛛纸牌游戏源代码 (转)[@more@] Araneid 蜘蛛纸牌游戏源代码 2004年7月1日  作者:dujid  Matrix-与Java共舞         Araneid ...

    最新文章

    1. Spark-Spark setMaster WordCount Demo
    2. bzoj 1441: Min 裴蜀定理
    3. Could not load dynamic library ‘cudart64_101.dll‘
    4. Berkeley DB的数据存储结构——哈希表(Hash Table)、B树(BTree)、队列(Queue)、记录号(Recno)...
    5. 设置tomcat使用指定的jdk版本
    6. 圆柱属于能滚动的物体吗_一户多宅属于违建吗?怎么能拥有多一点的宅基地
    7. Android TextView设置ClickableSpan 点击结尾空白位置也响应点击的问题
    8. Java中的延迟分配
    9. url采集器_Linux「第三节」-centos7.5部署数据采集器Telegraf
    10. mysql 动态创建事件_mysql 通过事件定时为数据库创建动态表名
    11. 推荐几本lisp的书.
    12. Python 量化投资实战教程(5) — A股回测KDJ 策略
    13. Excel QUARTILE函数计算逻辑
    14. C++学习(一五九)Qt的场景图Scene Graph
    15. Godaddy无缝切换SSL,无需续费可省12美元
    16. 网易云信助力兴趣社交头部玩家,【微光】打造在线交友电影院
    17. 2021:Check it again:Progressive Visual Question Answering via Visual Entailment通过视觉暗示进行渐进式视觉问答
    18. solidworks2022 无效的(不一致的)使用许可号码 问题解决
    19. NVL、NVL2、NULLIF、COALESCE的区别是什么?
    20. Opengl显卡设置问题

    热门文章

    1. 高科路由器有虚拟服务器设置吗,高科(GAOKE)路由器怎么设置无线网络?
    2. PPT图表素材 模板 扁平化 复古 时尚 微立体 动态 综合分类大合集
    3. 前端-个人网页开发最常用的插件Superslide 与 swiper
    4. EDK2设备驱动模型
    5. 实验六 555定时器及应用
    6. 学校网站建设网站制作方案
    7. 学习笔记(5):C#急速入门-单行和多行注释
    8. 超融合平台中折腾linux(ubuntu/centos)虚拟机
    9. HTML+JavaScript随机名单抽取
    10. 陪伴我走过春夏秋冬的校园