java实现五子棋_java实现五子棋

这是一个用Java编写的五子棋游戏程序,实现了棋盘的绘制、棋子的落子判断以及游戏胜利条件的检查。玩家可以在指定区域内点击放置棋子,程序会自动检查是否有五子连珠并判断游戏是否结束。
摘要由CSDN通过智能技术生成

[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();

}

}

[代码运行效果截图]

pic_56a5e2dd1816573437.png

[源代码打包下载]

7ab7b94785bbdb79d4aaa6009386543f.gif五子棋.zip(50积分)[116 次下载]

694748ed64b9390909c0d88230893790.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值