使用Java语言编写一个五子棋UI界面并实现网络对战功能(非局域网)

使用Java语言编写一个五子棋UI界面并实现网络对战功能(非局域网)

使用Java语言编写一个五子棋UI界面并实现网络对战功能(非局域网)

一,前期准备

1,Java IDE(Eclipse)与JDK的安装与配置
jdk-15.0.1-免配置路径版
提取码:earu
免安装版Eclipse 解压即可使用
提取码:5iyy

网络上很多配置jdk的方法,我不再重复
这里提供一种便捷操作的方法(针对新手)
由于高版本jdk不需要手动配置路径,将我上传的jdk资源下载后一键安装,路径即可自动配置

2,一台云主机

阿里云,腾讯云,华为云的云主机均可,我用的是windows系统
(window是自带的远程连接很方便),如果想用其他的也可,最好选择一个有桌面的,这样调试起来容易些
在云主机上同样需要安装Eclipse与配置jdk,步骤同上
如果内存较大的可以安装数据库,这样编写的程序上可以加账号登录注册功能

我的云主机
我的云主机
3,另一台可供测试可以联网的电脑或虚拟机

建议方便的同学用另一台电脑,一台电脑用手机热点,另一台用WiFi
这样可以测试外网的连接情况
  • 1
  • 2

4,转换Java Jar为exe文件的软件(如exe4j)

网上很多关于转换的教程(非必须,如果不需要可以忽略这一步)
  • 1

二,功能分析与效果展示
1,这个程序主要分为三部分,UI界面,单机落子部分,联网落子部分,而UI界面又分为登录界面和棋盘界面。在这篇文章中UI界面与联网落子部分为讲述重点。
2,登录界面实现的功能有以下几点,首先当启动程序时,应自动检测与服务器的连接,如果连接失败,则不出现网络登录入口,如果连接成功,则出现网络对战登录入口。

连接失败效果展示
在这里插入图片描述
在这里插入图片描述
连接成功效果展示
在这里插入图片描述
在这里插入图片描述
3,棋盘界面应满足的功能,黑白棋的落子,判断胜利,重新开始
棋盘效果展示
在这里插入图片描述
4,网络对战应满足的功能,由于很多电脑使用路由器与外网访问(有的通信服务提供商会隐藏真实ip,故两台由不同路由器连接的电脑很难建立连接),同时增加编写难度,采用下棋双方与服务器连接的方式,A->服务器<-B,A<-服务器->B,程序应做到迅速响应服务器信息,减少延迟,双方棋盘信息应一致。
在这里插入图片描述
三,具体实现方法
1,棋盘UI的实现

 JPanel jpan1 = new JPanel() {                     //根据新棋盘信息作图,覆盖原有Panel
 	        		private static final long serialVersionUID = 1L;
 	        		public void paint(Graphics graphics){         //重构paint函数
 	        			int xst=20,yst=20,add=32;
 	                    for(int t=0;t<15;t++)                      //画竖线
 	                    {
 	                    	graphics.drawLine(xst,yst,xst,468);
 	                    	xst=xst+add;
 	                    }
 	                    xst=20;yst=20;add=32;
 	                    for(int t=0;t<15;t++)                      //画横线
 	                    {
 	                    	graphics.drawLine(xst,yst,468,yst);
 	                    	yst=yst+add;
 	                    }
 	                  
 	    			   graphics.setColor(Color.BLACK);             //画棋盘上五个黑点
 	                   graphics.fillOval(113, 113, 6, 6);
 	                   graphics.fillOval(369, 113, 6, 6);
 	                   graphics.fillOval(113, 369, 6, 6);
 	                   graphics.fillOval(369, 369, 6, 6);
 	                   graphics.fillOval(241, 241, 6, 6);
 	                   
 	                   for(int t=0;t<15;t++)                       //根据棋盘数组里存储的棋子信息画黑白子
 	                   {
 	                	   for(int t1=0;t1<15;t1++)
 	                	   {
 	                		   if(node[t][t1]==1)
 	                		   {
 	                			   graphics.setColor(Color.BLACK);
 	                               graphics.fillOval(t1*32+20-13,t*32+20-13,26,26);
 	                		   }
 	                		   if(node[t][t1]==-1)
 	                		   {
 	                			   graphics.setColor(Color.WHITE);
 	                               graphics.fillOval(t1*32
版权声明:本文为AIERSTOM原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/AIERSTOM/p/Aierstom_11.html