java五子棋毕业设计整套
基于JAVA的五子棋游戏设计
基于JAVA的五子棋游戏设计五子棋是一种非常有趣的棋类游戏,主要目标是在棋盘上先形成五个连续的子的一方取胜。
为了设计一款基于JAVA的五子棋游戏,我们需要考虑以下几个方面:1.游戏界面设计:游戏界面需要包括一个棋盘和一些控制按钮。
可以使用Java GUI库(如Swing或JavaFX)来创建游戏界面,使用布局管理器来放置棋盘和按钮。
2.游戏规则设计:游戏规则非常简单。
两位玩家交替下棋,玩家可以在棋盘上的任意空闲位置下子。
首先形成五个连续的子的一方获胜。
可以使用二维数组来表示棋盘的状态,并在每次下子后更新数组的值。
3.游戏逻辑设计:游戏逻辑包括判断玩家下子的合法性、判断游戏是否结束以及判断获胜方等。
可以使用条件语句和循环结构来实现游戏逻辑。
下面是一种可能的五子棋游戏设计方案:```javaimport javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class GomokuGame extends JFrameprivate final int BOARD_SIZE = 15;private JButton[][] buttons;private int[][] board;private int currentPlayer;public GomokuGamsetTitle("Gomoku Game");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(600, 600);setLayout(new GridLayout(BOARD_SIZE, BOARD_SIZE));buttons = new JButton[BOARD_SIZE][BOARD_SIZE];board = new int[BOARD_SIZE][BOARD_SIZE];currentPlayer = 1;for (int i = 0; i < BOARD_SIZE; i++)for (int j = 0; j < BOARD_SIZE; j++)buttons[i][j] = new JButton(;buttons[i][j].setBackground(Color.WHITE);buttons[i][j].addActionListener(new ButtonListener(i, j));add(buttons[i][j]);}}setVisible(true);}private class ButtonListener implements ActionListener private int row;private int col;public ButtonListener(int row, int col)this.row = row;this.col = col;}public void actionPerformed(ActionEvent e)if (buttons[row][col].getBackground( == Color.WHITE)buttons[row][col].setBackground(currentPlayer == 1 ? Color.BLACK : Color.WHITE);board[row][col] = currentPlayer;if (isWinningMove(row, col))JOptionPane.showMessageDialog(null, "Player " + currentPlayer + " wins!");System.exit(0);}currentPlayer = currentPlayer == 1 ? 2 : 1;} elseJOptionPane.showMessageDialog(null, "Invalid move!");}}}private boolean isWinningMove(int row, int col)// Check horizontalint count = 0;for (int i = row - 4; i <= row + 4; i++)if (i >= 0 && i < BOARD_SIZE && board[i][col] == currentPlayer)count++;if (count >= 5)return true;}} elsecount = 0;}}// Check verticalcount = 0;for (int j = col - 4; j <= col + 4; j++)if (j >= 0 && j < BOARD_SIZE && board[row][j] == currentPlayer)count++;if (count >= 5)return true;}} elsecount = 0;}}// Check diagonal1count = 0;for (int i = row - 4, j = col - 4; i <= row + 4 && j <= col + 4; i++, j++)if (i >= 0 && i < BOARD_SIZE && j >= 0 && j < BOARD_SIZE && board[i][j] == currentPlayer)count++;if (count >= 5)return true;}} elsecount = 0;}}// Check diagonal2count = 0;for (int i = row - 4, j = col + 4; i <= row + 4 && j >= col - 4; i++, j--)if (i >= 0 && i < BOARD_SIZE && j >= 0 && j < BOARD_SIZE && board[i][j] == currentPlayer)count++;if (count >= 5)return true;}} elsecount = 0;}}return false;}public static void main(String[] args)new GomokuGame(;}```以上是一种简单的基于JAVA的五子棋游戏设计方案,游戏界面使用了JFrame和JButton来创建,游戏逻辑通过按钮的点击事件来实现。
java五子棋学士学位论文
南开大学滨海学院本科生毕业论文(设计)中文题目:JA V A五子棋外文题目:JA V A Backgammon作业名称:JA V A五子棋学号:12990147、12990187姓名:黄宇、徐相如年级:2012 级系别:计算机科学系专业:数字媒体技术(数字影视动画技术与运用方向)完成日期:2015年1月12日指导教师:刘嘉欣南开大学滨海学院本科论文(设计)诚信声明本人郑重声明:所呈交的毕业论文(设计),题目《JA V A五子棋》是本人在指导教师的指导下,独立进行研究工作所取得的成果。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式注明。
除此之外,本论文不包含任何其他个人或集体已经发表或撰写过的作品成果。
本人完全意识到本声明的法律结果。
毕业论文(设计)作者签名:黄宇、徐相如日期:2015年1月12日JA V A五子棋摘要五子棋是一种两人对弈的纯策略型棋类游戏,是起源于中国古代的传统黑白棋种之一。
发展于日本,流行于欧美。
容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。
如今,JAVA以其独特的可移植性,跨平台性,程序体积小等多个特点成为现今网络上最流行的脚本语言。
Java的跨平台性使它应用于无线手持设备、通讯终端、信息家电等多种热门领域。
Java在多种行业的备受推崇使Java悄然融入日常生活的每一角落。
为了熟悉五子棋的规则以及技巧,与同学,电脑之间进行相互的博弈,决定用JAVA制作一个能实现局域网对战,人机对战功能的五子棋对战程序。
使用JAVA语言开发的五子棋游戏程序,将五子棋游戏移植到网络中更符合现代人娱乐理念,实现单机和双人对战的游戏模式,也可以在游戏当中进行聊天,便于用户实时进行信息交流。
关键字:JAVA游戏,局域网对战,人机对战,聊天,五子棋。
JA V A BackgammonAbstractsBackgammon is a two games on pure strategy board games originated in ancient China's traditional Othello. Development in Japan, popular in Europe and the United States. Easy to use, all ages, amusing, fascinating; not only enhance the thinking ability, intelligence, and rich in philosophy, and to help self-cultivation. Today, JAVA its unique portability, cross-platform, the program, small size and other characteristics become the most popular scripting language on the network today. Java's cross-platform so that it applied to wireless handheld devices, communication terminals, information appliances, and other hot areas. Java in a variety of industries highly respected Java quietly into every corner of daily life. Familiar with the rules and skills of backgammon, Between students with each other or a computer game, decided to create a LAN Battle and man-machine war Backgammon Battle program with JAVA. Backgammon games using JAVA language development program, the backgammon game ported to the network more in line with the concept of modern entertainment, stand-alone and double play against the game mode, you can also chat in the game, whisper chat features such as user-friendly real-time exchange of information.Key words:JAVA games, LAN gaming, human-computer gaming,chat, algorithm目录摘要 (3)Abstracts (4)第一章绪论 (7)背景 (7)第二章开发工具与语言简介 (8)2.1 Java简介 (8)2.2 Eclipse开发环境简介 (9)2.3 JAVA的优缺点 (10)第三章程序的源代码与实现 (12)3.1 界面 (12)3.1.1 按钮 (12)3.1.2 棋盘与棋子实现 (12)3.1.3 文本框代码 (14)3.1.4 布局 (14)3.2 按钮功能实现 (16)3.2.1 监听 (16)3.2.2 连接 (17)3.2.3 认输 (17)3.2.4 新游戏 (19)3.2.5 悔棋................................ 错误!未定义书签。
毕业设计-基于Java的五子棋游戏的设计
基于Java的五子棋游戏的设计摘要五子棋作为一个棋类竞技运动,在民间十分流行,为了熟悉五子棋规则及技巧,以及研究简单的人工智能,决定用Java开发五子棋游戏。
主要完成了人机对战和玩家之间联网对战2个功能。
网络连接部分为Socket编程应用,客户端和服务器端的交互用Class Message定义,有很好的可扩展性,客户端负责界面维护和收集用户输入的信息,及错误处理。
服务器维护在线用户的基本信息和任意两个对战用户的棋盘信息,动态维护用户列表。
在人机对弈中通过深度搜索和估值模块,来提高电脑棋手的智能。
分析估值模块中的影响精准性的几个要素,以及提出若干提高精准性的办法,以及对它们搜索的节点数进行比较,在这些算法的基础上分析一些提高电脑AI方案,如递归算法、电脑学习等。
算法的研究有助于理解程序结构,增强逻辑思维能力,在其他人工智能方面也有很大的参考作用。
关键词:深度搜索;估值;电脑AI;五子棋;算法Gobang Java-based games designAbstractAs a sport, gobang is very popular in civil, in order to become familiar with gobang rules and techniques, and the study of simple artificial intelligence, I decide to use the Java to develope gobang games and complete the two functions including man-machine war and man-man war. Network Connection is Socket Programming for some applications, client and server interaction is definited by Class Message, which is a very good scalability, Client interface is responsible for the collection and maintenance of user input information, and error handling. Server users maintain online basic information and arbitrary two-time users of the chessboard of information, dynamic maintenance user list. During the man-machine players, it improves intelligence of the computer players through depth search and valuation module. Analyzes Module valuation of the precise elements, as well as a number of increased precision, and compares their search for nodes, which raises some computer AI programs on the basis of analysis, such as recursive algorithm, computer learning. Algorithm of procedures contribute to the understanding of the structure, logical thinking ability, In other areas of artificial intelligence has great references..Key words:Search depth; Valuation; Computer AI; Gobang ; Algorithm目录论文总页数:23页1 引言 (1)1.1课题背景 (1)1.2本课题研究的意义 (1)1.3本课题的研究方法 (2)2 课题相关基础 (2)2.1五子棋 (2)2.1.1棋盘和棋子 (2)2.1.2规则及解释 (3)2.1.3五子棋常用术语 (4)2.1.4五子棋攻防 (7)3 JA V A (8)3.1J AVA简介 (8)3.2J AVA开发环境 (10)4 课题详细研究方法 (11)4.1程序结构说明 (11)4.2棋盘及棋子的类 (12)4.2.1棋盘 (12)4.2.2棋子 (14)4.3胜负判断条件 (14)4.4网络对战 (16)4.5电脑AI (18)结论 (22)参考文献......................................................................................................... 错误!未定义书签。
基于Java的_网络版五子棋_游戏的设计和实现毕业设计
摘要目前,随着计算机网络的发展,以计算机技术和网络技术为核心的现代网络技术已经在现实生活和生产中得到了广泛的使用,休闲类网络游戏集趣味性,娱乐性,互动性和益智性于一体,已经成为多数人群的休闲方式,也为多数人所喜好。
本设计收集了关于JAVA基础的书籍,着重收录了关于SOCKET编程的内容,找到了五子棋概述和规则的资料,查阅了网络通信技术的相关论文,同时也参考了很多关于五子棋实现的程序资料以及关于JAVA开发工具的介绍的文档。
在期间,作者学习了多线程技术、数据传输技术、SOCKET编程技术,研究了网络通信原理、JAVA编写原理等一系列的原理。
开发了五子棋网络对战的代码,实现了网络聊天、联机对战、网络通信、界面组织如:棋盘、建立服务器、连接到服务器等功能。
通过对以上技术的学习和研究,利用SOCKET编程,能服务器与客户端之间的连接,利用多线程技术完成了服务器端与客户端之间的数据传输、网络通信,使得两个客户端能够同步的进行处理。
关键词: JAVA 多线程 SOCKET 五子棋AbstractAt present , with the development of computer networks , computer and network technology as the core of modern network technology has been widely used in real life and production, the casual game set interesting , entertaining, interactive and puzzle in one, has become the majority population of leisure, but also for the majority of people have preferences.The design of the collection of books on the JAVA -based , focusing on the collection of content SOCKET programming , found the data overview and backgammon rules , access to the network communication technology related papers also refer to a lot of information on backgammon program implementation as well as on document describes the JAVA development tools . In the meantime, I learned the multi-threading technology, data transmission technology , SOCKET programming technique to study the principle of network communication , JAVA write a series of principles such as the principle . Developed backgammon online play code implements online chat , online gaming, network communications, interface organizations such as : the board , establish a server , connect to the server and other functions. Through the above technical study and research , the use SOCKET programming, connections between the server and client can use multi-threading technology to complete the data transfer between the client and the server , and network communication , so that both the client can synchronize for processing.Keywords:JAVA multithreading SOCKET Gobang目录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.3.2 Socket编程的实现 (6)2.4 Java 图形编程 (7)2.5多线程机制 (7)3 需求分析和总体设计 (9)3.1 需求分析作用 (9)3.1.1 界面需求分析 (9)3.1.2 软件需求分析 (9)3.2 总体设计 (9)3.2.1 系统设计思想 (10)3.2.2 系统总体设计 (10)3.3 功能模块及流程 (11)3.3.1 系统主要模块 (11)3.3.2服务器端作用 (12)3.3.3客户端作用 (13)4 详细设计及实现 (15)4.1 系统主流程 (15)4.2 如何判断输赢 (16)4.3 开发环境的搭建 (19)4.4 功能模块的界面实现 (20)5 软件的测试 (23)5.1 软件测试的方法 (23)6 总结语 (25)参考文献 (26)1 绪论1.1 背景及意义1.背景随着经济社会的迅速发展,人们生活水平有了很大的提高,人们的生活观念也发生了巨大的改变。
(完整版)Java五子棋毕业设计
以下文档格式全部为word格式,下载后您可以任意修改编辑。
摘要人工智能是一门正在迅速发展的新兴的,综合性很强的交叉科学。
它与生物工程、空间技术一起被并列为二十一世界三大尖端技术。
它的中心任务是研究如何使计算机去做那些过去只能靠人的智力才能做的工作。
目前各发达国家都把人工智能作为重点项目,列入本国的高科技发展计划当中,投入巨大的人力和物力。
计算机人机对弈也是其中之一。
作为人智能研究的一个重要分支,计算机博弈是检验人工水平的一个重要方面。
它的研究为人工智能带来了很多重要的方法和理论,产生了广泛的社会影响和学术影响。
五子棋人机对弈是计算机博弈中的一种。
研究其计算机算法,可以让我们看到人工智能的稚形,也有助于我们人脑的开发。
五子棋是我国发明的,研究它可以让更多的外国人了解五子棋,这有助于我国优秀文化的推广。
关键词:人工智能,计算人机对弈,五子棋,算法AbstractArtificial intelligence is a rapidly developing new, integrated a strong Frontier Science. It is with bio-engineering, space technology listed as 21 in the world along with the three cutting-edge technology. Its central task is to study the past to rely on intelligence to do. AI is currently regarded as the focus of the developed countries included in this car's and material resources.Man-machine chess computer is one of them. As a study of an important branch of intelligence, the computer game to test the level of an important aspect of the manual. Its research in artificial intelligencemany important methods and theories to produce a wide range of social impact and academic impact.Man-machine chess game Renju in one of the computer. To study the computer algorithm, we can see the beginning of artificial intelligence shadow, but also brain development. Backgammon invented in China, and the research it can allow more foreigners to understand and -machine Cchess Computer,Man-machine Chess, Algorithm目录摘要 (Ⅰ)Abstract (Ⅱ)目录..........................................................................................................................Ⅲ第一章绪论 (1)第二章需求分析 (2)2.1 业务需求 (2)2.2 性能需求 (2)2.3 系统平台需求 (2)第三章五子棋相关基础 (4)3.1 五子棋解释 (4)3.2 五子棋的基本规则 (4)3.3 五子棋的常用术语 (5)第四章开发工具、环境及其技术 (7)4.1 Java简介 (7)4.2 Java编程环境 (9)第五章程序设计思路与实现 (10)5.1 程序设计思路 (10)5.2 程序设计 (13)结论...........................................................................................................................33参考文献....................................................................................................................致谢.......................................................................................................................... ..附录.......................................................................................................................... ..第一章:绪论1.1 前言电脑已经深入到日常工作和生活的方方面面,比如文字处理、信息管理、辅助设计、图形图像处理、教育培训以及游戏娱乐等。
java课程设计五子棋游戏完整版
沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学算下一步棋,isMatrix位true参数为插入点棋格坐标,否则参数为插入点像素坐标。
当游戏结束的时候使用Graphics g调用方法,在游戏过程中如果是黑方或是白方获胜在棋盘中就会显示是哪方获胜。
3.设计结果与分析(1)当进入到游戏当中可以选择是哪个颜色的棋先出,选择好之后便可以单机开始进行下棋,如果在游戏过程中出现什么问题可以单机再来一局重新开始游。
五子棋游戏的主界面如图2所示:图2.程序主界面(2)如果实黑棋先开始那么开始后的界面中先出的棋显示的是黑棋,如果是白棋先出则显示的是白棋,以黑棋为例如图3所示:沈阳大学图3.黑棋先出的界面图(3)对于五子棋游戏,无论人机对战,还是双人对战,都需要判断棋盘上是否存在五子连珠情况,这既是游戏名字的由来,也是游戏结束的标志。
判断五子连珠的原理是从横,竖,左斜线,右斜线4条线上判断是否存在5个相连的同类棋子,黑棋的五个棋子在横、竖或斜方向上连接成一线即为该方赢如图4所示:沈阳大学图4.游戏结束界面(4)白棋的五个棋子在横、竖或斜方向上连接成一线即为该方赢如图4所示:沈阳大学图5.白棋胜利界面图4.设计体会通过这次课程设计,我进一步加深对基础理论的理解,扩大专业知识面,对收集资料、查阅文献、方案制定等实践方面得到了很好的锻练,促进对所学知识应用能力的提高。
同时我渐渐的复习了Java使用方法和编程语法,之后的编程过程也相对得心应手,基本完成了预期计划的要求。
在此感谢我的指导老师—原玥老师,她在课题的研究上不遗余力的给予指导。
她严谨的治学态度深深的影响了我,使我受益匪浅!这个课设题对我来说有一定的挑战性,因为我自己也不知道自己到底学到了一个什么样的境界。
但可以肯定,这个课设题的要求绝对在我的能力范围以上。
之所以选择这个题目是想逼着自己去查更多的资料,学到更多的东西。
结果也确实是这样的,我在这次课设中学到了不少东西,也理解了许多原来不理解的东西。
基于JAVA的五子棋游戏设计本科毕业设计
XX大学本科毕业设计基于JAVA的五子棋游戏设计毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:日期:学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
作者签名:日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:日期:年月日导师签名:日期:年月日基于JAVA的五子棋游戏设计内容摘要:随着网络的不断进步,网络游戏逐渐成为人们生活中的一部分,它不仅能够使人娱乐和消遣,也能够开发人的智力,使大脑更加的灵活。
本文所讲述的五子棋游戏通过双方的竞技,能够开发人们的才干和开发人们的智力。
java课程设计五子棋
java课程设计五子棋一、课程目标知识目标:1. 理解五子棋游戏的规则及基本算法。
2. 掌握Java编程语言的基本语法,如变量声明、条件语句、循环结构等。
3. 学会使用Java中的数组进行数据存储和处理。
4. 了解面向对象编程的基本概念,如类的定义、对象创建和使用。
技能目标:1. 能够编写出实现五子棋游戏核心功能(如棋盘绘制、落子判断、胜负判断)的Java程序。
2. 通过编程实践,提升问题分析能力,学会将现实问题转化为计算机程序解决问题。
3. 能够使用合适的调试工具检查和修复程序中的错误,提高代码调试能力。
4. 培养良好的编程习惯,如编写规范的注释、合理的变量命名等。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发其探究计算机科学领域的好奇心。
2. 鼓励学生积极合作,通过小组讨论和交流,培养团队协作精神。
3. 培养学生的逻辑思维能力和创新意识,使其在面对问题时能够主动思考、寻找解决方案。
4. 增强学生的自信心,使其在完成五子棋项目的过程中感受到编程带来的成就感。
课程性质分析:本课程为实践性较强的学科项目,结合Java编程语言,以五子棋游戏为载体,引导学生学习编程知识,培养其编程技能。
学生特点分析:学生处于能够理解编程基本概念,具备初步编程能力的阶段,对实际项目充满兴趣,希望将所学知识应用于实际问题。
教学要求:教师应注重理论与实践相结合,引导学生主动探索,关注学生个体差异,提供个性化指导,确保学生在完成课程目标的同时,提高编程能力和综合素质。
二、教学内容1. Java基本语法复习:变量声明与赋值、数据类型、运算符、条件语句(if-else、switch)、循环结构(for、while)。
相关教材章节:第一章至第三章。
2. 数组的使用:一维数组的定义、初始化、遍历;二维数组的应用。
相关教材章节:第四章。
3. 面向对象基础:类的定义、属性、方法;对象的创建与使用。
相关教材章节:第五章。
4. 五子棋游戏设计:a. 棋盘绘制:使用二维数组表示棋盘,绘制初始界面。
JAVA课程设计 五子棋(内附完整代码)
JAVA课程设计设计题目:五子棋游戏一.简要的介绍五子棋1.五子棋的起源五子棋,又被称为“连五子、五子连、串珠、五目、五目碰、五格、五石、五法、五联、京棋”。
五子棋相传起源于四千多年前的尧帝时期,比围棋的历史还要悠久,可能早在“尧造围棋”之前,民间就已有五子棋游戏。
有关早期五子棋的文史资料与围棋有相似之处,因为古代五子棋的棋具与围棋是完全相同的。
2.现在五子棋标准棋盘(如图所示)3.五子棋的棋子五子棋采用两种颜色棋子,黑色棋子和白色棋子,和围棋相同,4.五子棋规则五子棋就是五个棋子连在一起就算赢,黑棋先行,下棋下在棋盘交叉线上,由于黑棋先行,优势太大,所以对黑棋设了禁手,又规定了“三手交换”,就是黑棋下第 2 手棋,盘面第 3 着棋之后,白方在应白 2 之前,如感觉黑方棋形不利于己方,可出交换,即执白棋一方变为执黑棋一方。
和“五手两打法”,就是黑棋在下盘面上关键的第 5 手时,必须下两步棋,让白方在这两步棋中任选一步,然后再续下。
不过一般爱好者不需要遵循这么多规则。
二.程序流程三.代码设计与分析main方法创建了ChessFrame类的一个实例对象(cf),并启动屏幕显示显示该实例对象。
public class FiveChessAppletDemo {public static void main(String args[]){ChessFrame cf = new ChessFrame();cf.show();}}用类ChessFrame创建五子棋游戏主窗体和菜单import java.awt.*;import java.awt.event.*;import java.applet.*;import javax.swing.*;import java.io.PrintStream;import javax.swing.JComponent;import javax.swing.JPanel;class ChessFrame extends JFrame implements ActionListener { private String[] strsize={"标准棋盘","改进棋盘","扩大棋盘"}; private String[] strmode={"人机对战","人人对战"};public static boolean iscomputer=true,checkcomputer=true; private int width,height;private ChessModel cm;private MainPanel mp;构造五子棋游戏的主窗体public ChessFrame() {this.setTitle("五子棋游戏");cm=new ChessModel(1);mp=new MainPanel(cm);Container con=this.getContentPane();con.add(mp,"Center");this.setResizable(false);this.addWindowListener(new ChessWindowEvent());MapSize(14,14);JMenuBar mbar = new JMenuBar();this.setJMenuBar(mbar);JMenu gameMenu = new JMenu("游戏");mbar.add(makeMenu(gameMenu, new Object[] {"开局", null,"棋盘",null,"模式", null, "退出"}, this));JMenu lookMenu =new JMenu("外观");mbar.add(makeMenu(lookMenu,new Object[] {"类型一","类型二","类型三"},this));JMenu helpMenu = new JMenu("版本");mbar.add(makeMenu(helpMenu, new Object[] {"关于"}, this));}构造五子棋游戏的主菜单public JMenu makeMenu(Object parent, Object items[], Object target){ JMenu m = null;if(parent instanceof JMenu)m = (JMenu)parent;else if(parent instanceof String)m = new JMenu((String)parent);elsereturn null;for(int i = 0; i < items.length; i++)if(items[i] == null)m.addSeparator();else if(items[i] == "棋盘"){JMenu jm = new JMenu("棋盘");ButtonGroup group=new ButtonGroup();JRadioButtonMenuItem rmenu;for (int j=0;j<strsize.length;j++){rmenu=makeRadioButtonMenuItem(strsize[j],target);if (j==0)rmenu.setSelected(true);jm.add(rmenu);group.add(rmenu);}m.add(jm);}else if(items[i] == "模式"){JMenu jm = new JMenu("模式");ButtonGroup group=new ButtonGroup();JRadioButtonMenuItem rmenu;for (int h=0;h<strmode.length;h++){rmenu=makeRadioButtonMenuItem(strmode[h],target);if(h==0)rmenu.setSelected(true);jm.add(rmenu);group.add(rmenu);}m.add(jm);}elsem.add(makeMenuItem(items[i], target));return m;}构造五子棋游戏的菜单项public JMenuItem makeMenuItem(Object item, Object target){ JMenuItem r = null;if(item instanceof String)r = new JMenuItem((String)item);else if(item instanceof JMenuItem)r = (JMenuItem)item;elsereturn null;if(target instanceof ActionListener)r.addActionListener((ActionListener)target);return r;}构造五子棋游戏的单选按钮式菜单项public JRadioButtonMenuItem makeRadioButtonMenuItem(Object item, Object target){JRadioButtonMenuItem r = null;if(item instanceof String)r = new JRadioButtonMenuItem((String)item);else if(item instanceof JRadioButtonMenuItem)r = (JRadioButtonMenuItem)item;elsereturn null;if(target instanceof ActionListener)r.addActionListener((ActionListener)target);return r;}public void MapSize(int w,int h){setSize(w * 24, h * 27);if(this.checkcomputer)this.iscomputer=true;elsethis.iscomputer=false;mp.setModel(cm);mp.repaint();}public boolean getiscomputer(){return this.iscomputer;}public void restart(){int modeChess = cm.getModeChess();if(modeChess <= 3 && modeChess >= 0){cm = new ChessModel(modeChess);MapSize(cm.getWidth(),cm.getHeight());}}public void actionPerformed(ActionEvent e){String arg=e.getActionCommand();try{if (arg.equals("类型三"))UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");else if(arg.equals("类型二"))UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");elseUIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel" );SwingUtilities.updateComponentTreeUI(this);}catch(Exception ee){}if(arg.equals("标准棋盘")){this.width=14;this.height=14;cm=new ChessModel(1);MapSize(this.width,this.height);SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("改进棋盘")){this.width=18;this.height=18;cm=new ChessModel(2);MapSize(this.width,this.height);SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("扩大棋盘")){this.width=22;this.height=22;cm=new ChessModel(3);MapSize(this.width,this.height);SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("人机对战")){this.checkcomputer=true;this.iscomputer=true;cm=new ChessModel(cm.getModeChess());MapSize(cm.getWidth(),cm.getHeight());SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("人人对战")){this.checkcomputer=false;this.iscomputer=false;cm=new ChessModel(cm.getModeChess());MapSize(cm.getWidth(),cm.getHeight());SwingUtilities.updateComponentTreeUI(this);}if(arg.equals("开局")){restart();}if(arg.equals("关于"))JOptionPane.showMessageDialog(null, "第一版", "版本",JOptionPane.PLAIN_MESSAGE );if(arg.equals("退出"))System.exit(0);}}用类ChessModel实现了整个五子棋程序算法的核心import java.awt.*;import java.awt.event.*;import java.applet.*;import javax.swing.*;import java.io.PrintStream;import javax.swing.JComponent;import javax.swing.JPanel;class ChessModel {规定棋盘的宽度、高度、棋盘的模式private int width,height,modeChess;规定棋盘方格的横向、纵向坐标private int x=0,y=0;棋盘方格的横向、纵向坐标所对应的棋子颜色,数组arrMapShow只有3个值:1,2,3,-1,其中1代表该棋盘方格上下的棋子为黑子,2代表该棋盘方格上下的棋子为白子,3代表为该棋盘方格上没有棋子,-1代表该棋盘方格不能够下棋子private int[][] arrMapShow;交换棋手的标识,棋盘方格上是否有棋子的标识符private boolean isOdd,isExist;public ChessModel() {}该构造方法根据不同的棋盘模式(modeChess)来构建对应大小的棋盘public ChessModel(int modeChess){this.isOdd=true;if(modeChess == 1){PanelInit(14, 14, modeChess);}if(modeChess == 2){PanelInit(18, 18, modeChess);}if(modeChess == 3){PanelInit(22, 22, modeChess);}}按照棋盘模式构建棋盘大小private void PanelInit(int width, int height, int modeChess){ this.width = width;this.height = height;this.modeChess = modeChess;arrMapShow = new int[width+1][height+1];for(int i = 0; i <= width; i++){for(int j = 0; j <= height; j++){arrMapShow[i][j] = -1;}}}获取是否交换棋手的标识符public boolean getisOdd(){return this.isOdd;}设置交换棋手的标识符public void setisOdd(boolean isodd){ if(isodd)this.isOdd=true;elsethis.isOdd=false;}获取某棋盘方格是否有棋子的标识值public boolean getisExist(){return this.isExist;}获取棋盘宽度public int getWidth(){return this.width;}获取棋盘高度public int getHeight(){return this.height;}获取棋盘模式public int getModeChess(){return this.modeChess;}获取棋盘方格上棋子的信息public int[][] getarrMapShow(){return arrMapShow;}判断下子的横向、纵向坐标是否越界private boolean badxy(int x, int y){if(x >= width+20 || x < 0)return true;return y >= height+20 || y < 0;}计算棋盘上某一方格上八个方向棋子的最大值,这八个方向分别是:左、右、上、下、左上、左下、右上、右下public boolean chessExist(int i,int j){if(this.arrMapShow[i][j]==1 || this.arrMapShow[i][j]==2)return true;return false;}判断该坐标位置是否可下棋子public void readyplay(int x,int y){if(badxy(x,y))return;if (chessExist(x,y))return;this.arrMapShow[x][y]=3;}在该坐标位置下棋子public void play(int x,int y){if(badxy(x,y))return;if(chessExist(x,y)){this.isExist=true;return;}elsethis.isExist=false;if(getisOdd()){setisOdd(false);this.arrMapShow[x][y]=1;}else{setisOdd(true);this.arrMapShow[x][y]=2;}}计算机走棋说明:用穷举法判断每一个坐标点的四个方向的的最大棋子数,最后得出棋子数最大值的坐标,下子public void computerDo(int width,int height){int max_black,max_white,max_temp,max=0;setisOdd(true);System.out.println("计算机走棋 ...");for(int i = 0; i <= width; i++){for(int j = 0; j <= height; j++){算法判断是否下子if(!chessExist(i,j)){判断白子的最大值max_white=checkMax(i,j,2);判断黑子的最大值max_black=checkMax(i,j,1);max_temp=Math.max(max_white,max_black);if(max_temp>max){max=max_temp;this.x=i;this.y=j;}}}}setX(this.x);setY(this.y);this.arrMapShow[this.x][this.y]=2;}记录电脑下子后的横向坐标public void setX(int x){this.x=x;}记录电脑下子后的纵向坐标public void setY(int y){this.y=y;}获取电脑下子的横向坐标public int getX(){return this.x;}获取电脑下子的纵向坐标public int getY(){return this.y;}计算棋盘上某一方格上八个方向棋子的最大值,这八个方向分别是:左、右、上、下、左上、左下、右上、右下public int checkMax(int x, int y,int black_or_white){ int num=0,max_num,max_temp=0;int x_temp=x,y_temp=y;int x_temp1=x_temp,y_temp1=y_temp;判断右边for(int i=1;i<5;i++){x_temp1+=1;if(x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white)num++;elsebreak;}判断左边x_temp1=x_temp;for(int i=1;i<5;i++){x_temp1-=1;if(x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}if(num<5)max_temp=num;判断上面x_temp1=x_temp;y_temp1=y_temp;num=0;for(int i=1;i<5;i++){y_temp1-=1;if(y_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}判断下面y_temp1=y_temp;for(int i=1;i<5;i++){y_temp1+=1;if(y_temp1>this.height)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}if(num>max_temp&&num<5)max_temp=num;判断左上方x_temp1=x_temp;y_temp1=y_temp;num=0;for(int i=1;i<5;i++){x_temp1-=1;y_temp1-=1;if(y_temp1<0 || x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}判断右下方x_temp1=x_temp;y_temp1=y_temp;for(int i=1;i<5;i++){x_temp1+=1;y_temp1+=1;if(y_temp1>this.height || x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}if(num>max_temp&&num<5)max_temp=num;判断右上方x_temp1=x_temp;y_temp1=y_temp;num=0;for(int i=1;i<5;i++){x_temp1+=1;y_temp1-=1;if(y_temp1<0 || x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}判断左下方x_temp1=x_temp;for(int i=1;i<5;i++){x_temp1-=1;y_temp1+=1;if(y_temp1>this.height || x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==black_or_white) num++;elsebreak;}if(num>max_temp&&num<5)max_temp=num;max_num=max_temp;return max_num;}判断胜负public boolean judgeSuccess(int x,int y,boolean isodd){ int num=1;int arrvalue;int x_temp=x,y_temp=y;if(isodd)arrvalue=2;elsearrvalue=1;int x_temp1=x_temp,y_temp1=y_temp;判断右边胜负for(int i=1;i<6;i++){x_temp1+=1;if(x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue)num++;elsebreak;}判断左边胜负x_temp1=x_temp;for(int i=1;i<6;i++){x_temp1-=1;break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}if(num==5)return true;判断上方胜负x_temp1=x_temp;y_temp1=y_temp;num=1;for(int i=1;i<6;i++){y_temp1-=1;if(y_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}判断下方胜负y_temp1=y_temp;for(int i=1;i<6;i++){y_temp1+=1;if(y_temp1>this.height)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}if(num==5)return true;判断左上胜负x_temp1=x_temp;y_temp1=y_temp;num=1;for(int i=1;i<6;i++){y_temp1-=1;if(y_temp1<0 || x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}判断右下胜负x_temp1=x_temp;y_temp1=y_temp;for(int i=1;i<6;i++){x_temp1+=1;y_temp1+=1;if(y_temp1>this.height || x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}if(num==5)return true;判断右上胜负x_temp1=x_temp;y_temp1=y_temp;num=1;for(int i=1;i<6;i++){x_temp1+=1;y_temp1-=1;if(y_temp1<0 || x_temp1>this.width)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue) num++;elsebreak;}判断左下胜负x_temp1=x_temp;y_temp1=y_temp;for(int i=1;i<6;i++){x_temp1-=1;y_temp1+=1;if(y_temp1>this.height || x_temp1<0)break;if(this.arrMapShow[x_temp1][y_temp1]==arrvalue)num++;elsebreak;}if(num==5)return true;return false;}赢棋后的提示public void showSuccess(JPanel jp){JOptionPane.showMessageDialog(jp,"你赢了","结果",RMATION_MESSAGE);}输棋后的提示public void showDefeat(JPanel jp){JOptionPane.showMessageDialog(jp,"你输了","结果",RMATION_MESSAGE);}}用类MainPanel主要完成如下功能:1、构建一个面板,在该面板上画上棋盘;2、处理在该棋盘上的鼠标事件(如鼠标左键点击、鼠标右键点击、鼠标拖动等)import java.awt.*;import java.awt.event.*;import java.applet.*;import javax.swing.*;import java.io.PrintStream;import javax.swing.JComponent;import javax.swing.JPanel;class MainPanel extends JPanelimplements MouseListener,MouseMotionListener{设定棋盘的宽度和高度private int width,height;private ChessModel cm;根据棋盘模式设定面板的大小MainPanel(ChessModel mm){cm=mm;width=cm.getWidth();height=cm.getHeight();addMouseListener(this);}根据棋盘模式设定棋盘的宽度和高度public void setModel(ChessModel mm){cm = mm;width = cm.getWidth();height = cm.getHeight();}根据坐标计算出棋盘方格棋子的信息(如白子还是黑子),然后调用draw方法在棋盘上画出相应的棋子public void paintComponent(Graphics g){super.paintComponent(g);for(int j = 0; j <= height; j++){for(int i = 0; i <= width; i++){int v = cm.getarrMapShow()[i][j];draw(g, i, j, v);}}}根据提供的棋子信息(颜色、坐标)画棋子public void draw(Graphics g, int i, int j, int v){ int x = 20 * i+20;int y = 20 * j+20;画棋盘if(i!=width && j!=height){g.setColor(Color.darkGray);g.drawRect(x,y,20,20);}画黑色棋子if(v == 1 ){g.setColor(Color.gray);g.drawOval(x-8,y-8,16,16);g.setColor(Color.black);g.fillOval(x-8,y-8,16,16);}画白色棋子if(v == 2 ){g.setColor(Color.gray);g.drawOval(x-8,y-8,16,16);g.setColor(Color.white);g.fillOval(x-8,y-8,16,16);}if(v ==3){g.setColor(Color.cyan);g.drawOval(x-8,y-8,16,16);}}响应鼠标的点击事件,根据鼠标的点击来下棋,根据下棋判断胜负等public void mousePressed(MouseEvent evt){int x = (evt.getX()-10) / 20;int y = (evt.getY()-10) / 20;System.out.println(x+" "+y);if (evt.getModifiers()==MouseEvent.BUTTON1_MASK){cm.play(x,y);System.out.println(cm.getisOdd()+" "+cm.getarrMapShow()[x][y]); repaint();if(cm.judgeSuccess(x,y,cm.getisOdd())){cm.showSuccess(this);evt.consume();ChessFrame.iscomputer=false;}判断是否为人机对弈if(ChessFrame.iscomputer&&!cm.getisExist()){puterDo(cm.getWidth(),cm.getHeight());repaint();if(cm.judgeSuccess(cm.getX(),cm.getY(),cm.getisOdd())){ cm.showDefeat(this);evt.consume();}}}}public void mouseClicked(MouseEvent evt){}public void mouseReleased(MouseEvent evt){}public void mouseEntered(MouseEvent mouseevt){}public void mouseExited(MouseEvent mouseevent){}public void mouseDragged(MouseEvent evt){}响应鼠标的拖动事件public void mouseMoved(MouseEvent moveevt){int x = (moveevt.getX()-10) / 20;int y = (moveevt.getY()-10) / 20;cm.readyplay(x,y);repaint();}}import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;响应退出窗口class ChessWindowEvent extends WindowAdapter{public void windowClosing(WindowEvent e){System.exit(0);}ChessWindowEvent(){}}四.程序调试与运行运行:标准棋盘改进棋盘:扩大棋盘:外观类型二:外观类型三:人机对战:结果:五.结论通过对五子棋游戏的编写,使自己对java语言有了更深的了解。
五子棋网络对战系统 毕业设计论文
五子棋网络对战系统毕业设计论文xx大学xx学院本科生毕业设计(论文)题目: 用JAVA实现五子棋网络对战系统姓名: xxxx学号: xxxxx系别: 计算机工程系专业: 计算机科学与技术年级: xxx级指导教师: xxxx2013年6月23日独创性声明本毕业设计(论文)是我个人在导师指导下完成的。
文中引用他人研究成果的部分已在标注中说明;其他同志对本设计(论文)的启发和贡献均已在谢辞中体现;其它内容及成果为本人独立完成。
特此声明。
论文作者签名: 日期:关于论文使用授权的说明本人完全了解福州大学至诚学院有关保留、使用学位论文的规定,即:学院有权保留送交论文的印刷本、复印件和电子版本,允许论文被查阅和借阅;学院可以公布论文的全部或部分内容,可以采用影印、缩印、数字化或其他复制手段保存论文。
保密的论文在解密后应遵守此规定。
论文作者签名: 指导教师签名: 日期:II用JAVA实现五子棋网络对战系统摘要现代科学技术正在迅猛的发展着,计算机信息技术在其中发挥着巨大的作用。
在此背景下,Java已经从一种与平台无关的编程语言演变成一种跨平台的服务器端技术,同时JAVA也成了最常用的语言之一。
对比C++语言,Java语言更加简单,Java语言更加容易理解,也没那么容易出错,它的语法结构让人看起来更加简洁清楚。
此外Java语言相对比较晚出现,它在面向对象和多线程特性上相对其他计算机语言有了很大的进步,而且在Java语言中比较容易实现算法,可以大大缩短了我们编写程序的时间,同时写出来的Java代码也比较容易得到复用和移植。
基于以上优点,本文采用Java语言实现一款五子棋网络对战系统。
此次游戏设计采用Eclips作为开发环境,运用了最传统的游戏规则,即出现连续五颗相同颜色的棋子则获得胜利。
并且只需用鼠标点击就可以实现这个游戏所有操作:开始游戏、落子、投降、求和。
这种设置老少皆宜,让所有的人都可以无障碍的玩这游戏,并配合简洁的游戏界面,让玩家体验到五子棋的趣味性。
基于java程序的五子棋游戏设计 论文(全)
IBased On JAVA Five Chess Game DesignAbstractAlong with the advance of network, network game has gradually become a part of people's life, it can not only make people entertainment and recreation, but also to developers of intelligence, make the brain more flexible.This paper design the gobang game by both sides of the game, to develop the ability of people and develop people's intelligence.So far, the Java platform has attracted more than 500 software developers.It in every major industry sectors has been widely used, and appear in all kinds of equipment, computer and network.Java technology platform for the generality, high efficiency, portability and security, making it the ideal network computing technology.From laptops to data center, from the game console to scientific supercomputers, from mobile phones to the Internet, Java everywhere!Java has immeasurable value for developers, so that they can:On a platform to write software that can then be run on almost all other platforms, create can run in a Web browser and the Web service application, development is applicable to online BBS, storage, voting and other USES HTML format processing and server-side applications.Will use the Java language's application or service together, form a highly customized applications or services, for mobile phones, remote processor, low cost of consumer products, and any other device with digital core to write powerful and efficient application.Eclipse tools, this article USES the Java language developed gobang game, the game can be achieved against chess, two people also is everyone's game, and cannot achieve the man-machine game.Can according to their own requirements set in the program both sides against the game time and intelligent determine which side to win in the game and the end of the game.Keywords: Java ,Five Chess ,Eclipse ,intelligenceII基于JAVA程序的五子棋游戏设计摘要随着网络的不断进步,网络游戏已经逐渐成为人们生活中的一部分,它不仅能够使人娱乐和消遣,而且也能够开发人的智力,使大脑更加的灵活。
(完整版)java五子棋毕业课程设计
目录1绪论 (1)1.1课程设计意义 (1)1.2课设目的 (1)1.3课设要求 (1)2网络五子棋介绍 (2)2.1网络五子棋介绍 (2)2.2游戏玩法 (2)3系统整体设计 (3)3.1整体设计 (3)3.2系统流程图 (4)4原理分析 (5)4.1服务器和客户端通信机制 (5)4.2多线程机制 (7)5服务器的设计与实现 (8)5.1服务器监听 (8)5.2传递信息 (9)6客户端设计与实现 (10)6.1客户端界面设计 (11)6.1.1GUI图形界面设计 (12)6.1.2注册监听者 (13)6.2连接服务器 (14)6.3传递信息 (14)6.4棋盘数据结构 (15)6.5判断输赢算法 (16)6.6背景音乐 (17)7设计实现 (18)8总结 (20)谢辞 (21)参考文献 (21)1绪论1.1课程设计意义五子棋是起源于中国古代的传统黑白棋种之一。
五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。
经过一个学期的学习,使我对Java有了一定的了解。
但要深入理解Java语言,单靠上课是不够的。
必须通过课程设计,设计一个比较大的程序,才能更深一步地理解Java语言。
在这次课程中,我选择了网络五子棋作为课题。
编写网络五子棋游戏要利用到Socket网络编程技术和多线程。
通过这次课程设计,熟悉Java的GUI图形界面设计,网络Socket 编程和多线程编程。
1.2课设目的通过课程设计,使学生理论联系实际,在程序设计实践中进一步了解JA V A程序设计方法掌握类和对象的基本编程方法,熟悉GUI图形界面编程技术,初步了解Socket编程方法。
1.3课设要求通过课程设计完成一个网络五子棋游戏。
由服务器和客户端组成。
在Internet中不同用户使用客户端通过服务器与其它玩家连接。
进行五子棋网络对战或聊天。
程序中要实现GUI图形界面的棋盘、黑子、白子功能,设计棋局存储数据结构, 实现开始、重来、退出等基本功能, 实现输赢自动判别算法, 实现网络对战功能, 背景音乐播放功能等。
JAVA五子棋课程设计
升级内容:软 件升级、硬件
升级
升级注意事项: 备份数据、检 查兼容性、确
保网络畅通
07 总结与展望
项目总结
项目目标:设计并实现一个JAVA五子棋游戏 项目成果:实现了五子棋游戏的基本规则和功能 项目难点:AI算法的设计和实现 项目改进:优化AI算法,提高游戏难度和趣味性 项目展望:未来可以尝试实现更多游戏功能,如多人对战、在线对战等
部署步骤:下载源 代码、编译、打包 、部署到服务器
维护方法:定期备 份数据、更新软件 版本、监控系统运 定期更新系统,确保系统安全 定期检查硬件设备,确保硬件正常运行 定期清理系统垃圾,提高系统运行速度
系统升级
升级目的:提 高系统稳定性、 安全性和性能
升级方式:自 动升级、手动
击
可扩展性:系统应具有良好 的可扩展性,便于未来功能
扩展和升级
04 系统设计
系统架构
服务器端:负责游戏管理和 数据存储
数据库:存储游戏数据和用 户信息
通信协议:定义客户端和服 务器之间的通信格式和规则
客户端:负责用户界面和游 戏逻辑
安全性:确保数据安全和用 户隐私
界面设计
棋盘设计:黑白棋子,棋盘背景色 游戏界面:开始、结束、重新开始按钮 提示信息:提示玩家下一步操作 音效设计:背景音乐,棋子落下音效
项目不足与改进空间
代码优化:部 分代码存在冗 余,需要进一
步优化
功能完善:需 要增加更多的 功能,如悔棋、
复盘等
用户体验:界 面设计不够友 好,需要进一
步优化
性能提升:运 行速度较慢, 需要优化算法
和代码结构
项目未来展望
增加功能:支持多人在线对 战,提高社交互动性
java课程设计 五子棋
JA V A课程设计——五子棋设计题目:五子棋 (2)客务端界面: (3)服务端界面: (4)程序界面布局 (5)游戏介绍与规则: (6)事务监听 (6)游戏相关功能 (8)聊天功能 (9)绘制棋盘 (11)判断输赢算法 (12)成员名单.................. 错误!未定义书签。
设计题目:五子棋一、程序目的和功能实现图形用户界面的五子棋双人对战,允许玩家在线聊天,根据玩家需求可进行对战,悔棋。
二、各个类或方法功能说明1.paint面板类,用于绘制棋盘,实现用鼠标进行走棋的动作。
fillOval方法,setColor(Color.black);绘制黑棋;fillOval方法,setColor(Color.white);绘制白棋;2.FiveS IntFC 主类窗口类,创建游戏主窗口以及游戏说明。
3.win类自定义类,实现判断输赢的方法。
核心算法:创建一个二维数组,其中储存的数据和棋子在棋盘上的位置一一对应,数组中某一数据等于10则表示棋盘上这个位置上是黑棋,若为1则表示棋盘上这个位置上是白棋,每下一步棋就对整个棋盘进行查找是否有连续五颗颜色相同的棋子。
棋盘如下:客服端界面:服务端界面:界面布局与菜单我们的程序设计由我们五个人共同完成,各人负责不同的模块程序界面布局主要使用了java.awt 组件兼和使用swing组件程序开始的欢迎框相关代码:主要用了JOptionPane.showMessageDialog程序的菜单菜单项使用JOptionPane.showMessageDialog制成的游戏帮助文档,单击菜单项后弹出以下各项游戏介绍与规则游戏介绍与规则事务监听相关代码对相关菜单项相关按钮事件源使用了事务监听beginGame=new MenuItem("开始下棋");//响应开始游戏菜单事件beginGame.addActionListener(new StartGo()); reBegin=new MenuItem("重开棋");//响应重开棋菜单事件reBegin.addActionListener(new ReBegin()); back=new MenuItem("梅棋");//响应梅棋菜单事件//相应帮助helpSite1=new MenuItem("游戏介绍");helpSite1.addActionListener(new HelpSite1()); helpSite2=new MenuItem("五子棋规则");helpSite2.addActionListener(new HelpSite2()); helpSite3=new MenuItem("胜负判定");helpSite3.addActionListener(new HelpSite3());btnStartGo=new Button("开始下棋");btnStartGo.addActionListener(new StartGo()); btnReBegin=new Button("重开棋");btnReBegin.addActionListener(new ReBegin()); btnBack=new Button("梅棋");btnBack.addActionListener(new BackChess());游戏相关功能走棋运用数据结构的进栈,每走一步棋进行top++运算,记录下棋//走棋Coordinate push(Coordinate e){point[top]=e;top++;return e;}悔棋利用了数据结构的进栈出栈,每下一步top++一遍,按下悔棋按钮后,进行top--运算,以实现五子棋的悔棋功能//梅棋Coordinate pop(){Coordinate point1=new Coordinate();if(top>0){top--;point1=point[top];}return point1;}boolean isEmpty(){if(top==0){return true;}else{return false;}}}重开棋利用循环,把棋盘上的每个棋子设为初始化状态0,即没有放置任何棋子public void clear(){for(int i=0;i<15;i++){for(int j=0;j<15;j++){chess[i][j]=0;}}聊天功能服务端监听本机3333 端口,等待客服端连接btnConn.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){try{聊天功能server=newServerSocket(Integer.parseInt(tfPort.getText()));sk=server.accept();dataIn=newDataInputStream(sk.getInputStream());dataOut=newDataOutputStream(sk.getOutputStream());TAccept tAccept=new TAccept();Thread thread=new Thread(tAccept);thread.start();}catch (Exception ex){return;}btnConn.setEnabled(false);}}使用多线程接收对方的信息//多线程类,不断接收对方发送的信息class TAccept implements Runnable{public void run(){String[] ss;while (true){try{ss=dataIn.readUTF().split(" ");conn(ss);}catch (Exception ex){}}}主要算法棋盘算法绘制棋盘用drawLine方法画出横竖间隔30像素的15条直线,形成一个棋盘。
JAVA语言的五子棋游戏设计 精品
计算机科学与工程学院课程设计报告题目全称:基于JAVA语言的五子棋游戏设计第1章课程设计的目的与要求1.1 课程设计目的《JA V A程序设计》是计算机相关专业的必修专业基础课程,其实践性、应用性很强。
实践教学环节是必不可少的一个重要环节。
JA V A程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。
1.2 课程设计的实验环境硬件要求能运行Windows 9.X操作系统的微机系统。
JAVA程序设计语言及相应的集成开发环境,J2SDK和ECLIPSE开发工具。
1.3 课程设计的预备知识熟悉JAVA语言及ECLIPSE开发工具。
熟悉Swing编程,以及JFrame类学会Image IO,以及在内存中保存图片背景图片的绘制1.4 课程设计要求按课程设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。
要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握JA V A程序设计的基本技能和面向对象的概念和方法;了解多线程、安全和网络等编程技术。
同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。
第2章课程设计内容2.1课程设计题目基于JAVA语言的五子棋游戏设计2.2课程设计整体设计说明这次设计的是一个五子棋游戏,能实现的功能为1.黑白双方轮流落子,点击鼠标时在棋盘上显示棋子2.在黑白双方某一方获得胜利的时候会有获胜提示3.可设置每个人的走棋时间,在窗体下方显示倒计时,并可判超时判负4.有认输选项5.可以自动判断游戏是否结束在游戏的过程中我们要测试程序是否能够真正达到五子棋的标准,那么我们就要根据下面的五子棋规则进行参照:1.五子棋专用盘为 19条横线×19条坚线组成,交叉的每个点都可以行棋。
java课程设计五子棋
下面的原始码分为4个文件;chessclient.java:客户端主程式。
chessinterface.java:客户端的界面。
chesspad.java:棋盘的绘制。
chessserver.java:服务器端。
可同时容纳50个人同时在线下棋,聊天。
没有加上周详注释,不过绝对能运行,j2sdk1.4下通过。
/****************************************************************** ***************************1.chessclient.java******************************************************************* ***************************/import java.awt.*;import java.awt.event.*;import java.io.*;import .*;import java.util.*;class clientthread extends thread{chessclient chessclient;clientthread(chessclient chessclient){this.chessclient=chessclient;}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.hasmoretokens()){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.ches ssocket.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.gettext().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.inputwords.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.settext("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.settext("");controlpad.connectbutton.setenabled(false);controlpad.creatgamebutton.setenabled(true);controlpad.joingamebutton.setenabled(true);chesspad.statustext.settext("连接成功,请创建游戏或加入游戏"); }}catch(exception ei){chatpad.chatlinearea.settext("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;isonchess=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.settext("chesspad.connectserver无法连接\n"+ee);}}}if(e.getsource()==controlpad.creatgamebutton){try{if(!isgameconnected){if(chesspad.connectserver(chesspad.host,chesspad.port)){isgameconnected=true;isonchess=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.settext("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.settext("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.settext("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=newtextarea("",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.hasmoretokens()){chesstoken=(string)usertoken.nexttoken(" ");if(chessoptnum>=1 && chessoptnum<=3){chessopt[chessoptnum-1]=chesstoken;}chessoptnum++;}chesspaint(integer.parseint(chessopt[0]),integer.parsei nt(chessopt[1]),integer.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 implementsmouselistener,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;。
毕业设计(论文)-基于JAVA的手机版五子棋开发
基于JAVA的手机版五子棋开发摘要在现代社会中,手机及其它无线设备越来越多的走进普通老百姓的工作和生活。
随着3G技术的普及与应用,基于Java开发的软件在手机上的使用非常的广泛,手机增值服务的内容也是越来越多,对丰富人们的生活内容、提供快捷的资讯起着不可忽视的作用。
本文基于J2ME技术,以计算机网络游戏的运行流程为基础,分模块开发一款网络五子棋游戏软件。
本文对以下几点内容做了重点研究和探讨:1、系统整体结构,根据设计目标,结合普通网络游戏的运行流程,给出了系统总体设计方案,并探讨了系统设计时需要用到的关键技术。
2、手机MIDP客户端的实现,MIDP客户端是游戏的唯一客户端,主要功能包括连接服务器进行身份验证、进行游戏并不断的与服务器交换数据。
3、后台系统的设计与实现,后台用来处理与数据库的互联来验证用户身份、处理由客户端发送过来的数据。
由于受到客观条件的限制,本系统的测试是在三星手机模拟器上完成的,但它仍不失具一定的实用价值。
关键词:J2ME;手机游戏;ServletThe Design and Implementation of The Gobang War Gameon Cell Phone NetworkAbstractIn modern society, more and more cell phones and other wireless devices come into the work and life of ordinary people. With the popularization and application of the 3rd Generation of Digital communication technology,the development of Java-based software in the use of mobile phones is very broad, mobile value-added services are more and more. It plays an import role to enrich people's lives and provide easier access to information.This paper is based on J2ME technology, it expounds how to take the running flow of computer network as basis, introduce a kind of gobang game on network by the sub-module method. .The main points of this paper go as follows:(1) The overall system structure. According to the design goals, with the general operation of the network game flow, gives the system design, and explores the key technology, which is used by the design of this system.(2) The implementation of the phone MIDP client. MIDP client is the only game client, the main functions include connecting the server to check the status, playing games and keeping the exchange of data with the server.(3) The implementation and design of background system. Background is to deal with the Internet database to verify the identity of users, processing the data, which is sent by the clients.Due to the restrictions of objective conditions, the system's test completed in the Samsung handset simulator. But it does have some advantages.Key words:J2ME; Handset game; Servlet目录论文总页数:24页1引言 (1)2系统综述 (1)3手机游戏的现状和关键技术介绍 (2)3.1软件现状 (2)3.2J2ME概况 (2)3.2.1 J2ME的由来 (2)3.2.2 J2ME的3层体系结构及MIDP简介 (3)3.3 TOMCAT服务器介绍 (4)3.4 SERVLET技术介绍 (5)4 开发环境介绍 (7)4.1开发环境 (7)4.2关于SAMSUNG W IRELESS T OOL K IT (7)5 客户端模块的开发 (7)5.1综述 (7)5.2程序的类结构 (8)5.3游戏的功能流程图 (8)5.4游戏的实现 (8)5.4.1 主类Omok的实现 (8)5.4.2 游戏登录界面以及操作说明界面的实现 (8)5.4.3游戏画布类的实现 (9)5.4.4网络连接类的实现 (11)5.4.5五子棋获胜算法 (13)6服务器端程序的开发 (14)6.1数据库的设计与实现 (14)6.2 SERVLET程序的编写 (15)7改进建议和措施 (17)7.1关于图片问题 (17)7.2软件测试 (17)7.2.1测试前的准备工作 (17)7.2.2进行测试 (18)7.2.3有待添加和完善的功能 (19)结论 (19)参考文献 (19)1引言Java语言是美国Sun Microsystem的James Gosling、Pratrick Naughton 及Mike Sheridan等人于1991年精心设计出来的计算机编程语言,其构想在于实现使用同一种编程语言所写出来的程序可以在不同的平台上运作。
《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,设有菜单栏,玩家可以点菜单来完成某种操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1引言随着计算机技术的不断发展,网络技术的普及范围越来越广,网络能够提供的服务多样、便捷,已经成为人们生产生活中不可缺少的重要组成部分。
如今网络休闲游戏发展迅速,它凭借健康、方便、互动性强、益智等诸多优点,成为大部分现代人休闲娱乐的首选。
网络五子棋游戏是使用Java语言开发的一款游戏。
它使用SOCKET建立连接,多线程处理数据,以及可嵌入网络浏览器的APPLET作为客户端,这些特点使这款游戏无论是服务器还是客户端的实现都相对容易。
通过对该软件的编写,还可以巩固学生对以上各种知识的掌握和理解。
2 JAVA语言概述2.1 JAVA简介JAVA是Sun Microsystem公司开发的编程语言,是一个简单,面向对象,分布式,解释性,强壮,安全,与系统无关,可移植,高性能,多线程和动态的语言。
2.1.1 JAVA的基本特点(1) 简单性Java与C++语言非常相近,但Java比C++简单,它抛弃了C++中的一些不是绝对必要的功能,如头文件、预处理文件、指针、结构、运算符重载、多重继承以及自动强迫同型。
Java实现了自动的垃圾收集,简化了内存管理的工作。
(2) 面向对象Java提供了简单的类机制和动态的构架模型。
对象中封装了它的状态变量和方法,很好地实现了模块化和信息隐藏;而类则提供了一类对象的原型,通过继承和重载机制,子类可以使用或重新定义父类或超类所提供的方法,从而既实现了代码的复用,又提供了一种动态的解决方案。
(3) 多线程多线程使应用程序可以同时进行不同的操作,处理不同的事件。
在多线程机制中,不同的线程处理不同的任务,他们之间互不干涉,不会由于一处等待影响其他部分,这样容易实现网络上的实时交互操作。
(4) 分布性Java是面向网络的语言。
通过它提供的类库可以处理TCP/IP协议,用户可以通过URL地址在网络上很方便的访问其他对象。
(5) 体系结构中立Java是一种网络语言,为使Java程序能在网络的任何地方运行,Java解释器生成与体系结构无关的字节码结构的文件格式。
为了使Java的应用程序能不依赖于具体的系统,Java语言环境还提供了用于访问底层操作系统功能的类组成的包,当程序使用这些包时,可以确保它能运行在各种支持Java的平台上。
(6) 安全性用于网络、分布环境下的Java必须要防止病毒的入侵,Java不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,这样就防止了程序员使用欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。
2.1.2 Java中输入/输出流概念过滤流DataInputStream 和DataOutputStream 除了分别作为FilterInputStream 和FilterOutputStream的子类外,还分别实现了接口DataInput 和DataOutput。
接口DataInput 中定义的方法主要包括从流中读取基本类型的数据、读取一行数据、或者读取指定长度的字节数,如readBoolean()、 readInt()、readLine()、readFully()等。
接口DataOutput中定义的方法主要是向流中写入基本类型的数据或者写入一定长度的字节数组,如writeChar()、writeDouble()。
DataInputStream可以从所连接的输入流中读取与机器无关的基本类型数据,用以实现一种独立于具体平台的输入方式;DataOutputStream 可以向所连接的输出流写入基本类型的数据。
2.1.3 Socket 机制Socket是面向客户/服务器模型设计的,网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。
Socket通常用来实现客户方和服务方的连接。
客户程序可以向Socket写请求,服务器将处理此请求,然后通过Socket将结果返回给用户。
Socket通信机制提供了两种通讯方式:有联接和无联接方式,分别面向不同的应用需求。
使用有联接方式时,通信链路提供了可靠的,全双工的字节流服务。
在该方式下,通信双方必须创建一个联接过程并建立一条通讯链路,以后的网络通信操作完全在这一对进程之间进行,通信完毕关闭此联接过程。
使用无联接方式时其系统开销比无联接方式小,但通信链路提供了不可靠的数据报服务,不能保证信源所传输的数据一定能够到达信宿。
在该方式下,通信双方不必创建一个联接过程和建立一条通讯链路,网络通信操作在不同的主机和进程之间转发进行。
应用程序相对容易。
JAVA支持流套接字(stream socket)和数据报套接字(datagram socket)。
流套接字使用TCP(Transmission Control Protocol,传输控制协议)进行数据传输,而数据报套接字使用UDP(User Datagram Protocol,用户数据报协议)。
在Socket层实现的Java网络程序是严格同步的。
从一台机器发送数据的操作要求对应一个从其他机器接受数据的操作。
2.2 JAVA工具JDK1) Java编译器Java编译器将Java源代码文件编译成可执行的Java字节码。
Java源代码文件的扩展名为 .java,Java编译器把这种扩展名的文件编译成扩展名为.class的文件。
源文件中的每个类在编译后都将产生一个class文件,这意味一个Java源代码文件可能编译生成多个class文件。
2) Java解释器Java解释器对编译生成的字节码格式的可执行程序的运行提供支持,它是运行非图形Java程序的命令行工具。
3 程序的设计思路和算法3.1 人机博弈的要点人机对弈的程序,至少应具备以下5个部分:(1)某种在机器中表示棋局的方法,能够让程序知道博弈的状态。
(2)产生合法走法的规则,以使博弈公正地进行,并可判断人类对手是否乱走。
(3)从所有合法的走法中选择最佳的走法技术。
(4)一种评估局面优劣的方法,用以同上面的技术配合做出智能的选择。
(5)一个界面,有了他,这个程序才能用。
3.2 五子棋特点及规则五子棋的娱乐性强、规则简单、易学、流行性广。
普通人不需长时间专门训练即可自如行棋。
因此极受大众欢迎。
五子棋的规则为:(1)棋盘采用像围棋盘一样的15路或19路线的棋盘,在此采用19路的棋盘。
(2)下法两人分别执黑白两色棋子。
轮流在棋盘上选择一个无子的交叉点落子,无子的交叉点又被称为空点。
(3)输赢判断黑、白双方有一方的五个棋子在横、竖或斜方向上连接成一线即为该方赢。
3.3 算法设计3.3.1 博弈树的搜索过程在以下讨论中,命名2个博弈者MAX和MIN。
下面的任务是为MAX找最佳的移动。
假设MAX先移动,然后2个博弈者轮流移动。
因此,深度为偶数的节点,对应于MAX下一步移动的位置,称为MAX节点;深度为奇数的节点对应于MIN下一步移动的位置,称为MIN节点(博弈树的顶节点深度为0)。
k层包括深度为2k和2k+1的节点。
通常用层数表示博弈树的搜索深度,他可以表示出向前预测的必须认识到搜索到终点是不可能的(除了在博弈快结束时),所以,常采用在有限范围搜索方法。
这里使用启发式搜索。
在启发式搜索的过程中,关键的一步是如何确定下一个要考察的节点,在确定节点时只要能充分利用与问题有关的信息,估计出节点的重要性,就能在搜索时选择重要性较高的节点,以利于博弈者以较快的速度求出最佳的棋步。
3.3.2 采用静态评估函数这里用评估函数h(i)衡量每一个叶节点位置的“值”。
一个最佳首步可以由一个最小最大化过程产生。
假设轮到MAX从搜索树的叶节点中选取,他肯定选择拥有最大值的节点。
因此,MIN叶节点的一个MAX节点双亲的倒推值就等于叶节点的静态评估值中的最大值。
另一方面,MIN从叶结点中选取时,必须选取最小的节点(即最负的值)。
既然如此,MAX叶节点的MIN双亲节点被分配一个倒推值,他等于叶节点静态评估值的最小值。
在所有叶节点的父节点被赋予倒推值后,开始倒推另一层,假定MAX将选择有最大倒推值的MIN的后继节点,而MIN会选择有最小倒推值的MAX后继节点。
继续逐层对节点评估,直到最后开始节点的后继者被赋予倒推值。
MAX将选择有最大倒推值的节点作为他的首步。
整个过程的有效性基于这样的假设。
用整个棋盘估值的函数h(n)为静态估值函数。
设想当前棋局S为轮到计算机方下棋(用□表示),任选一空点作为计算机方的下棋位置(可有若干种选择),接着考虑在此情况下游戏者一方下棋的棋局(用O表示);从某一“O”棋局出发,任选一空点作为游戏者一方的落子处(又有若干种选择),再次形成计算机方下棋的“ □”棋局;依此类推,这样可形成一棵以S 为根结点的博弈树,该树以O棋局为第2层子结点,以棋局为第3层子结点等等。
如果继续向前搜索,可形成多层子结点,现在以向前搜索3层子结点为例来说明极大极小值的过程。
对第3层子结点的某一棋局n,求出其估计值h(n),假设有一博弈树已形成,如图1所示,h(n)的值由各结点旁的数值给出。
根据极小极大化分析法,先计算第3层子结点h(n)值,然后第2层子结点的估计值取他的各后继子结点的极小值,根结点的估计值取他的各子结点的极大值。
这个取得最大估计值的子结点即为从S出发的计算机方的最佳落子方案。
棋盘上某一行、某一列或某一对角线为一路,这里使用的棋盘为19行19列,因此,行和列方向上共有19+19=38路;从左下到右上方向的对角线有37路,同样,从左上到右下方向的对角线也有37路。
但对于五子棋来说必须在一条直线上有连续五个棋子才能赢。
因此,在对角线上就可以减少8路。
所以,整个棋盘路的总数为:对某一棋局n,第i路得分:h(i)=hc (i)-hm(i)。
其中:hc (i)为计算机方在第i路估计值得分,hm(i)为游戏者一方在第i路得分。
对的得分规则作如下说明。
规则中+代表一空点;o代表对方棋子;*代表有计算机方棋子;++表示连续2点为空点;+++*++表示连续3个空点接一个计算机方棋子,再接两空点。
某一规则+表示如在i路上有棋子构成形如+++*++则h(i)=30。
其他c规则表示相同。
在系统中使用的主要估值规则如下:由对称性可知++**+++和+++*++的估值相同,同理可得其他具有这样对称性的估值都认为是相等的。
在连续两路上出现(3)的情形=>h(i)=5 000,一路出现c(i)=5 000。
所以在整个棋盘上的总估值为:(3),另外一路出现(4)=>hc为了增加系统的智能化也可以添加其他的一些规则。
3.3.3 遗传算法优化估值函数在博弈程序的几大主要部分里,估值函数是与具体的棋类知识紧密结合的一部分。
可以说估值函数在很大程度上决定了博弈程序的棋力高低。
上面给出的估值是根据实际经验给出的。