java五子棋小程序.docx
《java五子棋小程序.docx》由会员分享,可在线阅读,更多相关《java五子棋小程序.docx(23页珍藏版)》请在冰豆网上搜索。
![java五子棋小程序.docx](https://file1.bdocx.com/fileroot1/2023-2/25/109dad1e-c6c0-4976-b15a-f74bceb13804/109dad1e-c6c0-4976-b15a-f74bceb138041.gif)
java五子棋小程序
Java五子棋小程序
简介:
Java五子棋小程序,送给Java初学者学习提高兴趣与学习所用,希望能给大家带来一些帮助。
此程序用Java语言编写,采用swing技术开发界面,采用触发模式进行键盘事件监听,原本设计与台式机全键盘使用,所以白棋选手落子采用数字键盘0键,经过本人改进后,也可使用‘/’键进行落子。
如出现运行后无图案现象,请双击标题栏最大化后方可出现图案,然后再还原。
最后感谢大家支持!
1.程序运行效果
2.Myeclipse根目录
3.所有应用图片
1)black.png
2)white.png
3)space.gif
4)num0.gif
5)red.png
6)mbi_user.gif
7)mbi_D.gif
8)mbi_L.gif
9)mbi_R.gif
10)mbi_U.gif
11)qipan.jpg
4.所有类
1)运行类
package;
publicclassRunGame{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
newGame();
"程序运行");
}
}
2)主程序类
package;
import;
import;
import;
import;
import;
import;
import;
import;
import;
import;
import;
import;
import;
import;
import;
import;
import;
import;
publicclassGameextendsJFrameimplementsKeyListener,ActionListener{
privateJPanelmainPanel=null;
privateJLabel[][]baizi=null;
privateJLabel[][]heizi=null;
privateMyLabelbiankuang=null;
privatePosition[][]pos=null;
privateJLabeluser=null;
privateJPanelrightPanel=null;
privateJLabelhei,heiU,heiD,heiL,heiR,heiC;
privateJLabelbai,baiU,baiD,baiL,baiR,baiC;
privateJLabeltimeL,time;//显示时间
privateTimertimer;
privateintmnt=0,scd=0;//分、秒
privateJMenuBarmenuBar;
privateJMenumenuE,menuH;
privateJMenuItemmenuItemCZ;
/**
*初始化主视窗
*
*/
privatevoidInitLabel(){
Containercon=this.getContentPane();
con.setLayout(null);
this.mainPanel=newMainPanel();
0,609,608);
;
con.add(this.mainPanel);
this.rightPanel=newJPanel();
0,180,608);
;
;
con.add(this.rightPanel);
this.user=newJLabel(newImageIcon("./img/mbi_user.gif"));
25,40,40);
;
/**
*初始化所有点
*给每个点上都放置一个黑子、一个白子,设置棋子为不可见
*/
this.pos=newPosition[13][13];
this.heizi=newJLabel[13][13];
this.baizi=newJLabel[13][13];
for(inti=0;i<13;i++){
for(intj=0;j<13;j++){
pos[i][j]=newPosition();
pos[i][j].setX(j);
pos[i][j].setY(i);
pos[i][j].setLabel_Status(0);
this.heizi[i][j]=newJLabel(newImageIcon("./img/black.png"));
this.heizi[i][j].setBounds(63+36*i,64+36*j,45,45);
this.heizi[i][j].setVisible(false);
;
this.baizi[i][j]=newJLabel(newImageIcon("./img/white.png"));
this.baizi[i][j].setBounds(63+36*i,64+36*j,45,45);
this.baizi[i][j].setVisible(false);
;
}
}
//添加边框
this.biankuang=newMyLabel();
280,45,45);
;
this.addKeyListener((KeyListener)this);
}
/**
*初始化右视窗
*
*/
privatevoidinitRightP(){
this.hei=newJLabel(newImageIcon("./img/black.png"));
20,40,40);
;
this.heiU=newJLabel("W");
ImageIcon("./img/mbi_U.gif"));
60,40,40);
;
this.heiL=newJLabel("A");
ImageIcon("./img/mbi_L.gif"));
100,40,40);
;
this.heiD=newJLabel("S");
ImageIcon("./img/mbi_D.gif"));
100,40,40);
;
this.heiR=newJLabel("D");
ImageIcon("./img/mbi_R.gif"));
100,40,40);
;
this.heiC=newJLabel(newImageIcon("./img/space.gif"));
140,60,30);
;
this.bai=newJLabel(newImageIcon("./img/white.png"));
210,40,40);
;
this.baiU=newJLabel("↑");
ImageIcon("./img/mbi_U.gif"));
250,40,40);
;
this.baiL=newJLabel("←");
ImageIcon("./img/mbi_L.gif"));
290,40,40);
;
this.baiD=newJLabel("↓");
ImageIcon("./img/mbi_D.gif"));
290,40,40);
;
this.baiR=newJLabel("→");
ImageIcon("./img/mbi_R.gif"));
290,40,40);
;
this.baiC=newJLabel(newImageIcon("./img/num0.gif"));
330,60,30);
;
this.timeL=newJLabel("时间:
");
450,40,20);
;
this.time=newJLabel("00:
00");
;
450,60,20);
;
}
/**
*添加time监听对时间进行运算
*
*/
privatevoidinitTime(){
ActionListenerkeepTime=newActionListener(){
publicvoidactionPerformed(ActionEvente){
scd++;
/**
*对时间进行计算
*scd等于60秒时清零mnt加1
*/
if(scd>=60){
scd=0;
mnt++;
}
Stringstr="";
if(mnt<10){
str="0"+mnt+":
";
}else{
str=mnt+":
";
}
if(scd<10){
str=str+"0"+scd;
}else{
str=str+scd;
}
time.setText(str);
}
};
this.timer=newTimer(1000,keepTime);
;
}
//菜单初始化
privatevoidinitMenu(){
this.menuBar=newJMenuBar();
this.menuE=newJMenu("菜单(E)");
this.menuH=newJMenu("帮助(H)");
this.menuItemCZ=newJMenuItem("重置");
InputEvent.CTRL_MASK));
;
;
;
;
setJMenuBar(this.menuBar);
}
/**
*当从键盘得到响应时改变边框位置
*
*/
privatevoidsetBiankuang(){
+36*,
64+36*;
}
/**
*重新初始化,隐藏所有棋子,所有位置状态清零,边框回到原来位置
*
*/
privatevoidinitAll(){
this.mnt=0;
this.scd=0;
for(inti=0;i<13;i++){
for(intj=0;j<13;j++){
pos[i][j].setLabel_Status(0);
this.heizi[i][j].setVisible(false);
this.baizi[i][j].setVisible(false);
}
}
280,45,45);
;//边框初始化
25);
;//重新开始计时
}
/**
*胜利显示
*
*/
privatevoidshowOver(){
;
if(==1){
JOptionPane.showMessageDialog(this,"黑方获胜!
");
}elseif(==2){
JOptionPane.showMessageDialog(this,"白方获胜!
");
}
intflag=JOptionPane.showConfirmDialog(this,"再来一局吧!
","消息",JOptionPane.YES_NO_OPTION);
if(flag==JOptionPane.YES_OPTION){
this.initAll();
}else{
this.dispose();
}
}
/**
*判断游戏是否结束
*@paramx当前落子x坐标
*@paramy当前落子y坐标
*/
privatevoidgameOver(intx,inty){
intstaNum=0;
/**
*向右下方检查是否形成五连子↘
*/
for(inti=x-4,j=y-4;iif(i>=0&&i<=12&&j>=0&&j<=12){
if(this.pos[i][j].getLabel_Status()=={
staNum++;
"↘staNum="+staNum);
if(staNum==5){
this.showOver();
//;
//if(this.pos[i][j].getLabel_Status()==1){
//JOptionPane.showMessageDialog(this,"黑方获胜!
");
//"↘黑子获胜!
");
//}
//if(this.pos[i][j].getLabel_Status()==2){
//JOptionPane.showMessageDialog(this,"白方获胜!
");
//"↘白子获胜!
");
//}
}
}else{
staNum=0;
}
}
}
/**
*向右方检查是否形成五连子→
*/
for(inti=x-4,j=y;iif(i>=0&&i<=12&&j>=0&&j<=12){
if(this.pos[i][j].getLabel_Status()=={
staNum++;
"→staNum="+staNum);
if(staNum==5){
this.showOver();
//;
//if(this.pos[i][j].getLabel_Status()==1){
//JOptionPane.showMessageDialog(this,"黑方获胜!
");
//"→黑子获胜!
");
//}
//if(this.pos[i][j].getLabel_Status()==2){
//JOptionPane.showMessageDialog(this,"白方获胜!
");
//"→白子获胜!
");
//}
}
}else{
staNum=0;
}
}
}
/**
*向右上方检查是否形成五连子↗
*/
for(inti=x-4,j=y+4;iif(i>=0&&i<=12&&j>=0&&j<=12){
if(this.pos[i][j].getLabel_Status()=={
staNum++;
"↗staNum="+staNum);
if(staNum==5){
this.showOver();
//;
//if(this.pos[i][j].getLabel_Status()==1){
//JOptionPane.showMessageDialog(this,"黑方获胜!
");
//"↗黑子获胜!
");
//}
//if(this.pos[i][j].getLabel_Status()==2){
//JOptionPane.showMessageDialog(this,"白方获胜!
");
//"↗白子获胜!
");
//}
}
}else{
staNum=0;
}
}
}
/**
*向下方检查是否形成五连子↓
*/
for(inti=x,j=y-4;jif(i>=0&&i<=12&&j>=0&&j<=12){
if(this.pos[i][j].getLabel_Status()=={
staNum++;
"↓staNum="+staNum);
if(staNum==5){
this.showOver();
//;
//if(this.pos[i][j].getLabel_Status()==1){
//JOptionPane.showMessageDialog(this,"黑方获胜!
");
//"↓黑子获胜!
");
//}
//if(this.pos[i][j].getLabel_Status()==2){
//JOptionPane.showMessageDialog(this,"白方获胜!
");
//"↓白子获胜!
");
//}
}
}else{
staNum=0;
}
}
}
}
publicGame(){
initMenu();
InitLabel();
initRightP();
initTime();
this.setVisible(true);
this.setBounds(400,150,800,664);
this.setTitle("五子棋");
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
}
publicvoidkeyPressed(KeyEvente){
//设置边框移动
if(==1){
switch(e.getKeyCode()){
caseKeyEvent.VK_W:
if(>0){
;
this.setBiankuang();
}
break;
caseKeyEvent.VK_S:
if(<12){
;
this.setBiankuang();
}
break;
caseKeyEvent.VK_A:
if(>0){
;
this.setBiankuang();
}
break;
caseKeyEvent.VK_D:
if(<12){
;
this.setBiankuang();
}
break;
caseKeyEvent.VK_SPACE:
if(this.pos[==0){
this.heizi[;
this.repaint();
this.pos[;
this.gameOver(,;
;
215);
}
break;
default:
break;
}
}elseif(==2){
switch(e.getKeyCode()){
caseKeyEvent.VK_UP:
if(>0){
;
this.setBiankuang();
}
break;
caseKeyEvent.VK_DOWN:
if(<12){
;
this.setBiankuang();
}
break;
caseKeyEvent.VK_LEFT:
if(>0){
;
this.setBiankuang();
}
break;
caseKeyEvent.VK_RIGHT:
if(<12){
;
this.setBiankuang();
break;
}
caseKeyEvent.VK_NUMPAD0:
if(this.pos[==0){
this.baizi[;
this.repaint();
this.pos[;
this.gameOver(,;
;
25);
break;
}
caseKeyEvent.VK_SLASH:
if(this.pos[==0){
this.baizi[;
this.repaint();
this.pos[;
this.gameOver(,;
;
25);
break;
}
default:
break;
}
}
}
publicvoidkeyReleased(KeyE