@SuppressWarnings("ALL")public class MyFrame extendsFrame {private static int y;//鼠标点击的X轴

private static int x;//鼠标点击的Y轴

private int[][] xY = new int[400][2];//定义二维数组x_y来保存每一个棋子的坐标,用于界面的展示

private int a = 0;//定义一个变量表示已经保存了的坐标数

private static String[][] str = new String[20][20];//定义一个二维数组str来保存每一个棋子的位置和颜色,用于判断输赢

private boolean isWhite = true;//棋子的颜色是否为白色

static boolean flagWin = false;//是否分出输赢

private boolean isClick = false;//是否点击了鼠标

private int win;//判断是白棋赢还是黑棋赢,返回0,还没有人赢,返回1,白棋赢,返回2,黑棋赢

private String whoWin = "";//谁赢了

/*** 初始化str,二维数组str来保存每一个棋子的位置和颜色,用于判断输赢*/

private static voidinitStr() {//初始化str

for (int i = 0; i < str.length; i++) {for (int j = 0; j < str[0].length; j++) {

str[i][j]= "*";

}

}

}/*** 判断输赢,返回0,还没有人赢,返回1,白棋赢,返回2,黑棋赢*/

private static intwin(String s) {final int b = 1;final int h = 2;int win = 0;for (int i = 0; i < str.length; i++) {for (int j = 0; j < str[0].length; j++) {//横向的判断

if (j < str[0].length - 4) {if (s.equals(str[i][j]) && s.equals(str[i][j + 1])&& s.equals(str[i][j + 2])&& s.equals(str[i][j + 3])&& s.equals(str[i][j + 4])) {//返回0,还没有人赢,返回1,白棋赢,返回2,黑棋赢

if ("O".equals(s)) {

win=b;

}if ("@".equals(s)) {

win=h;

}returnwin;

}

}//横向的判断

if (j > 4) {if (s.equals(str[i][j - 4])&& s.equals(str[i][j - 3])&& s.equals(str[i][j - 2])&& s.equals(str[i][j - 1])&&s.equals(str[i][j])) {//返回0,还没有人赢,返回1,白棋赢,返回2,黑棋赢

if ("O".equals(s)) {

win=b;

}if ("@".equals(s)) {

win=h;

}returnwin;

}

}//纵向的判断

if (i < str.length - 4) {if(s.equals(str[i][j])&& s.equals(str[i + 1][j])&& s.equals(str[i + 2][j])&& s.equals(str[i + 3][j])&& s.equals(str[i + 4][j])) {//返回0,还没有人赢,返回1,白棋赢,返回2,黑棋赢

if ("O".equals(s)) {

win=b;

}if ("@".equals(s)) {

win=h;

}returnwin;

}

}//纵向的判断

if (i > 4) {if (s.equals(str[i - 4][j])&& s.equals(str[i - 3][j])&& s.equals(str[i - 2][j])&& s.equals(str[i - 1][j])&&s.equals(str[i][j])) {//返回0,还没有人赢,返回1,白棋赢,返回2,黑棋赢

if ("O".equals(s)) {

win=b;

}if ("@".equals(s)) {

win=h;

}returnwin;

}

}//捺方向的判断

if (i < str.length - 4 && j < str[0].length - 4) {if(s.equals(str[i][j])&& s.equals(str[i + 1][j + 1])&& s.equals(str[i + 2][j + 2])&& s.equals(str[i + 3][j + 3])&& s.equals(str[i + 4][j + 4])) {//返回0,还没有人赢,返回1,白棋赢,返回2,黑棋赢

if ("O".equals(s)) {

win=b;

}if ("@".equals(s)) {

win=h;

}returnwin;

}

}//捺方向的判断

if (i > 4 && j > 4) {if (s.equals(str[i - 4][j - 4])&& s.equals(str[i - 3][j - 3])&& s.equals(str[i - 2][j - 2])&& s.equals(str[i - 1][j - 1])&&s.equals(str[i][j])) {//返回0,还没有人赢,返回1,白棋赢,返回2,黑棋赢

if ("O".equals(s)) {

win=b;

}if ("@".equals(s)) {

win=h;

}returnwin;

}

}//撇丿方向的判断

if (j >= 4 && i < str.length - 4) {if(s.equals(str[i][j])&& s.equals(str[i + 1][j - 1])&& s.equals(str[i + 2][j - 2])&& s.equals(str[i + 3][j - 3])&& s.equals(str[i + 4][j - 4])) {//返回0,还没有人赢,返回1,白棋赢,返回2,黑棋赢

if ("O".equals(s)) {

win=b;

}if ("@".equals(s)) {

win=h;

}returnwin;

}

}//撇丿方向的判断

if (i >= 4 && j < str[0].length - 4) {if (s.equals(str[i - 4][j + 4])&& s.equals(str[i - 3][j + 3])&& s.equals(str[i - 2][j + 2])&& s.equals(str[i - 1][j + 1])&&s.equals(str[i][j])) {//返回0,还没有人赢,返回1,白棋赢,返回2,黑棋赢

if ("O".equals(s)) {

win=b;

}if ("@".equals(s)) {

win=h;

}returnwin;

}

}

}

}//返回0,还没有人赢,返回1,白棋赢,返回2,黑棋赢

returnwin;

}/*** 判断是否和棋 返回true则棋盘上已经放满了 返回false则表示还没有放满*/

private static booleanisDraw() {for(String[] aStr : str) {for (int j = 0; j < str[0].length; j++) {if ("*".equals(aStr[j])) {return false;

}

}

}return true;

}/*** 对落子位置的逻辑判断*/

private voidifPrint(Graphics g) {//如果已经分出胜负

if (!flagWin) {//是否为和棋

if (!isDraw()) {//判断画笔颜色

if(isWhite) {

g.setColor(Color.WHITE);//定义画笔颜色

g.drawString("白棋走棋", 660, 100);

}else{

g.setColor(Color.BLACK);//定义画笔颜色

g.drawString("黑棋走棋", 660, 100);

}//往空格添加棋子

if (isClick) {//是否点击了鼠标

if (x > 50 && x < 650 && y > 50 && y < 650) {//是否在正确的位置下子

for (int i = 50; i < 650; i += 30) {for (int j = 50; j < 650; j += 30) {if (x > i && x < i + 30 && y > j && y < j + 30) {//判断是在哪一个空格下子

if ("*".equals(str[(j - 50) / 30][(i - 50) / 30])) {//判断该空格是否已经有子

if (isWhite) {//判断下的棋子的颜色

g.setColor(Color.WHITE);//定义画笔颜色

str[(j - 50) / 30][(i - 50) / 30] = "O";//保存棋子的位置和颜色

} else{

g.setColor(Color.BLACK);//定义画笔颜色

str[(j - 50) / 30][(i - 50) / 30] = "@";

}

g.fillOval(i, j,30, 30);// //画棋子,实心圆//保存棋子的坐标

xY[a][0] =i;

xY[a][1] =j;

System.out.println("x:" + x + " y:" +y+ "a:" + a + " teyp" +isWhite);

a++;//重置坐标

x = 0;

y= 0;

isWhite= !isWhite;for (int i1 = 0; i1 < str.length; i1++) {for (int j1 = 0; j1 < str[0].length; j1++) {

System.out.print(str[i1][j1]+ " ");

}

}

}else{

g.setColor(Color.RED);//定义画笔颜色

g.drawString("该位置已经有子,请从新下!", 660, 120);

System.out.println("该位置已经有子,请从新下!");

}

}

}

}

}else{

g.setColor(Color.RED);//定义画笔颜色

g.drawString("请在正确的位置放子!", 660, 120);

System.out.println("请在正确的位置放子!");

}

isClick= false;

}if (!isWhite) {//因为前面下完子之后已经取反了,所以这里取非

win = win("O");//判断白棋是否赢

} else{

win= win("@");//判断黑棋是否赢

}switch(win) {case 1:

System.out.println("白棋赢了");

flagWin= true;

whoWin= "白棋赢了";break;case 2:

System.out.println("黑棋赢了");

flagWin= true;

whoWin= "黑棋赢了";break;default:

}

}else{

g.setColor(Color.RED);//定义画笔颜色

g.drawString("和棋!!!", 660, 100);

g.drawString("你们打成了平手!", 660, 120);

}

}else{

g.setColor(Color.RED);//定义画笔颜色

g.drawString(whoWin, 660, 100);

g.drawString("已经分出了胜负啦!", 660, 120);

}

}/*** 初始化窗口*/

private voidlaunchFrame() {//设置窗口大小

setSize(800, 700);//设置窗口位置

setLocation(50, 50);//设置背景颜色

setBackground(Color.PINK);//设置窗口可见

setVisible(true);//设置标题

setTitle("欢子出品,必属精品");//设置窗口大小不可变

setResizable(false);//启用线程

newPaintThread().start();//添加窗口监听,实现窗口关闭

addWindowListener(newMyWindow());//添加鼠标监听

addMouseListener(newMyMouse());

}/*** 画窗体里的内容*/@Overridepublic voidpaint(Graphics g) {//初始化画笔的颜色

g.setColor(Color.BLACK);//画线,画方格//X轴方向

for (int i = 0, j = 50; i <= 20; i++) {

g.drawLine(50, j, 650, j);

j+= 30;

}//Y轴方向

for (int i = 0, j = 50; i <= 20; i++) {

g.drawLine(j,50, j, 650);

j+= 30;

}//画棋子

for (int i = 0; i < a; i++) {if ("O".equals(str[(xY[i][1] - 50) / 30][(xY[i][0] - 50) / 30])) {

g.setColor(Color.WHITE);//定义画笔颜色

} else if ("@".equals(str[(xY[i][1] - 50) / 30][(xY[i][0] - 50) / 30])) {

g.setColor(Color.BLACK);//定义画笔颜色

}

g.fillOval(xY[i][0], xY[i][1], 30, 30);//画棋子,实心圆

}//对落子位置的逻辑判断

ifPrint(g);//恢复画笔的颜色

g.setColor(Color.BLACK);

}/*** 退出*/

class MyWindow extendsWindowAdapter {

@Overridepublic voidwindowClosing(WindowEvent e) {

System.exit(0);

}

}/*** 定义一个鼠标监听事件类*/

class MyMouse implementsMouseListener {/*** 鼠标释放*/@Overridepublic voidmouseReleased(MouseEvent arg0) {//System.out.println("鼠标释放"+arg0);

}/*** 鼠标按下*/@Overridepublic voidmousePressed(MouseEvent arg0) {//System.out.println("鼠标按下"+arg0);

}/*** 鼠标离开*/@Overridepublic voidmouseExited(MouseEvent arg0) {//System.out.println("鼠标离开)"+arg0);

}/*** 鼠标进入*/@Overridepublic voidmouseEntered(MouseEvent arg0) {//System.out.println("鼠标进入)"+arg0);

}/*** 鼠标点击*/@Overridepublic voidmouseClicked(MouseEvent arg0) {

x=arg0.getX();

y=arg0.getY();

isClick= true;

}

}/*** 定义一个线程重画窗口,是一个内部类*/

class PaintThread extendsThread {

@Overridepublic voidrun() {while (true) {

repaint();try{

Thread.sleep(40);

}catch(InterruptedException e) {

e.printStackTrace();

}

}

}

}/*** main函数*/

public static voidmain(String[] args) {newMyFrame().launchFrame();

initStr();

}

}

java 五子棋_Java GUI 单机版五子棋相关推荐

  1. java五子棋gui代码_java GUI实现五子棋游戏

    本文实例为大家分享了java实现五子棋游戏GUI,供大家参考,具体内容如下 引用包 //{Cynthia Zhang} import java.awt.*; import java.awt.event ...

  2. Java源码分享——单机版五子棋

    初学JavaGUI编程,就写了一个小游戏–五子棋. 目前只实现了单机版,任何事情都是从简制作的,有问题请大牛们不吝指教啊. 此处的棋盘和棋子都未用图片,全部都是使用Java中的Graphics画出来的 ...

  3. 五子棋java_java实现单机版五子棋

    这个小游戏是我和我姐们儿的JAVA课程设计,也是我做的第一个JAVA项目,适合初学者,希望能帮到那些被JAVA课设所困扰的孩纸们~~~ 一.该游戏需要实现 1.设计主框架,界面. 2.利用Action ...

  4. 单机版五子棋java功能_java实现单机版和网络对战版五子棋程序

    [实例简介] java实现单机版和网络对战版五子棋,功能包括计时.悔棋.聊天.显示双方状态等等.详细见https://blog.csdn.net/qq_37913997/article/details ...

  5. java设计五子棋_JAVA课程设计+五子棋(团队博客)

    JAVA课程设计 利用所学习的JAVA知识设计一个五子棋小游戏 1.团队名称.团队成员介绍(菜鸟三人组) 杨泽斌[组长]:201521123049 网络1512 叶文柠[组员]:20152112305 ...

  6. java设计五子棋_JAVA课程设计(五子棋)--个人博客

    JAVA课程设计(五子棋)--个人博客(李金妲) 1.题目及我负责的内容 1.1题目:五子棋 1.2负责内容:游戏界面的GUI设计.背景音乐功能.趣味对战算法实现 2.本人负责的主要功能展示与代码截图 ...

  7. java课设 五子棋_Java课程设计 ————五子棋 (个人博客)

    JAVA课程设计 五子棋(博客个人版) •团队课程设计博客链接 •个人负责模块或任务说明 1.主框架类:设置棋盘窗体,颜色等 2.isWin方法:判断胜负 •自己的代码提交记录截图 •自己负责模块或任 ...

  8. JAVA权值法实现五子棋_java游戏之 五子棋实现人人对战!

    五子棋,是我们大家都喜爱玩的智力棋类游戏,在学完了界面以及绘图之后便一直想做一个,如今终于如愿以偿,虽然还没有更好的美化该游戏,但是大局已定.高兴! 五子棋我们需要很多常量,比如说棋子的大小,棋盘格子 ...

  9. java 五子棋_java实现联机五子棋

    a.jpg Config.xml ~ 122B <?xml version='1.0' encoding='UTF-8'?>5088 Main.java ~ 112B import pan ...

最新文章

  1. 服务器暴力破解的程序(python开发)
  2. 来!一起捋一捋机器学习分类算法
  3. Win7 任务栏影藏、显示速度提升
  4. 谈谈HTML5中的history.pushSate方法,弥补ajax导致浏览器前进后退无效的问题
  5. Metasploit发布了新版本5.0.83
  6. 详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂)
  7. OpenCV A-KAZE匹配的实例(附完整代码)
  8. Integer 中的缓存类IntegerCache
  9. FreeEIM 是班级的学习委员
  10. 城市轨道交通运营票务管理论文_城市轨道交通网络运营管理方法与应用:一本源于大量轨道交通真实运营数据的好书...
  11. 【clickhouse】ClickHouse 在实时场景的应用和优化-字节跳动技术沙龙第6期 笔记
  12. java监听鼠标接口实现_自定义Java鼠标监听器?
  13. 【编程珠玑】第六章 程序性能分析
  14. mysql数据结合使用_MySQL数据行操作
  15. 敏捷开发系列之旅 第四站(透明的Crystal水晶方法) .
  16. NMEA-0183协议(多星联合定位)
  17. 自检、开机故障及主板厂商资料
  18. tombstone 信息解析
  19. JavaScript 利用Ajax制作一个汇率转换器
  20. 怎么测试ftp服务器上传文件,ftp服务器文件上传测试

热门文章

  1. 用计算机语言写结婚祝福语,抖音很火的一到10结婚祝福语
  2. mysql搭建集群_Mysql搭建集群Mysql Cluster
  3. fastboot 快速引导模式 介绍
  4. 基于安卓的IJK解码库使用指南
  5. springboot网络微小说 毕业设计-附源码031758
  6. 第3.1章 卷积神经网络(CNN)——Conv、Pool、FC、Activation Function、BN各个层的作用及原理
  7. 作者:王印海(1965-),男,美国华盛顿大学(西雅图)土木和环境工程系终身教授、博士生导师。...
  8. 518抽奖软件——极简设计、极致体验
  9. 2017.08.20【NOIP提高组】模拟赛B组 【NOIP2014八校联考第4场第2试10.20】星球联盟(alliance)...
  10. 15、wxapp - 小程序登录以及全局参数 - 微擎小程序模块应用开发