JAVA程序设计五子棋制作实训
五子棋实训报告(电子版)
《JA V A程序设计》实训报告课程名称:JA V A程序设计专业:计算机应用技术班级:11计算机应用班小组成员:巨敏石丽涛张娅雯李延尚文学董丁喜周致远指导老师:武文廷目录一.实训目的 (1)二. 实训题目和要求2.1实训题目描述 (1)2.2实训要求 (1)三.实训报告内容3.1五子棋主框架 (1)3.2棋盘、棋子及说明信息 (1)3.3对弈算法相关问题设计 (1)四.实训中的部分代码 (2)五.五子棋源程序代码 (3)六. 总结 (17)一、实训目的本次实训,学生可以将理论知识与具体实践相结合,巩固对JA VA相关方法和概念的理解。
通过实训单机版五子棋游戏的编程,掌握JA V A语言编程的基础知识并能熟练运用,熟悉累声明与对象的使用,运用JA V Aswing编写单机版五子棋游戏,并实现其功能。
通过本次实训,可以开拓思维,增强编程思想,为深入学习JA VA打下良好的基础。
二、实训题目描述和要求2.1实训题目描述实训题目:JA V A五子棋单机版游戏。
描述:通过JA V A的swing组件,实现五子棋简单的双人对弈,并通过内部条件判断实现输赢的双方的下棋过程。
2.2实训要求(1)五子棋游戏的主窗口也就是游戏界面的实现(2)棋子黑白色的设置及判定(3)完成判断某一横行是否练成五子及所有方向是否练成五子的功能(4)几个简单按钮的实现,“重新开始”“悔棋”“退出”按钮(5)菜单栏的实现,“重新开始”“悔棋”“退出”菜单项三、实训报告内容3.1主框架编写一个startCheesJFrame类,主要用来显行主窗体界面,包括工具条面板、菜单栏项。
设置界面关闭事件。
并编写一个内部类MyItemListener来监听按钮和菜单栏的单机事件。
3.2棋盘、棋子(1)编写point类,包括棋子的X/Y索引,颜色。
定义构造函数和相应的get方法。
(2)编写ChessBoard类,设置棋盘背景颜色为橘黄色(3)在主框架类中创建ChessBoard对象,并添加到主框架中(4)编写mousePressed方法来进行绘制棋盘和棋子3.3对弈算法相关问题设计(1)编写mousePressed方法的内容,预定义isBlack表示下的是黑棋还是白棋。
崔钊 五子棋实训报告
《java语言程序设计》实训报告实训题目: 五子棋游戏制作专业:软件技术班级:15软件(1)班姓名:崔钊指导教师:邓衍青2016年6月11日目录一、实训目的: (1)二、实训题目描述和要求 (1)2.1实训题目描述: (1)2.2实训题目要求: (1)三、实训报告内容: (2)3.1需求分析: (2)3.2需求设计: (3)3.3详细设计 (4)四、游戏的测试 (16)五、结论 (21)六、参考书目: (22)一、实训目的:在制作五子棋游戏过程中,增加学生对java和Eclipse的熟练使用,增加对java语言的运用,让我们学到用到的知识来掌握熟练度!二、实训题目描述和要求2.1实训题目描述:五子棋的娱乐性强、规则简单、易学、流行性广,普通人不需长时间专门训练即可自如行棋,因此极受大众喜欢·五子棋规则为:1.棋盘:采用像围棋盘一样的棋盘,本系统采用18路的棋盘·2.下法:两人分别执黑白两色棋子,轮流在棋盘上选择一个无子的交叉点落子,无子的交叉点又被称为空点·3.输赢判断:黑、白双方有一方的五个棋子在横、竖或斜方向上连接成一线即为该方赢·2.2实训题目要求:1.设计功能明确。
2.熟悉JAVA开发环境,掌握JAVA程序的编译和运行。
3.掌握JAVA基本编程技术和方法。
4.实训上交内容:实训报告一份,电子版本实训报告一份,源程序代码。
5.游戏界面要如下图所示:三、实训报告内容:3.1需求分析:程序流程我们看到本程序由4个基本功能模块构成,各模块的详细分析如下:1.初始化FiveChessFrame类过try {bgImage = ImageIO.read(new File("E:/帅志文/image/background.jpg"));} catch (IOException e) {e.printStackTrace();}}加载背景图片,然后再背景图上通过:paint方法中的for(int i= 0; i< 19; i++) {g2.drawLine(10, 70 + 20 * i, 370, 70 + 20 * i);g2.drawLine(10 + 20 * i, 70, 10 + 20 * i, 430);}语句绘制一个18*18的网格棋盘,每次下棋后通过调用repaint方法来初始化程序。
java五子棋实习报告
Java程序设计基础实习报告课程名称Java程序设计基础实习题目java五子棋专业班级学号学生姓名指导教师Java实习报告一、JAVA技术介绍:Java技术是一门编程语言,也是一个平台,它基于Java虚拟机技术,借助这个东西建立了跨平台的优势。
Java编程语言与众不同之处在于:Java程序既是编译型的(转换为一种称为Java字节码的中间语言),又是解释型的(JVM 对字节码进行解析和运行)。
编译只进行一次,而解释在每次运行程序时都会进行。
编译后的字节码采用一种针对JVM 优化过的机器码形式;解释器是JVM 的实现。
二、摘要五子棋作为一个棋类竞技运动,在民间十分流行,本课题主要完成了五子棋人机对战和玩家之间联网对战2个功能。
网络连接部分为Socket编程应用,客户端和服务器端的交互用Class Message定义,有很好的可扩展性,客户端负责界面维护和收集用户输入的信息,及错误处理。
服务器维护在线用户的基本信息和任意两个对战用户的棋盘信息,动态维护用户列表。
在人机对弈中通过深度搜索和估值模块,来提高电脑棋手的智能。
分析估值模块中的影响精准性的几个要素,以及提出若干提高精准性的办法,以及对它们搜索的节点数进行比较,在这些算法的基础上分析一些提高电脑AI方案,如递归算法、电脑学习等。
算法的研究有助于理解程序结构,增强逻辑思维能力,在其他人工智能方面也有很大的参考作用。
三、课题分析与设计1)键盘上事先设定8个按键,分作两组,每组四个,分别代表两个人用来控制棋子的上下左右键。
2)绘制棋盘,15条横线,15条竖线,在直线交点处下棋子(实心圆形)。
3)黑子先行,黑白交替下子,在棋盘上设定一个与棋盘格大小边长相等的正方形,初始状态,正方形的中心位于期盼的中心点。
当一方欲走棋的时候,应用四个按键来控制所要下棋的位置,每按一次按键,正方形都要向相应方向移动一个格,并且让喇叭发出某种声音,将要移出边界时,发出另一种警告声音并不让其移出边界。
java五子棋小游戏实验报告(附源代码)
手机五子棋游戏的设计与实现专业:姓名:班级:学号:指导教师:J2ME(Java 2 Micro Edition)是近年来随着各种不同设备,尤其是移动通信设备的飞速发展而诞生的一项开发技术。
它因其“write once,run anywhere”的Java特性而提高了开发的效率。
随着手机性能的不断提高,手机休闲娱乐应用将成为PC休闲娱乐应用之后又一重要业务增长点。
棋类游戏规则单一,比较适合在手机等便携终端推广。
由于具有跨平台、易于移植、占用空间小的优势,J2ME成为移动应用开发平台的主流,并提供了很多用以支持移动应用软件的开发的API。
现将该技术用于这次的手机游戏开发,可以实现游戏的快速开发,不但便于查看游戏运行过程中内存的占用量和程序的每一部分代码消耗了多少处理器时间,而且可以不断地优化代码,使代码具有高度的复用性、可扩展性、可维护性。
游戏的开发以J2ME为平台,利用Java技术,结合J2ME的MIDP技术,并对于程序设计思想,重要类、方法等展开讨论。
在对弈部分,分析设计走棋算法,选择合适的方式组织成代码,实现基本的人工智能。
过程中使用了J2ME中的CLDC/MIDP软件体系,主要运用了MID Profile的特定类的支持,来完成游戏的开发。
关键词:J2ME;CLDC;MIDPJ2ME is a kind of fast developing technology implemented on various devices especially mobile communication equipments. It improves the efficiency of the development process because of its "write once, run anywhere" nature. The development trend of the entertainment market based on the cell phone is very obvious because the handset performance enhances unceasingly. The entertainment market based on the cell phone will to be the new important business growth point follow the PC entertainment market. As the rules of a single chess game, it is more suitable for mobile phones and other portable terminal extension.J2ME has been the preferred platform for development because of its platform independent and compatibility, and provides a lot of APIs to support the development of mobile application software. The technology for mobile game development, can achieve the rapid development of the game. It is not only easy to observe the memory consumption and processor consumed time during the operation of the game, but also can optimize the code, so that the code has a high degree of reusability, scalability, maintainability.The game has designed by J2ME, the Java technology and the MIDP technology. I studied the procedure thought, the important class and the method. In the playing chess part, I have analyzed the algorithm, choosed the appropriate way to organize the code and realized the basic artificial intelligence. On the other hand,I learned software system of CLDC/MIDP and the specific class of the MID Profile to complete the game development.Key words: J2ME;CLDC;MIDP目录1 概述 (5)1.1 课题研究背景 (5)1.2 课题研究意义 (5)2 开发技术背景 (6)2.1 JAVA语言概述 (6)2.2 J2ME简介 (6)2.3 移动信息设备简表 (6)3 系统分析及总体设计 (7)3.1 可行性分析 (7)3.2 需求分析 (8)3.3 系统概要设计 (8)4 系统详细设计 (9)4.1 界面设计 (9)4.1.1 图形的低级绘制 (10)4.1.2 用户按键设计 (10)4.2 走棋算法 (11)4.3 胜负判断 (11)5 系统测试 (11)5.1 测试方案 (11)5.2 测试结果 (12)6总结 (13)基于J2ME的手机五子棋游戏的设计与实现1 概述1.1 课题研究背景五子棋是当前非常流行的一种棋。
小游戏五子棋JAVA程序设计
滨江学院Java程序设计实习课程设计题目小游戏五子棋学生姓名 bb学号 ***********院系滨江学院计算机系专业年级网络工程一班指导教师方忠进二O一三年 6 月 20 日引言 (1)1.需求分析 (1)1.1 基本需求分析 (1)1.2 高级需求分析 (2)2 开发环境 (2)2.1 开发环境及运行环境 (2)2.1.1 开发环境 (2)2.1.2 运行环境 (2)3 总体设计 (2)3.1 系统设计思想 (2)3.2 系统总体设计 (3)3.3 功能模块及流程 (4)3.3.1 系统主要模块 (4)3.3.2 服务器端作用 (5)3.3.3 客户端作用 (6)3.3.4 系统主流程 (7)4 详细设计 (7)4.1 客户端界面设计 (8)4.2 客户端网络设计 (9)4.3 棋盘类设计 (9)4.4 系统各模块之间的关系 (10)5 软件展示 (10)5.1 游戏界面展示 (10)5.2关键代码 (11)6 总结语 (20)参考文献 (222)基于Java的“网络五子棋”游戏的设计和实现——网络版客户端引言随着经济社会的迅速发展,人们生活水平有了很大的提高,人们的生活观念也发生了巨大的改变。
高品质的生活、现代化得生活方式成为人们共同追求的目标;休闲、娱乐性活动作为时尚生活中的一部分,而被大多数的人所追捧。
棋类项目作为一种智力型项目,可以益智健心、修身养性,也可以满足人们对于娱乐和休闲的新需求。
一些项目比如五子棋等等,由于项目本身互动的特点,一直被人们所喜爱,因此得以生存和发展,成为许多人喜爱的休闲娱乐性棋类项目。
而今,以网络技术为核心和计算机技术的现代网络技术已经在现实生活得到了十分的广泛的使用。
休闲类网络游戏集合了益智性、趣味性、互动性、娱乐性于一体,已经成为多数人群的选择的休闲方式。
借此,本论文在分析了当前计算机网络的蓬勃发展和人们对于休闲娱乐性生活方式的追求,以java为工具,以精美的界面,以常规安全的socket建立连接,设计更为益智的网络五子棋游戏,增强了趣味性和益智性。
JAVA程序设计五子棋制作实训
JAVA程序设计五子棋制作实训五子棋是一种非常古老而有趣的棋类游戏,它的规则简单,但又充满了智慧的机会。
在这个实训中,我们将使用JAVA编程语言来制作一个五子棋游戏程序。
首先,我们需要创建一个棋盘类,来表示游戏的棋盘。
棋盘可以用一个二维数组来表示,每个数组元素可以是一个空格、一个黑子或一个白子。
我们可以使用0表示空格,1表示黑子,-1表示白子。
棋盘类还需要提供方法来判断是否有玩家赢得了游戏,以及判断当前位置是否为空。
接下来,我们需要创建两个类来表示黑子和白子。
这两个类都可以拥有一个坐标属性来表示它们在棋盘上的位置,还可以拥有方法来判断它们是否赢得了游戏。
然后,我们需要创建一个游戏类,来控制整个游戏的进行。
游戏类需要实例化一个棋盘对象和两个玩家对象。
游戏类提供方法来让玩家交替落子、判断游戏是否结束以及输出棋盘的状态。
最后,我们可以创建一个主类,来启动游戏。
在主类中,我们可以创建游戏对象并调用游戏的开始方法来开始游戏。
下面是一个示例代码,用于实现上述的五子棋游戏程序:```javapublic class Chessboardprivate int[][] board;public Chessboard(int size)board = new int[size][size];}public boolean isOccupied(int x, int y)return board[x][y] != 0;}public boolean isWin(int x, int y, int player)//判断该位置是否4子连珠,即判断水平、垂直和两个对角线方向上是否有连续的4个同色棋子//略}public void prin//输出棋盘的状态//略}public class Playerprivate int x;private int y;public Player(int x, int y)this.x = x;this.y = y;}public void move(Chessboard board)//玩家落子的逻辑//略}public boolean isWin(Chessboard board) return board.isWin(x, y, 1);}public class Gameprivate Chessboard board;private Player player1;private Player player2;public Game(int size)board = new Chessboard(size);player1 = new Player(0, 0);player2 = new Player(size - 1, size - 1); }public void starint turn = 1;while (true)Player currentPlayer = (turn == 1) ? player1 : player2; currentPlayer.move(board);board.print(;if (currentPlayer.isWin(board))System.out.println("Player " + turn + " wins!"); break;}turn = -turn;}}public class Mainpublic static void main(String[] args)Game game = new Game(15);game.start(;}```。
五子棋程序实习报告
一、实习背景随着计算机技术的不断发展,编程已成为现代生活的重要组成部分。
为了提高自己的编程技能,培养自己的实际动手能力,我选择了五子棋程序设计作为实习项目。
五子棋是一种古老的中国传统棋类游戏,具有极高的趣味性和挑战性。
通过本次实习,我学习了Java编程语言,掌握了五子棋游戏的算法和实现方法,提高了自己的编程水平。
二、实习目标1. 熟练掌握Java编程语言的基本语法和常用类库;2. 掌握五子棋游戏的设计和实现方法;3. 学会使用面向对象编程思想进行程序设计;4. 培养自己的团队协作和沟通能力。
三、实习内容1. 系统设计在系统设计阶段,我首先分析了五子棋游戏的规则和特点,明确了游戏的基本功能,包括:棋盘显示、落子、判断胜负、悔棋等。
然后,我设计了五子棋游戏的基本架构,包括以下几个模块:(1)棋盘模块:负责棋盘的显示和落子操作;(2)落子模块:负责实现玩家的落子操作;(3)判断胜负模块:负责判断游戏是否结束,以及判断胜负;(4)悔棋模块:负责实现玩家的悔棋操作。
2. 算法设计五子棋游戏的算法主要包括以下几个部分:(1)棋盘表示:使用二维数组表示棋盘,每个元素代表一个棋子,其中0表示空位,1表示玩家1的棋子,2表示玩家2的棋子;(2)落子算法:根据玩家的落子位置,在棋盘上放置对应的棋子;(3)判断胜负算法:从落子位置开始,向四个方向(上、下、左、右)查找连续的五个相同的棋子,如果找到,则判断为胜利;(4)悔棋算法:撤销上一步的落子操作,将棋盘恢复到上一步的状态。
3. 编码实现在编码实现阶段,我按照设计文档和算法要求,使用Java编程语言完成了五子棋游戏的基本功能。
具体实现如下:(1)棋盘模块:使用JFrame创建一个窗口,使用JPanel绘制棋盘,使用鼠标监听器实现落子操作;(2)落子模块:在棋盘模块的基础上,增加一个方法,用于处理玩家的落子操作;(3)判断胜负模块:编写一个方法,用于判断游戏是否结束,以及判断胜负;(4)悔棋模块:编写一个方法,用于撤销上一步的落子操作。
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语言有了更深的了解。
五子棋实训报告
五子棋实训报告五子棋实训报告篇一:(3)棋子的绘制与存储棋子的绘制用实心圆模式,颜色为黑色及白色两种。
棋子在内存中的存储方式:因为表示各个棋子的数据类型都相同,所以考虑用数组存储,因为棋盘是二维的,因此棋子用二维数组a存储。
a{ setTitle{ Objet obj = e.getSoure }toolbar = ne JPanel{ } publi int getX{ } publi intgetY{ } publi Color getColor{ } return olor; return ;return x; this.x = x; this. = ; this.olor = olor;篇四:实习报告-五子棋信息工程学院201X年毕业实习报告班级:计科XX 姓名:XXX实习地点:XXXXXX 实习12周-19周一、实习目的1. 夯实专业基础,提高动手能力。
把专业知识应用于实践,找出专业薄弱环节加强巩固。
3. 了解就业单位的计算机技术的应用情况、需求情况和发展方向及前景,培养实践能力、分析问题和解决问题的能力以及综合运用所学基础知识和基本技能的能力,同时也增强了适应社会的能力和就业竞争力。
4. 挖掘自身潜力,寻找自身不足,通过实践对未来做出合理规划。
二、实习任务在MElipse的平台上运用java语言,学习开发一个常用小游戏:五子棋。
三、实习计划5. 基础夯实,联系实践。
在信息高速发展的今天,计算机科学技术的重要性也在人们的日常生活中日益突显。
不管是从事理论教学还是从事软件的设计和开发,基础都是最有力的保障。
思想决定行动,认识决定成败。
没有正确的思想作为指导,行动就会陷入盲目和被动。
缺乏正确的认识基础,前途就会迷茫,方向就会迷失,机会就会丧失。
所以说,理论学习是我增强行动自觉的重要保证。
人常说:“经济基础决定上层建筑”专业基础对我来说就是经济基础,而上层建筑就是我们所从事的相关工作。
但是只拥有专业基础还是不行的,所以,我必须要把理论应用于实践。
《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)
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程序设计”综合实验报告一、前言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课程设计五子棋实验报告Java课程设计五子棋实验报告一、实验目的本次实验主要目的是运用Java编程语言,设计并实现一个简单的五子棋游戏,通过实践掌握Java编程基础知识和面向对象编程思想。
二、实验内容本实验要求设计并实现一个五子棋游戏,主要功能包括:1. 实现双人对战功能,允许两个玩家交替下棋;2. 实现判断胜负功能,当某一方连成五子时,游戏结束,显示胜利者;3. 实现悔棋和重新开始的功能。
三、实验原理1. 界面设计界面设计采用Java Swing框架,主要包括棋盘和控制面板两部分。
棋盘使用JPanel实现,通过绘制线条和圆形实现棋盘和棋子的显示。
控制面板使用JPanel和JButton实现,提供重新开始和悔棋功能。
2. 游戏逻辑游戏逻辑主要包括下棋和判断胜负两个部分。
下棋功能通过记录当前玩家和棋子位置实现,判断胜负则通过遍历棋盘上的所有棋子,判断是否满足连成五子的条件。
3. 实现悔棋和重新开始的功能悔棋功能主要通过记录每一步棋的位置和玩家来实现,重新开始则需要清空棋盘和游戏记录。
四、实验步骤1. 设计并实现界面,包括棋盘和控制面板;2. 实现游戏逻辑,包括下棋和判断胜负;3. 实现悔棋和重新开始的功能;4. 进行代码测试和调试,确保程序能够正常运行。
五、实验结果经过测试,程序能够正常运行,实现了双人对战、判断胜负、悔棋和重新开始的功能。
六、实验总结本次实验通过设计并实现一个简单的五子棋游戏,巩固了Java编程基础知识和面向对象编程思想,同时也学习了Swing框架的使用。
在实现过程中也遇到了一些问题,如棋子位置的计算、胜负判断的实现等,通过查阅资料和调试最终得以解决。
总体来说,本次实验收获颇丰,对Java编程有了更深入的了解和认识。
五子棋-Java课程设计
课程设计报告简单的游戏——五子棋一、实验分工二、开发环境(实验编译以及测试环境)硬件环境:CPU:Intel 奔腾双核E5200 主频2.5GHz内存:2G软件环境:操作系统:Windows 7编程环境JDK1.6开发工具:blueJ三、使用环境(用户运行环境)硬件环境:CPU主频在500MHZ以上,内存在128M以上软件环境:JAVA运行环境+ Windows XP或Windows 2000 以上操作系统目录第一章总体设计 ....................................................................................................... 11.1设计的目的............................................................................................................................................... 11.2本系统的主要功能................................................................................................................................... 11.3系统包含的类及类之间的关系。
........................................................................................................... 11.4 Java源文件及其功能.............................................................................................................................. 21.5 项目构建思路.......................................................................................................................................... 2第二章模块功能介绍........................................................................................... 112.1主类Chess........................................................................................................................................... 112.2类Autoplay ........................................................................................................................................ 122.3类Scan................................................................................................................................................. 13第三章功能测试及运行效果............................................................................... 153.1系统主界面........................................................................................................................................... 153.2工作总结....................................................................................................................错误!未定义书签。
Java编写的简单五子棋
Java程序设计—五子棋一、源码import java.awt.*;import java.awt.event.MouseListener;import java.awt.event.MouseEvent;import java.util.Vector;import javax.swing.*;public class wuziqi extends JFrame implements MouseListener{public static void main(String args[]){wuziqi d=new wuziqi();}Vector v=new Vector();Vector white=new Vector();Vector black=new Vector();JButton btnstart =new JButton("开始");JButton btnstop =new JButton("停止");JToolBar tool=new JToolBar();boolean b; //用来判断白棋还是黑棋int blackcount,whitecount; //计算悔棋/*** 构造方法*/public wuziqi(){super("五子棋");this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭按钮Container con=this.getContentPane();this.addMouseListener(this);//添加监听tool.add(btnstart);//添加按钮tool.add(btnstop);this.setSize(550,500);//设置窗体大小this.setVisible(true);}int w=20; //间距大小是双数int px=100,py=100; //棋盘的坐标int pxw=(px+w), pyw=(py+w);int width=w*16,height=w*16;int vline=(width+px); //垂直线的长度int hline=(height+py); //水平线的长度/*** 画棋盘*/public void paint(Graphics g){g.clearRect(0, 0, this.getWidth(), this.getHeight()); //清除面板g.setColor(Color.BLACK); //设置网格颜色g.drawRect(px, py, width, height); //网格大小g.drawString("简易五子棋", 110, 70);for(int i=0;i<15;i++){g.drawLine(pxw+i*w,py,pxw+i*w,hline);//每条横线和竖线g.drawLine(px,pyw+i*w,vline,pyw+i*w);}for(int x=0;x<v.size();x++){String str=(String)v.get(x);String tmp[]=str.split("-");int a=Integer.parseInt(tmp[0]);int b=Integer.parseInt(tmp[1]);a=a*w+px;b=b*w+py;if(x%2==0){g.setColor(Color.CY AN);}else{g.setColor(Color.BLACK);}g.fillArc(a-w/2, b-w/2, w, w,0,360);}}public void updeta(Graphics g){this.paint(g);}public void victory(int x,int y,Vector contain){ //判断胜利的方法int cv=0; //计算垂直的变量int ch=0; //计算水平的变量int ci1=0; //计算斜面的变量1int ci2=0; //计算斜面的变量2for(int i=1;i<5;i++){if(contain.contains((x+i)+"-"+y))ch++;elsebreak;}System.out.println("前面执行了"+ch+"次");for(int i=1;i<5;i++){if(contain.contains((x-i)+"-"+y))ch++;elsebreak;}System.out.println("后面执行了"+ch+"次");for(int i=1;i<5;i++){if(contain.contains(x+"-"+(y+i)))cv++;elsebreak;}for(int i=1;i<5;i++){if(contain.contains(x+"-"+(y-i)))cv++;elsebreak;}for(int i=1;i<5;i++){if(contain.contains((x+i)+"-"+(y+i)))ci1++;elsebreak;}for(int i=1;i<5;i++){if(contain.contains((x-i)+"-"+(y-i)))ci1++;elsebreak;}for(int i=1;i<5;i++){if(contain.contains((x-i)+"-"+(y+i)))ci2++;elsebreak;}for(int i=1;i<5;i++){if(contain.contains((x+i)+"-"+(y-i)))ci2++;elsebreak;}if(ch>=4||cv>=4||ci1>=4||ci2>=4){System.out.println(v.size()+"步棋");if(v.size()%2==0){ //判断偶数是黑棋胜利,奇数白棋胜利JOptionPane.showMessageDialog(null,"恭喜你黑棋赢了");}else{JOptionPane.showMessageDialog(null,"恭喜你白棋赢了");}this.v.clear();this.black.clear();this.white.clear();this.repaint();}System.out.println(ch+" "+cv+" "+ci1+" "+ci2);}public void mouseClicked(MouseEvent e) {if(e.getButton()==e.BUTTON1){int x=e.getX();int y=e.getY();x=(x-x%w)+(x%w>w/2?w:0);y=(y-y%w)+(y%w>w/2?w:0);x=(x-px)/w;y=(y-py)/w;if(x>=0&&y>=0&&x<=16&&y<=16){if(v.contains(x+"-"+y)){System.out.println("已有棋了");}else{v.add(x+"-"+y);this.repaint();if(v.size()%2==0){black.add(x+"-"+y);this.victory(x, y,black);System.out.println("黑棋");}else{white.add(x+"-"+y);this.victory(x, y,white);System.out.println("白棋");}System.out.println(e.getX()+"-"+e.getY());}}else{System.out.println(e.getX()+"-"+e.getY()+"|"+ x+"-"+y+"\t超出边界");}}if(e.getButton()==e.BUTTON3){ //悔棋方法全在这里System.out.println("鼠标右键-悔棋");if(v.isEmpty()){JOptionPane.showMessageDialog(this,"没有棋可以悔");}else{if(v.size()%2==0){ //判断是白方悔棋还是黑方悔棋blackcount++;if(blackcount>3){JOptionPane.showMessageDialog(this, "黑棋已经悔了三步");}else{v.remove(stElement());this.repaint();}}else{whitecount++;if(whitecount>3){JOptionPane.showMessageDialog(this, "白棋已经悔了三步");}else{v.remove(stElement());this.repaint();}}}}}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void mousePressed(MouseEvent e) {}public void mouseReleased(MouseEvent e) {}}二、简要说明该程序为一简易五子棋,棋盘为15*15,白子先落。
五子棋实训报告(电子版)范文
《JA V A程序设计》实训报告课程名称:JA V A程序设计专业:计算机应用技术班级:11计算机应用班小组成员:巨敏石丽涛张娅雯李延尚文学董丁喜周致远指导老师:***目录一.实训目的 (1)二. 实训题目和要求2.1实训题目描述 (1)2.2实训要求 (1)三.实训报告内容3.1五子棋主框架 (1)3.2棋盘、棋子及说明信息 (1)3.3对弈算法相关问题设计 (1)四.实训中的部分代码 (2)五.五子棋源程序代码 (3)六. 总结 (17)一、实训目的本次实训,学生可以将理论知识与具体实践相结合,巩固对JA VA相关方法和概念的理解。
通过实训单机版五子棋游戏的编程,掌握JA V A语言编程的基础知识并能熟练运用,熟悉累声明与对象的使用,运用JA V Aswing编写单机版五子棋游戏,并实现其功能。
通过本次实训,可以开拓思维,增强编程思想,为深入学习JA VA打下良好的基础。
二、实训题目描述和要求2.1实训题目描述实训题目:JA V A五子棋单机版游戏。
描述:通过JA V A的swing组件,实现五子棋简单的双人对弈,并通过内部条件判断实现输赢的双方的下棋过程。
2.2实训要求(1)五子棋游戏的主窗口也就是游戏界面的实现(2)棋子黑白色的设置及判定(3)完成判断某一横行是否练成五子及所有方向是否练成五子的功能(4)几个简单按钮的实现,“重新开始”“悔棋”“退出”按钮(5)菜单栏的实现,“重新开始”“悔棋”“退出”菜单项三、实训报告内容3.1主框架编写一个startCheesJFrame类,主要用来显行主窗体界面,包括工具条面板、菜单栏项。
设置界面关闭事件。
并编写一个内部类MyItemListener来监听按钮和菜单栏的单机事件。
3.2棋盘、棋子(1)编写point类,包括棋子的X/Y索引,颜色。
定义构造函数和相应的get方法。
(2)编写ChessBoard类,设置棋盘背景颜色为橘黄色(3)在主框架类中创建ChessBoard对象,并添加到主框架中(4)编写mousePressed方法来进行绘制棋盘和棋子3.3对弈算法相关问题设计(1)编写mousePressed方法的内容,预定义isBlack表示下的是黑棋还是白棋。
java子棋实验报告
java子棋实验报告Java 子棋实验报告一、实验目的本次实验旨在通过使用 Java 编程语言实现子棋游戏,加深对面向对象编程思想的理解,提高编程能力和问题解决能力。
同时,熟悉 Java 中的图形用户界面(GUI)编程,掌握事件处理机制,以及如何设计和实现一个具有一定复杂度的游戏程序。
二、实验环境1、操作系统:Windows 102、开发工具:IntelliJ IDEA3、 Java 版本:JDK 18三、实验原理子棋是一种简单的棋类游戏,通常在棋盘上进行,玩家轮流放置棋子,目标是在横向、纵向或对角线上形成连续的相同棋子。
在本实验中,我们使用 Java 的图形用户界面来创建棋盘和棋子,并通过事件处理机制来响应用户的操作。
棋盘使用二维数组来表示,棋子的状态(空、黑、白)也通过数组中的值来记录。
四、实验步骤(一)创建棋盘界面1、使用`JFrame`类创建主窗口,并设置窗口的标题、大小和关闭操作。
2、在窗口中添加一个`JPanel`作为棋盘容器。
3、使用循环创建棋盘的格子,并使用`GridLayout`布局管理器进行排列。
```javaJFrame frame = new JFrame("子棋游戏");framesetSize(600, 600);framesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE);JPanel panel = new JPanel();panelsetLayout(new GridLayout(8, 8));for (int i = 0; i < 8; i++){for (int j = 0; j < 8; j++){JButton button = new JButton();buttonsetPreferredSize(new Dimension(50, 50));paneladd(button);}}frameadd(panel);framesetVisible(true);```(二)处理棋子放置事件1、为每个棋盘格子的按钮添加鼠标点击事件监听器。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《JAVA程序设计》实训报告实训题目: 五子棋游戏制作专业:计算机网络班级: 14网络(1)班姓名:指导教师:2015 年 12 月 31日目录1.实训目的........................... 错误!未定义书签。
2.实训题目描述和要求................. 错误!未定义书签。
实训题目描述...................... 错误!未定义书签。
实训题目要求...................... 错误!未定义书签。
3.实训报告内容....................... 错误!未定义书签。
需求分析.......................... 错误!未定义书签。
概要设计.......................... 错误!未定义书签。
详细设计.......................... 错误!未定义书签。
编码.............................. 错误!未定义书签。
测试.............................. 错误!未定义书签。
4.总结............................... 错误!未定义书签。
实训指导教师评语................... 错误!未定义书签。
1.实训目的随着经济社会的迅速发展,人们生活水平有了很大的提高,人们的生活观念也发生了巨大的改变。
高品质的生活、现代化得生活方式成为人们共同追求的目标;休闲、娱乐性活动作为时尚生活中的一部分,而被大多数的人所追捧。
棋类项目作为一种智力型项目,可以益智健心、修身养性,也可以满足人们对于娱乐和休闲的新需求。
一些项目比如五子棋等等,由于项目本身互动的特点,一直被人们所喜爱,因此得以生存和发展,成为许多人喜爱的休闲娱乐性棋类项目。
而今,以网络技术为核心和计算机技术的现代网络技术已经在现实生活得到了十分的广泛的使用。
休闲类网络游戏集合了益智性、趣味性、互动性、娱乐性于一体,已经成为多数人群的选择的休闲方式。
《Java程序设计》课程实训,学生可以将理论知识与具体实践相结合,巩固对JAVA相关方法和概念的理解,通过实训单机版五子棋游戏的编程,加深对所学知识的理解和应用。
如: 通过实训能够结合实例进一步理解面向对象程序设计的基本概念,掌握程序设计的基本方法和技巧,灵活的使用包,进一步的理解接口,熟练的掌握在接口中对事件的实现。
深入理解和灵活运用面向对象程序设计的基本特性,培养良好的程序设计风格,提高抽象思维、逻辑思维的能力。
并且让学生能够基本使用实训软件eclipse,以及安装JDK 和环境变量的配置。
通过本次实训,可以开拓思维,增强编程思想,为深入学习JAVA打下良好基础,在学完此门课程后,能使用Java开发小型应用程序。
2.实训题目描述和要求实训题目描述实训题目:JAVA五子棋单机版游戏制作。
描述:五子棋在我国的历史可谓是源远流长,喜爱它的玩家也是大有人在,是很多人的娱乐首选,也是一种竞技项目。
但很多的五子棋软件一般都是单机版的,游戏无法在两个玩家之间进行。
基于上述原因,五子棋作为一个古老而又有广泛群众基础的游戏,他的完善性无疑是家玩家有很大的影响,在互联网迅速发展的今天,五子棋的流行已经不仅仅只是在现实生活中的面对面的娱乐竞技,在网上也已经是广大玩家的首选娱乐游戏已在各个游戏平台有应用。
通过JAVA的swing组件,实现五子棋简单的双人对弈并通过内部条件判断实现输赢的双方下棋过程。
实训题目要求1. 运用JAVA程序设计和Eclipse软件设计出一个五子棋程序。
2. 五子棋游戏的主窗口也就是游戏界面的实现(尽量制作一个界面美观的游戏界面)3. 棋子黑白色的设置及判定。
4. 完成判断某一横行是否连成五子及所有方向是否连成五子的判断。
5. 几个简单按钮的实现,“开始游戏”,“游戏设置”,“游戏说明”,“关于”,“认输”,“退出”。
6. 能够完成基本的下棋功能并能判断输赢7. 能够实现开始游戏的功能,随时重新开始一盘游戏。
8. 能够实现游戏设置的功能,可以对游戏玩家有时间的设定,且要求时间不能为负数,如果时间为0则无限制,9. 能够实现游戏说明的功能,可以解释游戏的基本规则。
10. 能够实现游戏认输的功能,当有一方认输时,游戏结束。
11. 能够实现游戏关于的功能,关于游戏的制作及问题解决指南。
12. 能够实现游戏退出的功能,当游戏结束时游戏退出。
13. 完成当某一方下棋是游戏界面会有游戏信息提示。
14. 完成游戏时间设置游戏界面下方会有时间走时功能。
3.实训报告内容需求分析一款小游戏的确立是建立在各种各样的需求上面的,这种需求往往来自于玩家的实际需求,其中玩家的实际需求最为重要.面对游戏拥有不同知识和理解层面的玩家,游戏制作人对玩家需求的理解程度,在很大程度上决定了此类游戏开发的成败因此如何更好地的了解,分析,明确玩家需求,并且能够准确,清晰以文档的形式表达给游戏制作人,保证开发过程按照满足玩家需求为目的正确开发方向进行,是游戏制作人需要面对的问题。
作为五子棋的设计需要考虑到的最基本的需求莫过于人机对战与人人对战功能的实现,当然还有下棋过程中的下棋悔棋功能以及判断游戏的胜负等方面的要求当然最好是要考虑到界面的友好性,作为一个娱乐软件,还应该考虑到玩家在游戏时的舒适性本次实训要求制作的是一个简单的单机版五子棋游戏,所以只需要完成一些最基本的功能即可,例如游戏开始功能、游戏设置功能、游戏认输功能以及游戏退出功能等。
概要设计制作的五子棋游戏整体界面设计为500*500像素大小,其中棋盘大小为360*360像素大小。
游戏界面上能够显示相关游戏信息,例如当前游戏玩家信息、游戏剩余时间、游戏输赢信息等。
详细设计整个游戏界面的上方显示当前游戏玩家信息,能够提醒黑白双方下棋。
中间靠左显示游戏棋盘,由纵横相互构成一个分割均匀的小正方形。
中间靠右放置各个游戏功能按钮,如:“开始游戏”“游戏设置”“游戏说明”“认输”“关于”“退出”,且它们都能各自实现自己的功能。
下方显示双方玩游戏玩家剩余时间信息。
而判断胜负是这个游戏的核心,一个游戏最重要的部分,如果连判断胜负都不可以实现的话,那么这个游戏程序是没有用的。
依据五子棋的基本规则,判断某一方向上是否有同一颜色的棋子连成五个或五个以上的,如果有,那么游戏就结束了,并判先连成五子的一方获得了胜利。
效果如下图所示:编码1. 导入包代码package 窗口制作代码public FiveChessFrame() {图片路径代码String imagePath = "" ;try {imagePath = ("")+ "/bin/image/" ;bgImage = (new File("\\\\", "/")));} catch (IOException e) {双缓冲技术代码public void paint(Graphics g) {绘制界面信息代码绘制棋盘,棋子代码判断鼠标按下棋子下落代码public void mousePressed(MouseEvent e) {判断游戏胜利的代码设置开始游戏代码游戏信息的显示回到开始位置一步下棋改为黑方for (int i = 0; i < 19;i++){for (int j = 0; j < 19; j++){allChess[i][j] = 0;}}设置游戏设置代码设置游戏说明代码设置认输代码设置关于代码设置退出代码判断棋子连接数量代码线程运行代码戏运行界面2. 开始游戏界面3.关于按钮4.游戏说明按钮5. 游戏结束分出胜负界面6. 游戏设置界面7.认输界面8.落子重复界面9. 游戏退出界面4.总结实训是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程. 回顾起课程,实训,至今我仍感慨颇多。
在这一星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。
平时,我们只能在课堂上与老师一起纸上谈兵,思维的认识基本上只是局限于课本的范围内,也许这就是导致我们对专业知识的片面性,使得我们只之所以然,而不知其所以然!限制了我们对网络知识水平的提高。
但是课本上所学到的理论知识是为我们的实际操作指明了方向、提供相应的方法,真正的职业技巧是要我们从以后的实际工作中慢慢汲取的,而针对实际操作中遇到的一些特殊的问题,我们不能拘泥于课本,不能纯粹地“以本为本”。
在实训的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在实训的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
通过实训之后,把以前所学过的知识重新温故。
这次实训终于顺利完成了,在实训中遇到了很多编程问题,最后,对给过我帮助的所有同学和指导老师表示忠心的感谢!参考书目[1]李兴华.《Java开发实战经典》.北京:清华大学出版社.[2]孙卫琴.《Java面向对象编程》.北京:电子工业出版社.[3]邓恩.《Java Rules 中文版》.北京:中国电力出版社.[4]埃史尔,陈昊鹏.《Java编程思想》.北京:机械工业出版社.[5]李钟尉,马文强.《Java从入门到精通》 . 北京:清华大学出版社.江西工业职业技术学院电子与信息工程分院实训指导教师评语班级:14网络(1)班学生姓名:学号:指导教师评语(包括工作态度,遵守纪律;基本理论、知识、技能;独立工作能力和分析解决问题的能力;完成任务情况及水平):学生成绩(五级分制):指导教师签名:年月日。