java五子棋小游戏含源代码.docx

上传人:b****6 文档编号:7252330 上传时间:2023-05-11 格式:DOCX 页数:29 大小:105KB
下载 相关 举报
java五子棋小游戏含源代码.docx_第1页
第1页 / 共29页
java五子棋小游戏含源代码.docx_第2页
第2页 / 共29页
java五子棋小游戏含源代码.docx_第3页
第3页 / 共29页
java五子棋小游戏含源代码.docx_第4页
第4页 / 共29页
java五子棋小游戏含源代码.docx_第5页
第5页 / 共29页
java五子棋小游戏含源代码.docx_第6页
第6页 / 共29页
java五子棋小游戏含源代码.docx_第7页
第7页 / 共29页
java五子棋小游戏含源代码.docx_第8页
第8页 / 共29页
java五子棋小游戏含源代码.docx_第9页
第9页 / 共29页
java五子棋小游戏含源代码.docx_第10页
第10页 / 共29页
java五子棋小游戏含源代码.docx_第11页
第11页 / 共29页
java五子棋小游戏含源代码.docx_第12页
第12页 / 共29页
java五子棋小游戏含源代码.docx_第13页
第13页 / 共29页
java五子棋小游戏含源代码.docx_第14页
第14页 / 共29页
java五子棋小游戏含源代码.docx_第15页
第15页 / 共29页
java五子棋小游戏含源代码.docx_第16页
第16页 / 共29页
java五子棋小游戏含源代码.docx_第17页
第17页 / 共29页
java五子棋小游戏含源代码.docx_第18页
第18页 / 共29页
java五子棋小游戏含源代码.docx_第19页
第19页 / 共29页
java五子棋小游戏含源代码.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

java五子棋小游戏含源代码.docx

《java五子棋小游戏含源代码.docx》由会员分享,可在线阅读,更多相关《java五子棋小游戏含源代码.docx(29页珍藏版)》请在冰点文库上搜索。

java五子棋小游戏含源代码.docx

java五子棋小游戏含源代码

五子棋小游戏

功能模块图

 

图1.功能模块图

 

设计结果与分析

(1)五子棋游戏的主界面,如图2所示。

图2程序主界面

 

(2)五子棋游戏的结束界面,如图3所示。

图3游戏结束界面

 

(3)游戏游戏栏中的各个选项,如图4所示。

图4Game栏中的选项

 

(4)视图设置栏中的各个选项,如图5所示。

图5Configure栏中的各个选项

 

(5)Help帮助栏中的选项,如图6所示。

图6Help栏中的选项

 

(6)点击Help栏中的About选项弹出的界面,如图7所示。

图7About选项弹出时的界面

4.设计体会

通过这次课程设计,我进一步加深对基础理论的理解,扩大专业知识面,对收集资料、查阅文献、方案制定等实践方面得到了很好的锻练,促进对所学知识应用能力的提高。

同时我渐渐的复习了Java使用方法和编程语法,之后的编程过程也相对得心应手,基本完成了预期计划的要求。

在此感谢我的指导老师—冯云老师,她在课题的研究上不遗余力的给予指导。

她严谨的治学态度深深的影响了我,使我受益匪浅!

5.参考文献

[1]耿祥义.JAVA大学实用教程.北京:

电子工业出版社.2005.3:

85-113

[2]朱战立,沈伟.Java程序设计实用指南.北京:

电子工业出版社,2005.1:

48-135

[3]唐大仕.Java程序设计[M].北京:

北方交通大学出版社:

2007.05:

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={"20x15","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,15);

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[]{

"关于"

},this));

}

//构造五子棋游戏的主菜单

publicJMenumakeMenu(Objectparent,Objectitems[],Objecttarget){

JMenum=null;

if(parentinstanceofJMenu)

m=(JMenu)parent;

elseif(parentinstanceofString)

m=newJMenu((String)parent);

else

returnnull;

for(inti=0;i

if(items[i]==null)

m.addSeparator();

elseif(items[i]=="棋盘"){

JMenujm=newJMenu("棋盘");

ButtonGroupgroup=newButtonGroup();

JRadioButtonMenuItemrmenu;

for(intj=0;j

rmenu=makeRadioButtonMenuItem(strsize[j],target);

if(j==0)

rmenu.setSelected(true);

jm.add(rmenu);

group.add(rmenu);

}

m.add(jm);

}elseif(items[i]=="模式"){

JMenujm=newJMenu("模式");

ButtonGroupgroup=newButtonGroup();

JRadioButtonMenuItemrmenu;

for(inth=0;h

rmenu=makeRadioButtonMenuItem(strmode[h],target);

if(h==0)

rmenu.setSelected(true);

jm.add(rmenu);

group.add(rmenu);

}

m.add(jm);

}else

m.add(makeMenuItem(items[i],target));

returnm;

}

//构造五子棋游戏的菜单项

publicJMenuItemmakeMenuItem(Objectitem,Objecttarget){

JMenuItemr=null;

if(iteminstanceofString)

r=newJMenuItem((String)item);

elseif(iteminstanceofJMenuItem)

r=(JMenuItem)item;

else

returnnull;

if(targetinstanceofActionListener)

r.addActionListener((ActionListener)target);

returnr;

}

//构造五子棋游戏的单选按钮式菜单项

publicJRadioButtonMenuItemmakeRadioButtonMenuItem(

Objectitem,Objecttarget){

JRadioButtonMenuItemr=null;

if(iteminstanceofString)

r=newJRadioButtonMenuItem((String)item);

elseif(iteminstanceofJRadioButtonMenuItem)

r=(JRadioButtonMenuItem)item;

else

returnnull;

if(targetinstanceofActionListener)

r.addActionListener((ActionListener)target);

returnr;

}

publicvoidMapSize(intw,inth){

setSize(w*20+50,h*20+100);

if(this.checkcomputer)

this.iscomputer=true;

else

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("Windows"))

UIManager.setLookAndFeel(

"com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

elseif(arg.equals("Motif"))

UIManager.setLookAndFeel(

"com.sun.java.swing.plaf.motif.MotifLookAndFeel");

else

UIManager.setLookAndFeel(

"javax.swing.plaf.metal.MetalLookAndFeel");

SwingUtilities.updateComponentTreeUI(this);

}catch(Exceptionee){}

if(arg.equals("20x15")){

this.width=20;

this.height=15;

cm=newChessModel

(1);

MapSize(this.width,this.height);

SwingUtilities.updateComponentTreeUI(this);

}

if(arg.equals("30x20")){

this.width=30;

this.height=20;

cm=newChessModel

(2);

MapSize(this.width,this.height);

SwingUtilities.updateComponentTreeUI(this);

}

if(arg.equals("40x30")){

this.width=40;

this.height=30;

cm=newChessModel(3);

MapSize(this.width,this.height);

SwingUtilities.updateComponentTreeUI(this);

}

if(arg.equals("人机对弈")){

this.checkcomputer=true;

this.iscomputer=true;

cm=newChessModel(cm.getModeChess());

MapSize(cm.getWidth(),cm.getHeight());

SwingUtilities.updateComponentTreeUI(this);

}

if(arg.equals("人人对弈")){

this.checkcomputer=false;

this.iscomputer=false;

cm=newChessModel(cm.getModeChess());

MapSize(cm.getWidth(),cm.getHeight());

SwingUtilities.updateComponentTreeUI(this);

}

if(arg.equals("开局")){

restart();

}

if(arg.equals("关于"))

JOptionPane.showMessageDialog(this,"五子棋游戏测试版本","关于",0);

if(arg.equals("退出"))

System.exit(0);

}

}

/*

*类ChessModel实现了整个五子棋程序算法的核心

*/

classChessModel{

//棋盘的宽度、高度、棋盘的模式(如20×15)

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,15,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];

for(inti=0;i<=width;i++){

for(intj=0;j<=height;j++){

arrMapShow[i][j]=-5;

}

}

}

//获取是否交换棋手的标识符

publicbooleangetisOdd(){

returnthis.isOdd;

}

//设置交换棋手的标识符

publicvoidsetisOdd(booleanisodd){

if(isodd)

this.isOdd=true;

else

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)

returntrue;

returnfalse;

}

//判断该坐标位置是否可下棋子

publicvoidreadyplay(intx,inty){

if(badxy(x,y))

return;

if(chessExist(x,y))

return;

this.arrMapShow[x][y]=3;

}

//在该坐标位置下棋子

publicvoidplay(intx,inty){

if(badxy(x,y))

return;

if(chessExist(x,y)){

this.isExist=true;

return;

}else

this.isExist=false;

if(getisOdd()){

setisOdd(false);

this.arrMapShow[x][y]=1;

}else{

setisOdd(true);

this.arrMapShow[x][y]=2;

}

}

//计算机走棋

/*

*说明:

用穷举法判断每一个坐标点的四个方向的的最大棋子数,

*最后得出棋子数最大值的坐标,下子

**/

publicvoidcomputerDo(intwidth,intheight){

intmax_black,max_white,max_temp,max=0;

setisOdd(true);

System.out.println("计算机走棋...");

for(inti=0;i<=width;i++){

for(intj=0;j<=height;j++){

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++;

else

break;

}

//judgeleft

x_temp1=x_temp;

for(inti=1;i<5;i++){

x_temp1-=1;

if(x_temp1<0)

break;

if(this.arrMapShow[x_temp1][y_temp1]==black_or_white)

num++;

else

break;

}

if(num<5)

max_temp=num;

//judgeup

x_temp1=x_temp;

y_temp1=y_temp;

num=0;

for(inti=1;i<5;i++){

y_temp1-=1;

if(y_temp1<0)

break;

if(this.arrMapShow[x_temp1][y_temp1]==black_or_white)

num++;

else

break;

}

//judgedown

y_temp1=y_temp;

for(inti=1;i<5;i++){

y_temp1+=1;

if(y_temp1>this.height)

break;

if(this.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2