JAVA联机版五子棋——源码(一个类一个main暴力开发)

第一次写博客,排版啥的都比较乱,大家不要嫌弃啊。

所谓暴力开发,其实是啥也不会,硬怼哈哈哈。只是刚学会一点JAVA编程,参考网络资源写了个联机版五子棋(支持单机),来这里记录一下学习过程,而且我也是靠别人的分享才能写出来,所以本着互相帮助的原则,分享给大家,抛砖引玉,共同进步。

作为一个半路出家,正在学习道路上的渣渣,摸索着写了这样一个乱乱的五子棋,很多地方都不正规,比如因为没有系统学过GUI,对话框都用的JOptionPane组件,模式选择对话框也放在main方法里,算是偷懒吧。。

正如标题里写的“一个类一个main”,写的时候为了快速且方便,都放在一个类里了,因此大家想要测试的话,直接整个复制就行了,没啥黑科技,JDK自带的包就能运行。

因为个人的恶趣味,本五子棋起名“老铁互怼五子棋”,当然各位可以自己随意修改。

转载也请随意,标明出处就行了(如果感觉有用,点个赞就是最好的支持啦)。

游戏打开后是这个界面,直接选择游戏模式,不能半途选别的模式,如果要更换,需要重启游戏(不然老出线程异常,所以直接砍掉这个功能哈哈哈。。。)。

游戏打开界面

选择“是”则为联机版,“否”或关闭对话框为单机版。

联机版需要输入对方的主机名或IP(局域网)。

输入对方主机名或IP

没有集成GUI,所以主机名和端口号都需要分别输入(偷个懒)。

这里输入本机的端口号。

输入己方端口号

输入对方端口号,双方端口号需要互相对应。

输入对方端口号

以上步骤都没错且网络没问题,则连接成功,点击确定可以开始游戏,先落子的为黑棋。

说明一下,如果输入的主机名或地址为本机,且输入的端口号一致,则为单机模式(预防我预设的9653端口号被占,这种方式可以自己设置端口号)。

因为使用了线程,可以本机打开两个游戏界面,联机模式下可以左右互搏(狗头),也是实现单机模式的原理(好像也是开发中线程老是占用的罪魁祸首,难受)。

联机模式确认

如果一开始选择了“否”或关闭对话框,则为单机模式,显示下图所示对话框,点击确定开始游戏。

单机模式确认

游戏界面如下,刚落下的棋子有外框显示。

游戏开始

代码如下(注释可能有点啰嗦。。):

package netWuZiQiDemo;

//打开游戏选择"是"则为联机模式,选择"否"或关闭对话框则为单机模式,默认端口号9653(不与常用端口号冲突)
//本版本联机需要输入对方主机名或IP地址,并且需要双方端口号对应相反
//本版本联机模式,双方轮流执黑
//如果主机名或IP为自己主机(或没有输入),则转为单机模式,此时需两个端口号一致
//为了解决线程异常问题(水平有限...),特推出此魔改版,打开游戏必须选择其中一种模式(联机或单机),要想更换,则要关闭游戏重新打开

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
/**
 * 老铁互怼五子棋1.0
 * @author Arno-Woke
 *
 */
public class NetLTWZQDemo extends JPanel implements MouseListener, Runnable {
   

	int x;// 落子处棋盘坐标
	int y;
	int[][] chess = new int[12][12];// 棋盘大小为12x12

	int ex;// 传送鼠标点击坐标
	int ey;
	boolean me = true;// 初始化为己方先落黑子
	boolean one = true;// 控制联机双方每次只能一个人下子
	static boolean start = false;// 默认打开游戏不能下子,需先选择游戏模式

	static InetAddress inetAddress;// 客户端确认服务端的IP地址
	static String UsernameOrIp;// 联机对方主机名或IP地址

	// 客户端和服务端端口号一致则为单机版五子棋
	static int clientPort;// 设置客户端端口
	static int serverPort;// 设置服务端端口
	static boolean danJi;// 选择单机模式,则程序只判断一次胜负,防止对局结束后无法落子,若联机模式,则判断两次胜负

	static Thread t;// 声明一个线程
	private static final long serialVersionUID = 1L;//emmm 没什么用,提示要有一个就放一个吧

	public static void main(String[] args) {
   
		JFrame jFrame = new JFrame("老铁互怼五子棋");
		jFrame.setBounds((Toolkit.getDefaultToolkit().getScreenSize().width - 655) / 2,
				(Toolkit.getDefaultToolkit().getScreenSize().height - 675) / 2, 655, 675);// 窗口屏幕正中放置
		jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jFrame.setResizable(false);//窗体大小固定
		jFrame.setVisible(true);//窗体设置可见
		NetLTWZQDemo netLTWZQDemo = new NetLTWZQDemo();
		jFrame.add(netLTWZQDemo);
		t = new Thread(netLTWZQDemo);

		//为了方便(又懒又笨..),直接把所有内容写到一个类里,且把模式选择对话框放在main方法里
		int respones = JOptionPane.showConfirmDialog(null, "老铁你愁啥,想找个人怼怼?", "生死看淡,不服就干!", JOptionPane.YES_NO_OPTION,
				JOptionPane.WARNING_MESSAGE);

		if (respones == JOptionPane.YES_OPTION) {
   
			try {
   
				UsernameOrIp = JOptionPane.showInputDialog(null, "输入丫主机名或IP", "记小本本上每天看两遍", JOptionPane.WARNING_MESSAGE)
						.trim();
				clientPort = Integer.parseInt(JOptionPane
						.showInputDialog(null, "老铁从几号门出发?", "门牌号:1024~65535", JOptionPane.WARNING_MESSAGE)
						.trim());
				serverPort = Integer.parseInt(JOptionPane
						.showInputDialog(null, "对面在几号门?", "门牌号:1024~65535", JOptionPane.WARNING_MESSAGE)
						.trim());
			} catch (Exception e) {
   
				JOptionPane.showMessageDialog(null, "输错了,老铁从头再来吧!", "怜悯的眼神看着你", JOptionPane.ERR
  • 25
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 52
    评论
评论 52
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值