围棋对弈界面课程设计_第1页
围棋对弈界面课程设计_第2页
围棋对弈界面课程设计_第3页
围棋对弈界面课程设计_第4页
围棋对弈界面课程设计_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 chess(cx-sx)/w(cy-sy)/w=2;g.fillOval(cx-w/2+1,cy-w/2,w-2,w-2);player=(player+1)%2;/黑白方轮流下棋g.setXORMode(chessBoard.this.getBackground();g.setColor(Color.red);/用异或方式绘制小游标g.fillRect(cx-w/4,cy-w/2,w/2,w/2);该处代码块处理鼠标单击事件,解决当前游标位置下一颗棋子的显示和记录问题。通过getGraphics()方法获取画笔进行图形绘制,其好处是避免画面闪烁。publicvoidpaint(Graphi

2、csg)/绘制棋盘for(intk=0;k19;k+)g.drawLine(sx,sy+k*w,sx+w*18,sy+k*w);for(intk=0;k19;k+)g.drawLine(sx+k*w,sy,sx+k*w,sy+w*18);for(inti=0;ichess.length;i+)for(intj=0;jchess0.length;j+)if(chessij=1)g.setColor(Color.black);g.fillOval(sx+i*w-w/2+1,sx+j*w-w/2+1,w-2,w-2);elseif(chessij=2)g.setColor(Color.white);

3、g.fillOval(sx+i*w-w/2+1,sx+j*w-w/2+1,w-2,w-2);g.setXORMode(this.getBackground();g.setColor(Color.red);g.fillRect(cx-w/4,cy-w/4,w/2,w/2);此处的代码用来绘制棋盘以及棋盘上所有棋子(3)界面情况不同颜色的界面实际中的围棋对战情况对战时间更改棋盘颜色晦棋认输2016-6-2:9anlv退出游我棋盘上各个部件以及它们的效果(4)运行调试与讨论分析编译整个程序的采用的是分块编写的方法,在保证每个小部分代码块运行正常的同时还要考虑到整个程序的协调性,首先用到的问题是对包的

4、引用这个关系到整个后续的细节部分能否可以实现。定义chessGame的时候要考虑到它的各个按钮的布局采用网格布局这样效果出来后更美观整洁。其中actionListener和actionPerformed对应功能的适应都是难点。由于对鼠标事件的设置还掌握的不全面导致在设置鼠标移动以及小游标的时候参考了好多资料才得以实现相应的功能。在我自身调试下围棋程序的同时总共遇到三个问题:设置的“改变棋盘颜色”的按钮无法改变棋盘的颜色反而是改变鼠标小游码的颜色。解决方法:无法通过按钮改变棋盘的颜色,那么就从棋盘背景定义的颜色做文章Colorc=newColor(int)(Math.random()*255),

5、(int)(Math.random()*255),(int)(Math.random()*255);setBackground(c);通过定义随机颜色c然后设置棋盘的背景颜色为c那么每次重新打开游戏的时候棋盘的颜色都会改变。无法在文本域中插入计时器,究其原因是对java.util中的thread类的掌握不牢解决方法:改在文本域中插入进入游戏时的时间点这样就会对游戏时间有一个把握度,实现这个功能需要引进java.util包中的Calender类由于它是抽象方法无法实例化所以通过CalendarrightNow=Calendar.getInstance();Stringmydate=rightNo

6、w.get(Calendar.YEAR)+-+(rightNow.get(Calendar.MONTH)+1)+-+rightNow.get(Calendar.DATE)+n+rightNow.get(Calendar.HOUR)+”时+rightNow.get(Calendar.MINUTE)+分+rightNow.get(Calendar.SECOND)+秒;TextAreat1=newTextArea(mydate,2,1);可以实现在文本框中插入进入游戏时间的信息实现游戏退出以及菜单栏中的“x”关闭窗口解决方法:if(e.getActionCommand().equals(退出游戏)d

7、ispose。;该码通过按钮实现退出游戏classcloseWinextendsWindowAdapterpublicvoidwindowClosing(WindowEvente)Windoww=e.getWindow();w.dispose();而此部分则通过窗口菜单实现关闭游戏的功能总结:计算机编程语言有多种多样,每一门都有自己独特的特点。而java是面向对象编程的语言,该语言的学习不在于死记硬背而在于理解与灵活应用。而学习的关键在于平时对基础知识的掌握与基本方法的掌握以及平时多加练习熟练程度也是编程能否准确有效的关建因素,在做课设的过程中让人又气又有兴趣的是发现错误解决错误的过程,在犯错

8、中不断弥补自己的不足。此次课设让我熟练掌握了图形用户界面的编辑,颜色的调配,时间的插入以及方法的调用定义以及各种类的重新理解,可以说此次收获很大,更激发我深入学习的兴趣,在以后的日子里我要学习更多的相关知识以便达到学以致用。参考文献丁振凡.Java语言程序设计(第2版)清华大学出版社,20082丁振凡.利用Java在主页上学习.电脑学习,2016附录围棋对弈界面程序源代码:importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjava.util.*;publicclasschessGameextendsFrameim

9、plementsActionListenerColorc=newColor(int)(Math.random()*255),(int)(Math.random()*255),(int)(Math.random()*255);publicchessGame()super(“围棋);chessBoardb=newchessBoard();setBackground(c);setLayout(newBorderLayout();add(Center,b);CalendarrightNow=Calendar.getInstance();Stringmydate=rightNow.get(Calenda

10、r.YEAR)+-+(rightNow.get(Calendar.MONTH)+1)+-+rightNow.get(Calendar.DATE)+n+rightNow.get(Calendar.HOUR)+时+rightNow.get(Calendar.MINUTE)+分+rightNow.get(Calendar.SECOND)+秒;/设置一个时间字符串Panelp=newPanel();Labela1=newLabel(对战时间”);Buttoncolor=newButton(”更改棋盘颜色);Buttonfail=newButton(认输);Buttonback=newButton(”悔

11、棋);Buttonquit=newButton(“退出游戏“);TextAreat1=newTextArea(mydate,2,1);p.setLayout(newGridLayout(8,1,10,10);p.add(newLabel();/为界面美观插入一个空标签p.add(color);p.add(back);p.add(a1);p.add(t1);p.add(fail);p.add(quit);add(East,p);fail.addActionListener(this);color.addActionListener(this);quit.addActionListener(thi

12、s);addWindowListener(newcloseWin();setSize(500,450);setVisible(true);publicvoidactionPerformed(ActionEvente)Colorc=newColor(int)(Math.random()*255),(int)(Math.random()*255),(int)(Math.random()*255);setBackground(c);if(e.getActionCommand().equals(退出游戏)dispose();if(e.getActionCommand().equals(认)JOptio

13、nPane.showMessageDialog(null,你输了);publicstaticvoidmain(Stringargs)newchessGame();classcloseWinextendsWindowAdapterpublicvoidwindowClosing(WindowEvente)Windoww=e.getWindow();w.dispose();/定义完了窗体构造classchessBoardextendsCanvasintchess=newint1919;intsx=20,sy=20;/存放棋盘子的状态intw=20;/棋盘左上角的位置intcx=50;/棋盘每个格子的

14、宽度intcy=50;/下棋位置游标的初值,对应鼠标移动位置intplayer=1;/1表示轮下黑子,0表示轮下白子publicchessBoard()this.addMouseMotionListener(newMouseMotionAdapter()publicvoidmouseMoved(MouseEvente)Graphicsg=getGraphics();g.setXORMode(chessBoard.this.getBackground();g.setColor(Color.red);g.fillRect(cx-w/4,cy-w/4,w/2,w/2);cx=sx+(int)(e.g

15、etX()/w)*w;cy=sy+(int)(e.getY()/w)*w;g.fillRect(cx-w/4,cy-w/4,w/2,w/2););this.addMouseListener(newMouseAdapter()publicvoidmouseClicked(MouseEvente)/鼠标单击表示下子Graphicsg=getGraphics();if(chess(cx-sx)/w(cy-sy)/w=0)/判断是否已有棋子if(player=1)g.setColor(Color.black);/黑棋chess(cx-sx)/w(cy-sy)/w=1;elseg.setColor(Co

16、lor.white);/白棋chess(cx-sx)/w(cy-sy)/w=2;g.fillOval(cx-w/2+1,cy-w/2,w-2,w-2);player=(player+1)%2;/黑白方轮流下棋g.setXORMode(chessBoard.this.getBackground();g.setColor(Color.red);/用异或方式绘制小游标g.fillRect(cx-w/4,cy-w/2,w/2,w/2););publicvoidpaint(Graphicsg)/绘制棋盘for(intk=0;k19;k+)g.drawLine(sx,sy+k*w,sx+w*18,sy+k*w);for(intk=0;k19;k+)g.drawLine(sx+k*w,sy,sx+k*w,sy+w*18);for(inti=0;ichess.length;i+)for(intj=0;jchess0.length;j+)if

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论