用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

java实现五子棋

2016-01-25 作者: 阿啑牛人举报

[java]代码库

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
 
import javax.swing.JFrame;
import javax.swing.JOptionPane;
 
public class FiveChessFrame extends JFrame implements MouseListener {
 
    int width = Toolkit.getDefaultToolkit().getScreenSize().width;//屏幕宽度
    int height = Toolkit.getDefaultToolkit().getScreenSize().height;//屏幕高度
    int[][] allChess = new int[19][19];//用来保存全部棋子
    boolean canPlay = true;//判断游戏是否能继续
    int x = 0;//棋子的坐标
    int y = 0;
    boolean isBlack = true;//判断当前棋子的颜色
 
    //对窗口进行初始化
    public FiveChessFrame() {
        setTitle("五子棋");
        setSize(500, 500);
        setLocation((width - 500) / 2, (height - 500) / 2);
        setResizable(false);
        addMouseListener(this);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }
 
    //画五子棋
    public void paint(Graphics g) {
        g.setFont(new Font("黑体", Font.BOLD, 20));
        g.drawString("游戏信息", 120, 60);
        g.setFont(new Font("宋体", Font.BOLD, 12));
        g.drawString("黑方时间", 60, 480);
        g.drawString("白方时间", 260, 480);
 
        //画棋盘
        //画19条横线
        int y_index = 0;
        for (int i = 0; i < 19; i++) {
            g.drawLine(12, 73 + y_index, 372, 73 + y_index);
            y_index += 20;
        }
 
        //画19条纵线
        int x_index = 0;
        for (int i = 0; i < 19; i++) {
            g.drawLine(12 + x_index, 73, 12 + x_index, 433);
            x_index += 20;
        }
 
        //画四个点
        g.fillOval(70, 131, 4, 4);
        g.fillOval(310, 131, 4, 4);
        g.fillOval(70, 371, 4, 4);
        g.fillOval(310, 371, 4, 4);
 
        //画全部棋子
        for (int i = 0; i < 19; i++) {
            for (int j = 0; j < 19; j++) {
                if (this.allChess[i][j] == 1) {
                    //画黑子
                    int tempX = i * 20 + 12;
                    int tempY = j * 20 + 73;
                    g.fillOval(tempX - 7, tempY - 7, 14, 14);
                }
                if (this.allChess[i][j] == 2) {
                    //画白子
                    int tempX = i * 20 + 12;
                    int tempY = j * 20 + 73;
                    g.setColor(Color.WHITE);
                    g.fillOval(tempX - 7, tempY - 7, 14, 14);
                    g.setColor(Color.BLACK);
                    g.drawOval(tempX - 7, tempY - 7, 14, 14);
                }
            }
        }
    }
 
    @Override
    public void mouseClicked(MouseEvent e) {
        // TODO Auto-generated method stub
 
    }
 
    @Override
    public void mousePressed(MouseEvent e) {
        // TODO Auto-generated method stub
        if (canPlay == false) {
            return;
        }
        System.out.println(e.getX() + "---" + e.getY());
        x = e.getX();
        y = e.getY();
        if (x >= 12 && x <= 372 && y >= 73 && y < 433) {
            x = (x - 12) / 19;
            y = (y - 73) / 19;
            if (allChess[x][y] == 0) {
                if (this.isBlack == true) {
                    allChess[x][y] = 1;
                    isBlack = false;
                } else {
                    allChess[x][y] = 2;
                    isBlack = true;
                }
                //判断这个棋子是否和其他棋子连成5个
                boolean winFlag = this.Check_Win();
                if (winFlag) {
                    JOptionPane.showMessageDialog(this, "游戏结束,"
                            + (allChess[x][y] == 1 ? "黑方" : "白方") + "获胜");
                    canPlay = false;
                }
            } else {
                JOptionPane.showMessageDialog(this, "当前已有棋子,不能再下了!");
            }
 
            this.repaint();
        }
    }
 
    //判断是否获胜
    private boolean Check_Win() {
        boolean flag = false;
        //保存共有多少相同颜色的棋子相连
        int count = 1;
        //先判断横向,特点,y坐标相同,即allChess[x][y]中y相同
        //判断这个棋子的颜色
        int color = this.allChess[x][y];
        count = Check_Count(1, 0, color);
        if (count >= 5) {
            flag = true;
        } else {
            //判断纵向
            count = Check_Count(0, 1, color);
            if (count >= 5) {
                flag = true;
            } else {
                //判断右上,左下
                count = Check_Count(1, -1, color);
                if (count >= 5) {
                    flag = true;
                } else {
                    //判断左上,右下
                    count = Check_Count(1, 1, color);
                    if (count >= 5) {
                        flag = true;
                    }
                }
            }
        }
        return flag;
    }
     
    //得到棋子的数目
    private int Check_Count(int xChange, int yChange, int color) {
        int count = 1;
        int tempX = xChange;
        int tempY = yChange;
        while (color == this.allChess[x + xChange][y + yChange]) {
            count++;
            if (xChange != 0) {
                xChange++;
            }
            if (yChange != 0) {
                if (yChange > 0)
                    yChange++;
                if (yChange < 0)
                    yChange--;
            }
        }
        xChange = tempX;
        yChange = tempY;
        while (color ==
                 
                this.allChess[x - xChange][y - yChange]) {
            count++;
            if (xChange != 0) {
                xChange++;
            }
            if (yChange != 0) {
                if (yChange > 0)
                    yChange++;
                if (yChange < 0)
                    yChange--;
            }
        }
        return count;
    }
 
    @Override
    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub
 
    }
 
    @Override
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub
 
    }
 
    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub
 
    }
 
}
 
//测试类
public class Test {
    public static void main(String[] args){
        new FiveChessFrame();
    }
}

[代码运行效果截图]


java实现五子棋

[源代码打包下载]




网友评论    (发表评论)

共9 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...