五子棋(JAVA版)实习报告及原代码
基于Java的“网络五子棋”游戏的设计和实现(含源文件)
基于Java的“网络五子棋”游戏的设计和实现——网络版客户端学生:xxx 指导教师:xx内容摘要:目前,随着计算机网络的发展,以计算机技术和网络技术为核心的现代网络技术已经在现实生活和生产中得到了广泛的使用,休闲类网络游戏集趣味性,娱乐性,互动性和益智性于一体,已经成为多数人群的休闲方式,也为多数人所喜好。
本设计收集了关于JAVA基础的书籍,着重收录了关于SOCKET编程的内容,找到了五子棋概述和规则的资料,查阅了网络通信技术的相关论文,同时也参考了很多关于五子棋实现的程序资料以及关于JAVA开发工具的介绍的文档。
在期间,我学习了多线程技术、双缓冲技术、数据传输技术、SOCKET编程技术,研究了网络通信原理、JAVA编写原理等一系列的原理。
开发了网络五子棋网络通信代码,实现了网络聊天、数据传输、网络通信、界面组织如:棋盘、建立服务器、连接到服务器、系统设置、我要参赛等功能。
通过对以上技术的学习和研究,利用SOCKET编程,能服务器与客户端之间的连接,利用多线程技术完成了服务器端与客户端之间的数据传输、网络通信,使得两个客户端能够同步的进行处理。
在加载图片以及绘制棋盘方面,采用双缓冲技术消除屏幕的闪烁现象。
达到了预期的效果。
关键词: 多线程 SOCKET 客户端网络通信Design and realization of the web gobang game based onjava——client moduleAbstract: At present, with the development of computer network, computer technology and network technology as the core of modern network technology has in real life and production has been widely used. Recreational type of network games consists of interesting, entertaining, interactivity and beneficial intelligence. It has become a way of entertainment to many people, and has been loved.Much of the information collected in this design,such as many books based on the JAVA, focus on the contents of SOCKET programming, Find information about the web gobang game, Access to the relevant papers, Reference to a lot of program information on achieving The web gobang game and introduction to JAVA development tools on the document. In the period, I learned a series of principles,For example Multi-threading technology, double-buffering technology, data transmission technology, SOCKET programming technique to study the principle of network communication, JAVA writing principles. Internet chat, data transmission, network communications, interfaces structure, such as: the board, establishing server, connecting server, option had been realized. I know these technologies through studying and researching, I using of SOCKET programming, server and client can be connecting, i using of multi-threading technology to complete the server side and client-side data transmission and the client can synchronize the two processtion. Pictures and drawing board loading, I using of double-buffering to eliminate screen flicker.Keywords:multi-threaded socket client network communication目录前言 (1)1 绪论 (1)1.1 背景 (1)1.2 选题的前提和目的 (1)1.3 五子棋介绍 (2)1.4 主要完成内容 (2)2 开发环境及工具介绍 (3)2.1 开发环境及运行环境 (3)2.1.1 开发环境 (3)2.1.2 运行环境 (3)2.1.2 开发工具 (3)2.2 Java 简介 (3)2.2.1 Java的起源和发展 (3)2.2.2 Java特点 (4)2.3 Java Socket网络编程简介 (5)2.3.1 Java Socket 网络编程基础 (5)2.4 Java 图形编程 (7)3 需求分析和总体设计 (7)3.1 需求分析作用 (7)3.1.1 基本需求分析 (7)3.1.2 高级需求分析 (7)3.2 总体设计 (8)3.2.1 系统设计思想 (8)3.2.2 系统总体设计 (9)3.3 功能模块及流程 (10)3.3.1 系统主要模块 (10)3.3.2 服务器端作用 (10)3.3.3 客户端作用 (11)3.3.4 系统主流程 (12)4 概要设计 (13)4.1 网络编程的模式和选取 (13)4.2 主要类与其作用 (13)4.2.1 服务器类 (13)4.2.2 客户端主类 (15)4.2.3 客户端副类 (15)4.2.4 棋盘类 (16)5 详细设计 (18)5.1 开发环境的搭建 (18)5.1.1 安装JDK (18)5.1.2 安装JRE (19)5.1.3 安装Eclipse (20)5.1.4 配置环境变量 (20)5.2 客户端界面设计 (23)5.3 客户端网络设计 (24)5.4 棋盘类设计 (25)5.5 系统各模块之间的关系 (26)6 软件测试和展示 (27)6.1 软件测试的方法 (27)6.2 网络客户端测试用例 (28)6.3 游戏界面展示 (29)7 总结语 (33)参考文献 (34)基于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程序基础知识本系统有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课程设计说明书----五子棋小游戏院系; 管理学院专业班级: 信管151学生学号: 201500705009学生姓名: 雷晓指导教师: 伍良启日期2017.01.05成绩:指导老师签名:批改日期:目录 (1)课程设计的目的 (5)课程设计思路 (5)(1)棋盘界面设计 (5)(2)算法设计 (6)(3)五子棋规则 (6)程序流程图 (7)程序的设计方法 (8)程序中主要方法的说明 (8)程序中类及成员变量的说明 (9)主要成员变量(属性) (9)java源文件及其功能 (10)五子棋游戏中的注册监听 (10)游戏整体设计 (11)(1)五子棋的游戏主界面 (11)(2)机器人部分的设计 (11)(3)五子棋面板的设计 (12)设计结果与分析 (12)设计体会 (13)参考文献 (15)附录:程序源代码 (15)课程设计的目的学习任何知识得目的都是要将它运用到实践中去,所以我们要运用已有的知识,独立得将这个课程设计完成,只有这样,我们才能将知识变成本领,变成属于自己得东西,通过一个学习得学习,我们已经有可一定得Java基础,现在我们就要利用这些基础,来完成课程设计。
这次课程设计我主要研究了利用已学的Java知识编辑一个五子棋小游戏。
通过此次课程设计,来巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、JCreator等开发工具的运用,拓宽常用类库的应用。
课程设计思路(1)棋盘界面设计在对棋盘界面设计方面要考虑简洁友好,符合游戏者需求。
棋子的设计方面系统中设置了两种棋子颜色,yellow或者red,游戏者可自行选择。
棋子怎样画出来,怎样使棋子按我们所想的方式来绘制出来是设计的主要难题。
运行时要求当每次点击鼠标的时候就在点击鼠标的地方画一个棋子,所以得定义一个棋子的类使点击鼠标时系统把棋子绘制出来。
这样主界面里的棋子就确定了,而且也确定了几个所需要的类。
可以先定义好这些类了。
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模式,根据不同功能划分不同模块,该五子棋游戏功能虽然简单,然是实现了人机对战,所以从这个角度来说,此款游戏能准确的计算棋局。
#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(userT oken.hasMoreTokens(>>{String user=(String>userT oken.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>。
五子棋源代码-Java_Applet小程序
五子棋源代码-Java_Applet小程序importjava.applet.Applet; importjava.awt.*;importjava.util.Random;public class wzq extends Applet implements Runnable{public void stop(){LoopThread = null;}privateintCalcZi(inti, int j, byte byte0){CXY cxy = new CXY(); int k = 0;int l = 0;do{int i1 = 0;int j1 = 0;do{cxy.x = i;cxy.y = j;if(MoveAGrid(cxy, l + 4 * j1) &&QiPan[cxy.x][cxy.y] == byte0) do{ if(QiPan[cxy.x][cxy.y] == 0 || QiPan[cxy.x][cxy.y] != byte0) break;i1++;} while(MoveAGrid(cxy, l + 4 * j1));}while(++j1 < 2);if(i1 > k)k = i1;}while(++l < 4);return ++k;}privatebooleanCanDo(){return steps < ((GRIDSUM * GRIDSUM) / 100) * 80;}//电脑下棋privateintCPUDo(CXY cxy, byte byte0){intai[] = new int[2];int ai1[] = new int[2];int ai2[] = new int[2];boolean flag = false;EnterTimes++;ai2[0] = 0;for(inti = recLU.x; i<= recRD.x; i++){for(int k = recLU.y; k <= recRD.y; k++){int l = 0;if(QiPan[i][k] == 0){DoAStep(i, k, byte0);l = CalcCPU(i, k, byte0);}if(l > 0){int i1 = 0;byte byte1;if(byte0 == 1)byte1 = 2; elsebyte1 = 1; if(EnterTimes<= level && steps < ((GRIDSUM * GRIDSUM) / 100) * 80)i1 = CPUDo(cxy, byte1);l += i1;if(l + Math.abs(rd.nextInt()) % 5 > ai2[0] || !flag){ai[0] = i;ai1[0] = k;ai2[0] = l;flag = true;}QiPan[i][k] = 0;}}}if(EnterTimes<= 1){cxy.x = ai[0];cxy.y = ai1[0];int j = 0;do{try{Thread.sleep(300L);}catch(InterruptedException _ex) { } QiPan[cxy.x][cxy.y] = byte0;repaint();try{Thread.sleep(300L);}catch(InterruptedException _ex) { } QiPan[cxy.x][cxy.y] = 0; repaint(); }while(++j < 2);}EnterTimes--;return ai2[0];}public void ClearPan(){for(inti = 0; i< GRIDSUM; i++){for(int j = 0; j < GRIDSUM; j++) QiPan[i][j] = 0;}scHong = 0;scHei = 0;steps = 0;recLU.x = 8;recRD.x = 9;recLU.y = 8;recRD.y = 9;}privatebooleanMoveAGrid(CXY cxy, inti){boolean flag = false;i %= 8;int j = cxy.x + oAdd[i][0]; int k = cxy.y + oAdd[i][1]; if(j >= 0 && j < GRIDSUM && k >= 0 && k < GRIDSUM){cxy.x = j;cxy.y = k;flag = true;}return flag;}public void paint(Graphics g){super.paint(g);for(inti = 0; i< GRIDSUM + 1; i++){g.drawLine(0, i * GRIDWIDTH, GRIDSUM * GRIDWIDTH, i * GRIDWIDTH);g.drawLine(i * GRIDWIDTH, 0, i * GRIDWIDTH, GRIDSUM * GRIDWIDTH);}for(int j = 0; j < GRIDSUM; j++){for(int k = 0; k < GRIDSUM; k++) drawQi(g, j, k, QiPan[j][k]);}}private void CPUInit(){PosAdd[0][0] = 8;PosAdd[0][1] = -2;PosAdd[1][0] = -2;PosAdd[0][2] = 3;PosAdd[2][0] = 3;PosAdd[0][3] = 2;PosAdd[3][0] = 2; PosAdd[1][1] = -7; PosAdd[1][2] = -1; PosAdd[2][1] = -1; PosAdd[1][3] = -1; PosAdd[3][1] = -1;PosAdd[2][2] = 4; PosAdd[3][3] = 4; PosAdd[2][3] = 4; PosAdd[3][2] = 4;}public void mouseDOWNThis(Event event){if(playerdo)xiazi.put(event.x, event.y);}privateintDoAStep(inti, int j, byte byte0){if(QiPan[i][j] != 0 || byte0 == 0 || byte0 > 2){return 0;}else{QiPan[i][j] = byte0; return 1;}}private void FreshRec(inti, int j){if(i - recLU.x< 2){recLU.x = i - 2;if(recLU.x< 0)recLU.x = 0;}if(recRD.x - i< 2){recRD.x = i + 2;if(recRD.x>= GRIDSUM) recRD.x = GRIDSUM - 1; }if(j - recLU.y< 2){recLU.y = j - 2;if(recLU.y< 0)recLU.y = 0;}if(recRD.y - j < 2){recRD.y = j + 2;if(recRD.y>= GRIDSUM) recRD.y = GRIDSUM - 1;}}publicwzq(){GRIDWIDTH = 18;GRIDSUM = 18; QiPan = new byte[GRIDSUM][GRIDSUM];oAdd = new int[8][2]; playing = false;playerdo = true;xy = new CXY();xiazi = new CXiaZi(); rd = new Random(); recLU = new CXY(); recRD = new CXY(); PosAdd = new int[4][4];}public void update(Graphics g){paint(g);}//画棋public void drawQi(Graphics g, inti, int j, int k){switch(k){case 0: // '\0'g.clearRect(i * GRIDWIDTH + 1, j * GRIDWIDTH + 1, GRIDWIDTH -2,GRIDWIDTH - 2);return;case 1: // '\001'g.setColor(Color.red);g.fillArc(i * GRIDWIDTH + 2, j * GRIDWIDTH + 2, GRIDWIDTH -4,GRIDWIDTH - 4, 0, 360);return;case 2: // '\002'g.setColor(Color.black);break;}g.fillArc(i * GRIDWIDTH + 2, j * GRIDWIDTH + 2, GRIDWIDTH -4,GRIDWIDTH - 4, 0, 360);}public void start(){if(LoopThread == null)LoopThread = new Thread(this, "wbqloop"); LoopThread.setPriority(1);LoopThread.start();}public void run(){for(; Thread.currentThread() == LoopThread; xiazi.get(xy)) {ClearPan();repaint();playing = true;//谁先下随机who = (byte)(Math.abs(rd.nextInt()) % 2 + 1); for(passes = 0; playing && passes < 2;){if(who == 1){lblStatus.setText("\u7EA2\u65B9\u4E0B");lblStatus.setForeground(Color.red);}else{lblStatus.setText("\u9ED1\u65B9\u4E0B");lblStatus.setForeground(Color.black);}if(steps < ((GRIDSUM * GRIDSUM) / 100) * 80){passes = 0;if(who == 1) //人下棋{xiazi.get(xy);for(; DoAStep(xy.x, xy.y, who) == 0; xiazi.get(xy)); scHong = CalcZi(xy.x, xy.y, who); FreshRec(xy.x, xy.y); steps++;}else //机器下棋{if(scHong == 0 &&scHei == 0){ xy.x = 9;xy.y = 9;} else{ CPUDo(xy, who);} for(; DoAStep(xy.x, xy.y, who) == 0; CPUDo(xy, who)); scHei = CalcZi(xy.x, xy.y, who); FreshRec(xy.x, xy.y); steps++;}}else{passes = 2;}if(scHong>= 5 || scHei>= 5) playing = false; repaint();//交换下棋方who = (byte)((1 - (who - 1)) + 1); Thread.yield(); }if(scHong>= 5) //红方胜{Status = "\u7EA2\u65B9\u80DC!";lblStatus.setForeground(Color.red); LoseTimes++; }else if(scHei>= 5)//黑方胜{Status = "\u9ED1\u65B9\u80DC!";lblStatus.setForeground(Color.black);if(LoseTimes> 0)LoseTimes--;}else //平局{Status = "\u4E0D\u5206\u80DC\u8D1F!";}lblStatus.setText(Status); repaint();}}//入口,开始下棋,初始化public void init() {super.init(); LoopThread = null; oAdd[0][0] = 0; oAdd[0][1] = -1; oAdd[1][0] = 1; oAdd[1][1] = -1; oAdd[2][0] = 1; oAdd[2][1] = 0; oAdd[3][0] = 1; oAdd[3][1] = 1; oAdd[4][0] = 0; oAdd[4][1] = 1; oAdd[5][0] = -1; oAdd[5][1] = 1; oAdd[6][0] = -1; oAdd[6][1] = 0; oAdd[7][0] = -1; oAdd[7][1] = -1; CPUInit();setLayout(null);resize(325, 352);lblStatus = new Label("Welcome"); lblStatus.setFont(new Font("Dialog", 1, 14));add(lblStatus);lblStatus.reshape(14, 332, 175, 15);lblLevel = new Label("JAVA\u4E94\u5B50\u68CB");lblLevel.setFont(new Font("Dialog", 1, 14));add(lblLevel);lblLevel.reshape(196, 332, 119, 15);}publicbooleanhandleEvent(Event event){if(event.id != 501 || event.target != this){returnsuper.handleEvent(event);}else{mouseDOWNThis(event);return true;}}privateintCalcCPU(inti, int j, byte byte0){CXY cxy = new CXY();String s = "";String s2 = "";String s4 = ""; byte byte1 = 0;CalcTimes++;if(byte0 == 1)byte1 = 2; elseif(byte0 == 2)byte1 = 1; int k = 0;int l = 0;do{int i1 = 0;String s1 = "";String s3 = "";String s5 = ""; int j1 = 0;do{int k1 = 0;cxy.x = i;for(cxy.y = j; MoveAGrid(cxy, l + 4 * j1) && k1 < 6 &&QiPan[cxy.x][cxy.y] != byte1; k1++) if(QiPan[cxy.x][cxy.y] == byte0) {if(j1 == 0)s3 += "1"; elses5 = "1" + s5; i1++;}elseif(j1 == 0)s3 += "0"; elses5 = "0" + s5;if(j1 == 0)s3 += "2";elses5 = "2" + s5;}while(++j1 < 2);i1++;s1 = s5 + "1" + s3;if(s1.indexOf("11111") != -1)i1 += 1000;elseif(s1.indexOf("011110") != -1)i1 += 500;elseif(s1.indexOf("211110") != -1 || s1.indexOf("011112") != -1 || s1.indexOf("01110") != -1 || s1.indexOf("01110") != -1 ||s1.indexOf("011010")!= -1 || s1.indexOf("010110") != -1 || s1.indexOf("11101") != -1 || s1.indexOf("10111") != -1 ||s1.indexOf("11011") != -1)i1 += 100;elseif(s1.indexOf("21110") != -1 || s1.indexOf("01112") != -1 ||s1.indexOf("0110") != -1 || s1.indexOf("211010") != -1 ||s1.indexOf("210110")!= -1)i1 += 20;if(l == 1 || l == 3)i1 += (i1 * 20) / 100;k += i1;}while(++l < 4); if(CalcTimes<= 1)k += CalcCPU(i, j, byte1);elseif(k > 10)k -= 10; CalcTimes--;return k;}int GRIDWIDTH; //网格宽度int GRIDSUM; //网格总数byte QiPan[][]; //棋盘intoAdd[][];Thread LoopThread;intscHong; //红方intscHei; //黑方byte who; //byte winner; //赢方boolean playing; booleanplayerdo; CXY xy;CXiaZixiazi; //下子String Status; //状态Random rd; //随机数 int passes;int steps;intLoseTimes;CXY recLU;CXY recRD; intPosAdd[][]; int level; intEnterTimes; intCalcTimes;Label lblStatus;Label lblLevel; }classCXiaZi{public synchronized void get(CXY cxy) {ready = false;notify();while(!ready)try{wait();}catch(InterruptedException _ex) { }ready = false;notify();cxy.x = xy.x;cxy.y = xy.y;}public synchronized void put(inti, int j){if(i< GRIDWIDTH * GRIDSUM && j < GRIDWIDTH * GRIDSUM) {xy.x = i / GRIDWIDTH; xy.y = j / GRIDWIDTH; ready = true; notify();}}publicCXiaZi(){GRIDWIDTH = 18;GRIDSUM = 18; xy = new CXY();ready = false;}private CXY xy;privateboolean ready; privateint GRIDWIDTH; privateint GRIDSUM; } class CXY{public CXY(){x = 0;y = 0;}publicint x; publicint y; }内部资料,请勿外传~。
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五子棋课程设计报告总结一、引言五子棋是一种古老的棋类游戏,它的规则简单易懂,但是却有很高的策略性和趣味性。
在计算机科学领域中,五子棋也是一个重要的研究对象。
本次课程设计旨在通过使用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编程和多线程编程等技术,需要仔细考虑各种异常情况和线程同步问题。
五子棋游戏教学规划报告(含源代码可以运行)
目录第一章需求分析 (1)1.1总体分析 (1)1.2初始化 (1)1.3主循环控制模块 (1)1.4玩家下子 (2)1.5盘面分析填写棋型表 (2)1.6对方下子 (2)1.7胜负判断 (3)第二章功能描述 (3)2.1功能模块图 (3)2.2功能说明 (4)第三章系统设计 (5)3.1流程图 (5)3.2流程图说明 (6)第四章运行结果 (8)第五章总结 (10)第六章致谢 (10)附录一参考文献 (11)附录二源代码 (13)五子棋游戏第一章需求分析1.1 总体分析软件需求分析是软件开发周期的第一个阶段,也是关系到软件开发成败的关键一步。
对于任何一个软件而言,需求分析工作都是至关重要的一步。
只有通过软件需求分析,才能把软件的功能和性能由总体的概念性描述转化为具体的规格说明,进而建立软件开发的基础。
实践表明,需求分析工作进行得好坏,在很大程度上决定了软件开发的成败。
软件需求分析的任务是:让用户和开发者共同明确将要开发的是一个什么样的软件。
具体而言,就是通过对问题及其环境的理解、分析和综合,建立逻辑模型,完成新软件的逻辑方案设计。
基于本游戏,首先得为整个棋盘建立一张表格用以记录棋子信息,我们使用一个15*15的二维数组Table[15][15](15*15是五子棋棋盘的大小),数组的每一个元素对应棋盘上的一个交叉点,用‘0’表示空位、‘1’代表己方的子、‘2’代表对方的子;这张表也是今后分析的基础。
在此之后还要为两个玩家双方各建立一张棋型表Computer[15][15][4]和Player[15][15][4],用来存放棋型数据。
1.2 初始化首先,建立盘面数组Table[15][15]、对战双方的棋型表Computer[15][15][4]和Player[15][15][4]并将它们清零以备使用;然后初始化显示器、键盘、鼠等输入输出设备并在屏幕上画出棋盘(棋盘可以不显示)。
1.3 主循环控制模块控制下棋顺序,当轮到某方下子时,负责将程序转到相应的模块中去,主要担当一个调度者的角色。
