文章目录

  • 画棋盘
    • 画棋子
    • 判输赢
    • 悔棋的功能
    • 再来一局
    • 更换皮肤

画棋盘

要下棋首先要有一个方格棋盘,一个普通的棋盘是由横线和竖线组成的,我们控制好间距就行,这里有很多常量,我们可以定义它,后期想修改的话就简单了。我这里定义了行row、列colulmn、行间距size,x、y 为窗口上的坐标

for (int i = 0; i < row; i++){                     g.drawLine(x, y + size * i, x + size * (column - 1), y + size * i);//横线g.drawLine(x + size * i, y, x + size * i, y + size * (row - 1));//竖线}

画棋子

在有棋盘的基础上,我们就可以在上面添加棋子了,我们关键将画好的棋子放在两条线的交叉处。关键的地方我们画好的棋子存入一个数字,方便后面判断输赢。我这里定义画出的黑棋为1,白棋为2

Chess chess= new  Chess(vy,vx);//调用chess方法chessarr[chessCount]=chess;//将累加的下标存入棋子数组chessCount++;if(index==1&&x<=575&&y<=625){  //防止棋子落到棋盘之外Image ima = new ImageIcon("C:\\Users\\Lenovo\\Desktop\\com\\pic\\heiqi.png").getImage();g.drawImage(ima,vx*size+25,vy*size+75, 50, 50,null);arr[vy][vx] = 1;  //将画好的棋子定好数字index++;if(isWin(vy, vx)){//如果isWin方法为真,就输出下面的对话框JOptionPane.showMessageDialog(null, "黑方赢了!!!");}}                      else if(index==2&&x<=575&&y<=625){Image ima = new ImageIcon("C:\\Users\\Lenovo\\Desktop\\com\\pic\\baiqi.png").getImage();g.drawImage(ima,vx*size+25,vy*size+75, 50, 50,null);arr[vy][vx] = 2;index--;if(isWin(vy, vx)){JOptionPane.showMessageDialog(null, "白方赢了!!!");} }

判输赢

五子棋的游戏规则,在横竖、斜对角有连起来相同颜色的五个旗子,该颜色方就获胜.在画棋子的时候我们已经定义了一个二维数组,将画好的棋子按颜色存起来了,下面只需要遍历数组就行。我分为横向的向左向右判断,竖向的向上向下判断,两个斜向的方向也两边判断,只要相同颜色的棋子达到五个就弹出获胜方。

public boolean chessL_R(int r, int c) {//r,c是随机点击的棋子的列,行int count=0;//确定好一个点,看横向的相同数字个数,i是行,j是列//以最后下的棋子为中心,往右遍历for(int j=c;j<arr.length;j++){System.out.println(arr[r][c]);if(arr[r][c]==arr[r][j]){                count++;}     }//以最后下的棋子为中心,往左遍历for(int j=c-1;j>=0;j--){System.out.println(arr[r][c]);if(arr[r][c]==arr[r][j]){count++;}          }System.out.println("count1= "+count);return count >= 5 ? true : false;         }//判断纵向//先往上遍历,再往下public boolean chessU_D(int r,int c){int count=0;for(int i=r;i>=0;i--){if(arr[r][c]==arr[i][c]){count++;}}for(int i=r+1;i<arr.length;i++){if(c+i<600&&arr[r][c]==arr[i][c]){count++;}}System.out.println("count2= "+count);return count >= 5 ? true : false;}//斜向右下public boolean chessR_R(int r, int c) {int count=0;//以最后一个球为中心,左上角for(int i=r,j=c;i>=0&&j>=0;i--,j--){if(arr[r][c]==arr[i][j]){count++;}}//以最后一个球为中心,右上角for(int i=r+1,j=c+1;i<arr.length&&j<arr.length;i++,j++){if(i+c<600&&j+r<700&&arr[r][c]==arr[i][j]){count++;}}System.out.println("count3= "+count);return count >= 5 ? true : false;}//判断斜左下public boolean chessL_L(int r, int c) {int count=0;//以最后一个球为中心,右上角for(int i=r,j=c;i<arr.length&&j>=0;i++,j--){if(i+c<600&&arr[r][c]==arr[i][j]){count++;}}//以最后一个球为中心,左上角for(int i=r-1,j=c+1;i>=0&&j<arr.length;i--,j++){if(j+r<550&&arr[r][c]==arr[i][j]){count++;}}System.out.println("count4= "+count);return count >= 5 ? true : false;}

输赢的方法

public boolean isWin(int r, int c) {     if(chessL_R(vy, vx) ||chessU_D(vy, vx) ||chessL_L(vy, vx)||chessR_R(vy, vx)){return true;}else {return false;}}

悔棋的功能

我们需要将下好的棋子个数计下来,每点一下悔棋按钮就消失一个棋子

public class Chess {int x,y;int size=50;public Chess(int x,int y){this.x=x;this.y=y;}
}
public void regret(){if(chessCount>0){chessCount--;Chess chess = chessarr[chessCount];System.out.println("x="+chess.x);System.out.println("y="+chess.y);arr[chess.x][chess.y]=0;    }           }

再来一局

再来一局,只需要将棋盘上画好的棋子清空就行,将之前黑白棋存下的数字全部清零即可

public void tryAgain(){      for(int i=0;i<arr.length;i++){for(int j=0;j<arr.length;j++){            arr[j][i] =0;              }}}

更换皮肤

我们只需要在菜单条上添加菜单,然后在菜单上添加菜单项,菜单项上就是我们所需要更换皮肤的名字

 JMenuBar jmb=new JMenuBar();//菜单条JMenu skimMenu=new JMenu("skim");//菜单jmb.add(skimMenu);skimMenu.addActionListener(bl);setJMenuBar(jmb);String[] picStr = {"大自然","小动物","动漫","护眼"};for (int i = 0; i <picStr.length; i++) {JMenuItem picItem=new JMenuItem(picStr[i]);skimMenu.add(picItem);picItem.addActionListener(bl);}

之后在监听器界面

if(picStr.equals("动漫")){image = new ImageIcon("C:\\Users\\Lenovo\\Desktop\\com\\pic\\java1.jpg").getImage();}else if(picStr.equals("小动物")){image =new ImageIcon("C:\\Users\\Lenovo\\Desktop\\com\\pic\\java2.jpg").getImage();}else if(picStr.equals("大自然")){image =new ImageIcon("C:\\Users\\Lenovo\\Desktop\\com\\pic\\java3.jpg").getImage();}else if(picStr.equals("护眼")){image = new ImageIcon("C:\\Users\\Lenovo\\Desktop\\com\\pic\\java4.jpg").getImage();}

记得整完上面的要重绘哦,要不然滑动窗口棋盘就消失啦啦啦!
送一句话给大家:
“好的艺术家只是照抄,而伟大的艺术家窃取灵感,在窃取伟大的灵感这方面,我们一直都是厚颜无耻的”

如何用java写出一个可更换皮肤的五子棋?相关推荐

  1. 使用Java写出一个红桃心,拿走不谢!

    多样化娱乐化javademo❀❀❀❀❀❀ package com.test.demo; public class hongtaoxin { public static void main(String ...

  2. 泰森多边形 java_如何用Java写出泰森多边形算法代码???我找了好多资源表示无解呀?...

    展开全部 package com.wangyin.seapay.loginkgo; import java.util.HashMap; import java.util.Map; import jav ...

  3. 如何用Java写一个斗地主(一)

    如何用Java写一个斗地主(一) 序言 正文 创建卡牌 打乱牌序 发牌 课后吐槽 序言 作为一名大三的普普通通大学生,被实习老师(?)强迫下,第一次开始写CSDN的博客,如果写的不好,请多多包涵咯. ...

  4. 如何用java写一个年日历

    如何用java写一个年日历 没啥难的,话不多说上代码

  5. 如何用C语言写出一个微信群聊机器人

    要用 C 语言写出一个微信群聊机器人,您需要先了解微信群聊的相关信息和 C 语言的编程知识. 首先,微信群聊是通过微信服务器进行通信的,因此您需要了解如何通过网络协议与微信服务器进行通信.微信群聊使用 ...

  6. linux mysql 不稳定_linux,mysql:今天写出一个十分弱智的bug!

    今天写出一个十分弱智的bug,记录一下,提醒自己以后别这种犯错,不怕丢人哈~ 在写一个分页查询记录的sql时,要根据添加的时间逆序分页输出,之前的写法是酱紫: select record.a, y.c ...

  7. 用c语言写出一个金字塔

    如何用c语言写出一个金字塔 #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main(){int i;//用户想要的层数int ...

  8. 用JAVA写出1到999的随性化数_OO第一单元——谜之随性总结

    前言 第一单元的作业主要是以多项式求导为载体来训练我们的面向对象的思维,难度循序渐进,复杂度也一直在提高,但是面向对象的体现性也越来越强,当然带来的优势与便利也在逐步提升.下面的内容主要从需求分析,代 ...

  9. 3.写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )

    题目描述 写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串.(多组同时输入 ) import java.util.Scanner; import java.lang.Math; p ...

最新文章

  1. dev编译器:c++如何让其输出小数16.84,浮点数类型数据!
  2. Python多线程学习(下)
  3. [跟我学UML] UML包图中的包引入和包合并
  4. php 根据ip 扫描端口,python实现指定ip端口扫描方式
  5. Intellij IDEA中的Mybatis Plugin破解
  6. boost::python模块显示如何使扩展类pickleable
  7. IOS学习笔记七之KVC和Key路径
  8. PHP 织梦 帝国那个好,帝国、PHPCMS及织梦对比(十):推荐位功能
  9. 项目开发周期与数据库设计对比
  10. 女人离婚后不要孩子,你怎么看?
  11. [渝粤教育] 西南科技大学 大学物理 在线考试复习资料
  12. 联想p720装系统_教你装系统第六节(装系统需要注意那些?)
  13. roc_curve()的用法及用途
  14. 小米相机摄像头测试软件,摄像头拍照效果测试
  15. 【分层图最短路】P2939 [USACO09FEB]Revamping Trails G
  16. MLX90640开发笔记(六)红外图像伪彩色编码
  17. Navicat premium 12 闪退问题(非有道词典问题)
  18. 达观数据爱心公益再出发,走进广西桥业小学开展捐书助学活动
  19. MATLAB——Harris角点检测
  20. Awesome Free ChatGPT(免费的chatgpt镜像网站)

热门文章

  1. 【Scaleform官方文档】sf_4.3_3Di 理论概要
  2. Science|改变微生物群落可以增强树木对气候变化的耐受性
  3. 安徽大学c语言答案 豆丁网,安徽大学C语言考试试卷.doc
  4. 03 SkeyeVSS国标视频汇聚云服务使用Onvif协议进行摄像机设备接入以及获取设备信息
  5. css3 滚动条样式
  6. LATERAL VIEW explode
  7. OpenGL ES EGL TLS(线程局部存储) G3D
  8. 求递推序列的第N项 51Nod - 1126
  9. 保险风起,直播保险谋变
  10. linux 提取cpio_cpio命令