java五子棋小游戏含源代码Word文档下载推荐.docx
- 文档编号:22653804
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:34
- 大小:99.71KB
java五子棋小游戏含源代码Word文档下载推荐.docx
《java五子棋小游戏含源代码Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《java五子棋小游戏含源代码Word文档下载推荐.docx(34页珍藏版)》请在冰豆网上搜索。
56-92
[4]叶核亚.JAVA2程序设计实用教程[M].北京:
电子工业出版社;
2008.4:
64-98
[5]邢素萍.JAVA办公自动化项目方案精解[M].北京:
航空工业出版社,2006.9:
35-120
附录
//Java编程:
五子棋游戏源代码
importjava.awt.*;
importjava.awt.event.*;
importjava.applet.*;
importjavax.swing.*;
importjava.io.PrintStream;
importjavax.swing.JComponent;
importjavax.swing.JPanel;
/*
*main方法创建了ChessFrame类的一个实例对象(cf),
*并启动屏幕显示显示该实例对象。
**/
publicclassFiveChessAppletDemo{
publicstaticvoidmain(Stringargs[]){
ChessFramecf=newChessFrame();
cf.show();
}
*类ChessFrame主要功能是创建五子棋游戏主窗体和菜单
classChessFrameextendsJFrameimplementsActionListener{
privateString[]strsize={"
20x20"
"
30x20"
40x30"
};
privateString[]strmode={"
人机对弈"
人人对弈"
publicstaticbooleaniscomputer=true,checkcomputer=true;
privateintwidth,height;
privateChessModelcm;
privateMainPanelmp;
//构造五子棋游戏的主窗体
publicChessFrame(){
this.setTitle("
五子棋游戏"
);
cm=newChessModel
(1);
mp=newMainPanel(cm);
Containercon=this.getContentPane();
con.add(mp,"
Center"
this.setResizable(false);
this.addWindowListener(newChessWindowEvent());
MapSize(20,20);
JMenuBarmbar=newJMenuBar();
this.setJMenuBar(mbar);
JMenugameMenu=newJMenu("
游戏"
mbar.add(makeMenu(gameMenu,newObject[]{
"
开局"
"
棋盘"
模式"
null,"
退出"
},this));
JMenulookMenu=newJMenu("
视图"
mbar.add(makeMenu(lookMenu,newObject[]{
Metal"
Motif"
Windows"
},this));
JMenuhelpMenu=newJMenu("
帮助"
mbar.add(makeMenu(helpMenu,newObject[]{
关于"
//构造五子棋游戏的主菜单
publicJMenumakeMenu(Objectparent,Objectitems[],Objecttarget){
JMenum=null;
if(parentinstanceofJMenu)
m=(JMenu)parent;
elseif(parentinstanceofString)
m=newJMenu((String)parent);
else
returnnull;
for(inti=0;
i<
items.length;
i++)
if(items[i]==null)
m.addSeparator();
elseif(items[i]=="
){
JMenujm=newJMenu("
ButtonGroupgroup=newButtonGroup();
JRadioButtonMenuItemrmenu;
for(intj=0;
j<
strsize.length;
j++){
rmenu=makeRadioButtonMenuItem(strsize[j],target);
if(j==0)
rmenu.setSelected(true);
jm.add(rmenu);
group.add(rmenu);
}
m.add(jm);
}elseif(items[i]=="
for(inth=0;
h<
strmode.length;
h++){
rmenu=makeRadioButtonMenuItem(strmode[h],target);
if(h==0)
}else
m.add(makeMenuItem(items[i],target));
returnm;
//构造五子棋游戏的菜单项
publicJMenuItemmakeMenuItem(Objectitem,Objecttarget){
JMenuItemr=null;
if(iteminstanceofString)
r=newJMenuItem((String)item);
elseif(iteminstanceofJMenuItem)
r=(JMenuItem)item;
if(targetinstanceofActionListener)
r.addActionListener((ActionListener)target);
returnr;
//构造五子棋游戏的单选按钮式菜单项
publicJRadioButtonMenuItemmakeRadioButtonMenuItem(
Objectitem,Objecttarget){
JRadioButtonMenuItemr=null;
r=newJRadioButtonMenuItem((String)item);
elseif(iteminstanceofJRadioButtonMenuItem)
r=(JRadioButtonMenuItem)item;
publicvoidMapSize(intw,inth){
setSize(w*20+50,h*20+100);
if(this.checkcomputer)
this.iscomputer=true;
this.iscomputer=false;
mp.setModel(cm);
mp.repaint();
publicbooleangetiscomputer(){
returnthis.iscomputer;
publicvoidrestart(){
intmodeChess=cm.getModeChess();
if(modeChess<
=3&
&
modeChess>
=1){
cm=newChessModel(modeChess);
MapSize(cm.getWidth(),cm.getHeight());
}else{
System.out.println("
\u81EA\u5B9A\u4E49"
publicvoidactionPerformed(ActionEvente){
Stringarg=e.getActionCommand();
try{
if(arg.equals("
))
UIManager.setLookAndFeel(
com.sun.java.swing.plaf.windows.WindowsLookAndFeel"
elseif(arg.equals("
com.sun.java.swing.plaf.motif.MotifLookAndFeel"
javax.swing.plaf.metal.MetalLookAndFeel"
);
SwingUtilities.updateComponentTreeUI(this);
}catch(Exceptionee){}
if(arg.equals("
)){
this.width=20;
this.height=20;
MapSize(this.width,this.height);
this.width=30;
cm=newChessModel
(2);
this.width=40;
this.height=30;
cm=newChessModel(3);
this.checkcomputer=true;
cm=newChessModel(cm.getModeChess());
this.checkcomputer=false;
restart();
JOptionPane.showMessageDialog(this,"
该五子棋游戏测试版本版权仅属魏得龙所有!
"
1);
System.exit(0);
*类ChessModel实现了整个五子棋程序算法的核心
*/
classChessModel{
//棋盘的宽度、高度、棋盘的模式(如20×
20)
privateintwidth,height,modeChess;
//棋盘方格的横向、纵向坐标
privateintx=0,y=0;
//棋盘方格的横向、纵向坐标所对应的棋子颜色,
//数组arrMapShow只有3个值:
1,2,3,-5,
//其中1代表该棋盘方格上下的棋子为黑子,
//2代表该棋盘方格上下的棋子为白子,
//3代表为该棋盘方格上没有棋子,
//-5代表该棋盘方格不能够下棋子
privateint[][]arrMapShow;
//交换棋手的标识,棋盘方格上是否有棋子的标识符
privatebooleanisOdd,isExist;
publicChessModel(){}
//该构造方法根据不同的棋盘模式(modeChess)来构建对应大小的棋盘
publicChessModel(intmodeChess){
this.isOdd=true;
if(modeChess==1){
PanelInit(20,20,modeChess);
if(modeChess==2){
PanelInit(30,20,modeChess);
if(modeChess==3){
PanelInit(40,30,modeChess);
//按照棋盘模式构建棋盘大小
privatevoidPanelInit(intwidth,intheight,intmodeChess){
this.width=width;
this.height=height;
this.modeChess=modeChess;
arrMapShow=newint[width+1][height+1];
=width;
i++){
for(intj=0;
j<
=height;
j++){
arrMapShow[i][j]=-5;
//获取是否交换棋手的标识符
publicbooleangetisOdd(){
returnthis.isOdd;
//设置交换棋手的标识符
publicvoidsetisOdd(booleanisodd){
if(isodd)
this.isOdd=false;
//获取某棋盘方格是否有棋子的标识值
publicbooleangetisExist(){
returnthis.isExist;
//获取棋盘宽度
publicintgetWidth(){
returnthis.width;
//获取棋盘高度
publicintgetHeight(){
returnthis.height;
//获取棋盘模式
publicintgetModeChess(){
returnthis.modeChess;
//获取棋盘方格上棋子的信息
publicint[][]getarrMapShow(){
returnarrMapShow;
//判断下子的横向、纵向坐标是否越界
privatebooleanbadxy(intx,inty){
if(x>
=width+20||x<
0)
returntrue;
returny>
=height+20||y<
0;
//计算棋盘上某一方格上八个方向棋子的最大值,
//这八个方向分别是:
左、右、上、下、左上、左下、右上、右下
publicbooleanchessExist(inti,intj){
if(this.arrMapShow[i][j]==1||this.arrMapShow[i][j]==2)
returnfalse;
//判断该坐标位置是否可下棋子
publicvoidreadyplay(intx,inty){
if(badxy(x,y))
return;
if(chessExist(x,y))
this.arrMapShow[x][y]=3;
//在该坐标位置下棋子
publicvoidplay(intx,inty){
if(chessExist(x,y)){
this.isExist=true;
this.isExist=false;
if(getisOdd()){
setisOdd(false);
this.arrMapShow[x][y]=1;
setisOdd(true);
this.arrMapShow[x][y]=2;
//计算机走棋
*说明:
用穷举法判断每一个坐标点的四个方向的的最大棋子数,
*最后得出棋子数最大值的坐标,下子
publicvoidcomputerDo(intwidth,intheight){
intmax_black,max_white,max_temp,max=0;
计算机走棋..."
if(!
chessExist(i,j)){//算法判断是否下子
max_white=checkMax(i,j,2);
//判断白子的最大值
max_black=checkMax(i,j,1);
//判断黑子的最大值
max_temp=Math.max(max_white,max_black);
if(max_temp>
max){
max=max_temp;
this.x=i;
this.y=j;
setX(this.x);
setY(this.y);
this.arrMapShow[this.x][this.y]=2;
//记录电脑下子后的横向坐标
publicvoidsetX(intx){
this.x=x;
//记录电脑下子后的纵向坐标
publicvoidsetY(inty){
this.y=y;
//获取电脑下子的横向坐标
publicintgetX(){
returnthis.x;
//获取电脑下子的纵向坐标
publicintgetY(){
returnthis.y;
publicintcheckMax(intx,inty,intblack_or_white){
intnum=0,max_num,max_temp=0;
intx_temp=x,y_temp=y;
intx_temp1=x_temp,y_temp1=y_temp;
//judgeright
for(inti=1;
i<
5;
i++){
x_temp1+=1;
if(x_temp1>
this.width)
break;
if(this.arrMapShow[x_temp1][y_temp1]==black_or_white)
num++;
//judgeleft
x_temp1=x_temp;
x_temp1-=1;
if(x_temp1<
0)
if(num<
5)
max_temp=num;
//judgeup
y_temp1=y_temp;
num=0;
y_temp1-=1;
if(y_temp1<
//judgedown
y_temp1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 五子棋 小游戏 源代码