




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
辽 宁 工 业 大 学JAVA语言程序设计 课程设计(论文)题目: 黑白棋设计与实现 院(系): 专业班级: 学 号: 学生姓名: 指导教师: 教师职称: 讲 师 起止时间: 程序设计专题(报告)任务及评语院(系):软件学院 教研室:软件教研室学 号学生姓名专业班级程序设计(报告)题目程序设计(报告)任务程序设计专题的任务与要求:(1)掌握Java编程、面向对象的基础知识。(2)较熟练地编写Java应用程序Application。(3)了解Java的常用标准类库、编程技巧、异常处理。(5)联系已学过的内容,巩固所学的理论,增强独立工作能力。(6)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。(7)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素质的提高起一个积极的推动作用。课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。指导教师评语及成绩成绩: 指导教师签字: 2010年12月24日辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)目 录第1章 课程设计的目的与要求11.1 课程设计目的11.2 课程设计的实验环境11.3 课程设计的预备知识11.4 课程设计要求1第2章 课程设计内容22.1课程设计主要内容22.2概要设计22.3详细设计52.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 .*;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章 课程设计总结通过这两周实训的时间,我学到了很多,自然在这期间遇到的困难数不胜数,开始最让我没辙的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机场停车场车位销售及租赁服务协议
- 餐饮行业品牌授权运营管理服务协议
- 新能源汽车品牌区域代理商合作协议
- 离婚协议书中无形资产分割及子女抚养协议样本
- 夫妻家庭调解协议书范本
- 成都小区物业服务企业物业服务收费标准合同
- 餐饮连锁品牌区域代理合作协议范本模板
- 高速公路建设土地征收拆迁协议
- 城市综合体停车场升级改造合同
- 洪水冲毁桥墩应急支护方案
- 北师大版(2024)七年级上册生物期末复习全册考点背诵提纲
- 2025年湖南中考生物试题及答案
- 混凝土站销售管理制度
- 山东省威海市实验中学2025届七下英语期末达标检测试题含答案
- 第七中学高二下学期5月月考语文试题(含答案)
- 2025至2030中国旋转密码挂锁行业发展分析及前景趋势与投资报告
- 苏教版八年级下物理期末考试试题(含三套试卷)
- 2025年河北省中考麒麟卷地理(三)及答案
- 河南天一大联考2025年高二下学期期末学业质量监测英语试题
- 国际学校员工管理制度
- 农药经营许可证培训考试题库及答案
评论
0/150
提交评论