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

}

}

[代码运行效果截图]

[源代码打包下载]

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

java实现五子棋_java实现五子棋相关推荐

  1. java绘制棋盘_java绘制五子棋棋盘

    本文实例为大家分享了java绘制五子棋棋盘的具体代码,供大家参考,具体内容如下 源码: import javax.imageio.ImageIO; import javax.swing.*; impo ...

  2. java五子棋_java实现五子棋

    一.需求分析 1.画一个15x15的棋盘版面 2.功能按钮:开始游戏,悔棋,认输 3.单选按钮:人人对战.人机对战 4.要求:在棋盘上下棋子,棋子必须要在交叉点上:同一个位置上不能有再下棋子:棋子不能 ...

  3. java绘制五子棋_java绘制五子棋棋盘

    免费资源网,https://freexyz.cn/ 本文实例为大家分享了java绘制五子棋棋盘的具体代码,供大家参考,具体内容如下 源码: import javax.imageio.ImageIO; ...

  4. java 网络五子棋_Java实现五子棋网络版

    本文实例为大家分享了Java实现五子棋网络版的具体代码,供大家参考,具体内容如下 需求分析: 对于网络五子棋而言,在普通五子棋的基础上需要添加以下功能: 1.拥有服务器端和客户端,用户通过客户端登录服 ...

  5. java中五子棋_Java简单五子棋的实现

    在经过了几天的学习后,已经可以实现一个简单的五子棋游戏了,下面我就写一下编写程序 的过程和自己在这个过程中的心得体会. 第一步:绘制棋盘和实现落子 具体的过程就不写了,我是绘制了一个15*15的棋盘, ...

  6. java 控制台五子棋_java控制台五子棋

    package frank; import java.io.*; public class App { //棋盘 private String[][] board; //棋盘大小 private st ...

  7. 五子棋java百度文库_JAVA课程设计 五子棋(内附完整代码).doc

    JAVA课程设计 五子棋(内附完整代码) JAVA课程设计 设计题目:五子棋游戏 简要的介绍五子棋 五子棋的起源 五子棋,又被称为"连五子.五子连.串珠.五目.五目碰.五格.五石.五法.五联 ...

  8. java实训五子棋_Java棋类游戏实践之单机版五子棋

    本文实例讲述了java实现的五子棋游戏代码,分享给大家供大家参考,具体代码如下 一.实践目标 1.掌握JavaGUI界面设计 2.掌握鼠标事件的监听(MouseListener,MouseMotion ...

  9. java实现五子棋窗口_Java swing五子棋的实现方法

    今天给大家介绍一下如何用Java swing实现五子棋的开发即用Java开发图形界面程序五子棋,代码由于太多,只贴部分,最下面会附上下载地址,废话不多说,下面我们先看一下运行结果: 接下来我们看代码: ...

最新文章

  1. 2022-2028年中国自动化设备市场研究及前瞻分析报告
  2. ERP已死,中台已凉,DDD称王!
  3. 教程 | 单级式目标检测方法概述:YOLO与SSD
  4. matlab基于ssd的角点匹配_基于关键点的目标检测
  5. 图书管理系统数据字典_2. 结构化——数据字典
  6. jQuery学习笔记系列(一)——入口函数,jQuery对象和DOM对象,jQuery选择器、样式操作、效果(显示隐藏、滑入滑出、淡入淡出、自定义动画、停止动画队列)
  7. linux命令txt,Linux常用命令(非常详细!)
  8. 再也不学AJAX了!(一)AJAX概述
  9. sqlserver2000中字符串类型的日期如何比较大小
  10. xiao zhang   jia you
  11. oracle的采购管理模块,ORACLEERP采购管理模块操作手册
  12. 从GPU诞生说起:AMD统一渲染架构回顾及展望(转)
  13. 用给定的key对字符串进行sha256加密-postman预处理
  14. Python整数求和
  15. 操作系统的分段与逻辑地址和转换物理地址
  16. [Unity]寻路导航
  17. Building the main Guest Additions module [failed]
  18. pdf文档页码怎么添加
  19. 在C++ 中的清屏函数是什么?
  20. [eNSP]→静态路由、负载分担、备用链路

热门文章

  1. KB5022282 0x800F0922 安装更新失败
  2. python设定时间间隔和时间范围执行任务
  3. 给openlab搭建web网站
  4. 第十二届蓝桥杯大赛软件赛省赛 C/C++ 大学 B 组 填空题
  5. 【2023复旦微电子提前批笔试题】~ 题目及参考答案
  6. LeetCode in Python-14. Longest Common Prefix 最长公共前缀
  7. 计算机桌面导航栏中删除内容,电脑任务栏下面有个搜索的东东怎么删了
  8. 护理自考本科科目计算机应用基础,护理自考本科需要考哪些科目 一共考几门...
  9. 关于程序员如何提高自己的一些感言
  10. lldb 常用命令整理