C#写的网络版斗地主

断断续续写了一个月,总算是把这个东西搞出来了。第一次写网络程序,所以网络部分很烂,如果网络延迟厉害的话就会出错。

出牌规则和牌组之间的比较已经比较完善,能想到的组合方式都写上去了。

由于本人学习C#的时间不长,而且是利用业余时间学习。所以技术不怎么样,写出来的代码总共2147行。质量个人觉得比较差劲,刚开始架构整个程序时还是按照面向对象的思考方式架构整个程序,但是架构了一部分之后后面的东西,比如网络,规则等实在是想不出来了,只能走一步算一步。所以后面写的代码基本没有面向对象,完全是为了实现功能写代码。


嗯,本程序是我断断续续学习C#大半年来,写的最难最复杂的一个程序。除了牌的从大到小排序算法使用著名的冒泡排序以外,其他所有代码全部原创。回过头来看看自己写的这些东西,还是蛮有成就感的~

截图:


下面放出程序的源代码,希望能和大家一起学习交流。

本文配套源码

时间: 2024-10-29 18:38:53

C#写的网络版斗地主的相关文章

C#网络版斗地主——网络部分实现

本文是对C#网络版斗地主的总结,之后还有两篇,分别介绍地主权限的传递和出牌权限的传递,还有出牌算法和规则. 服务器使用server类与客户端通讯,客户端使用client类与服务器通讯. 当创建游戏时,new出一个server对象,并且开始监听默认端口"1991". 然后创建一个线程,用死循环while(true)检测是否有客户端连接,如果有的话获取Client对象,当获取了两个Clinet对象后,停止监听,中断循环. 服务器获取了两个客户端后,启动两个线程"AccpetCli

C#网络版斗地主——出牌算法和规则

本文是对C#网络版斗地主的开发总结,同时也是最后一篇. 大家知道,斗地主这个游戏是将一些特有的牌组合成牌组然后来比较牌组的大小,那么,就应该给PokerGroup类定义一个属性type,即牌组的类型,type的值是一个枚举类型 1 public enum PokerGroupType 2 { 3 单张 = 1, 4 对子 = 2, 5 双王 = 3, 6 三张相同 = 4, 7 三带一 = 5, 8 炸弹 = 6, 9 五张顺子 = 7, 10 六张顺子 = 8, 11 三连对 = 9, 12

C#网络版斗地主——地主权限的传递

本文是对C#网络版斗地主的总结. 首先服务器使用一个随机数来随即选出默认地主.然后发送信息给选出来的玩家.玩家接收到信息后显示两个按钮"叫地主","不叫".如果选择不叫,则把可以叫地主的权限发送给另外一个玩家,如果另外两个玩家都不要的话,就执行Restart()方法重新发牌. 叫地主权限的传递顺序如下图所示: 具体实现方法: 服务器得到一个1-3的随机数,1代表服务器是默认地主(默认地主就是随机选择的第一个有权限叫地主的玩家),2代表client1是默认地主,3代表

C#网络版斗地主——出牌权限的传递

本文是对C#网络版斗地主的开发总结. 出牌顺序如上图所示. 出牌权限可以用一个bool值表示 在Player类中,有一个属性:haveOrder表示玩家是否有权限出牌. 还需要考虑到一点,当一个玩家出牌后,其他玩家都要不起(pass),该玩家不能自己"要不起"自己,所以还需要一个bool类型的属性"IsBiggest". 该属性表示自己出的牌最大.怎样保证该值的有效性呢?换句话说,最大的只能有一个.所以,每当自己出牌的时候,只要自己的牌比别人的牌大,就把该值设置为t

java服务器端的房间如何实现

问题描述 我想写个网络版中国象棋,谁能告诉我房间如何实现.....代码或者详细讲解,立即给分,在线等.....快,来斗点... 解决方案 解决方案二:知道为啥要分房间么?一个房间就是一台服务器.你能想象像腾讯这样的服务器不分房间,所有的用户都去访问一台服务器么?所以,你想要的一个房间就是一台服务器部署,而部署在这个服务器上的应用就是一个房间.1.大厅负责收集各个房间(服务器)的人员信息,统计每个房间有多少在线2.进入每个房间以后,可以看到有多少桌人在下棋...3.请进行具体的数据库设计和服务器端

java源码-java写一个斗地主的最简单功能

问题描述 java写一个斗地主的最简单功能 斗地主定义一副扑克牌,按照斗地主的规则,为三家随机发17张牌,并且留3张底牌.同时指定一个地主.很好玩的,求源码就这一个简单功能就行了 解决方案 http://www.cnblogs.com/jiahuafu/p/4936111.html 解决方案二: 容器放牌,每次随机抽出不重复的牌存到三个小容器,最后剩三张,在用随机数指定地主

最近在写用java se写一个纸牌游戏,遇到问题,大侠请进

问题描述 我写了个类似斗地主的纸牌游戏UNO,网络版来的.但是现在遇见问题了.我用Object流进行客户端与服务端的信息交流.现在问题是如何初始化玩家座位,每个客户端的界面肯定是不一样的,我每次出牌都会发一个玩家的所有信息给服务端,服务端在分发给每个客户端.客户端收到信息后进行规则判断,如后进行下步的操作..或者大侠有没有更好的办法,第一次写网络版的纸牌游戏.或许大侠给个更好的思路,小弟拜谢.如果可以加小弟Q:531767256指点小弟 解决方案 解决方案二:乱啊...找个别人写的看看吧如htt

导入-Java从excel读取数据时,能够自己选择excel文件,不用在代码中将文件目录写死!

问题描述 Java从excel读取数据时,能够自己选择excel文件,不用在代码中将文件目录写死! 项目是进行单机版和网络版的数据对比,需要将单机版导出来的数据(excel表格,固定格式)导入网络版进行对比,网络版在导入数据时能提示选择导入的excel文件,不用在Java代码中将要读取数据的excel表格的目录写死.谢谢您的帮助! 解决方案 JAVA读取EXCEL用的比较多的是POI类库,参考Java对Excel(0307)进行上传.解析.验证.入库,或者你搜索一下java poi,有很多文章的

站长网诚邀站长写手一同发展

站长  站长网(admin5.com)目前主要以站长新闻和站长经验为主,准备打造成最大的站长资讯中心,站长的故事很多,站长更多的需要被引导,站长需要被关注,个人站长需要走向媒体,走向互联网,这是站长网的责任,也是广大站长写手的责任.我们愿意与广大的写手一起.为中国的个人站长做点事情.      我们的主要目标:1)将个人站长这个概念做大,把个人站长推向it潮流,把个人站长推向互联网的前沿.  2)给中国个人站长更多的引导,目前站长网 admin5 每天有数万的站长来关注,好的资讯,好的信息,也是