资源简介
使用网络编程实现五子棋小游戏,适合javaSE阶段的学习,熟悉网络编程,
代码片段和文件信息
package com.jju.chessfive.ui;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import javax.swing.Jframe;
import javax.swing.JOptionPane;
public class ClientWindow extends Jframe implements MouseListener {
int x0 = 50 y0 = 50;// 棋盘左上角的坐标
int d = 40; // 各自的大小
int N = 10; // 棋盘的大小10*10
// 定义一个表示棋盘上每个顶点的(N*N)的状态矩阵
// 0--空白 1--黑子 2--白子
int[][] pos = new int[N][N];
// 当前棋子的颜色 1--黑 2--白
int chesstype = 0;
Socket socket; // 定义一个Socket对象
boolean isStart = false; //棋局是否开始标识
boolean isMyTurn= false; // 是否到我方落子
public ClientWindow() {
settitle(“菜鸟五子棋VO.1“);
setSize(800 600);
// 设置对鼠标事件的监听
addMouseListener(this);
try {
// 和服务端建立Socket连接
socket = new Socket(“127.0.0.1“ 8888);
// 启动接收消息的线程
new ReceiveMsgThread().start();
} catch (Exception ex) {
ex.printStackTrace();
}
}
// 绘制屏幕
@Override
public void paint(Graphics g) {
// 将屏幕背景设置为白色 ---或者加载一个背景图片
g.setColor(Color.white);
g.fillRect(0 0 2000 2000);
g.drawString(“菜鸟五子棋VO.1“ 400 50);
g.setColor(Color.black);
// 绘制棋盘
for (int i = 0; i < N; i++) {
// 画横线
g.drawLine(x0 y0 + i * d x0 + (N - 1) * d y0 + i * d);
// 画竖线
g.drawLine(x0 + i * d y0 x0 + i * d y0 + (N - 1) * d);
}
// 绘制棋盘上的棋子---遍历棋盘上所有的顶点
// 如果状态为1---画黑子 2---白子
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++) {
int status = pos[i][j];// 取状态
if (status > 0) // 有棋子
{
if (status == 1) // 黑子
g.setColor(Color.black); // 设置画笔颜色
else
g.setColor(Color.yellow);
// 画半径为5的圆表示棋子
g.fillOval(x0 + j * d - 5 y0 + i * d - 5 10 10);
}
}
}
@Override
public void mouseClicked(MouseEvent e) {
//---棋局是否开局的判断,开始后方可点击
if(isStart == false) return;
//到我方落子方可点击
if(isMyTurn == false) return;
// 鼠标点击的处理方法
// 1.获得鼠标点击的位置
int x = e.getX();
int y = e.getY();
// 2.找到离该点(xy)最近的棋盘的顶点序号(row)
int row = (int) ((y - y0) * 1.0 / d + 0.5);
int col = (int) ((x - x0) * 1.0 / d + 0.5);
// 2.判断该位置是否有了棋子
if (pos[row][col] > 0)
return;
// 3.设置该顶点的棋子颜色
pos[row][col] = chesstype;
repaint(); // 4.刷新屏幕,重新画
//设置我方不可在落子
isMyTurn = false;
//将我方落子信息发送给服务端
String msg = “Push#“ + chesstype + “#“ + row + “#“+ col;
sendMessage( msg);
}
/************ 向服务器发送消息 ********/
public void sendMessage(String msg) {
try {
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os true);
pw.println(msg); // 发送数据
} catch (Exception ex) {
ex.printStackTrace();
}
}
/**** 定义接收服务端发送过来的消息的线程 *****/
class ReceiveMsgThread extends Thread {
@Override
public void run() {
try {
// 获
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-09-05 15:23 NetChessFive32\
文件 301 2016-09-05 14:47 NetChessFive32\.classpath
文件 390 2016-09-05 14:47 NetChessFive32\.project
目录 0 2016-09-05 15:23 NetChessFive32\.settings\
文件 598 2016-09-05 14:47 NetChessFive32\.settings\org.eclipse.jdt.core.prefs
目录 0 2016-10-24 08:29 NetChessFive32\bin\
目录 0 2016-10-24 08:29 NetChessFive32\bin\com\
目录 0 2016-10-24 08:29 NetChessFive32\bin\com\jju\
目录 0 2016-10-24 08:29 NetChessFive32\bin\com\jju\chessfive\
目录 0 2016-10-24 08:29 NetChessFive32\bin\com\jju\chessfive\ui\
文件 1303 2016-10-24 08:29 NetChessFive32\bin\com\jju\chessfive\ui\ClientWindow$ReceiveMsgThread.class
文件 4596 2016-10-24 08:29 NetChessFive32\bin\com\jju\chessfive\ui\ClientWindow.class
文件 1681 2016-10-24 08:29 NetChessFive32\bin\com\jju\chessfive\ui\ServerWindow$ReceiveMsgThreadSingleSocket.class
文件 1862 2016-10-24 08:29 NetChessFive32\bin\com\jju\chessfive\ui\ServerWindow$ServerListenerThread.class
文件 4405 2016-10-24 08:29 NetChessFive32\bin\com\jju\chessfive\ui\ServerWindow.class
目录 0 2016-09-05 15:23 NetChessFive32\src\
目录 0 2016-09-05 15:23 NetChessFive32\src\com\
目录 0 2016-09-05 15:23 NetChessFive32\src\com\jju\
目录 0 2016-09-05 15:23 NetChessFive32\src\com\jju\chessfive\
目录 0 2016-09-05 15:23 NetChessFive32\src\com\jju\chessfive\ui\
文件 5124 2016-09-07 10:54 NetChessFive32\src\com\jju\chessfive\ui\ClientWindow.java
文件 5982 2016-09-07 10:48 NetChessFive32\src\com\jju\chessfive\ui\ServerWindow.java
评论
共有 条评论