java黑白棋课程设计参考

133366736 贡献于2018-03-07

作者 wt  创建于2018-02-27 01:08:00   修改者hskj  修改于2018-02-27 01:08:00字数11030

文档摘要:《JAVA程序设计》是计算机相关专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。本课程的程序设计专题实际是计算机相关专业学生学习完《JAVA程序设计》课程后,进行的一次全面的综合训练,JAVA程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。
关键词:

 辽 宁 工 业 大 学 JAVA语言程序设计 课程设计(论文) 题目: 黑白棋设计与实现 院(系): 专业班级: 学 号: 学生姓名: 指导教师: 教师职称: 讲 师 起止时间: 程序设计专题(报告)任务及评语 院(系):软件学院 教研室:软件教研室 学 号 学生姓名 专业班级 程序设计(报告)题目 程序设计(报告)任务 程序设计专题的任务与要求: (1)掌握Java编程、面向对象的基础知识。 (2)较熟练地编写Java应用程序Application。 (3)了解Java的常用标准类库、编程技巧、异常处理。 (5)联系已学过的内容,巩固所学的理论,增强独立工作能力。 (6)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。 (7)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素质的提高起一个积极的推动作用。 课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。 指导教师评语及成绩 成绩: 指导教师签字: 2010年12月24日 辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) 目 录 第1章 课程设计的目的与要求 1 1.1 课程设计目的 1 1.2 课程设计的实验环境 1 1.3 课程设计的预备知识 1 1.4 课程设计要求 1 第2章 课程设计内容 2 2.1课程设计主要内容 2 2.2概要设计 2 2.3详细设计 5 2.4测试分析 17 第3章 课程设计总结 18 参考资料 19 第1章 课程设计的目的与要求 1.1 课程设计目的 《JAVA程序设计》是计算机相关专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。本课程的程序设计专题实际是计算机相关专业学生学习完《JAVA程序设计》课程后,进行的一次全面的综合训练,JAVA程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。 1.2 课程设计的实验环境 硬件要求能运行Windows 9.X操作系统的微机系统。JAVA程序设计语言及相应的集成开发环境,J2SDK和ECLIPSE开发工具。 1.3 课程设计的预备知识 熟悉JAVA语言及ECLIPSE开发工具。 辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) 1.4 课程设计要求 按课程设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握JAVA程序设计的基本技能和面向对象的概念和方法;了解多线程、安全和网络等编程技术。同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。 第2章 课程设计内容 2.1课程设计主要内容 Java语言的学习热潮并没有因为时间的推移而消退,相反,由于计算机技术的发展所带来新应用的出现,Java越来越流行,这种情况是以往程序设计语言在其生存周期内所不多见的。Java语言之所以这样长盛不衰,一是因为其众多的技术特点与现今的应用十分合拍,可以覆盖大部分的需求;二是因为SUN公司不断推出新的版本,完善Java自身的功能。有了这两点,Java语言成为程序员首选的程序设计开发工具就在情理之中了。 黑白棋,又叫翻转棋(Reversi)、苹果棋或奥赛罗棋(Othello)。一般棋子双面为黑白两色,故称“黑白棋”。因为行棋之时将对方棋子翻转,变为己方棋子,故又称“翻转棋”。棋子双面为红、绿色的称为“苹果棋”。 黑白棋的前身是英国人发明的翻转棋(Reversi),后来由日本的长谷川五郎加以改进,并改称为奥赛罗棋(Othello),国内习惯上称之为黑白棋。这个棋类游戏在西方较为流行,但在中国起步较晚,还不很普及。 黑白棋作为一个棋类竞技运动,在民间十分流行,为了熟悉黑白棋规则及技巧,以及研究简单的人工智能,决定用Java开发黑白棋游戏。主要完成了人机对战功能,有很好的可扩展性。在人机对弈中通过深度搜索和估值模块,来提高电脑棋手的智能。分析估值模块中的影响精准性的几个要素,以及提出若干提高精准性的办法,以及对它们搜索的节点数进行比较,在这些算法的基础上分析一些提高提高电脑AI方案,如递归算法、电脑学习等。算法的研究有助于理解程序结构,增强逻辑思维能力,在其他人工智能方面也有很大的参考作用。尽管黑白棋的规则比较简单,但它所包括的丰富战略,不亚于那些相当 辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) “经典”的策略游戏。其中人工智能部分,由于采用了大量的搜索算法,其中很多被利用到各方面。 2.2概要设计 近来随着计算机的快速发展,各种各样的电脑游戏层出不穷,使得我们能有更多的娱乐项目,而棋类游戏能起到锻炼人的思维和修身养性的作用,而且棋类游戏水平颇高,大有与人脑分庭抗礼之势。其中战胜过国际象棋世界冠军-卡斯帕罗夫的“深蓝”便是最具说服力的代表,其它像围棋的“手淡”、象棋的“将族”等也以其优秀的人工智能深受棋迷喜爱。 越来越多的具有智能的机器进入了人类的生活,人工智能的重要性如今显而易见。自己对人工智能比较感兴趣,而黑白棋游戏程序的开发实现这个课题,正好提供给我这样一个研究的机会,通过对人工智能中博弈方面的研究(人机对弈),让我在简单的人机对弈全局设计,以及具体到相关算法上有了深入的了解。人工智能属于计算机科学的领域,它以计算机技术为基础,近几十年来,它的理论和技术已经日益成熟,应用领域也正在不断扩大,显示出强大的生命力。人工智能大致可以分成几个学科,它们每一个都是独特的,但是它们常常又互相结合起来完成设计任务,这时,这些学科之间的差别就变的很模糊。人工智能在专家系统,自然语言理解,自动定理证明,自动程序设计,人工智能在机器人学、模式识别、物景分析、数据库的智能检索、机器下棋(实质上是博弈论问题)和家用电器智能化等领域都有广泛的应用。而这个课题就是和人工智能中的博弈论领域紧密相关的。 这个题目核心是人工智能和Socekt编程,并且人工智能中的博弈部分,由于采用了大量的搜索算法,其中很多被利用到各方面。它的概念、方法和技术,正在各行各业广泛渗透。智能已经成为当今各种新产品、新装备的发展方向。所以,趁着这个机会,对人工智能中比较容易实现的人机博弈进行了解研究学习,也是很实用且很有必要的。电脑究竟能否最终战胜人脑?这是大家一直在探索的问题。自从1997年黑白棋程序Logistello战胜冠军棋手村上健以来,电脑程序已经把人类棋手远远抛在后面。目前,程序可以记住大量的开局定式、可以正确地判断局面的优劣、可以思考到二十几步之后的局面,这都是人类棋手远不能及的。然而,电脑的这一切又都是人类所赋予的,因此究竟电脑和人脑孰优孰劣,还难以定论。 辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) 2.2.1 自定义说明 吃子规则:采用夹吃的原则,左图用红色标记的是黑方可落子的位置。当黑方落子之后,则夹在两黑子中间的白子都将变为黑子。右图是落子后的棋盘布局,蓝色标记的是白方可落子的位置。 夹子的方向包含:水平、竖直、斜对角 2.2.2 程序流程图 (1)落棋位置判断: (2)输出成绩: 辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) (3)输出最后的胜利者结果: 2.2.3 各模块功能及程序说明 落棋位置的判断模块:判断落子后棋盘的变化,判断棋手的落棋位置和次数,两方交换走棋。 辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) 成绩输出模块:判断输出哪个棋手的分,在不同的位置输出,清空成绩,判断哪方胜利。 输出胜利者信息模块:开始判断最后的结果,将两人分数分别输出。 2.2.4 程序结果 一方执黑棋,一方执白棋,轮流走棋,每方都试图在游戏结束前让自己棋子的数目多于对方。按键盘上的方向键可以上下左右移动棋子,按回车键可以摆放棋子,同时也可以用鼠标左键操作。在同上操作下到最后谁的棋子多,谁赢。 2.3详细设计 程序详细设计代码如下: import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; import javax.swing.*; import java.util.*; import java.awt.Font; public class Main{ public static void main(String args[]){ BlackAndWhiteDesign b = new BlackAndWhiteDesign(); } } class BlackAndWhiteDesign extends Frame implements Runnable{ Go Background = new Go(); boolean stepColor = true; int PORT; Socket sendSocket;//主动连接Socket 辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) PrintWriter writer;//用来发送message boolean stopFlag; boolean isInitiative; Point messagePoint; Panel panel1 = new Panel(); Panel panel2 = new Panel(); Panel panel3 = new Panel(); CheckboxGroup checkboxGroup1 = new CheckboxGroup(); Checkbox checkbox1 = new Checkbox(); Checkbox checkbox2 = new Checkbox(); Label label1 = new Label(); TextField textField1 = new TextField(10); Panel PtextField1 = new Panel(); Button button1 = new Button(); Label label2 = new Label(); Choice choice1 = new Choice(); Button button2 = new Button(); Button button3 = new Button(); BorderLayout borderLayout3 = new BorderLayout(); Panel panel4 = new Panel(); Panel panel4_1 = new Panel(); Panel panel4_2 = new Panel(); Panel panel4_3 = new Panel(); Label label3 = new Label("黑棋"); Label label4 = new Label("白棋"); JTextArea BlackNumber = new JTextArea("02"); //定义并初始化黑棋计数板 JTextArea WhiteNumber = new JTextArea("02"); //定义并初始化白棋计数板 辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) BlackAndWhiteDesign(){ try { bwInit(); } catch(Exception e) { e.printStackTrace(); } } private void bwInit() throws Exception{ this.setTitle("网络黑白棋 作者:刘茂龙"); new Thread(this).start();//启动监听线程 this.PORT = 1976; this.isInitiative = false;//是否主动连接 this.stopFlag = false;//是否继续监听的标志 this.messagePoint = new Point(); choice1.setBackground(new Color(236, 190, 98)); this.choice1.addItem("黑"); this.choice1.addItem("白"); this.setBackground(new Color(236, 190, 98)); this.setSize(580,565); this.setResizable(false); this.setVisible(true); 辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) checkbox1.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { checkbox1_mouseClicked(e); } }); panel1.setLayout(new BorderLayout()); checkbox1.setCheckboxGroup(checkboxGroup1); checkbox1.setLabel("单机"); checkbox2.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { checkbox2_mouseClicked(e); } }); checkbox2.setCheckboxGroup(checkboxGroup1); checkbox2.setLabel("联机"); label1.setText("对方地址"); button1.setBackground(new Color(236, 190, 98)); button1.setLabel("连接"); button1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { button1_actionPerformed(e); } }); 辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) label2.setText(" "); button2.setBackground(new Color(236, 190, 98)); button2.setLabel("开始"); button2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { button2_actionPerformed(e); } }); button3.setBackground(new Color(236, 190, 98)); button3.setLabel("重新开始"); this.button3.setEnabled(false); button3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { button3_actionPerformed(e); } }); Background.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { Background_mouseClicked(e); } }); this.addWindowListener(new WindowAdapter() { 辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) public void windowClosing(WindowEvent e) { this_windowClosing(e); } }); panel3.setLayout(new GridLayout(9, 1)); panel3.setBackground(new Color(236, 190, 98)); panel3.add(checkbox1); panel3.add(checkbox2); panel3.add(label1); PtextField1.add(textField1); panel3.add(PtextField1); panel3.add(choice1); panel3.add(button1); panel3.add(button2); panel3.add(button3); panel3.add(label2); panel4.setLayout(new GridLayout(1, 3)); label3.setFont(new Font("h",15,30)); panel4_1.add(label3); BlackNumber.setFont(new Font("h",15,30)); BlackNumber.setEditable(false); panel4_1.add(BlackNumber); label4.setFont(new Font("h",15,30)); panel4_2.add(label4); WhiteNumber.setFont(new Font("h",15,30)); WhiteNumber.setEditable(false); panel4_2.add(WhiteNumber); 辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) panel4.add(panel4_1); panel4.add(panel4_2); panel4.add(panel4_3); this.panel1.add(this.Background,BorderLayout.CENTER); this.panel1.add(panel3, BorderLayout.EAST); this.panel1.add(panel4, BorderLayout.SOUTH); this.add(panel1, BorderLayout.CENTER); this.disableLink();//废掉控件 this.checkboxGroup1.setSelectedCheckbox(this.checkbox1); this.centerWindow(); this.Background.setEnabled(false); this.setVisible(true); } void checkbox1_mouseClicked(MouseEvent e) { this.button2.setEnabled(true); this.disableLink(); } //disable联机时用的控件 void disableLink() { this.textField1.setBackground(new Color(236, 190, 98)); this.textField1.setEnabled(false); this.choice1.setEnabled(false); this.button1.setEnabled(false); } 辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) void checkbox2_mouseClicked(MouseEvent e) { this.enableLink(); } void enableLink() { this.textField1.setBackground(Color.white); this.textField1.setEnabled(true); this.choice1.setEnabled(true); this.button1.setEnabled(true); this.button2.setEnabled(false); } void button1_actionPerformed(ActionEvent e) { this.stopFlag = false; this.goToLink(this.textField1.getText().trim(),this.PORT); this.button2.setEnabled(true); } //开始 void button2_actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("开始")) { this.stopFlag = false; this.disableLink(); this.button3.setEnabled(true); 辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) this.checkbox1.setEnabled(false); this.checkbox2.setEnabled(false); this.button2.setLabel("退出"); if(this.isSingle()) this.Background.setEnabled(true); //判断类型 boolean isSingle() { return this.checkbox1.getState(); } void button3_actionPerformed(ActionEvent e) { if (isSingle()){ int Choose; Choose=JOptionPane.showConfirmDialog(null, "您确定要重新开始吗?", "提示", JOptionPane.YES_NO_OPTION); if (Choose == JOptionPane.YES_OPTION){ this.Background.Restart(); String s1, s2; if (this.Background.BlackNumberc<=9) s1="0"+Integer.toString(this.Background.BlackNumberc); else s1 = Integer.toString(this.Background.BlackNumberc); if (this.Background.WhiteNumberc<=9) s2="0"+Integer.toString(this.Background.WhiteNumberc); else s2 = Integer.toString(this.Background.WhiteNumberc); this.BlackNumber.setText(s1); this.WhiteNumber.setText(s2); 辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) this.button1.setEnabled(false); this.button2.setLabel("开始"); this.button3.setEnabled(false); this.checkbox1.setEnabled(true); this.checkbox2.setEnabled(true); this.clearMyColor(); this.Background.setEnabled(false); this.stepColor = true; } } else this.writer.println("clear"); } //显示错误信息 void showError(String errorMessage) { Graphics g=this.getGraphics(); g.setColor(new Color(236,190,98)); g.fillRect(10,10,300,15); g.setColor(Color.red); g.drawString(errorMessage,22,20); g.fillOval(10,10,10,10); } private void bwInit() throws Exception { this.setBackground(new Color(236, 190, 98)); } } class Listen extends Thread 辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) { Socket socket; BlackAndWhiteDesign BlackAndWhiteDesign; public Listen(Socket socket,BlackAndWhiteDesign BlackAndWhiteDesign) { this.socket=socket; this.BlackAndWhiteDesign=BlackAndWhiteDesign; } public void run() { try { this.activeListen(this.socket); }catch(IOException ioe){this.BlackAndWhiteDesign.Background.showError("意外中断");} } void activeListen(Socket socket) throws IOException { BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream())); String message; while(true) { message=reader.readLine(); this.BlackAndWhiteDesign.doMessage(message); } } } 辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) 2.4测试分析 程序运行情况 游戏初始界面如图2-1所示。 图2.1 结束界面 如图2-2所示 辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) 图2.2 第3章 课程设计总结 通过这两周实训的时间,我学到了很多,自然在这期间遇到的困难数不胜数,开始最让我没辙的是题目不知道该订什么好,想过很多个题目但往往跟其他同学重复了,为了避免做出来的东西雷同了,只能继续想其他方面的,想过去做些复杂的,但实在是能力有限,呵呵,最后终于决定做这个黑白棋游戏. 这个黑白棋游戏就是在原有的程序基础上增加了改变背景颜色功能、改变棋子颜色功能、计时器功能、联网双人对战功能以及保存信息到文件功能,由于是在原有的基础上修改的,虽然理论上那个来讲这应该很简单,不会太难,但当我真正着手做起来得时候才发现,原来自己还是太嫩,刚开始什么都不懂,于是我就去图书馆参阅了大量的资料,也不停的向同学们请教,终于渐渐的让我从刚开始连如何运行程序,甚至类的作用等一些罪基本的东西都不清楚到最后通过努力终于把这个程序成功搞定.自然这期间除了辛苦也让我明白了很多,有些小问题也是不容忽视的,就如公共类只能有一个,而且必须要有.及类名必须要同公共类名相同.否则程序就无法运行. 经过编写这个黑白棋游戏,我认识到应该注意细节问题,虽然是很小的问题,但可以提高自己编程的能力,而且还可以培养自己编程的严谨性,同时还可以为以后的编程积累经验。除此之外让我对java变成语言又有了更深一步的了解,曾经对于一些类名的似是而非,现在通过编写这个程序让我逐渐变得明朗一些了,至少可以分清父类子类,以及一些类和方法的用途,总之通过这次课程设计真的让我学到了很多. 辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) 参考资料 [1] 王克宏编著 JAVA语言入门 清华大学出版社 1996 [2] 旭日工作室编著 Java 1.1使用大全 电子工业出版社 1998 [3][美]Cay S.Horstmann 程峰等译 JAVA2核心技术 机械工业出版社 2003.6 [4] Horstmann C S,Cornell G著 Java2核心技术 机械工业出版社 2008.10 [5] 马凡 李璠编著 JavaScript实例应用 中国铁道出版社 2001.01 [6]朱喜福 JAVA程序设计(第二版) 上海:人民邮电出版社 2007.3 [7] 林胜利 王坤茹 JAVA优化编程(第二版) 北京:电子工业出版社 2008.10 [8] 马军 JAVA完全自学手册 北京:机械工业出版社 2006.5 [9] 袁海燕 王文涛编著 JAVA实用程序设计 上海:人民邮电出版社 2009.11 [10] 刘宝林 程序设计与案例 上海:高等教育出版社 2004.6 [11] 马凡 李璠编著 JAVA核心技术 北京:机械工业出版社 2000.8 [12] 王克宏编著 JAVA语言Applet编程技术 北京:清华大学出版社 2005.3 [13] 施霞萍 Java程序设计教程 第2版 机械工业出版社 2006-6 辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) [14] 宛延闿 实用Java程序设计教程 机械工业出版社 2006-1 [15] 陈国君 Java2程序设计基础 清华大学出版社 2006-8

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档