iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >java swing怎么实现简单的五子棋游戏
  • 688
分享到

java swing怎么实现简单的五子棋游戏

2023-06-06 16:06:01 688人浏览 独家记忆
摘要

这篇文章将为大家详细讲解有关java swing怎么实现简单的五子棋游戏,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。用java swing写的一个简单的五子棋游戏。下面是Main.java。packag

这篇文章将为大家详细讲解有关java swing怎么实现简单的五子棋游戏,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

用java swing写的一个简单的五子棋游戏。

java swing怎么实现简单的五子棋游戏

下面是Main.java。

package com.crossing.main;import com.crossing.view.GameWindow;public class Main {  public static void main(String[] args) { GameWindow gameWindow = new GameWindow(); }}

下面是GameWindow.java。

package com.crossing.view;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.GridLayout;import java.awt.Rectangle;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JPanel;@SuppressWarnings("serial")public class GameWindow extends JFrame implements MouseListener, Runnable { private int width, height;// 屏幕宽高 private int mouseX = 0, mouseY = 0, mapsX = 0, mapsY = 0;// 鼠标坐标,鼠标在地图中的位置 private int game_width = 600, game_height = 600;// 游戏窗口大小 private BufferedImage bgImage = null;// 背景图片 private int chessBoardItemWidth = 25;// 棋盘每一小格的大小 private Rectangle chessBoardRect = null;// 棋盘所在矩形 private BufferedImage offsetImg = new BufferedImage(game_width, game_height, BufferedImage.TYPE_4BYTE_ABGR); private Graphics g = offsetImg.getGraphics();// 双缓冲解决闪烁问题 private int[][] maps = new int[15][15];// 0无棋子,1黑子,2白子 private boolean isBlack = true;// 是否是黑方的回合 private String message = "黑方先行", whitemessage = "无限制", blackmessage = "无限制";// 界面上方信息,下方时间信息 // 右边操作界面 private JButton btn_start, btn_exit, btn_settings; private JPanel operaterPanel;// 操作面板 private int gametime = 0;// 游戏时间限制(秒) private int blackTime = 0, whiteTime = 0;// 黑白方剩余时间 private Thread timeThread = new Thread(this);// 黑白双方倒计时线程// private boolean isLimitTime = false; public GameWindow() { setTitle("五子棋"); setSize(game_width, game_height); setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 获取屏幕宽高 width = Toolkit.getDefaultToolkit().getScreenSize().width; height = Toolkit.getDefaultToolkit().getScreenSize().height; // 棋盘位置矩形 chessBoardRect = new Rectangle(50, 120, 370, 370); setLocation((width - game_width) / 2, (height - game_height) / 2); addMouseListener(this); // 初始化右边的面板 initOeratePane(); repaint(); // 设置背景 try { bgImage = ImageIO.read(new File("img/backgroung.png"));// System.out.println(bgImage); } catch (IOException e) { e.printStackTrace(); } setVisible(true); }  private void initTime() {// System.out.println("isLimitTime:" + isLimitTime); if (gametime > 0) { timeThread.start(); if (blackTime < 0) { JOptionPane.showMessageDialog(this, "黑方时间已到,白方获胜!"); timeThread.interrupt(); } else if (whiteTime < 0) { JOptionPane.showMessageDialog(this, "白方时间已到,黑方获胜!"); timeThread.interrupt(); } } }  private void initOeratePane() { btn_start = new JButton("开始游戏"); btn_settings = new JButton("游戏设置"); btn_exit = new JButton("退出游戏"); btn_start.addActionListener(new ActionListener() { @Override public void actionPerfORMed(ActionEvent e) { int select = JOptionPane.showConfirmDialog(getContentPane(), "确定要重新开始吗?"); if (select == 0) {  reStartGame(); } } }); btn_settings.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String select = ""; select = JOptionPane.showInputDialog("请输入游戏时间(分钟),输入0不限时间:"); if (select != null && !select.equals("")) {  try {  gametime = Integer.parseInt(select) * 60;//  System.out.println("gametime:" + gametime);//  isLimitTime = true;//  System.out.println("设置isLimitTime--" + isLimitTime);  blackTime = gametime;  whiteTime = gametime;  if (gametime > 0) {  blackmessage = blackTime / 3600 + ":" + blackTime / 60 % 60 + ":" + blackTime % 60;  whitemessage = whiteTime / 3600 + ":" + whiteTime / 60 % 60 + ":" + whiteTime % 60;//  timeThread.resume();  } else {  whitemessage = "无限制";  blackmessage = "无限制";  }  initTime();  repaint();  } catch (Exception e2) {  e2.printStackTrace();  JOptionPane.showMessageDialog(getContentPane(), "请输入正确信息!");  }//   } } }); btn_exit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.exit(0); } }); operaterPanel = new JPanel(); GridLayout layout = new GridLayout(0, 1, 100, 100); operaterPanel.setLayout(layout); operaterPanel.add(btn_start); operaterPanel.add(btn_settings); operaterPanel.add(btn_exit); getContentPane().add(operaterPanel, BorderLayout.EAST); }  protected void reStartGame() { isBlack = true; blackTime = gametime; whiteTime = gametime;// for (int i = 0; i < maps[0].length; i++) {// for (int j = 0; j < maps.length; j++) {// maps[i][j] = 0;// }// } maps = new int[15][15]; repaint(); } @Override public void paint(Graphics g1) { super.paint(g); // 绘制背景 g.drawImage(bgImage, 20, 90, this); // 绘制上方标题 g.setColor(Color.black); g.setFont(new Font("楷体", Font.BOLD, 30)); g.drawString("游戏信息:" + message, 100, 75); // 绘制下方 g.setColor(Color.gray); g.fillRect(50, 530, 200, 50); g.fillRect(300, 530, 200, 50); g.setColor(Color.black); g.setFont(new Font("宋体", Font.BOLD, 20)); g.drawString("黑方时间:" + blackmessage, 60, 560); g.drawString("白方时间:" + whitemessage, 310, 560);// g.setColor(Color.blue); // 绘制棋盘线条 for (int i = 0; i < 15; i++) { g.drawLine(60, 130 + i * chessBoardItemWidth, 410, 130 + i * chessBoardItemWidth); g.drawLine(60 + i * chessBoardItemWidth, 130, 60 + i * chessBoardItemWidth, 480); } // 标注点位 g.fillOval(131, 200, 8, 8); g.fillOval(331, 200, 8, 8); g.fillOval(131, 400, 8, 8); g.fillOval(331, 400, 8, 8); g.fillOval(230, 299, 10, 10); // 绘制棋子 for (int j = 0; j < maps.length; j++) { for (int i = 0; i < maps[0].length; i++) { if (maps[j][i] == 1) {  g.setColor(Color.black);  g.fillOval(50 + i * chessBoardItemWidth, 120 + j * chessBoardItemWidth, 20, 20); } if (maps[j][i] == 2) {  g.setColor(Color.white);  g.fillOval(50 + i * chessBoardItemWidth, 120 + j * chessBoardItemWidth, 20, 20); } } } // 双缓冲解决屏幕闪烁 g1.drawImage(offsetImg, 0, 0, this); } @Override public void mouseClicked(MouseEvent e) { mouseX = e.getX(); mouseY = e.getY(); // 鼠标落子 if (chessBoardRect.contains(mouseX, mouseY)) { mapsX = (mouseX - 50) / chessBoardItemWidth; mapsY = (mouseY - 120) / chessBoardItemWidth;// System.out.println("mapsXY:" + mapsX + "," + mapsY);// maps[mapsY][mapsX] = (isBlack == true ? 1 : 2); if (maps[mapsY][mapsX] == 0) { if (isBlack) {  maps[mapsY][mapsX] = 1;  isBlack = false;  message = "白色落子"; } else {  maps[mapsY][mapsX] = 2;  isBlack = true;  message = "黑色落子"; } checkGame(); } } repaint(); }  private void checkGame() { int color = maps[mapsY][mapsX]; boolean isWin = false;// System.out.println("mapsXY:" + mapsX + "," + mapsY); isWin = checkChess(1, 0, color) || checkChess(0, 1, color) || checkChess(1, 1, color) || checkChess(1, -1, color); if (isWin) { if (color == 1) JOptionPane.showMessageDialog(this, "黑方胜利!"); else { JOptionPane.showMessageDialog(this, "白方胜利!"); } reStartGame();// new GameWindow(); } }  private boolean checkChess(int xChange, int yChange, int color) { boolean isWin = false; int count = 1, tempX = xChange, tempY = yChange; while ((mapsX + tempX) >= 0 && (mapsX + tempX) < 15 && (mapsY + tempY) >= 0 && (mapsY + tempY) < 15 && maps[mapsY + tempY][mapsX + tempX] == color) { count++; if (tempX == 0 && tempY == 0) break; if (tempX > 0) tempX++; if (tempX < 0) tempX--; if (tempY > 0) tempY++; if (tempY < 0) tempY--; } tempX = xChange; tempY = yChange; while ((mapsX - tempX) >= 0 && (mapsX - tempX) < 15 && (mapsY - tempY) >= 0 && (mapsY - tempY) < 15 && maps[mapsY - tempY][mapsX - tempX] == color) { count++; if (tempX == 0 && tempY == 0) break; if (tempX > 0) tempX++; if (tempX < 0) tempX--; if (tempY > 0) tempY++; if (tempY < 0) tempY--; }// System.out.println("count:" + count); if (count >= 5) { return true; } return isWin; } @Override public void mousePressed(MouseEvent e) { } @Override public void mouseReleased(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) {// mouseX = e.getX();// mouseY = e.getY();// System.out.println("鼠标进入游戏窗口");// System.out.println("鼠标坐标:" + mouseX + "," + mouseY);// if (chessBoardRect.contains(mouseX, mouseY)) {// System.out.println("进入棋盘");// if (isBlack) {// g.setColor(Color.black);// } else {// g.setColor(Color.white);// }// g.fillOval(mouseX, mouseY, 20, 20);// repaint();// } } @Override public void mouseExited(MouseEvent e) { } @Override public void run() { while (true) {// System.out.println("isblack:" + isBlack); if (isBlack) { blackTime--; } else { whiteTime--; } blackmessage = blackTime / 3600 + ":" + blackTime / 60 % 60 + ":" + blackTime % 60; whitemessage = whiteTime / 3600 + ":" + whiteTime / 60 % 60 + ":" + whiteTime % 60;// System.out.println("blackTime:" + blackTime);// System.out.println("whiteTime:" + whiteTime); repaint(); if (blackTime < 0) { JOptionPane.showMessageDialog(getContentPane(), "黑方时间已到,白方获胜!"); timeThread.interrupt(); new GameWindow(); break; } else if (whiteTime < 0) { JOptionPane.showMessageDialog(getContentPane(), "白方时间已到,黑方获胜!"); timeThread.interrupt(); new GameWindow(); break; } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }}

背景图片

java swing怎么实现简单的五子棋游戏

关于“java swing怎么实现简单的五子棋游戏”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: java swing怎么实现简单的五子棋游戏

本文链接: https://www.lsjlt.com/news/247814.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java swing怎么实现简单的五子棋游戏
    这篇文章将为大家详细讲解有关java swing怎么实现简单的五子棋游戏,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。用java swing写的一个简单的五子棋游戏。下面是Main.java。packag...
    99+
    2023-06-06
  • java实现简单的五子棋游戏
    目录一、主要界面二、功能概况三、代码部分四、部分效果展示本文实例为大家分享了java实现简单五子棋游戏的具体代码,供大家参考,具体内容如下 一、主要界面 1、登录界面;2、游戏选择界...
    99+
    2024-04-02
  • Java怎么实现简单的五子棋游戏
    本文小编为大家详细介绍“Java怎么实现简单的五子棋游戏”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java怎么实现简单的五子棋游戏”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。项目结构这个是在网上找的资源,...
    99+
    2023-06-30
  • java怎么实现简单五子棋小游戏
    本篇文章为大家展示了java怎么实现简单五子棋小游戏,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。讲解五子棋,实际上就是用一个数组来实现的。没有其他很复杂的结构。首先我们制作五子棋,先要有一个棋盘。...
    99+
    2023-06-26
  • Java+Swing实现经典五子棋游戏
    目录前言主要需求主要设计功能截图代码实现总结前言 五子棋是世界智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏,是世界智力运动会竞技项目之一,通常双方分别使用黑白两色的棋子,...
    99+
    2024-04-02
  • java实现简单五子棋小游戏(2)
    本文实例为大家分享了java实现简单五子棋小游戏游戏的具体代码,供大家参考,具体内容如下 讲解 在第一步实现的基础上,添加游戏结束条件。五子棋游戏中的相同棋子如果同时有五个连接成一条...
    99+
    2024-04-02
  • java实现简单五子棋小游戏(1)
    本文实例为大家分享了java实现简单五子棋小游戏的具体代码,供大家参考,具体内容如下 讲解 五子棋,实际上就是用一个数组来实现的。没有其他很复杂的结构。首先我们制作五子棋,先要有一个...
    99+
    2024-04-02
  • jQuery实现简单五子棋游戏
    本文实例为大家分享了jQuery实现五子棋游戏的具体代码,供大家参考,具体内容如下 五子棋小游戏实现的基本思路: 以15*15标准面板为棋盘布局,黑白棋子交替下棋。每落下一枚棋子就判...
    99+
    2024-04-02
  • QT实现简单五子棋游戏
    本文实例为大家分享了QT实现简单五子棋游戏的具体代码,供大家参考,具体内容如下 FIR.pro #----------------------------------------...
    99+
    2024-04-02
  • pygame实现简单五子棋游戏
    本文实例为大家分享了pygame实现简单五子棋游戏的具体代码,供大家参考,具体内容如下 看代码: ①Gomuku2.py: import sys import random impo...
    99+
    2024-04-02
  • Java+Swing实现五子棋游戏的示例代码
    目录一、系统介绍1.开发环境2.技术选型3.系统功能二、系统展示三、部分代码AI.javaChess.javaGobang.javaGobangListener.java一、系统介绍...
    99+
    2024-04-02
  • python实现简单五子棋小游戏
    用python实现五子棋简单人机模式的练习过程,供大家参考,具体内容如下 最近在初学python,今天就用自己的一些粗浅理解,来记录一下这几天的python简单人机五子棋游戏的练习,...
    99+
    2024-04-02
  • java实现简易的五子棋游戏
    本文实例为大家分享了java实现简易五子棋游戏的具体代码,供大家参考,具体内容如下 先上效果图 一、问题分析 1、五子棋游戏分析: 五子棋作为较为普遍且简易的娱乐游戏,受到众多人的...
    99+
    2024-04-02
  • Java实现简易五子棋小游戏
    本文实例为大家分享了Java实现简易五子棋小游戏的具体代码,供大家参考,具体内容如下 五子棋是一个简单小游戏,首先我们先想想五子棋都有什么东西,棋子,棋盘; 首先我们可以定义一个棋子...
    99+
    2024-04-02
  • Java怎么实现简易五子棋小游戏
    这篇文章主要介绍“Java怎么实现简易五子棋小游戏”,在日常操作中,相信很多人在Java怎么实现简易五子棋小游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java怎么实现简易五子棋小游戏”的疑惑有所帮助!...
    99+
    2023-06-30
  • Java实现简单的五子棋游戏示例代码
    目录项目结构核心代码ArrComparator.java类ChessMap.java类ChessPanel.java类效果图展示项目结构 这个是在网上找的资源,出处记不得了,记录一下...
    99+
    2024-04-02
  • C语言实现简单五子棋游戏
    在生活中五子棋是一个十分普遍的一款游戏,今天让我们一起来实现这款游戏。 1.初始化棋盘 char ret; //数据存储在一个二维数组中,玩家下去*,电脑下去#. char ...
    99+
    2024-04-02
  • 原生JavaScript实现简单五子棋游戏
    本文实例为大家分享了JavaScript实现简单五子棋游戏的具体代码,供大家参考,具体内容如下 HTML页面 注释都很明确了,大家好好学习。 <!DOCTYPE html&...
    99+
    2024-04-02
  • JavaScript实现简单五子棋游戏的方法
    本篇内容介绍了“JavaScript实现简单五子棋游戏的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!本文实例为大家分享了JavaScr...
    99+
    2023-06-20
  • C语言实现简单的五子棋游戏
    本文实例为大家分享了c语言实现简单五子棋游戏的具体代码,供大家参考,具体内容如下 环境vs2017 一、游戏设计思想 1.该代码设置为 玩家1(*) vs 玩家2(O) 2.选择玩游...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作