java 五子棋_Java GUI 单机版五子棋
@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 单机版五子棋相关推荐
- java五子棋gui代码_java GUI实现五子棋游戏
本文实例为大家分享了java实现五子棋游戏GUI,供大家参考,具体内容如下 引用包 //{Cynthia Zhang} import java.awt.*; import java.awt.event ...
- Java源码分享——单机版五子棋
初学JavaGUI编程,就写了一个小游戏–五子棋. 目前只实现了单机版,任何事情都是从简制作的,有问题请大牛们不吝指教啊. 此处的棋盘和棋子都未用图片,全部都是使用Java中的Graphics画出来的 ...
- 五子棋java_java实现单机版五子棋
这个小游戏是我和我姐们儿的JAVA课程设计,也是我做的第一个JAVA项目,适合初学者,希望能帮到那些被JAVA课设所困扰的孩纸们~~~ 一.该游戏需要实现 1.设计主框架,界面. 2.利用Action ...
- 单机版五子棋java功能_java实现单机版和网络对战版五子棋程序
[实例简介] java实现单机版和网络对战版五子棋,功能包括计时.悔棋.聊天.显示双方状态等等.详细见https://blog.csdn.net/qq_37913997/article/details ...
- java设计五子棋_JAVA课程设计+五子棋(团队博客)
JAVA课程设计 利用所学习的JAVA知识设计一个五子棋小游戏 1.团队名称.团队成员介绍(菜鸟三人组) 杨泽斌[组长]:201521123049 网络1512 叶文柠[组员]:20152112305 ...
- java设计五子棋_JAVA课程设计(五子棋)--个人博客
JAVA课程设计(五子棋)--个人博客(李金妲) 1.题目及我负责的内容 1.1题目:五子棋 1.2负责内容:游戏界面的GUI设计.背景音乐功能.趣味对战算法实现 2.本人负责的主要功能展示与代码截图 ...
- java课设 五子棋_Java课程设计 ————五子棋 (个人博客)
JAVA课程设计 五子棋(博客个人版) •团队课程设计博客链接 •个人负责模块或任务说明 1.主框架类:设置棋盘窗体,颜色等 2.isWin方法:判断胜负 •自己的代码提交记录截图 •自己负责模块或任 ...
- JAVA权值法实现五子棋_java游戏之 五子棋实现人人对战!
五子棋,是我们大家都喜爱玩的智力棋类游戏,在学完了界面以及绘图之后便一直想做一个,如今终于如愿以偿,虽然还没有更好的美化该游戏,但是大局已定.高兴! 五子棋我们需要很多常量,比如说棋子的大小,棋盘格子 ...
- java 五子棋_java实现联机五子棋
a.jpg Config.xml ~ 122B <?xml version='1.0' encoding='UTF-8'?>5088 Main.java ~ 112B import pan ...
最新文章
- 服务器暴力破解的程序(python开发)
- 来!一起捋一捋机器学习分类算法
- Win7 任务栏影藏、显示速度提升
- 谈谈HTML5中的history.pushSate方法,弥补ajax导致浏览器前进后退无效的问题
- Metasploit发布了新版本5.0.83
- 详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂)
- OpenCV A-KAZE匹配的实例(附完整代码)
- Integer 中的缓存类IntegerCache
- FreeEIM 是班级的学习委员
- 城市轨道交通运营票务管理论文_城市轨道交通网络运营管理方法与应用:一本源于大量轨道交通真实运营数据的好书...
- 【clickhouse】ClickHouse 在实时场景的应用和优化-字节跳动技术沙龙第6期 笔记
- java监听鼠标接口实现_自定义Java鼠标监听器?
- 【编程珠玑】第六章 程序性能分析
- mysql数据结合使用_MySQL数据行操作
- 敏捷开发系列之旅 第四站(透明的Crystal水晶方法) .
- NMEA-0183协议(多星联合定位)
- 自检、开机故障及主板厂商资料
- tombstone 信息解析
- JavaScript 利用Ajax制作一个汇率转换器
- 怎么测试ftp服务器上传文件,ftp服务器文件上传测试
热门文章
- 用计算机语言写结婚祝福语,抖音很火的一到10结婚祝福语
- mysql搭建集群_Mysql搭建集群Mysql Cluster
- fastboot 快速引导模式 介绍
- 基于安卓的IJK解码库使用指南
- springboot网络微小说 毕业设计-附源码031758
- 第3.1章 卷积神经网络(CNN)——Conv、Pool、FC、Activation Function、BN各个层的作用及原理
- 作者:王印海(1965-),男,美国华盛顿大学(西雅图)土木和环境工程系终身教授、博士生导师。...
- 518抽奖软件——极简设计、极致体验
- 2017.08.20【NOIP提高组】模拟赛B组 【NOIP2014八校联考第4场第2试10.20】星球联盟(alliance)...
- 15、wxapp - 小程序登录以及全局参数 - 微擎小程序模块应用开发