黑白棋_java论文.doc

上传人:韩长文 文档编号:3977674 上传时间:2019-10-11 格式:DOC 页数:26 大小:243KB
返回 下载 相关 举报
黑白棋_java论文.doc_第1页
第1页 / 共26页
黑白棋_java论文.doc_第2页
第2页 / 共26页
黑白棋_java论文.doc_第3页
第3页 / 共26页
黑白棋_java论文.doc_第4页
第4页 / 共26页
黑白棋_java论文.doc_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《黑白棋_java论文.doc》由会员分享,可在线阅读,更多相关《黑白棋_java论文.doc(26页珍藏版)》请在三一文库上搜索。

1、xxxx 大 学 课 程 设 计 说 明 书(论 文)X X X X 大 学Java语言程序设计课程设计(论文)题目: java黑白棋 院(系): 专业班级: 学 号: 学生姓名: 指导教师: 教师职称: 起止时间: 第1章 课程设计目的与要求1.1设计目的将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。通过课程设计,学生在下述各方面的能力应该得到锻炼:(1)进一步巩固、加深学生所学专业课程JAVA语言教程的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。(2)全面考核

2、学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。(3)利用所学知识,开发小型应用系统,掌握运用JAVA语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。(5)掌握面向对象程序设计的方法。(6)熟练掌握JAVA语言的基本语法,灵活运用各种数据类型。(7)进一步掌握在集成环境下如何调试程序和修改程序。1.2实验环境硬件要求能运行Windows 操作系统的微机系统。JAVA语言应用程序开发软件使用:VJAVA 系统,或其他JAVA语言应用程序开发软件。1.3预备知识熟悉JAVA语言

3、程序设计的基本知识及VJAVA编辑器的使用方法。1.4设计要求1.仔细分析设计题目,画出程序流程图,编写程序源代码。2.积极上机调试源程序,增强编程技巧与调程能力。3.认真书写课程设计预习报告,课程设计说明书。4.遵守课程设计要求和机房管理制度,服从指导教师的安排,确保课程设计的顺利完成课程设计内容。第2章 课程设计内容2.1 课题描述黑白棋,又叫翻转棋(Reversi)、苹果棋或奥赛罗棋(Othello)。一般棋子双面为黑白两色,故称“黑白棋”。因为行棋之时将对方棋子翻转,变为己方棋子,故又称“翻转棋”。棋子双面为红、绿色的称为“苹果棋”。 黑白棋的前身是英国人发明的翻转棋(Reversi)

4、,后来由日本的长谷川五郎加以改进,并改称为奥赛罗棋(Othello),国内习惯上称之为黑白棋。这个棋类游戏在西方较为流行,但在中国起步较晚,还不很普及。黑白棋作为一个棋类竞技运动,在民间十分流行,为了熟悉黑白棋规则及技巧,以及研究简单的人工智能,决定用Java开发黑白棋游戏。主要完成了人机对战功能,有很好的可扩展性。在人机对弈中通过深度搜索和估值模块,来提高电脑棋手的智能。分析估值模块中的影响精准性的几个要素,以及提出若干提高精准性的办法,以及对它们搜索的节点数进行比较,在这些算法的基础上分析一些提高提高电脑AI方案,如递归算法、电脑学习等。算法的研究有助于理解程序结构,增强逻辑思维能力,在其

5、他人工智能方面也有很大的参考作用。尽管黑白棋的规则比较简单,但它所包括的丰富战略,不亚于那些相当“经典”的策略游戏。其中人工智能部分,由于采用了大量的搜索算法,其中很多被利用到各方面。2.2 系统设计近来随着计算机的快速发展,各种各样的电脑游戏层出不穷,使得我们能有更多的娱乐项目,而棋类游戏能起到锻炼人的思维和修身养性的作用,而且棋类游戏水平颇高,大有与人脑分庭抗礼之势。其中战胜过国际象棋世界冠军-卡斯帕罗夫的“深蓝”便是最具说服力的代表,其它像围棋的“手淡”、象棋的“将族”等也以其优秀的人工智能深受棋迷喜爱。 越来越多的具有智能的机器进入了人类的生活,人工智能的重要性如今显而易见。自己对人工

6、智能比较感兴趣,而黑白棋游戏程序的开发实现这个课题,正好提供给我这样一个研究的机会,通过对人工智能中博弈方面的研究(人机对弈),让我在简单的人机对弈全局设计,以及具体到相关算法上有了深入的了解。人工智能属于计算机科学的领域,它以计算机技术为基础,近几十年来,它的理论和技术已经日益成熟,应用领域也正在不断扩大,显示出强大的生命力。人工智能大致可以分成几个学科,它们每一个都是独特的,但是它们常常又互相结合起来完成设计任务,这时,这些学科之间的差别就变的很模糊。人工智能在专家系统,自然语言理解,自动定理证明,自动程序设计,人工智能在机器人学、模式识别、物景分析、数据库的智能检索、机器下棋(实质上是博

7、弈论问题)和家用电器智能化等领域都有广泛的应用。而这个课题就是和人工智能中的博弈论领域紧密相关的。这个题目核心是人工智能和Socekt编程,并且人工智能中的博弈部分,由于采用了大量的搜索算法,其中很多被利用到各方面。它的概念、方法和技术,正在各行各业广泛渗透。智能已经成为当今各种新产品、新装备的发展方向。所以,趁着这个机会,对人工智能中比较容易实现的人机博弈进行了解研究学习,也是很实用且很有必要的。电脑究竟能否最终战胜人脑?这是大家一直在探索的问题。自从1997年黑白棋程序Logistello战胜冠军棋手村上健以来,电脑程序已经把人类棋手远远抛在后面。目前,程序可以记住大量的开局定式、可以正确

8、地判断局面的优劣、可以思考到二十几步之后的局面,这都是人类棋手远不能及的。然而,电脑的这一切又都是人类所赋予的,因此究竟电脑和人脑孰优孰劣,还难以定论。2.2.1功能分析吃子规则:采用夹吃的原则,左图用红色标记的是黑方可落子的位置。当黑方落子之后,则夹在两黑子中间的白子都将变为黑子。右图是落子后的棋盘布局,蓝色标记的是白方可落子的位置。夹子的方向包含:水平、竖直、斜对角2.2.2面向对象设计总体流程:2.2.2类成员描述输出成绩:输出最后的胜利者结果2.3程序实现2.3.1源码分析import java.awt.Color;import java.awt.Graphics;import jav

9、a.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.util.ArrayList;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JPanel;/* * 黑白棋面板 * * author hyg * */public class HbPanel extends JPanel private static int BLACK = 1; private static int WHITE = -1; int q

10、izi = new int88; int curQizi = BLACK; / 当前走棋方 ArrayList a = new ArrayList(); ArrayList tmp = new ArrayList(); / 在指定位置画棋子 private void drawQizi(int i, int j) Graphics g = this.getGraphics(); if (qiziij = BLACK) g.setColor(Color.BLACK); else if (qiziij = WHITE) g.setColor(Color.WHITE); g.fillOval(55 +

11、 50 * i, 55 + 50 * j, 40, 40); /* * Create the panel */ public HbPanel() super(); addMouseListener(new MouseAdapter() public void mouseClicked(final MouseEvent e) int x = e.getX(); int y = e.getY(); System.out.println(x + , + y); / 计算索引 int i = (x - 50) / 50; int j = (y - 50) / 50; System.out.printl

12、n(i + , + j); if (i = 8 | j = 8 | qiziij != 0) / 如果指定位置超出范围或已经有棋子,直接返回。 return; if (checkLocation(curQizi, i, j) / 判断当前位置是否可以放棋子 / 如果可以 / 1. 画出棋子 qiziij = curQizi; drawQizi(i, j); / 3. 判断对方是否有棋可走,如有 if (checkNext(-1 * curQizi) / 2. 交换走棋方 curQizi *= -1; else if (checkNext(curQizi) / 有无,判断自己是否有棋可走,如有,

13、给出提示 JOptionPane.showConfirmDialog(null, (curQizi = BLACK ? 白方 : 黑方) + 无棋可走, + (curQizi = 1 ? 黑方 : 白方) + 继续,提示, JOptionPane.CLOSED_OPTION, JOptionPane.INFORMATION_MESSAGE); else / 游戏结束 JOptionPane.showConfirmDialog(null, 双方都无棋可走,游戏结束, 游戏结束, JOptionPane.CLOSED_OPTION, JOptionPane.INFORMATION_MESSAGE)

14、;); qizi33 = WHITE; / 1为黑,-1为白,0为无棋子 qizi34 = BLACK; qizi43 = BLACK; qizi44 = WHITE; / qizi10 = 1; / / Graphics g = getGraphics(); setBackground(Color.CYAN); /* * 验证参数代表的走棋方是否还有棋可走 * param i 代表走棋方,1为黑方,-1为白方 * return true/false */ protected boolean checkNext(int i) return true; protected boolean che

15、ckLocation(int cur, int i, int j) return toLeft(cur,i,j); /* * 从当前位置开始向左验证, * 验证过程中,j不变,i减小。 * param cur 走棋方颜色 * param i 横坐标 * param j 纵坐标 * return */ private boolean toLeft(int cur, int i, int j) System.out.println(向左搜索+(cur=1?黑:白)+色棋子); boolean result = false; if(i 0; m-) if(qizimj = cur) result =

16、 true; break; if(result) System.out.println(左侧搜索成功); else System.out.println(左侧搜索失败); return result; Override public void paint(Graphics g) super.paint(g); / 当前走棋方 if (curQizi = 1) / 黑色 g.setColor(Color.BLACK); else if (curQizi = -1) / 白色 g.setColor(Color.WHITE); g.fillOval(5, 5, 40, 40); g.setColor

17、(Color.BLACK); / 画横线 for (int i = 0; i = 8; i+) g.drawLine(50, 50 * i + 50, 450, 50 * i + 50); / 画竖线 for (int i = 0; i = 8; i+) g.drawLine(50 * i + 50, 50, 50 * i + 50, 450); / 画标志 String xl = A, B, C, D, E, F, G, H ; String yl = 1, 2, 3, 4, 5, 6, 7, 8 ; for (int i = 0; i yl.length; i+) g.drawString

18、(xli, 50 * i + 72, 40); g.drawString(yli, 40, 50 * i + 80); / 画棋子 for (int i = 0; i 8; i+) for (int j = 0; j 8; j+) if (qiziij != 0) / if (qiziij = 1) / 黑色 g.setColor(Color.BLACK); else if (qiziij = -1) / 白色 g.setColor(Color.WHITE); g.fillOval(55 + 50 * i, 55 + 50 * j, 40, 40); public static void ma

19、in(String args) JFrame f = new JFrame(); HbPanel p = new HbPanel(); f.setContentPane(p); f.setSize(500, 500); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true);2.3.2运行结果程序运行情况游戏初始界面如图2-1所示。 2-1结束界面 如图2-2所示白色背景,黑色字。第3章 总结这个黑白棋游戏就是在原有的程序基础上增加了改变背景颜色功能、改变棋子颜色功能、计时器功能、联网双人对战功能以及保存信息到文

20、件功能,由于是在原有的基础上修改的,虽然理论上那个来讲这应该很简单,不会太难,但当我真正着手做起来得时候才发现,原来自己还是太嫩,刚开始什么都不懂,于是我就去图书馆参阅了大量的资料,也不停的向同学们请教,终于渐渐的让我从刚开始连如何运行程序,甚至类的作用等一些罪基本的东西都不清楚到最后通过努力终于把这个程序成功搞定.自然这期间除了辛苦也让我明白了很多,有些小问题也是不容忽视的,就如公共类只能有一个,而且必须要有.及类名必须要同公共类名相同.否则程序就无法运行.经过编写这个黑白棋游戏,我认识到应该注意细节问题,虽然是很小的问题,但可以提高自己编程的能力,而且还可以培养自己编程的严谨性,同时还可以为以后的编程积累经验。除此之外让我对java变成语言又有了更深一步的了解,曾经对于一些类名的似是而非,现在通过编写这个程序让我逐渐变得明朗一些了,至少可以分清父类子类,以及一些类和方法的用途,总之通过这次课程设计真的让我学到了很多.参考文献1.耿祥义 张跃平 编著 JAVA2实用教程(第4版) 北京:清华大学出版社2.张跃平 耿祥义编著Java 2实用教程(第4版)实验指导与习题解答 北京:清华大学出版社25

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1