五子棋JAVA语言课程设计报告

《Java语言程序设计》

课程设计报告

分    院:      电 信 分 院        

班    级:      _电子商务1班___    

姓    名:        何芳林          

学    号:       20100210460123     

指导教师:         吴军良           

课设时间:20##-12-20至20##-12-31

二O一一 年 十 二月 二十 日


目  录

一、设计要求…………………………………………....2

二、设计步骤…………………………………………....2

 2.1程序流程图………………………….…………...2

 2.2程序的功能分配……………………….………...3

三、设计正文…………………………………………....6

 3.1创建棋盘类……………………………………….6

 3.2判断输赢功能实现……………………………….9

 3.3测试结果……………………………………….....9

四、心得体会…………………………………………...12

五、参考文献…………………………………………...12

附录 (源代码)……………………………………….13

一、课程设计要求

设计一个15╳15围棋棋盘,由两玩家交替进行对战,并可以实现以下功能:

1.选择落子的先后顺序 

2.重置棋盘

3.刷新重新开始

4.退出提示

并且规定退出者判为负,但退出过程中要有提示。以防不小心点错了。

最后判断某一方是否为五子连珠。

实现一个简单的多用户五子棋的游戏程序,包括如下两个界面

(1)选择对弈桌(执黑、执白)。

(2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负);

二、设计步骤

2.1程序流程图

2.2 程序的功能分配

a. 棋盘的绘制

public void draw_qipan(Graphics G) //画棋盘 15*15{ 

        G.setColor(Color.lightGray);

        G.fill3DRect(10,10,300,300,true);

        G.setColor(Color.black);

        for(int i=1;i<16;i++){

            G.drawLine(20,20*i,300,20*i);

            G.drawLine(20*i,20,20*i,300);

        }

}             

b. 添加按钮

Button b1=new Button("开始");

    Button b2=new Button("重置游戏");

    Label lblWin=new Label(" ");

    Checkbox ckbHB[]=new Checkbox[3];

    Button exist = new Button("退出");

    public void init(){

        ckbHB[0]=new Checkbox("执白",ckgHB,false);

        ckbHB[1]=new Checkbox("执黑",ckgHB,false);

        ckbHB[2]=new Checkbox("观看",ckgHB, false);

    }

c. 鼠标棋子的触发事件

public void mouseClicked(MouseEvent e) {

        Graphics g=getGraphics();

        int x1,y1;

        x1=e.getX();

        y1=e.getY();

        if (e.getX()<20 || e.getX()>300 || e.getY()<20 || e.getY()>300) {

            return;

        }

        if (x1%20>10) {

            x1+=10;

        }

        if(y1%20>10) {

    y1+=10;

        }

        x1=x1/20*20;

        y1=y1/20*20;

        set_Qizi(x1,y1);

        m*=(-1);

     }

d. 按钮的触发事件

   public void actionPerformed(ActionEvent e) {

        Graphics g=getGraphics();

        if (e.getSource()==b1) {

            Game_start();

        }

        else{

            Game_re();

        }

        if(e.getSource()==exist){

            Game_re();

            lblWin.setText(Get_qizi_color(color_Qizi)+"输了!");

            intGame_Start=0;

        } 

e. 判断落子的位置及画出相应的黑白棋子

public void set_Qizi(int x,int y) //落子{

        if (intGame_Start==0) //判断游戏未开始{

            return;

        }

        if (intGame_Body[x/20][y/20]!=0) {

            return;

        }

        Graphics g=getGraphics();

        if (color_Qizi==1)//判断黑子还是白子{

            g.setColor(Color.black);

            color_Qizi=0;

        }

        else{

            g.setColor(Color.white);

            color_Qizi=1;

        }

        g.fillOval(x-10,y-10,20,20);

        intGame_Body[x/20][y/20]=color_Qizi+1;

f. 判断胜负

if (Game_win_1(x/20,y/20)) //判断输赢1{

            lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");

            intGame_Start=0;

            }

        if (Game_win_2(x/20,y/20)) //判断输赢2{

            lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");

            intGame_Start=0;

        }

        if (Game_win_3(x/20,y/20)) //判断输赢3{

            lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");

            intGame_Start=0;

        }

        if (Game_win_4(x/20,y/20)) //判断输赢4{

            lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");

            intGame_Start=0;

        }

 }

三、设计正文

3.1创建棋盘类

Public class WcyChess extends Applet implements ActionListener,MouseListener,MouseMotionListener,ItemListener{

    int color_Qizi=0;//旗子的颜色标识 0:白子 1:黑子

    int intGame_Start=0;//游戏开始标志 0未开始 1游戏中

    int intGame_Body[][]=new int[16][16]; //设置棋盘棋子状态

    int m=-1;

    Button b1=new Button("开始");

    Button b2=new Button("重置游戏");

    Label lblWin=new Label(" ");

    Checkbox ckbHB[]=new Checkbox[3];

    Button exist = new Button("退出");

    CheckboxGroup ckgHB=new CheckboxGroup();

    NetchatClient chat=new NetchatClient();

    public void init(){

        setLayout(null);

        addMouseListener(this);

        add(b1);

        b1.setBounds(330,50,80,30);

        b1.addActionListener(this);

        add(b2);

        b2.setBounds(330,90,80,30);

        b2.addActionListener(this);

        ckbHB[0]=new Checkbox("执白",ckgHB,false);

        ckbHB[0].setBounds(320,20,60,30);

        ckbHB[1]=new Checkbox("执黑",ckgHB,false);

        ckbHB[1].setBounds(380,20,60,30);

        ckbHB[2]=new Checkbox("观看",ckgHB, false);

        add(ckbHB[0]);

        add(ckbHB[1]);

        add(ckbHB[2]);

        ckbHB[0].addItemListener(this);

        ckbHB[1].addItemListener(this);

        add(lblWin);

        lblWin.setBounds(330,180,80,30);

        lblWin.setBackground(Color.red);

        lblWin.setText("胜利者!");//没有显示?

        ckbHB[2].setBounds(440, 20,60, 30);

        add(exist);

        exist.setBounds(330,130,80,30);

        exist.addActionListener(this);

//      add(chat);chat.setBounds(20, 500, 300, 300);

        chat.frame();

        chat.setVisible(true);

        Game_start_csh();

        setSize(500,600);

        setVisible(true);

    }

    public void itemStateChanged(ItemEvent e) {

        if (ckbHB[0].getState()) //选择黑子还是白子{

            color_Qizi=0;

        }

        else{

            color_Qizi=1;

        }

    }

    public void mousePressed(MouseEvent e){}

    public void mouseClicked(MouseEvent e) {

        Graphics g=getGraphics();

        int x1,y1;

        x1=e.getX();

        y1=e.getY();

        if (e.getX()<20 || e.getX()>300 || e.getY()<20 || e.getY()>300) {

            return;

        }

        if (x1%20>10) {

            x1+=10;

        }

        if(y1%20>10) {

            y1+=10;

        }

        x1=x1/20*20;

        y1=y1/20*20;

        set_Qizi(x1,y1);

        m*=(-1);

    }

    public void actionPerformed(ActionEvent e) {

        Graphics g=getGraphics();

        if (e.getSource()==b1) {

            Game_start();

        }

        else    {

            Game_re();

        }

        if(e.getSource()==exist){

            Game_re();

            lblWin.setText(Get_qizi_color(color_Qizi)+"输了!");

            intGame_Start=0;

        }

    }

    public void mouseEntered(MouseEvent e){}

    public void mouseExited(MouseEvent e){}

    public void mouseReleased(MouseEvent e){}

    public void mouseDragged(MouseEvent e){}

    public void mouseMoved(MouseEvent e){}

    public void paint(Graphics g) {

        draw_qipan(g);

}

3.2判断输赢功能实现

if (Game_win_1(x/20,y/20)){ //判断输赢1

            lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");

            intGame_Start=0;

}

if (Game_win_2(x/20,y/20)){ //判断输赢2

            lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");

            intGame_Start=0;

}

        if (Game_win_3(x/20,y/20)) //判断输赢3{

            lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");

            intGame_Start=0;

}

        if (Game_win_4(x/20,y/20)) //判断输赢4{

            lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");

            intGame_Start=0;

}

3.3 测试结果

a. 进入游戏界面

游戏开始的界面有三个选择项,用户可以选择相应的角色,选择

完毕后点击开始进入游戏。

b. 选择角色,开始下棋

首先达到五个棋子连在一块的赢了,并在红色区域显示谁赢了!

c. 下完后,重新开始

下完一盘后游戏停止,点击重新开始,界面回到初始界面,选择角色继续游戏.

d.游戏中点退出,自动判输

在下棋的过程当中谁中途退出,即点击退出,系统自动判断谁输


四、课程设计心得体会

通过此次课程设计,将我本学期所学的JAVA知识得到巩固和应用,在设计的过程中我遇到了很到问题,不过在老师和同学们的帮助和自己的思考下还是很好的完成了。这此课程设计还让我懂得了写程序不能闭门造车,要努力拓宽知识面,开阔视野,拓展思维。它还让我学会了在网上查阅那些无限的资料。由于自己的分析设计和程序经验不足,该系统设计和实现过程中,还有许多没有完善的地方,比如用户界面设计不够美观,异常出错处理比较差等多方面问题,这些都有待进一步完善和提高。对于文中出现的不足和系统中出现的问题敬请老师指导。

五、参考文献

1. 吴其庆编著.Java程序设计实例教程.北京:冶金工业出版社

2. 柳西玲.许斌编著.Java语言应用开发基础.北京:清华大学出版社

3.丁振凡 Java 语言实用教程 :北京邮电大学出版社

附录 源代码

import java.net.*;

import java.io.*;

import java.applet.*;

import java.awt.*;

import java.awt.event.*;

import java.applet.Applet;

import java.awt.Color;

public class wuziqi extends Applet implements ActionListener,MouseListener,MouseMotionListener,ItemListener{

int color_Qizi=0;//旗子的颜色标识 0:白子 1:黑子

int intGame_Start=0;//游戏开始标志 0未开始 1游戏中

int intGame_Body[][]=new int[16][16]; //设置棋盘棋子状态

                             int m=-1;

                             Button b1=new Button("开始");

                             Button b2=new Button("重新开始");

                             Label lblWin=new Label(" ");

                             Checkbox ckbHB[]=new Checkbox[3];

                             Button exist = new Button("退出");

                             CheckboxGroup ckgHB=new CheckboxGroup();

                             public void init(){

                                setLayout(null);

                                addMouseListener(this);

                                add(b1);

                                b1.setBounds(330,50,80,30);

                                b1.addActionListener(this);

                                add(b2);

                                b2.setBounds(330,90,80,30);

                                b2.addActionListener(this);

                                ckbHB[0]=new Checkbox("执白",ckgHB,false);

                                ckbHB[0].setBounds(320,20,60,30);

                                ckbHB[1]=new Checkbox("执黑",ckgHB,false);

                                ckbHB[1].setBounds(380,20,60,30);

                                ckbHB[2]=new Checkbox("观看",ckgHB, false);

                                add(ckbHB[0]);

                                add(ckbHB[1]);

                                add(ckbHB[2]);

                                ckbHB[0].addItemListener(this);

                                ckbHB[1].addItemListener(this);

                                add(lblWin);

                                lblWin.setBounds(330,180,80,30);

                                lblWin.setBackground(Color.red);

                                lblWin.setText("胜利者!");//没有显示?

                                ckbHB[2].setBounds(440, 20,60, 30);

                                add(exist);

                                exist.setBounds(330,130,80,30);

                                exist.addActionListener(this);

                                Game_start_csh();

                                setSize(500,600);

                                setVisible(true);

                             }

                             public void itemStateChanged(ItemEvent e){

                                if (ckbHB[0].getState()) //选择黑子还是白子

                                {

                                    color_Qizi=0;

                                }

                                else

                                {

                                    color_Qizi=1;

                                }

                             }

                             public void mousePressed(MouseEvent e){}

                             public void mouseClicked(MouseEvent e){

                                Graphics g=getGraphics();

                                int x1,y1;

                                x1=e.getX();

                                y1=e.getY();

                                if (e.getX()<20 || e.getX()>300 || e.getY()<20 || e.getY()>300){

                                    return;

                                }

                                if (x1%20>10){

                                    x1+=10;

                                }

                                if(y1%20>10){

                                    y1+=10;

                                }

                                x1=x1/20*20;

                                y1=y1/20*20;

                                set_Qizi(x1,y1);

                                m*=(-1)

                             }

                             public void actionPerformed(ActionEvent e){

                                Graphics g=getGraphics();

                                if (e.getSource()==b1){

                                    Game_start();

                                }

                                else{

                                    Game_re();

                                }

                                if(e.getSource()==exist){

                                    Game_re();

//                                  color_Qizi=m;

                                lblWin.setText(Get_qizi_color(color_Qizi)+"输了!");

                                    intGame_Start=0;

                                   

                                }

                               

                             }

                             public void mouseEntered(MouseEvent e){}

                             public void mouseExited(MouseEvent e){}

                             public void mouseReleased(MouseEvent e){}

                             public void mouseDragged(MouseEvent e){}

                             public void mouseMoved(MouseEvent e){}

                             public void paint(Graphics g){

                                draw_qipan(g);

                             }

                             public void set_Qizi(int x,int y){ //落子

                                if (intGame_Start==0) {//判断游戏未开始

                                    return;

                                }

                                if (intGame_Body[x/20][y/20]!=0){

                                    return;

                                }

                                Graphics g=getGraphics();

                                if (color_Qizi==1){//判断黑子还是白子

                                    g.setColor(Color.black);

                                    color_Qizi=0;

                                }

                                else{

                                    g.setColor(Color.white);

                                    color_Qizi=1;

                                }

                                g.fillOval(x-10,y-10,20,20);

                                intGame_Body[x/20][y/20]=color_Qizi+1;

                                if (Game_win_1(x/20,y/20)){ //判断输赢1

                                lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");

                                    intGame_Start=0;

                                    }

                                if (Game_win_2(x/20,y/20)){ //判断输赢2{

                                    lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");

                                    intGame_Start=0;

                                }

                                if (Game_win_3(x/20,y/20)){ //判断输赢3

                                lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");

                                    intGame_Start=0;

                                }

                                if (Game_win_4(x/20,y/20)){ //判断输赢4

                                lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");

                                    intGame_Start=0;

                                }

                             }

                             public String Get_qizi_color(int x)

                             {

                                if (x==0)

                                {

                                    return "黑子";

                                }

                                else

                                {

                                    return "白子";

                                }

                             }

                             public void draw_qipan(Graphics G){ //画棋盘 15*15

                                G.setColor(Color.lightGray);

                                G.fill3DRect(10,10,300,300,true);

                                G.setColor(Color.black);

                                for(int i=1;i<16;i++){

                                    G.drawLine(20,20*i,300,20*i);

                                    G.drawLine(20*i,20,20*i,300);

                                }

                             }

                             public void Game_start(){ //游戏开始

                                intGame_Start=1;

                                Game_btn_enable(false);

                                b2.setEnabled(true);

                             }

                             public void Game_start_csh() {//游戏开始初始化

                                intGame_Start=0;

                                Game_btn_enable(true);

                                b2.setEnabled(false);

                                ckbHB[0].setState(true);

                                for (int i=0;i<16 ;i++ ){

                                    for (int j=0;j<16 ;j++ ){

                                        intGame_Body[i][j]=0;

                                    }

                                }

                                lblWin.setText("");

                             }

                             public void Game_re(){ //重新开始游戏

                                repaint();

                                Game_start_csh();

                             }

                             public void Game_btn_enable(boolean e){ //设置组件状态

                                b1.setEnabled(e);

                                b2.setEnabled(e);

                                ckbHB[0].setEnabled(e);

                                ckbHB[1].setEnabled(e);

                             }

                             public boolean Game_win_1(int x,int y){ //横向判断输赢

                                int x1,y1,t=1;

                                x1=x;

                                y1=y;

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

                                    if (x1>15){

                                        break;

                                    }

                                    if (intGame_Body[x1+i][y1]==intGame_Body[x][y]){

                                        t+=1;

                                    }

                                    else{

                                        break;

                                    }

                                }

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

                                    if (x1<1){

                                        break;

                                    }

                             if(intGame_Body[x1-i][y1]==intGame_Body[x][y]){

                                        t+=1;

                                    }

                                    else{

                                        break;

                                    }

                                }

                                if (t>4){

                                    return true;

                                }

                                else{

                                    return false;

                                }

                             }

                             public boolean Game_win_2(int x,int y){ //纵向判断输赢

                                int x1,y1,t=1;

                                x1=x;

                                y1=y;

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

                                    if (x1>15){

                                        break;

                                    }

                                    if (intGame_Body[x1][y1+i]==intGame_Body[x][y]){

                                        t+=1;

                                    }

                                    else{

                                        break;

                                    }

                                }

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

                                    if (x1<1){

                                        break;

                                    }

                                    if(intGame_Body[x1][y1-i]==intGame_Body[x][y]){

                                        t+=1;

                                    }

                                    else{

                                        break;

                                    }

                                }

                                if (t>4){

                                    return true;

                                }

                                else{

                                    return false;

                                }

                             }

                             public boolean Game_win_3(int x,int y){ //左斜判断输赢

                                int x1,y1,t=1;

                                x1=x;

                                y1=y;

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

                                    if (x1>15){

                                        break;

                                    }

                                    if (intGame_Body[x1+i][y1-i]==intGame_Body[x][y]){

                                        t+=1;

                                    }

                                    else{

                                        break;

                                    }

                                }

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

                                    if (x1<1){

                                        break;

                                    }

                                    if(intGame_Body[x1-i][y1+i]==intGame_Body[x][y]){

                                        t+=1;

                                    }

                                    else{

                                        break;

                                    }

                                }

                                if (t>4){

                                    return true;

                                }

                                else{

                                    return false;

                                }

                             }

                             public boolean Game_win_4(int x,int y){ //左斜判断输赢

                                int x1,y1,t=1;

                                x1=x;

                                y1=y;

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

                                    if (x1>15){

                                        break;

                                    }

                                    if (intGame_Body[x1+i][y1+i]==intGame_Body[x][y]){

                                        t+=1;

                                    }

                                    else{

                                        break;

                                    }

                                }

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

                                    if (x1<1){

                                        break;

                                    }

                             if(intGame_Body[x1-i][y1-i]==intGame_Body[x][y]){

                                        t+=1;

                                    }

                                    else{

                                        break;

                                    }

                                }

                                if (t>4){

                                    return true;

                                }

                                else{

                                    return false;

                                }

                             }

}

<applet code="wuziqi.class"height=500 width=600>

</applet>

相关推荐