純JAVA寫的socket區域網鬥地主遊戲
阿新 • • 發佈:2019-01-30
前兩天沒專案做,就想著寫點什麼。
就寫了這個小遊戲沒事跟同事玩玩。
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;
}
}
注意:缺少fastjson-1.2.2.jar,發現現在上傳資源最少要2分下載,各位請自行百度下載放在專案根目錄下jar資料夾中即可