当前位置: 首页 > article >正文

netty开发模拟qq斗地主

为什么要搞这样一个项目

  1. 满足自己的java网络多线程编程的欲望!因为之前一直都是搞web开发,服务器和客户端数据交流人家web服务器早就给你搞好了,比如tomcat,jetty...等等,其实之前脑子里就有想过--是否可以自己开发一个简单的类似tomcat的web服务器,这样做了的话,至少知道其实web开发是建立在网络多线程web服务器之上否则web开发无从谈起!
  2. 市面上的书籍和互联网上的电子教材以及什么培训学校的培训内容都没有类似像qq斗地主这样的真实网络多线程demo--既要处理多线程并发问题又要处理网络上各个节点网络通讯问题以及各个节点数据同步问题。
  3. 如果项目胜利完成就架设一个服务器,让更多java爱好者知道有这样一个qq斗地主的服务器,然后下载客户端源码,运行程序连接服务器,越多java爱好者玩这个demo就意味着并发度越高,线程就越多,项目的问题就暴露的越多,然后大家一起来找原因解决bug,然后大家的java境界就越高尤其是网络多线程编程境界--因为这是一个真实的属于java程序员自己控制的网络多线程环境而不是书本上那些简单的demo!

先写到这样,还有要补充!

产生qq斗地主游戏大厅界面的算法

这下面就是qq斗地主大厅截图

首先说产生5行6列橙色正三角块的算法,先上代码:

int _x = 0;// 记录x坐标到底怎么加
int rowNum = 1;// 记录行数
int colNum = 6;// 记录列数
for (int i = 0; i < TOTAL; i++) {
  int x[] = { 30 + (i - _x) * 160, 80 + (i - _x) * 160, 130 + (i - _x) * 160 };
  int y[] = { 111 + (rowNum - 1) * 150, 30 + (rowNum - 1) * 150, 111 + (rowNum - 1) * 150 };
  Polygon polygon = new Polygon(x, y, 3);
  g.setColor(Color.orange);
  g.fillPolygon(polygon);
  if ((i + 1) % colNum == 0) {
    _x = rowNum * colNum;
    rowNum++;
  }
}

然后产生563= 90空位的算法,其实跟上面的差不多,先上源码:

// 位置
seats = new JLabel[TOTAL * 3];
// seats = new JButton[TOTAL*3];
int _x = 0;// 记录x坐标到底怎么加
int rowNum = 1;// 记录行数
int colNum = 6;// 记录列数
for (int i = 0; i < TOTAL; i++) {
  int x[] = { 30 + (i - _x) * 160, 80 + (i - _x) * 160, 130 + (i - _x) * 160 };
  int y[] = { 111 + (rowNum - 1) * 150, 30 + (rowNum - 1) * 150, 111 + (rowNum - 1) * 150 };
  for (int j = 0; j < 3; j++) {
    seats[j + i * 3] = new JLabel("空位");
    seats[j + i * 3].setBounds(x[j], y[j], 40, 20);
    childJpanel1.add(seats[j + i * 3]);
  }
  if ((i + 1) % colNum == 0) {
  _x = rowNum * colNum;
  rowNum++;
  }
}

源码分析下次或者自己看,其实把握好各个临界点,就很好实现

java,qq斗地主,斗地主,模拟qq斗地主,java开发qq斗地主,java斗地主源码,java多线程,java并发编程,netty

斗地主状态切换分析

等待人齐--->是否准备--->发牌---->抢地主---->出牌--->本次斗完 wait ready deal rob play over


http://www.kler.cn/a/288116.html

相关文章:

  • MuMu模拟器安卓12安装Xposed 框架
  • 【route】route add命令详解
  • 【从零开始的LeetCode-算法】3239. 最少翻转次数使二进制矩阵回文 I
  • 【C#设计模式(11)——外观模式(Facade Pattern)】
  • Android setTheme设置透明主题无效
  • 综合文化信息管理系统|基于java和小程序的综合文化信息管理系统设计与实现(源码+数据库+文档)
  • 基于SparkGraphX实现带权重的PageRank算法
  • Docker 安装 Zookeeper + Kafka 保姆级教程
  • 机器学习-1
  • 【WPF】WPF学习之【二】布局学习
  • nestjs目录命名导致的循环引用
  • Spring Cloud全解析:负载均衡之Ribbon的负载均衡算法
  • C++:类和对象(二)
  • C++:构造函数与析构函数
  • MySQL数据库(0)—— 云服务器安装MySQL
  • 【Godot4.3】基于纯绘图函数自定义的线框图控件
  • 1、Django Admin学习模型
  • SpringBoot配置Java后端服务器
  • Nuclei文件上传小Tips
  • 多目标应用:基于环形拓扑的多目标粒子群优化算法(MO_Ring_PSO_SCD)的移动机器人路径规划研究(提供MATLAB代码)
  • 不用async与await将异步函数改为同步函数
  • MySQL 数据库课程设计
  • 软件测试学习笔记丨Chrome开发者模式
  • Linux-vim
  • 从自动驾驶看无人驾驶叉车的技术落地和应用
  • HTTP 之 HTTP头部优化策略(九)