源码下载在最后

我们的前年的课设要求做一个斗地主程序,当时正在愁如何做界面,当时刚好在学习C#,于是就用C#完成了这个程序。

一方面,当时我C#功底还很差(其实现在也不怎么样),很多地方用了“笨办法”,实现的比较幼稚,程序效率很低,另一方面感觉很对不起老师,因为做这个程序的本意是研究斗地主程序的AI出牌等等算法相关的东西,而我却几乎忽略了这些内容。(我会好好学习算法的……^-^)

最可怕的是,由于当时时间比较紧,只有几天的时间,所以我本着“能跑就行”的想法完成了这个程序。从程序本身来说,我觉得我的代码几乎没有任何参考价值,满篇的switch...case...,乱七八糟的结构,而且最可怕的是,所有代码几乎都集中在了一个mainform.xaml.cs文件里。。。太恐怖了。我一直为我会写出这样的代码感到羞耻……因此也就没敢发布这些源码。

最近又在研究Java,做另外的项目,看了看以前的代码,觉得虽然代码很烂,但有些地方的处理还是有一定意义的,毕竟这也算是个中小游戏应用,于是又用JAVA重写了一遍,发上来和大家分享。如果能对你的学习或者工作起到任何作用,我都会非常高兴。

此源码完全自由使用,你可以利用它做任何事情,包括商业应用,而不需要提前通知我。

这次采用的是JAVA8 ,最新发布的JAVA版本,

IDE是netbeans,一共有80MB左右大小,体积不大,安装也容易

程序文件夹结构是从C#转过来的,期间使用一个叫C#转JAVA的工具,转换了一下语法,效果不是很理想,还是手工改了许多地方

可以看到,程序是从Program.java启动(和VS的项目一样)

游戏是网页版联机的,因此分服务端和客户端二部分,

服务端JAVA包括斗地主逻辑服务 和 记录服务(生成SQL语句发给数据库)

游戏客户端 -》 斗地主逻辑服务 - 》记录服务 -》 数据库

《-                       《-             《-

客户端发消息到斗地主逻辑,斗地主逻辑转发到记录服务,再返回来,这样一个通信过程

分成逻辑和记录二部分的好处是 可以并行运行提高效率,比如在SQL语句执行时,斗地主逻辑可以继续处理请求

现在开始构架游戏,为了不让代码那么难看,我们很有必要加入设计模式和面向对象思想。

首先,我们列出54张牌。

大家可以看到,扑克数字相同时,有4种花色,桃心梅方

利用这个特性,我们采用了数字间隔,0-3一组 , 4-7一组,如果想得到花色,取模就可以了,是不是很方便?

1 /**

2 * 背面牌都是负数3 */

4 public static final int BG_NORMAL = -3;5 public static final int BG_NONGMING = -2;6 public static final int BG_DIZHU = -1;7

8 public static final int F_3 = 0;9 public static final int M_3 = 1;10 public static final int X_3 = 2;11 public static final int T_3 = 3;12

13 public static final int F_4 = 4;14 public static final int M_4 = 5;15 public static final int X_4 = 6;16 public static final int T_4 = 7;17

18 public static final int F_5 = 8;19 public static final int M_5 = 9;20 public static final int X_5 = 10;21 public static final int T_5 = 11;22

23 public static final int F_6 = 12;24 public static final int M_6 = 13;25 public static final int X_6 = 14;26 public static final int T_6 = 15;27

28 public static final int F_7 = 16;29 public static final int M_7 = 17;30 public static final int X_7 = 18;31 public static final int T_7 = 19;32

33 public static final int F_8 = 20;34 public static final int M_8 = 21;35 public static final int X_8 = 22;36 public static final int T_8 = 23;37

38 public static final int F_9 = 24;39 public static final int M_9 = 25;40 public static final int X_9 = 26;41 public static final int T_9 = 27;42

43 public static final int F_10 = 28;44 public static final int M_10 = 29;45 public static final int X_10 = 30;46 public static final int T_10 = 31;47

48 public static final int F_J = 32;49 public static final int M_J = 33;50 public static final int X_J = 34;51 public static final int T_J = 35;52

53 public static final int F_Q = 36;54 public static final int M_Q = 37;55 public static final int X_Q = 38;56 public static final int T_Q = 39;57

58 public static final int F_K = 40;59 public static final int M_K = 41;60 public static final int X_K = 42;61 public static final int T_K = 43;62

63 public static final int F_A = 44;64 public static final int M_A = 45;65 public static final int X_A = 46;66 public static final int T_A = 47;67

68 public static final int F_2 = 56;69 public static final int M_2 = 57;70 public static final int X_2 = 58;71 public static final int T_2 = 59;72

73 public static final int JOKER_XIAO = 60;74 public static final int JOKER_DA = 64;

在PaiBoardByDdz类中,负责生成新牌和洗牌操作。我的思想是这样的,先通过算法按顺序生成54张牌,然后随机抽取这些牌,被抽取的牌从原来集合中删除,直到所有的牌都被抽取完毕为止,从而达到洗牌的目的。参考如下代码:可以看出生成新牌的时候使用了增强的随机数。

/**洗牌*/

public final voidxipai()

{//reset();// int i = 0;int len = 0;int n = 0;//clone pai name

java.util.ArrayList p =PAI_NAME.GetList();//第一次发17张牌

len = 17;//提高随机数不重复概率的种子生成方法://Millisecond 取值范围是 0 - 999//DateTime.Now.Ticks是指从1970年1月1日(具体哪年忘了哈,好像是1970)开始到目前所经过的毫秒数——刻度数。//54张牌的组合是 54!//是一个非常大的数,结果是: 2.3e + 71//因此我们的seed的取值范围也应该非常大,也就是0到上面的结果,//Millisecond小了,导致只会出现999种牌的组合//guid方法不可取,每回都是一样的//直接以Random做为随机数生成器因为时钟精度问题,//在一个小的时间段内会得到同样的伪随机数序列,//你shuffle后会得到同一个结果。//.net提供了RNGCryptoServiceProvider可以避免这种情况//GetRandSeed后的取值范围是 0 - int32.MaxValue,虽然还差很远,但是999要好很多

java.util.Random r = newjava.util.Random(RandomUtil.GetRandSeed());for (i = 0; i < len; i++)

{

n=r.nextInt(p.size());

grid[0][i] =p.get(n);

p.remove(n);

}for (i = 0; i < len; i++)

{

n=r.nextInt(p.size());

grid[1][i] =p.get(n);

p.remove(n);

}for (i = 0; i < len; i++)

{

n=r.nextInt(p.size());

grid[2][i] =p.get(n);

p.remove(n);

}//end for//底牌

grid2[0] = p.get(0);

grid2[1] = p.get(1);

grid2[2] = p.get(2);//distory

p.clear();

}

过Win7的纸牌游戏的朋友,一定对于游戏中的发牌动画记忆深刻,现在我们自己来实现这个动画过程。提到发牌动画,90%的程序员肯定会想到利用位置(Location)的变化来刷新界面,可能需要启用一些线程或者计时器之类的。但是Flash天生就是用来做动画的,用Tween缓动可以很容易实现。

客户端采用了FLASH编写,IDE为Flash Builder,语言则换成了AS3,由于本篇主讲JAVA,因此这里略过。

唯一需要注意的是,为保证程序代码的一致性,基本都是JAVA写好后,直接复制到客户端那边,这样省了建模字段不一样,或者名称不一致的问题

这个游戏采用了插件设计, 目前可以整合DISCUZ,

自已不需要独立的数据库,共用DISCUZ的,

需要使用的童鞋,先架设好DISCUZ和MYSQL数据库(可以用WAMP集成环境)

独立数据库,需要VPS或独立主机一台,有独立外网IP

可与论坛放同一主机,或分开放也可(共用论坛的数据库)

安装说明

1.将斗地主客户端所有文件 拷贝到论坛根目录

2.在服务器上安装好Java 8

修改DdzServer、RecordServer 目录里的run.bat,将里面路径修改为当前路

RecordServer 参数还包括连接论坛MYSQL数据库的用户名,密码等

依次启动DdzServer,RecordServer 和SecurityServer安全策略服务

支持win,Linux操作系统,

Linux在terminal上输入 sudo java -jar 完整路径

*需要服务器开放9300 ,843 TCP端口

3.在浏览器输入 http://你的网址/ddz.php 开始游戏

可多人同时玩,有排行榜,可聊天

源码

https://github.com/wdmir/521266750_qq_com.git

python斗地主游戏源码_Java写的斗地主游戏源码相关推荐

  1. java写的围棋游戏小程序_java写的围棋游戏小程序

    开发思路 调用applet类作为父类.在init事件中调用Qipan类,作出panel,上加控制用控件.在paint事件里调用drawline函数画棋盘,注册鼠标动作.鼠标单击位置上用drawoval ...

  2. 用java编写人机围棋游戏_JAVA写的围棋游戏的源代码.doc

    JAVA写的围棋游戏的源代码 JavaD′μ??§??ó??·μ??′′ú??.txt?òμ?è?éúóDA ??ò2óDB??£???μ?è?éúóDS??ò2óDB???£ ꧰ü2??é??£ ...

  3. Java猜数游戏怎么验证_Java实现猜数游戏

    利用Math.random()方法产生1~100的随机整数,利用JOptionPane.showInputDialog()方法产生一个输入对话框,用户可以输入所猜的数.若所猜的数比随机生成的数大,则显 ...

  4. C语言可以敲哪些小游戏,C语言可以写哪些小游戏?

    C语言可以写哪些小游戏? C语言可以编手机游戏.你叫他去死不过我这有贪吃蛇的代码,你倒可以看看(用TC编译一定过( #包括 #包括 #包括 #包括 #包括 #定义输入7181 #定义ESC 283 # ...

  5. java贪吃蛇游戏代码下载_java实现贪吃蛇游戏代码(附完整源码)

    免费资源网,https://freexyz.cn/ 先给大家分享源码,喜欢的朋友点此处下载. 游戏界面 GUI界面 java实现贪吃蛇游戏需要创建一个桌面窗口出来,此时就需要使用java中的swing ...

  6. 拼图游戏java代码_java设计:拼图游戏 完整源码

    //July/设计. //我对有的老师,很无语./06.04/. //Puzzle.java ----------------------------------------------------- ...

  7. java小游戏代码压缩包_java 贪吃蛇小游戏 源码下载

    [实例简介] 使用java程序设计语言制作的一个贪吃蛇小游戏.游戏的控制模块应该做到易懂.易操作,以给玩家一个很好的游戏环境.在这个游戏的设计中,牵涉到图形界面的显示与更新.数据的收集与更新,还要应用 ...

  8. 模拟斗地主游戏java编程_java实现模仿斗地主发牌

    本文实例为大家分享了java斗地主发牌的具体代码,供大家参考,具体内容如下 分析 这是一个模仿斗地主发牌的例子: 按照斗地主的规则,完成洗牌发牌的动作. 具体规则: 用0~53分别对应相应的花色和牌面 ...

  9. java低层源码_Java线程池及其底层源码实现分析

    */ Callable接口 && Runnable接口 callable调用call方法 runnable调用run方法 都可以被线程调用,但callable的call方法具有返回值( ...

  10. java商城源码_java 多商户商城系统源码分享

    三勾商城多商户是开发友好的微信小程序商城,框架支持SAAS,支持发布 iOS + Android + 公众号 + H5 + 各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)等多个平台,不可多得 ...

最新文章

  1. 用vs2005 开发arcims htmlViewer
  2. Reactive Extensions for .NET (Rx)
  3. 抗击肺炎:新冠肺炎疫情数据可视化及疫情预测分析
  4. MySQL自动建立集合自动分片_1.mongodb初步使用总结
  5. 国家图书馆关于php的书,国家图书馆啊,能借的书太少
  6. 关于GDAL计算图像坐标的几个问题
  7. influxdb 配置
  8. vis.js绘图库的一个BUG以及源码修正
  9. 微信小程序自定义字体及自定义图标问题说明
  10. FastStone Capture—屏幕录像
  11. Abaqus2022安装教程
  12. 区块链四:共识机制——PBFT算法深入讲解
  13. java 有多少种锁_java有哪些锁?java锁种类盘点
  14. linux系统键盘关机快捷键,Linux三种关机/重启系统的命令
  15. java实习生面试一些技巧
  16. 汉诺塔,简单递归带你破解出攻略
  17. C++调用Python及间接调用Python三方库
  18. 详解CSP-J/S第二轮认证
  19. JavaSSM笔记(二)SpringMvc基础
  20. c语言——游戏思路及其相关函数

热门文章

  1. 黑马程序员机器学习Day1学习笔记
  2. 通过python让打印出来的字体看起来像手写
  3. Vb如何设计编程计算机,vb程序设计论文
  4. 网络通信基础(局域网、广域网、IP地址、端口号、协议、封装、分用)
  5. 用Python执行SQL、Excel常见任务?10个方法全搞定!
  6. (十一)国产密码算法
  7. oracle 10g下载百度云地址
  8. Android小白从零开始学Android开发的要点总结(内含福利)
  9. 小白都懂的Python爬虫之网易云音乐下载
  10. 绿色文本整理器TextEditor(特别适用于网站文章编辑)