java swing实现简单的五子棋游戏
用javaswing写的一个简单的五子棋游戏。
下面是Main.java。
packagecom.crossing.main; importcom.crossing.view.GameWindow; publicclassMain{ /** *@paramargs */ publicstaticvoidmain(String[]args){ GameWindowgameWindow=newGameWindow(); } }
下面是GameWindow.java。
packagecom.crossing.view; importjava.awt.BorderLayout; importjava.awt.Color; importjava.awt.Font; importjava.awt.Graphics; importjava.awt.GridLayout; importjava.awt.Rectangle; importjava.awt.Toolkit; importjava.awt.event.ActionEvent; importjava.awt.event.ActionListener; importjava.awt.event.MouseEvent; importjava.awt.event.MouseListener; importjava.awt.image.BufferedImage; importjava.io.File; importjava.io.IOException; importjavax.imageio.ImageIO; importjavax.swing.JButton; importjavax.swing.JFrame; importjavax.swing.JOptionPane; importjavax.swing.JPanel; /** *@Title:GameWindow.java *@Packagecom.crossing.view *@Description:TODO(用一句话描述该文件做什么) *@authorcrossing *@date2021年2月28日下午9:23:14 *@versionV1.0 */ @SuppressWarnings("serial") publicclassGameWindowextendsJFrameimplementsMouseListener,Runnable{ privateintwidth,height;//屏幕宽高 privateintmouseX=0,mouseY=0,mapsX=0,mapsY=0;//鼠标坐标,鼠标在地图中的位置 privateintgame_width=600,game_height=600;//游戏窗口大小 privateBufferedImagebgImage=null;//背景图片 privateintchessBoardItemWidth=25;//棋盘每一小格的大小 privateRectanglechessBoardRect=null;//棋盘所在矩形 privateBufferedImageoffsetImg=newBufferedImage(game_width,game_height,BufferedImage.TYPE_4BYTE_ABGR); privateGraphicsg=offsetImg.getGraphics();//双缓冲解决闪烁问题 privateint[][]maps=newint[15][15];//0无棋子,1黑子,2白子 privatebooleanisBlack=true;//是否是黑方的回合 privateStringmessage="黑方先行",whitemessage="无限制",blackmessage="无限制";//界面上方信息,下方时间信息 //右边操作界面 privateJButtonbtn_start,btn_exit,btn_settings; privateJPaneloperaterPanel;//操作面板 privateintgametime=0;//游戏时间限制(秒) privateintblackTime=0,whiteTime=0;//黑白方剩余时间 privateThreadtimeThread=newThread(this);//黑白双方倒计时线程 //privatebooleanisLimitTime=false; publicGameWindow(){ setTitle("五子棋"); setSize(game_width,game_height); setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //获取屏幕宽高 width=Toolkit.getDefaultToolkit().getScreenSize().width; height=Toolkit.getDefaultToolkit().getScreenSize().height; //棋盘位置矩形 chessBoardRect=newRectangle(50,120,370,370); setLocation((width-game_width)/2,(height-game_height)/2); addMouseListener(this); //初始化右边的面板 initOeratePane(); repaint(); //设置背景 try{ bgImage=ImageIO.read(newFile("img/backgroung.png")); //System.out.println(bgImage); }catch(IOExceptione){ e.printStackTrace(); } setVisible(true); } /** *初始化黑白双方时间 */ privatevoidinitTime(){ //System.out.println("isLimitTime:"+isLimitTime); if(gametime>0){ timeThread.start(); if(blackTime<0){ JOptionPane.showMessageDialog(this,"黑方时间已到,白方获胜!"); timeThread.interrupt(); }elseif(whiteTime<0){ JOptionPane.showMessageDialog(this,"白方时间已到,黑方获胜!"); timeThread.interrupt(); } } } /** *初始化右边操作界面 */ privatevoidinitOeratePane(){ btn_start=newJButton("开始游戏"); btn_settings=newJButton("游戏设置"); btn_exit=newJButton("退出游戏"); btn_start.addActionListener(newActionListener(){ @Override publicvoidactionPerformed(ActionEvente){ intselect=JOptionPane.showConfirmDialog(getContentPane(),"确定要重新开始吗?"); if(select==0){ reStartGame(); } } }); btn_settings.addActionListener(newActionListener(){ @Override publicvoidactionPerformed(ActionEvente){ Stringselect=""; select=JOptionPane.showInputDialog("请输入游戏时间(分钟),输入0不限时间:"); if(select!=null&&!select.equals("")){ try{ gametime=Integer.parseInt(select)*60; //System.out.println("gametime:"+gametime); //isLimitTime=true; //System.out.println("设置isLimitTime--"+isLimitTime); blackTime=gametime; whiteTime=gametime; if(gametime>0){ blackmessage=blackTime/3600+":"+blackTime/60%60+":"+blackTime%60; whitemessage=whiteTime/3600+":"+whiteTime/60%60+":"+whiteTime%60; //timeThread.resume(); }else{ whitemessage="无限制"; blackmessage="无限制"; } initTime(); repaint(); }catch(Exceptione2){ e2.printStackTrace(); JOptionPane.showMessageDialog(getContentPane(),"请输入正确信息!"); } // } } }); btn_exit.addActionListener(newActionListener(){ @Override publicvoidactionPerformed(ActionEvente){ System.exit(0); } }); operaterPanel=newJPanel(); GridLayoutlayout=newGridLayout(0,1,100,100); operaterPanel.setLayout(layout); operaterPanel.add(btn_start); operaterPanel.add(btn_settings); operaterPanel.add(btn_exit); getContentPane().add(operaterPanel,BorderLayout.EAST); } /** *重新开始游戏 */ protectedvoidreStartGame(){ isBlack=true; blackTime=gametime; whiteTime=gametime; //for(inti=0;i=0&&(mapsX+tempX)<15&&(mapsY+tempY)>=0&&(mapsY+tempY)<15 &&maps[mapsY+tempY][mapsX+tempX]==color){ count++; if(tempX==0&&tempY==0) break; if(tempX>0) tempX++; if(tempX<0) tempX--; if(tempY>0) tempY++; if(tempY<0) tempY--; } tempX=xChange; tempY=yChange; while((mapsX-tempX)>=0&&(mapsX-tempX)<15&&(mapsY-tempY)>=0&&(mapsY-tempY)<15 &&maps[mapsY-tempY][mapsX-tempX]==color){ count++; if(tempX==0&&tempY==0) break; if(tempX>0) tempX++; if(tempX<0) tempX--; if(tempY>0) tempY++; if(tempY<0) tempY--; } //System.out.println("count:"+count); if(count>=5){ returntrue; } returnisWin; } @Override publicvoidmousePressed(MouseEvente){ } @Override publicvoidmouseReleased(MouseEvente){ } @Override publicvoidmouseEntered(MouseEvente){ //mouseX=e.getX(); //mouseY=e.getY(); //System.out.println("鼠标进入游戏窗口"); //System.out.println("鼠标坐标:"+mouseX+","+mouseY); //if(chessBoardRect.contains(mouseX,mouseY)){ //System.out.println("进入棋盘"); //if(isBlack){ //g.setColor(Color.black); //}else{ //g.setColor(Color.white); //} //g.fillOval(mouseX,mouseY,20,20); //repaint(); //} } @Override publicvoidmouseExited(MouseEvente){ } @Override publicvoidrun(){ while(true){ //System.out.println("isblack:"+isBlack); if(isBlack){ blackTime--; }else{ whiteTime--; } blackmessage=blackTime/3600+":"+blackTime/60%60+":"+blackTime%60; whitemessage=whiteTime/3600+":"+whiteTime/60%60+":"+whiteTime%60; //System.out.println("blackTime:"+blackTime); //System.out.println("whiteTime:"+whiteTime); repaint(); if(blackTime<0){ JOptionPane.showMessageDialog(getContentPane(),"黑方时间已到,白方获胜!"); timeThread.interrupt(); newGameWindow(); break; }elseif(whiteTime<0){ JOptionPane.showMessageDialog(getContentPane(),"白方时间已到,黑方获胜!"); timeThread.interrupt(); newGameWindow(); break; } try{ Thread.sleep(1000); }catch(InterruptedExceptione){ e.printStackTrace(); } } } }
背景图片
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。