上节说道了对这个游戏  面向对象的分析,各位读者 ,有什么不懂,尽情给我留言把!!!!!!

闲话少说,这节我们对 游戏的实体类,先进行伪代码分析,然后进行源代码的分析。

我们先看这些类的整体的架构如下图所示:

Piece类  代表相应的棋子的类, 他应该有 位置这个属性,而位置的最好的体现是通过纵坐标横坐标来体现;相应形状这个属性代表是黑色用户控件还是白棋的用户控件。

类型属性代表代表这是黑棋, 还是白棋;

索引属性  插入相应的索引的位置。  相应源代码如下:

private UserControl _shape;

private Position _position;

/// <summary>
      /// Gets or sets the X.
     /// </summary>
    /// <value>The X.</value>
     public int X
 {
    get { return _position.X; }
     set { _position.X = value; }
  }

/// <summary>
   /// Gets or sets the Y.
   /// </summary>
  /// <value>The Y.</value>
   public int Y
  {
   get { return _position.Y; }
   set { _position.Y = value; }
  }

/// <summary>
  /// Gets or sets the position.
  /// </summary>
  /// <value>The position.</value>
  public Position Position
 {
get { return _position; }
set { _position = value; }
}

public PieceType Type { get; set; }
  public int Index { get; set; }

/// <summary>
 /// Initializes a new instance of the <see cref="Piece"/> class.
 // </summary>
  public Piece()
 {
  _position = new Position(0,0);
  }

/// <summary>
  /// Gets the shape.
  /// </summary>
  /// <value>The shape.</value>
  public UserControl Shape
 {
 get
 {
 if (_shape == null)
 {
 if (Type == PieceType.Black)
 _shape = new BlackPieceComponent();
 if (Type == PieceType.White)
 _shape = new WhitePieceComponent();
 }
 return _shape;
 }
 }

PieceBoard(棋盘) 这个类 是用于对棋盘进行面向对象的处理后的类,   他有那些属性和方法了

首先,考虑整块游戏只需要一块棋盘,因此我们是不是用单例模式来产生这快棋盘。 说道单例模式的话,有一个 相应类事例和产生单独一个对象的方法。

棋盘棋盘本身就是盛放棋子的容器,因此我们这里需要一个盛放棋子的数组,为什么是数组啊? 因为棋盘是15*15方格子。

相应的源代码如下

public class PieceBoard
   {
    static PieceBoard _Instance { get; set; }

public Piece[,] pieces { get; set; }

private PieceBoard()
  {
  Init();
  }

private void Init()
  {
   pieces = new Piece[AppConfig.BoardWidth, AppConfig.BoardWidth];
    }
    public static PieceBoard GetPieces()
  {
  lock (_Instance)
  {
  if (_Instance==null)
  {
   _Instance = new PieceBoard();
   }
  }
  return _Instance;
  }
  }

怎么知道谁赢了,当然是有一套复杂判断连五子的方法,显然,我们需要一套复杂,的算法。这节我们不说他,说一说储存胜利结果的类。

WinningResult 他有哪些属性,谁取胜的一个枚举的属性,一个那种棋子属性,一个棋子的泛型数组。可能读者就纳闷了,前两个属性需要

还好理解,而一个棋子的泛型数组  是干嘛的,首先他不是吃饭的。他是把每个胜利结果下的棋子储存起来,以做以后判断使用。

相应的源代码如下:

public class WinningResult
  {
  public WinningType wtype { get; set; }

public PieceType ptype { get; set; }

public List<Piece> piecs;

public WinningResult()
  {
  piecs = new List<Piece>();
  }
 }

这里说他两个枚举类型,源代码就不用多贴了,PieceType棋子的类型分别 代表的   白色、黑色类型。  WinningType 胜利的类型,        有水平,垂直,斜起方向。

你会问我为什么要枚举,简而言之,就是避免魔鬼数字, 更好的见名之义。 增强源代码的可读性。      是1更好理解, 还是Black更好的理解,你说了

我这节说的够多了,就此休笔把!!!      欲知后事如何,且听下回分解。

win8 开发之旅(5) --五子棋游戏开发相关推荐

  1. win8 开发之旅(3) --五子棋游戏开发 前奏

    真的是好久.好久没有写博客了,手都生了.我有在国庆这七天的时间更进一步的学习了xaml语言,熟悉了win8的开发的过程. 因此我会把我这些天开发的一些心得陆陆续续的分享给大家. 经过前几次我写相应的开 ...

  2. 元宇宙游戏开发公司 深圳元宇宙游戏开发

    splinterlands元宇宙游戏开发,upland元宇宙游戏开发,CryptoBlades元宇宙游戏开发,SecondLive元宇宙游戏开发,PROSPECTORS元宇宙游戏开发,Office L ...

  3. 游戏开发入门(一)游戏开发概述

    视频链接:游戏开发入门(一)游戏开发概述(3节课 时常:约1小时03分钟) 该视频围绕电子游戏的发展与开发简单介绍了一些基本常识,同时提出并解决了几个问题 笔记与总结(请先学习视频内容): 1.游戏机 ...

  4. [libGDX游戏开发教程]使用LibGDX进行游戏开发(1)-游戏设计

    声明:本章是一个系列的开始,英文原文是<Learning libGDX Game Development>,大家请周知. [libgdx游戏开发教程]使用Libgdx进行游戏开发(2)-游 ...

  5. Java五子棋游戏开发博客

    一.项目简介 五子棋是大家喜闻乐见的小游戏,规则很简单,但又变化多端,具有趣味性,可玩性很强.五子棋游戏程序可以让人们方便快捷的下五子棋,让人们可以随时通过下棋提高思维能力.功能如下:在点击鼠标时,可 ...

  6. 结对-五子棋游戏-开发环境搭建过程

    项目名称:五子棋游戏 参加项目人员:李一轩.程吉 环境搭建:下载HBuilder软件,下载Google浏览器:依次安装即可使用 转载于:https://www.cnblogs.com/SirL/p/7 ...

  7. 【Android游戏开发二十七】讲解游戏开发与项目下的hdpi 、mdpi与ldpi资源文件夹以及游戏高清版本的设置...

    今天一个开发者问到我为什么游戏开发要删除项目下的hdpi.mdpi和ldpi文件夹:下面详细给大家解答一下: 首先童鞋们如果看过我写的<[Android游戏开发二十一]Android os设备谎 ...

  8. [libGDX游戏开发教程]使用libGDX进行游戏开发(12)-Action动画

    前文章节列表: 使用libGDX进行游戏开发(11)-高级编程技巧  使用libGDX进行游戏开发(10)-音乐音效不求人,程序员也可以DIY  使用libGDX进行游戏开发(9)-场景过渡 使用li ...

  9. 安卓游戏开发用什么引擎_游戏开发学习第一天————用什么软件

    今天开始了虚幻学习的第一天! 好的,那我们就开始学习做游戏吧! 始学习做游戏吧 学习做游戏吧 习做游戏吧 做游戏吧 游戏吧 戏吧 吧 等等,要学做游戏啊...... 第一步要做什么,我还完全不知道啊喂 ...

最新文章

  1. EasyExcel中输出为时间格式
  2. 电压压力蕊片_一文让你知道什么是压力变送器
  3. (37)System Verilog类外方法示例
  4. OpenShift 4 - 查看关键证书到期日期
  5. ASCII码表对照图
  6. 磨刀不误砍柴工,掌握DEVC++的一些实用技巧
  7. 【ubuntu使用排坑】fsckd-cancel-msg:Press Ctrl+C to cancel all filesystem checks
  8. 单词首字母变大写-vue
  9. VMWare 设置CentOS虚拟机固定IP地址
  10. Firefox plugin
  11. 互联网晚报 | 10月14日 星期四 | 钉钉宣布用户数破5亿;顺丰王卫将出任嘉里物流董事会主席;字节跳动巨量引擎进军职业教育...
  12. 我的世界服务器个体值怎么修改,我的世界神奇宝贝个体值指令 | 手游网游页游攻略大全...
  13. 解决ubuntu12.04安装air微博错误
  14. Remote Desktop Connection Manager2.92 安装+基本使用
  15. java计算机毕业设计ssm智慧小区团购系统4x45g(附源码、数据库)
  16. 新概念英语的学习方法
  17. 【向生活低头】将flv格式文件转为mp4
  18. 【成为一个优秀的软件测试工程师】
  19. 解决电脑不显示桌面图标问题
  20. 另类方法----不刷BIOS为9600的软改9550成为T2

热门文章

  1. Active Directory备份与还原
  2. 《计算机网络:自顶向下方法(原书第6版)》一2.7 TCP套接字编程
  3. AST语法结构树初学者完整教程
  4. windows server 2008配置之AD域服务器 1
  5. [转]没有找到 MFC42D.DLL,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。解决方法!...
  6. Centos 7 密码重置
  7. flutter安装教程(win7)
  8. 发展需要大师,繁荣更需批评——GIS现状堪忧
  9. IIS6.0 + openssl执行版 + Windows2003--配置篇
  10. storm1.x介绍