五子棋的新玩法

问题描述

希望能帮我一下。说一下我五子棋的新玩法:就是要开始游戏的时候,可以设置一下黑白双方的棋子数目,当一方的棋子连成五个后,就可以把这五个棋子加到棋子的数目里面,然后同时把对方的棋子数目减去一个,最好判断哪放棋子的数目为0(下到棋盘上棋子数目也会减少)代码:importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics;importjava.awt.Toolkit;importjava.awt.event.MouseEvent;importjava.awt.event.MouseListener;importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.IOException;importjavax.imageio.ImageIO;importjavax.swing.JFrame;importjavax.swing.JOptionPane;classFiveChessFrameextendsJFrameimplementsMouseListener{//取得屏幕的宽度intwidth=Toolkit.getDefaultToolkit().getScreenSize().width;//取得屏幕的高度intheight=Toolkit.getDefaultToolkit().getScreenSize().height;//背景图片BufferedImagebgImage=null;//保存棋子的坐标intx=0;inty=0;//保存之前下过的全部棋子的坐标//其中数据内容0:表示这个点并没有棋子,1:表示这个点是黑子,2:表示这个点是白子int[][]allChess=newint[19][19];//标识当前应该黑棋还是白棋下下一步booleanisBlack=true;//标识当前游戏是否可以继续booleancanPlay=true;//保存显示的提示信息Stringmessage="黑方先行";//保存黑方与白方的剩余棋子//保存最多拥有多少棋子intmaxCount=0;intblackCount=0;intwhiteCount=0;//保存双方剩余棋子的显示信息StringblackMessage="无限制";StringwhiteMessage="无限制";publicFiveChessFrame(){//设置标题this.setTitle("五子棋");//设置窗体大小this.setSize(500,500);//设置窗体出现位置this.setLocation((width-500)/2,(height-500)/2);//将窗体设置为大小不可改变this.setResizable(false);//将窗体的关闭方式设置为默认关闭后程序结束this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//为窗体加入监听器this.addMouseListener(this);//将窗体显示出来this.setVisible(true);//刷新屏幕,防止开始游戏时出现无法显示的情况.this.repaint();try{bgImage=ImageIO.read(newFile("E:/workspace/课程设计/src/image/background.jpg"));}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}publicvoidpaint(Graphicsg){//双缓冲技术防止屏幕闪烁BufferedImagebi=newBufferedImage(500,500,BufferedImage.TYPE_INT_RGB);Graphicsg2=bi.createGraphics();g2.setColor(Color.BLACK);//绘制背景g2.drawImage(bgImage,1,20,this);//this代表整个窗体//输出标题信息g2.setFont(newFont("黑体",Font.BOLD,20));//加粗g2.drawString("游戏信息:"+message,130,60);g2.drawString("黑方棋子:"+blackMessage,30,470);g2.drawString("白方棋子:"+whiteMessage,260,470);//绘制棋盘for(inti=0;i<19;i++){g2.drawLine(10,70+20*i,370,70+20*i);g2.drawLine(10+20*i,70,10+20*i,430);}//标注点位g2.fillOval(68,128,4,4);g2.fillOval(308,128,4,4);g2.fillOval(308,368,4,4);g2.fillOval(68,368,4,4);//四个角的点g2.fillOval(68,248,4,4);g2.fillOval(188,368,4,4);//四个角的中心点g2.fillOval(188,248,4,4);//中心点//绘制全部棋子for(inti=0;i<19;i++){for(intj=0;j<19;j++){if(allChess[i][j]==1){//黑子inttempX=i*20+10;inttempY=j*20+70;//就能够绘制在点上了g2.fillOval(tempX-7,tempY-7,14,14);}if(allChess[i][j]==2){//白子inttempX=i*20+10;inttempY=j*20+70;g2.setColor(Color.WHITE);g2.fillOval(tempX-7,tempY-7,14,14);g2.setColor(Color.BLACK);g2.drawOval(tempX-7,tempY-7,14,14);}}}g.drawImage(bi,0,0,this);}publicvoidmouseClicked(MouseEvente){//TODOAuto-generatedmethodstub}publicvoidmouseEntered(MouseEvente){//TODOAuto-generatedmethodstub}publicvoidmouseExited(MouseEvente){//TODOAuto-generatedmethodstub}publicvoidmousePressed(MouseEvente){//TODOAuto-generatedmethodstubif(canPlay==true){x=e.getX();y=e.getY();//System.out.println("X="+x);//System.out.println("Y="+y);if(x>=10&&x<=370&&y>=70&&y<=430){x=x/20;y=(y-60)/20;//保存棋子if(allChess[x][y]==0){//判断当前要下的是什么颜色的棋子if(isBlack==true){allChess[x][y]=1;isBlack=false;//下完黑子,轮到白子message="轮到白方";}else{allChess[x][y]=2;isBlack=true;//下完白子,轮到黑子message="轮到黑方";}//判断这个棋子是否和其他的棋子连成5连,即判断游戏是否结束booleanwinFlag=this.checkWin();if(winFlag==true){JOptionPane.showMessageDialog(this,"游戏结束,"+(allChess[x][y]==1?"黑方":"白方")+"获胜!");canPlay=false;}}else{JOptionPane.showMessageDialog(this,"当前位置已经有棋子,请重新落子!");}this.repaint();}}//点击开始游戏按钮if(e.getX()>=400&&e.getX()<=470&&e.getY()>=70&&e.getY()<=100){intresult=JOptionPane.showConfirmDialog(this,"是否重新开始游戏?");if(result==0){//现在重新开始游戏//重新开始所要做的操作:1)把棋盘清空,allChess这个数组中全部数据归0.//2)将游戏信息:的显示改回到开始位置//3)将下一步下棋的改为黑方for(inti=0;i<19;i++){for(intj=0;j<19;j++){allChess[i][j]=0;//另一种方式allChess=newint[19][19];}}message="黑方先行";isBlack=true;//下一步改为黑方blackCount=maxCount;whiteCount=maxCount;if(maxCount>0){blackMessage=String.valueOf(maxCount);whiteMessage=String.valueOf(maxCount);}else{blackMessage="无限制";whiteMessage="无限制";}this.canPlay=true;this.repaint();//重新刷新一下图片}}//点击游戏设置按钮if(e.getX()>=400&&e.getX()<=470&&e.getY()>=120&&e.getY()<=150){Stringinput=JOptionPane.showInputDialog("请输入游戏的最大数量棋子数(单位:个),如果输入0,表示没有时间限制:");try{maxCount=Integer.parseInt(input);if(maxCount<0){JOptionPane.showMessageDialog(this,"请输入正确信息,不允许输入负数!");}if(maxCount==0){intresult=JOptionPane.showConfirmDialog(this,"设置完成,是否重新开始游戏?");if(result==0){for(inti=0;i<19;i++){for(intj=0;j<19;j++){allChess[i][j]=0;}}//另一种方式allChess=newint[19][19];message="黑方先行";isBlack=true;blackCount=maxCount;whiteCount=maxCount;blackMessage="无限制";whiteMessage="无限制";this.canPlay=true;this.repaint();}}if(maxCount>0){intresult=JOptionPane.showConfirmDialog(this,"设置完成,是否重新开始游戏?");if(result==0){for(inti=0;i<19;i++){for(intj=0;j<19;j++){allChess[i][j]=0;}}//另一种方式allChess=newint[19][19];message="黑方先行";isBlack=true;blackCount=maxCount;whiteCount=maxCount;blackMessage=String.valueOf(maxCount);whiteMessage=String.valueOf(maxCount);this.canPlay=true;this.repaint();}}}catch(NumberFormatExceptione1){//TODOAuto-generatedcatchblockJOptionPane.showMessageDialog(this,"请正确输入信息!");}}//点击游戏说明按钮if(e.getX()>=400&&e.getX()<=470&&e.getY()>=170&&e.getY()<=200){JOptionPane.showMessageDialog(this,"五子棋游戏,黑白双方轮流下棋,当某一方连到五子时,可以收起连起来的五个棋子,"+"然后用自己的一个棋子代替对方在棋盘上任意的一个棋子,直到一方的棋子数量"+"小于4个,游戏结束。");}//点击认输按钮if(e.getX()>=400&&e.getX()<=470&&e.getY()>=270&&e.getY()<=300){intresult=JOptionPane.showConfirmDialog(this,"是否确认认输?");if(result==0){if(isBlack){JOptionPane.showMessageDialog(this,"黑方已经认输,游戏结束!");}else{JOptionPane.showMessageDialog(this,"白方已经认输,游戏结束!");}canPlay=false;}}//点击关于按钮if(e.getX()>=400&&e.getX()<=470&&e.getY()>=320&&e.getY()<=350){JOptionPane.showMessageDialog(this,"本游戏由森制作,有相关问题可以访问qq:939457252");}//点击退出按钮if(e.getX()>=400&&e.getX()<=470&&e.getY()>=370&&e.getY()<=400){JOptionPane.showMessageDialog(this,"游戏结束");System.exit(0);}}publicvoidmouseReleased(MouseEvente){//TODOAuto-generatedmethodstub}privatebooleancheckWin(){booleanflag=false;//保存共有相同颜色多少棋子相连intcount=1;//判断横向是否有5个棋子相连,特点纵坐标是相同,即allChess[x][y]中y值是相同intcolor=allChess[x][y];//判断横向count=this.checkCount(1,0,color);if(count>=5){flag=true;}else{//判断纵向count=this.checkCount(0,1,color);if(count>=5){flag=true;}else{//判断右上、左下count=this.checkCount(1,-1,color);if(count>=5){flag=true;}else{//判断右下、左上count=this.checkCount(1,1,color);if(count>=5){flag=true;}}}}returnflag;}//判断棋子连接的数量privateintcheckCount(intxChange,intyChange,intcolor){intcount=1;inttempX=xChange;inttempY=yChange;while(x+xChange>=0&&x+xChange<=18&&y+yChange>=0&&y+yChange<=18&&color==allChess[x+xChange][y+yChange]){count++;if(xChange!=0)xChange++;if(yChange!=0){if(yChange>0)yChange++;else{yChange--;}}}xChange=tempX;yChange=tempY;while(x-xChange>=0&&x-xChange<=18&&y-yChange>=0&&y-yChange<=18&&color==allChess[x-xChange][y-yChange]){count++;if(xChange!=0)xChange++;if(yChange!=0){if(yChange>0)yChange++;else{yChange--;}}}returncount;}}publicclassTest{publicstaticvoidmain(String[]args){FiveChessFrameff=newFiveChessFrame();}}当然还有一张背景图片

解决方案

解决方案二:
就是要开始游戏的时候,可以设置一下黑白双方的棋子数目,当一方的棋子连成五个后,就可以把这五个棋子加到棋子的数目里面,然后同时把对方的棋子数目减去一个,最好判断哪放棋子的数目为0(下到棋盘上棋子数目也会减少)这个描述得很让人看不懂,可否举个例子。还有不懂楼主是算法的问题,还是实现中遇到了什么问题。
解决方案三:
该回复于2011-01-10 09:02:27被版主删除

时间: 2024-07-29 12:53:56

五子棋的新玩法的相关文章

java设计新玩法的五子棋(主要的问题是如何把放在棋盘上的五个棋子收起来)

问题描述 就是当五个棋子摆好了,不直接判断胜利,而是要把五个棋子给收起来,棋盘上的棋子是用数组定义的,如果你不清楚的话,我有写了代码,告诉我你的邮箱,我发给你,希望你能帮我完善一下.qq:939457252. 解决方案 解决方案二:该回复于2011-01-05 14:30:20被版主删除解决方案三:给棋盘写一个显示棋子,不显示棋子的方法.判断连成5个了就让它们不显示解决方案四:发我邮箱:yougang1003@163.com解决方案五:直接在某子下完后,去检查它的-|/是否有5个连子.解决方案六

百度搜索有什么新玩法?

  你造吗?新版百度不光是搜索那么简单,还有更多个性化体验哦,搜索旋转跳跃闪烁抖动效果好酷炫!小编在这里为大家分享百度搜索新玩法. 百度搜索新玩法 搜索旋转跳跃闪烁抖动效果好酷炫 不信你试试,小编都试了个遍,有趣咧. 温馨提示:用电脑网页版哦,手机百度不行的.

运动的云上新玩法:咕咚LBS场景实践

摘要:10月13日2016杭州云栖大会拉开帷幕,位置服务专场的CEO申波带来了"咕咚:位置服务,数据如何让运动更好玩有趣"的重要演讲.本次分享从咕咚的进化开始谈起,进而讲到社区+工具的运动核心点,重点介绍了LBS场景下精准的运动轨迹.社交以及O2O,最后分享了咕咚的线上新玩法.一起来欣赏吧--   以下内容根据演讲PPT及现场分享整理:  本文从咕咚的进化开始谈起,进而讲到社区+工具的运动核心点,重点介绍了LBS场景下精准的运动轨迹.社交以及O2O,最后分享了咕咚的线上新玩法. 以下为

人脸识别向保险业的渗透,未来保险会有哪些新玩法?

人工智能时代,对保险行业充满着机遇.2016年,我国保险行业保费收入达3万亿元,快速跃居世界第二.伴随行业的快速发展和保险受众群体的日益扩大,社会各方对保险产品和服务质量.效率等都有新的期待. 根据调查显示,国内保险客户反馈对险企的改进期待之中,排名前三位的是:更个性化的服务.更安全的隐私保护以及更简单便捷的操作流程. 这一结果并不令人感到意外,要知道,保险行业在投保.理赔.运营三个核心环节仍存在很多痛点,如今的APP几乎能完成大部分流程操作,即便在一定程度上减少了人工审核工作, 但是智能科技的

Youni引爆社交支付最潮新玩法 土豪打赏 点赞福音

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   硅谷网讯 随着手机移动网络 社交APP市场的日趋火爆,盛大Youni(有你)以创新.差异化.独到的定位逐渐脱颖而出,在日前 刚刚开幕的第六届新媒体节,荣获年度中国APP热门应用TOP10,成为备受业界瞩目的一匹黑马. 其中,盛大Youni(有你)最受瞩目的是它的社交支付功能,Youni用户可以与手机通讯录中的联系人随时随地发送消息,甚至发钱收钱."Yo

众信金融618周年庆 移动金融营销新玩法

本文讲的是众信金融618周年庆 移动金融营销新玩法,在当前"互联网+"的背景下,P2P作为新兴理财模式正逐渐成为一种趋势,获得了广泛的关注.随着P2P行业的迅猛发展,加剧了平台对网络营销的竞争.各大平台通过促销福利活动来抢占市场份额,花样百出,如最近的e人e贷的周年庆活动,用户关注官方微信可刮取红包;投哪网三周年庆典,用户通过抽奖获积分,赢取iPhone6等.近日,国资系P2P众信金融也推出了周年庆活动,以用户参与"大黑牛追范冰棒"趣味答题的游戏方式领取加息券,该活

360院线新玩法,电影在线放映“零窗口期”

去年12月光线传媒宣布与360成立视频网站后,业内外便给予了这家视频网站较高的关注度.沉默了一段时间的360院线近日正式上线,并亮出自己的新玩法:电影在线放映"零窗口期". 以往,制片方出于对票房的保护,影片通常要在影院下线一段时间以后才可以在网络上供在线用户点播,这段时间也被称为窗口期.而如今,正在360网络院线上映影片<冲上云霄>则首次尝试零窗口期,在电影尚未完全下线的情况下便登陆网络播放平台. 对于视频网站而言,此举有助于其在短时间内抢占市场份额:对于行业而言,随着零

DDoS攻击新玩法 暴雪上演营销新方式

本文讲的是 :  DDoS攻击新玩法 暴雪上演营销新方式  ,  [IT168 评论]格林尼治时间8月23日,暴雪宣布遭受大规模DDoS攻击,袭击目标为公司的游戏服务器,暴雪公司旗下的守望先锋,炉石传说,魔兽世界等热门网络游戏均受到了影响.有消息称此次攻击致使其在欧盟和美国地区的网络瘫痪,用户无法通过服务器进行验证登录和正常游戏. 本次DDoS攻击事件距离8月2日的DDoS攻击事件仅仅不到一个月的事件,一个月内连续遭受两次DDoS攻击,着实打脸.但奇怪的是本次DDoS攻击事件发生后并没有任何组织

老司机带你体验SYS库多种新玩法

如何更加愉快地利用sys库做一些监控? 快来,跟上老司机,体验sys库的多种新玩法~ MySQL5.7的新特性中,非常突出的特性之一就是sys库,不仅可以通过sys库完成MySQL信息的收集,还可以用来监控和排查问题. 但你知道吗,sys库其实还有很多种玩法,有的或许单看表名就知道了,但有一些,还是需要老司机带路哦~ 一.用户.连接类 1.查看每个客户端IP过来的连接消耗资源情况. 2.查看每个用户消耗资源情况 3.查看当前连接情况(有多少连接就应该有多少行) 4.查看当前正在执行的SQL和执行