安徽三联学院 计算机工程学院
课 程 设 计 报 告
课 程 名 JAVA课程设计 设计题目 围棋小游戏 班 级 12级计科一班 专 业 计算机科学与技术 姓 名 黄琦 徐晓龙 方南启 指导教师 余久久 2015年11月制
成绩 :
设计任务 围棋小游戏 完成任务的思路、方法与算法 在页面上通过单纯的JCreator实现的下棋程序,能够实现提子,打劫等简单的下棋功能。更好的掌握java编程以及布局和设计。通过课程设计把课堂上讲的内容融会贯通,学会设计程序、开发应用软件、开发系统软件等各项工作。通过实习掌握语言的语法结构,理解类和对象的概念,准确的使用各种数据类型, 面向对象中的继承和多态的概念要理解、会使用,在程序中提高代码的重用性,使设计的程序结构清晰、易于维护。 算法: login = new JDialog(); login.setTitle(\"登录\"); //设置标题 login.setLayout(new FlowLayout()); //利用流布局来设置窗口的布局 login.add(new JLabel(\"用户名:\")); //添加标签为用户名的对象 final JTextField name = new JTextField(10); //设置文本框中字符不得超过10个 login.add(name); login.add(new JLabel(\"密 码:\")); final JPasswordField password = new JPasswordField(10); //设置密码框中字符不得多于10个 password.setEchoChar('*'); //设置显示密码对应的字符为* 程序框图
1
核心程序(对主要的语句要加注释) System.exit(0); } void checkbox2_mouseClicked(MouseEvent e) { this.enableLink(); } void checkbox1_mouseClicked(MouseEvent e) { this.disableLink(); } void button1_actionPerformed(ActionEvent e) { this.goToLink(this.textField1.getText().trim(),this.PORT); } //主动连接serverSocket void goToLink(String hostName,int port) { try { this.stopFlag=true; this.sendSocket=new Socket(hostName,port); this.panelGo.showError(\"连接成功!!\"); this.choice1.setEnabled(true); this.button1.setEnabled(false); this.checkbox1.setEnabled(false); this.checkbox2.setEnabled(false); this.textField1.setEnabled(false); this.writer=new PrintWriter(this.sendSocket.getOutputStream(),true); new Listen(sendSocket,this).start(); } catch(IOException ioe){ this.panelGo.showError(\"意外中断\"); } }
2
//开始时根据颜色画己方颜色 void paintMyColor() { Graphics g=this.label2.getGraphics(); if(this.choice1.getSelectedItem().equals(\"黑\")) g.fillOval(20,10,30,30); else { g.setColor(Color.white); g.fillOval(20,10,30,30); g.setColor(Color.black); g.drawOval(20,10,30,30); } } //单机版画每步颜色 void paintThisColor(boolean whatColor) { Graphics g=this.label2.getGraphics(); if(whatColor) g.fillOval(20,10,30,30); else { g.setColor(Color.white); g.fillOval(20,10,30,30); g.setColor(Color.black); g.drawOval(20,10,30,30); } } } /***********************Go*************************************/ import java.awt.*; import java.util.*;//引入包 public class Go extends Panel { int whichStep;
3
Hashtable myHash; Point pointNow; //当前的点 Point STARTPOINT; //起始点 int INTERVAL; //等高距 Vector vec; //定义矢量 Point robPoint; //打劫点 Point mousePoint; //鼠标点 boolean errorFlag; //行棋错误标志 //构建器 public Go() { super(); //super函数,方便子类调用父类里面的成员变量与构造方法 pointNow=new Point(1000,1000); //把初始红点画在外面 errorFlag=false; //行棋错误标志 whichStep=0; STARTPOINT=new Point(20,20); //新的点所在的位置 INTERVAL=20; //棋盘的间隔 myHash=new Hashtable(); //创建对象 robPoint=null; //打劫点 mousePoint=new Point(); //开辟鼠标点内存 vec=new Vector(); //存放校验的子 this.initMyHash(STARTPOINT,INTERVAL); try { jbInit(); } catch(Exception e) { e.printStackTrace(); } //异常处理 } //初始化hashtable void initMyHash(Point startPoint,int interval) { One one; Point key; //逻辑点标志 int i,j; //定义i,j for(i=1;i<=19;i++)
4
for(j=1;j<=19;j++) //循环 { key=new Point(i,j); one=new One(); //创建对象 one.posX=startPoint.x+(i-1)*interval;//相邻点处理,获取 one.posY=startPoint.y+(j-1)*interval;//相邻点处理。获取//获取相邻点 one.pointAround[0]=new Point(i,j-1); //上 one.pointAround[1]=new Point(i,j+1); //下 one.pointAround[2]=new Point(i-1,j); //左 one.pointAround[3]=new Point(i+1,j); //右 if(i==1)one.pointAround[2]=one.OUT; if(i==19)one.pointAround[3]=one.OUT; ////左右的的周周围 围 if(j==1)one.pointAround[0]=one.OUT; //上的周围 if(j==19)one.pointAround[1]=one.OUT; //下的周围 myHash.put(key,one); //我的我的哈希表并且在里键入关键字 } } //更新盘面 public void paint(Graphics g) { Point startPoint=STARTPOINT; //创建对象,开始点 int interval=INTERVAL; //定义成员变量 this.paintChessboard(g,startPoint,interval); //棋盘的操作 this.paintChessman(g,startPoint,interval); //棋子的操作 } //画棋盘 void paintChessboard(Graphics g,Point startPoint,int interval) { int pX=startPoint.x; //定义相邻点X int pY=startPoint.y; //相邻点Y int LINELENGTH=interval*18; //定义路线长度 int i; for(i=0;i<19;i++) { g.drawLine(pX+i*interval,pY,pX+i*interval,pY+LINELENGTH); g.drawLine(pX,pY+i*interval,pX+LINELENGTH,pY+i*interval); }//for循环,以便构造19*19的棋盘
5
g.fillOval(pX+interval*3-3,pY+interval*3-3,(int)(interval-14),(int)(interval-14)); g.fillOval(pX+interval*9-3,pY+interval*3-3,(int)(interval-14),(int)(interval-14)); g.fillOval(pX+interval*15-3,pY+interval*3-3,(int)(interval-14),(int)(interval-14)); g.fillOval(pX+interval*3-3,pY+interval*9-3,(int)(interval-14),(int)(interval-14)); g.fillOval(pX+interval*9-3,pY+interval*9-3,(int)(interval-14),(int)(interval-14)); g.fillOval(pX+interval*15-3,pY+interval*9-3,(int)(interval-14),(int)(interval-14)); g.fillOval(pX+interval*3-3,pY+interval*15-3,(int)(interval-14),(int)(interval-14)); g.fillOval(pX+interval*9-3,pY+interval*15-3,(int)(interval-14),(int)(interval-14)); g.fillOval(pX+interval*15-3,pY+interval*15-3,(int)(interval-14),(int)(interval-14)); //路线长度和间隔的确定 g.drawRect(pX-3,pY-3,366,366);//棋盘大小 } //加棋子 void paintChessman(Graphics g,Point startPoint,int interval) {//加入棋子,并且是按照一黑一白 int pX=startPoint.x; //相邻点X int pY=startPoint.y; //相邻点Y Enumeration enun=myHash.elements(); //创建对象 while(enun.hasMoreElements()) { One one=(One)enun.nextElement(); if(one.color!=one.BLANK) { if(one.color==one.BLACK) g.setColor(Color.black); else if(one.color==one.WHITE) g.setColor(Color.white); else break; //如果盘里加满了棋子,则跳出循环
6
g.fillOval(one.posX-8,one.posY-8,interval-4,interval-4); //路线长度 g.setColor(Color.black); //画椭圆 } } g.setColor(Color.red); //路线间隔 } //处理每一步 void doStep(Point whatPoint,int whatColor) { //如果点在盘外,返回 if(whatPoint.x<1||whatPoint.x>19||whatPoint.y<1||whatPoint.y>19) { this.showError(\"不能下在此处\"); this.errorFlag=true; //在棋盘外,出错 return; } //如果点上有子,则返回 if(((One)myHash.get(whatPoint)).color!=0) { this.showError(\"此处已有子\"); this.errorFlag=true; //此点已经有棋子了,不能下 return; } //如果已经开劫了,则应先应劫,否则返回 if(this.isRob(whatPoint)) { this.showError(\"已经开劫,请先应劫\"); this.errorFlag=true; return; } this.updateHash(whatPoint,whatColor); //我的棋子所在的地方 this.getRival(whatPoint,whatColor); //对手的棋子所在的地方
7
//获取颜色 g.drawOval(one.posX-8,one.posY-8,interval-4,interval-4); //画红点 g.fillOval(this.pointNow.x*20-5,this.pointNow.y*20-5,10,10);
//如果没有气也没有己类 if(!this.isLink(whatPoint,whatColor)&&!this.isLink(whatPoint,0)) //0相当于one.BLANK { this.showError(\"此处不可放子\"); this.errorFlag=true; this.singleRemove(whatPoint); //棋子所在的地方 return;//返回 } this.pointNow.x=whatPoint.x; this.pointNow.y=whatPoint.y; //得到当前红点 this.repaint(); //返回到当前的点 } 8
解题结果: 结果的分析: 游戏正常运行。 老师评语: 该生有效完成课程设计,能较好完成设计围棋小游戏工作;按功能模块结构设计菜单,布置各明细模块工作界面,编写各个模块的程序代码,进行编译连接运行,经过反复调试修改,达到系统功能要求;成绩良好。 老师签名 年 月 日 注:成绩分为优、良、中、及格、不及格五级
9