java实现五子棋_java实现五子棋
[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实现五子棋相关推荐
- java绘制棋盘_java绘制五子棋棋盘
本文实例为大家分享了java绘制五子棋棋盘的具体代码,供大家参考,具体内容如下 源码: import javax.imageio.ImageIO; import javax.swing.*; impo ...
- java五子棋_java实现五子棋
一.需求分析 1.画一个15x15的棋盘版面 2.功能按钮:开始游戏,悔棋,认输 3.单选按钮:人人对战.人机对战 4.要求:在棋盘上下棋子,棋子必须要在交叉点上:同一个位置上不能有再下棋子:棋子不能 ...
- java绘制五子棋_java绘制五子棋棋盘
免费资源网,https://freexyz.cn/ 本文实例为大家分享了java绘制五子棋棋盘的具体代码,供大家参考,具体内容如下 源码: import javax.imageio.ImageIO; ...
- java 网络五子棋_Java实现五子棋网络版
本文实例为大家分享了Java实现五子棋网络版的具体代码,供大家参考,具体内容如下 需求分析: 对于网络五子棋而言,在普通五子棋的基础上需要添加以下功能: 1.拥有服务器端和客户端,用户通过客户端登录服 ...
- java中五子棋_Java简单五子棋的实现
在经过了几天的学习后,已经可以实现一个简单的五子棋游戏了,下面我就写一下编写程序 的过程和自己在这个过程中的心得体会. 第一步:绘制棋盘和实现落子 具体的过程就不写了,我是绘制了一个15*15的棋盘, ...
- java 控制台五子棋_java控制台五子棋
package frank; import java.io.*; public class App { //棋盘 private String[][] board; //棋盘大小 private st ...
- 五子棋java百度文库_JAVA课程设计 五子棋(内附完整代码).doc
JAVA课程设计 五子棋(内附完整代码) JAVA课程设计 设计题目:五子棋游戏 简要的介绍五子棋 五子棋的起源 五子棋,又被称为"连五子.五子连.串珠.五目.五目碰.五格.五石.五法.五联 ...
- java实训五子棋_Java棋类游戏实践之单机版五子棋
本文实例讲述了java实现的五子棋游戏代码,分享给大家供大家参考,具体代码如下 一.实践目标 1.掌握JavaGUI界面设计 2.掌握鼠标事件的监听(MouseListener,MouseMotion ...
- java实现五子棋窗口_Java swing五子棋的实现方法
今天给大家介绍一下如何用Java swing实现五子棋的开发即用Java开发图形界面程序五子棋,代码由于太多,只贴部分,最下面会附上下载地址,废话不多说,下面我们先看一下运行结果: 接下来我们看代码: ...
最新文章
- 2022-2028年中国自动化设备市场研究及前瞻分析报告
- ERP已死,中台已凉,DDD称王!
- 教程 | 单级式目标检测方法概述:YOLO与SSD
- matlab基于ssd的角点匹配_基于关键点的目标检测
- 图书管理系统数据字典_2. 结构化——数据字典
- jQuery学习笔记系列(一)——入口函数,jQuery对象和DOM对象,jQuery选择器、样式操作、效果(显示隐藏、滑入滑出、淡入淡出、自定义动画、停止动画队列)
- linux命令txt,Linux常用命令(非常详细!)
- 再也不学AJAX了!(一)AJAX概述
- sqlserver2000中字符串类型的日期如何比较大小
- xiao zhang jia you
- oracle的采购管理模块,ORACLEERP采购管理模块操作手册
- 从GPU诞生说起:AMD统一渲染架构回顾及展望(转)
- 用给定的key对字符串进行sha256加密-postman预处理
- Python整数求和
- 操作系统的分段与逻辑地址和转换物理地址
- [Unity]寻路导航
- Building the main Guest Additions module [failed]
- pdf文档页码怎么添加
- 在C++ 中的清屏函数是什么?
- [eNSP]→静态路由、负载分担、备用链路
热门文章
- KB5022282 0x800F0922 安装更新失败
- python设定时间间隔和时间范围执行任务
- 给openlab搭建web网站
- 第十二届蓝桥杯大赛软件赛省赛 C/C++ 大学 B 组 填空题
- 【2023复旦微电子提前批笔试题】~ 题目及参考答案
- LeetCode in Python-14. Longest Common Prefix 最长公共前缀
- 计算机桌面导航栏中删除内容,电脑任务栏下面有个搜索的东东怎么删了
- 护理自考本科科目计算机应用基础,护理自考本科需要考哪些科目 一共考几门...
- 关于程序员如何提高自己的一些感言
- lldb 常用命令整理