课程设计(论文)任务书
软件 学院 软件工程+电子商务专业 20##-2 班
一、课程设计(论文)题目 多用户五子棋游戏
二、课程设计(论文)工作自 2009年 6月 15日起至 2009年 6月 19 日止。
三、课程设计(论文) 地点: 创新大楼310
四、课程设计(论文)内容要求:
1.本课程设计的目的
(1)通过课程设计把课堂上讲的内容融会贯通,学会设计程序、开发应用软件、开发系统软件等各项工作。
(2)通过实习掌握语言的语法结构,理解类和对象的概念,准确的使用各种数据类型,对面向对象中的继承和多态的概念要理解、会使用,在程序中提高代码的重用性,使设计的程序结构清晰、易于维护。
2.课程设计的任务及要求
1)基本要求:
实现一个简单的多用户五子棋的游戏程序,包括如下两个界面
(1)选择对弈桌及角色(执黑、执白、观看)。
(2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负);发言及显示区;用户列表区;棋盘绘制区。
2)创新要求:
在基本要求达到后,可进行创新设计,如改善算法性能、友好的人机界面。
3)课程设计论文编写要求
(1)要按照书稿的规格打印与写课程设计论文
(2)论文包括目录、设计思路、具体实现、运行调试与分析讨论、设计体会与小结、参考文献、附录(源代码)等
(3)课程设计论文装订按学校的统一要求完成
4)答辩与评分标准:
(1)完成基本算法设计:20分;
(2)完成设计过程 :40分;
(3)完成调试:20分;
(4)回答问题:20分。
5)参考文献:
[1]吴其庆编著.Java程序设计实例教程.北京:冶金工业出版社
[2] 柳西玲.许斌编著.Java语言应用开发基础.北京:清华大学出版社
[3] (美)CayS.Horsttmann Gary Cornell JAVA核心技术卷i:基础知识(原书第七版):机械工业出版社
[4]丁振凡 Java 语言实用教程 :北京邮电大学出版社
[5]http://csdn.net
6)课程设计进度安排
内容 天数 地点
构思及收集资料 1 图书馆
编码与调试 2.5 实验室
撰写论文 1.5 图书馆、实验室
学生签名:
20##年6 月 15 日
课程设计(论文)评审意见
(1)完成基本算法(20分):优( )、良( )、中( )、一般( )、差( );
(2)完成调试 (20分):优( )、良( )、中( )、一般( )、差( );
(3)创新设计 (20分):优( )、良( )、中( )、一般( )、差( );
(4)设计分析 (20分):优( )、良( )、中( )、一般( )、差( );
(5)回答问题 (20分):优( )、良( )、中( )、一般( )、差( );
(6)格式规范性及考勤是否降等级:是(ü)、否( )
评阅人: 职称:
20##年 6月 21 日
目录
绪论................................................. 1
一、题目内容及要求.................................... 2
二 、设计思路 ........................................ 2
三 、具体实现 ........................................ 5
四 、测试结果 ....................................... 15
五、 设计体会与小结 ................................. 19
六、参考文献 .... ................................... 20
附录 .... .......................................... 20
绪论
Java是由美国的sun microsystems 公司发展出来的一套面向对象程序语言,因为它的面向对象,分散运算,跨平台等等特性,又支持多线程。使得许多用过的人都爱不释手。
Java既是一种程序设计语言,也是一个完整的平台。作为一种程序语言,它简洁、面向对象、安全、健壮,以及适用于Internet技术;而作为一个平台(JRE,Java Runtime Environment,Java运行环境或者说是Java虚拟机),对于符合Sun公司Java标准的应用程序,都可以在Java平台上正确运行,与程序运行的操作系统无关。
Java发展到今天,已从编程语言发展成为全球第一大通用开发平台。Java技术已被计算机行业主要公司所采纳。1999年,Sun公司推出了以Java2平台为核心的J2EE、J2SE和J2ME三大平台。随着三大平台的迅速推进,全球形成了一股巨大的Java应用浪潮。
这个五子棋游戏正是用这个平台做的,在实践中充分体现出了Java面向对象给我们带来的方便。多用户聊天程序也让我体会到了Java多线程的强大功能。
一 题目内容及要求
要求实现一个简单的多用户五子棋胡游戏程序,包括如下两个界面:
(1)选择对弈桌及角色(执黑、执白、观看)。
(2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负);发言及显示区;用户列表区;棋盘绘制区。
二 设计思路
2.1工作原理图
2.2功能的规划
1.建立一个棋盘类,绘制棋盘的样式,在棋盘面板上添加各种按钮及相应胡触发事件。同时注意面板的设计,使面板设计的尽量胡的合理美观。
a.棋盘的绘制
publicvoid draw_qipan(Graphics G) //画棋盘 15*15{
G.setColor(Color.lightGray);
G.fill3DRect(10,10,300,300,true);
G.setColor(Color.black);
for(int i=1;i<16;i++){
G.drawLine(20,20*i,300,20*i);
G.drawLine(20*i,20,20*i,300);
}
}
b.添加按钮与按钮胡规划
Button b1=new Button("开始");
Button b2=new Button("重置游戏");
Label lblWin=new Label(" ");
Checkbox ckbHB[]=new Checkbox[3];
Button exist = new Button("退出");
publicvoid init(){
ckbHB[0]=new Checkbox("执白",ckgHB,false);
ckbHB[1]=new Checkbox("执黑",ckgHB,false);
ckbHB[2]=new Checkbox("观看",ckgHB, false);
}
C.鼠标棋子胡相应触发事件
publicvoid mouseClicked(MouseEvent e) {
Graphics g=getGraphics();
int x1,y1;
x1=e.getX();
y1=e.getY();
if (e.getX()<20 || e.getX()>300 || e.getY()<20 || e.getY()>300) {
return;
}
if (x1%20>10) {
x1+=10;
}
if(y1%20>10) {
y1+=10;
}
x1=x1/20*20;
y1=y1/20*20;
set_Qizi(x1,y1);
m*=(-1);
}
d.按钮的触发事件
public void actionPerformed(ActionEvent e) {
Graphics g=getGraphics();
if (e.getSource()==b1) {
Game_start();
}
else{
Game_re();
}
if(e.getSource()==exist){
Game_re();
lblWin.setText(Get_qizi_color(color_Qizi)+"输了!");
intGame_Start=0;
}
2.编写一个功能判断落子的位置及画出相应的黑白棋子
public void set_Qizi(int x,int y) //落子{
if (intGame_Start==0) //判断游戏未开始{
return;
}
if (intGame_Body[x/20][y/20]!=0) {
return;
}
Graphics g=getGraphics();
if (color_Qizi==1)//判断黑子还是白子{
g.setColor(Color.black);
color_Qizi=0;
}
else{
g.setColor(Color.white);
color_Qizi=1;
}
g.fillOval(x-10,y-10,20,20);
intGame_Body[x/20][y/20]=color_Qizi+1;
}
3.判断胜负
if (Game_win_1(x/20,y/20)) //判断输赢1{
lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");
intGame_Start=0;
}
if (Game_win_2(x/20,y/20)) //判断输赢2{
lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");
intGame_Start=0;
}
if (Game_win_3(x/20,y/20)) //判断输赢3{
lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");
intGame_Start=0;
}
if (Game_win_4(x/20,y/20)) //判断输赢4{
lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");
intGame_Start=0;
} }
4.添加用户聊天功能
NetchatClient chat=new NetchatClient();
chat.frame();
chat.setVisible(true);
三 具体实现
3.1创建棋盘类
Public class WcyChess extends Applet implements ActionListener,MouseListener,MouseMotionListener,ItemListener{
int color_Qizi=0;//旗子的颜色标识 0:白子 1:黑子
int intGame_Start=0;//游戏开始标志 0未开始 1游戏中
int intGame_Body[][]=new int[16][16]; //设置棋盘棋子状态
int m=-1;
Button b1=new Button("开始");
Button b2=new Button("重置游戏");
Label lblWin=new Label(" ");
Checkbox ckbHB[]=new Checkbox[3];
Button exist = new Button("退出");
CheckboxGroup ckgHB=new CheckboxGroup();
NetchatClient chat=new NetchatClient();
public void init(){
setLayout(null);
addMouseListener(this);
add(b1);
b1.setBounds(330,50,80,30);
b1.addActionListener(this);
add(b2);
b2.setBounds(330,90,80,30);
b2.addActionListener(this);
ckbHB[0]=new Checkbox("执白",ckgHB,false);
ckbHB[0].setBounds(320,20,60,30);
ckbHB[1]=new Checkbox("执黑",ckgHB,false);
ckbHB[1].setBounds(380,20,60,30);
ckbHB[2]=new Checkbox("观看",ckgHB, false);
add(ckbHB[0]);
add(ckbHB[1]);
add(ckbHB[2]);
ckbHB[0].addItemListener(this);
ckbHB[1].addItemListener(this);
add(lblWin);
lblWin.setBounds(330,180,80,30);
lblWin.setBackground(Color.red);
lblWin.setText("胜利者!");//没有显示?
ckbHB[2].setBounds(440, 20,60, 30);
add(exist);
exist.setBounds(330,130,80,30);
exist.addActionListener(this);
// add(chat);chat.setBounds(20, 500, 300, 300);
chat.frame();
chat.setVisible(true);
Game_start_csh();
setSize(500,600);
setVisible(true);
}
public void itemStateChanged(ItemEvent e) {
if (ckbHB[0].getState()) //选择黑子还是白子{
color_Qizi=0;
}
else{
color_Qizi=1;
}
}
public void mousePressed(MouseEvent e){}
public void mouseClicked(MouseEvent e) {
Graphics g=getGraphics();
int x1,y1;
x1=e.getX();
y1=e.getY();
if (e.getX()<20 || e.getX()>300 || e.getY()<20 || e.getY()>300) {
return;
}
if (x1%20>10) {
x1+=10;
}
if(y1%20>10) {
y1+=10;
}
x1=x1/20*20;
y1=y1/20*20;
set_Qizi(x1,y1);
m*=(-1);
}
public void actionPerformed(ActionEvent e) {
Graphics g=getGraphics();
if (e.getSource()==b1) {
Game_start();
}
else {
Game_re();
}
if(e.getSource()==exist){
Game_re();
lblWin.setText(Get_qizi_color(color_Qizi)+"输了!");
intGame_Start=0;
}
}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
public void mouseDragged(MouseEvent e){}
public void mouseMoved(MouseEvent e){}
public void paint(Graphics g) {
draw_qipan(g);
}
3.2判断输赢功能实现
if (Game_win_1(x/20,y/20)){ //判断输赢1
lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");
intGame_Start=0;
}
if (Game_win_2(x/20,y/20)){ //判断输赢2
lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");
intGame_Start=0;
}
if (Game_win_3(x/20,y/20)) //判断输赢3{
lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");
intGame_Start=0;
}
if (Game_win_4(x/20,y/20)) //判断输赢4{
lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");
intGame_Start=0;
}
//判断输赢程序实现在详细过程
publicboolean Game_win_1(int x,int y){ //横向判断输赢
int x1,y1,t=1;
x1=x;
y1=y;
for (int i=1;i<5 ;i++ ) {
if (x1>15) {
break;
}
if (intGame_Body[x1+i][y1]==intGame_Body[x][y]) {
t+=1;
}
else{
break;
}
}
for (int i=1;i<5 ;i++ ){
if (x1<1)
break;
}
if(intGame_Body[x1-i][y1]==intGame_Body[x][y])
t+=1;
}
else{
break;
}
}
if (t>4){
returntrue;
}
else{
returnfalse;
}
}
publicboolean Game_win_2(int x,int y) { //纵向判断输赢
int x1,y1,t=1;
x1=x;
y1=y;
for (int i=1;i<5 ;i++ ){
if (x1>15){
break;
}
if (intGame_Body[x1][y1+i]==intGame_Body[x][y]){
t+=1;
}
else{
break;
}
}
for (int i=1;i<5 ;i++ ){
if (x1<1){
break;
}
if(intGame_Body[x1][y1-i]==intGame_Body[x][y]){
t+=1;
}
else{
break;
}
}
if (t>4){
returntrue;
}
else{
returnfalse;
}
}
publicboolean Game_win_3(int x,int y) //左斜判断输赢{
int x1,y1,t=1;
x1=x;
y1=y;
for (int i=1;i<5 ;i++ ){
if (x1>15){
break;
}
if (intGame_Body[x1+i][y1-i]==intGame_Body[x][y]){
t+=1;
}
else{
break;
}
}
for (int i=1;i<5 ;i++ ){
if (x1<1){
break;
}
if(intGame_Body[x1-i][y1+i]==intGame_Body[x][y]){
t+=1;
}
else{
break;
}
}
if (t>4){
returntrue;
}
else{
returnfalse;
}}
publicboolean Game_win_4(int x,int y) { //左斜判断输赢
int x1,y1,t=1;
x1=x;
y1=y;
for (int i=1;i<5 ;i++ ) {
if (x1>15) {
break;
}
if (intGame_Body[x1+i][y1+i]==intGame_Body[x][y]) {
t+=1;
}
else
{
break;
}
}
for (int i=1;i<5 ;i++ ) {
if (x1<1) {
break;
}
if(intGame_Body[x1-i][y1-i]==intGame_Body[x][y]) {
t+=1;
}
else{
break; } }
if (t>4) {
returntrue;
}
else{
returnfalse;
}
}
3.3实现聊天功能类
package NetchatClient;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import javax.swing.*;
public class NetchatClient extends Frame {
Frame x=new Frame("liaotianchengxu");
TextField tf=new TextField();
TextArea ta=new TextArea();
Socket s=null;
DataOutputStream dos=null;
public static void main(String[] args) {
new NetchatClient().frame();
}
public void frame(){
System.out.println("frame()");
setLocation(20, 400);
setSize(300,300);
add(tf,BorderLayout.SOUTH);
add(ta,BorderLayout.NORTH);
pack();
setVisible(true);
connect();
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent arg0) {
cconnect();
System.exit(0);
}
});
addWindowListener
(new WindowAdapter()//窗口适配器 {
public void windowClosing(WindowEvent e)
{
System.exit(0);//程序退出
} } );
tf.addActionListener(new nclistener());
}
public void connect() {
System.out.println("connnect()..");
try {
s=new Socket("127.0.0.1",8888);//设置客户 端的IP和端口
dos=new DataOutputStream(s.getOutputStream());
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}}
public void cconnect(){
try {
dos.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
} }
public class nclistener implements ActionListener{
public void actionPerformed(ActionEvent e) {
String st=tf.getText();
ta.setText(st);
tf.setText("");
try {
dos.writeUTF(st);
dos.flush();
} catch (IOException e1) {
e1.printStackTrace();
} } } }
四 测试结果
4.1 进入游戏的界面
分析:游戏开始的界面有三个选择项,用户可以选择相应的角色,选择
完毕后点击开始进入游戏。用户也可以在下面的聊天框中进行聊天。
4.2选择角色,点击开始,开始下棋
分析:首先达到五个棋子连在一块的赢了,并在红色区域显示谁赢了!
4.3下完后点击重新开始
分析:下完一盘后游戏停止,点击重新开始,界面回到初始界面,选择角色继续游戏.
4.4游戏过程中退出,自动判输
分析:在下棋的过程当中谁中途退出,即点击退出,系统自动判断谁输
4.5改进想法
这个系统基本上实现了要求但是在有些方面还不够完善。
1.观看角色点击后不会出发什么事件,虽然观看者并不需要做什么但是点击之后并没有发生任何反应总感觉缺点什么。想加个什么功能,但是又不知道加什么才不至于画蛇添足。
2.问题比较大的可能是聊天功能了,本来聊天面板应该和棋盘面板在同一个面板上面,但是聊天功能的程序是写在了另一个类里,并且那个类是继承了Frame类的,是一个Application程序,而棋盘是一个Applet程序,所以当我添加这个类到Applet面板上并不能显示 ,所以我就打包那个NetchatClient 类,在棋盘类中加载这个类,并调用该类的方法才实现了聊天功能。
3.聊天功能本身也还不够完善,因为每次发送聊天的内容后都会覆盖掉原来的内容,这使得用户不能很直观的看到聊天的内容。但是在修改的过程中出现了许多的问题,所以也就将就者先用了。
五 设计体会与小结
这个课设题对我来说有一定的挑战性,因为我自己也不知道自己到底学到了一个什么样的境界。但可以肯定,这个课设题的要求绝对在我的能力范围以上。之所以选择这个题目是想逼着自己去查更多的资料,学到更多的东西。
结果也确实是这样的,我在这次课设中学到了不少东西,也理解了许多原来不理解的东西。尽管这个系统做的并不是那么的完善。
对于Java中的引用,初始化类等,开始我并不是非常的理解,知道就这么做就能实现相应的功能了,并没有很深刻的去理解它为什么要这么做。但是真正的要用Java去做一个东西不理解它是不行的,而且其间这课设涉及到了Java 中的绝大多数的知识点,如Java图形用户界面设计、Java的异常处理机制、Java中的多线程程序设计、Java输入输出流,要应用这些东西更要求我去好好理解Java的这些规则。
好在有一定的C++基础Java 与C++语法类似,并把C++中一些较低级和较难以理解的功能都去掉了,如多继承、指针等,同时Java增强了部分功能。所以理解起来也比较容易。
但是理解了Java的规则要把这个课设做好也不是那么容易,最难的部分是如何实现各个功能的划分和类的通讯问题。我在这方面就遇到了不少的问题。
总结这次课设,我还是收获不少。虽然界面也不是很美观,有点功能间的连接做的也不是特别的好,但是我能认识到自己的不足,并且在跟同学的交流中也学到了一些他们的设计思路,也知道今后要加强哪些方面的知识。
六 参考文献
1. 吴其庆编著.Java程序设计实例教程.北京:冶金工业出版社
2. 柳西玲.许斌编著.Java语言应用开发基础.北京:清华大学出版社
3. (美)CayS.Horsttmann Gary Cornell JAVA核心技术卷i:基础知识(原书第七版):
机械工业出版社
4.丁振凡 Java 语言实用教程 :北京邮电大学出版社
5.http://csdn.net
附录 (源代码)
1.WcyChess.java
/******************************************
实现一个简单的多用户五子棋的游戏程序,包括如下两个界面
(1)选择对弈桌及角色(执黑、执白、观看)。
(2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负);
发言及显示区;用户列表区;棋盘绘制区。
*********************************************/
import java.net.*;
import java.io.*;
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
import java.awt.Color;
import NetchatClient.*;
public class WcyChess extends Applet implements ActionListener,MouseListener,MouseMotionListener,ItemListener{
int color_Qizi=0;//旗子的颜色标识 0:白子 1:黑子
int intGame_Start=0;//游戏开始标志 0未开始 1游戏中
int intGame_Body[][]=new int[16][16]; //设置棋盘棋子状态
int m=-1;
Button b1=new Button("开始");
Button b2=new Button("重置游戏");
Label lblWin=new Label(" ");
Checkbox ckbHB[]=new Checkbox[3];
Button exist = new Button("退出");
CheckboxGroup ckgHB=new CheckboxGroup();
NetchatClient chat=new NetchatClient();
public void init(){
setLayout(null);
addMouseListener(this);
add(b1);
b1.setBounds(330,50,80,30);
b1.addActionListener(this);
add(b2);
b2.setBounds(330,90,80,30);
b2.addActionListener(this);
ckbHB[0]=new Checkbox("执白",ckgHB,false);
ckbHB[0].setBounds(320,20,60,30);
ckbHB[1]=new Checkbox("执黑",ckgHB,false);
ckbHB[1].setBounds(380,20,60,30);
ckbHB[2]=new Checkbox("观看",ckgHB, false);
add(ckbHB[0]);
add(ckbHB[1]);
add(ckbHB[2]);
ckbHB[0].addItemListener(this);
ckbHB[1].addItemListener(this);
add(lblWin);
lblWin.setBounds(330,180,80,30);
lblWin.setBackground(Color.red);
lblWin.setText("胜利者!");//没有显示?
ckbHB[2].setBounds(440, 20,60, 30);
add(exist);
exist.setBounds(330,130,80,30);
exist.addActionListener(this);
// add(chat);chat.setBounds(20, 500, 300, 300);
chat.frame();
chat.setVisible(true);
Game_start_csh();
setSize(500,600);
setVisible(true);
}
public void itemStateChanged(ItemEvent e){
if (ckbHB[0].getState()) //选择黑子还是白子
{
color_Qizi=0;
}
else
{
color_Qizi=1;
}
}
public void mousePressed(MouseEvent e){}
public void mouseClicked(MouseEvent e){
Graphics g=getGraphics();
int x1,y1;
x1=e.getX();
y1=e.getY();
if (e.getX()<20 || e.getX()>300 || e.getY()<20 || e.getY()>300){
return;
}
if (x1%20>10){
x1+=10;
}
if(y1%20>10){
y1+=10;
}
x1=x1/20*20;
y1=y1/20*20;
set_Qizi(x1,y1);
m*=(-1);
}
public void actionPerformed(ActionEvent e){
Graphics g=getGraphics();
if (e.getSource()==b1){
Game_start();
}
else{
Game_re();
}
if(e.getSource()==exist){
Game_re();
// color_Qizi=m;
lblWin.setText(Get_qizi_color(color_Qizi)+"输了!");
intGame_Start=0;
}
}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
public void mouseDragged(MouseEvent e){}
public void mouseMoved(MouseEvent e){}
public void paint(Graphics g){
draw_qipan(g);
}
public void set_Qizi(int x,int y){ //落子
if (intGame_Start==0) {//判断游戏未开始
return;
}
if (intGame_Body[x/20][y/20]!=0){
return;
}
Graphics g=getGraphics();
if (color_Qizi==1){//判断黑子还是白子
g.setColor(Color.black);
color_Qizi=0;
}
else{
g.setColor(Color.white);
color_Qizi=1;
}
g.fillOval(x-10,y-10,20,20);
intGame_Body[x/20][y/20]=color_Qizi+1;
if (Game_win_1(x/20,y/20)){ //判断输赢1
lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");
intGame_Start=0;
}
if (Game_win_2(x/20,y/20)){ //判断输赢2{
lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");
intGame_Start=0;
}
if (Game_win_3(x/20,y/20)){ //判断输赢3
lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");
intGame_Start=0;
}
if (Game_win_4(x/20,y/20)){ //判断输赢4
lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");
intGame_Start=0;
}
}
public String Get_qizi_color(int x)
{
if (x==0)
{
return "黑子";
}
else
{
return "白子";
}
}
public void draw_qipan(Graphics G){ //画棋盘 15*15
G.setColor(Color.lightGray);
G.fill3DRect(10,10,300,300,true);
G.setColor(Color.black);
for(int i=1;i<16;i++){
G.drawLine(20,20*i,300,20*i);
G.drawLine(20*i,20,20*i,300);
}
}
public void Game_start(){ //游戏开始
intGame_Start=1;
Game_btn_enable(false);
b2.setEnabled(true);
}
public void Game_start_csh() {//游戏开始初始化
intGame_Start=0;
Game_btn_enable(true);
b2.setEnabled(false);
ckbHB[0].setState(true);
for (int i=0;i<16 ;i++ ){
for (int j=0;j<16 ;j++ ){
intGame_Body[i][j]=0;
}
}
lblWin.setText("");
}
public void Game_re(){ //重新开始游戏
repaint();
Game_start_csh();
}
public void Game_btn_enable(boolean e){ //设置组件状态
b1.setEnabled(e);
b2.setEnabled(e);
ckbHB[0].setEnabled(e);
ckbHB[1].setEnabled(e);
}
public boolean Game_win_1(int x,int y){ //横向判断输赢
int x1,y1,t=1;
x1=x;
y1=y;
for (int i=1;i<5 ;i++ ){
if (x1>15){
break;
}
if (intGame_Body[x1+i][y1]==intGame_Body[x][y]){
t+=1;
}
else{
break;
}
}
for (int i=1;i<5 ;i++ ){
if (x1<1){
break;
}
if(intGame_Body[x1-i][y1]==intGame_Body[x][y]){
t+=1;
}
else{
break;
}
}
if (t>4){
return true;
}
else{
return false;
}
}
public boolean Game_win_2(int x,int y){ //纵向判断输赢
int x1,y1,t=1;
x1=x;
y1=y;
for (int i=1;i<5 ;i++ ){
if (x1>15){
break;
}
if (intGame_Body[x1][y1+i]==intGame_Body[x][y]){
t+=1;
}
else{
break;
}
}
for (int i=1;i<5 ;i++ ){
if (x1<1){
break;
}
if(intGame_Body[x1][y1-i]==intGame_Body[x][y]){
t+=1;
}
else{
break;
}
}
if (t>4){
return true;
}
else{
return false;
}
}
public boolean Game_win_3(int x,int y){ //左斜判断输赢
int x1,y1,t=1;
x1=x;
y1=y;
for (int i=1;i<5 ;i++ ){
if (x1>15){
break;
}
if (intGame_Body[x1+i][y1-i]==intGame_Body[x][y]){
t+=1;
}
else{
break;
}
}
for (int i=1;i<5 ;i++ ){
if (x1<1){
break;
}
if(intGame_Body[x1-i][y1+i]==intGame_Body[x][y]){
t+=1;
}
else{
break;
}
}
if (t>4){
return true;
}
else{
return false;
}
}
public boolean Game_win_4(int x,int y){ //左斜判断输赢
int x1,y1,t=1;
x1=x;
y1=y;
for (int i=1;i<5 ;i++ ){
if (x1>15){
break;
}
if (intGame_Body[x1+i][y1+i]==intGame_Body[x][y]){
t+=1;
}
else{
break;
}
}
for (int i=1;i<5 ;i++ ){
if (x1<1){
break;
}
if(intGame_Body[x1-i][y1-i]==intGame_Body[x][y]){
t+=1;
}
else{
break;
}
}
if (t>4){
return true;
}
else{
return false;
}
}
}
2. NetchatClient.java
package NetchatClient;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import javax.swing.*;
public class NetchatClient extends Frame {
Frame x=new Frame("liaotianchengxu");
TextField tf=new TextField();
TextArea ta=new TextArea();
Socket s=null;
DataOutputStream dos=null;
public static void main(String[] args) {
new NetchatClient().frame();
}
public void frame(){
System.out.println("frame()");
setLocation(20, 400);
setSize(300,300);
add(tf,BorderLayout.SOUTH);
add(ta,BorderLayout.NORTH);
pack();
setVisible(true);
connect();
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent arg0) {
cconnect();
System.exit(0);
}
});
addWindowListener
(new WindowAdapter()//窗口适配器
{
public void windowClosing(WindowEvent e){
System.exit(0);//程序退出
}
}
);
tf.addActionListener(new nclistener());
}
public void connect(){
System.out.println("connnect()..");
try {
s=new Socket("127.0.0.1",8888);//设置客户 端的IP和端口
dos=new DataOutputStream(s.getOutputStream());
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void cconnect() {
try {
dos.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public class nclistener implements ActionListener{
public void actionPerformed(ActionEvent e) {
String st=tf.getText();
ta.setText(st);
tf.setText("");
try {
dos.writeUTF(st);
dos.flush();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}