求哪位朋友提供一个Java小程序的源代码?谢谢你

导入Java . applet . applet;

导入Java . awt . *;

导入Java . io . *;

导入Java . net . *;

公共类TicTacToeclient扩展Applet实现Runnable

{//class1

文本字段id;

Panel boardpanel,panel2

方板[][],currentsquare

插座连接;

DataInputStream输入;

DataOutputStream输出;

线程输出线程;

char mymark

文本区显示;

公共void init()

{

set layout(new BorderLayout());

display=new TextArea(4,30);

display . set editable(false);

添加(“南”,显示);

board Panel = new Panel();

board panel . set background(color . cyan);

board panel . set layout(new GridLayout(3,3,0,0));

板=新方块[3][3];

for(int row = 0;row & lt板长;row++)

for(int col = 0;col & lt木板[排]。长度;col++)

{

board[row][col]=新方块();

repaint();

board panel . add(board[row][col]);

}

id = new TextField();

id . set editable(false);

添加(“北”,id);

Panel 2 = new Panel();

panel 2 . add(board panel);

add("中心",面板2);

}

///////////结束

公共void开始()

{

尝试{

connection = new Socket(inet address . getlocalhost(),5000);

input = new data inputstream(connection . getinputstream());

output = new data output stream(connection . get output stream());

}

catch(IOException e){

//e . printstacktrace();

}

outputThread =新线程(this);

output thread . start();

}

///////////结束

公共布尔mouseUP(事件e,int x,int y)

{

for(int row = 0;row & lt板长;row++)

{

for(int col = 0;col & lt木板[排]。长度;col++)

尝试{

if(例如,target==board[row][col])

{

current square = board[row][col];

output . write int(row * 3+col);

}

}

catch(IOException ie){

//ie . printstacktrace();

}

}

返回true

}

///////////结束

公共无效运行()

{

尝试{

my mark = input . read char();

Id.setText("欢迎玩\ " "+mymark+" \ ");

}

catch(IOException e){

e . printstacktrace();

}

while(真)

{

尝试{

string s = input . read utf();

processMessage

}

catch(IOException e){

//e . printstacktrace();

}

}

}

///////////结束

公共void processMessage(字符串s)

{

if(s等于(“有效移动”))

{

display.appendText("有效移动,请稍候\ n ");

current square . set mark(my mark);

current square . repaint();

}

else if(s.equals("无效移动,重试"))

{

display . appendtext(s+" \ n ");

}

else if(s.equals("对手移动"))

{

尝试{

int loc = input . readint();

完成:

for(int row = 0;row & lt板长;row++)

for(int col = 0;col & lt木板[排]。长度;col++)

if(row*3+col==loc)

{

板[行][列]。setMark(mymark=='x '?o ':' x ');

板[行][列]。repaint();

休息完毕;

}

display.appendText("对手动了。轮到你了\ n ");

}

catch(IOException e){

e . printstacktrace();

}

}

其他

{

display . appendtext(s+" \ n ");

}

}

}//class1.end

//////////////////////////////////////

类方形扩展画布

{//class2

字符标记;

公共广场()

{

调整大小(30,30);

}

///////////结束

公共空设置标记(char c)

{

mark = c;

}

///////////结束

公共空白油漆(图形g)

{

g.drawRect(0,0,29,29);

g . drawstring(string . value of(mark),11,20);

}

}//class2.end

//& lt;applet code = " tictactoeclient . class " width = 275 height = 300 & gt;& lt/applet & gt;

服务器端:

导入Java . awt . *;

导入Java . net . *;

导入Java . io . *;

公共类TicTacToeServer扩展框架

{//class1

私有字节板[];

私有布尔xMove

私有TextArea输出;

私人玩家玩家[];

私有服务器套接字服务器;

private int numberofplayers

私有int currentplayer

公共TicTacToeServer()

{

超级(“三子棋牌服务器”);

board =新字节[9];

xMove = true

玩家=新玩家[2];

current player = 0;

尝试{

server=new ServerSocket(5000,2);

}

catch(IOException e){

//e . printstackrace();

system . exit(1);

}

output = new TextArea();

output . set background(color . yellow);

add(“居中”,输出);

调整大小(300,300);

show();

toolkit TP = toolkit . getdefaulttoolkit();

image logo = TP . getimage(" 1 . gif ");

seticon image(logo);

setResizable(false);

}

///////////结束

public void execute()

{

for(int I = 0;我& lt球员.长度;i++)

{

尝试{

players[I]=新玩家(server.accept(),this,I);

玩家[我]。start();

++ number of players;

}

catch(IOException e){

//e . printstackrace();

system . exit(1);

}

}

}

///////////结束

public int getNumberOfplayers()

{

返回numberofplayers

}

///////////结束

公共空显示(字符串s)

{

output . appendtext(s+" \ n ");

}

//////////结束

公共布尔validMove(int loc,int player)

{

布尔moveDone = false

而(玩家!=当前播放器)

{

尝试{

wait();

}

catch(interrupted exception e){//not

}

}

if(等积(loc))

{

board[loc]=(byte)(current player = = 0?x ':' o ');

current player = ++ current player % 2;

玩家[当前玩家]。other player moved(loc);

notify();

返回true

}

其他

返回false

}

///////////结束

公共布尔等积(int loc)

{

if(board[loc]= = ' x ' | | board[loc]= = ' o ')

返回true

其他

返回false

}

///////////结束

公共布尔handleEvent(事件事件)

{

if(event.id==Event。窗口_销毁)

{

hide();

dispose();

for(int I = 0;我& lt球员.长度;i++)

玩家[我]。stop();

system . exit(0);

}

返回super.handleEvent(事件);

}

///////////结束

公共布尔gameOver()

{

返回false

}

///////////结束

公共静态void main(String args[])

{

TicTacToeServer game = new TicTacToeServer();

game . execute();

}

}//class1.end

//////////////////////////////////////////////////下一节课

类播放器扩展线程

{//class2

插座连接;

DataInputStream输入;

DataOutputStream输出;

TicTacToeServer控件;

int数;

字符标记;

公共播放器(套接字s,TicTacToeServer t,int num)

{

mark=(num==0?x ':' o ');

connection = s;

尝试{

input = new data inputstream(connection . getinputstream());

output = new data output stream(connection . get output stream());

}

catch(IOException e){

//e . printstacktrale();

system . exit(1);

}

控制= t;

number = num

}

///////////结束

public void other player moved(int loc)

{

尝试{

output . write utf(" Opponet moved ");

output . write int(loc);

}

catch(IOException e){//not

}

}

///////////结束

公共无效运行()

{

布尔done = false

尝试{

control . display(" player "+(number = = 0?X': 'o')+"登录!");

output . write char(mark);

output . write utf(" player "+(number = = 0?“X降落!\n": "o要登录,请稍候!\ n "));

if(control . getnumberofplayers()& lt;2)

{

Output.writeUTF("请等待另一个玩家登录!");

while(control . getnumberofplayers()& lt;2);

Output.writeUTF("另一个玩家登录了!现在你可以下棋了!”);

}

而(!完成)

{

int location = input . readint();

if(control.validMove(location,number))

{

control . display(" loc "+location);

output.writeUTF("Valic move。");

}

其他

output.writeUTF("无效移动,重试");

if(control.gameOver())

{

done = true

}

connection . close();

}

}

catch(IOException e){

e . printstacktrace();

system . exit(1);

}

}

}//class.end