package view;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Label;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import controller.BlackClickController;
import controller.ButtonController;
import controller.WhiteClickController;
import model.Chess;
import model.ChessBoard;
import model.Locat;
@SuppressWarnings("serial")
public class GameView extends JFrame {
ChessBoard cb;
Chess chess;
Locat locat;
Label lblOwner = new Label();
JMenuBar bar =new JMenuBar();
JMenu game =new JMenu("游戏");
JMenu help =new JMenu("帮助");
JMenuItem setup = new JMenuItem("建立主机");
JMenuItem link = new JMenuItem("连接主机");
JMenuItem exit= new JMenuItem("退出游戏");
JMenuItem about = new JMenuItem("关于游戏");
public GameView() {
super("五子棋");
cb = new ChessBoard(15, 15);
chess = new Chess();
lblOwner.setBounds(330, 660, 150, 50);
lblOwner.setFont(new Font("宋体", Font.BOLD, 30));
game.add(setup);
game.add(link);
game.add(exit);
help.add(about);
bar.add(game);
bar.add(help);
this.add(lblOwner);
this.setJMenuBar(bar);
setup.addActionListener(new ButtonController(this));
link.addActionListener(new ButtonController(this));
exit.addActionListener(new ButtonController(this));
about.addActionListener(new ButtonController(this));
this.setLocation(500, 150);
this.setSize(800, 800);
this.setLayout(getLayout());
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void paint(Graphics g) {
super.paint(g);
cb.drawChessBoard(g);
chess.drawChess(g);
}
public class MyServer extends Thread {
public void run() {
try {
ServerSocket ss = new ServerSocket(10000);
JOptionPane.showMessageDialog(GameView.this, "建立主机成功");
Socket socket = new Socket();
socket = ss.accept();
String address = socket.getInetAddress().getHostAddress();
JOptionPane.showMessageDialog(GameView.this, address+"加入,游戏开始");
GameView.this.addMouseListener(new BlackClickController(chess, lblOwner, GameView.this));
lblOwner.setText("己方落子");
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
while(true) {
//若轮到自己下棋,且还未落子时,延时等待
while(chess.getOwner() == 1) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(!chess.getBlack().isEmpty()) {
oos.writeObject(chess.getBlack().get(chess.getBlack().size()-1));
oos.flush();
}
try {
locat = (Locat)ois.readObject();
if(chess.canAdd(locat)) {
chess.addWhiteChess(locat);
chess.setOwner(1);
GameView.this.repaint();
chess.judgeWin(GameView.this);
lblOwner.setText("己方落子");
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
JOptionPane.showMessageDialog(GameView.this, "端口使用中");
}
}
}
public class MyClient extends Thread {
public void run() {
String address = JOptionPane.showInputDialog(GameView.this, "请输入主机IP地址");
try {
Socket socket = new Socket(address, 10000);
JOptionPane.showMessageDialog(GameView.this, "加入主机"+address+",游戏开始");
GameView.this.addMouseListener(new WhiteClickController(chess, lblOwner, GameView.this));
lblOwner.setText("对方落子");
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
while(true) {
try {
locat = (Locat)ois.readObject();
if(chess.canAdd(locat)) {
chess.addBlackChess(locat);
chess.setOwner(0);
GameView.this.repaint();
chess.judgeWin(GameView.this);
lblOwner.setText("己方落子");
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while(chess.getOwner() == 0) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(!chess.getWhite().isEmpty()) {
oos.writeObject(chess.getWhite().get(chess.getWhite().size()-1));
oos.flush();
}
}
} catch (UnknownHostException e){
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

晓玮丶
- 粉丝: 0
- 资源: 2
最新资源
- TMS320F28335电机控制全解析:从原理到实践,涵盖永磁同步、无刷电机与有刷电机的深度应用 ,TMS320F28335电机控制解决方案:涵盖永磁同步、无刷与有刷电机控制,多种闭环控制技术及原理图
- “基于麻雀优化算法的改进粒子群算法在微电网优化调度中的应用与对比”,“基于麻雀优化算法的改进粒子群算法在微电网优化调度中的应用与对比”,matlab代码:改进粒子群算法求解微电网优化调度问题 增加了
- 基于MATLAB的卷积神经网络识别算法模型:手势、人脸、物体识别及混淆矩阵计算功能,支持GUI图形页面与摄像头拍摄识别,基于MATLAB的卷积神经网络识别算法模型:手势、人脸、物体识别及混淆矩阵计算功
- Abaqus模拟双线盾构隧道:精细化模型探讨软化模量与注浆对隧道施工的影响,Abaqus模拟双线盾构隧道:超精细模型展现联络通道与软化模量特性,详细展示盾构注浆过程,abaqus双线盾构隧道,含两侧隧
- 清华大学DeepSeek第一弹至第五弹全部pdf资料.zip
- 考虑电动汽车灵活性的多时间尺度微网与虚拟电厂协调调度模型研究,基于电动汽车灵活性的微网虚拟电厂多时间尺度协调优化调度模型,Matlab 代码:计及电动汽车灵活性的微网 电厂多时间尺度协调调度模型 关键
- 相场模拟与激光制造技术:选择性激光烧结、激光融覆中的凝固与枝晶生长研究,相场模拟与激光制造技术:选择性激光烧结、激光融覆及凝固过程中的枝晶生长研究,相场模拟 选择性激光烧结 激光融覆 凝固 枝晶生长
- 基于西门子224xp控制器的Modbus RTU通信程序:变频器控制与监视系统的设计与实现,S7-200与三菱D700及台达VFD-M变频器通过Modbus RTU通信程序实现控制及数据读取,配备西门
- 三菱FX3U PLC与台达VFD-M变频器通讯控制及数据读取:正反转、频率设定与运行状态监测方案,三菱FX3U PLC与台达VFD-M变频器通讯控制教程:实现正反转、频率设定及状态读取等功能,含PLC
- 项目管理中人寿保险财务咨询系统界面设计与开发任务规划
- 三菱FX5U定位模块与昆仑通态触摸屏包装机配置程序集成:五轴控制及双轴插补技术,三菱FX5U定位模块与伺服系统控制:包装机配置清单及功能分配手册,三菱 FX5U定位模块5轴 2轴插补伺服 包括三菱FX
- 西门子RS485通讯一拖二恒压供水S7-200Smart PLC+触摸屏控制ABB变频器实现指南,西门子RS485通讯实现一拖二恒压供水S7-200Smart-PLC控制及ABB变频器参数设置方案,采
- glib2-doc-2.56.1-9.el7-9.x64-86.rpm.tar.gz
- 西门子动态密码程序:学习随机码生成与指针存储数据,Smartline触摸屏操作指南及编程视频教程,西门子动态密码程序:学习随机码生成与存储数据的智能之旅(视频讲解),200smart动态密码程序,触摸
- DeepSeek从入门到精通.pdf
- 西门子PID调节仿真程序:PLC实物操作演示,通用1200与1500PLC,手把手教你掌握博途PID调节与触摸屏操作,西门子PID调节仿真程序:PLC实物操作,通用1200与1500PLC,手把手教你
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


