《JAVA五子棋程序设计》课程设计
java五子棋课程设计

java五子棋课程设计一、课程目标知识目标:1. 学生能理解五子棋游戏的基本规则和胜负判断方法。
2. 学生掌握Java编程语言的基本语法,如变量声明、循环结构、条件判断等。
3. 学生能运用面向对象编程思想,设计五子棋游戏的相关类和对象。
技能目标:1. 学生能运用所学知识,独立编写五子棋游戏的代码,实现人机对战和胜负判断功能。
2. 学生通过编程实践,提高解决问题的能力和逻辑思维能力。
3. 学生能运用调试工具,优化代码,提高程序的执行效率和稳定性。
情感态度价值观目标:1. 学生在编程过程中,培养耐心、细心和团队合作精神。
2. 学生通过五子棋游戏,体验编程的乐趣,激发对计算机科学的兴趣和求知欲。
3. 学生在学习过程中,树立正确的竞争观念,学会尊重对手,公平竞争。
课程性质:本课程为实践性课程,注重培养学生的动手能力和编程思维。
学生特点:五年级学生,具备一定的计算机操作能力和逻辑思维能力,对编程有浓厚兴趣。
教学要求:结合学生特点,注重理论与实践相结合,以学生为主体,引导学生主动探究、合作学习,培养其编程素养。
将课程目标分解为具体的学习成果,以便在教学设计和评估中有的放矢。
二、教学内容1. 五子棋游戏规则及胜负判断方法介绍- 游戏规则讲解- 胜负判断方法分析2. Java基本语法复习- 数据类型与变量- 循环结构(for、while)- 条件判断(if-else、switch)3. 面向对象编程思想- 类与对象- 封装、继承、多态4. 五子棋游戏设计与实现- 游戏界面设计- 游戏逻辑实现(人机对战、胜负判断)- 代码编写与调试5. 教学内容的安排与进度- 第一节课:五子棋游戏规则介绍,Java基本语法复习- 第二节课:面向对象编程思想学习,五子棋游戏设计思路分析- 第三节课:五子棋游戏代码编写与调试,实现人机对战和胜负判断功能6. 教材章节及内容关联- 第五章:面向对象编程- 第六章:数组与字符串- 第七章:异常处理与调试技巧教学内容依据课程目标进行选择和组织,保证科学性和系统性。
java五子棋课程设计报告总结

课程设计报告:Java五子棋1. 背景五子棋是一种两人对弈的策略棋类游戏,它的目标是在一个棋盘上先将自己的五个棋子连成一条线,可以是横线、竖线、斜线等。
五子棋具有简单规则、易于上手、趣味性强等特点,因此在各个年龄段都备受欢迎。
本次课程设计旨在使用Java语言实现一个简单的五子棋游戏,并通过该项目来提高学生对面向对象编程和图形用户界面开发的理解和实践能力。
2. 分析2.1 需求分析根据五子棋游戏的规则,我们需要实现以下功能:•创建一个可视化的游戏界面,包括棋盘和落子提示•实现落子操作,玩家可以通过点击鼠标来在合法位置落下自己的棋子•判断胜负条件,当任意一方连成五个棋子时,游戏结束并宣布胜利者•提供重新开始和退出游戏的选项2.2 设计思路为了实现上述功能,我们将采取以下设计思路:•使用Java Swing库来创建游戏界面,包括棋盘和落子提示•使用二维数组来表示棋盘,并通过判断数组中的元素来确定当前位置是否已经有棋子•使用鼠标事件监听器来实现玩家的落子操作•使用算法判断胜负条件,例如遍历棋盘判断是否有五个连续的棋子•使用菜单栏和对话框来实现重新开始和退出游戏的选项3. 实现3.1 游戏界面设计我们将使用Java Swing库来创建游戏界面。
首先,我们需要创建一个主窗口,并设置其大小、标题和布局。
然后,在主窗口上添加一个棋盘面板和一个状态栏面板。
在棋盘面板上,我们使用GridLayout布局将其分割为15行15列的格子。
每个格子可以是一个按钮,用于玩家落子操作。
同时,我们还需要在每个格子上显示当前位置是否已经有棋子。
在状态栏面板上,我们将显示当前玩家的提示信息(轮到哪一方落子)以及胜利者信息(如果有)。
3.2 落子操作实现为了实现玩家的落子操作,我们需要使用鼠标事件监听器。
当玩家点击某个格子时,程序会捕捉到鼠标点击事件,并根据当前玩家的身份在对应的位置上落下棋子。
为了判断当前位置是否已经有棋子,我们可以使用一个二维数组来表示棋盘。
Java语言程序设计的课程设计项目——利用Java实现人机五子棋游戏项目完整实现实例(第1部分)

1.1Java语言程序设计的课程设计项目——利用Java实现人机五子棋游戏项目完整实现实例(第1部分)1.1.1项目预演1、新建一个Java项目,名称为BackGammonGame五子棋是一种两人对弈的纯策略型棋类游戏,是起源于中国古代的传统黑白棋种之一。
容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。
2、切换到Navigator视图3、拷贝程序和图像文件4、执行启动程序5、最后出现下面的程序启动画面6、主程序窗口开始游戏时游戏界面是没有棋子ide,也就是棋盘的初始化状态。
传统五子棋的棋具与围棋相同,棋子分为黑白两色,棋盘为15×15,棋子放置于棋盘线交叉点上。
两人对局,各执一色,轮流下一子,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。
如何判断输赢:当某方下一子后,计算与当前棋子相邻的四个方向(\ 、/、|和—)的同色棋子的各数,大于四则分出胜负,否则继续下子过程。
1.1.2项目中的各个模块说明1、人机五子棋游戏启动程序类BackGammonGameApp(1)类名称为BackGammonGameApp,包名称为com.px1987.backgammongame(2)程序的主要流程1)系统初始化2)主循环控制模块3)玩家下子4)盘面分析填写棋型表5)电脑下子6)胜负判断(3)主控制程序BackGammonGameApp代码实例package com.px1987.backgammongame;import javax.swing.SwingUtilities;import com.px1987.backgammongame.mainframe.BackGammonGameMainFrame;import com.px1987.backgammongame.splashframe.SplashImageJWindow;import com.px1987.backgammongame.util.BackGammonGameUtils;public class BackGammonGameApp {public BackGammonGameApp() {}public static void main(String[] args){SplashImageJWindow oneSplashImageJWindow=new SplashImageJWindow();BackGammonGameUtils.systemInitAndLoadResource(oneSplashImageJWindow);oneSplashImageJWindow.dispose(); //系统后台初始化完毕,则关闭快闪屏窗口并释放该窗体的资源oneSplashImageJWindow=null;SwingUtilities.invokeLater(new Runnable() { //下面的代码实现实时刷新Swing界面public void run() {BackGammonGameMainFrame backGammonGameMainFrame=new BackGammonGameMainFrame();backGammonGameMainFrame.setVisible(true);}});}}2、人机五子棋游戏全局工具类BackGammonGameUtils(1)类名称为BackGammonGameUtils,包名称为com.px1987.backgammongame.util 工具类的主要作用?类中的方法有声明要求?(2)systemInitAndLoadResource()方法实现系统初始化后台加载主线程是在程序启动时自动创建的,但它可以由一个Thread对象控制。
java-五子棋小游戏课程设计

group.add(rmenu);}m.add(jm);}elseif(items[i] =="模式"){JMenu jm= new JMenu("模式");ButtonGroup group=newButtonGroup();JRadioButtonMenuItem rmenu;for (inth=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;}3.设计结果与分析(1)五子棋游戏的主界面,如图2所示。
图2 程序主界面(2)五子棋游戏的结束界面,如图3所示。
图3 游戏结束界面(3)游戏游戏栏中的各个选项,如图4所示。
图4 Game栏中的选项(4)视图设置栏中的各个选项,如图5所示。
图5 Configure栏中的各个选项(5)Help帮助栏中的选项,如图6所示。
图6 Help栏中的选项(6)点击Help栏中的About选项弹出的界面,如图7所示。
图7 About选项弹出时的界面4.设计体会通过这次课程设计,我进一步加深对基础理论的理解,扩大专业知识面,对收集资料、查阅文献、方案制定等实践方面得到了很好的锻练,促进对所学知识应用能力的提高。
同时我渐渐的复习了Java使用方法和编程语法,之后的编程过程也相对得心应手,基本完成了预期计划的要求。
在此感谢我的指导老师—冯云老师,她在课题的研究上不遗余力的给予指导。
她严谨的治学态度深深的影响了我,使我受益匪浅!5.参考文献[1]耿祥义.JAVA大学实用教程.北京:电子工业出版社.2005.3:85-113[2]朱战立,沈伟.Java程序设计实用指南.北京:电子工业出版社,2005.1:48-135 [3] 唐大仕.Java程序设计[M]. 北京:北方交通大学出版社:2007.05:56-92。
《Java程序设计实训教程》教学课件—02网络五子棋

3. 创建棋子类(1)
• Chess 类
private int col; //棋子在棋盘中的列索引 private int row; //棋子在棋盘中的行索引 private Color color;//颜色 public static final int DIAMETER=GRID_SPAN-2; ChessBoard cb; //棋子是要画在棋盘中,需要一个棋盘的引用 public void draw(Graphics g)
2.9 完善“关闭程序”按钮的功能
1. 在Command类中添加命令
2. 客户端向服务器发送命令
修改“关闭程序”按钮的响应代码 Communication类添加方法disConnect()
3. 服务器处理quit命令 4. 客户端处理delete命令
作业
• 1.目前的程序每方总的用时是在程序中指定的,如果用 户希望在申请对局时自己指定用时时间,程序中应如何处 理?
2. 创建客户端界面右侧的三个类
• 图标: black.jpg, white.jpg • PanelTiming类 • PanelUserList类 • PanelMessage类 • 修改FiveClient类
PanelBoard
PanelTiming PanelUserList
PanelMessage
• 在Five类加入:
private ChessBoard boardPanel; • 准备图片Boad.jpg
Toolkit getDefaultToolkit() getImage()
paintComponent() getPreferredSize() : (Jfram在pack时,要知道board的大小)。
java课程设计五子棋游戏完整版

沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学沈阳大学算下一步棋,isMatrix位true参数为插入点棋格坐标,否则参数为插入点像素坐标。
当游戏结束的时候使用Graphics g调用方法,在游戏过程中如果是黑方或是白方获胜在棋盘中就会显示是哪方获胜。
3.设计结果与分析(1)当进入到游戏当中可以选择是哪个颜色的棋先出,选择好之后便可以单机开始进行下棋,如果在游戏过程中出现什么问题可以单机再来一局重新开始游。
五子棋游戏的主界面如图2所示:图2.程序主界面(2)如果实黑棋先开始那么开始后的界面中先出的棋显示的是黑棋,如果是白棋先出则显示的是白棋,以黑棋为例如图3所示:沈阳大学图3.黑棋先出的界面图(3)对于五子棋游戏,无论人机对战,还是双人对战,都需要判断棋盘上是否存在五子连珠情况,这既是游戏名字的由来,也是游戏结束的标志。
判断五子连珠的原理是从横,竖,左斜线,右斜线4条线上判断是否存在5个相连的同类棋子,黑棋的五个棋子在横、竖或斜方向上连接成一线即为该方赢如图4所示:沈阳大学图4.游戏结束界面(4)白棋的五个棋子在横、竖或斜方向上连接成一线即为该方赢如图4所示:沈阳大学图5.白棋胜利界面图4.设计体会通过这次课程设计,我进一步加深对基础理论的理解,扩大专业知识面,对收集资料、查阅文献、方案制定等实践方面得到了很好的锻练,促进对所学知识应用能力的提高。
同时我渐渐的复习了Java使用方法和编程语法,之后的编程过程也相对得心应手,基本完成了预期计划的要求。
在此感谢我的指导老师—原玥老师,她在课题的研究上不遗余力的给予指导。
她严谨的治学态度深深的影响了我,使我受益匪浅!这个课设题对我来说有一定的挑战性,因为我自己也不知道自己到底学到了一个什么样的境界。
但可以肯定,这个课设题的要求绝对在我的能力范围以上。
之所以选择这个题目是想逼着自己去查更多的资料,学到更多的东西。
结果也确实是这样的,我在这次课设中学到了不少东西,也理解了许多原来不理解的东西。
Java五子棋课程设计报告程序

Java五子棋课程设计报告程序----------------------------------EXCE.JAVA--------------------------------------------- importjavax.swing.*;importjava.awt.*;importjava.awt.geom.*;public class Exce{public static void main(String args[]){JFrame win=new JFrame();JMenuBarmenubar;JMenu menu;JMenuItem item2,item1,item3;menubar=new JMenuBar();menu=new JMenu("菜单");item1=new JMenuItem("开始");item2=new JMenuItem("重新开始");item3=new JMenuItem("结束");menu.add(item1);menu.add(item2);menu.add(item3);menubar.add(menu);win.setJMenuBar(menubar);win.setTitle("五子棋");win.setSize(700,750);//win.setBackground(Color.orange);win.add(new Wuziqi());win.setVisible(true);win.setResizable(false);win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}------------------------ WUZHIQI.JAVA------------------------ importjavax.swing.*;importjava.awt.*;importjava.awt.geom.*;public class Wuziqi extends JPanel{//棋盘距离边界的距离public static int x=50, y=50;//棋子的多少及格子大小public static int n=16, fangge=40,qizi=40;public static int s[][]=new int[n][n];//初始数组,数组全赋为0public void chushi(){for(inti=0;i<n;i++)< p="">{for(int j=0;j<n;j++)< p="">{s[i][j]=0;}}}//绘制棋盘public void paint(Graphics g){//调用父类的方法,清空棋盘super.paint(g);WuziqiListener listen= new WuziqiListener();listen.setWuziqiQP(this);//添加鼠标事件listen.setWuziqiG(g);this.addMouseListener(listen);this.addMouseListener(listen);Graphics2D g_2d=(Graphics2D)g;for(inti=0;i<n;i++)< p="">{Line2D line=new Line2D.Double(x+i*fangge,y,x+i*fangge,y+(n-1)*fangge);g_2d.draw(line);}for(inti=0;i<n;i++)< p="">{Line2D line=new Line2D.Double(x,y+i*fangge,x+(n-1)*fangge,y+i*fangge);g_2d.draw(line);} //画棋子for(inti=0;i<n;i++)< p="">{for(int j=0;j<n;j++)< p="">{if(s[i][j]==1){//黑棋子g.setColor(Color.BLACK);Ellipse2D ellipse=new Ellipse2D.Double(x+i*Wuziqi.fangge-Wuziqi.fangge/2,y+j*Wuziqi.fangge-Wuziqi.fangge/2, Wuziqi.qizi,Wuziqi.qizi);g_2d.fill(ellipse);}else if(s[i][j]==-1){//将颜色改为白色g.setColor(Color.WHITE);Ellipse2D ellipse=new Ellipse2D.Double(x+i*Wuziqi.fangge-Wuziqi.fangge/2,y+j*Wuziqi.fangge-Wuziqi.fangge/2 ,Wuziqi.qizi,Wuziqi.qizi);g_2d.fill(ellipse);}}}}//判断输赢public booleanisWin(intx,inty,int t){inti,j,count;//白棋或黑棋相连的个数//判断x负方向for(i=0,count=0;x-i>=0&&i<5;i++){if(t==s[x-i][y]){count++;}else{break;}if(count==5) //return true;}for(i=0,count=0;x+i<16&&i<5;i++) {if(t==s[x+i][y]){count++;}else{break;}if(count==5)return true;}//判断y方向for(i=0,count=0;y-i>=0&&i<5;i++) {if(t==s[x][y-i]){count++;}else{break;}if(count==5)return true;}for(i=0,count=0;y+i<16&&i<5;i++) {if(t==s[x][y+i]){count++;}else{break;}if(count==5)return true;}//判断左下方向for(i=0,count=0;x-i>=0&&y-i>=0&&i<5;i++) {if(t==s[x-i][y-i]){count++;}else{break;}if(count==5)return true;}for(i=0,count=0;x+i<16&&y+i<16&&i<5;i++) {if(t==s[x+i][y+i]){count++;}else{break;}if(count==5)return true;}}//判断右上方向for(i=0,count=0;x+i<16&&y-i>=0&&i<5;i++) {if(t==s[x+i][y-i]){count++;}else{count=0;}if(count==5)return true;}for(i=0,count=0;x-i>0&&y+i<16&&i<5;i++) {if(t==s[x-i][y+i]){count++;}else{break;}if(count==5){return true;}return false;}}---------------------------------------------WuziqiListener.JAVA--------------------------------------------------- importjava.awt.Graphics;importjava.awt.event.MouseEvent;importjava.awt.event.MouseListener;importjava.awt.*;importjavax.swing.*;//棋盘鼠标监视器public class WuziqiListener implements MouseListener{Wuziqiwzq;Graphics g;//用来确定下什么棋public static int t=1;public void setWuziqiQP(Wuziqiwzq){this.wzq=wzq;}public void setWuziqiG(Graphics g){this.g=g;}public void mousePressed(MouseEvent e){//利用四舍五入,获得要下的棋子的行和列int x1=(int)((double)(e.getX()-Wuziqi.x)/Wuziqi.fangge+0.5);int y1=(int)((double)(e.getY()-Wuziqi.y)/Wuziqi.fangge+0.5);//判断是否越界,及是否放了棋子while(x1>=0&&x1<wuziqi.n&&y1>=0&&y1<wuziqi.n&&w uziqi.s[x1][y1]==0)< p="">{//wzq.repaint();//wzq.paint(g);//棋子放在棋盘上后,数组做相应标示Wuziqi.s[x1][y1] = t;//调用iswin方法,来判断输赢if((wzq.isWin(x1,y1,t))&&t==1){ //弹出提示对话框int n=JOptionPane.showConfirmDialog(null,"黑棋赢了,再来一盘吧!", "确认对话框",JOptionPane.YES_NO_CANCEL_OPTION);if(n==JOptionPane.YES_OPTION){wzq.chushi();Wuziqi.s[x1][y1]=-2;wzq.repaint();}else if(n==JOptionPane.NO_OPTION){System.exit(0);}}else if((wzq.isWin(x1,y1,t))&&t==-1){int n=JOptionPane.showConfirmDialog(null,"白棋赢了,再来一盘吧!", "确认对话框",JOptionPane.YES_NO_CANCEL_OPTION);if(n==JOptionPane.YES_OPTION){wzq.chushi();Wuziqi.s[x1][y1]=-2;wzq.repaint();}else if(n==JOptionPane.NO_OPTION){System.exit(0);}}else{ //重新棋盘wzq.repaint();t = -t;}}}public void mouseClicked(MouseEvent e) {}public void mouseReleased(MouseEvent e) {}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}}</wuziqi.n&&wuziqi.s[x1][y1]==0)<></wuziqi.n&&y1> </n;j++)<></n;i++)<></n;i++)<></n;i++)<></n;j++)<></n;i++)<>。
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. 棋盘绘制:使用二维数组表示棋盘,绘制初始界面。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机与信息工程系《JAVA程序实训》设计五子棋游戏摘要:计算机人机对弈作为人智能研究的一个重要分支,计算机博弈是检验人工水平的一个重要方面。
它的研究为人工智能带来了很多重要的方法和理论,产生了广泛的社会影响和学术影响。
五子棋人机对弈是计算机博弈中的一种。
研究其计算机算法,可以让我们看到人工智能的稚形,也有助于我们人脑的开发。
五子棋是我国发明的,研究它可以让更多的外国人了解五子棋,这有助于我国优秀文化的推广。
关键词:人工智能,计算人机对弈,五子棋,算法 , java1.课程设计介绍1.1课程设计目的通过此次课程设计,巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、NetBeans等开发工具的运用,拓宽常用类库的应用。
使我们通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。
本次课程设计每人一组,自行设计并实现共功能模块。
1.2课程设计任务实现五子棋游戏,要求:使用图形用户界面,实现人人对战,人机对战。
能够判断输赢,有“开始”按钮,当出现棋盘后,按此按钮进入对战状态。
当有胜利者(垂直、水平、对角线连续5子),显示对话框,提示谁(黑还是白)胜利了。
若当棋盘满了还无胜利者,显示平局对话框。
有“悔棋”按钮,玩家可以点击悔棋,回到上一步。
1.3课程设计论文编写要求(1)要按照书稿的规格打印与写课程设计论文;(2)论文包括目录、设计思路、具体实现、运行调试与分析讨论、设计体会与小结、参考文献、附录(源代码)等;(3)课程设计论文装订按学校的统一要求完成。
2.系统设计2.1需求分析2.1.1性能需求一款小游戏的确立是建立在各种各样的需求上面的,这种需求往往来自于玩家的实际需求,其中玩家的实际需求最为重要.面对游戏拥有不同知识和理解层面的玩家,游戏制作人对玩家需求的理解程度,在很大程度上决定了此类游戏开发的成败.因此如何更好地的了解,分析,明确玩家需求,并且能够准确,清晰以文档的形式表达给游戏制作人,保证开发过程按照满足玩家需求为目的正确开发方向进行,是每游戏游戏制作人需要面对的问题。
作为五子棋的设计需要考虑到的最基本的需求莫过于人机对战与人人对战功能的实现,当然还有下棋过程中的下棋悔棋功能以及判断游戏的胜负等方面的要求。
当然最好是要考虑到界面的友好性,作为一个娱乐软件,还应该考虑到玩家在游戏时的舒适性。
2.1.2系统平台需求编程语言:JAVA操作系统:Windows xp系列开发工具:NetBeans2.2总体设计该款游戏主要由以下几个模块组成:2.3功能设计(1)人机对弈模式:选择该模式可以实现人与电脑之间的对弈,电脑会智能的选择该在哪处下子,并会在每次下棋结束后判断是否有哪方已经获胜,如果获胜则结束本局游戏,并提示玩家游戏结束。
(2)人人对弈模式:选择该模式可以实现人与人之间的对弈,系统会提示哪方先下,然后玩家之间交替的下棋,同样系统会在下完每次棋后判断是否有哪方已经获胜,如果获胜则结束本局游戏,并提示玩家游戏结束。
(3)悔棋功能:这个功能也是根据游戏的实际需求而存在的,在现实生活中难免有失误下错了棋,那么就需要悔棋。
此功能提供了悔棋功能,使得下棋的灵活性有所提高。
玩家若想悔棋,则只需选择悔棋按钮便可以重新下过刚才的棋。
(4)更换棋盘背景:次功能可以根据玩家的爱好任意更换棋盘的背景颜色,由于每个人对颜色的喜好不一样,因此这个功能也是非常必需的。
也行更换一种玩家所喜欢的颜色,玩家能发挥得更好。
3. 系统各功能模块设计3.1 界面设计3.2 功能实现实现开始和结束功能实现人人和人机对弈功能实现更换背景颜色4.课程设计总结和体会一个编程语言最强大的地方不是它是容易学,或者难学,而是它拥有一个强大的库。
JAVA 是一个完全面向对象的语言,JAVA的命名规则是很容易让人接受的。
而且容易被编程人员记住。
经过实践训练,对JAVA的综合应用能力有了较大的提高,另外对JAVA的特点有了更深层次的认识。
这次实践中使用的代码虽然不长,但类与类之间也有很强的逻辑关系,这就是面向对象语言的最大优势,这样可使我们更轻松的运用JAVA。
经过努力,查阅相关资料,终于完成该课题,虽然效果不是很好,但亲手做过之后还是很有成就感的。
通过此次课程设计,将我本学期所学的JAVA知识得到巩固和应用,在设计的过程中我遇到了很到问题,不过在崔艳老师和同学们的帮助和自己的思考下还是很好的完成了。
这此课程设计还让我懂得了写程序不能闭门造车,要努力拓宽知识面,开阔视野,拓展思维。
它还让我学会了在网上查阅那些无限的资料。
通过对此课题的开发,使我对用Eclipse开发平台有了一个比较清楚的认识,体会到理论和实践的重要性。
由于自己的分析设计和程序经验不足,该系统设计和实现过程中,还有许多没有完善的地方,比如用户界面设计不够美观,异常出错处理比较差等多方面问题,这些都有待进一步完善和提高。
对于系统中出现的问题敬请老师指导。
5.致谢本文是在崔艳老师的热情关心和指导下完成的,她渊博的知识和严谨的教学作风使我受益匪浅,对顺利完成本课题起到了极大的作用。
在此向她表示我最衷心的感谢!在论文完成的过程中,我还得到了同学的热心帮助,我向他们表示深深的感谢。
参考文献(2)百度文库:/view/8a502377a417866fb84a8e7a.html 《java五子棋毕业设计论文》(3)/learning/lesson/xinxi/20030401/lesson.asp附录1.棋盘模块相关事件或方法程序清单(1)画棋盘网格for(int i=0;i<=width/jiange;i++){g2.draw(new Line2D.Double(X+i*jiange,Y,X+i*jiange,height+Y));g2.draw(new Line2D.Double(X,Y+i*jiange,width+X,Y+i*jiange)); }(2)画中间点的标记g3.setPaint(Color.RED);g3.draw(new Line2D.Double(254,245,254,254));g3.draw(new Line2D.Double(245,254,254,254));g3.draw(new Line2D.Double(267,245,267,254));g3.draw(new Line2D.Double(267,254,275,254));g3.draw(new Line2D.Double(245,266,254,266));g3.draw(new Line2D.Double(254,266,254,275));g3.draw(new Line2D.Double(266,275,266,266));g3.draw(new Line2D.Double(266,266,275,266));(3)画棋子for(int i=1;i<a.length-1;i++){for(int j=1;j<a[i].length-1;j++){Ellipse2D circle=new Ellipse2D.Double();circle.setFrame(j*30-25, i*30-25, 28, 28);if(a[i][j]==1){g2.setPaint(Color.BLACK);g2.fill(circle);}else if(a[i][j]==2){g2.setPaint(Color.WHITE);g2.fill(circle);}}}(4)画棋子上的标记if(n>0&&m>0){g2.setPaint(Color.RED);g2.setStroke(new BasicStroke(1.5f));g2.draw(new Line2D.Double(30*m-16,30*n-16,30*m-4,30*n-4));g2.draw(new Line2D.Double(30*m-16,30*n-4,30*m-4,30*n-16));}}}2.各功能模块相关事件或方法程序清单(1)设置游戏菜单public void addItems(){jm[0]=new JMenu("游戏");jm[1]=new JMenu("选项");jit[0]=new JMenuItem[3];jit[0][0]=new JMenuItem("开局");jit[0][1]=new JMenuItem("重新开始");jit[0][2]=new JMenuItem("结束游戏");jit[1]=new JMenuItem[3];jit[1][0]=new JMenu("对弈模式");mode=new JMenuItem[2];mode[0] = new JMenuItem("人人对弈");mode[1] = new JMenuItem("人机对弈");jit[1][0].add(mode[0]);jit[1][0].add(mode[1]);jit[1][1]=new JMenuItem("悔棋");jit[1][2]=new JMenuItem("背景颜色");for(int i=0;i<jm.length;i++){for(int j=0;j<jit[i].length;j++){jm[i].add(jit[i][j]);}}panel0.add(label);bar.add(jm[0]);bar.add(jm[1]);frame.setJMenuBar(bar);frame.add(panel0,"North");}(2)给菜单项设定事件public void addEventAction(){jit[0][0].addActionListener(new ActionListener(){ //开局public void actionPerformed(ActionEvent e) {row=prow=0;col=pcol=0;isPC=cMode;isBlack = true;isEnd = false;for(int i=0;i<19;i++){for(int j=0;j<19;j++){if(i==0||j==0||i==(qipan.length-1)||j==(qipan.length-1)){qipan[i][j] = -1;}else{qipan[i][j]=0;}}}if(isPC){ //人机对弈模式label.setText("游戏开始,请玩家先下棋!");}else{ //人人对弈模式label.setText("游戏开始,请"+(isBlack?"黑":"白")+"方先下棋!");}printqipan(row,col);addEventHandler();}});jit[0][1].addActionListener(new ActionListener(){ //重新开始public void actionPerformed(ActionEvent e) {row=prow=0;col=pcol=0;isBlack = true;isEnd = false;for(int i=0;i<19;i++){for(int j=0;j<19;j++){if(i==0||j==0||i==(qipan.length-1)||j==(qipan.length-1)){qipan[i][j] = -1;}else{qipan[i][j]=0;}}}if(isPC){ //人机对弈模式label.setText("游戏开始,请玩家先下棋!");}else{ //人人对弈模式label.setText("游戏开始,请"+(isBlack?"黑":"白")+"方先下棋!");}printqipan(row,col);addEventHandler();}});(3)给模式选项添加事件监听mode[0].addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e) {cMode = false;label.setText("已选择人"+(cMode?"机":"人")+"对弈模式,重新开局将生效!");}});mode[1].addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e) {cMode = true;label.setText("已选择人"+(cMode?"机":"人")+"对弈模式,重新开局将生效!");}});jit[0][2].addActionListener(new ActionListener(){ //结束游戏public void actionPerformed(ActionEvent e) {label.setText("游戏结束,请按开局开始游戏!");isEnd=true;}});jit[1][1].addActionListener(new ActionListener(){ //悔棋public void actionPerformed(ActionEvent e) {if(!isPC){huiqi();}else{pchuiqi();}}});jit[1][2].addActionListener(new ActionListener() { //背景颜色public void actionPerformed(ActionEvent e) {Color cc=JColorChooser.showDialog(frame,"棋盘背景颜色",new Color(226,189,0));if(cc!=null){c=cc;panel.setBackground(c);}}});}(4)监听鼠标事件,下棋以及判断本盘是否结束,电脑是白方,玩家是黑方public void addEventHandler(){panel.addMouseListener(new MouseAdapter(){public void mousePressed(MouseEvent e) {if(!isEnd){int x=(e.getX()-5)/30;int y=(e.getY()-5)/30;if(qipan[y+1][x+1]==0){load(x+1,y+1);}else{label.setText("此处已经有棋子,请重新下子!");}}}});}(5)电脑下棋public void pcLoad(){qixing();int count = 0;int hang = 0;int lie = 0;for(int i=0;i<17;i++){for(int j=0;j<17;j++){if(qixingPC[i][j]>count){count = qixingPC[i][j];hang = i+1;lie = j+1;}if(qixingPlayer[i][j]>count){count = qixingPlayer[i][j];hang = i+1;lie = j+1;}}}if(qipan[hang][lie]==0){load(lie,hang);return;}}(6)下棋子public void load(int x,int y){col=x;row=y;if(isBlack){prow=row;pcol=col;qipan[row][col]=1;isBlack = false;}else{qipan[row][col]=2;isBlack = true;}printqipan(row,col);if(panduan(row-1,col-1)){if(isPC){label.setText("本局结束,恭喜"+(isBlack?"电脑":"玩家")+"获胜!");isEnd = true;}else{label.setText("本局结束,恭喜"+(isBlack?"黑":"白")+"方获胜!");isEnd = true;}}else{if(isPC){label.setText((isBlack?"电脑":"玩家")+"在("+row+":"+col+")处下子,"+"现在"+(isBlack?"玩家":"电脑")+"下子!");}else{label.setText((isBlack?"白":"黑")+"方在("+row+":"+col+")处下子,"+"现在"+(isBlack?"黑":"白")+"下子!");}if(!isBlack){if(isPC){pcLoad();}}}}(7)刷新棋盘public void printqipan(int n,int m){panel=new DrawPanel(qipan,n,m);panel.setBackground(c);frame.add(panel,"Center");}(8)人人对弈悔棋public void huiqi(){if(isEnd){label.setText("游戏已经结束不能悔棋,请重新开局!");return;}isBlack=!isBlack;qipan[row][col]=0;printqipan(row,col);label.setText((isBlack?"黑":"白")+"方悔棋,请重新下棋!"); }(9)人机对弈悔棋public void pchuiqi(){if(isEnd){label.setText("游戏已经结束不能悔棋,请重新开局!");return;}qipan[row][col]=0;qipan[prow][pcol]=0;printqipan(row,col);label.setText((isBlack?"玩家":"电脑")+"悔棋,请重新下棋!"); }。