JAVA课程设计 五子棋

时间:2024.5.8

辽 宁 工 业 大 学

题目: 五子棋

院(系): 软件学院

专业班级: 软件工程

学 号:

学生姓名:

指导教师: 王彦华

教师职称: 讲 师

起止时间: 2012.6.18至2012.7.1

程序设计专题(报告)任务及评语

JAVA课程设计五子棋

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)

目 录

第1章 课程设计的目的与要求 ................................................ 1

1.1 课程设计目的 ........................................................ 1

1.2 课程设计的实验环境 .................................................. 1

1.3 课程设计的预备知识 .................................................. 1

1.4 课程设计要求 ........................................................ 1

第2章 课程设计内容 ......................................................... 2

2.1课程设计主要内容 .................................................... 2

2.2概要设计 ............................................................ 2

2.2.1需求分析 ...................................................... 2

2.2.2概念设计 ...................................................... 2

2.2.4 自定义类说明 .................................................. 3

2.3详细设计 ............................................................ 4

2.3.1系统功能模块图 ................................................ 4

2.3.2系统流程图 .................................................... 5

2.3.3代码实现 ...................................................... 5

2.4测试分析 ............................................................ 8

2.4.1程序运行情况 .................................................. 8

2.4.2程序异常处理 .................................................. 9

第3章 课程设计总结 ........................................................ 10

参考资料 .................................................................. 11

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)

第1章 课程设计的目的与要求

1.1 课程设计目的

《JAVA程序设计》是计算机相关专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。本课程的程序设计专题实际是计算机相关专业学生学习完《JAVA程序设计》课程后,进行的一次全面的综合训练,JAVA程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。

1.2 课程设计的实验环境

硬件要求能运行Windows 9.X操作系统的微机系统。JAVA程序设计语言及相应的集成开发环境,J2SDK和ECLIPSE开发工具。

1.3 课程设计的预备知识

熟悉JAVA语言及ECLIPSE开发工具。

1.4 课程设计要求

按课程设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握JAVA程序设计的基本技能和面向对象的概念和方法;了解多线程、安全和网络等编程技术。同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。

1

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)

第2章 课程设计内容

2.1课程设计主要内容

五子棋是起源于中国古代的传统黑白棋种之一。五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。

经过一个学期的学习,使我对Java有了一定的了解。但要深入理解Java语言,单靠上课是不够的。必须通过课程设计,设计一个比较大的程序,才能更深一步地理解Java语言。在这次课程中,我选择了网络五子棋作为课题。编写网络五子棋游戏要利用到Socket网络编程技术和多线程。通过这次课程设计,熟悉Java的GUI图形界面设计,网络Socket 编程和多线程编程。

2.2概要设计

2.2.1需求分析

本系统主要是完成五子棋游戏的基本操作,在玩游戏的过程中玩家可以放松心情得到娱乐。本系统需要满足以下要求:

本程序实现了一个小的五子棋游戏,可以实现两个人在用一台机器上进行游戏。程序会自动判断谁输谁赢,在游戏的开始,第一个人可以选择执白棋还是黑棋,之后点击开始进行游戏。

2.2.2概念设计

网络五子棋是采用网络协议为TCP/IP的网上对弈游戏,运用“客户端-服务器“(c/s)网络架构模式。实现用户通过Internt连接在任何地方与不同玩家进行对战。服务器可以创建任意多局游戏。

通过使用多线程和网络套接字SOCKET来实现游戏之间的通讯,它是基于点对点的通讯。开始让服务器初始化建立服务器套接字SOCKET,基于某个端口PORT,服务器始终处于监听状态。客户端是动作的发起者,何时发出申请由客户端决定。客户端向服务器发出申请,服务器给予响应。打开客户端套接字SOCKET,连接到服务器端的地址ADDRESS和端口PORT。连接建立后,创建一个SOCKET实例,并开始一个线程,监听该客户端请求。服务器继续监听其它用户的连接。服务器通过数据输入流从客户端接收信息,并且通过数据输出流把相应的信息发送给客户端。客户端发送请求和响应接收到的各种信息。

在服务器和客户端之间传递的消息格式是采用“[消息类别]+内容“组成的,服务器 2

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)

和客户端在传递消息的过程,根据消息的类别来进行相关的操作。

2.2.3 自定义类说明

WuZiQi类:

属性:int color_QiZi=0 黑字0 白字1

Int ChessBody[][]=new int[7][17]; 无棋子0,黑棋1,白棋2;

Int GameStart=0;

JButton start,exit,rest;

JButton check[]=new JButton[3]’

String chess[]={"黑方","白方","旁观"};

方法:获取下棋点位

Public void mouseClicked(MouseEvent e){

Int x,y;

X=e.getX();y=e.getY(); //鼠标点击位置

If(x<45||y<45||x>495||y>495)

{return;} //在棋盘之外则不下

If(x%30>15)//获取下棋点的位置

{x+=30;}

If(y%30>15)

{y+=30;}

ChatServer 类:

属性:

Vector threads 向量存储线程

Socket socket 服务端口

DataInputStream in 输入流

DataOutputStream out 输出流

int nid 用户ID

方法:

构造器public ServerThread(Socket socket,Vector threads)

实现信息的输入、输出

实现public void run()监听客户端是否发信息过来,当客户离开时向

其他客户发信息,把客户端的信息发给其他客户。 服务器向客户端发信息public void write(String msg)

获取线程IDpublic int getID()

设置线程IDpublic void setID(int nid)

在Chatserver类内调用ServerThread 实现对所有来访客户监听,为来访者设置ID,

若有离开用户,则在聊天板块广播。

监听器:

对角色选择按钮注册ActionListener监听,设置用户的角色。定义黑子int类型 0,

白子1。

对按钮开始、重置注册ActionListener监听,如果点击开始,用户进 入下棋状态,

3

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)

有一方赢了,棋盘上则不能再点击棋子。点击重置,则开始新的一轮。

对鼠标注册mouseClicked监听,鼠标点击棋盘时获取下棋的位置。

对JTextField注册ActionListener,用户输入聊天信息后,通过Server传递给其他用户,在对话框JTextArea内显示。

2.3详细设计

2.3.1系统功能模块图

JAVA课程设计五子棋

图2-1 功能模块图

4

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)

2.3.2系统流程图

JAVA课程设计五子棋

图2-2 客户端系统流程图

2.3.3代码实现

下棋点击后天上棋子,每一步完了后判断胜负,从四个方向上判断胜负,并在棋盘中间显示哪方赢了!

public void PlayQizi(int x,int y){

if (GameStart==0) //判断游戏未开始

{ return; }

if (ChessBody[x/30][y/30]!=0)

{return;}

Graphics g=getGraphics();

if (color_Qizi==1)//判断黑子还是白子

{g.setColor(Color.black);

color_Qizi=0;

5

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)

}

else {g.setColor(Color.white);

color_Qizi=1;

}

g.fillOval(x-12,y-12,24,24);

ChessBody[x/30][y/30]=color_Qizi+1;

/////判断输赢//////////

g.setColor(Color.magenta);

g.setFont(new Font("fhahf ",Font.BOLD,30));

if(GameWin横(x/30,y/30)){

g.drawString(GetQiziColor(color_Qizi)+"赢了!",200,200); GameStart=0;

}

if(GameWin竖(x/30,y/30)){

g.drawString(GetQiziColor(color_Qizi)+"赢了!",200,200); GameStart=0;

}

if(GameWin撇(x/30,y/30)){

g.drawString(GetQiziColor(color_Qizi)+"赢了!",200,200); GameStart=0;}

if(GameWin捺(x/30,y/30)){

g.drawString(GetQiziColor(color_Qizi)+"赢了!",200,200);

GameStart=0;}}

ChatSever类:

public void run(){

System.out.println ("Thread is running");

try{

//监听客户端是否发消息过来

while(true){

String receive = in.readUTF();

if(receive == null)

return;

//当某客户离开,给其它客户端发消息

if(receive.equals("leave")){

for(int i=0;i < threads.size();i++){

ServerThread st = (ServerThread)threads.elementAt(i); st.write("***"+getID()+"leaving...***");

}

}else{

//把某客户端发过来的发送到所有客户端

for(int i=0;i < threads.size();i++){

ServerThread st = (ServerThread)threads.elementAt(i); st.write("<"+getID()+">: "+receive);}

初始化网络,并连接到服务端

6

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)

try {

//获得URL

URL url = this.getCodeBase();

InetAddress addr = InetAddress.getByName(url.getHost());

Socket socket;

System.out.println ("Server: "+addr+" "+url.getHost()+" "+url.getProtocol());//5555 为服务器端口

socket = new Socket(addr,5555);

//由本套接口获得输入,输出流

in = new DataInputStream(socket.getInputStream());

out = new DataOutputStream(socket.getOutputStream());

}catch (Exception ex) {ex.printStackTrace(); }

线程开始new Thread(this).start();

Run方法向服务器发送信息并接收信息

public void run() {

try {//监视服务器所发送的信息

while(true) {

String receive = in.readUTF();

if(receive!=null){

txtDisplay.append(receive + "\n");

//将光标移动到最后一个以实现滚动条的自动置底

txtDisplay.setCaretPosition(txtDisplay.getText().length());

} }

}catch (Exception ex) {

txtDisplay.append("Network problem or Server down");

txtInput.setVisible(false);}

}

public void stop() {

try {

out.writeUTF("leave");

}catch(Exception ex){} }

7

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)

2.4测试分析

2.4.1程序运行情况

JAVA课程设计五子棋

图2-3 棋盘图

当选择好黑白角色后点击开始,便可以下棋;点击重置时重新开始下棋;点击退出时结束游戏,并退出。 该棋盘未实现网络棋盘,只能自己跟自己下棋。还欠缺悔棋步骤,可以用Vector存储已下的棋子的信息,调用repaiant() 然后再画除最后一步的棋盘,实现悔棋操作。由于对Socket 用法还不熟悉,不能将棋盘通信与聊天通信区分开来,也就不能实现联网下棋。

JAVA课程设计五子棋

图2-4 ChatServer

如果用户登录则监听 listening ......、accept a client使用了Socket,和多线程技术。定义了Vector 存储用户线程,实现ChatServer将信息传递给每个用户,接收每个用户的信息。

8

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)

图2-5聊天对话框

用户4、5进入了聊天,对话。当对话框缩小或关闭时ChatServer都会发出用户离开的消息。此对话框可以允许多个用户群聊,但是少了一个窗口显示所有在线用户信息。即要求五,增强功能未实现。不能实现用户注册,添加好友,查看好有信息,对于数据库的使用不太熟悉。

2.4.2程序异常处理

Java的异常是面向对象的。一个Java的Exception是一个描述异常情况的对象.当出现异常情况时,一个Exception对象就产生了,并放到异常的成员函数里。

Java的异常处理是通过5个关键词来实现的:try,catch,throw,throws和finally。在Java语言的错误处理结构由try,catch,finally三个块组成。其中try块存放将可能发生异常的Java语言,并管理相关的异常指针;catch块紧跟在try块后面,用来激发被捕获的异常;finally块包含清除程序没有释放的资源,句柄等。不管try块中的代码如何退出,都将执行finally块。

try {//监视服务器所发送的信息

while(true) {

String receive = in.readUTF();

if(receive!=null){

txtDisplay.append(receive + "\n");

//将光标移动到最后一个以实现滚动条的自动置底

txtDisplay.setCaretPosition(txtDisplay.getText().length());

} }

catch (Exception ex) {

txtDisplay.append("Network problem or Server down");

txtInput.setVisible(false);}

}

JAVA课程设计五子棋

9

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)

第3章 课程设计总结

经过为期二周的课程设计,感觉自己所学远远不能解决做课设时的需求。在熟悉课本和上网搜索后,才算马马虎虎的完成了任务。

在画棋盘时,调用draw方法对于画图这块的坐标布置,在今后学画其他图画时能够得心应手。获取棋子方法的巧妙,注册鼠标,获取点击位置,除以棋盘间隔,去掉不为整数的一块,再乘以棋盘间隔便获得最临近点的下棋坐标,即所要下棋的位置。用二维数组模拟棋盘,无棋子的置为0,黑子置为1,白子置为2,以便在判断胜负时利于同色棋子的查找。整个棋盘就模拟出来了,很巧妙,不过有更好的方法用向量存储棋子信息,便于悔棋等操作。

实现多用户聊天,老师后面讲的不是很多,做起来有点费力。参考网上资料,明白Socket原理。开始时照着课本上的例子,不能得出想要的效果,而且只运行了一个程序看不到有通信的效果。后面在运行了Server类后,自己尝试着两个Client类,实现了通话,就像腾讯QQ里面一样的效果。里面定义了Vector 线程,实现了多线程用法。

两个板块大体实现,但是后面的要求五,由于数据库的使用不是太熟悉,不能注册用户,添加好友,查找好友,还有悔棋操作未能实现。此程序最大的缺点还在于,不能实现网络两人下五子棋。由于不能将棋盘信息与聊天信息区分,不能告诉对反自己下了哪一步,所以根据自己的水平也就能做到这了,今后加以完善。

10

辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)

参考资料

1.孙卫琴 Java面向对象教程 电子工业出版社 2006-03

2.孙卫琴 Java网络编程精解 电子工业出版社 2006-03

3.张仕斌 Java程序设计与应用 清华大学出版社 2005-06

4.张孝祥 Java就业培训程序 清华大学出版社 2003-06

5.耿祥义 Java课程设计 清华大学出版社 2004-03

6.王路群 Java高级程序设计 中国水利水电出版社 2006-03

7.丁振凡 Java语言使用教程 北京邮电大学出版社 2005-06

8.薛为民 Java应用教程 清华大学出版社 2005-06

9.钟允中 JAVA入门 辽宁科学技术出版社 1997-03

10.郑莉 Java语言程序设计 清华大学出版社 2006-03 11

更多相关推荐:
五子棋-课程设计报告

五子棋-课程设计报告单位分院(系)专业学号学生姓名指导教师完成日期20xx年05月日摘要五子棋的历史:五子棋是一种两人对弈的纯策略型棋类游戏,是起源于中国古代的传统黑白棋种之一。发展于日本,流行于欧美。容易上手…

五子棋游戏 课程设计报告(含源代码可以运行)

五子棋游戏课程设计报告(含源代码可以运行)目录第一章需求分析.11.1总体分析.11.2初始化.11.3主循环控制模块.11.4玩家下子.11.5盘面分析填写棋型表.21.6对方下子.21.7胜负判断.2第二章…

C语言图形五子棋课程设计报告

北京师范大学C语言课程设计报告课题名称:游戏五子棋指导教师:课题组员:院系:信息科学与技术时间:20##.3.15-20##.4.20摘要五子棋是一种两人对弈的纯策略型棋类游戏,应用C语言编写程序可以在计算机上…

《C++语言程序设计》课程设计报告--五子棋

C语言程序设计课程设计报告课程题目年级专业学号姓名指导教师江苏师范大学数学与统计学院摘要五子棋是我国古代的传统的黑白棋种之一五子棋不仅能增强思维能力提高智力而且富含哲理有助于修身养性本游戏是以C语言作为开发工具...

20xx年C语言五子棋课程设计报告

本科控制软件设计课程设计题目五子棋学院计信院专业自动化年级学号姓名谯平同组人张健李益指导教师黄仁杰20xx年9月6日1目录1设计简介32设计模块3小组分工4流程图5设计过程6调试过程7分析与总结8源程序4445...

c++五子棋课程设计报告

福建农林大学计算机与信息学院课程设计报告课程名称课程设计题目姓名系专业年级学号指导教师职称面向对象程序设计课程设计五子棋计算机软件工程年月日福建农林大学计算机与信息学院计算机类课程设计报告结果评定2目录1设计目...

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

封面Java语言程序设计课程设计报告分院电信分院班级电子商务1班姓名何芳林学号20xx0210460123指导教师吴军良课设时间20xx1220至20xx1231二O一一年十二月二十日10电商1班何芳林Java...

面向对象-五子棋-Java课程设计

面向对象程序设计小组成员姓名学号组长一实验分工二开发环境实验编译以及测试环境硬件环境CPUIntel奔腾双核E5200主频25GHz内存2G软件环境操作系统Windows7编程环境JDK70开发工具Eclips...

五子棋课程设计及源代码

计算机系课程设计报告1五子棋课程设计项目研究报告一项目简介11项目名称简单的多用户五子棋游戏程序12开发人员13指导教师二项目设计要求21项目要求通过课程设计完成一个五子棋游戏程序中要实现GUI图形界面的棋盘黑...

五子棋课程设计实验报告

C语言程序设计报告题目五子棋班级电气Q1041班人数3人小组成员周啸天万广富黄山奇C语言课程设计桂超第2页共28页20xx11302指导老师时间C语言课程设计目录第一章课程设计的目的和要求411课程设计的目的4...

五子棋游戏__课程设计报告(含源代码可以运行)

软件基础大作业项目名称五子棋游戏学号20xx46820xx0姓名校建林完成时间20xx年11月28日指导教师鲁可I目录一需求分析111开发背景112项目目标五子棋与游戏开发成员和具体日期完成任务以及任务的具体分...

C语言图形五子棋课程设计报告

课题名称游戏五子棋C语言课程设计报告学生姓名艾萨江吐合提学号5011113109所属学院信息工程学院专业计算机科学与技术班级计算机181指导教师化希耀教师职称讲师1摘要五子棋是一种两人对弈的纯策略型棋类游戏应用...

五子棋课程设计报告(33篇)