五子棋(人机对战版).wps

上传人:qwe****56 文档编号:70000555 上传时间:2023-01-14 格式:WPS 页数:31 大小:139KB
返回 下载 相关 举报
五子棋(人机对战版).wps_第1页
第1页 / 共31页
五子棋(人机对战版).wps_第2页
第2页 / 共31页
点击查看更多>>
资源描述

《五子棋(人机对战版).wps》由会员分享,可在线阅读,更多相关《五子棋(人机对战版).wps(31页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、/*注意:虽然是人机对战版,但是电脑智能程度不是特别高,是在我的原来的单机双人对战的基础上改写的,函数的名称以及可重用的函数都没有整理程序很粗糙,仅供参考*/import java.awt.Checkbox;import java.awt.CheckboxGroup;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemE

2、vent;import java.awt.event.ItemListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import javax.swing.JButton;import javax.swing.JCheckBox;import javax.swing.JFrame;import javax.swing.JPanel;public class FiveChese extends JFrame CheseGame CG;FiveChese()this.CG=new CheseGame

3、();addMouseListener(CG);add(CG);public static void main(String args)int b;FiveChese fivechese=new FiveChese();fivechese.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);fivechese.setSize(900,700);fivechese.setTitle(五子棋);fivechese.setVisible(true);fivechese.setResizable(true);class CheseGame extends JP

4、anel implements MouseListener,ItemListener int number=0;int map=new int2020;Color color=Color.BLACK,Color.WHITE,Color.LIGHT_GRAY;Color c;/棋子坐标 int x=-1;int y=-1;int nc1=1;int nc2=1;/判定是白棋还是黑棋 /判定胜负 int winner=3;/连子数 int score=1;JButton btn1=new JButton(Start);/游戏开始 JButton btn2=new JButton(again);/游

5、戏重置 /确定白棋先还是黑棋先 CheckboxGroup cbg=new CheckboxGroup();Checkbox chb1=new Checkbox(Black First,cbg,true);Checkbox chb2=new Checkbox(White First,cbg,false);Override public void itemStateChanged(ItemEvent ie)if(chb1.getState()c=Color.BLACK;else c=Color.WHITE;class GameStart implements ActionListener pub

6、lic void actionPerformed(ActionEvent ae)if(ae.getSource()=btn1)/str.equals(Start)start();repaint();if(chb1.getState()c=Color.BLACK;else c=Color.WHITE;btn1.setEnabled(false);btn2.setEnabled(true);chb1.setEnabled(false);chb2.setEnabled(false);if(ae.getSource()=btn2)start();repaint();winner=3;btn2.setE

7、nabled(false);btn1.setEnabled(true);chb1.setEnabled(true);chb2.setEnabled(true);CheseGame()this.setLayout(null);chb1.setBounds(650,50,100,30);chb2.setBounds(650,100,100,30);chb1.addItemListener(this);chb2.addItemListener(this);btn1.setBounds(650,150,100,30);btn1.addActionListener(new GameStart();btn

8、2.setBounds(650,200,100,30);btn2.addActionListener(new GameStart();btn2.setEnabled(false);this.add(btn1);this.add(btn2);this.add(chb1);this.add(chb2);void start()for(int i=0;i 20;i+)for(int j=0;j 20;j+)mapij=0;winner=0;score=1;number=0;int win1(int x,int y)/横向 int score=1;nc1=nc2=1;for(int i=x;i x-4

9、;)/横向 x-if(i=0)break;if(mapiy!=map-iy)break;score+;nc2+;return score;int win2(int x,int y)/纵向 int score=1;nc1=nc2=1;for(int j=y;j y-4;)/纵向 y-if(j=0)break;if(mapxj!=mapx-j)break;score+;nc2+;return score;int win3(int x,int y)/正斜向 int score=1;nc1=nc2=1;for(int i=x;i x+4;)/斜向 x+、y+for(int j=y;j x-4;)/斜向

10、 x-、y-for(int j=y;j y-4;)if(i=0|j=0)i=x-4;break;if(mapij!=map-i-j)i=x-4;break;score+;nc2+;return score;int win4(int x,int y)/反斜向 int score=1;nc1=nc2=1;for(int i=x;i x-4;)/斜向 x-、y+for(int j=y;j y+4;)if(i=0|j=19)i=x-4;break;if(mapij!=map-i+j)i=x-4;break;score+;nc1+;for(int i=x;i y-4;)if(i=19|j=0)i=x+4

11、;break;if(mapij!=map+i-j)i=x+4;break;score+;nc2+;return score;Boolean win(int x,int y)if(win1(x,y)=5)return true;else score=1;if(win2(x,y)=5)return true;else score=1;if(win3(x,y)=5)return true;else score=1;if(win4(x,y)=5)return true;else score=1;return false;public void paintComponent(Graphics g)sup

12、er.paintComponent(g);setBackground(color2);/画棋盘 for(int i=1;i=20;i+)g.setColor(color0);g.drawLine(30,i*30,600,i*30);g.drawLine(i*30,30,i*30,600);/画棋子 for(int i=0;i 20;i+)for(int j=0;j 1)if(down1()mapxy=2;else if(du_1()/堵 mapxy=2;else if(down2()mapxy=2;else if(du_2()mapxy=2;else if(down3()mapxy=2;els

13、e down4();mapxy=2;else if(number=1)if(x+1=0)map-xy=2;else if(y+1=0)mapx-y=2;else if(x+1=19&y+1=19)map+x+y=2;else if(x+1=0)map+x-y=2;else if(x-1=0&y+1=0&y-1=0)map-x-y=2;repaint();Boolean down4()for(int i=0;i=19;i+)for(int j=0;j=0)&mapi-1j!=1&(i+nc1+3)=0)&mapi+1j!=1&(i-nc2-3)=0&mapi-nc2j=0&mapi-nc2-1j

14、!=1&mapi-nc2-2j!=1&mapi-nc2-3j!=1)x=i-nc2;y=j;nc1=nc2=1;return true;else nc1=nc2=1;if(win2(i,j)=1)if(j-1=0)&mapij-1!=1&(j+nc1+3)=0)&mapij+1!=1&(j-nc2-3)=0&mapij-nc2=0&mapij-nc2-1!=10&mapij-nc2-2!=1&mapij-nc2-3!=1)x=i;y=j-nc2;nc1=nc2=1;return true;else nc1=nc2=1;if(win3(i,j)=1)if(i-1=0)&(j-1=0)&mapi-

15、1j-1!=1&(i+nc1+3)=19&(j+nc1+3)=19&mapi+nc1j+nc1=0&mapi+nc1+1j+nc1+1!=1&mapi+nc1+2j+nc1+2!=1&mapi+nc1+3j+nc1+3!=1)x=i+nc1;y=j+nc1;nc1=nc2=1;return true;else if(i+1=19)&(j+1=0&(j-nc2-3)=0&mapi-nc2j-nc2=0&mapi-nc2-1j-nc2-1!=1&mapi-nc2-2j-nc2-2!=1&mapi-nc2-3j-nc2-3!=1)x=i-nc2;y=j-nc2;nc1=nc2=1;return tr

16、ue;else nc1=nc2=1;if(win4(i,j)=1)if(i+1=0)&mapi+1j-1!=1&(i-nc1-3)=0&(j+nc1+3)=0)&(j+1=19&(j-nc2-3)=0&mapi+nc2j-nc2=0&mapi+nc2+1j-nc2-1!=1&mapi+nc2+2j-nc2-2!=1&mapi+nc2+3j-nc2-3!=1)x=i+nc2;y=j-nc2;nc1=nc2=1;return true;else nc1=nc2=1;return false;Boolean down3()/判断已有两子 for(int i=0;i=19;i+)for(int j=0

17、;j=19;j+)if(mapij=2)if(win1(i,j)=2)if(i+nc1+2)=0&mapi-nc2j=0&mapi-nc2-1j!=1&mapi-nc2-2j!=1)x=i-nc2;y=j;nc1=nc2=1;return true;else nc1=nc2=1;if(win2(i,j)=2)if(j+nc1+2)=0&mapij-nc2=0&mapij-nc2-1!=1&mapij-nc2-2!=1)x=i;y=j-nc2;nc1=nc2=1;return true;else nc1=nc2=1;if(win3(i,j)=2)if(i+nc1+2)=19&(j+nc1+2)=

18、0&(j-nc2-2)=0&mapi-nc2j-nc2=0&mapi-nc2-1j-nc2-1!=1&mapi-nc2-2j-nc2-2!=1)x=i-nc2;y=j-nc2;nc1=nc2=1;return true;else nc1=nc2=1;if(win4(i,j)=2)if(i-nc1-2)=0&(j+nc1+2)=19&(j-nc2-2)=0&mapi+nc2j-nc2=0&mapi+nc2+1j-nc2-1!=1&mapi+nc2+2j-nc2-2!=1)x=i+nc2;y=j-nc2;nc1=nc2=1;return true;else nc1=nc2=1;return fal

19、se;Boolean down1()/判断已有四子 for(int i=0;i=19;i+)for(int j=0;j=19;j+)if(mapij=2)if(win1(i,j)=4)if(i+nc1)=0&mapi-nc2j=0)x=i-nc2;y=j;nc1=nc2=1;return true;else nc1=nc2=1;if(win2(i,j)=4)if(j+nc1)=0&mapij-nc2=0)x=i;y=j-nc2;nc1=nc2=1;return true;else nc1=nc2=1;if(win3(i,j)=4)if(i+nc1)=19&(j+nc1)=0&(j-nc2)=0

20、&mapi-nc2j-nc2=0)x=i-nc2;y=j-nc2;nc1=nc2=1;return true;else nc1=nc2=1;if(win4(i,j)=4)if(i-nc1)=0&(j+nc1)=19&(j-nc2)=0&mapi+nc2j-nc2=0)x=i+nc2;y=j-nc2;nc1=nc2=1;return true;else nc1=nc2=1;return false;Boolean down2()/判断已有三子 for(int i=0;i=19;i+)for(int j=0;j=19;j+)if(mapij=2)if(win1(i,j)=3)if(i+nc1+1)

21、=0&mapi-nc2j=0&mapi-nc2-1j=0)x=i-nc2;y=j;nc1=nc2=1;return true;else nc1=nc2=1;if(win2(i,j)=3)if(j+nc1+1)=0&mapij-nc2=0&mapij-nc2-1=0)x=i;y=j-nc2;nc1=nc2=1;return true;else nc1=nc2=1;if(win3(i,j)=3)if(i+nc1+1)=19&(j+nc1+1)=0&(j-nc2-1)=0&mapi-nc2j-nc2=0&mapi-nc2-1j-nc2-1=0)x=i-nc2;y=j-nc2;nc1=nc2=1;re

22、turn true;else nc1=nc2=1;if(win4(i,j)=3)if(i-nc1-1)=0&(j+nc1+1)=19&(j-nc2-1)=0&mapi+nc2j-nc2=0&mapi+nc2+1j-nc2-1=0)x=i+nc2;y=j-nc2;nc1=nc2=1;return true;else nc1=nc2=1;return false;Boolean du1()if(win1(x,y)=4)/横向 4 for(int i=x;i x-4;)/横向 x1-if(i=0)break;if(mapiy!=map-iy&mapiy=0)x=i;return true;retur

23、n false;Boolean du2()if(win2(x,y)=4)/纵向 4 for(int j=y;j y-4;)/纵向 y-if(j=0)break;if(mapxj!=mapx-j&mapxj=0)y=j;return true;return false;Boolean du3()if(win3(x,y)=4)/正斜向 4 for(int i=x;i x+4;)/斜向 x+、y+for(int j=y;j x-4;)/斜向 x-、y-for(int j=y;j y-4;)if(i=0|j=0)i=x-4;break;if(mapij!=map-i-j&mapij=0)x=i;y=j

24、;return true;return false;Boolean du4()if(win4(x,y)=4)/反斜向 4 for(int i=x;i x-4;)/斜向 x-、y+for(int j=y;j y+4;)if(i=0|j=19)i=x-4;break;if(mapij!=map-i+j&mapij=0)x=i;y=j;return true;for(int i=x;i y-4;)if(i=19|j=0)i=x+4;break;if(mapij!=map+i-j&mapij=0)x=i;y=j;return true;return false;Boolean du5()int mar

25、k=0;for(int a=0;a=19;a+)for(int b=0;b=19|(a-nc2)=0)break;else if(mapa+nc1b=0&mapa-nc2b=0)x=a+nc1;y=b;return true;return false;Boolean du6()int mark=0;for(int a=0;a=19;a+)for(int b=0;b=19|(b-nc2)=0)break;else if(mapab+nc1=0&mapab-nc2=0)x=a;y=b+nc1;return true;return false;Boolean du7()int mark=0;for(

26、int a=0;a=19;a+)for(int b=0;b=19|(b+nc1)=19|(a-nc2)=0|(b-nc2)=0)break;else if(mapa+nc1b+nc1=0&mapa-nc2b-nc2=0)x=a+nc1;y=b+nc1;return true;return false;Boolean du8()int mark=0;for(int a=0;a=19;a+)for(int b=0;b=19|(b-nc1)=0|(a-nc2)=19)break;else if(mapa+nc1b-nc1=0&mapa-nc2b+nc2=0)x=a+nc1;y=b-nc1;retur

27、n true;return false;Boolean du9()/横双联 for(int z=0;z=19;z+)for(int h=0;h 2&z2&h=4)x=h-1;y=z;return true;if(win2(h-1,z)=3)if(maph-1z+nc1=0&maph-1z-nc2=0)x=h-1;y=z;return true;if(win3(h-1,z)=3)if(maph+nc1-1z+nc1=0&maph-nc2-1z-nc2=0)x=h-1;y=z;return true;if(win4(h-1,z)=3)if(maph-1-nc1z+nc1=0&maph-1+nc2z

28、-nc2=0)x=h-1;y=z;return true;maph-1z=0;h+;maph+1z=1;if(win1(h+1,z)=4)x=h+1;y=z;return true;if(win2(h+1,z)=3)if(maph+1z+nc1=0&maph+1z-nc2=0)x=h+1;y=z;return true;if(win3(h+1,z)=3)if(maph+nc1+1z+nc1=0&maph-nc2+1z-nc2=0)x=h+1;y=z;return true;if(win4(h+1,z)=3)if(maph+1-nc1z+nc1=0&maph+1+nc2z-nc2=0)x=h+1

29、;y=z;return true;maph+1z=0;return false;Boolean du10()/纵双联 for(int h=0;h=19;h+)for(int z=0;z 2&z2&h=4)x=h;y=z-1;return true;if(win3(h,z-1)=3)if(maph+nc1z+nc1-1=0&maph-nc2z-nc2-1=0)x=h;y=z-1;return true;if(win4(h,z-1)=3)if(maph-nc1z-1+nc1=0&maph+nc2z-1-nc2=0)x=h;y=z-1;return true;maphz-1=0;z+;maphz+1

30、=1;if(win2(h,z+1)=4)x=h;y=z+1;return true;if(win3(h,z+1)=3)if(maph+nc1z+1+nc1=0&maph-nc2z+1-nc2=0)x=h;y=z+1;return true;if(win4(h,z+1)=3)if(maph-nc1z+1+nc1=0&maph+nc2z+1-nc2=0)x=h;y=z+1;return true;maphz+1=0;return false;Boolean du11()/正斜双联 int x1=-1,y1=-1;for(int h=0;h=19;h+)for(int z=0;z 2&z2&h=4)

31、x=h-1;y=z-1;return true;if(win4(h-1,z-1)=3)if(maph-1-nc1z-1+nc1=0&maph-1+nc2z-1-nc2=0)x=h-1;y=z-1;return true;maph-1z-1=0;maph+2z+2=1;if(win3(h+2,z+2)=4)x=h+2;y=z+2;return true;if(win4(h+2,z+2)=3)if(maph+2-nc1z+2+nc1=0&maph+2+nc2z+2-nc2=0)x=h+2;y=z+2;return true;maph+2z+2=0;return false;Boolean du_1

32、()if(du1()return true;if(du2()return true;if(du3()return true;if(du4()return true;return false;Boolean du_2()if(du5()return true;if(du6()return true;if(du7()return true;if(du8()return true;if(du9()return true;if(du10()return true;if(du11()return true;return false;Override public void mouseClicked(Mo

33、useEvent me)/throw new UnsupportedOperationException(Not supported yet.);Override public void mousePressed(MouseEvent me)/throw new UnsupportedOperationException(Not supported yet.);if(winner=0)x=me.getX();y=me.getY();chb1.setEnabled(false);chb2.setEnabled(false);number+;x=(int)(x/30)-1;y=(int)(y-15

34、)/30)-1;if(x=0&x=0&y=19&mapxy=0)mapxy=1;repaint();if(win(x,y)winner=1;repaint();if(winner=0)computergame();repaint();if(win(x,y)winner=2;repaint();Override public void mouseReleased(MouseEvent me)/throw new UnsupportedOperationException(Not supported yet.);Override public void mouseEntered(MouseEvent me)/throw new UnsupportedOperationException(Not supported yet.);Override public void mouseExited(MouseEvent me)/throw new UnsupportedOperationException(Not supported yet.);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 休闲娱乐

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com