大家好,欢迎各位前辈看小弟写的一个网络版的斗地主程序,下面是小弟用了两个多星期的心血写成的,请各位前辈多指教!使小弟我能够得到前辈的指点,更上一层楼,谢谢支持!

下面是我写的项目分析和讲解:

由于我装的eclipse没有装UML插件,所以就没有设计UML图,但是我的源码当中大部分有注解讲解。

在此程序当中,我的主要抽象对象是牌这个对象

Puker.java代码如下:

/*

*这是一个牌对象的抽象类

*是为了表现牌这个对象

* */

import java.awt.*;

public class Puker

{

public int P_x,P_y;//表示牌X,Y坐标的属性

private final int P_w=60,P_h=80; //表示牌宽,高的属性

public Puker_num puker_num=null; //表示牌的牌值的属性

public Puker_hushe puker_hushe=null; //表示牌的花色的属性

public String puker_n=null;//表示画牌时用到的一个属性

public int puker_num1,puker_hushe1; //用整数形式表示牌的牌值和花色的属性

public int puker_dx;//表示牌的大小的值

public boolean bUp=false; //表示牌是否被选中的属性

/*

*用于构造用户自己的牌的构造方法

* */

public Puker(int P_x,int P_y,Puker_num puker_num,Puker_hushe puker_hushe)

{

this.P_x=P_x;

this.P_y=P_y;

this.puker_num=puker_num;

this.puker_hushe=puker_hushe;

this.BPuker_num();

}

/*

*用于构造54张牌组的构造方法

* */

public Puker(int puker_num1,int puker_hushe1)

{

this.puker_num1=puker_num1;

this.puker_hushe1=puker_hushe1;

}

/*

*用于画牌这个对象的方法

* */

public void paint(Graphics g)

{

Color c=g.getColor();

g.setColor(Color.WHITE);

g.fill3DRect(this.P_x, this.P_y, this.P_w, this.P_h, true);

g.setColor(Color.BLACK);

g.draw3DRect(this.P_x, this.P_y, this.P_w, this.P_h, true);

g.drawString(this.puker_n, this.P_x+5, this.P_y+20);

if(this.puker_n.equals("大王")||this.puker_n.equals("小王"))

{

}else g.drawString(this.puker_hushe.toString(), this.P_x+20, this.P_y+20);

g.setColor(c);

}

/*

*此方法根据构造方法当中的属性来

*决定牌的其他属性

* */

public void BPuker_num ()

{

switch(puker_num)

{

case p1: this.puker_n="1";

this.puker_dx=14;

this.puker_num1=1;

break;

case p2: this.puker_n="2";

this.puker_dx=15;

this.puker_num1=2;

break;

case p3: this.puker_n="3";

this.puker_dx=3;

this.puker_num1=3;

break;

case p4: this.puker_n="4";

this.puker_dx=4;

this.puker_num1=4;

break;

case p5: this.puker_n="5";

this.puker_dx=5;

this.puker_num1=5;

break;

case p6: this.puker_n="6";

this.puker_dx=6;

this.puker_num1=6;

break;

case p7: this.puker_n="7";

this.puker_dx=7;

this.puker_num1=7;

break;

case p8: this.puker_n="8";

this.puker_dx=8;

this.puker_num1=8;

break;

case p9: this.puker_n="9";

this.puker_dx=9;

this.puker_num1=9;

break;

case p0: this.puker_n="10";

this.puker_dx=10;

this.puker_num1=10;

break;

case pJ: this.puker_n="J";

this.puker_dx=11;

this.puker_num1=11;

break;

case pQ: this.puker_n="Q";

this.puker_dx=12;

this.puker_num1=12;

break;

case pK: this.puker_n="K";

this.puker_dx=13;

this.puker_num1=13;

break;

case pD: this.puker_n="大王";

this.puker_dx=17;

this.puker_num1=15;

break;

case pX: this.puker_n="小王";

this.puker_dx=16;

this.puker_num1=14;

break;

}

switch(puker_hushe)

{

case黑桃: this.puker_hushe1=1;

break;

case红心: this.puker_hushe1=2;

break;

case梅花: this.puker_hushe1=3;

break;

case方块: this.puker_hushe1=4;

break;

case无: if(this.puker_num1==14){

this.puker_hushe1=5;

}else if(this.puker_num1==15){

this.puker_hushe1=6;

}

break;

}

}

/*

*此方法是得到一个牌

*的一矩形对象,是为了

*选择牌时用鼠标拖一个矩形然后

*与牌对象的矩形对象进行相交决定

*是否被选中

* */

public Rectangle getRect(){

return new Rectangle(P_x,P_y,P_w,P_h);

}

}

应该说我这个程序主要是围绕着这个对象再操作。

那么表示牌的牌值我是用了一个枚举类型表示的

Puker_num.java代码如下:

/*

*此枚举是表示牌

*的牌值的一个枚举

* */

public enum Puker_num

{

p1,p2,p3,p4,p5,p6,p7,p8,p9,p0,pJ,pQ,pK,pX,pD;

}

这个枚举主要表现牌的牌值的作用。

那么表示牌的花色我也是用了一个枚举类型表示的

Puker_hushe.java代码如下:

/*

*此枚举是一个表示牌

*花色的枚举

* */

public enum Puker_hushe {

黑桃,红心,梅花,方块,无;

}

在这里主要表示牌上的花色的一个作用。那么里有个“无”是表示大小王的时候用到的。

下面就来讲一讲出牌的规则算法的类吧,我在这里设计的是一个静态类,里的成员方法和属性也都是静态,因为规则吗,我想应该是不需要构造的,只要你出牌,你就使用。

可能Rule.java这个算法类的代码会相对的多一点,我就不在这个地列出来了,朋友们可以下载我的源代码。可以到我的个人站点上去下载或。

再设计算法的同时,我也设计了一个出牌类型的枚举的类。这个类主要是表现所有可能出现出牌的类型情况。

PukerGroupLaiXin.java代码如下:

*此枚举是一个区分出的牌组

*和区分接收的牌组类型的作用

* */

public enum PukerGroupLaiXin

{

个子,对子,双王炸弹,一飞机,一飞机带翅膀,炸弹,五顺子,六张顺子,二飞机,三连对,炸弹带二,

七张顺子,八张顺子,二飞机带翅膀,四连对,九张顺子,三飞机,十张顺子,五连对,十一张顺子,

十二顺子,三飞机带翅膀,六连对,四飞机,七连对,五飞机,四飞机带翅膀,八连对,九连对,六飞机,

十连对,五飞机带翅膀,发送无,接收无;

}

程序的设计就说到这了。然后谢谢大家的支持,我的QQ是:565345652,希望大家能够给提一些意见。

下面说一说此程序的使用方法:

因为这是一个网络版的斗地主游戏,我设计的是三个人玩的,所以要开三个程序,才能玩,我的服务器和客户端都写在了一起,所以不管是谁,都可以服务器的程序,但是三个程序当中只能有一个服务器端的程序,那么执行什么才是服务器的程序的:

样例图如下:

选择“游戏管理” 》“创建游戏”就弹出一个界面如下:

可以输入自己的真实明字或随便的游戏名字,只要不为空就可以了,然后点击创建游戏就可以了!就点击主界面上的“准备”按钮,然后就出现一个“开始”按钮,然后服务器端的这个程序就等待客户端的连接,只要有两个客户端连接上来,并且它们都点击了“准备”按钮之后,服务器端再点“开始”按钮才会有效。

效果图如下:

这时等待客户端的连接。

那么怎样创建客户端程序呢!

样例如下:

选择“游戏管理” 》“加入游戏”就弹出一个界面如下:

输入服务器端程序的IP地址,和自己的用户名后点击“连接”按钮即可连接服务,如果连接上了会弹出一个对话框如下:

点击确定之后:

点击“准备”按钮之后,等待服务器端的发牌。

当有两个客户端连接之后,并且它们都点击了“准备”按钮之后,服务器端就可以点击“开始”按钮发牌开始游戏了。这时服务器也会将地主选择出来,此例当中选择的第二个用户为地主。

效果图如下:

服务器端:

客户端1:

客户端2:

下面再来看一出牌的效果图:

先从地主开始出牌:

Client1:

Client2:

Server:

其实在选择要出的牌时,不光可以单击一张牌,也可以用鼠标拖动来选择牌。

游戏说明就说到这了,谢谢大家支持。由于时间原因在这里我可能没有把网络实现讲一下,我可能会在以后有时间再写出来,就发到网上去,希望大家支持。可能我的网络这一方面写的不是很优美,需要改进的地方可能会有很多。

java写的网络版斗地主_JAVA网络版斗地主游戏相关推荐

  1. JAVA写XML乱码问题_java 写 xml 中文乱码

    今天用java写xml文件,发现写完后xml文件的中文就变成了乱码, 解决办法:把xml文件的头部编码改为utf-8,StreamResult编码方式也改为utf-8. =============部分 ...

  2. 无聊的时候怎么办?教你用java写一个简单挂机打金币小游戏吧!

    无聊的时候怎么办?教你用java写一个超简单挂机打金币小游戏吧! Java写一个挂机打金币程序 1.Java的面向对象 2.基础打金的分析 3. Robot介绍以及Demo演示 4.挂机打金程序如何去 ...

  3. java版斗地主_Java实现斗地主简化版

    本文实例为大家分享了Java实现斗地主的具体代码,供大家参考,具体内容如下 package com.westos.chinesePoker; import java.util.ArrayList; i ...

  4. java 斗地主_java实现斗地主游戏

    感想: 第一次写博客,感觉编辑器挺复杂厉害的,感觉自己的内容挺简单的.有什么问题请多多指教! 思路: 1.创建一个扑克牌的实体类Poker,设置了四个参数:花色.数字.牌值(判断大小).是否地主牌,实 ...

  5. 基于java斗地主_码云推荐开源项目丨 用 Java 写了一个控制台玩的斗地主

    这是什么? 这是一场对抗地主的游戏 不同的是 它可以在命令行中进行 如何入门? Maven 打包 git clone https://github.com/ainilili/ratel.git cd ...

  6. 用java写秋道程序_Java开发者使用C++写程序踩的坑

    笔者是一个很矛盾的人.平时用Java.但是一开始学习的时候学的是汇编语言,而且对C语言也很熟悉.为什么不学C++呢?是因为我可以完全用Java的编码规范去写C++.因此我不需要了解更多的诸如C++的命 ...

  7. java写红白机_Java 开发的编程噩梦,这些坑你没踩过算我输

    很多 Java 初学者在开始编程时会出现一些问题,这些问题并不是指某个特定领域的问题,也不是指对某个业务不熟悉而导致的问题,而是对基础知识不够熟悉导致的问题.而就是这些问题让我们编写了一些不够健壮的代 ...

  8. java写到txt乱码_java读取txt文本发生乱码的解决方法

    java读取txt文本发生乱码的解决方法 发布时间:2020-06-25 17:35:58 来源:亿速云 阅读:90 作者:Leah 本篇文章为大家展示了java读取txt文本发生乱码的解决方法,代码 ...

  9. java写一个web服务器_Java实现web服务器功能(简版) | kTWO-个人博客

    package kTWOServer; import java.io.* ; import java.net.* ; import java.util.* ; final class HttpRequ ...

  10. java 写文件日志文件_Java如何将日志写入文件?

    需要保留应用程序日志,以便我们可以在应用程序中发生错误时分析日志.出于这个原因,我们需要写入登录文件. Logging API提供了处理程序,可以帮助我们执行此操作.要将日志写入文件,我们可以使用Fi ...

最新文章

  1. 怎么样做一个合格而又可爱的面试官
  2. centos7安装php5.2yum源操作_CentOS 7下Yum安装PHP7.2步骤
  3. 七牛上传文件小工具v0.1
  4. php 遍历 目录,PHP采用自定义函数实现遍历目录下所有文件的方法
  5. 581. 最短无序连续子数组
  6. java 扫描自定义注解_利用spring 自定义注解扫描 找出使用自定义注解的类
  7. java jnlp 签名_JAVA JNLP组件数字签名制作步骤
  8. mycat实例(1)
  9. sklearn实践之——计算回归模型的四大评价指标(explained_variance_score、mean_absolute_error、mean_squared_error、r2_score)
  10. cad2020 开始_中望cad2020发布,附简体中文免费版安装教程
  11. 从外包、互联网到国有企业,再到研究生拟录取,三年时间让我悟出了自己人生的意义
  12. element-ui 响应式布局
  13. 2021最新百度、头条等公司Android面试题目,附小技巧
  14. python异常值处理四分位法_Python清除异常值四分位法
  15. [Mybatis]复杂环境下的SQL
  16. 1. 拼多多什么软件可以看到大数据?拼多多大数据分析软件有哪些?
  17. SaltStack技术入门与实践
  18. kali攻击wifi、破解wifi密码详细教程(二)
  19. oracle汉字变成方框,电脑操作系统所有的汉字都变成方框了,是什么原因,怎么办?...
  20. Python入门总结-默单词程序

热门文章

  1. 数据结构考研:随机存取、顺序存取、随机存储和顺序存储的区别/详细解释(计算机/软件工程/王道论坛)
  2. Python纯代码pdf批量快速转换成ppt
  3. Charles使用教程(Mac)
  4. 微软 android 输入法下载官网下载地址,微软五笔输入法官网下载_微软王码五笔输入法8689版官方下载-华军软件园...
  5. HeadFirst 设计模式
  6. 计算机三级数据库技术笔记
  7. OpenCV实践之车流量统计(C++)
  8. 夜神模拟器访问本地服务端口操作说明
  9. C语言实现socket网络编程及多线程编程
  10. 一台设备驱动万物:苹果和三星即将推陈出新