자바 간단 한 온라인 장기 게임 실현

35035 단어 자바장기
본 논문 의 사례 는 자바 가 인터넷 장기 게임 을 실현 하 는 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
게임 규칙:
1.장군/원수:밭 에서 나 올 수 없고 사선 으로 갈 수 없고 앞으로 후퇴 해서 왼쪽으로 오른쪽으로 갈 수 있 습 니 다.매번 한 칸 만 갑 니 다.
2.사/사:밭 에 나 갈 수 없고 사선 만 걸 을 수 있 으 며 매번 한 칸 만 걸 을 수 있다.
3.상/상:밭 글씨 만 걸 을 수 있 고 중간 에 어 설 픈 것 을 방지 하 며 바둑 을 둘 수 없다.

4.말:낮 에 만 갈 수 있어 요.(이것 은 귀 찮 습 니 다.다음 표 지 를 보 세 요)

5.차:차 는 직선 으로 만 갈 수 있 습 니 다.이 건 이해 하기 쉽 습 니 다.자세히 말 하지 않 겠 습 니 다.
6.포:
상황 1:순수 걷 기->중간 과 목적지 에 바둑 이 있어 서 는 안 된다.
상황 2:바둑 을 먹 기-C>중간 에 바둑 이 하나 있어 야 하고 목표 도 바둑 이 있어 야 하 며 적의 바둑 이기 때문에 스스로 자신 을 먹 을 수 없다.
7.졸/병:
강 이쪽:앞으로 만 갈 수 있 고 뒤로 물 러 설 수 없고 가로로 가면 안 돼!!
강 건 너:앞으로 갈 수 있어,가로로 갈 수 있어,뒤로 물 러 설 수 없어!!
패 널 디자인
 
좌절 한 것 같 아!하하,서 두 르 지 말고 내 가 자세히 말 하 는 것 을 들 어 라!
일반적인 인터페이스 디자인 은 우리 가 모두 가로 세로 좌표 가 이렇다 는 것 을 안다. 

하지만 저 는 뒷길 로 가 겠 습 니 다.다른 것 이 아니 라 초보 자 들 에 게 더 잘 이해 시 키 기 위해 서 입 니 다.우 리 는 원래 의 x 좌 표를 배열 의 열(col)로 보고 y 좌 표를 우리 배열 의 줄(row)로 봅 니 다.그러면 조금 더 이해 할 수 있 습 니 다.물론 제 가 바로 이 해 했 습 니 다.하하,다음 게임 코드 프로 그래 밍 은 가로 좌 표를 y*width 로 사용 하 겠 습 니 다.세로 좌 표를 x*height 로 사용 하면 왜 그런 지 이해 할 수 있 을 것 입 니 다.x 는 배열 의 줄 이기 때 문 입 니 다.즉,좌표 세로 좌표(y)의 표현 입 니 다.같은 배열 의 y 도 마찬가지 입 니 다.
데이터 전송:여기 서 우 리 는 UDP 프로 토 콜 로 통신 을 하기 때문에 당신들 도 먼저 UDP 프로 토 콜 의 기본 적 인 방법 을 알 아 봐 야 합 니 다.여 기 는 자세히 설명 하지 않 겠 습 니 다.
통신 프로 토 콜:여기 서 우 리 는 통신 프로 토 콜 을 사용자 정의 합 니 다.
"play|"-C 는 이 시작 으로 한쪽 을 대표 하여 게임 초 대 를 보 내 고 다른 한쪽 의 응답 을 기다린다.
"connect|"-이 를 시작 으로 다른 쪽 에서 초 대 를 받 고 연결 통신 을 만 드 는 것 에 동의 합 니 다!초청 자가 이 소식 을 받 으 면 통신 구축 에 성공 한 것 을 의미 하 며 게임 을 시작 할 수 있 습 니 다.
"move|"-이 시작 으로 모 바 일 데이터 전송 을 대표 합 니 다.한 끝 에 바둑 알 이 움 직 이면 다른 한 끝 에 도 정 보 를 받 아 화면 을 다시 그립 니 다.
"lose|"-C 는 이 시작 으로 한 측 이 패 배 를 인정 하고 한 측 이 패 배 를 인정 하면 다른 측 에 이 메 시 지 를 보낸다.
"quit|"-이 를 시작 으로 한 측 이 게임 에서 탈퇴 하 는 것 을 대표 하고 어느 한 측 이 떠 나 면 상대방 에 게 이 메 시 지 를 보 내 상대방 에 게 알려 줍 니 다.
"success|"-C 는 이 시작 으로 승 리 를 대표 하고 어느 한 측 이 승리 하면 상대방 에 게 메 시 지 를 보 내 상대방 에 게 알 린 다.
"regret|"-이것으로 시작 하여 바둑 을 뉘 우 치 는 것 을 표시 합 니 다.이것 은 말 할 필요 가 없습니다.모두 가 알 고 있 습 니 다.하지만 이번 프로 그래 밍 에서 저 는 이것 을 넣 지 않 았 습 니 다.이것 은 당신들 이 스스로 필요 에 따라 추가 할 수 있 습 니 다.
(누군가가 나 에 게 이 협 의 를 누가 정 의 했 느 냐 고 물 었 을 것 이다.아하 하,너희들 을 실망 시 켰 다.이것 은 내 가 정의 한 것 이다.이 통신 협 의 는 너희들 이 쓴 이 코드 와 이 코드 를 사용 한 두 사람 이 통신 해서 사용 하 는 것 에 만 적용 되 기 때문에 협 의 는 어떻게 스스로 정의 할 수 있 느 냐)
코드 구현
1.Chess 클래스:

package internet_chess;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.image.ImageObserver;

import javax.swing.JPanel;

public class Chess {
  public int Row = 12;
  public int Col = 11;
  public String chessName;//         
  public int owner;//          --      
  public Point point;//         
  public Image chessImage;//         
  private int BLACKCHESS = 1;
  private int REDCHESS = 0;//  0,  1
  private int width = 40;
  private int height = 40;

  public Chess(String name, int own,Point point)//           ,   ,  ,     
  {
    this.chessName = name;
    this.owner = own;
    this.point = point;
    if(owner == BLACKCHESS)//        
    {
      if(chessName.equals(" "))
      {
        chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/0.png");
      }
      else if(chessName.equals(" "))
      {
        chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/1.png");
      }
      else if(chessName.equals(" "))
      {
        chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/3.png");
      }
      else if(chessName.equals(" "))
      {
        chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/5.png");
      }
      else if(chessName.equals(" "))
      {
        chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/7.png");
      }
      else if(chessName.equals(" "))
      {
        chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/9.png");
      }
      else if(chessName.equals(" "))
      {
        chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/11.png");
      }
    }
    else//        
    {
      if(chessName.equals(" "))
      {
        chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/16.png");
      }
      else if(chessName.equals(" "))
      {
        chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/17.png");
      }
      else if(chessName.equals(" "))
      {
        chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/19.png");
      }
      else if(chessName.equals(" "))
      {
        chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/21.png");
      }
      else if(chessName.equals(" "))
      {
        chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/23.png");
      }
      else if(chessName.equals(" "))
      {
        chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/25.png");
      }
      else if(chessName.equals(" "))
      {
        chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/27.png");
      }
    }
  }

  protected void paint(Graphics g,JPanel i)//   
  {
    g.drawImage(chessImage, point.y*width-width/2, point.x*height-height/2, width, height, (ImageObserver)i);
  }

  protected void paintSeclected(Graphics g)//                
  {
    g.drawRect(point.y*width-width/2, point.x*height-height/2, width, height);
  }

  public void SetPos(int x, int y)//                  
  {
    point.x = x;
    point.y = y;
  }

  public void ReversePos()//             ,          
  {
    point.x = Row-1 - point.x;
    point.y = Col-1 - point.y;
  }
}
2.ChessPanel 클래스:

package internet_chess;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class ChessPanel extends JPanel implements Runnable{
  private int BLACKCHESS = 1;
  private int REDCHESS = 0;//   1,   0
  public Chess chess[] = new Chess[32];//   32     
  private int width = 40;
  private int height = 40;
  public int Row = 12;
  public int Col = 11;//11 10 
  public int map[][] = new int [Row][Col];
  public int player;//        
  private boolean isFirst = false;//             ,               
  private int x1,y1,x2,y2;//                
  private boolean flag = true;//         
  private boolean isPlay = false;
  private Chess firstChess = null;
  private Chess secondChess = null;//                     

  private InetAddress myID;//  id  
  private InetAddress youID;//  ID  
  private int sendport;//    
  private int receiveport = 8888;//    


  public ChessPanel()//    
  {
    init_map();//     
    //             
    this.addMouseListener(new MouseAdapter()
    {
      public void mouseClicked(MouseEvent e)
      {
        if(isPlay == true)//         
        {
          SelectChess(e.getPoint());//        
          repaint();
        }
      }

      public void SelectChess(Point pos)
      {
        int x = pos.x;
        int y = pos.y;//               
        System.out.println("          :x->"+x+" y->"+y);
        if(x > 0 && x < (Col-1)*width && y > 0 && y < (Row-1)*height)//            ,       
        {
          Point point = ReSetID(x,y);
          if(isFirst)//             
          {
            x1 = point.x;
            y1 = point.y;
            //                           ,     
            int id = map[x1][y1];
            if(id != -1 && chess[id].owner == player)
            {
              isFirst = false;
              firstChess = chess[id];
              System.out.println("id->"+id);
            }
            else//          
            {
              JOptionPane.showConfirmDialog(null, "  ", "       !     !", JOptionPane.OK_OPTION);
              isFirst = true;
            }
          }
          else//        
          {
            x2 = point.x;
            y2 = point.y;
            int id = map[x2][y2];
            if(id != -1 && chess[id].owner != player)//          ,         
            {
              isFirst = true;
              secondChess = chess[id];
              //            ,          ,                  
              //          
              if(IsMoveChess(firstChess,x2,y2))//    -  
              {
                int idx1 = map[x1][y1];
                map[x1][y1] = -1;
                map[x2][y2] = idx1;
                chess[id] = null;
                firstChess.SetPos(x2, y2);
                repaint();
                send("move|"+String.valueOf(idx1)+"|"+String.valueOf(Row-1-x2)+"|"+String.valueOf(Col-1-y2)+"|",youID,sendport);
                if(id == 0)//       
                {
                  send("success|   ",youID,sendport);
                  isPlay = false;
                  JOptionPane.showConfirmDialog(null, "    ", "   ,   !", JOptionPane.OK_OPTION);
                  return;
                }
                else if(id == 16)//       
                {
                  send("success|   ",youID,sendport);
                  isPlay = false;
                  JOptionPane.showConfirmDialog(null, "    ", "   ,   !", JOptionPane.OK_OPTION);
                  return;
                }
                isFirst = true;
                isPlay = false;
              }
              else//      ,    
              {
                JOptionPane.showConfirmDialog(null, "  ", "   ,      ,       !", JOptionPane.ERROR_MESSAGE);
                isFirst = false;
              }
            }
            else if(id != -1 && chess[id].owner == player)//            ,                      
            {
              firstChess = chess[id];
              x1 = x2;
              y1 = y2;
              isFirst = false;
            }
            else//          ,           
            {
              secondChess = null;
              if(IsMoveChess(firstChess,x2,y2))//    -  
              {
                int idx1 = map[x1][y1];
                map[x1][y1] = -1;
                map[x2][y2] = idx1;
//               chess[id] = null;
                firstChess.SetPos(x2, y2);
                send("move|"+String.valueOf(idx1)+"|"+String.valueOf(Row-1-x2)+"|"+String.valueOf(Col-1-y2)+"|",youID,sendport);
                System.out.println("         :  -》"+(Row-1-x2)+" "+(Col-1-y2));
                repaint();
                isFirst = true;
                isPlay = false;
              }
            }
          }
        }
      }
    });
  }

  public boolean IsMoveChess(Chess chess,int x,int y)//          ----       
  {
    if(chess.chessName.equals(" ") || chess.chessName.equals(" "))//     
    {
      int x0 = chess.point.x;
      int y0 = chess.point.y;
      if(x >= 8 && x <= 10 && y >= 4 && y <= 6)
      {
//       int x0 = chess.point.x;
//       int y0 = chess.point.y;
        if(Math.abs(x - x0) > 1 || Math.abs(y - y0) > 1)
          return false;
        else if(Math.abs(x - x0)*Math.abs(y - y0) != 0)//     
          return false;
        else
          return true;
      }
      if(this.chess[map[x][y]].chessName.equals(" ") || this.chess[map[x][y]].chessName.equals(" ") && (y0 == y))//          
      {
        int min = x < x0? x : x0;
        int max = x > x0? x : x0;
        for(min = min+1; min < max; min++)
        {
          if(map[min][y] != -1)
            return false;
        }
        return true;
      }
      else
        return false;
    }
    else if(chess.chessName.equals(" ") || chess.chessName.equals(" "))//        , ,    ,      
    {
      if(x >= 8 && x <= 10 && y >= 4 && y <= 6)
      {
        int x0 = chess.point.x;
        int y0 = chess.point.y;
        if(Math.abs(x - x0) * Math.abs(y - y0) != 1)
        {
          return false;
        }
        else
          return true;
      }
      else//  
        return false;
    }
    else if(chess.chessName.equals(" ") || chess.chessName.equals(" "))//    ,     
    {
      if(x >= 6 && x != 11 && y >= 1 && y <= 9)
      {
        int x0 = chess.point.x;
        int y0 = chess.point.y;
        if(Math.abs(x - x0) * Math.abs(y - y0) != 4)
        {
          return false;
        }
        else if(Math.abs(x - x0) == 2 && Math.abs(y - y0) == 2)
        {
          int xm,ym;//     ,          
          xm = x > x0? x-1:x0-1;
          ym = y > y0? y-1:y0-1;
          if(map[xm][ym] != -1)//      
            return false;
          return true;
        }
        else//  1*4 == 4     
          return false;
      }
      else
        return false;
    }
    else if(chess.chessName.equals(" "))//   ,         
    {
      if(x >= 1 && x <=10 && y >= 1 && y <= 9)
      {
        int x0 = chess.point.x;
        int y0 = chess.point.y;
        if(Math.abs(x - x0) * Math.abs(y - y0) == 2)//      
        {
          //      
          if(Math.abs(y - y0) == 2)
          {
            if(map[x0][y+1] != -1 && y < y0)//  
            {
              return false;
            }
            if(map[x0][y-1] != -1 && y0 < y)//  
            {
              return false;
            }
            return true;
          }
          else
          {
            if(map[x+1][y0] != -1 && x < x0)//  
            {
              return false;
            }
            if(map[x-1][y0] != -1 && x > x0)//  
            {
              return false;
            }
            return true;
          }    
        }
        else
          return false;
      }
      else
        return false;
    }
    else if(chess.chessName.equals(" "))//    
    {
      if(x >= 1 && x <=10 && y >= 1 && y <= 9)
      {
        int x0 = chess.point.x;
        int y0 = chess.point.y;
        if(x == x0)//    
        {
          int i = y < y0 ? y : y0;
          int max = y > y0 ? y : y0;
          for(i = i+1; i < max; i++)//       ,            
          {
            if(map[x][i] != -1)
            {
//             if(i == max && this.chess[map[x][i]].owner != chess.owner)
//             {
//               return true;
//             }
              return false;
            }
          }
          return true;
        }
        else if(y == y0)//    
        {
          int i = x < x0 ? x : x0;
          int max = x > x0 ? x : x0;
          for(i = i+1; i < max; i++)
          {
            if(map[i][y] != -1)
            {
//             if(i == max && this.chess[map[i][y]].owner != chess.owner)
//             {
//               return true;
//             }
              return false;
            }
          }
          return true;
        }
        return false;
      }
      else
        return false;//  
    }
    else if(chess.chessName.equals(" "))//     ,      ,        
    {
      if(x >= 1 && x <=10 && y >= 1 && y <= 9)
      {
        int x0 = chess.point.x;
        int y0 = chess.point.y;
        int countx = 0;
        int county = 0;
        if(x == x0)//    
        {
          int i = y < y0 ? y : y0;
          int max = y > y0 ? y : y0;
          for(i = i+1; i < max; i++)
          {
            if(map[x][i] != -1)
            {
              countx++;
            }
          }
        }
        else if(y == y0)//    
        {
          int i = x < x0 ? x : x0;
          int max = x > x0 ? x : x0;
          for(i = i+1; i < max; i++)
          {
            if(map[i][y] != -1)
            {
              county++;
            }
          }
        }
        if(countx == 1 || county == 1)//        
        {
//         if(this.chess[map[x][y]].owner != chess.owner)
//         {
//           return true;
//         }
//         else
//           return false;
          System.out.println("countx:"+countx);
          System.out.println("county:"+county);
          return true;
        }
        else if(countx == 0 && county == 0)//       
        {
          if(map[x][y] == -1)//     
          {
            return true;
          }
          else
            return false;
//         return true;
        }
        else
          return false;
      }
      else
        return false;//  
    }
    else if(chess.chessName.equals(" ") || chess.chessName.equals(" "))//          ,    ,      
    {
      if(x < 7 && x >= 1 && y >= 1 && y <= 9)
      {
        int x0 = chess.point.x;
        int y0 = chess.point.y;
        if(x == x0 && Math.abs(y-y0) == 1)//      ,             
        {
          //             
          if(x == 6)
            return false;
          else
            return true;
        }
        if(y == y0 && x - x0 == -1)//      ,      
        {
          return true;
        }
        return false;
      }
      else
        return false;
    }
    return false;
  }

  public Point ReSetID(int x, int y)//  id, id           
  {
    int posx = (y+height/2)/height;
    int posy = (x+width/2)/width;
    return new Point(posx,posy);
  }

  public void init_map()//     
  {
    for(int i = 0; i < Row; i++)
    {
      for(int j = 0; j < Col; j++)
      {
        map[i][j] = -1;//       -1,      id
      }
    }
  }

  public void paint(Graphics g)//     
  {
    super.paint(g);
    g.clearRect(0,0,this.getWidth(),this.getHeight());
    //   
    int a = 1;
    int b = 8;
    int c = 5;//        
    for(int j = 1; j < Row-1; j++)//   
    {
      g.drawLine(a*width, j*height, (Col-2)*width, j*height);
    }
    for(int i = 1; i < Col-1; i++)//   
    {
      g.drawLine(i*width, a*height, i*width, (Row-2)*height);
      if(i == 4)
      {
        g.drawLine(i*width, a*height, (i+2)*width, (a+2)*height);
        g.drawLine(i*width, b*height, (i+2)*width, (b+2)*height);
      }
      if(i == 6)
      {
        g.drawLine(i*width, a*height, (i-2)*width, (a+2)*height);
        g.drawLine(i*width, b*height, (i-2)*width, (b+2)*height);
      }
    }
    g.drawRect(0, 0, (Col-1)*width, (Row-1)*height);
    g.setColor(Color.GRAY);
    g.fillRect(a*width, c*height,(Col-2-a)*width, height);
    g.setFont(new Font("  ",Font.BOLD,20));
    g.setColor(Color.white);
    g.drawString("        ", 3*width, (c+1)*height-10);
    g.setColor(Color.black);
    //   
    for(int i = 0; i < chess.length; i++)
    {
      if(chess[i] != null)
      {
        chess[i].paint(g, this);
      }
    }
    if(firstChess != null)
    {
      firstChess.paintSeclected(g);
    }
    if(secondChess != null)
    {
      secondChess.paintSeclected(g);
    }

  }

  public void send(String str,InetAddress ip,int port) //     
  {
    DatagramSocket s = null;
    try{
      s = new DatagramSocket();//          
      byte data[] = new byte[100];
      data = str.getBytes();
      DatagramPacket pocket = new DatagramPacket(data,data.length,ip,port);//              ,         ,    ,  ip  ,     
      s.send(pocket);//      
      System.out.println("    :"+str);
    }catch(IOException ex)
    {
      ex.printStackTrace();
    }finally
    {
      if(s != null)
        s.close();
    }
  }

  public void startgame(InetAddress ip, int otherport, int myport)//           
  {
    youID = ip;
    this.sendport = otherport;
    this.receiveport = myport;
    try{
      myID = InetAddress.getLocalHost();
    }catch(UnknownHostException ex)
    {
      ex.printStackTrace();
    }
    send("play|",youID,sendport);//    ,    ip   ----      ,      ,       ,        
    Thread t = new Thread(this);
    t.start();
  }

  public void FirstPaintChess()//      ---               ,         
  {
    //        ,     ,        ,     ,          
    init_map();//             ,       ,            id     
    paintChess();
    if(player == BLACKCHESS)
    {
      ReverseChess();
    }
    repaint();
  }

  public void ReverseChess()//  ,     ,        
  {
    //     
//   for(int i = 0; i < 32; i++)
//   {
//     if(chess[i] != null)
//       chess[i].ReversePos();
//   }
    //  map  id
    for(int i = 0; i < 32; i++)
    {
      if(chess[i] != null)
      {
        chess[i].ReversePos();
        int xx = chess[i].point.x;
        int yy = chess[i].point.y;
        map[xx][yy] = i;
      }
    }
  }

  public void paintChess()//     ,    ,    
  {
    //  
    chess[0] = new Chess(" ",BLACKCHESS,new Point(1,5));
    map[1][5] = 0;
    chess[1] = new Chess(" ",BLACKCHESS,new Point(1,4));
    map[1][4] = 1;
    chess[2] = new Chess(" ",BLACKCHESS,new Point(1,6)); 
    map[1][6] = 2;
    chess[3] = new Chess(" ",BLACKCHESS,new Point(1,3)); 
    map[1][3] = 3;
    chess[4] = new Chess(" ",BLACKCHESS,new Point(1,7)); 
    map[1][7] = 4;
    chess[5] = new Chess(" ",BLACKCHESS,new Point(1,2)); 
    map[1][2] = 5;
    chess[6] = new Chess(" ",BLACKCHESS,new Point(1,8)); 
    map[1][8] = 6;
    chess[7] = new Chess(" ",BLACKCHESS,new Point(1,1)); 
    map[1][1] = 7;
    chess[8] = new Chess(" ",BLACKCHESS,new Point(1,9)); 
    map[1][9] = 8;
    chess[9] = new Chess(" ",BLACKCHESS,new Point(3,2)); 
    map[3][2] = 9;
    chess[10] = new Chess(" ",BLACKCHESS,new Point(3,8)); 
    map[3][8] = 10;
    for(int i = 11,j = 1; i < 16; i++,j+=2)
    {
      chess[i] = new Chess(" ",BLACKCHESS,new Point(4,j)); 
      map[4][j] = i;
    }

    //   
    chess[16] = new Chess(" ",REDCHESS,new Point(10,5)); 
    map[10][5] = 16;
    chess[17] = new Chess(" ",REDCHESS,new Point(10,4)); 
    map[10][4] = 17;
    chess[18] = new Chess(" ",REDCHESS,new Point(10,6)); 
    map[10][6] = 18;
    chess[19] = new Chess(" ",REDCHESS,new Point(10,3)); 
    map[10][3] = 19;
    chess[20] = new Chess(" ",REDCHESS,new Point(10,7)); 
    map[10][7] = 20;
    chess[21] = new Chess(" ",REDCHESS,new Point(10,2)); 
    map[10][2] = 21;
    chess[22] = new Chess(" ",REDCHESS,new Point(10,8)); 
    map[10][8] = 22;
    chess[23] = new Chess(" ",REDCHESS,new Point(10,1)); 
    map[10][1] = 23;
    chess[24] = new Chess(" ",REDCHESS,new Point(10,9)); 
    map[10][9] = 24;
    chess[25] = new Chess(" ",REDCHESS,new Point(8,2)); 
    map[8][2] = 25;
    chess[26] = new Chess(" ",REDCHESS,new Point(8,8)); 
    map[8][8] = 26;
    for(int i = 27, j = 1; i < 32; i++, j+=2)
    {
      chess[i] = new Chess(" ",REDCHESS,new Point(7,j)); 
      map[7][j] = i;
    }
  }

  @Override
  public void run()
  {
    DatagramSocket sock = null;
    try {
      sock = new DatagramSocket(receiveport);//      
      byte data[] = new byte[100];
      DatagramPacket pocket = new DatagramPacket(data,data.length);
      while(flag)
      {
        sock.receive(pocket);//    
        //      
        String str = new String(data);
        String s[] = new String[6];
        s = str.split("\\|");//       |    
        if(s[0].equals("play"))//                 ,            
        {
          player = BLACKCHESS;//        
          send("connect|",youID,sendport);
          //     
          FirstPaintChess();
          isPlay = false;//       ,          
        }
        else if(s[0].equals("connect"))//               ,              
        {
          player = REDCHESS;//           
          FirstPaintChess();
          isPlay = true;//       ,     ,          
        }
        else if(s[0].equals("lose"))//    
        {
          JOptionPane.showConfirmDialog(null, "  ", "      !", JOptionPane.OK_OPTION);
          isPlay = false;
        }
        else if(s[0].equals("success"))//    
        {
          if(s[1].equals("   "))
          {
            JOptionPane.showConfirmDialog(null, "  ", "    !   !", JOptionPane.OK_OPTION);
          }
          else if(s[1].equals("   "))
          {
            JOptionPane.showConfirmDialog(null, "  ", "    !   !", JOptionPane.OK_OPTION);
          }
          isPlay = false;
        }
        else if(s[0].equals("move"))//    
        {
          int indx = Integer.parseInt(s[1]);
          System.out.println("indx->"+indx);
          int posx = Integer.parseInt(s[2]);
          System.out.println("posx->"+posx);
          int posy = Integer.parseInt(s[3]);
          System.out.println("posy->"+posy);
          int x = chess[indx].point.x;
          int y = chess[indx].point.y;
          map[x][y] = -1;
          chess[indx].point.x = posx;
          chess[indx].point.y = posy;
          if(map[posx][posy] != -1)
          {
            chess[map[posx][posy]] = null;
          }
          map[posx][posy] = indx;
          repaint();
          isPlay = true;
        }
        else if(s[0].equals("quit"))//    
        {
          JOptionPane.showConfirmDialog(null, "  ", "    ,    !", JOptionPane.OK_OPTION);
          isPlay = false;
          flag = false;//    
        }

      }

    } catch (SocketException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }finally
    {
      if(sock != null)
      {
        sock.close();
      }
    }

  }
}
3.ChessFrame 클래스:

package internet_chess;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.net.InetAddress;
import java.net.UnknownHostException;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class ChessFrame extends JFrame{
  private JButton start = new JButton("  ");
  private JButton end = new JButton("  ");
  private JButton lose = new JButton("  ");
  private JPanel paneUp = new JPanel();
  private ChessPanel chesspanel = new ChessPanel();
  private JPanel paneDown = new JPanel();
  private JLabel IPlabel = new JLabel("IP:");
  private JLabel otherPortlabel = new JLabel("    ");
  private JLabel imageicon = new JLabel();
  private JTextField ip_address = new JTextField("127.0.0.1");
  private JTextField otherPort = new JTextField("9999");

  private InetAddress myID;//  id  
  private InetAddress youID;//  ID  
  private int sendport;//    
  private int receiveport = 8888;//    


  public ChessFrame()//    
  {
    paneDown.setLayout(new FlowLayout());
    IPlabel.setBounds(10, 10, 40, 20);
    ip_address.setBounds(new Rectangle(60,10,50,20));
    paneDown.add(IPlabel);
    paneDown.add(ip_address);
    paneDown.add(otherPortlabel);
    paneDown.add(otherPort);
    paneDown.add(start);
    paneDown.add(lose);
    paneDown.add(end);
    lose.setEnabled(false);

    imageicon.setBounds(new Rectangle(300,0,100,100));
    imageicon.setIcon(new ImageIcon("F:/Image/chess/0.png"));//      
    paneUp.add(imageicon,BorderLayout.CENTER);

    Container con = this.getContentPane();
    con.add(paneUp,BorderLayout.NORTH);
    con.add(chesspanel,BorderLayout.CENTER);
    con.add(paneDown,BorderLayout.SOUTH);

    this.setTitle("8888    ");
    this.setSize(new Dimension(600,700));
    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    start.addMouseListener(new MouseAdapter()
    {
      public void mouseClicked(MouseEvent e)
      {
        try {
          String ip = ip_address.getText();//      ip  
          sendport = Integer.parseInt(otherPort.getText());//        
          myID = InetAddress.getLocalHost();//    ip  
          youID = InetAddress.getByName(ip);//    ip  
        } catch (UnknownHostException e1) {
          e1.printStackTrace();
        }
        chesspanel.startgame(youID,sendport,receiveport);
        lose.setEnabled(true);
      }
    });

    end.addMouseListener(new MouseAdapter()
    {
      public void mouseClicked(MouseEvent e)
      {
        try{
          chesspanel.send("quit|",youID,sendport);//         ,      
          System.exit(0);
        }catch(Exception ex)
        {
          ex.printStackTrace();
        }
      }
    });

    lose.addMouseListener(new MouseAdapter()
    {
      public void mouseClicked(MouseEvent e)
      {
        try{
          chesspanel.send("lose|",youID,sendport);//         
        }catch(Exception ex)
        {
          ex.printStackTrace();
        }
      }
    });


    //          
  }

  public static void main(String[] args) {
    // TODO Auto-generated method stub
    new ChessFrame();
  }

}
코드 결과



이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기