자바 간단 한 온라인 장기 게임 실현
게임 규칙:
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();
}
}
코드 결과이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.