一周又过去了,今天一天差不多都是在床上躺过去了。

下午起床到楼下吃了一碗炸酱面

然后不知道该干啥,于是就回家打开电脑,开始继续写博客


上一篇我们一起完成了早.net core下的websocket的的中间件的开发。

基本的东西算是有了,今天我们来关注一下游戏逻辑的问题

开篇的时候,我们提到过,我们要开发的是一个炸金花的棋牌游戏(没玩过的同学请传送到百度百科https://baike.baidu.com/item/%E7%82%B8%E9%87%91%E8%8A%B1/8806924?fr=aladdin)

首先我们捋一下服务器需要做的东西

  • 定义一副扑克牌的类型
  • 炸金花游戏的牌型
  • 洗牌,生成N家牌

先定义好扑克牌的基本类型

/// <summary>/// 牌/// </summary>public class CardType{public static int A_A = 0;public static int B_A = 1;public static int C_A = 2;public static int D_A = 3;public static int A_2 = 4;public static int B_2 = 5;public static int C_2 = 6;public static int D_2 = 7;public static int A_3 = 8;public static int B_3 = 9;public static int C_3 = 10;public static int D_3 = 11;public static int A_4 = 12;public static int B_4 = 13;public static int C_4 = 14;public static int D_4 = 15;public static int A_5 = 16;public static int B_5 = 17;public static int C_5 = 18;public static int D_5 = 19;public static int A_6 = 20;public static int B_6 = 21;public static int C_6 = 22;public static int D_6 = 23;public static int A_7 = 24;public static int B_7 = 25;public static int C_7 = 26;public static int D_7 = 27;public static int A_8 = 28;public static int B_8 = 29;public static int C_8 = 30;public static int D_8 = 31;public static int A_9 = 32;public static int B_9 = 33;public static int C_9 = 34;public static int D_9 = 35;public static int A_10 = 36;public static int B_10 = 37;public static int C_10 = 38;public static int D_10 = 39;public static int A_J = 40;public static int B_J = 41;public static int C_J = 42;public static int D_J = 43;public static int A_Q = 44;public static int B_Q = 45;public static int C_Q = 46;public static int D_Q = 47;public static int A_K = 48;public static int B_K = 49;public static int C_K = 50;public static int D_K = 51;public static int W_XW = 52;public static int W_DW = 53;}

使用的时候静态的int类型作为牌的数据类型 变量名ABCD分别代表黑桃,红心 ,梅花 ,方块四种类型。W开头的代表扑克牌中的大王小王用下划线分割。

发牌就把int类型的数字发出去就好了,后面使用这个数字来判断是什么牌

如何获取牌型?

通过反射,获取CardType的字段的名称

static FieldInfo[] list = typeof(CardType).GetFields(BindingFlags.Static | BindingFlags.Public);

然后通过字段类型的对比,获取到时什么牌

 public static string TestCardName(int cardNumber){foreach (var item in list){int a = (int)item.GetValue(null);if (a == cardNumber){string name = "";var cardName = item.Name.Split("_");switch (cardName[0]){case "A":name = "黑桃";break;case "B":name = "红桃";break;case "C":name = "梅花";break;case "D":name = "方块";break;}if (name != ""){name += cardName[1];}//特殊牌型判断if (item.Name.Contains("XW")){name = "小王";}if (item.Name.Contains("DW")){name = "大王";}return name;}}return "未知牌";}

有了牌之后,我们就可以开始洗牌了

如何洗牌?

  玩牌的时候,洗牌就是把桌上的牌拿起来不停的搓啊搓啊的,然后就开始发牌。但是在程序中,我们不可能拿着牌搓啊搓的。。。但是我们可以搓数组啊。。。

  所以我们先生成一个和CardType里面的从0到53的一个顺序的数组或者集合

 List<int> list = new List<int>();for (int i = 0; i <= 51; i++){list.Add(i);}

然后打乱这个集合的顺序,这样就算是洗好牌了。。。如果要洗多次牌,就打乱多次顺序。。。(博主认为这样没意义)

 /// <summary>/// 随机排列数组元素/// </summary>/// <param name="myList"></param>/// <returns></returns>private static List<int> ListRandom(List<int> myList){Random ran = new Random();int index = 0;int temp = 0;for (int i = 0; i < myList.Count; i++){index = ran.Next(0, myList.Count - 1);if (index != i){temp = myList[i];myList[i] = myList[index];myList[index] = temp;}}return myList;}

然后我们这个洗牌的方法就直接调用就可以得到一个乱序的int集合,集合中的每个int值就对应CardType的一个牌类型

 /// <summary>/// 洗牌/// </summary>/// <returns></returns>public static List<int> Shuffle(){List<int> list = new List<int>();for (int i = 0; i <= 51; i++){list.Add(i);}return ListRandom(list);}

然后在这个乱序的牌集合里面,取出三家的牌(具体多少家,看心情吧。。。也不一定非要三家)

using System.Linq;

 var list = JinHuaUtils.Shuffle();list.Skip(0).Take(3);

取出第一家的牌就是跳过0条取三张,第二家就是跳过3条取三张,然后依次类推,就可以取出N方的牌。(我想了一下,这个方法应该适用于各种牌类型的洗牌,至少斗地主,牛牛这类的是没问题的,其他的我也不会QAQ)

好了,今天就到这里了,下一节应该还是对牌的操作,比如牌比大小啊,炸金花游戏的牌型啊(对子,顺子,金花,三筒)等等的一些操作。

本来打算一篇写完的,但是迫于本人表达能力(其实我认为是园友耐心问题),就分几篇写吧

我也是摸索着写这个东西,如果有理解错误的地方,希望园友们指出


如果想请我喝瓶水,可以扫一下二维码 QAQ

转载于:https://www.cnblogs.com/boxrice/p/8592877.html

服务器开发- 牌和牌的基本操作相关推荐

  1. 学习JAVA游戏服务器开发需要了解的情况

    一,游戏服务器开发的工作介绍 近来遇到有很多人想从其它开发领域转到游戏服务器开发行业上来,他们或许觉得游戏服务器开发工资高,或许觉得做游戏服务器需要掌握的技术更高级,可以锻炼自己,或许觉得想换个环境等 ...

  2. 服务器开发设计之算法宝典

    作者:lynhlzou,腾讯 IEG 后台开发工程师 孙子云:"上兵伐谋,其次伐交,其次伐兵,其下攻城",最上乘行军打仗的方式是运用谋略,下乘的方式才是与敌人进行惨烈的厮杀.同样的 ...

  3. 深度解析Java游戏服务器开发

    ---恢复内容开始--- 1.认识游戏 1.1什么是游戏 1.1.1游戏的定义 任何人类正常生理需求之外的活动均可称为游戏 1.1.2游戏的分类 RPG角色扮演游戏.ACT动作游戏.AVG冒险游戏.F ...

  4. lt;转载gt;游戏服务器开发都要学什么?

    2018年3月3日 欢迎扫二维码关注公众号,获取技术干货 近来遇到有很多人想从其它开发领域转到游戏服务器开发行业上来,他们或许觉得游戏服务器开发工资高,或许觉得做游戏服务器需要掌握的技术更高级,可以锻 ...

  5. 游戏服务器开发(基本需求)

    1,团队沟通 基本上不管做什么开发,都是一个团队来完成的,游戏也是如此,游戏团队一般由老板,总经理,CTO(技术主管),主策划(领导一些人,包括数值策划,系统策划,特效策划),主美(领导一些人,包括原 ...

  6. 游戏服务器开发需要学什么

    一,游戏服务器开发的工作介绍 近来遇到有很多人想从其它开发领域转到游戏服务器开发行业上来,他们或许觉得游戏服务器开发工资高,或许觉得做游戏服务器需要掌握的技术更高级,可以锻炼自己,或许觉得想换个环境等 ...

  7. 2020,游戏服务器开发需要掌握哪些,你都具备了吗

    序言 一.游戏服务器开发工作介绍 有很多朋友会问我,想从其它开发领域转到游戏服务器开发上来,需要学什么? 或许是因为游戏服务器开发工资高,或许是因为感觉做游戏服务器需要掌握的技术更高级,更具有挑战性, ...

  8. 服务器开发系列(五)——服务器运维

    系列文章目录 服务器开发系列(一)--计算机硬件 服务器开发系列(二)--Jetson Xavier NX 服务器开发系列(三)--Linux与Windows操作系统基础功能对比 服务器开发系列(四) ...

  9. linux服务器开发二(系统编程)--线程相关

    线程概念 什么是线程 LWP:Light Weight Process,轻量级的进程,本质仍是进程(在Linux环境下). 进程:独立地址空间,拥有PCB. 线程:也有PCB,但没有独立的地址空间(共 ...

  10. ngrok服务器搭建_C/C++ Linux 后台服务器开发高级架构师学习知识路线总结

    前言: 小编也是从事c方面10多年的工作经验.今天跟大家分享一下我总结出来的一系列 C/C Linux后台服务器开发的学习路线.从Linux开发工程师-Linux后台开发工程师-Linux高级互联网架 ...

最新文章

  1. 芝麻HTTP:redis-py的安装
  2. oracle服务器内存建议,Oracle内存分配建议
  3. JS之字符串截取方法substring
  4. vba mysql连接字符串_分享一个VBA连接mysql数据库的方法
  5. jcmd jmap应用:一个String经典笔试题的验证
  6. STL之inner_product
  7. 【C语言】删除元素(函数,数组的扫描)
  8. 【脑筋急转弯】—— 在网格中移动
  9. 关于java中equals与==的区别的小实验
  10. 一、RequireHttps
  11. 1月2日 Ubuntu14.04安装和配置ROS Indigo(一)
  12. TCP/IP学习 1.2 IP包头(2)
  13. c++编程时为什么老是出现cout未定义
  14. 2022-2028年中国飞机电子飞行包(EFB)行业市场竞争状况及发展趋向分析报告
  15. 网络安全攻防实验室通关教程-注入关
  16. VMware拟收购云应用管理服务商Wavefront
  17. Mac上使用Docker Desktop启动Kubernetes,踩坑后终于搞掂
  18. java double丢失精度问题,加减乘除计算出错出现99999
  19. Origin批量滤波
  20. 圣诞树太俗气,圣诞牛才够创意----阿里巴巴B2B高上大玩法的启示

热门文章

  1. hp台式计算机生产日期,如何查询hp笔记本生产日期
  2. 【pytest】2.pytest的前置、后置
  3. Verilog实现表决器
  4. echars的简单使用
  5. Facebook、微软、腾讯、DiDi message等全球科技公司都在抢先布局元宇宙
  6. js禁用退格键(BackSpace)
  7. nyoj 125 盗梦空间
  8. ubuntu 开启grub选择界面
  9. 什么是HTTP长连接、短连接
  10. 使用 Lambda 表达式的正确姿势,写得太好了叭