Java编写联机斗地主游戏 功能完善 界面漂亮 下载代码即可以运行

   之前由于公司的事情比较多,一直没有更新相关的博客信息,今天稍微不那么忙了,为大家继续分享一个界面漂亮、功能完整的斗地主游戏的的开发与制作 455。这个游戏涉及到UI开发、事件响应、socket通信等知识,开发的过程中也耗费了不少时间。整个系统界面漂亮,有完整得源码,希望大家可以喜欢。喜欢的帮忙点赞和关注。一起编程、一起进步!!

开发环境 

    开发语言为Java,开发环境Eclipse或者IDEA都可以。运行主程序,或者执行打开JAR文件即可以运行本程序

系统框架

  利用JDK自带的SWING框架开发,不需要安装第三方JAR包。纯窗体模式,直接运行Main文件即可以。选中Main.java,点右键 run as application启动相关程序。也客户把程序打包成JAR包,双击JAR即可以启动相关的程序。

游戏主要功能

   1  斗地主游戏简介

 斗地主,是一种在中国流行的纸牌游戏。是关于旧社会阶级斗争详见土地改革运动。 斗地主是一种扑克游戏。游戏最少由3个玩家进行,用一副54张牌(连鬼牌),其中一方为地主,其余两家为另一方,双方对战,先出完牌的一方获胜。该扑克游戏最初流行于中国湖北武汉市汉阳区,现已逐渐在全球各地流行

   2  游戏规则

火箭最大,可以打任意其他的牌。

炸弹比火箭小,比其他牌大。都是炸弹时按牌的分值比大小。

(对于“癞子场”, 火箭 > 纯癞子炸弹 > 硬炸弹 > 软炸弹。同等级别的炸弹按牌的分值比大小。)

除火箭和炸弹外,其他牌必须要牌型相同且总张数相同才能比大小。

单牌按分值比大小,依次是:大王 > 小王 >2>A>K>Q>J>10>9>8>7>6>5>4>3 ,不分花色。

对牌、三张牌都按分值比大小。

顺牌按最大的一张牌的分值来比大小。

飞机带翅膀和四带二按其中的三顺和四张部分来比,带的牌不影响大小。

(“癞子场”中癞子搭配出的牌型和“原装”的牌型不区分大小。)

发牌

一副牌,留三张底牌,其他发给三家

叫牌

首先系统翻出一张明牌,获得明牌的人开始先叫牌,每人只能叫一次,叫牌可以:1分"、"2分"、 3分"或不叫,叫完后叫的最大的为地主。

出牌

首先将三张底牌交给地主,三张底牌所有人都能看到。由地主开牌,然后按逆时针顺序依次出牌,论到你跟牌时,你可选择PASS或按规则出牌。直至某一方牌出完就结束此局。

当一家的牌剩下一张或两张时,将进行警告(显示一个地雷)。

     3 游戏主要功能

         本系统的主要功能包括以下几个方面:

          1  对战双方起动对应的客户端,需要输入需要对战客户的IP地址或者端口,或者告诉其他用户自己的IP地址和端口

          2 设置自己的用户名

         3 叫地主

         4 轮流出牌和判断游戏规则

         5 查看游戏结果

运行效果

      1 起动客户端

    2 叫地主

       3 出牌

4 出牌2

 5 打牌结果

关键代码

   public void addlordPokers(List<Poker> lordPokers)
    {
    	for(int i=0;i<lordPokers.size();i++)
    	{
    		Poker poker=lordPokers.get(i);
    		
            PokerLabel pokerLabel=new PokerLabel(poker.getId(),poker.getName(),poker.getNum());
    		
    		pokerLabel.turnUp();
    		
    		this.pokerLabels.add(pokerLabel);
    		
    	}
    	Collections.sort(pokerLabels);
    	
    	for(int i=0;i<pokerLabels.size();i++)
    	{
    		this.myPanel.add(pokerLabels.get(i));
    		
    		this.myPanel.setComponentZOrder(pokerLabels.get(i),0);
    		
    		GameUtil.move(pokerLabels.get(i),490+30*i,530);
    	}
    	
    	currentPlayer.getPokers().addAll(lordPokers);    
    }

项目总结

(1)在写代码之前,在大脑里一定要把思路理清楚,不能模模糊糊,一定要把功能图和流程图画出来,然后根据它去实现每一个功能块,要多分析,培养一种良好的逻辑思维能力。

(2)在写代码的过程中,一定要采取就近原则,同一个功能,或者对同一个组件的设置一般要写在一块,这样写的程序比较清晰,不容易出错,也便于查找。

(3)要养成良好的注释习惯,一是有利于别人阅读你的程序,同时也有利于自己以后再看,就能很快的读懂程序,提高效率。

(4)把功能模块化,即把实现相同功能的代码段封装成一到一个类或者一个方法中,实现的时候调用即可,这样能提高代码的可读性

(5)养成创建包来存放不同功能的类,使系统的结构更加模块化和规范化。

(6)在编写代码的时候,一定要边写边调试,要适时的设置断点,或者把某些变量的值输出到控制台,通过观察和分析变量的值,便于判断问题所在,同时,需要捕获异常的一定要把异常信息打印出来,便于分析问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个简单的代理服务器Java代码示例: ```java import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class ProxyServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(8080); // 监听本地端口8080 System.out.println("代理服务器已启动,监听端口8080..."); while (true) { Socket clientSocket = serverSocket.accept(); // 等待客户端连接 new Thread(() -> { try { handleClient(clientSocket); } catch (IOException e) { e.printStackTrace(); } }).start(); } } private static void handleClient(Socket clientSocket) throws IOException { System.out.println("客户端连接成功:" + clientSocket.getInetAddress().getHostAddress()); InputStream clientInput = clientSocket.getInputStream(); OutputStream clientOutput = clientSocket.getOutputStream(); byte[] buffer = new byte[4096]; int bytesRead; String request = ""; while ((bytesRead = clientInput.read(buffer)) != -1) { String data = new String(buffer, 0, bytesRead); request += data; if (request.endsWith("\r\n\r\n")) { // 请求头结束 break; } } System.out.println("收到请求头:\n" + request); String[] lines = request.split("\r\n"); String[] firstLineParts = lines[0].split(" "); String method = firstLineParts[0]; String url = firstLineParts[1]; String HttpVersion = firstLineParts[2]; String host = ""; for (String line : lines) { if (line.startsWith("Host:")) { host = line.substring(6).trim(); break; } } if (host.equals("")) { host = url; } System.out.println("请求主机:" + host); Socket serverSocket = new Socket(host, 80); // 连接目标服务器 OutputStream serverOutput = serverSocket.getOutputStream(); serverOutput.write(request.getBytes()); // 转发请求头 serverOutput.flush(); InputStream serverInput = serverSocket.getInputStream(); while ((bytesRead = serverInput.read(buffer)) != -1) { // 转发响应内容 clientOutput.write(buffer, 0, bytesRead); clientOutput.flush(); } clientSocket.close(); serverSocket.close(); } } ``` 运行代码后,浏览器则可以通过设置代理服务器地址为 `localhost:8080` 来使用该代理服务器。注意,该示例只支持HTTP协议,HTTPS协议需要进行额外的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

计算机程序

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值