前两天没项目做,就想着写点什么。
就写了这个小游戏没事跟同事玩玩。
5块钱一把,不带开挂的。
先来几张效果图
废话不多,开篇纪念。
部分源码
连接服务器类
public class Connect {
public static final String IP_ADDR = "192.168.0.38";// 服务器地址
public static final int PORT = 8866;// 服务器端口号
private static Socket socket;
public static SendMes sendMes;
public static boolean connect(){
try {
socket = new Socket(IP_ADDR, PORT);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, new JLabel("<html><h1><font color='red'>"+e.getMessage()+"</font></h1></html>"), "错误", JOptionPane.ERROR_MESSAGE);
}
new ReadMes(socket).start();
sendMes=new SendMes(socket);
sendMes.setMsg(Fuckland.jTextField.getText().trim());
sendMes.start();
System.out.println("连接成功");
return true;
}
}
接受服务器消息线程
public class ReadMes extends Thread {
private Socket socket;
public ReadMes(Socket socket) {
this.socket = socket;
}
public void run() {
DataInputStream objInput = null;
try {
objInput = new DataInputStream(socket.getInputStream());
while (true) {
......
}
} catch (Exception e) {
e.printStackTrace();
if(e.getMessage()!=null)
JOptionPane.showMessageDialog(null, new JLabel("<html><h1><font color='red'>"+e.getMessage()+"</font></h1></html>"), "错误", JOptionPane.ERROR_MESSAGE);
} finally {
try {
if(objInput!=null)
objInput.close();
} catch (IOException e) {
}
}
}
}
发送消息给服务器线程
public class SendMes extends Thread {
private Socket socket;
public SendMes(Socket socket) {
this.socket = socket;
}
private String msg;
public void run() {
DataOutputStream objOut=null;
try {
objOut = new DataOutputStream(socket.getOutputStream());
while(true){
if(msg!=null&&msg.length()>0){
objOut.writeUTF(msg);
msg=null;
}
Thread.sleep(100);
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, new JLabel("<html><h1><font color='red'>"+e.getMessage()+"</font></h1></html>"), "错误", JOptionPane.ERROR_MESSAGE);
}finally{
try {
objOut.close();
} catch (IOException e) {
}
}
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
判断是不是比上家的牌大
public class IsBigger {
public static boolean isBigger(List<Poker> leftList,List<Poker> rightList,List<Poker> choose){
//如果上家不要 或者第一把出 list=null
if(leftList==null||leftList.size()==0){
if(rightList==null||rightList.size()==0){
//两家都不要
return true;
}else{
if(isRealBigger(rightList, choose)){
return true;
}
return false;
}
}else{
if(isRealBigger(leftList, choose)){
return true;
}
return false;
}
}
public static boolean isRealBigger(List<Poker> leftList,List<Poker> choose){
// 首先判断牌型是不是一样
String paiXing = IsTruePoker.isTruePoker(leftList);
if (paiXing.equals(IsTruePoker.isTruePoker(choose))) {
// 根据牌型来判断大小
if (IsTruePoker.DANZHANG.equals(paiXing)) {
// 单张
if (isBiggerLast(leftList, choose)) {
return true;
}
return false;
} else if (IsTruePoker.WANGZHA.equals(paiXing)) {
// 王炸
// 开挂了
} else if (IsTruePoker.DUIZI.equals(paiXing)) {
// 对子
if (isBiggerLast(leftList, choose)) {
return true;
}
return false;
} else if (IsTruePoker.SANGETOU.equals(paiXing)) {
// 三张
if (isBiggerLast(leftList, choose)) {
return true;
}
return false;
} else if (IsTruePoker.SANDAIYI.equals(paiXing)) {
// 三带一
if (isBiggerSan(leftList, choose)) {
return true;
}
return false;
} else if (IsTruePoker.SANDAIYIDUI.equals(paiXing)) {
// 三带一对
if (isBiggerSan(leftList, choose)) {
return true;
}
return false;
} else if (IsTruePoker.ZHADAN.equals(paiXing)) {
// 炸弹
if (isBiggerLast(leftList, choose)) {
return true;
}
return false;
} else if (IsTruePoker.SHUNZI.equals(paiXing)) {
// 顺子
if (isBiggerLast(leftList, choose)) {
return true;
}
return false;
} else if (IsTruePoker.LIANDUI.equals(paiXing)) {
// 连对
if (isBiggerLast(leftList, choose)) {
return true;
}
return false;
} else if (IsTruePoker.SHUANGFEI.equals(paiXing)) {
// 双飞
if (isBiggerSan(leftList, choose)) {
return true;
}
return false;
}
}else if(choose.size()==2){
//判断是不是王炸
if(IsTruePoker.isWangZha(choose)){
return true;
}
return false;
} else if(choose.size()==4){
//判断是不是炸弹
if(IsTruePoker.isSame(choose, 4)){
return true;
}
return false;
}
return false;
}
public static boolean isBiggerLast(List<Poker> list,List<Poker> choose){
if(list.get(list.size()-1).getColor()<choose.get(choose.size()-1).getColor()){
return true;
}
return false;
}
public static boolean isBiggerSan(List<Poker> list,List<Poker> choose){
int a=san(list);
int b=san(choose);
if(a==-1||b==-1){
return false;
}
if(b>a){
return true;
}
return false;
}
public static int san(List<Poker> list){
for(int i=0;i<list.size()-2;i++){
int a=list.get(i).getColor();
int b=list.get(i+1).getColor();
int c=list.get(i+2).getColor();
if(a==b&&a==c){
return a;
}
}
return -1;
}
}
感兴趣的朋友可以下源码玩玩 也可以自己修改修改
源码地址:http://download.csdn.net/detail/laigezao/9136609
注意:缺少fastjson-1.2.2.jar,发现现在上传资源最少要2分下载,各位请自行百度下载放在项目根目录下jar文件夹中即可
转载自原文链接, 如需删除请联系管理员。
原文链接:纯JAVA写的socket局域网斗地主游戏,转载请注明来源!