求哪位朋友提供一个Java小程序的源代码?谢谢你
导入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