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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。