Java五子棋设计报告

合集下载

五子棋报告-java

五子棋报告-java

XXXX大学XX学院课程设计报告课程名称:面向对象程序设计题目名称:五子棋游戏设计学生姓名:专业班级:指导教师:任晓强一、课程设计目的与任务(四号、宋体、加黑、顶格)(1)掌握Java编程、面向对象的基础知识。

(2)较熟练地编写Java应用程序Application。

(3)了解Java的常用标准类库、编程技巧、异常处理。

(4)联系已学过的内容,巩固所学的理论,增强独立工作能力。

(5)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。

(6)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素质的提高起一个积极的推动作用。

课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。

正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。

二、课程设计内容1本设计题目的主要内容设计一个15╳15围棋棋盘,由两玩家交替进行对战,并可以实现以下功能:1.选择落子的先后顺序2.重置棋盘3.刷新重新开始4.退出提示并且规定退出者判为负,但退出过程中要有提示。

以防不小心点错了。

最后判断某一方是否为五子连珠。

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

(2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负);2 设计思想与程序构架程序流程图程序的功能分配a. 棋盘的绘制public void draw_qipan(Graphics G) 添加按钮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=();y1=();if ()<20 || ()>300 || ()<20 || ()>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 ()==b1) {Game_start();}else{Game_re();}if()==exist){Game_re();(Get_qizi_color(color_Qizi)+"输了!");intGame_Start=0;}e. 判断落子的位置及画出相应的黑白棋子public void set_Qizi(int x,int y) 判断胜负if (Game_win_1(x/20,y/20)) 进入游戏界面游戏开始的界面有三个选择项,用户可以选择相应的角色,选择完毕后点击开始进入游戏。

Java五子棋设计报告

Java五子棋设计报告

南京晓庄学院《JAVA程序设计》课程设计报告题目: 五子棋游戏的设计与实现姓名: 陶野学号:班级: 12软件工程转本2班指导教师:王峥完成时间7月1日成绩:信息工程学院2015年6月目录五子棋游戏的设计与实现1引言五子棋相传起源于四千多年前的尧帝时期,比围棋的历史还要悠久,可能早在“尧造围棋”之前,民间就已有五子棋游戏。

有关早期五子棋的文史资料与围棋有相似之处,因为古代五子棋的棋具与围棋是完全相同的。

在上古的神话传说中有“女娲造人,伏羲做棋”一说,《增山海经》中记载:“休舆之山有石焉,名曰帝台之棋,五色而文状鹑卵。

”李善注引三国魏邯郸淳《艺经》中曰:“棋局,纵横各十七道,合二百八十九道,白黑棋子,各一百五十枚”。

这段虽没明讲是何种棋类,但至少知道远古就以漂亮的石头为棋子。

因而规则简单的五子棋也可能出自当时,并是用石子作棋子。

亦有传说,五子棋最初流行于少数民族地区,以后渐渐演变成围棋并在炎黄子孙后代中遍及开来。

1.1系统开发背景在计算机逐步渗入社会生活各个层面的今天,计算机已经成为了人们日常生活中的一部分,越来越多的人使用计算机办公、娱乐等等。

在这其中,系统自带的小游戏也占据了相当重要的地位,与那些网络游戏和3D游戏相比,它有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。

这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。

1.2完成的主要工作设计一个15╳15围棋棋盘,由两玩家交替进行对战,并可以实现以下功能:1.选择黑子先下2.设置双方下棋总共时长3.刷新重新开始4.悔棋5.认输6.退出提示实现一个简单的多用户五子棋的游戏程序,包括如下两个界面(1)选择对弈桌(执黑、执白)。

(2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负);需求分析与设计思路1、用户需求调查分析2、构思代码模块3、总体设计4、详细设计5、代码编写2需求分析和总体设计1.1需求分析与设计思路此系统为智力游戏,采用JAVA的MVC模式,根据不同功能划分不同模块,该五子棋游戏功能虽然简单,然是实现了人机对战,所以从这个角度来说,此款游戏能准确的计算棋局。

五子棋设计报告(完整版)

五子棋设计报告(完整版)

《计算机网络》设计报告题目:局域网五子棋设计班级:计算机08.2班姓名:颜晓云指导教师:杨松波2011年7 月15日目录1、概论 .......................................................................... 错误!未定义书签。

2、功能介绍 ........................................................................ 错误!未定义书签。

3、程序流程图 .................................................................... 错误!未定义书签。

4、实现代码 ........................................................................ 错误!未定义书签。

5、总结体会 ....................................................................... 错误!未定义书签。

-6、参考文献 ........................................................................ 错误!未定义书签。

第一章绪论主要运用了GUI(用户图形界面)和API(应用程序借口)来实现。

当然,Event 监听器等也是这个程序的重要部分。

程序没有用到图片的引用,棋盘和棋子的设计完全是应用坐标来绘制,再加入按钮、及实现本游戏的用户界面布局。

程序编写的思路来源于网上和书上的资料,程序在编写过程中遇到的问题主要集中在前期的棋盘绘制和后期的棋子算法。

第二章功能介绍(1)程序在设计初就定义黑棋先行,白棋随后。

从第一个棋子开始开始相互顺序落子。

(2)通过坐标索引算出最先在棋盘的横向、竖向、斜向形成连续的相同色五棋子的一方为胜利。

java五子棋课程设计报告总结

java五子棋课程设计报告总结

课程设计报告:Java五子棋1. 背景五子棋是一种两人对弈的策略棋类游戏,它的目标是在一个棋盘上先将自己的五个棋子连成一条线,可以是横线、竖线、斜线等。

五子棋具有简单规则、易于上手、趣味性强等特点,因此在各个年龄段都备受欢迎。

本次课程设计旨在使用Java语言实现一个简单的五子棋游戏,并通过该项目来提高学生对面向对象编程和图形用户界面开发的理解和实践能力。

2. 分析2.1 需求分析根据五子棋游戏的规则,我们需要实现以下功能:•创建一个可视化的游戏界面,包括棋盘和落子提示•实现落子操作,玩家可以通过点击鼠标来在合法位置落下自己的棋子•判断胜负条件,当任意一方连成五个棋子时,游戏结束并宣布胜利者•提供重新开始和退出游戏的选项2.2 设计思路为了实现上述功能,我们将采取以下设计思路:•使用Java Swing库来创建游戏界面,包括棋盘和落子提示•使用二维数组来表示棋盘,并通过判断数组中的元素来确定当前位置是否已经有棋子•使用鼠标事件监听器来实现玩家的落子操作•使用算法判断胜负条件,例如遍历棋盘判断是否有五个连续的棋子•使用菜单栏和对话框来实现重新开始和退出游戏的选项3. 实现3.1 游戏界面设计我们将使用Java Swing库来创建游戏界面。

首先,我们需要创建一个主窗口,并设置其大小、标题和布局。

然后,在主窗口上添加一个棋盘面板和一个状态栏面板。

在棋盘面板上,我们使用GridLayout布局将其分割为15行15列的格子。

每个格子可以是一个按钮,用于玩家落子操作。

同时,我们还需要在每个格子上显示当前位置是否已经有棋子。

在状态栏面板上,我们将显示当前玩家的提示信息(轮到哪一方落子)以及胜利者信息(如果有)。

3.2 落子操作实现为了实现玩家的落子操作,我们需要使用鼠标事件监听器。

当玩家点击某个格子时,程序会捕捉到鼠标点击事件,并根据当前玩家的身份在对应的位置上落下棋子。

为了判断当前位置是否已经有棋子,我们可以使用一个二维数组来表示棋盘。

java课程设计报告_五子棋

java课程设计报告_五子棋

目录第一章软件平台……………………………游戏设计思路…………………………第二章小游戏五子棋的开发过程………………第一节JAVA基础知识………………………第二节启动程序的分析……………………第三节游戏设计过程………………………第三章总结…………………………………………第四章参考文献……………………………………第五章附录…………………………………………游戏设计思路:第一节 java程序基础知识本系统有4个程序每个程序都导入了不同的包和类运用了不同的所学知识。

不同的类和包提供的方法、类型等都不同,本程序还使用了继承。

以至使其能够完成不同的功能。

本节主要讲述本系统所使用的基础知识。

1、类的基础<1、类的定义JAVA中的类实质上是一种对象类型,它是对具有相同属性和相同行为对象的一种抽象。

类是java程序中最小的组成单位。

<2、 Java中类定义的格式为:[类修饰符] class 类名 [extends 基类] [implements 接口]{// 成员变量声明(Member variable declaration)// 成员方法声明(Member method declaration)}其中,class、extends和implements都是Java的关键字。

类修饰符、extends和implements是关于修饰符、继承和接口的容。

2、继承继承性是面向对象程序设计语言的一个重要特征,通过继承可以实现代码的复用。

Java语言中,所有的类都是直接或间接的继承 ng.object类而得到的。

被继承的类称为基类或父类,继承而的来的类成为子类。

子类继承基类的方法和属性,同时也可以修改基类的方法和属性,并增加自己新的属性和方法。

Java不支持多重继承。

即一个子类不能拥有两个或以上的父类。

3、包<1、包的定义在Java中,把相关的代码组织到一起,称为“包”。

包市一种将相关类、接口或其他包组织起来的集合体,目的是为了将包含类代码的文件组织起来,易于查找和使用。

java课程设计报告五子棋

java课程设计报告五子棋

计算机网络技术专业专业代码:590102《动态网站基础程序设计》课程设计班级:网站1101班学号:20112749 20113170 20110394 20114839 20112646 20112647 20113619 20112144 20112925姓名:兰辉程进呈向子剑万晨刘开鑫刘燕平周莹黄双凤徐玉书课题:单机版五子棋指导教师:胡志锋答辩日期:2022年4月27日目录一、任务描述 (1)二、任务分析 (1)1、OOA分析 (1)2、OOD分析 (1)3、java源文件及其功能 (3)4、ChessBoard类使用的方法及功能 (3)三、任务解决过程与方法 (4)1、主窗体设计 (5)2、棋子设计 (7)3、棋盘对弈算法设计 (8)四、运行结果 (16)1、图4.1 (16)2、图4.2 (16)五、总结 (17)一、任务描述设计一个18╳18围棋棋盘由两玩家交替进行对战并可以实现以下功能1.选择落子的先后顺序。

2.重置棋盘。

3.刷新重新开始。

4.退出提示并且规定退出者判为负,但退出过程中要有提示。

以防不小心点错了。

最后判断某一方是否为五子连珠。

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

2.在游戏界面,有开始,退出,悔棋。

二、任务分析五子棋是一种深受大众喜爱的棋牌类游戏,其规则简单,变化多端,非常富有趣味性。

这里设计和实现了双人对下的五子棋程序。

根据当前最后一个落子的情况来判断来判断胜负,实际上需要从四个位置判断,以该子为出发点的水平、竖直及两条分别为45度角和135度角的线,目的是看在这四个方向是否最后落子的一个构成连续五个的棋子,如果是的话,就表示该盘棋局已经分出胜负。

该游戏还提供悔棋的功能。

OOA分析:单机版五子棋游戏的程序由chessboard.java、point.java和startchessjframe.java三个文件组成。

Chessboard.java由兰辉、向子剑、程进呈完成。

java课程设计五子棋游戏完整版

java课程设计五子棋游戏完整版

沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学算下一步棋,isMatrix位true参数为插入点棋格坐标,否则参数为插入点像素坐标。

当游戏结束的时候使用Graphics g调用方法,在游戏过程中如果是黑方或是白方获胜在棋盘中就会显示是哪方获胜。

3.设计结果与分析(1)当进入到游戏当中可以选择是哪个颜色的棋先出,选择好之后便可以单机开始进行下棋,如果在游戏过程中出现什么问题可以单机再来一局重新开始游。

五子棋游戏的主界面如图2所示:图2.程序主界面(2)如果实黑棋先开始那么开始后的界面中先出的棋显示的是黑棋,如果是白棋先出则显示的是白棋,以黑棋为例如图3所示:沈阳大学图3.黑棋先出的界面图(3)对于五子棋游戏,无论人机对战,还是双人对战,都需要判断棋盘上是否存在五子连珠情况,这既是游戏名字的由来,也是游戏结束的标志。

判断五子连珠的原理是从横,竖,左斜线,右斜线4条线上判断是否存在5个相连的同类棋子,黑棋的五个棋子在横、竖或斜方向上连接成一线即为该方赢如图4所示:沈阳大学图4.游戏结束界面(4)白棋的五个棋子在横、竖或斜方向上连接成一线即为该方赢如图4所示:沈阳大学图5.白棋胜利界面图4.设计体会通过这次课程设计,我进一步加深对基础理论的理解,扩大专业知识面,对收集资料、查阅文献、方案制定等实践方面得到了很好的锻练,促进对所学知识应用能力的提高。

同时我渐渐的复习了Java使用方法和编程语法,之后的编程过程也相对得心应手,基本完成了预期计划的要求。

在此感谢我的指导老师—原玥老师,她在课题的研究上不遗余力的给予指导。

她严谨的治学态度深深的影响了我,使我受益匪浅!这个课设题对我来说有一定的挑战性,因为我自己也不知道自己到底学到了一个什么样的境界。

但可以肯定,这个课设题的要求绝对在我的能力范围以上。

之所以选择这个题目是想逼着自己去查更多的资料,学到更多的东西。

结果也确实是这样的,我在这次课设中学到了不少东西,也理解了许多原来不理解的东西。

java五子棋课程设计报告总结

java五子棋课程设计报告总结

java五子棋课程设计报告总结一、引言五子棋是一种古老的棋类游戏,它的规则简单易懂,但是却有很高的策略性和趣味性。

在计算机科学领域中,五子棋也是一个重要的研究对象。

本次课程设计旨在通过使用Java语言实现一个简单的五子棋游戏,并且了解一些基本的人工智能算法。

二、需求分析1. 功能需求(1)实现基本的五子棋游戏功能,包括落子、判断胜负等。

(2)实现人机对弈功能,即用户可以选择与计算机进行对弈。

(3)实现网络对战功能,即用户可以选择与其他玩家进行在线对弈。

2. 非功能需求(1)界面美观、易用性好。

(2)程序运行稳定、流畅。

三、设计方案1. 界面设计使用Java Swing库来实现程序界面。

主要包括菜单栏、工具栏和游戏主界面。

菜单栏包括文件菜单和帮助菜单;工具栏包括开始新游戏、悔棋和撤销悔棋等按钮;游戏主界面包括棋盘和落子动画等。

2. 程序设计(1)基本数据结构使用二维数组来存储棋盘的状态,其中0表示空位,1表示黑子,2表示白子。

使用栈来实现悔棋和撤销悔棋功能。

(2)游戏逻辑通过监听鼠标点击事件来实现用户落子。

每次落子后判断胜负,并且交换下一步落子的颜色。

在人机对弈模式下,计算机会根据当前局面使用基本的博弈树搜索算法来选择最优的落子位置。

(3)网络对战使用Socket编程实现网络对战功能。

用户可以选择创建游戏或加入游戏。

创建游戏后等待其他玩家加入,加入游戏后与对方进行对弈。

四、实现过程1. 界面实现使用Java Swing库中的各种组件来实现程序界面,并且通过布局管理器来控制组件的位置和大小。

2. 程序实现(1)基本数据结构和游戏逻辑的实现比较简单,主要是通过循环和条件语句来控制程序流程。

(2)人工智能算法的实现比较复杂。

我们采用了基本的博弈树搜索算法,在每次落子后生成当前局面下所有可能的落子位置,并且评估每个位置的得分,选择得分最高的位置作为计算机下一步的落子位置。

(3)网络对战功能的实现涉及到Socket编程和多线程编程等技术,需要仔细考虑各种异常情况和线程同步问题。

java课程设计报告五子棋

java课程设计报告五子棋

工作原理图2.2功能的规划1.建立一个棋盘类,绘制棋盘的样式,在棋盘面板上添加各种按钮及相应胡触发事件。

同时注意面板的设计,使面板设计的尽量胡的合理美观。

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;}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)){ //判断输赢1lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");intGame_Start=0;}if (Game_win_2(x/20,y/20)){//判断输赢2lblWin.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 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;}}3.3实现聊天功能类package NetchatClient;import java.awt.*;import java.awt.event.*;import .*;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 进入游戏的界面分析:游戏开始的界面有三个选择项,用户可以选择相应的角色,选择完毕后点击开始进入游戏。

java五子棋报告

java五子棋报告

五子棋一、程序功能介绍设计一个20*20的五子棋盘,由两个玩家交替下子,并且可以实现以下功能:1.鼠标点击横竖线交汇处落子2.通过落子使得五个黑子或者五个白子在一条横线、竖线或斜线上2.重新开始按钮刷新重新开始3. 检查是否实现了五子连珠4. 有一方五子连珠时提示结果5.结束按钮结束程序二、课程设计过程1.如图一:程序流程图2.程序功能设计(1)先写draw类,在类中先画出一个Jframe窗口体,在这个窗口体上增加重新开始,退出,和主棋盘按钮。

并且设置监听按钮的监听。

并在draw类中设置主函数启动程序。

(2)fivechess类实现程序的功能,定义wh_array二维数组表示棋盘。

定义wh_arr一维数组,将wh_array值通过从上往下转换成一维,可用于判断输赢。

定义paintComponent(Graphics g)绘图函数,将整个棋盘给画出。

3.程序中用的变量、方法、类等class fivechess extends JPanel{} //定义变量,落子监听,判断输赢int[][] wh_array = new int[20][20]; // 定义二维数组,表示棋子在棋盘的位置int[] wh_arr = new int[430]; // 定义一维数组,转换二维数组,判断是否连线public void mouseClicked(MouseEvent e) // 单击鼠标落子并且判断输赢public fivechess() {} // 鼠标操作protected void paintComponent(Graphics g) // 绘图函数public Dimension getPerferredSize() //返回期盼大小public class draw extends JFrame {} //添加按钮,设置监听,启动程序public draw() //绘制窗口,增加重新开始和退出按钮b.addActionListener() //重新开始按钮设置监听exit. addActionListener()//退出按钮设置监听public static void main(String args[]){}//主函数启动程序三、程序设计的完整代码及注解//双人对战五子棋import java.awt.*;import java.awt.event.*;import javax.swing.*;class fivechess extends JPanel { // 函数int wh_color, x1, y1, wh_x, wh_y, wh_i, wh_j, wh_arri, wh_stop = 3;// 定义各种整型变量//x1,y1表示坐标wh_x,wh_y圆大小坐标wh_i,wh_j二维数组boolean wh_rf; // 定义布尔型变量,判断玩家String s;int[][] wh_array = new int[20][20]; // 定义二维数组int[] wh_arr = new int[430]; // 定义一维数组public fivechess() { // 鼠标操作for (int i = 0; i < 20; i++) { // 给二维数组赋值为0for (int j = 0; j < 20; j++) {wh_array[i][j] = 0; // 赋值为0}}for (int i = 0; i < 400; i++) { // 给一维数组赋初始值0wh_arr[i] = 0;}addMouseListener(new MouseListener() { // 鼠标监听器public void mouseClicked(MouseEvent e) // 单击鼠标{Graphics g = getGraphics();if (wh_stop == 3) // 当wh_stop==3时运行程序{x1 = e.getX(); // 返回鼠标当前x坐标y1 = e.getY(); // 返回鼠标当前y坐标wh_i = (x1 - 54) / 32; // 计算列值wh_j = (y1 - 34) / 32; // 计算行值wh_arri = 20 * wh_j + wh_i; // 计算二维数组变为一维数组时的对应值if (x1 > 54 && x1 < 694 && y1 > 34 && y1 < 674) // 在棋盘范围内单击鼠标才运行程序{if (wh_array[wh_i][wh_j] == 0) // 当二维数组取值为0时运行程序{wh_rf = !wh_rf; // Boolean值单击后循环变化if (wh_rf == true) // Boolean值为TRUE时{wh_color = 1; // 令wh_color=1s = "黑棋";wh_array[wh_i][wh_j] = 1; // 对应的二维数组值赋为1wh_arr[wh_arri] = 1; // 对应的一维数组赋值为1}if (wh_rf == false) // Boolean值为FALSE时{wh_color = 2; // wh_color为2s = "白棋";wh_array[wh_i][wh_j] = 2; // 对应的二维数组值赋为2wh_arr[wh_arri] = 2; // 对应的一维数组值赋为2}for (int i = 0; i < 20; i++) // 确定鼠标位置的范围{for (int j = 0; j < 20; j++) {if (x1 >= 54 + i * 32&& x1 < 54 + (i + 1) * 32&& y1 >= 34 + j * 32&& y1 < 34 + (j + 1) * 32)// 鼠标在此范围内时{wh_x = 54 + (i) * 32 + 1; // 取这个小方格的左上角x坐标值+1wh_y = 34 + (j) * 32 + 1; // 取这个小方格的左上角y坐标值+1}}}if (wh_color == 1) // 当棋子为黑色时{g.setColor(Color.BLACK); // 设置颜色}if (wh_color == 2) // 如果棋子为白色{g.setColor(Color.WHITE); // 设置颜色}g.fillOval(wh_x, wh_y, 30, 30); // 在这个小方格范围内画圆形}}for (int i = 0; i < 395; i++) // 判断黑白双方谁胜利{g.setColor(Color.RED);if ((wh_arr[i] == 1 && wh_arr[i + 1] == 1&& wh_arr[i + 2] == 1 && wh_arr[i + 3] == 1&& wh_arr[i + 4] == 1 && (i + 4) / 20 == i / 20)|| // 判断横行黑子连续为5个(wh_arr[i] == 1 && wh_arr[i + 20] == 1&& wh_arr[i + 40] == 1&& wh_arr[i + 60] == 1&& wh_arr[i + 80] == 1 && (i + 4) / 20 == i / 20)|| // 判断竖行黑子连续为5个(wh_arr[i] == 1 && wh_arr[i + 19] == 1&& wh_arr[i + 2 * 19] == 1&& wh_arr[i + 3 * 19] == 1&& wh_arr[i + 4 * 19] == 1 && (i - 4) / 20 == i / 20)|| // 判断斜左黑子连续为5个(wh_arr[i] == 1 && wh_arr[i + 21] == 1&& wh_arr[i + 2 * 21] == 1&& wh_arr[i + 3 * 21] == 1 && wh_arr[i + 4 * 21] == 1)) // 判断斜右黑子连续为5个{g.drawString("黑棋胜利", 300, 300); // 显示黑棋胜利wh_stop = 0; // 当胜利时赋值为0,再次运行时将停止}if ((wh_arr[i] == 2 && wh_arr[i + 1] == 2&& // 判断白棋子wh_arr[i + 2] == 2 && wh_arr[i + 3] == 2&& wh_arr[i + 4] == 2 && (i + 4) / 20 == i / 20)|| // 判断横行白子连续为5个(wh_arr[i] == 2 && wh_arr[i + 20] == 2&& wh_arr[i + 40] == 2&& wh_arr[i + 60] == 2&& wh_arr[i + 80] == 2 && (i + 4) / 20 == i / 20)|| // 判断竖行白子连续为5个(wh_arr[i] == 2 && wh_arr[i + 19] == 2&& wh_arr[i + 2 * 19] == 2&& wh_arr[i + 3 * 19] == 2&& wh_arr[i + 4 * 19] == 2 && (i - 4) / 20 == i / 20)|| // 判断斜左白子连续为5个(wh_arr[i] == 2 && wh_arr[i + 21] == 2&& wh_arr[i + 2 * 21] == 2&& wh_arr[i + 3 * 21] == 2 && wh_arr[i + 4 * 21] == 2)) // 判断斜行连续5子{g.drawString("白棋胜利", 300, 300);wh_stop = 0;}}}} // 单击事件结束public void mouseEntered(MouseEvent e) // 鼠标进入组件的事件{}public void mouseExited(MouseEvent e) // 鼠标离开组件的事件{}public void mousePressed(MouseEvent e) // 鼠标按下时的事件{}public void mouseReleased(MouseEvent e) // 鼠标放开时的事件{}}); // 监听器结束addMouseMotionListener(new MouseMotionListener() // 鼠标motion监听{public void mouseMoved(MouseEvent e) // 处理鼠标移动事件{}public void mouseDragged(MouseEvent e) // 处理鼠标拖动事件{}});}protected void paintComponent(Graphics g) // 绘图函数{g.setColor(Color.gray);g.fill3DRect(0, 0, 748, 728, true);g.setColor(Color.BLACK); // 设置颜色for (int i = 0; i < 20; i++) // 循环画棋盘{g.drawLine(70, 50 + i * 32, 678, 50 + i * 32); // 画棋盘的横线g.drawLine(70 + i * 32, 50, 70 + i * 32, 658); // 画棋盘的纵线}g.drawString("五子棋", 300, 30); // 在面板上输出"五子棋"wh_stop = 3; // 刷新后wh_stop由0变为3可以响应buttonfor (int i = 0; i < 20; i++) // 给二维数组赋值为0{for (int j = 0; j < 20; j++) {wh_array[i][j] = 0; // 赋值为0}}for (int i = 0; i < 400; i++) { // 给一维数组赋初始值0 wh_arr[i] = 0;}}public Dimension getPerferredSize() {return new Dimension(748, 728);}}public class draw extends JFrame { // 函数JTextField t;public draw() //{super("五子棋"); // 窗口名Container c = getContentPane(); // 返回当前内容窗值c.setLayout(null);fivechess wh = new fivechess();wh.setBounds(0, 0, 748, 728); // 设置panel大小JButton b = new JButton("重新开始"); // 定义按钮JButton exit = new JButton("退出"); // 定义按钮c.add(exit);c.add(b); // 添加按钮c.add(wh); // 添加panelb.setBounds(70, 20, 100, 20); // 设置按钮大小exit.setBounds(580, 20, 80, 20);b.addActionListener(new ActionListener() // 设置监听{public void actionPerformed(ActionEvent e) {repaint(); // 重画}});exit.addActionListener(new ActionListener() // 设置监听{public void actionPerformed(ActionEvent e) {System.exit(0);}});}public static void main(String args[]) // 主函数{draw app = new draw(); //app.setLocation(300, 0); // 设置窗口位置app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭框架行为属性app.setSize(748, 728); // 设置面板框架frame大小app.setVisible(true); // 设置可见app.setResizable(false);}}四、程序运行的结果分析1.如图二:进入游戏界面2.如图三:落子图三落子3.如图四:结束游戏图四游戏结束五、课程设计总结通过短短的一个学期java的学习,我们从一个对JAVA编程不懂的学生到现在可以试着用JAVA 进行简单程序的设计和编写,也更加了解了面向对象的思想。

《JAVA程序设计》课程设计-五子棋小游戏

《JAVA程序设计》课程设计-五子棋小游戏

《JAVA程序设计》课程设计-五子棋小游戏《JAVA程序设计》课程设计题目: 五子棋小游戏业: 信息与计算科学专学号: 070930205等姓名:指导教师: 成绩:二00九年十二月九日1.课程设计研究背景及意义五子棋是一种两人对弈的纯策略型棋类游戏,是起源于中国古代的传统黑白棋种之一。

发展于日本,流行于欧美。

容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。

然则看似很简单的一个小游戏,却对我们这组刚接触JAVA编程的成员来说却是一个不错的挑战,由于水平不限不能做成和电脑进行对战,也对于和其它电脑联机对战的模式不太清楚,故做成一个自己和自己对战的五子棋来考验我们的JAVA 的技术。

2.课程设计题目描述和要求题目:五子棋小游戏游戏主要界面如下:游戏规则:1,棋子分为黑白两色,采用19×19棋盘。

2,自己和自己对战,白子和黑子交替下,直到白子或黑子一方有五粒子连在一起,最先完成五粒子连在一起的一方为胜利的一方(可以是横、竖、斜、反斜)。

3,允许悔棋,且允许一直悔到棋盘上没有棋子了,悔棋后允许恢复。

当悔棋后下子了,则不允许再恢复了。

4,有棋子的地方不允许再下棋子了5,落子后不能移动或拿掉。

7,胜利后,棋局重新开始。

主要功能:1,鼠标点棋盘上的任意一点,棋子会落入离这点最近的一个交叉点处。

2,白子和黑子交替下。

3,当下到一半时,可以保存进度。

4,关闭再打开后,可以重新读取进度再接着下。

5,允许悔棋,且允许一直悔到棋盘上没有棋子了。

6,悔棋后允许恢复。

当悔棋后下子了,则不允许再恢复了。

7,下棋的过程中,随时可以重新开始。

8,有棋子的地方不允许再下子了。

9,当悔到没有棋子的时候会弹出消息。

10,任意一方胜利后会弹出消息11,恢复的步数超过了悔棋的步数的时候会弹出消息12,当任意一方胜利后,棋局重新开始。

13,设有菜单栏,玩家可以点菜单来完成某种操作。

五子棋JAVA实验报告 (1)

五子棋JAVA实验报告 (1)

JA V A实验报告课程名称:JAVA程序设计教程实验题目:五子棋院系:公共管理学院信息管理系班级:信息管理与信息系统一班学号:2013190325姓名:谢巧婷五子棋JA V A实验报告一、实验目的和要求1、能够用编程语言实现一个简单的五子棋程序2、在实际系统中使用、实现人工智能的相关算法3、进一步加深对人工智能算法的理解二、五子棋的基本常识与原理1、五子棋的基本常识与任何一种竞技棋一样,五子棋的每一局棋也分为三个阶段:开局,中局和残局。

五子棋的开始阶段称为开局,或称布局。

其开局阶段是十分短暂的,大约在七着与十几着之间。

在这一阶段的争夺中,双方的布局,应对将对以后的胜负起着极为关键的作用。

在开局阶段取得的形势好坏,主动与被动,先手与后手的优劣程度,往往直接影响中局的战斗。

因此积极处理好开局和开局向中局的过渡十分重要。

五子棋是从一至五,逐渐布子,发展连系,同时运用限制和反限制的智慧,在连子的过程中为自己的棋子争得相对的主动权和优势,逐步扩展优势,或者从劣势转化为优势,击溃对方的防线,最后连五取胜或抓禁手取胜或迫使对方投子认负。

2、五子棋比赛的相关规定(1)职业连珠规则a.黑方先下子,白后下,从天元开始相互顺序落子。

b.最先在棋盘横向、竖向、斜向形成连续的相同色五个棋子的一方为胜。

c.黑棋禁手判负,白棋无禁手。

黑棋禁手包括“三三”(包括“四三三”)、“四四”(包括“四四三”)、“长连”。

即黑棋只能以“四三”取胜。

有关术语解释请见图示说明。

d.如分不出胜负,则定为平局。

对局中拔子、中途退场均判为负。

e.五连与禁手同时形成,判胜。

(2)比赛中的规定和特例a.对局开始前,双方猜子,大数减小数,单数交换,偶数不换。

b.白棋第一手(即盘面第二着棋)应在天元为界自己一侧布子,主要以示尊重对方,之后双方可任意行子。

c.对局中双方应遵守“职业连珠五子棋规则”,如出现争议,应由裁判判定。

d.对局中掉子(棋子掉落在棋盘上)的一方判负。

java+五子棋报告(完整版)

java+五子棋报告(完整版)

下面的源代码分为4个文件;(2)chessInterface.java:客户端的界面。

(3)chessPad.java:棋盘的绘制。

(4)chessServer.java:服务器端。

可同时容纳50个人同时在线下棋,聊天。

public void acceptMessage(String recMessage){if(recMessage.startsWith("/userlist ")){StringTokenizer userToken=new StringTokenizer(recMessage," ");int userNumber=0;erList.removeAll();erChoice.removeAll();erChoice.addItem("所有人");while(userToken.hasMoreT okens()){String user=(String)userToken.nextToken(" ");if(userNumber>0 && !user.startsWith("[inchess]")){erList.add(user);erChoice.addItem(user);}userNumber++;}erChoice.select("所有人");}else if(recMessage.startsWith("/yourname ")){chessclient.chessClientName=recMessage.substring(10);chessclient.setTitle("Java五子棋客户端"+"用户名:"+chessclient.chessClientName); }else if(recMessage.equals("/reject")){try{chessclient.chesspad.statusText.setText("不能加入游戏");chessclient.controlpad.cancelGameButton.setEnabled(false);chessclient.controlpad.joinGameButton.setEnabled(true);chessclient.controlpad.creatGameButton.setEnabled(true);catch(Exception ef){chessclient.chatpad.chatLineArea.setText("chessclient.chesspad.chessSocket.close无法关闭");}chessclient.controlpad.joinGameButton.setEnabled(true);}else if(recMessage.startsWith("/peer ")){chessclient.chesspad.chessPeerName=recMessage.substring(6);if(chessclient.isServer){chessclient.chesspad.chessColor=1;chessclient.chesspad.isMouseEnabled=true;chessclient.chesspad.statusText.setText("请黑棋下子");}else if(chessclient.isClient){chessclient.chesspad.chessColor=-1;chessclient.chesspad.statusText.setText("已加入游戏,等待对方下子...");}}else if(recMessage.equals("/youwin")){chessclient.isOnChess=false;chessclient.chesspad.chessVictory(chessclient.chesspad.chessColor);chessclient.chesspad.statusText.setText("对方退出,请点放弃游戏退出连接"); chessclient.chesspad.isMouseEnabled=false;}else if(recMessage.equals("/OK")){chessclient.chesspad.statusText.setText("创建游戏成功,等待别人加入...");}else if(recMessage.equals("/error")){chessclient.chatpad.chatLineArea.append("传输错误:请退出程序,重新加入\n");}else{chessclient.chatpad.chatLineArea.append(recMessage+"\n");chessclient.chatpad.chatLineArea.setCaretPosition(chessclient.chatpad.chatLineArea.getT ext().length());}public void run(){String message="";try{while(true){message=chessclient.in.readUTF();acceptMessage(message);}}catch(IOException es){}}}public class chessClient extends Frame implements ActionListener,KeyListener {userPad userpad=new userPad();chatPad chatpad=new chatPad();controlPad controlpad=new controlPad();chessPad chesspad=new chessPad();inputPad inputpad=new inputPad();Socket chatSocket;DataInputStream in;DataOutputStream out;String chessClientName=null;String host=null;int port=4331;boolean isOnChat=false; //在聊天?boolean isOnChess=false; //在下棋?boolean isGameConnected=false; //下棋的客户端连接?boolean isServer=false; //如果是下棋的主机boolean isClient=false; //如果是下棋的客户端Panel southPanel=new Panel();Panel northPanel=new Panel();Panel centerPanel=new Panel();Panel westPanel=new Panel();Panel eastPanel=new Panel();chessClient(){super("Java五子棋客户端");setLayout(new BorderLayout());host=controlpad.inputIP.getText();westPanel.setLayout(new BorderLayout()); westPanel.add(userpad,BorderLayout.NORTH); westPanel.add(chatpad,BorderLayout.CENTER); westPanel.setBackground(Color.pink);inputpad.input word s.addKeyListener(this); chesspad.host=controlpad.inputIP.getText();centerPanel.add(chesspad,BorderLayout.CENTER); centerPanel.add(inputpad,BorderLayout.SOUTH); centerPanel.setBackground(Color.pink);controlpad.connectButton.addActionListener(this); controlpad.creatGameButton.addActionListener(this); controlpad.joinGameButton.addActionListener(this); controlpad.cancelGameButton.addActionListener(this); controlpad.exitGameButton.addActionListener(this);controlpad.creatGameButton.setEnabled(false); controlpad.joinGameButton.setEnabled(false); controlpad.cancelGameButton.setEnabled(false);southPanel.add(controlpad,BorderLayout.CENTER); southPanel.setBackground(Color.pink);addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e) {if(isOnChat){try{chatSocket.close();}catch(Exception ed){}}if(isOnChess || isGameConnected){try{chesspad.chessSocket.close();}catch(Exception ee){}}System.exit(0);}public void windowActivated(WindowEvent ea) {}});add(westPanel,BorderLayout.WEST);add(centerPanel,BorderLayout.CENTER); add(southPanel,BorderLayout.SOUTH);pack();setSize(670,548);setVisible(true);setResizable(false);validate();}public boolean connectServer(String serverIP,int serverPort) throws Exception{try{chatSocket=new Socket(serverIP,serverPort);in=new DataInputStream(chatSocket.getInputStream());out=new DataOutputStream(chatSocket.getOutputStream());clientThread clientthread=new clientThread(this);clientthread.start();isOnChat=true;return true;}catch(IOException ex){chatpad.chatLineArea.setT ext("chessClient:connectServer:无法连接,建议重新启动程序\n");}return false;}public void actionPerformed(ActionEvent e){if(e.getSource()==controlpad.connectButton){host=chesspad.host=controlpad.inputIP.getText();try{if(connectServer(host,port)){chatpad.chatLineArea.setT ext("");controlpad.connectButton.setEnabled(false);controlpad.creatGameButton.setEnabled(true);controlpad.joinGameButton.setEnabled(true);chesspad.statusText.setText("连接成功,请创建游戏或加入游戏");}}catch(Exception ei){chatpad.chatLineArea.setT ext("controlpad.connectButton:无法连接,建议重新启动程序\n");}}if(e.getSource()==controlpad.exitGameButton){if(isOnChat){try{chatSocket.close();}catch(Exception ed){}}if(isOnChess || isGameConnected){try{chesspad.chessSocket.close();}catch(Exception ee){}}System.exit(0);}if(e.getSource()==controlpad.joinGameButton){String selectedUser=erList.getSelectedItem();if(selectedUser==null || selectedUser.startsWith("[inchess]") || selectedUser.equals(chessClientName)){chesspad.statusText.setText("必须先选定一个有效用户");}else{try{if(!isGameConnected){if(chesspad.connectServer(chesspad.host,chesspad.port)) {isGameConnected=true;isClient=true;controlpad.creatGameButton.setEnabled(false);controlpad.joinGameButton.setEnabled(false);controlpad.cancelGameButton.setEnabled(true);chesspad.chessthread.sendMessage("/joingame "+erList.getSelectedItem()+" "+chessClientName);}}else{isOnChess=true;isClient=true;controlpad.creatGameButton.setEnabled(false);controlpad.joinGameButton.setEnabled(false);controlpad.cancelGameButton.setEnabled(true);chesspad.chessthread.sendMessage("/joingame "+erList.getSelectedItem()+" "+chessClientName);}}catch(Exception ee){isGameConnected=false;isOnChess=false;isClient=false;controlpad.creatGameButton.setEnabled(true);controlpad.joinGameButton.setEnabled(true);controlpad.cancelGameButton.setEnabled(false);chatpad.chatLineArea.setT ext("chesspad.connectServer无法连接\n"+ee);}}}if(e.getSource()==controlpad.creatGameButton){try{if(!isGameConnected){if(chesspad.connectServer(chesspad.host,chesspad.port)){isGameConnected=true;isServer=true;controlpad.creatGameButton.setEnabled(false);controlpad.joinGameButton.setEnabled(false);controlpad.cancelGameButton.setEnabled(true);chesspad.chessthread.sendMessage("/creatgame "+"[inchess]"+chessClientName); }}else{isOnChess=true;isServer=true;controlpad.creatGameButton.setEnabled(false);controlpad.joinGameButton.setEnabled(false);controlpad.cancelGameButton.setEnabled(true);chesspad.chessthread.sendMessage("/creatgame "+"[inchess]"+chessClientName); }}catch(Exception ec){isGameConnected=false;isOnChess=false;isServer=false;controlpad.creatGameButton.setEnabled(true);controlpad.joinGameButton.setEnabled(true);controlpad.cancelGameButton.setEnabled(false);ec.printStackTrace();chatpad.chatLineArea.setT ext("chesspad.connectServer无法连接\n"+ec);}}if(e.getSource()==controlpad.cancelGameButton){if(isOnChess){chesspad.chessthread.sendMessage("/giveup "+chessClientName);chesspad.chessVictory(-1*chesspad.chessColor);controlpad.creatGameButton.setEnabled(true);controlpad.joinGameButton.setEnabled(true);controlpad.cancelGameButton.setEnabled(false);chesspad.statusText.setText("请建立游戏或者加入游戏");}if(!isOnChess){controlpad.creatGameButton.setEnabled(true);controlpad.joinGameButton.setEnabled(true);controlpad.cancelGameButton.setEnabled(false);chesspad.statusText.setText("请建立游戏或者加入游戏");}isClient=isServer=false;}}public void keyPressed(KeyEvent e){TextField inputWords=(TextField)e.getSource();if(e.getKeyCode()==KeyEvent.VK_ENTER){if(erChoice.getSelectedItem().equals("所有人")){try{out.writeUTF(inputWords.getText());inputWords.setText("");}catch(Exception ea){chatpad.chatLineArea.setT ext("chessClient:KeyPressed无法连接,建议重新连接\n"); erList.removeAll();erChoice.removeAll();inputWords.setText("");controlpad.connectButton.setEnabled(true);}}else{try{out.writeUTF("/"+erChoice.getSelectedItem()+" "+inputWords.getText()); inputWords.setText("");}catch(Exception ea){chatpad.chatLineArea.setT ext("chessClient:KeyPressed无法连接,建议重新连接\n"); erList.removeAll();erChoice.removeAll();inputWords.setText("");controlpad.connectButton.setEnabled(true);}}}}public void keyTyped(KeyEvent e){}public void keyReleased(KeyEvent e){}public static void main(String args[]){chessClient chessClient=new chessClient();}}/******************************************************************************************下面是:chessInteface.java******************************************************************************************/import java.awt.*;import java.awt.event.*;import java.io.*;import .*;class userPad extends Panel{List userList=new List(10);userPad(){setLayout(new BorderLayout());for(int i=0;i<50;i++){userList.add(i+"."+"没有用户");}add(userList,BorderLayout.CENTER);}}class chatPad extends Panel{TextArea chatLineArea=new TextArea("",18,30,TextArea.SCROLLBARS_VERTICAL_ONLY);chatPad(){setLayout(new BorderLayout());add(chatLineArea,BorderLayout.CENTER);}}class controlPad extends Panel{Label IPlabel=new Label("IP",Label.LEFT);TextField inputIP=new TextField("localhost",10);Button connectButton=new Button("连接主机");Button creatGameButton=new Button("建立游戏");Button joinGameButton=new Button("加入游戏");Button cancelGameButton=new Button("放弃游戏");Button exitGameButton=new Button("关闭程序");controlPad(){setLayout(new FlowLayout(FlowLayout.LEFT));setBackground(Color.pink);add(IPlabel);add(inputIP);add(connectButton);add(creatGameButton);add(joinGameButton);add(cancelGameButton);add(exitGameButton);}}class inputPad extends Panel{TextField inputWords=new TextField("",40);Choice userChoice=new Choice();inputPad(){setLayout(new FlowLayout(FlowLayout.LEFT));for(int i=0;i<50;i++){userChoice.addItem(i+"."+"没有用户");}userChoice.setSize(60,24);add(userChoice);add(inputWords);}}/********************************************************************************************** 下面是:chessPad.java**********************************************************************************************/ import java.awt.*;import java.awt.event.*;import java.io.*;import .*;import java.util.*;class chessThread extends Thread{chessPad chesspad;chessThread(chessPad chesspad){this.chesspad=chesspad;}public void sendMessage(String sndMessage){try{chesspad.outData.writeUTF(sndMessage);}catch(Exception ea){System.out.println("chessThread.sendMessage:"+ea);}}public void acceptMessage(String recMessage){if(recMessage.startsWith("/chess ")){StringTokenizer userToken=new StringTokenizer(recMessage," ");String chessToken;String[] chessOpt={"-1","-1","0"};int chessOptNum=0;while(userToken.hasMoreT okens()){chessToken=(String)userT oken.nextToken(" ");if(chessOptNum>=1 && chessOptNum<=3){chessOpt[chessOptNum-1]=chessToken;}chessOptNum++;}ChessPaint(Integer.parseInt(chessOpt[0]),Integer.parseInt(chessOpt[1]),Inte ger.parseInt(chessOpt[2]));}else if(recMessage.startsWith("/yourname ")){chesspad.chessSelfName=recMessage.substring(10);}else if(recMessage.equals("/error")){chesspad.statusText.setText("错误:没有这个用户,请退出程序,重新加入"); }else{//System.out.println(recMessage);}}public void run(){String message="";try{while(true){message=chesspad.inData.readUTF();acceptMessage(message);}}catch(IOException es){}}}class chessPad extends Panel implements MouseListener,ActionListener {int chessPoint_x=-1,chessPoint_y=-1,chessColor=1;int chessBlack_x[]=new int[200];int chessBlack_y[]=new int[200];int chessWhite_x[]=new int[200];int chessWhite_y[]=new int[200];int chessBlackCount=0,chessWhiteCount=0;int chessBlackWin=0,chessWhiteWin=0;boolean isMouseEnabled=false,isWin=false,isInGame=false;TextField statusText=new TextField("请先连接服务器");Socket chessSocket;DataInputStream inData;DataOutputStream outData;String chessSelfName=null;String chessPeerName=null;String host=null;int port=4331;chessThread chessthread=new chessThread(this);chessPad(){setSize(440,440);setLayout(null);setBackground(Color.pink);addMouseListener(this);add(statusText);statusText.setBounds(40,5,360,24);statusText.setEditable(false);}public boolean connectServer(String ServerIP,int ServerPort) throws Exception {try{chessSocket=new Socket(ServerIP,ServerPort);inData=new DataInputStream(chessSocket.getInputStream());outData=new DataOutputStream(chessSocket.getOutputStream()); chessthread.start();return true;}catch(IOException ex){statusText.setText("chessPad:connectServer:无法连接\n");}return false;}public void chessVictory(int chessColorWin){this.removeAll();for(int i=0;i<=chessBlackCount;i++){chessBlack_x[i]=0;chessBlack_y[i]=0;}for(int i=0;i<=chessWhiteCount;i++){chessWhite_x[i]=0;chessWhite_y[i]=0;}chessBlackCount=0;chessWhiteCount=0;add(statusText);statusText.setBounds(40,5,360,24);if(chessColorWin==1){ chessBlackWin++;statusText.setText("黑棋胜,黑:白为"+chessBlackWin+":"+chessWhiteWin+",重新开局,等待白棋下子...");}else if(chessColorWin==-1){chessWhiteWin++;statusText.setText("白棋胜,黑:白为"+chessBlackWin+":"+chessWhiteWin+",重新开局,等待黑棋下子...");}}public void getLocation(int a,int b,int color){if(color==1){chessBlack_x[chessBlackCount]=a*20;chessBlack_y[chessBlackCount]=b*20;chessBlackCount++;}else if(color==-1){chessWhite_x[chessWhiteCount]=a*20;chessWhite_y[chessWhiteCount]=b*20;chessWhiteCount++;}}public boolean checkWin(int a,int b,int checkColor){int step=1,chessLink=1,chessLinkTest=1,chessCompare=0;if(checkColor==1){chessLink=1;for(step=1;step<=4;step++){for(chessCompare=0;chessCompare<=chessBlackCount;chessCompare++){if(((a+step)*20==chessBlack_x[chessCompare]) && ((b*20)==chessBlack_y[chessCompare])){chessLink=chessLink+1;if(chessLink==5){return(true);}}}if(chessLink==(chessLinkTest+1))chessLinkTest++;elsebreak;}for(step=1;step<=4;step++){for(chessCompare=0;chessCompare<=chessBlackCount;chessCompare++){if(((a-step)*20==chessBlack_x[chessCompare]) && (b*20==chessBlack_y[chessCompare])){chessLink++;if(chessLink==5){return(true);}}}if(chessLink==(chessLinkTest+1))chessLinkTest++;elsebreak;}chessLink=1;chessLinkTest=1;for(step=1;step<=4;step++){for(chessCompare=0;chessCompare<=chessBlackCount;chessCompare++){if((a*20==chessBlack_x[chessCompare]) && ((b+step)*20==chessBlack_y[chessCompare])){chessLink++;if(chessLink==5){return(true);}}}if(chessLink==(chessLinkTest+1))chessLinkTest++;elsebreak;}for(step=1;step<=4;step++){for(chessCompare=0;chessCompare<=chessBlackCount;chessCompare++){if((a*20==chessBlack_x[chessCompare]) && ((b-step)*20==chessBlack_y[chessCompare])){chessLink++;if(chessLink==5){return(true);}}}if(chessLink==(chessLinkTest+1))chessLinkTest++;elsebreak;}chessLink=1;chessLinkTest=1;for(step=1;step<=4;step++){for(chessCompare=0;chessCompare<=chessBlackCount;chessCompare++){if(((a-step)*20==chessBlack_x[chessCompare]) && ((b+step)*20==chessBlack_y[chessCompare])){chessLink++;if(chessLink==5){return(true);}}}if(chessLink==(chessLinkTest+1))chessLinkTest++;elsebreak;}for(step=1;step<=4;step++){for(chessCompare=0;chessCompare<=chessBlackCount;chessCompare++){if(((a+step)*20==chessBlack_x[chessCompare]) && ((b-step)*20==chessBlack_y[chessCompare])){chessLink++;if(chessLink==5){return(true);}}}if(chessLink==(chessLinkTest+1))chessLinkTest++;elsebreak;}chessLink=1;chessLinkTest=1;for(step=1;step<=4;step++)for(chessCompare=0;chessCompare<=chessBlackCount;chessCompare++){if(((a+step)*20==chessBlack_x[chessCompare]) && ((b+step)*20==chessBlack_y[chessCompare])){chessLink++;if(chessLink==5){return(true);}}}if(chessLink==(chessLinkTest+1))chessLinkTest++;elsebreak;}for(step=1;step<=4;step++){for(chessCompare=0;chessCompare<=chessBlackCount;chessCompare++){if(((a-step)*20==chessBlack_x[chessCompare]) && ((b-step)*20==chessBlack_y[chessCompare])){chessLink++;if(chessLink==5){return(true);}}}if(chessLink==(chessLinkTest+1))chessLinkTest++;elsebreak;}}else if(checkColor==-1){chessLink=1;for(step=1;step<=4;step++){for(chessCompare=0;chessCompare<=chessWhiteCount;chessCompare++)if(((a+step)*20==chessWhite_x[chessCompare]) && (b*20==chessWhite_y[chessCompare])){chessLink++;if(chessLink==5){return(true);}}}if(chessLink==(chessLinkTest+1))chessLinkTest++;elsebreak;}for(step=1;step<=4;step++){for(chessCompare=0;chessCompare<=chessWhiteCount;chessCompare++){if(((a-step)*20==chessWhite_x[chessCompare]) && (b*20==chessWhite_y[chessCompare])){chessLink++;if(chessLink==5){return(true);}}}if(chessLink==(chessLinkTest+1))chessLinkTest++;elsebreak;}chessLink=1;chessLinkTest=1;for(step=1;step<=4;step++){for(chessCompare=0;chessCompare<=chessWhiteCount;chessCompare++){if((a*20==chessWhite_x[chessCompare]) && ((b+step)*20==chessWhite_y[chessCompare])){chessLink++;if(chessLink==5){return(true);}}}if(chessLink==(chessLinkTest+1))chessLinkTest++;elsebreak;}for(step=1;step<=4;step++){for(chessCompare=0;chessCompare<=chessWhiteCount;chessCompare++){if((a*20==chessWhite_x[chessCompare]) && ((b-step)*20==chessWhite_y[chessCompare])){chessLink++;if(chessLink==5){return(true);}}}if(chessLink==(chessLinkTest+1))chessLinkTest++;elsebreak;}chessLink=1;chessLinkTest=1;for(step=1;step<=4;step++){for(chessCompare=0;chessCompare<=chessWhiteCount;chessCompare++){if(((a-step)*20==chessWhite_x[chessCompare]) && ((b+step)*20==chessWhite_y[chessCompare])){chessLink++;if(chessLink==5){return(true);}}}if(chessLink==(chessLinkTest+1))chessLinkTest++;elsebreak;}for(step=1;step<=4;step++){for(chessCompare=0;chessCompare<=chessWhiteCount;chessCompare++){if(((a+step)*20==chessWhite_x[chessCompare]) && ((b-step)*20==chessWhite_y[chessCompare])){chessLink++;if(chessLink==5){return(true);}}}if(chessLink==(chessLinkTest+1))chessLinkTest++;elsebreak;}chessLink=1;chessLinkTest=1;for(step=1;step<=4;step++){for(chessCompare=0;chessCompare<=chessWhiteCount;chessCompare++){if(((a+step)*20==chessWhite_x[chessCompare]) && ((b+step)*20==chessWhite_y[chessCompare])){chessLink++;if(chessLink==5){return(true);}}}if(chessLink==(chessLinkTest+1))chessLinkTest++;elsebreak;}for(step=1;step<=4;step++){for(chessCompare=0;chessCompare<=chessWhiteCount;chessCompare++){if(((a-step)*20==chessWhite_x[chessCompare]) && ((b-step)*20==chessWhite_y[chessCompare])){chessLink++;if(chessLink==5){return(true);}}}if(chessLink==(chessLinkTest+1))chessLinkTest++;elsebreak;}}return(false);}public void paint(Graphics g){for (int i=40;i<=380;i=i+20){g.drawLine(40,i,400,i);}g.drawLine(40,400,400,400);for(int j=40;j<=380;j=j+20){g.drawLine(j,40,j,400);}g.drawLine(400,40,400,400);g.fillOval(97,97,6,6);g.fillOval(337,97,6,6);g.fillOval(97,337,6,6);g.fillOval(337,337,6,6);g.fillOval(217,217,6,6);}public void chessPaint(int chessPoint_a,int chessPoint_b,int color){chessPoint_black chesspoint_black=new chessPoint_black(this);chessPoint_white chesspoint_white=new chessPoint_white(this);if(color==1 && isMouseEnabled){getLocation(chessPoint_a,chessPoint_b,color);isWin=checkWin(chessPoint_a,chessPoint_b,color);if(isWin==false){chessthread.sendMessage("/"+chessPeerName+" /chess "+chessPoint_a+" "+chessPoint_b+" "+color);this.add(chesspoint_black);chesspoint_black.setBounds(chessPoint_a*20-7,chessPoint_b*20-7,16,16); statusText.setText("黑(第"+chessBlackCount+"步)"+chessPoint_a+" "+chessPoint_b+",请白棋下子");isMouseEnabled=false;}else{chessthread.sendMessage("/"+chessPeerName+" /chess "+chessPoint_a+" "+chessPoint_b+" "+color);this.add(chesspoint_black);chesspoint_black.setBounds(chessPoint_a*20-7,chessPoint_b*20-7,16,16); chessVictory(1);isMouseEnabled=false;}}else if(color==-1 && isMouseEnabled){getLocation(chessPoint_a,chessPoint_b,color);isWin=checkWin(chessPoint_a,chessPoint_b,color);if(isWin==false){chessthread.sendMessage("/"+chessPeerName+" /chess "+chessPoint_a+" "+chessPoint_b+" "+color);this.add(chesspoint_white);chesspoint_white.setBounds(chessPoint_a*20-7,chessPoint_b*20-7,16,16); statusText.setText("白(第"+chessWhiteCount+"步)"+chessPoint_a+" "+chessPoint_b+",请黑棋下子");isMouseEnabled=false;}else{chessthread.sendMessage("/"+chessPeerName+" /chess "+chessPoint_a+" "+chessPoint_b+" "+color);this.add(chesspoint_white);chesspoint_white.setBounds(chessPoint_a*20-7,chessPoint_b*20-7,16,16); chessVictory(-1);isMouseEnabled=false;}}}public void netChessPaint(int chessPoint_a,int chessPoint_b,int color){chessPoint_black chesspoint_black=new chessPoint_black(this);chessPoint_white chesspoint_white=new chessPoint_white(this);getLocation(chessPoint_a,chessPoint_b,color);if(color==1){isWin=checkWin(chessPoint_a,chessPoint_b,color);if(isWin==false){this.add(chesspoint_black);chesspoint_black.setBounds(chessPoint_a*20-7,chessPoint_b*20-7,16,16); statusText.setText("黑(第"+chessBlackCount+"步)"+chessPoint_a+" "+chessPoint_b+",请白棋下子");isMouseEnabled=true;}else{this.add(chesspoint_black);chesspoint_black.setBounds(chessPoint_a*20-7,chessPoint_b*20-7,16,16); chessVictory(1);isMouseEnabled=true;}}else if(color==-1){isWin=checkWin(chessPoint_a,chessPoint_b,color);if(isWin==false){this.add(chesspoint_white);chesspoint_white.setBounds(chessPoint_a*20-7,chessPoint_b*20-7,16,16); statusText.setText("白(第"+chessWhiteCount+"步)"+chessPoint_a+" "+chessPoint_b+",请黑棋下子");isMouseEnabled=true;}else{chessthread.sendMessage("/"+chessPeerName+" /victory "+color);this.add(chesspoint_white);chesspoint_white.setBounds(chessPoint_a*20-7,chessPoint_b*20-7,16,16); chessVictory(-1);isMouseEnabled=true;}}}public void mousePressed(MouseEvent e){if (e.getModifiers()==InputEvent.BUTTON1_MASK){chessPoint_x=(int)e.getX();chessPoint_y=(int)e.getY();int a=(chessPoint_x+10)/20,b=(chessPoint_y+10)/20;if(chessPoint_x/20<2||chessPoint_y/20<2||chessPoint_x/20>19||chessPoint_y/20>19) {}else{chessPaint(a,b,chessColor);}}}public void mouseReleased(MouseEvent e){}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void mouseClicked(MouseEvent e) {}public void actionPerformed(ActionEvent e){}}class chessPoint_black extends Canvas implements MouseListener {chessPad chesspad=null;chessPoint_black(chessPad p){setSize(20,20);chesspad=p;addMouseListener(this);}public void paint(Graphics g){g.setColor(Color.black);g.fillOval(0,0,14,14);}public void mousePressed(MouseEvent e){// if(e.getModifiers()==InputEvent.BUTTON3_MASK)// {// chesspad.remove(this);// chesspad.chessColor=1;// chesspad.text_2.setText("");// chesspad.text_1.setText("请黑棋下子");// }}public void mouseReleased(MouseEvent e){}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void mouseClicked(MouseEvent e) {}}class chessPoint_white extends Canvas implements MouseListener {chessPad chesspad=null;chessPoint_white(chessPad p)。

“Java程序设计”——“五子棋”综合实验报告

“Java程序设计”——“五子棋”综合实验报告

“Java程序设计”综合实验报告一、前言1、项目背景通过五子棋这个课程设计。

可以让我们更加熟悉Java程序设计这门课程,加强对Eclipse这个软件的使用,加深对Java语言的掌握,提高编程水平。

同时培养能力,为将来的工作打下坚实的基础。

2、目标和意义目标:锻炼我们的能力,提高组中每一个人对Java语言的认识,培养编程兴趣。

让每一个人都能参与进来,提高团队合作意识。

意义:通过编写综合类的程序,运用已经学过的知识,和自主学习一些新的知识,提高了学习能力,掌握了一些自主学习的方法。

3、开发分工及进度安排二、功能分析1、主要模块本项目主要分为3个大的模块,分别为整体布局;界面绘制;与对战的算法。

由于游戏规则的设置,这里的游戏模式分为人机对战和人人对战。

黑白双方依次落子,由黑子先下,当任意一方在棋盘上形成横向,竖向,斜向连续五个相同颜色的棋子的一方获胜。

主要功能①实现在2种模式下五子棋的游戏。

②实现通过鼠标的点击位置放置棋子,达到下棋的目的。

③实现游戏玩家对游戏模式的自主选择。

④实现对在每种游戏模式下的黑子先手下棋的规定,先达到5子即为胜利。

三、关键功能的设计与实现1、数据结构与算法数据结构:项目中主要数据结构为二维数组。

用于存储棋盘上棋子的信息,和保存棋型表。

主要算法:(一)iswin()函数:用来判断输赢,通过鼠标事件所得到的点或者电脑下的点的坐标,来扫描该点八个方向的相邻的相同棋子数,上下,左右,斜左上下,斜右上下为四组,任意一组等于5即为胜利,由于本程序没有考虑禁手原则,只考虑了民间规则,所以大于5也为胜利。

public int iswin1(int x, int y, int heqi) {int k, s1, s2, s3, s4, s5, s6, s7, s8;s1 = 0;s2 = 0;s3 = 0;s4 = 0;s5 = 0;s6 = 0;s7 = 0;s8 = 0;if (heqi == 256)return -1;for (k = 1; k < 5; k++) {if (y + k < 16 && qipanqizi[x][y + k] == qipanqizi[x][y])s1++;elsebreak;}for (k = 1; k < 5; k++) {if (y - k > -1 && qipanqizi[x][y - k] == qipanqizi[x][y])s2++;elsebreak;}for (k = 1; k < 5; k++) {if (x + k < 16 && y + k < 16&& qipanqizi[x + k][y + k] == qipanqizi[x][y]) s3++;elsebreak;}for (k = 1; k < 5; k++) {if (x - k > -1 && y - k > -1&& qipanqizi[x - k][y - k] == qipanqizi[x][y]) s4++;elsebreak;}for (k = 1; k < 5; k++) {if (x + k < 16 && qipanqizi[x + k][y] ==qipanqizi[x][y])s5++;elsebreak;}for (k = 1; k < 5; k++) {if (x - k > -1 && qipanqizi[x - k][y] ==qipanqizi[x][y])s6++;elsebreak;}for (k = 1; k < 5; k++) {if (x - k > -1 && y + k < 16&& qipanqizi[x - k][y + k] == qipanqizi[x][y]) s7++;elsebreak;}for (k = 1; k < 5; k++) {if (x + k < 16 && y - k > -1&& qipanqizi[x + k][y - k] == qipanqizi[x][y]) s8++;elsebreak;}if (s1 + s2 >= 4 || s3 + s4 >= 4 || s5 + s6 >= 4 || s7 + s8 >= 4) {return 1;} elsereturn 0;}(二)人机对战通过对整个棋盘上每一个点的扫描,获得了电脑和玩家的棋型表,表中数据为该点的权值。

java五子棋游戏软件设计报告

java五子棋游戏软件设计报告

佛山科学技术学院《可视化编程技术》课程设计报告五子棋软件设计学生姓名:凌健铭学号:2011924133年级专业:11级教育技术学2班指导老师:容汝佳学院:教育科学学院广东★佛山提交日期:2013年6月目录1. 前言 (2)2.概要设计 (3)2.1 开发环境 (3)2.2 五子棋功能 (3)2.3 界面设计 (3)2.4 类的框架结构图 (4)3. 详细设计 (5)3.1 五子棋使用的JAVA类的说明 (5)3.2 类的主要方法 (6)3.2.1下放棋子 (6)3.2.2 判断输赢 (7)3.2.3 重新开始 (10)3.2.4 悔棋 (10)3.2.5 程序流程图 (11)4. 运行结果 (12)5. 测试分析 (15)6. 源程序 (15)参考文献 (26)设计总结 (26)摘要:该程序是一个图形界面的简单的java五子棋游戏,具有良好的界面,使用人员能快捷简单地进行操作。

人们可以在空闲时使用该程序进行五子棋对战,达到娱乐休闲的目的。

该五子棋程序设有悔棋、重新开始和退出功能。

界面为黄色棋盘。

关键字:java五子棋游戏软件,娱乐类电子游戏设计1 前言五子棋作为一个棋类竞技活动,其满足了人民娱乐休闲的需要,在民间十分流行。

Java是由Sun公司开发的新一代纯面向对象的网络编程语言。

其目标是建立一种在任意种机器、任一种操作系统的网络环境中运行的软件,实行所谓的“程序写一次,到处运行”的目标。

正因为如此,Java已成为当今Internet上最流行、最受欢迎的一种程序开发语言。

Java开发小组把Java按特性分为基本版、移动版、企业版,每个版本有一个软件开发包。

Java基本版本叫Java 2标准版(Java 2 Standard Edition,J2SE),它包含建立Java应用程序或者是Applet所需的应用程序编程接口(API)。

Java 2移动版(The Java 2 Mobile Edition,J2ME)包含创建无线Java应用程序的API。

五子棋Java实验报告

五子棋Java实验报告

五子棋Java实验报告五子棋JAVA实验报告一、实验目的和要求1、能够用编程语言实现一个简单的五子棋程序2、在实际系统中使用、实现人工智能的相关算法3、进一步加深对人工智能算法的理解二、五子棋的基本常识与原理1、五子棋的起源五子棋,是一种两人对弈的纯策略型棋类游戏,亦称“串珠”、“连五子”;是中国民间非常熟知的一个古老棋种。

相传,它起源于四千多年前的尧帝时期,比围棋的历史还要悠久。

亦有传说,五子棋最初流行于少数民族地区,以后渐渐演变成围棋并在炎黄子孙后代中遍及开来。

五子棋发展于日本,流行于欧美。

容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。

传统五子棋的棋具与围棋相同,棋子分为黑白两色,棋盘为19X19,棋子放置于棋盘线交叉点上。

两人对局,各执一色,轮流下一子,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。

因为传统五子棋在落子后不能移动或拿掉,所以也可以用纸和笔来进行游戏。

2、五子棋的基本常识与任何一种竞技棋一样,五子棋的每一局棋也分为三个阶段:开局,中局和残局。

五子棋的开始阶段称为开局,或称布局。

其开局阶段是十分短暂的,大约在七着与十几着之间。

在这一阶段的争夺中,双方的布局,应对将对以后的胜负起着极为关键的作用。

在开局阶段取得的形势好坏,主动与被动,先手与后手的优劣程度,往往直接影响中局的战斗。

因此积极处理好开局和开局向中局的过渡十分重要。

五子棋是从一至五,逐渐布子,发展连系,同时运用限制和反限制的智慧,在连子的过程中为自己的棋子争得相对的主动权和优势,逐步扩展优势,或者从劣势转化为优势,击溃对方的防线,最后连五取胜或抓禁手取胜或迫使对方投子认负。

3、五子棋比赛的相关规定(1) 职业连珠规则a. 黑方先下子,白后下,从天元开始相互顺序落子。

b. 最先在棋盘横向、竖向、斜向形成连续的相同色五个棋子的一方为胜。

c. 黑棋禁手判负,白棋无禁手。

java课程设计五子棋实验报告

java课程设计五子棋实验报告

java课程设计五子棋实验报告Java课程设计五子棋实验报告一、实验目的本次实验主要目的是运用Java编程语言,设计并实现一个简单的五子棋游戏,通过实践掌握Java编程基础知识和面向对象编程思想。

二、实验内容本实验要求设计并实现一个五子棋游戏,主要功能包括:1. 实现双人对战功能,允许两个玩家交替下棋;2. 实现判断胜负功能,当某一方连成五子时,游戏结束,显示胜利者;3. 实现悔棋和重新开始的功能。

三、实验原理1. 界面设计界面设计采用Java Swing框架,主要包括棋盘和控制面板两部分。

棋盘使用JPanel实现,通过绘制线条和圆形实现棋盘和棋子的显示。

控制面板使用JPanel和JButton实现,提供重新开始和悔棋功能。

2. 游戏逻辑游戏逻辑主要包括下棋和判断胜负两个部分。

下棋功能通过记录当前玩家和棋子位置实现,判断胜负则通过遍历棋盘上的所有棋子,判断是否满足连成五子的条件。

3. 实现悔棋和重新开始的功能悔棋功能主要通过记录每一步棋的位置和玩家来实现,重新开始则需要清空棋盘和游戏记录。

四、实验步骤1. 设计并实现界面,包括棋盘和控制面板;2. 实现游戏逻辑,包括下棋和判断胜负;3. 实现悔棋和重新开始的功能;4. 进行代码测试和调试,确保程序能够正常运行。

五、实验结果经过测试,程序能够正常运行,实现了双人对战、判断胜负、悔棋和重新开始的功能。

六、实验总结本次实验通过设计并实现一个简单的五子棋游戏,巩固了Java编程基础知识和面向对象编程思想,同时也学习了Swing框架的使用。

在实现过程中也遇到了一些问题,如棋子位置的计算、胜负判断的实现等,通过查阅资料和调试最终得以解决。

总体来说,本次实验收获颇丰,对Java编程有了更深入的了解和认识。

Java五子棋课程设计报告

Java五子棋课程设计报告

Java五子棋课程设计报告目录第一章概述……………………………………………………………………………………错误~未定义书签。

11.1 课程设计意义1.2 课程设计目的1.3 课程设计要求第二章网络五子棋设计的需求分析和总体设计2.1 需求分析2.1.1 功能需求分析2.1.2 性能需求分析2.1.3 用户界面需求2.2 系统的主要功能2.3 系统包含的类及类之间的关系2.4 Java源文件及其功能2.5 程序总体思路2.6 系统流程图第三章系统详细设计3.1 界面设置3.2 控制按钮3.3 规则3.4 棋盘坐标3.5 双方对弈情况第四章服务器与客户端的设计与实现4.1 服务器和客户端通信机制4.2 多线程机制4.3 传递信息4.4 客户端界面设计4.5 连接服务器4.6 判断输赢算法第五章课程设计总结第三章原理分析3.1 服务器和客户端通信机制P318最下面的文字,p319最下面的文字Socket是面向客户/服务器模型设计的,网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。

Socket通常用来实现客户方和服务方的连接。

客户程序可以向Socket写请求,服务器将处理此请求,然后通过Socket将结果返回给用户。

在java中使用套接字相当简单,Java API为处理套接字的通信提供了一个类.Socket。

使得编写网络应用程序相对容易。

JAVA支持流套接字(stream socket)和数据报套接字(datagram socket)。

流套接字使用TCP(传输控制协议)进行数据传输,而数据报套接字使用UDP(用户数据报协议)。

在Java中Socket可以理解为客户端或者服务器端的一个特殊的对象,这个对象有两个关键的方法,一个是getInputStream方法,另一个是getOutputStream 方法。

getInputStream方法可以得到一个输入流,客户端的Socket对象上的getInputStream方法得到的输入流其实就是从服务器端发回的数据流。

java课程设计报告单机版五子棋

java课程设计报告单机版五子棋

华北科技学院课程设计说明书班级: 网络B093 姓名:设计题目: 单机版五子棋设计时间: 2012.12.15 至2013.1.5指导教师:评语:_________________________________ _________________________________________ _________________________________________ _________________________________________ _________________________________________ 评阅成绩:____评阅教师:_____目录1 引言 (3)1.1课程设计选题 (3)1.2课程设计的目的 (3)1.3本选题的设计背景 (3)2 需求分析 (3)2.1 功能需求 (3)2.2 系统的开发运行环境 (3)3 总体设计 (4)3.1 系统体系结构设计 (4)3.2系统功能模块及主要类设计 (4)4 详细设计与实现 (5)4.1 主窗体模块 (5)4.2 棋子索引模块 (11)4.3 棋盘构造模块 (12)4.4 画棋盘模块 (13)4.5 鼠标按下模块 (15)4.6 判断胜利算法模块 (16)4.7 重新开始和悔棋算法模块 (17)5 小结和展望 (18)参考文献 (19)附录 (19)使用说明书 (19)源程序清单 (19)1引言1.1课程设计选题《单机版五子棋》1.2课程设计的目的使学生巩固和加深以Java 语言为基础的面向对象编程技术理论知识的理解,提高实际动手编程能力的培养,掌握以Java为核心的应用软件开发方案,达到能独立阅读、编制和调试一定规模的Java程序的水平。

1.3本选题的设计背景描述为什么选择本题目?五子棋是大家喜闻乐见的小游戏,规则简单,变化多端,非常有趣味性,本选题的设计意义?通过编写五子棋小游戏的程序,进一步锻炼java图形编程技巧和编写程序的能力。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

南京晓庄学院
《JAVA程序设计》
课程设计报告
2015年6月
目录
1引言 (1)
1.1 系统开发背景 (2)
1.1 系统开发的目的和意义 (3)
1.2 完成的主要工作 (4)
2 需求分析和总体设计 (4)
5
5
5
5
5
6
7
9
10
12
五子棋游戏的设计与实现
1引言
五子棋相传起源于四千多年前的尧帝时期,比围棋的历史还要悠久,可能早在“尧造围棋”之前,民间就已有五子棋游戏。

有关早期五子棋的文史资料与围棋有相似之处,因为古代五子
《增山海
《艺
1.选择黑子先下
2.设置双方下棋总共时长
3.刷新重新开始
4.悔棋
5.认输
6.退出提示
实现一个简单的多用户五子棋的游戏程序,包括如下两个界面
(1)选择对弈桌(执黑、执白)。

(2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负);
1.3需求分析与设计思路
1、用户需求调查分析
2、构思代码模块
3、总体设计
4、详细设计
5、代码编写
2需求分析和总体设计
2.1需求分析与设计思路
此系统为智力游戏,采用JAVA的MVC模式,根据不同功能划分不同模块,该五子棋游戏功能虽然简单,然是实现了人机对战,所以从这个角度来说,此款游戏能准确的计算棋局。

虽然系统不大,但是可以实现基本的五子棋功能,以及悔棋。

2.2系统功能结构
3.1详细设计
3.1.1系统模块实现
boolean canPlay = true;
//标识是否是人为归零时间
boolean guiLing = true;
// 背景图片
BufferedImage bgImage = null;
//右上角显示游戏信息区域的背景图片
BufferedImage msgImage = null;
// 保存之前下过的全部棋子的坐标
// 其中数据内容 0:表示这个点并没有棋子, 1:表示这个点是黑子, 2:表示这个点是白子Chess[][] allChess = new Chess[16][16];
//List<allChess> Chess = new ArrayList<allChess>(); // 标识当前应该黑棋还是白棋下下一步
boolean isBlack = true;
// 保存显示的提示信息
String message = "黑方先行";
// 保存最多拥有多少时间(秒)
static int maxTime = 0;
// 做倒计时的线程类
Thread t = new Thread(this);
//Thread music = new Thread(new Music());
4、系统运行结果
a. 进入游戏界面
游戏开始的界面有六个选择项,用户可以选择相应的设置b. 选择角色,开始下棋
首先达到五个棋子连在一块的赢了,并在弹窗显示谁赢了!
c. 下完后,重新开始
下完一盘后游戏停止,点击重新开始,界面回到初始界面
d.悔棋
选择悔棋后,相对应位置旗子撤销
5、课程设计总结
通过此次课程设计,将我本学期所学的JAVA知识得到巩固和应用,在设计的过程中我遇到了很到问题,不过在老师和同学们的帮助和自己的思考下还是很好的完成了。

这此课程设计还让我懂得了写程序不能闭门造车,要努力拓宽知识面,开阔视野,拓展思维。

它还让我学会了在网上查阅那些无限的资料。

由于自己的分析设计和程序经验不足,该系统设计和实现过程中,还有许多没有完善的地方,比如用户界面设计不够美观,异常出错处理比较差等多方面问题,这些都有待进一步完善和提高。

对于文中出现的不足和系统中出现的问题敬
参考文献
1. 吴其庆编著.Java程序设计实例教程.北京:冶金工业出版社
2. 柳西玲.许斌编著.Java语言应用开发基础.北京:清华大学出版社3.丁振凡 Java 语言实用教程:北京邮电大学出版社。

相关文档
最新文档