五子棋JAVA语言课程设计报告

2025-03-19 版权声明 我要投稿

五子棋JAVA语言课程设计报告(精选7篇)

五子棋JAVA语言课程设计报告 篇1

课程设计报告

学 院: 信息科学技术学院 班 级: 软件技术2班 姓 名: 王更新 学 号: 1108900505 指导教师: 郭韶升 课设时间: 2014-03-17 至2014-03-26

二O一四 年 三月 二十六 日

目 录

一、设计要求…………………………………………....2

二、设计步骤…………………………………………....2 2.1程序流程图………………………….…………...2 2.2程序的功能分配……………………….………...3

三、设计正文…………………………………………....6 3.1创建棋盘类……………………………………….6 3.2判断输赢功能实现……………………………….9 3.3测试结果……………………………………….....9

四、心得体会…………………………………………...12

五、参考文献…………………………………………...12 附录(源代码)……………………………………….13

一、课程设计要求

设计一个15╳15围棋棋盘,由两玩家交替进行对战,并可以实现以下功能: 1.选择落子的先后顺序 2.重置棋盘 3.刷新重新开始 4.退出提示

并且规定退出者判为负,但退出过程中要有提示。以防不小心点错了。最后判断某一方是否为五子连珠。

实现一个简单的多用户五子棋的游戏程序,包括如下两个界面(1)选择对弈桌(执黑、执白)。

(2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负);

二、设计步骤

2.1程序流程图

2.2 程序的功能分配

a.棋盘的绘制

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);

} } b.添加按钮

Button b1=new Button(“开始”);Button b2=new Button(“重置游戏”);Label lblWin=new Label(“ ”);Checkbox ckbHB[]=new Checkbox[3];Button exist = new Button(“退出”);public void init(){

ckbHB[0]=new Checkbox(“执白”,ckgHB,false);

ckbHB[1]=new Checkbox(“执黑”,ckgHB,false);

ckbHB[2]=new Checkbox(“观看”,ckgHB, false);}

c.鼠标棋子的触发事件

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);}

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;

}

e.判断落子的位置及画出相应的黑白棋子 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;}

f.判断胜负

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;} }

三、设计正文

3.1创建棋盘类

Public class WcyChess extends Applet 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);

implements

//

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;}

3.3 测试结果

a.进入游戏界面

游戏开始的界面有三个选择项,用户可以选择相应的角色,选择 完毕后点击开始进入游戏。

b.选择角色,开始下棋

首先达到五个棋子连在一块的赢了,并在红色区域显示谁赢了!c.下完后,重新开始

下完一盘后游戏停止,点击重新开始,界面回到初始界面,选择角色继续游戏.d.游戏中点退出,自动判输

在下棋的过程当中谁中途退出,即点击退出,系统自动判断谁输

四、课程设计心得体会

通过此次课程设计,将我本学期所学的JAVA知识得到巩固和应用,在设计的过程中我遇到了很到问题,不过在老师和同学们的帮助和自己的思考下还是很好的完成了。这此课程设计还让我懂得了写程序不能闭门造车,要努力拓宽知识面,开阔视野,拓展思维。它还让我学会了在网上查阅那些无限的资料。由于自己的分析设计和程序经验不足,该系统设计和实现过程中,还有许多没有完善的地方,比如用户界面设计不够美观,异常出错处理比较差等多方面问题,这些都有待进一步完善和提高。对于文中出现的不足和系统中出现的问题敬请老师指导。

五、参考文献

1.吴其庆编著.Java程序设计实例教程.北京:冶金工业出版社 2.柳西玲.许斌编著.Java语言应用开发基础.北京:清华大学出版社 3.丁振凡 Java 语言实用教程 :北京邮电大学出版社

附录(源代码)

import java.net.*;import java.io.*;import java.applet.*;import java.awt.*;import java.awt.event.*;import java.applet.Applet;import java.awt.Color;Public class wuziqi 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();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);

e.getY()<20 || e.getY()>300){

lblWin.setText(“胜利者!”);//没有显示?

ckbHB[2].setBounds(440, 20,60, 30);add(exist);

exist.setBounds(330,130,80,30);exist.addActionListener(this);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 ||

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;

了!“);

赢了!”);

赢了!“);

15*15

}

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){ //画棋盘 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){){

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;

}

break;

}

if(intGame_Body[x1-i][y1]==intGame_Body[x][y]

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;

} } }

五子棋JAVA语言课程设计报告 篇2

1.1 多种教学手段相结合

多媒体教学有利于学生实时地、直观地观察到程序的运行结果和理解问题;而良好的多媒体课件, 可以使学生更容易抓住课程的重点, 在计算机教学中亦是如此, 因此, 多媒体适合Java语言程序设计课程的课堂教学, 大部分教师都会采用多媒体讲授本课程, 尤其是在讲授实例的时候, 多媒体手段更直观、方便。本文作者从事Java语言程序设计课程的教学工作多年, 在实践中多次与学生沟通, 发现学生对于多媒体教学方法并不完全接受, 有时候学生还出现对多媒体教学的抵触情绪, 这样不利于教学工作的开展。所以, 现代教学手段并不能取代传统的教学手段, 而应视具体的授课内容而定, 对于一些程序性的内容, 需要详解程序的原理、流程的, 多媒体授课不利于学生思维的跟进, 这样的内容还是应该在黑板上以板书的形式一步一步讲解, 才能达到更好的效果, 学生也认可这种方式, 这个时候就需要用传统的教学模式;而有些程序的实例和一些基本知识, 可以采用多媒体教学方法, 能更直观和生动地表达课程内容, 而且还可以增加课程的知识量。所以, 在实际教学中应注意多种教学手段相结合, 做到现代和传统的教学方法并用, 取长补短, 让学生学到所需的知识, 最终达到好的教学效果。

1.2 理论与应用相结合

软件开发企业需要大量基础的应用型人才, 而我们的教学的现状是“学”与“用”脱节, 导致学生为了“学”而学, 学到的知识无法尽快的应用到实际中, 出现了“有知识和学历却无法胜任岗位”的现象, 从而导致毕业生就业困难, 到了工作岗位难以胜任工作, 从而失去了高校教育的“学”是为了“用”的意义。本文从教师的课堂教学和学生的实践课两方面思考, 提出以下改进:

首先, 在课堂教学方面, 通过一些简单的实例, 向学生阐述了某种原理后, 学生会对原理有一定的了解, 但也仅仅是记住了一条“死”的规则, 至于, 为什么会有这样的原理、为什么需要这样的原理、什么时候会用到这也的原理不能理解, 因此, 还需要把原理性的内容扩展到应用层面上, 着力阐述原理的实际意义。例如, 在讲述Java关于内隐类 (也翻译作内部类) 的原理时, 通过简单的例子, 学生知道在Java中“内隐类的对象是由外围类对象来创建的”等基本规则后, 列举链表类与节点类之间的关系来说明内隐类的思想是与客观实际相符的;进一步可以出这样的一个题目:有如下两个接口I1和I2, 要求定义一个类A可以同时实现这两个接口。

由于I1和I2中的f () 函数存在冲突, 所以这样的要求是无法直接实现的。但是, 可以通过内隐类及类的组合的知识变相的实现:

显然, 利用内隐类可以解决这样的名称冲突问题;再进一步, Java中不支持多继承, 但可以通过内隐类来变相的实现多继承, 可举如下例子:

类D1利用了无名内隐类、类的组合, 变相的继承了B1、B2这两个类。至此, 学生对内隐类的意义有了更深入的认识, 不再局限于简单的语法规则上, 达到了学以致用的目的。关于内隐类的内容, 在Java语言程序设计课程中属于难点, 经过教师用这种教学方法的讲解, 大部分学生都能理解并掌握了内隐类的用法的精髓, 而不是仅仅记住了一条语法规则而已。

其次, 在教学过程中, 应侧重于培养学生利用面向对象的思想解决实际问题的能力。许多学生在学习基本理论知识后, 并不能很好的把面向对象的思想融入到实际问题中去, 表现在:不能根据需求抽象出合理的用户类;不能很好的处理类与类之间的关系;还有一部分人仍然用面向过程的思想解决问题, 有些学生定义类, 只是为了使用其中的主函数。根据这种情况, 在实践环节, 做出以下改革:

(1) 打破传统的“教师讲学生听而不动”的教学模式, 改变传统的“实践教学的实验内容与实际项目脱节”的教学内容, 采用实例教学方式, 把理论知识融于项目实例中, 让学生自己思考问题的解决办法, 在解决问题的过程中培养学生的开发实际项目的经验, 以提高学生的软件开发的能力。

(2) 在实验课的教学中, 教师与软件公司合作, 使用软件开发公司的一个实际的项目作为案例, 通过对项目的改造和精心设计, 使之每个功能模块能循序渐进地表达知识点, 用在学生的实验课中。把功能细化为多个有针对性的小规模的案例, 融进该堂课的知识点。在实验课中, 先给学生介绍该小规模的案例的实际需求, 让学生独立分析用户的需求, 然后让学生自己寻找解决问题的办法, 引导学生用学过的面向对象的知识解决问题。在这个过程中, 学生自己设计解决问题的方案, 并最终给出具体的实现办法和程序代码。如果学生遇到问题, 教师只是给出指导意见, 尽量让学生独立思考和解决问题, 并培养学生的实际项目的开发能力, 提高学生的动手能力, 形成"教师提出问题学生思考并动手解决问题"的教学模式。实践证明, 这种教学方法有很好的教学效果。

1.3 慎用对比的教学方法

有些高校的Java语言程序设计课程在C++程序设计之后开设, 也有很多高校直接把Java语言程序设计作为面向对象的入门语言, Java在基本语法、面向对象的机制上与C++既有许多相似, 也有许多不同。因此, 在Java课程教学中教师往往会采用对比的教学方法, 这样的对比应视学生的情况而定。如果学生对C++语言知识点掌握的熟练, 那么, 对比可以使学生更好地理解Java语言, 理解Java与C++语言的区别及各自的优缺点, 无论是对Java还是对C++都可以使学生的知识结构更加清晰明了。但是, 如果学生本身对C++, 语言并不是很熟练, 而在对比的过程中还要重新讲解大量C++的内容, 这样反而会使学生抓不住重点, 容易对一些相近内容造成混淆, 甚至造成整个知识结构的混乱。因此, 应慎用对比的教学方法。如果是上述的后一种情况, 在教学中, 就应当让学生主要先接受现有的知识, 当学生对新知识有了一定的理解后, 可以考虑在一些总结性的章节中进行对比, 这样会达到比较好的效果, 避免出现混淆两种语言的语法的情况。

2 教学内容的改革

2.1 实例简洁明了

很多Java课程的教材在阐述一些原理性内容时, 都会列举一些实例来说明问题, 这些实例大都命名规范、功能完整, 但比较繁杂, 学生对这样的实例不知从何入手, 抓不住重点, 注意力往往集中在一些无关紧要的细枝末节上, 有的看到后面忘了前面。在课堂教学中要避免列举此类型的实例, 而应选择结构清晰、功能简单, 能突出主要知识点的例子。在实际授课中, 由某一个简洁实用的实例出发, 遇到新的知识点, 就不断的改进同一个实例, 以说明新的问题。例如, 在讲解关于类的继承的原理时, 举例如下:

从这样一个简洁的例子出发, 根据新知识点的需要不断的添加新的内容, 来阐述新的理论, 做到教师的“教”和学生的“学”都循序渐进。

2.2 教学内容重点突出

在Java语言课程中, 教学内容的重点应放在基本语法、面向对象的机制上, 通过这门课程的学习, 让学生具有扎实的基本功, 为今后继续学习打下良好的基础。现在多数的Java教材、参考书中基本理论、基本知识的内容不足, 讲解不够详细;而将大量的篇幅放在了AWT或是SWING图形化的组件上, 这是极不合理的, 这些图形化的组件在内容上千篇一律, 无非是需要知道它们常用的方法, 所能识别的事件监听器, 因此, 完全可以只讲解一些典型的、常用的组件, 其它的可由学生自学完成。相比之下, 课程中关于类的一些基础知识、继承、重载、重写、多态、接口、内隐类等内容都渗透着最基本的面向对象的思想, 有些也是Java在面向对象机制中独具特色的内容, 对这些内容的深入理解、熟练掌握, 才能真正的提高学生的基本编程能力, 提高学生解决问题的能力, 提高学生对面向对象语言的运用能力。进而开阔学生的思维, 增强学生的创新能力。尤其是在以后的工作中, 更需要这种独立的、创新的解决问题的能力。否则, 在学生以后的深入学习和工作中会造成很大的障碍, 甚至连一些基本的代码都无法读懂。

2.3 注重培养学生的自学能力、自我解决问题的能力

教学中, 应该向学生讲述关于帮助文档的使用, 以便在平时学习遇到问题时, 可以不需请教老师, 自己解决;或是, 能够根据帮助文档自学新的知识, 提高学生独立解决问题的能力, 这会让学生在毕业后的工作中受益匪浅。无论在理论还是实验课上, 还要讲授一些调试程序的技巧, 丰富学生的调试经验, 这对提高学生的基本编程素质有很大的帮助。多数学生对于程序中语法错误能够自行解决, 但是, 对于逻辑错误往往不知如何下手, 这对以后的学习是不利的, 因此, 在实践环节中, 安排一些调试程序的内容是必要的。在授课过程中, 多给学生介绍几种方便使用的调试工具, 并讲授实用的调试技巧。

另外, 在教学内容上, 如果课程的计划学时充裕或者利用课外时间, 还应该适当的增加一些对Java体系结构、应用领域、核心技术、专有名词等应用性较强的内容的教学, 让学生受益于未来。

3 结束语

以上从教学方法和内容两方面提出了教学的改革措施, 主要针对高校的程序设计类的应用型课程, 并以Java语言程序设计课程为例进行阐述, 而理论较强或其它类型课程有待探讨。通过运用本文提出的改革的教学方法, 使学生既牢固地掌握了基础知识, 又能运用到实例项目中, 达到培养所需的应用型软件人才的目的。该文中提出的教学改革方法提高了学生的软件开发能力, 能尽快适应用人单位的需求, 提高毕业生的就业率。此教学改革方法已在大连水产学院计算机2006级学生中实施, 经调查反馈, 效果较好。

摘要:针对Java语言程序设计课程在教学过程中存在的一些问题, 提出理论和实践两方面的教学改革的建议, 旨在培养学生的独立编写软件的能力, 自己思考和创新的能力, 进而提高学生的就业竞争力。同时以大连水产学院计算机应用技术专业2006级学生为实践对象, 经实践证明, 该教学方法的效果比传统的教学方法有较大的提高。

关键词:教学方法,改革,计算机教学

参考文献

[1]张敏霞.程序设计语言课程教学方法改革的探索与实践[J].中国高教研究, 2004 (2) .

[2]刘昕, 徐荻秋, 郭惠玲.多媒体教学效果的问卷调查与分析[J].黑龙江教育 (高教研究与评估) , 2009 (6) .

[3][美]Bruce Eckel.Java编程思想 (第三版) [M].北京:机械工业出版社, 2005.

[4]李艳华.如何提高软件专业学生水平[J].中国科技信息, 2006 (6) .

五子棋JAVA语言课程设计报告 篇3

与传统的教学方法相比,项目教学法将问题或疑难情景融入真实发生的典型性事件中,一个项目即为一个实际情境的描述,学生在完成项目的过程中寻找解决问题的办法,掌握相关知识,并提高自身的综合素质。在JAVA语言程序设计课程中应用项目教学法,可有效提高学生的实践能力,激发学生的学习兴趣。文章针对JAVA语言程序设计中项目教学法的应用进行讨论与分析。

关键词:JAVA;项目教学法;课程教学

【分类号】TP312.1-4

项目教学法是以项目驱动为主的新型教学方法,在JAVA程序设计课程中应用项目教学法无疑是一种新的尝试,通过一个个项目实现教学与研究的有机融合,学生在项目的驱动下探索知识,提高能力,而老师则通过项目驱动对教学方法做出调整与创新,提升自身的教学能力。

一、项目教学法的内涵

所谓项目教学法是通过设计、实施一系列完整的项目促使学生在完成项目的同时提高能力、掌握知识的教学过程。与传统的教学方法相比,项目教学法充分尊重了学生的主体作用,老师选择适当的项目,学生通过分组合作学习的形式共同完成整个项目,在教学过程中老师处理主导地位,而学生则是学习的主体。现阶段很多高等院校都开设了JAVA课程,其应用面广、社会需求量大,但是需要学生通过学习具备独立解决问题的能力,真正做到学以致用。而在JAVA课程教学中融入项目教学法,老师可根据教材内容、学生的实际情况设计与本门课程密切相关的项目,充分激发学生的学习兴趣,在完成项目的过程中培养学生的学习能力,提高其职业素养与专业水平。通过JAVA课程的学习,学生要全面掌握面向对象编程语言的基本思想,为后续其它面向对象的语言打下坚实的基础。

二、项目教学法的实施过程

具体而言,项目教学法在JAVA教学过程中的实施过程包括以下几个阶段:

(一)三阶段组织教学

软件专业通常每学期均会开设一门程序设计语言课程,为了避免学生在学习过程中感到枯燥,或者产生学以致用的紧迫感,项目教学过程中可以将整个教学过程分为基础知识、应用实践及课程设计三个阶段,每个阶段以项目教学为核心选择不同的教学方法,尽量减少理论课程的讲解,增加实践课程,遵循“回避难点、注重实践”的原则。在JAVA课程教学过程中,基础知识阶段的教學重点主要是JAVA基本语法及面向对象编程思想的讲解。采用多媒体演示,并结合案例教学法,案例尽量选择一些与生活比较贴近、实用性与趣味性较强的例子,比如超市销售模拟程序,这些案例演示可视作整个教学大项目中的预热项目。

应用实践阶段主要包括JAVAGUI窗体设计与数据库编程。该阶段编程代码量大大增加,老师要充分结合学生的认知规律,按照界面设计、事件编程、数据库操作等顺序由浅入深进行讲解。该阶段的主要项目任务包括登录窗口设计、系统主界面设计、数据库查询等各应用知识点。该阶段的主要任务是通过与后续课程设计相似功能模块的训练提高学生举一反三、融会贯通的能力。

课程设计阶段则主要是实训部分,其主要作用是检验教学效果,提高学生的动手能力。课程设计尽量做到一人一题,或者一组一题,每个学习小组设计不同的项目,由学生一起合作、共同完成。学生进行课程设计过程中,老师可以随时讲解,对项目要点进行总结,学生在老师的指导下完成课程设计。

(二)学徒制实践教学

在完成JAVA理论课程后的课程设计阶段,可以采用学徒制进行实践教学,即指导学生尝试软件项目开发训练。该阶段要求学生对项目的全部功能要求深入理解,进行编码、测试,并搭建实际的运行环境,该阶段的主要目的是对学生所学知识予以巩固,积累更多的开发经验,形成初步的独立解决问题的能力与自主学习的能力。课程设计是检验老师课堂教学效果的重要途径,可在校实验室或校内实训室模拟企业的开发环境进行项目开发。这个过程中,老师与学生均要进行角色转变,即采用“学徒制”的教学模式进行教学,老师为传统企业中的技术师傅,而学生则是初入岗位的学徒,老师指导学生完成项目制作。注意实施过程中要根据不同的阶段划分不同的教学环节,包括项目建模、模块讲解、辅导答疑、编码实现、项目总结等。其中项目建模需要老师进行详细讲解,帮助学生分析项目需要实现哪些功能,然后再将学生分成若干学习小组,合作完成编码,最终实现软件的功能。在这个过程中,学生可以随时向老师进行提问,老师负责答疑解惑,学生每解决一个问题,均将其记录下来,做好总结,培养学生掌握学习方法的能力。

(三)项目考核

项目教学法中项目考核是非常重要的环节,项目实施效果的优劣需要通过项目考核反馈给老师,不过项目教学法的验收侧重于项目的完成过程而非结果,因此,项目考核需要突出考核的全面性,包括学生的出勤、日常表现、作业、测试结果、项目完成质量、课程能力目标实现情况等;要制定明确、统一、可行的考核标准,提高考核的公平性与公正性;此外,考核形式要多样化,采用生生互评、老师点评等多种评价方法,以评价学生在实施项目过程中所展示出来的分析问题、解决问题的能力,考核形式也可以将传统试卷考核与项目考核互相结合。

三、结语

总之,项目教学法是以项目任务为基础,其更加侧重于学生技术应用能力与职业核心能力的培养,是一种新型的实践教学模式。在JAVA语言课程设计教学中采用项目教学法,可以提高学生的学习兴趣,教学过程中融入项目教学理念与学徒制实践教学模式,可以循序渐进的提高学生的编程能力,激发其编程兴趣,获得事半功倍的效果。由此可见,项目教学法真正体现出了“学以致用”的教学思想,后续要加强项目教学法的研究与实践,以培养出企业真正需要的技术型人才。

参考文献:

[1]张哲,陈桂生.在JAVA语言教学中实施项目驱动教学法的实践探索[J].教育与职业,2014(6):456

[2]宋英超,吕宜忠,沈斌. 运用项目教学法开展工学结合的研究与实践[J].科技创新导报,2014(5):231-232

[3]刘尧猛,陈军.注重创新人才培养的计算机实验教学研究[J].实验技术与管理,2014(5):78

[4]王进,陈建平.反思性教学在JAVA程序设计实验教学中的应用[J].实验技术与管理,2015(1):43

java聊天室课程设计报告 篇4

2011 ~ 2012 学年 第 一 学期

学 号 20104053020 姓 名 胡勇昌 院 系 信息工程与技术 专 业 计算机工程系 课 程 名 称 JAVA程序设计 课程设计名称 局域网内的多功能聊天室

学 时 学 分 1 指 导 教 师 许烁娜

2011年 12 月 25 日

目录

课程设计报告..........................................................................................................................................1 第1章 引言............................................................................................................................................3 1.1 背景...............................................................................................................................................3 1.2 相关技术.......................................................................................................................................3 1.2.1 JAVA概述...............................................................................................................................3 1.2.2 Socket......................................................................................................................................3 1.2.3 TCP 三次握手.....................................................................................................................4 1.3 术语...............................................................................................................................................4 第2章 需求分析与系统设计................................................................................................................5 2.1 需求分析.......................................................................................................................................5 2.2 系统设计.......................................................................................................................................6 2.2.1多用户在线方案.....................................................................................................................6 2.2.2 系统功能................................................................................................................................6 第3章 系统实施....................................................................................................................................6 3.1聊天室窗口....................................................................................................................................6 3.2 建立客户端窗口...........................................................................................................................8 3.3 内嵌“私聊”窗口.......................................................................................................................9 3.4客服端类继承客户端窗口类,并内嵌私聊程序......................................................................10 第4章 测试..........................................................................................................................................15 4.1 测试环境与使用方法.................................................................................................................15 4.2 功能测试.....................................................................................................................................15 4.2.1聊天室窗口...........................................................................................................................15 4.2.2 客户端窗口..........................................................................................................................16

4.2.3 内嵌“私聊”窗口..........................................................................................................................16

参考文献................................................................................................................................................16

第1章 引言

1.1 背景

网络聊天室通常直称聊天室,是一种人们可以在线交谈的网络论坛,在同一聊天室的人们通过广播消息进行实时交谈。聊天室可以建立在即时通讯软件(如MSN Messenger、QQ)、P2P软件、万维网(如 Halapo,Meebo)等基础上,万维网方式更为普通和种类繁多,交谈的手段不局限于文本,更包括语音、视频。通常聊天室是按照房间或频道为单位的,在同一房间或频道的网人可以实时地广播和阅读公开消息。一般情况下,与其它网络论坛、即时通讯不同的是,聊天室不保存聊天记录。

1.2 相关技术 1.2.1 JAVA概述

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。

1.2.2 Socket Socket是java中需一要编写较低层次的网络通信程序(例如Cljent/server应用程序)时提供的一种通讯机制。Socket是两个程序进行双向数据传输的网络通信的端点,一般 由一个地址加上一个端口号来标一识。每个服务程序都在一个众所周知的端口上提供服 务,而想使用服务的客户端程序则需要连接该端口。通过Socket的数据是原始字节流信 息,通信双方必须根据约定的协议对数据进行处理与解释。

Socket通信机制提供了两种通信.方式:有连接方式(TCP)和无连接方式(UDP数

据报)。有连接方式中,通信双方在开始时必须进行一次连接过程,建立一条通信链路。通信链路提供了可靠的,全双工的字节流服务。无连接力一式中,通信双方不存在一个连 接过程,一次网络I/O以一个数据报形式进行,而每次网络I /O可以和不同.主机的不 同进程进行。无连接方式开销小于有连接方式,但是所提供的数据传输服务不可靠,不 能保证数据报一定到达目的地”」·。

JAVA的有连接通信采用流式I/O模式。Socket是两个进程间通信链的端点,每个 Sockct有两个流:一个输入流和一个输出流。只要向Sockct的输出流写,一个进程就可 以通过网络连接向其他进程发送数据;同样,通过读Sockt的输入流,就可以读取传输 来的数据。

有连接通信一般要经历以下四个基本步骤ii

(1)创建Sockct,建立连接;

(2)打开连接到Sockct的输入/输出流;

(3)按照一定的一脚议对Socket进行读/写操作;

(4)关闭Socket。

第(3)步是程序员用来调用Socket和实现程序功能的关键步骤,其他三步在各种 程序中基本相同。

1.2.3 TCP 三次握手

TCP协议通过三个报文段完成连接的建立,这个过程称为三次握手(three-way handshake),过程如下图所示。

1.3 术语

暂无

第2章 需求分析与系统设计

2.1 需求分析

从技术发面来看,Java语言的优点一要表现在:简.单、面向对象、多线程、安全性 等方面。1.简单性

Java与C++语言灰常相近,但Java比C++简单,它抛弃了C++中的一些不是绝对 必要的功能,如头文件、顶处理文件、指针、结构、运算符重载、多重继承以及自动强迫同型。Java实现了自动的垃圾收集,简化了内存管理的一作。这使程序一设计更加简便,同时减少了出错的可能。2.面向对象

Java提供了简单的类机制和动态的构架模型。对象中封装了它的状态变量和方法,很好地实现了模块化和信息隐藏;而类则提供了一类对象的原型,通过继承和重载机制,子类可以使用或重新定义父类或超类所提供的一方法,从而既实现了代码的复用,又提供了一种动态的解决方案。

Java是一种完全面向对象的程序设计语一言,它除了数组、布尔和字符二个基本数据类型外的其它类都是对象,它不再支持全局变量。在Java中,如果不创建新类就无法创建程序,Java程序在运行时必须先创建一个类的实例,然后才能提交运行。

Java同样支持继承特性,Java的类可以从其它类中继承行为,但Java只支持类的 单重继承,即每个类只能从一个类中继承。

Java支持界面,界面允许程序员定义方法但又不立即实现,一个类可以实现多个界面,利用界面可以得到多重继承的许多优点而又没有多重继承的问题。3.多线程

多线程使应用程序可以同时进行不同的操作,处理不同的事件。在多线程机制中,不同的线程处理不同的任务,他们之间互不干涉,不会由于一处等待影响其他部分,这样容.易实现网络上的实时交互操作。

Java程序可以有多个执行线程,如可以让一个线程进行复杂的计算,而让另一个线 程与用户进行交互,这样用户可以在不中断计算线程的前提下与系统进行交互。多线程保证了较高的执行效率。4.安全性

Java不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,这样就防止了程序员使用欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。2.2 系统设计 2.2.1多用户在线方案 2.2.2 系统功能

聊天室程序通常需要完成以下一些基本功能:

(I)登录聊天室;

(2)启动服务器;

(3)关闭服务器;

(4)用户之间的聊天;

(5)退出聊天室。

本系统其体功能需求如下:

(1)聊天室管理员经登录界面登录到管理界而,即系统的服务器端。用户经登录界而 都进入聊天大厅。

(2)不论是管理员还是用户都需一要在登录界面输入正确的用户名和密码后才可以登录 到各自的界面中去。

(3)系统的两个主要界面都是为方便管理员和用户操作的。首先,管理员进入到管理 界而后可以方便的启动/停止服务器,看到在线用户的信息和聊人信息、。用户进入到聊天 大厅中可以聊天,查看服务器状态。

(4)一个用户退出聊天室对其他用户不能产生影响,而服务器断开与客户端的连接则所有的用户都失去与服务器的连接。

(5)用户的聊天信息录入,重写,发送,接收方便,快捷。

(6)服务器状态,聊天信息和在线用户人数及时刷新。

(7)聊天室系统运行稳定、安全性高、性能可靠。

第3章 系统实施

3.1聊天室窗口

建立服务端窗口类:窗口程序如下 import java.awt.Button;import java.awt.Color;import java.awt.FlowLayout;import java.awt.List;import java.awt.TextArea;

import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JScrollPane;import javax.swing.JTextField;

public class chatroomW { JFrame f=new JFrame(“局域网聊天室”);JLabel label1=new JLabel(“端口”);JLabel label2=new JLabel(“发送”);Button button1=new Button(“启动服务”);Button button2=new Button(“发送”);Button button3=new Button(“刷新用户列表”);JTextField text1=new JTextField(5);JTextField text2=new JTextField(25);TextArea area1=new TextArea(26,84);List userList=new List(27);JScrollPane scro1,scro2;public chatroomW(){

chat();} public void chat(){

area1.setBackground(new Color(204,255,255));

area1.setForeground(Color.black);

userList.setBackground(Color.gray);

userList.setForeground(Color.white);

f.setLayout(new FlowLayout());f.add(area1);f.add(userList);f.add(label1);f.add(text1);f.add(button1);f.add(text2);f.add(button2);f.add(button3);

f.setBounds(300,200,750,485);

f.setResizable(false);

f.setVisible(true);

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

area1.setEditable(false);text1.setText(“10000”);

myEvent();

} public static void main(String args[]){

new chatroomW();} public void myEvent(){} }

3.2 建立客户端窗口

import java.awt.Color;import java.awt.FlowLayout;import java.awt.TextArea;

import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JScrollPane;import javax.swing.JTextField;

public class ClientW {

JFrame f=new JFrame(“聊天室”);JScrollPane js;TextArea area=new TextArea(19,67);JTextField text1=new JTextField(12);JTextField text2=new JTextField(5);JTextField text3=new JTextField(5);JTextField text4=new JTextField(20);JButton button1=new JButton(“连接”);JButton button2=new JButton(“发送”);JButton button3=new JButton(“私聊”);JLabel label1=new JLabel(“服务器地址”);JLabel label2=new JLabel(“服务器端口”);JLabel label3=new JLabel(“昵称”);public ClientW(){ } public void chat(){

area.setBackground(new Color(204,255,255));area.setForeground(Color.black);f.setLayout(new FlowLayout());f.setBounds(300,200,500,410);f.add(label1);f.add(text1);f.add(label2);chat();//

}

} f.add(text2);f.add(button1);f.add(area);f.add(label3);f.add(text3);f.add(text4);f.add(button2);f.add(button3);f.setVisible(true);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setResizable(false);area.setEditable(false);text2.setText(“10000”);text4.setText(null);myEvent();public void myEvent(){} public static void main(String args[]){ } new ClientW();

3.3 内嵌“私聊”窗口

class netchat{ JFrame f=new JFrame(“私聊”);JLabel label1,label2,label3;Button button1,button2;JTextField text1,text2,text3,text4;TextArea textarea;

f.setLayout(new FlowLayout());f.setBounds(300,200,400,310);//设置窗口大小和位置; label1=new JLabel(“对方主机”);label2=new JLabel(“本地端口”);label3=new JLabel(“对方端口”);button1=new Button(“连接”);button2=new Button(“发送”);text1=new JTextField(7);text2=new JTextField(3);text3=new JTextField(3);public netchat(){ f.setResizable(false);//让窗口大小固定;

// 闭;

} text4=new JTextField(20);textarea=new TextArea(13,53);textarea.setEditable(false);textarea.setBackground(new Color(204,250,255));f.add(label1);f.add(text1);f.add(label2);f.add(text2);f.add(label3);f.add(text3);f.add(button1);f.add(textarea);f.add(text4);f.add(button2);f.setVisible(true);f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);//关闭窗口程序同时关myEvent();

3.4客服端类继承客户端窗口类,并内嵌私聊程序

import java.awt.Button;import java.awt.Color;import java.awt.FlowLayout;import java.awt.TextArea;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintStream;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.Socket;

import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JTextField;

public class Client extends ClientW{ Socket s=null;public Client(){} public void myEvent(){

button1.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

try{

s=new Socket(text1.getText().toString(),Integer.parseInt(text2.getText()));

new Thread(new LinkC()).start();

area.append(“[系统消息]:连接成功n”);

}catch(Exception ex){area.append(“[系统消息]:连接失败n”);}

}

});

button2.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

new SentC();

}

});

button3.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

new netchat();

}

});} public static void main(String args[]){

new Client();}

class LinkC implements Runnable{

public void run(){

try{

BufferedReader bufIn=

new BufferedReader(new InputStreamReader(s.getInputStream()));

String msg=null;

PrintStream ps=new PrintStream(s.getOutputStream());

ps.println(text3.getText());

while(true){

try{

while((msg=bufIn.readLine())!=null){

area.append(msg+“n”);

}

}catch(Exception ex){break;}

}

}catch(Exception e){}

}

}

class SentC {

public SentC(){

try{

PrintStream ps=new PrintStream(s.getOutputStream());

if(!text4.getText().equals(“")){

ps.println(text4.getText());//

area.append(text4.getText());//服务器自动会返回

text4.setText(”“);

}

}catch(Exception e){}

}

} //私聊类

class netchat{

JFrame f=new JFrame(”私聊“);

JLabel label1,label2,label3;

Button button1,button2;

JTextField text1,text2,text3,text4;

TextArea textarea;

public netchat(){

f.setLayout(new FlowLayout());

f.setBounds(300,200,400,310);

//设置窗口大小和位置;

f.setResizable(false);

//让窗口大小固定;

label1=new JLabel(”对方主机“);

label2=new JLabel(”本地端口“);

label3=new JLabel(”对方端口“);

button1=new Button(”连接“);

button2=new Button(”发送“);

text1=new JTextField(7);

text2=new JTextField(3);

text3=new JTextField(3);

text4=new JTextField(20);

textarea=new TextArea(13,53);

textarea.setEditable(false);

textarea.setBackground(new Color(204,250,255));

text2.setText(”10000“);

text3.setText(”10000“);

f.add(label1);

f.add(text1);

f.add(label2);

f.add(text2);

f.add(label3);

f.add(text3);

f.add(button1);

f.add(textarea);

f.add(text4);

f.add(button2);

f.setVisible(true);//

f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);//关闭窗口程序同时关闭;

myEvent();

}

public void myEvent(){

f.addWindowListener(new WindowAdapter()

{

public void windowClosing(WindowEvent e){

try{

DatagramSocket ds=new DatagramSocket();

byte[] buf=”对方已下线“.getBytes();

DatagramPacket dp=

new DatagramPacket(buf,buf.length,InetAddress.getByName(text1.getText()),Integer.parseInt(text3.getText()));

ds.send(dp);

ds.close();

}catch(Exception ex){}

}

});

button2.addActionListener(new ActionListener()//事件源是button2

{

public void actionPerformed(ActionEvent e)

{

if(!text4.getText().equals(”“))

new Thread(new Send()).start();

}

});

button1.addActionListener(new ActionListener()//事件源是button1

{

public void actionPerformed(ActionEvent e)

{

new Thread(new Rece()).start();

}

});

}

class Send implements Runnable{

public void run(){ try{UdpSend();}catch(Exception e){textarea.append(”[系统消息]:发送失败n“);}}

public void UdpSend()throws Exception{

DatagramSocket ds=new DatagramSocket();

byte[] buf=text4.getText().getBytes();

DatagramPacket dp=

new DatagramPacket(buf,buf.length,InetAddress.getByName(text1.getText()),Integer.parseInt(text3.getText()));

textarea.append(”[我]: “+text4.getText()+”n“);

text4.setText(”“);

ds.send(dp);

ds.close();

}

}

class Rece implements Runnable{

int index=0;

public void run(){

try{

UdpRece();

}catch(Exception e){

textarea.append(”[系统消息]:连接失败n“);

}

}

public void UdpRece()throws Exception{

while(true){

DatagramSocket ds=new DatagramSocket(Integer.parseInt(text2.getText()));

if(index==0){textarea.append(”[系统消息]:连接成功n“);}

byte[] buf=new byte[1024];

DatagramPacket dp=new DatagramPacket(buf,buf.length);

ds.receive(dp);

String data=new String(dp.getData(),0,dp.getLength());

textarea.append(dp.getAddress()+” “+data+”n");

index++;

ds.close();

}

}

}

} } 第4章 测试

4.1 测试环境与使用方法

测试环境:测试环境:电脑安装Java JDK 服务器端使用方法:打开服务启动,点击“启动服务”,提示“启动服务成功”表示正常启动。否则,先关闭服务端,再重新打开,启动服务。客户端使用方法:打开客户端,输入“服务器地址”,点击“连接”,如成功连接系统提示“成功连接”,并收到服务端返回的“欢迎”信息,否则关闭并重新启动。

私聊功能使用方法:点击面板上的“私聊”按钮,输入对方的IP地址,点击连接,如连接成功系统会提示“连接成功”。当对方断开时会收到“对方已下线”提示。如果要同时跟多人私聊,则要改变本地端口值,并告知对方。

4.2 功能测试 4.2.1聊天室窗口

4.2.2 客户端窗口

4.2.3 内嵌“私聊”窗口

参考文献

用JAVA程序实现参考文献的录入与生成 刘玮玮 2009 《福建电脑》

基于Java移动Agent系统的安全参考模型 周屹 2007 《黑龙江工程学院学报》

五子棋JAVA语言课程设计报告 篇5

游戏说明

五子棋在我国的历史可谓是源远流长,喜爱它的玩家也是大有人在,是很多人的娱乐首选,也是一种竞技项目。但很多的五子棋软件一般都是单机版的,游戏无法在两个玩家之间进行。基于上述原因,五子棋作为一个古老而又有广泛群众基础的游戏,他的完善性无疑是家玩家有很大的影响在互联网迅速发展的今天,五子棋的流行已经不仅仅只是在现实生活中的面对面的娱乐竞技,在网上也已经是广大玩家的首选娱乐游戏。为适应当今社会五子棋软件化的需求,通过对一般的五子棋软件进行设计,通过本设计希望能在五子棋的软件发展上起点微不足道的推动作用。实现当今社会五子棋软件化的需求。软件设计采用visual studio2008版作为开发平台,运用软件工程的分析和编写方法,收集主要相关文献资料,对系统作详细的分析和设计,实现五子棋的基本功能需求,达到一般五子棋的游戏功能和规则设置。在设计上,主要解决的问题有五子棋的各个方向判断胜负算法的分析,以及五子棋中“聊天,重新开始”等基本功能的实现。

需求分析

一款游戏项目的确立是建立在各种各样的需求上面的,这种需求往往来自于玩家的实际需求或者是出于公司自身发展和实力的情况,其中玩家的实际需求也就是说市场需求最为重要.面对游戏拥有不同知识和理解层面的玩家,项目的负责人(或者游戏制作人)对玩家需求的理解程度,在很大程度上决定了此类游戏开发项目的成败.因此如何更好地的了解,分析,明确玩家需求,并且能够准确,清晰以文档的形式表达给参与项目开发的每个成员,保证开发过程按照满足玩家需求为目的正确项目开发方向进行,是每游戏开发项目管理者需要面对的问题...而作为五子棋的设计需要考虑到的最基本的需求莫过于人机对战与人人对战功能的实现,当然还有下棋过程中的下棋悔棋功能以及判断游戏的胜负等方面的要求。当然最好是要考虑到界面的友好性,作为一个娱乐软件,还应该考

虑到玩家在游戏时的舒适 实现

2.1 设计思路

2.2 具体实现 2.2.1 界面设计

界面主要分四大部分:棋盘、ip地址、棋子选择和聊天窗口,程序运行开始,先要输入要连接的主机ip地址,然后选定棋子颜色,就可以下棋了。输入文本的控件我选择了comboBox空间,在其下拉表中预先输入一些常用的语句,如:你好,嗨等,这样方便聊天。聊天记录窗口我用了listBox,当聊天内容比较多时,会自动添加滚动条,便于用户阅读聊天信息

2.2.2按钮功能实现

(1)重新开始按钮 public void Restart()

{

radBlack.Enabled = true;

radWhite.Enabled = true;

for(int i=0;i

for(int j = 0;j < Level;j++)

{ pic[i, j].Image = Image.FromFile(“Board.jpg”);

flag[i, j] = false;

doubleFlag[i, j] = false;

}

this.AllowClick = true;

} private void button2_Click(object sender, EventArgs e)

{this.Restart();}(2)发送按钮

private void btnSend_Click(object sender, EventArgs e)

{ String ForeStr = “rn” + txtSelfIP + “【” + DateTime.Now.ToShortDateString()+ “ ” + DateTime.Now.ToShortTimeString()+ “】:rn”;

this.Sender.send(txtIP.Text.Trim(),txtSend.Text.Trim(), 12001);

txtShow.Text += ForeStr;

int BeforeIndex = txtShow.Text.Length;

txtShow.Text += txtSend.Text;

txtShow.Select(BeforeIndex, txtShow.Text.Length);

txtShow.SelectionBackColor = Color.White;

txtShow.SelectionColor = SelfFontColor;

//滚动

txtShow.Select(txtShow.Text.Length, 0);

txtShow.ScrollToCaret();

txtSend.Text = “";

} 2.2.3棋子位置判断

获得所下的棋子位置的下标:

RowIndex =(p.Location.Y30)/(p.Width);判断是否有棋子添加到棋盘上,是通过Button1是否产生单击事件来判定的,在Button按钮单击事件中,编入了输赢的判断代码,结果用messagebox的形式显示出来,还有一些对不合规则下棋方法的判断及给出相应的提示

private void button1_Click(object sender, EventArgs e)

{

if(this.AllowClick)

{

this.radBlack.Enabled = false;

this.radWhite.Enabled = false;

PictureBox p =(PictureBox)sender;

p.Image = Image.FromFile(PictureFileName);

//获得所下的棋子位置的下标

RowIndex =(p.Location.Y30)/(p.Width);

String Message;Message = ”Pos“ + Splitor + RowIndex.ToString()+ Splitor + ColIndex.ToString();//发送的信息字符串

Flag[RowIndex, ColIndex] = true;

//记录

if(this.Judge1()|| this.Judge2()|| this.Judge3()|| this.Judge4())Message += Splitor + this.WinStr;

try {

int Port = Convert.ToInt32(txtPort.Text.Trim());

if(doubleFlag[RowIndex, ColIndex])

{ pic[RowIndex, ColIndex].Image = Image.FromFile(OtherPictureFileName);MessageBox.Show(”不能在有棋子的地方下棋“, ”消息“);AllowClick = true;}

else {

Sender.send(txtIP.Text.Trim(), Message, Port);

Sender.send(txtIP.Text.Trim(), Message, Port);

Sender.send(txtIP.Text.Trim(), Message, Port);

Sender.send(txtIP.Text.Trim(), Message, Port);

Sender.send(txtIP.Text.Trim(), Message, Port);

AllowClick =false;

}

}

catch(Exception ex)

{ MessageBox.Show(ex.Message, ”错误!“);this.Restart();}

doubleFlag[RowIndex, ColIndex] = true;//双方记录

if(this.Judge1()|| this.Judge2()|| this.Judge3()|| this.Judge4())

{ this.WinCount += 1;MessageBox.Show(”胜利!胜负情况: 胜“+ WinCount.ToString()+”负“+ LoseCount.ToString(), ”对战结束“);this.Restart();

} }

else

MessageBox.Show(”不能抢下棋子“); }

public Form1()

{ InitializeComponent();

for(int i = 0;i < Level;i++)

{

for(int j = 0;j < Level;j++)

{ pic[i, j] = new PictureBox();

pic[i, j].Click += new EventHandler(this.button1_Click);

} }

} public void StartListen()

{

while(true)

{ int Port = Convert.ToInt32(txtPort.Text.Trim());

udpclient = new UdpClient(Port);

IPEndPoint ipendpoint = new IPEndPoint(IPAddress.Any, Port);

try

{

byte[] bytes = udpclient.Receive(ref ipendpoint);

String StrReceive = ”“;StrReceive = Encoding.GetEncoding(”gb2312“).GetString(bytes, 0, bytes.Length);

String[] parts = StrReceive.Split(Splitor);

if(parts[0].Equals(”Pos“))

{ ReceivedRow = Convert.ToInt32(parts[1]);

ReceivedCol = Convert.ToInt32(parts[2]);

pic[ReceivedRow,ReceivedCol].Invoke(new MyDelegate(this.InvokeFun));

doubleFlag[ReceivedRow, ReceivedCol] = true;try {if(parts[parts.Length3;h++)

{ j=h;

for(int i=0;i

{ if(flag[i,j])

{ count++;

if(count >= 5)

return true;

}

else count = 0;

}

count = 0;

}

//下三角

for(int row = 1;row < Level-3;row++)

{

j = row;

for(int col = 0;col < Level && j < Level;j++, col++)

{ if(flag[j, col])

{ count++;

if(count >= 5)return true;

}

else

count = 0;

}

count = 0;

}

return false;

}

public bool Judge4()

//左下——右上

{

int count = 0;

int h;

//上下三角

for(int c=0;c

for(int j = Level-1;j >=0;j--)

{ h = j;

for(int i = c;i < Level && h >=0;i++)

{ if(flag[i,h])

{

count++;

if(count >= 5)return true;

}

else

count = 0;h--;

}

count = 0;

}

return false;

}

2.27、聊天监听

public void ListenChat()

{

while(true)

{ try

{ int Port = 12001;

udpclient2 = new UdpClient(Port);

IPEndPoint ipendpoint2 = new IPEndPoint(IPAddress.Any, Port);

byte[] bytes = udpclient2.Receive(ref ipendpoint2);this.ChatMessage = Encoding.GetEncoding(”gb2312“).GetString(bytes, 0, bytes.Length);

udpclient2.Close();

txtShow.Invoke(new ChatDelegate(this.ChatInvoke));

}

catch(Exception){ udpclient2.Close();break;}

this.ChatMessage = ”“;

}

} public void ChatInvoke(){ String ForeStr = ”rn“ + this.txtIP + ”【“ + DateTime.Now.ToShortDateString()+ ” “ + DateTime.Now.ToShortTimeString()+ ”】:rn";

txtShow.Text += ForeStr;//添加到聊天窗口

int Start = this.txtShow.Text.Length;

txtShow.Text += this.ChatMessage;

} 3 总结 //字体变色

txtShow.Select(Start, this.ChatMessage.Length);txtShow.SelectionColor = OtherFontColor;txtShow.SelectionBackColor = Color.White;//滚动

五子棋JAVA语言课程设计报告 篇6

1.目的

本次大作业是《C程序设计》课程的综合实验,作为课堂教学和课内正常上机实验的补充。通过对《C程序设计》课程的学习,学生已初步掌握C语言的基本概念、过程化程序设计的基本方法,但是实际编程和上机调试程序的能力还远远不足。通过《C程序设计》大作业,加强学生自主学习、收集资料和动手编程的能力,为后续专业课程打好基础。

2.大作业说明

本次课程设计使用Visual C++ 6.0完成程序设计。按照2~6人为一组,每组选择一个题目,共同完成。每人必须独立该题目的一个部分,有能力的同学可独立完成。本次课程设计要求每个程序要求调试通过;课程设计结束后,每个小组上交大作业设计报告一份、程序一套,要求演示,演示时采用答辩形式,由各小组同学边演示边讲解编程思路。源代码以电子版形式提交,提交的源代码要求加注释。

3.提交内容要求

(一)程序设计报告 要求:

(1)封面:

201x级《C程序设计》大作业设计报告

设计题目:…… 小组参与人员:

[姓名:XXX]

[学号:XXXXXXX]

[分工:XXXXXXX] [姓名:XXX]

[学号:XXXXXXX]

[分工:XXXXXXX]

(2)正文最好分章节,正文为5号宋体。(3)内容:

1)概述:需求说明,功能分析,开发环境等

2)程序概要设计:程序流程是什么,有哪些文件、函数,各实现什么功能,程序如何使用,输入输出各是什么等。3)程序详细设计:关键代码的主要思想,例如采用的查找采用折半法、排序采用冒泡法等给出算法的主要思想。

4)总结:分析程序的优点和不足,总结自己的收获。

(二)程序代码清单

要求:程序要求能够正常运行,并至少能实现基本功能要求。完成功能越多将得到较高的分数。

4.备选题目

(1)学习软件 系统功能设计

在本系统的设计中,主要实现如下一些功能:学习、测试、成绩统计与分析。其中,“学习”部分要求教100以内的加、减、乘和除;“测试”模块要求随机给出参与运算的数及运算类型,并判断用户的答案,测试完给出得分;“成绩统计与分析”模块能够统计成绩各种运算的平均成绩。

界面要求

欢迎界面、登录界面、系统模块选择界面及各模块界面。

(2)旅馆信息管理程序 系统功能设计

1.要求实现旅客的入住、换房和退房、查看旅客和房间信息,以及从文件读取相关信息,相关信息储存到文件的功能,从而实现旅馆信息管理的基本功能。;使用结构体数组来实现旅客入住、换房、退房三种行为。能将文件中的信息读到结构体中,能将结构体的信息保存到文件中。

2.旅客和房间的信息存放到文件中。界面要求

欢迎界面、登录界面、系统模块选择界面及各模块界面。例如:

(3)大学生信息管理系统 系统功能设计

1. 在本系统的设计中,主要实现如下一些功能:增加记录、修改记录、删除记录、查询记录及浏览记录。学生记录包括:姓名、学号、性别、专业、联系电话、简历。

2. 学生记录以文件形式保存。

界面要求

欢迎界面、登录界面、管理界面。

(4)毕业纪念册 系统功能设计

1. 在本系统的设计中,主要实现如下一些功能:增加记录、修改记录、查询记录及浏览记录。毕业生记录包括:姓名、学号、性别、专业、联系电话、留言。

2. 毕业生记录以文件形式保存。

界面要求

欢迎界面、登录界面、管理界面。(5)英汉电子词典 系统功能设计

1. 在本系统的设计中,主要实现如下一些功能:(1)词典功能。英汉双解及例句。(2)生词本。查找过的单词写入生词本。

2. 词典中的词语及生词本以文件形式存储。

界面要求

管理界面。

(6)电话簿管理程序 系统功能设计

1. 在本系统的设计中,主要实现如下一些功能:增加新电话号码、删除电话号码、修改电话号码、查询电话号码(按照电话号码和按照姓名)、排序电话号码(按照电话号码和按照姓名)。电话记录包括:人名、工作单位、电话号码和E-mail地址。2. 电话记录以文件形式保存。

界面要求

欢迎界面、登录界面、管理界面。

(7)工资管理程序 系统功能设计

1. 在本系统的设计中,主要实现如下一些功能:加入一个员工的记录、删除一个员工的记录、显示所有员工记录、排序员工记录(按照职工号排序和按照姓名字母序排序)、查询工资(查询工资和显示某一工资范围的记录)、统计功能(统计某一工资范围的人数和统计各部门的工资总数)。员工记录包括:姓名、职工号、所属部门、基本工资、奖励工资.2. 员工记录以文件形式保存。界面要求

欢迎界面、登录界面、管理界面。

(8)商品库存管理 系统功能设计

1. 在本系统的设计中,主要实现如下一些功能:输入商品总类、显示商品种类、增加商品种类、删除商品种类、查询商品种类。商品种类记录包括:名称、代码、颜色、数量、品牌。

2. 商品记录以文件形式保存。

界面要求

欢迎界面、登录界面、管理界面。

(9)银行帐户管理 系统功能设计

1. 在本系统设计中,主要实现:输入新用户账户信息;显示用户帐户信息;修改帐户信息,要求用户输入帐号,根据用户需要修改除了帐号之外的其余信息;查询帐户情况,根据输入的帐号查询用户情况和帐户金额;删除帐户:根据输入的帐号找到要删除的帐号信息以后,经确认后删除该帐号信息;其中每个用户帐户信息中要求保存帐号、用户身份证号码、用户姓名、用户地址、帐户金额等;

2. 用户账户信息以文件形式存放

界面要求

欢迎界面、登录界面、管理界面。

(10)图书管理

1. 设计一个具有数据插入、修改、删除、显示、查询和统计(例统计总图书价格,某一出版社、某一类书有多少等)功能的图书管理程序,图书信息包括:书名、作者、书号、所属种类(例如计算机类、海洋类)、出版社、出版日期和单价。

2. 图书信息以文件形式存放 界面要求

欢迎界面、登录界面、管理界面。

(11)电话簿管理程序 系统功能设计

1. 存储的记录信息包括:人名、工作单位、电话号码和E-mail地址。要求具有如下功能:

(1)加入一个新电话号码;(2)删除一个电话号码;(3)显示所有电话号码;(4)修改功能;

(5)排序功能,包括按照电话号码排序和按照姓名字母序排序;(6)查询功能,包括按人名查询电话号码和按电话号码查询人名。2. 记录需要保存到文件中。

界面要求

欢迎界面、登录界面、管理界面。

(12)医院信息管理程序 系统功能设计

1.病人信息包括病人的id号码、姓名、病历以及消费信息,并用链表将所有病人信息整合。

2.能够实现病人信息的注册、病人信息的查询、病人消费统计、保存信息、载入信息、查询库存等几项功能。

界面要求

欢迎界面、登录界面、管理界面。系统完成后应实现类似下图所示界面。

(13)航班售票系统 系统功能设计

1、假设该民航有若干航班,要求实现增加航班和取消某个航班的功能。

2、查询:根据用户提出的终到站查询航班号、售票情况等航班信息;也可根据航班号,列出该航班已订票的乘客名单;

3、订票:根据航班号为客户订票,如该航班有余票,则为客户订票;如该航班已满员,则显示相应信息。

4、退票。

界面要求

欢迎界面、登录界面、管理界面。

(14)单项选择题测试系统 系统功能设计

1、用文件保存试题库,每个试题包括题干、4个备选答案、标准答案;

2、试题输入,增加试题到试题库中;

3、试题抽取,每次从试题库中抽出n道题(n由键盘输入);

4、答题,用户输入自己的答案;

5、自动判卷,系统可根据用户答案与标准答案的对比实现判卷并给出成绩。界面要求

欢迎界面、登录界面、管理界面。

(15)餐厅信息管理程序 系统功能设计

1.要求实现客户点菜的过程、客户结账、账目的管理、餐厅系统的维护四大功能模块,每个功能模块又分别对应一些不同操作子模块,从而完成一个餐厅信息管理信息系统。2.可以使用三种不同的结构体来分别存储餐桌、菜以及订单信息。3.使用文本文件完成数据的存储与读取,完成账单的管理。

界面要求

五子棋JAVA语言课程设计报告 篇7

1 基于工作过程的课程开发思路

根据专业、经济和产业的发展需求, 以科学的发展观为指导, 以学生就业为目标, 以岗位需要和职业标准为依据的原则, 按照实际工作任务、工作过程和工作情境组织教学。 具体按下面步骤进行开发: (1) 课程按基于工作过程进行开发的准备; (2) 基于工作过程的课程设置; (3) 实施基于工作过程的课程; (4) 基于工作过程的课程评价。

2 基于工作过程的课程设计

(一) 教学内容的选取于组织

基于工作过程的课程开发的重要环节是教学内容的选取与组织。 采用“课程定位与岗位能力要求” 的原则选取教学内容;采用“项目”为载体组织教学内容。

(1) “课程定位及岗位能力要求”原则选取教学内容

通过企业调研的方式了解相关专业的岗位群、 岗位能力要求等情况, 结合高职学生的实际情况确定高职软件开发专业主要面向软件开发领域的职业岗位, 培养掌握Java语言知识, 并具备数据库、网页设计等能力的专业技术人才。

(2) “项目”为载体组织教学内容

基于工作过程的课程开发中以“项目”为载体, 组织让学生在完成工作任务的过程学习和掌握相关理论知识和专业技能。以模块化思想设计和安排项目顺序, 以求达到由点到面、由简单到复杂、由使用到应用的目标。 以《Java语言程序设计》例, 项目设计的顺序为“Java语言程序设计基础”、“面向对象程序设计”、“数据与异常处理程序”、“图形用户界面程序设计”、“综合设计———企业即时通软件”。

(二) 创设学习情景

在教学设计中, 通常会设定学习情境。 学习情境是泛指一切作用于学习主体.并能引起学生产生一定情感反应的客观环境[1]。 目的是要让学生有身临其境的感觉, 增加学生的学习兴趣、激发学生的学习热情。 设计的学习情境要与主题涉及相关, 软件专业的学习情境设计一般采用案例法, 每个案例都解决一个具体的问题, 学生通过解决这个问题完成相应的学习任务。这种教学设计有利于提高学生对问题的分析和解决能力。

3 基于工作过程的课程开发实践

(一) 教学过程

本课程按照工作过程的行动模式进行教学实践, 工作过程的行动模式如图所示:

基于工作过程的《Java语言程序设计》一体化课程教学实施的教学过程在本文以“学生成绩计算程序设计”为例进行阐述。

首先, 教师提出教学任务。 对学生成绩进行统计计算, 参加考试的有6 名学生, 考试成绩分别为94.5、89.0、79.5、64.5、81.5、73.5, 计算考试的总分数并保存大于考试平均分的成绩信息, 将信息存入数组High Score中。

其次, 学生明确了学习任务后, 通过学习和理解教师布置的学习任务和参考资料以及上网搜索获取与Java数组相关的知识信息, 准备回答教师的一些引导性问题。 教师帮助理解学生搜索相关资料, 并解答学生遇到的问题, 对收集的资料进行抽检和讲评。 引导问题如下: (1) 一维数组的声明和创建方法; (2) 数组的初始化; (3) 数组的遍历; (4) 数组的排序; (5) Arrays类处理数组的方法。

学生完成信息获取后, 制定出“学生成绩计算程序设计”的工作计划和解决方案。 教师的主要任务是指导学生制订工作计划、答疑、抽检、优化。

解决方案确定后, 学生按着计划执行并完成学习任务, 记录与整理相关资料。 教师的任务是指导和启发学生、解答学生问题、规范并检查学生的操作流程。

(二) 教学方法

在实施基于工作过程的《Java语言程序设计》的课程中, 主要采用行动导向教学法, 以学生为中心、教师指导。

4 基于工作过程的课程开发反思与设想

在实施基于工作过程的《计算机网络安全》课程的一体化教学的过程中我们遇到了以下问题: 教学设备与教学场地存在不足, 严重缺乏一体化教师, 学生的综合素质能力较弱。

为了完善基于工作过程的《Java语言程序设计》课程一体教学, 解决遇到问题, 我们做如下设想:加强软件开发实训室建设, 创造软件开发的实际工作氛围;加强一体化师资队伍建设, 培养“双师型”教师队伍;注重培养学生的综合素质能力, 提高学生的自学能力、沟通交流能力、实际动手能力、组织协调能力、团队合作能力;建立配套的教学管理制度。 转变教学管理部门的观念, 让其职能转换为“指导和服务教学”;建立校企合作的一体化教学模式。 利于学校的课程改革和“双师型”教师的培养。

参考文献

[1]李政仪.基于工作过程导向的课程开发[J]天津职业大学学报, 2008 (08) .

上一篇:2024年“世界气象日”活动策划书下一篇:小学英语教学中如何运用合作学习提高效率

热门文章
    相关推荐