在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Java语言基础 → Java版-五子棋源码

Java版-五子棋源码

Java语言基础

下载此实例
  • 开发语言:Java
  • 实例大小:0.09M
  • 下载次数:72
  • 浏览次数:1029
  • 发布时间:2020-09-29
  • 实例类别:Java语言基础
  • 发 布 人:Mister.wu
  • 文件格式:.zip
  • 所需积分:0
 相关标签: java 五子棋 源码

实例介绍

【实例简介】Java实现的简单五子棋
【实例截图】from clipboard
【核心代码】package com.ly.gui;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class MyFrame extends JFrame implements MouseListener {

/**

*/
private static final long serialVersionUID = 1L;
// 保存坐标
int x;
int y;
int x1;
int y1;
// 黑子数
// 白子数
// 1是黑下,2是白下
// 默认开始是黑旗先下
int flag = 1;
// 表示游戏是否结束
// true游戏开始,false游戏结束,不能再下
boolean canPlay = true;
// 保存之前下过的棋子的坐标
// '0'代表没有棋子,'1'代表黑棋,'2'代表白棋
int[][] allChess = new int[19][19];
// int [][]allChess=new int[25][25];
// 当前棋子的总数
int chessSum = 0;
BufferedImage bgImage = null;

JButton withdraw = new JButton("悔棋");
JButton restart = new JButton("重新开始");
JButton exit = new JButton("退出");
JPanel south = new JPanel();

public MyFrame() {
this.setTitle("五子棋");
setSize(630, 700);
setLayout(new BorderLayout());
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try {
bgImage = ImageIO.read(new File("C:\\Users\\Administrator\\Desktop\\1.png"));
} catch (IOException e1) {

e1.printStackTrace();
}
addMouseListener(this);// 将窗体加入监听

south.setLayout(new FlowLayout(FlowLayout.LEFT, 60, 30));

south.add(restart);
south.add(withdraw);
south.add(exit);
// 初始化按钮事件监听器内部类
MybuttonListener buttonListener = new MybuttonListener();
// 将三个按钮事件注册监听事件
restart.addActionListener(buttonListener);
withdraw.addActionListener(buttonListener);
exit.addActionListener(buttonListener);
// 将按钮面板加到窗体的南部
this.add(south, BorderLayout.SOUTH);

setVisible(true);
}

public void paint(Graphics g) {

int tempSum = chessSum;
// 棋盘
g.drawImage(bgImage, 8, 30, this);

for (int colum = 58; colum < 600; colum = colum 30) {// 行
g.drawLine(38, colum, 578, colum);
}
for (int rand = 38; rand < 600; rand = rand 30) {// 列
g.drawLine(rand, 58, rand, 598);
}
// 黑点
g.fillOval(122, 143, 10, 10);
g.fillOval(484, 143, 10, 10);
g.fillOval(122, 504, 10, 10);
g.fillOval(303, 353, 10, 10);
g.fillOval(484, 503, 10, 10);
g.fillOval(122, 355, 10, 10);
g.fillOval(484, 355, 10, 10);
g.fillOval(303, 145, 10, 10);
g.fillOval(303, 503, 10, 10);

for (int i = 0; i < allChess.length; i ) {
for (int j = 0; j < allChess.length; j) {
// 下黑子
if (allChess[i][j] == 1) {
int tempX = i * 30 38;// 左边界到棋盘的距离
int tempY = j * 30 58;// 上边界到棋盘的距离
g.setColor(Color.black);
g.fillOval(tempX - 13, tempY - 13, 25, 25);

}

// 下白子
if (allChess[i][j] == 2) {
int tempX = i * 30 38;
int tempY = j * 30 58;
g.setColor(Color.white);
g.fillOval(tempX - 13, tempY - 13, 25, 25);

}

}
}
// 最后棋子用红框表示
if (chessSum > 0) {
g.setColor(Color.red);
g.drawRect(x * 30 38 - 13, y * 30 58 - 13, 25, 25);
}
// g.setColor(Color.red);
// g.drawRect(x1*30 38-13, y1*30 58-13, 25,25);
chessSum ;
System.out.println("总数为" (chessSum - 1));
}

public void mouseClicked(MouseEvent e) {
x = e.getX();
y = e.getY();
// System.out.println("x=" e.getX() " " "y=" e.getY());
if (canPlay) {

if (x >= 38 && x <= 588 && y >= 58 && y <= 620) {

x = (x - 38) / 30;// 38起点,适应19x19
y = (y - 58) / 30;
if (allChess[x][y] == 0) {// 此点没有棋子,才可下
// 判断该由哪方下棋
if (flag == 1) {// '1'代表由黑方下
allChess[x][y] = 1;// '1'表示此处放黑棋
this.checkFive();// 判断黑棋是否五子相连

flag = 2;
} else {
allChess[x][y] = 2;// '2'表示此处放白棋
this.checkFive();// 判断白棋是否五子相连

flag = 1;// '1'代表由黑方下
}
this.repaint();
}
}
}

}

// 判断五子相连
public void checkFive() {
// 把要下的棋子颜色保存
int color = allChess[x][y];
// 计算已连棋子个数
int count = 1;

// 判断横向右边是否五子
for (int i = 1; i < 5; i ) {
if (x >= 15)
break;
if (color == allChess[x i][y]) {
count ;
}
checkWin(count);
}
count = 1;

// 判断横向左边是否五子
for (int i = 1; i < 5; i ) {
if (x <= 3)// 当棋子左边无法连成五子,直接退出
break;

if (color == allChess[x - i][y]) {
count ;
}
checkWin(count);
}
count = 1;

// 判断竖向下边是否五子
for (int i = 1; i < 5; i ) {
if (y >= 15)// 当棋子左边无法连成五子,直接退出
break;
if (color == allChess[x][y i]) {
count ;
}
checkWin(count);
}
count = 1;

// 判断竖向上边是否五子
for (int i = 1; i < 5; i ) {
if (y <= 3)// 当棋子竖向上边无法连成五子,直接退出
break;
if (color == allChess[x][y - i]) {
count ;
}
checkWin(count);
}
count = 1;

// 判断右斜上边是否五子
for (int i = 1; i < 5; i ) {
if (y <= 3 || x >= 15)// 当棋子右斜上边无法连成五子,直接退出
break;
if (color == allChess[x i][y - i]) {
count ;
}
checkWin(count);
}
count = 1;

// 判断左斜向下边是否五子
for (int i = 1; i < 5; i ) {
if (x <= 3 || y >= 15)// 当棋子左斜向下边无法连成五子,直接退出
break;

if (color == allChess[x - i][y i]) {
count ;
}
checkWin(count);
}
count = 1;

// 判断左斜向上边是否五子
for (int i = 1; i < 5; i ) {
if (x <= 3 || y <= 3)
break;
if (color == allChess[x - i][y - i]) {
count ;
}
checkWin(count);
}
count = 1;

// 判断右斜向下边是否五子
for (int i = 1; i < 5; i ) {
if (y >= 15 || x >= 15)
break;
if (color == allChess[x i][y i]) {
count ;
}
checkWin(count);

}
count = 1;

}

public void mouseEntered(MouseEvent e) {
x1 = e.getX();
y1 = e.getY();
if (x1 >= 38 && x1 <= 588 && y1 >= 58 && y1 <= 620) {

setCursor(new Cursor(Cursor.HAND_CURSOR));

}

}

public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub

}

public void mousePressed(MouseEvent arg0) {

}

public void mouseReleased(MouseEvent e) {

}

public void checkWin(int count) {

if (count >= 5) {// 五子相连

if (allChess[x][y] == 1) {
JOptionPane.showMessageDialog(this, "黑方胜出!!!!!!");
}
if (allChess[x][y] == 2) {
JOptionPane.showMessageDialog(this, "白方胜出!!!!!!");
}
canPlay = false;// 游戏结束
}
}

// 重新开始
public void restartGame() {
for (int i = 0; i < allChess.length; i ) {
for (int j = 0; j < allChess.length; j ) {
allChess[i][j] = 0;
}
}
flag = 1;// 默认开始是黑旗先下
canPlay = true;
repaint();
}

// 悔棋
public void goback() {
if (allChess[x][y] != 0) {// 当棋盘有棋子,才能悔棋
allChess[x][y] = 0;
if (flag == 1) {
flag = 2;
repaint();
} else {
flag = 1;
repaint();
}
}
}

// 按钮事件监听器内部类
class MybuttonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getSource() == restart) {
restartGame();
}
if (e.getSource() == withdraw) {
goback();
}
if (e.getSource() == exit) {
System.exit(0);
}
}
}
}


标签: java 五子棋 源码

实例下载地址

Java版-五子棋源码

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

第 1 楼 dyh7222 发表于: 2020-10-10 08:34 14
很好值得借鉴。。

支持(0) 盖楼(回复)

发表评论

(您的评论需要经过审核才能显示)

查看所有1条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警