视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
《五子棋游戏子系统实现》
2025-09-27 23:29:50 责编:小OO
文档


实验报告

课程名称               程序设计课程设计             

实验项目名称          五子棋游戏子系统实现          

班级与班级代码    09信息管理与信息系统2班  092511012                                

实验室名称(或课室)                                

专    业      信息管理与信息系统                                      

任课教师                 罗东俊 老师                

学    号:    09251101218                                      

姓    名:     江洁梅                                     

实验日期:       2010  年 6  月  21  日              

广东商学院教务处  制  

姓名  江洁梅                   实验报告成绩           

评语:

检查项目满分得 分

实验目的明确程度

10
实验原理理解程度20
实验步骤正确性和完整性20
实验结果及其评价

30
实验中遇到的主要问题的分析与处理10
实验报告美观性和可读性10
其他
合计100
                         指导教师(签名)               

                                            年   月   日

说明:指导教师评分后,实验报告交院(系)办公室保存。

 

五子棋游戏子系统实现

一、实验目的

用JAVA程序设计五子棋子窗口,实现五子棋的人机对弈,人人对弈,

网络对弈,背景音乐,视图的转换等功能。而五子棋计算器子系统以五子棋子窗口为界面,由ChessInternalFrame,ChessModel,MainPanel,SocketThread,Sound五个类组成。

通过“五子棋游戏子系统实现”实验,掌握课程设计项目实现的思路,进一步掌握面向对象程序设计的思想,以及JAVA语言运用的方法和技巧。

二、实验环境

   在jdk1.5.0_04运行环境下,在Eclipse界面下,开发调试和运行JAVA

实验项目。

三、实验原理

运用面向对象的JAVA语言编程原理,应用JAVA语言中类的设计,JAVA图形用户界面的设计,数组的运用等,实现五子棋子系统的设计和功能的实现。 

四、实验步骤及实验结果

(一)整体结构

1.新建Java Project“Program Design”(图1) ,然后“Program Design”下新建chess等5个包 (图2),在各个包下建立各自的类.

图1

图2

2.五子棋游戏子系统由主要由包chess组成,包chess下有ChessInternalFrame,ChessModel,MainPanel,SocketThread,Sound五个类。

3.分别输入每个包中各类的源程序,然后编译调试。

(二)ChessInternalFrame.java

1.ChessInternalFrame.java是五子棋游戏子系统的核心,实现与其他模块的接口。

2.构造函数    public ChessInternalFrame(String title) 设置了棋盘面板,定义了各项菜单,及其相应的下拉选项。例如下面的“游戏”菜单下有“开局,棋盘,音乐,退出”四个选项。    

    //“游戏”菜单

        JMenu gameMenu = new JMenu("游戏");

        mbar.add(makeMenu(gameMenu, new Object[] {

            "开局", "棋盘",null, "音乐",null,"退出"}, this));

        boardMenuItem=gameMenu.getItem(1);

3.方法 public  JMenu makeMenu(Object parent, Object items[], Object target){

设置各个菜单项的方法。

4.方法public JRadioButtonMenuItem makeRadioButtonMenuItem(Object item, Object target){

设置各个单选菜单的方法,实现相应的功能。例如以下对“开局”菜单的处理if(arg.equals("开局")){

            if(!this.isnet)

            //如果是本地对弈,那么直接调用方法restart()开始新的一局

                restart();

            else{

            //如果是网路对战,那么首先给对方发送一个新开局命令,然后调用restart()方法

                byte msg[]=new byte[2];

                msg[0]=-1;

                msg[1]=0;

                //新开局命令,第一个字节为-1,第二个字节为0

                try{

                    out.write(msg);        //将新开局命令传送给对方

                    System.out.println("开局信息发送出>>>>>>>>>");

                }catch(IOException ex){

                    System.out.println(ex);

                }

                try{

                    Thread.sleep(1000);

                }catch(InterruptedException ito){

                    System.out.println(ito);

                }

                if(this.isserver)

                    this.istoken=true;

                else

                    this.istoken=false;

                restart();

            }

        }

(三) ChessModel.java

1. ChessModel.java主要实现本地对弈,网络对弈不同情况下五子棋游戏进行的方法,以及输赢的判断和提示。

2.以下方法用条件判断语句,分别对本地对弈,网络对弈进行处理。

public void play(int x,int y){

        if(badxy(x,y))

            return;

        if(chessExist(x,y)){

            this.isExist=true;

            return;

        }

        else

            this.isExist=false;

        if(!ChessInternalFrame.isnet){    //如果是本地对弈

            if(getisOdd()){

                setisOdd(false);

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

            }

            else{

                setisOdd(true);

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

            }

        }

        else{                    //如果时网络对弈

            if(ChessInternalFrame.istoken)    //如果x,y是本方走棋时的坐标

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

            else                //如果x,y是对方传送过来的坐标

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

         }

    }

3.输赢的判断和提示

//判断输赢的方法

public boolean judgeSuccess(int x,int y,boolean isodd){

public void showSuccess(JPanel jp){

        JOptionPane.showMessageDialog(jp,"恭喜!你赢了游戏!",

        "胜利",JOptionPane.INFORMATION_MESSAGE);

    }

    public void showDefeat(JPanel jp){

        JOptionPane.showMessageDialog(jp,"你输了游戏,请继续努力!",

        "失败",JOptionPane.INFORMATION_MESSAGE);

    }

(四)MainPanel.java

1.主要实现对鼠标事件的处理,以及相应走棋声音和输赢信息提示的控制。

2.方法分别说明本地对弈和网络对弈对鼠标事件的不同处理。

 public void mousePressed(MouseEvent evt){

    public void mousePressed(MouseEvent evt){

        int x = (evt.getX()-10) / 20;    //鼠标点击处对应棋盘上的x坐标

        int y = (evt.getY()-10) / 20;    //鼠标点击处对应棋盘上的y坐标

        if (evt.getModifiers()==MouseEvent.BUTTON1_MASK){

            //本地对弈的鼠标事件处理

            if(!ChessInternalFrame.isnet){

                cm.play(x,y);

                System.out.println(cm.getisOdd()+" "+cm.getarrMapShow()[x][y]);

                repaint();

                if(cm.judgeSuccess(x,y,cm.getisOdd())){

                    cm.showSuccess(this);

                    evt.consume();

                    ChessInternalFrame.iscomputer=false;

                }

                if(ChessInternalFrame.iscomputer&&!cm.getisExist()){

                //判断是否为人机对弈

                    cm.computerdo(cm.getWidth(),cm.getHeight());    //计算机走棋

                    repaint();    //重绘棋盘

                    if(cm.judgeSuccess(cm.getX(),cm.getY(),cm.getisOdd())){

                        cm.showDefeat(this);

                        evt.consume();    //销毁鼠标事件

                    }

                }

            }

            //网络对弈的鼠标事件处理

            else{

                if(ChessInternalFrame.istoken){

                //只有在本方获得令牌时方可点击棋盘走棋

                    cm.play(x,y);

            //将ChessModel实例cm中与坐标x,y对应的二维数组arrMapShow的元素置位为1

                    System.out.println("local   :"+" 

                     "+cm.getarrMapShow()[x][y]+                                                                   

                    " coordinate: ("+x++y+")");

                    repaint();

                    ChessInternalFrame.istoken=false;    //令牌交给对方

                    byte msg[]=new byte[2];            //棋盘坐标命令

                    msg[0]=(byte)x;            //第一个字节为x坐标

                    msg[1]=(byte)y;            //第二个字节为y坐标

                    OutputStream out=cf.getout();        //得到连接套接字的输出流

                    try{

                        out.write(msg);            //将棋盘坐标命令传送给对方

                    }catch(IOException ex){

                        System.out.println(ex);

                    }

3. 走棋声音的控制

}

        postsound.play();            //走棋声音

    }

(五)SocketThread.java 

1. SocketThread.java主要实现网络对弈的进行,包括网络连接和中断,网络对弈下双方的通讯。

2.构造函数接收并记录网络连接和对弈前的信息,为判断开局作准备。

    public SocketThread(ChessInternalFrame cframe,MainPanel mpanel){

        this.cf=cframe;

        this.mp=mpanel;

        this.socketin=cframe.getin();

        this.socketout=cframe.getout();

        this.socket=cframe.getsocket();

    }

3.方法public void run(){

在不同情况下实现双方的提示和通讯,例如发出开局命令

        if(message[1]==0){        //新开局命令

        System.out.println("收到开局信息>>>>>>>>>>");

(六)Sound.java

1. Sound.java由5个方法组成,控制五子棋游戏过程中声音的播放

2.构造函数

    public Sound(String soundfile) {

在条件满足下连接声音文件

    url = urlLoader.findResource("audio/"+soundfile);

        } catch (Exception e) {

3. public void getMedia() {

        if (url != null && soundData == null) {

            soundData = ap.newAudioClip(url);

        }

        if (soundData == null) {

            System.out.println("SoundArea: Unable to load data "+url);

        }

实现提示信息

如无法下载数据

if (soundData == null) {

System.out.println("SoundArea: Unable to load data "+url);}

4. 方法public void play()在条件满足下开始声音的播放

5. 方法在public void loop(){

        soundData.loop();

        hasPlayed = true;

    }

条件满足下暂停声音的播放

6. 方法public void stop(){soundData.stop();

        hasPlayed = false;}

在条件满足下停止声音的播放

(七)运行结果

1.Mental视图:

2.Montif视图:

3.Windows视图:

4.“关于”的提示

5本地对弈与网络对弈

6.游戏结果判断

五、实验总结

1.实验过程中源程序的编辑要注意大小写,否则造成编译错误。所以操作过程要细心谨慎。

2.出现错误时不要气馁,要善于利用提示信息,全面镇定考虑错误的原因。,从错误中学习经验。

3.要联系程序的上下语句找出错误,在MainPanel.java中

        if(v == 2 ){

            g.setColor(Color.gray);

            g.drawOval(x-8,y-8,16,16);

            g.setColor(Color.red);

            g.fillOval(x-8,y-8,16,16);

语句出现错误,后仔细检查,从该语句前的if(v == 1 )语句中得到启示,分别在前面加上g.即可

    4.遇到疑问,先思考,再多与同学讨论或与老师交流,这样印象深刻又提高效率。下载本文

显示全文
专题