返回顶部
首页 > 资讯 > 后端开发 > Python >Java实现小程序简单五子棋
  • 737
分享到

Java实现小程序简单五子棋

2024-04-02 19:04:59 737人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

本程序适用于java初学者巩固类与对象、事件响应、awt包中各种工具的相关概念以及对逻辑能力的锻炼 需要注意的有: ①要加入java界面的重绘(基本原则) ②由

本程序适用于java初学者巩固类与对象、事件响应、awt包中各种工具的相关概念以及对逻辑能力的锻炼

需要注意的有:

  • ①要加入java界面的重绘(基本原则)
  • ②由于玩家需要通过鼠标点击,计算机响应出棋子的位置,但却不能保证每次点击都正中棋盘点位,所以要有一定的误差范围
  • ③要保存更新棋盘上的棋子信息,因为棋盘格数是固定的故本例中采取最简单的数组

直接上代码:

分为三个类,同一包下:


package Study0326;
 
public interface WZQConfig {
 
 public static final int START_X = 60;
 
 public static final int START_Y = 60;
 
 public static final int H_LINE = 15;
 
 public static final int V_LINE = 15;
 
 public static final int SIZE = 60;
 
 public static final int[][] bx = new int[17][17];
}



package Study0326;
 
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
 
import javax.swing.JButton;
import javax.swing.JOptionPane;
 
public class LoginListener implements MouseListener, WZQConfig, ActionListener {
 private int x, y;// 鼠标点击的位置
 private int x1, y1, xx, yy;// 鼠标点击附近格子交点的坐标
 private Graphics g;
 private int a = 0, i = 0, j = 0, count1 = 0;// count统计当前下的棋子数
 private String Str;// 定义全局变量获取按钮上的字符串
 private JButton jbu1, jbu2;
 private int GetX[] = new int[256];
 private int GetY[] = new int[256];
 WZQFrame ui;
 
 public void setG(Graphics g) {
  this.g = g;
 }
 
 public void setT(JButton b) {
  jbu1 = b;
 }
 
 public void setU(WZQFrame u) {
  ui = u;
 }
 
 public void mouseClicked(MouseEvent e) {
 
 }
 
 public void mousePressed(MouseEvent e) {
 
 }
 
 public void mouseReleased(MouseEvent e) {
  x = e.getX();
  y = e.getY();
  x1 = Math.abs(x - START_X);
  y1 = Math.abs(y - START_Y);
  xx = x1 % SIZE;
  if (xx >= SIZE / 2) {
   x1 = (x1 / SIZE) + 2;
  } else {
   x1 = (x1 / SIZE) + 1;
  }
 
  yy = y1 % SIZE;// 判断横坐标是否超过格子长度的一半(防止玩家点偏)
  if (yy >= SIZE / 2) {
   y1 = (y1 / SIZE) + 2;
  } else {
   y1 = (y1 / SIZE) + 1;
  }
 
  if ((count1 + 1) % 2 == 1) {// 单数步数时下黑棋,双数时下白棋
   g.setColor(Color.BLACK);
   if (bx[x1][y1] == 0) {
    bx[x1][y1] = 1;// 表示黑棋
    g.fillOval(Math.abs(x1 * SIZE - 25), Math.abs(y1 * SIZE - 25),
      50, 50);
    count1++;// 所下棋子数加一
    GetX[count1] = x1;// 记录第count1步的棋子x值
    GetY[count1] = y1;// 记录第count1步的棋子y值
    if (CheckRow(x1, y1) >= 5) {
     JOptionPane.showMessageDialog(null, "BLACK   WIN!!");
    }
    if (CheckList(x1, y1) >= 5) {
     JOptionPane.showMessageDialog(null, "BLACK   WIN!!");
    }
    if (UpperRight(x1, y1) >= 5) {
     JOptionPane.showMessageDialog(null, "BLACK   WIN!!");
    }
    if (UpperLeft(x1, y1) >= 5) {
     JOptionPane.showMessageDialog(null, "BLACK   WIN!!");
    }
   }
  } else {
   g.setColor(Color.WHITE);
   if (bx[x1][y1] == 0) {
    bx[x1][y1] = 2;// 表示白棋
    g.fillOval(Math.abs(x1 * SIZE - 25), Math.abs(y1 * SIZE - 25),
      50, 50);
    count1++;// 所下棋子数加一
    GetX[count1] = x1;// 记录第count1步的棋子x值
    GetY[count1] = y1;// 记录第count1步的棋子y值
    if (CheckRow(x1, y1) >= 5) {
     JOptionPane.showMessageDialog(null, "WHITE   WIN!!");
    }
    if (CheckList(x1, y1) >= 5) {
     JOptionPane.showMessageDialog(null, "WHITE   WIN!!");
    }
    if (UpperRight(x1, y1) >= 5) {
     JOptionPane.showMessageDialog(null, "WHITE   WIN!!");
    }
    if (UpperLeft(x1, y1) >= 5) {
     JOptionPane.showMessageDialog(null, "WHITE   WIN!!");
    }
   }
  }
 }
 
 public void actionPerfORMed(ActionEvent e) {
  setT(jbu1);
  Str = e.getActionCommand();// 读取点击按钮上的字符串
  if ("悔棋".equals(Str)) {
   if (g.getColor() == Color.BLACK) {
    g.setColor(Color.WHITE);
   }
   if (g.getColor() == Color.WHITE) {
    g.setColor(Color.BLACK);
   }
   Regret();
   ui.repaint();
  } else if ("重新开始".equals(Str)) {
   Restart();
   ui.repaint();
  }
 }
 
 public void mouseEntered(MouseEvent e) {
 
 }
 
 public void mouseExited(MouseEvent e) {
 
 }
 
 public int CheckRow(int x, int y)// 横着五子连成一条直线
 {
  int count = 0;
  for (int i = x + 1; i < bx.length; i++)// 向右判断是否棋子一样
  {
   if (bx[i][y] == bx[x][y])
    count++;
   else
    break;
  }
  for (int i = x; i >= 0; i--)// 向右判断是否棋子一样
  {
   if (bx[i][y] == bx[x][y])
    count++;
   else
    break;
  }
  return count;
 }
 
 public int CheckList(int x, int y)// 竖着五子连成一条直线
 {
  int count = 0;
  for (int i = y + 1; i < bx.length; i++)// 向下判断是否棋子一样
  {
   if (bx[x][i] == bx[x][y])
    count++;
   else
    break;
  }
  for (int i = y; i >= 0; i--)// 向上判断是否棋子一样
  {
   if (bx[x][i] == bx[x][y])
    count++;
   else
    break;
  }
  return count;
 }
 
 public int UpperRight(int x, int y)// 右上到左下五子连成一条直线
 {
  int count = 0;
  for (int i = x + 1, j = y - 1; i < bx.length && j >= 0; i++, j--)// 向下判断是否棋子一样
  {
   if (bx[i][j] == bx[x][y])
    count++;
   else
    break;
  }
  for (int i = x, j = y; i >= 0 && j < bx.length; i--, j++)// 向上判断是否棋子一样
  {
   if (bx[i][j] == bx[x][y])
    count++;
   else
    break;
  }
  return count;
 }
 
 public int UpperLeft(int x, int y)// 左上到右下五子连成一条直线
 {
  int count = 0;
  for (int i = x - 1, j = y - 1; i >= 0 && j >= 0; i--, j--)// 向下判断是否棋子一样
  {
   if (bx[i][j] == bx[x][y])
    count++;
   else
    break;
  }
  for (int i = x, j = y; i < bx.length && j < bx.length; i++, j++)// 向上判断是否棋子一样
  {
   if (bx[i][j] == bx[x][y])
    count++;
   else
    break;
  }
  return count;
 }
 
 public void Regret() {// 悔棋
  bx[GetX[count1]][GetY[count1]] = 0;
  if (count1 > 0) {
   count1--;
  }
 }
 
 public void Restart() {//重新开始
  {
   for (int k = 0; k <= count1; k++) {
    bx[GetX[k]][GetY[k]] = 0;
   }
  }
 }
}
 


package Study0326;
 
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
 
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

import javax.swing.JPanel;
 
public class WZQFrame extends JPanel implements WZQConfig {
 public void WZQFrame() {
  // WZQFrame ui = new WZQFrame();
  JFrame jf = new javax.swing.JFrame();
  jf.setTitle("五子棋");
  jf.setDefaultCloseOperation(3);
  jf.setSize(1246, 1080);
  jf.setLocationRelativeTo(null);
  jf.setResizable(false);
 
  jf.setLayout(new FlowLayout());
  this.setLayout(new FlowLayout());
 
  this.setPreferredSize(new Dimension(1030, 1080));
 
  // this.setBackground(Color.CYAN);
  // 把面板对象添加到窗体上
  jf.add(this);
  JPanel jp1 = new JPanel();
  jp1.setPreferredSize(new Dimension(200, 1080));
  jp1.setLayout(new FlowLayout());
  jf.add(jp1);
  LoginListener ll = new LoginListener();
  String[] str = { "悔棋", "重新开始" };
  for (int i = 0; i < str.length; i++) {
   JButton jbu1 = new JButton(str[i]);
   jbu1.setPreferredSize(new Dimension(150, 80));
   jbu1.setFont(new Font("楷体", Font.BOLD,20));//设置字体
   jp1.add(jbu1);
   jbu1.addActionListener(ll);
  }
  
  jf.setVisible(true);
 
  Graphics g = this.getGraphics();
 
  this.addMouseListener(ll);
 
  ll.setG(g);
  ll.setU(this);
 }
 
 
 public void paint(Graphics g) {
  super.paint(g);
 
  ImageIcon im2 = new ImageIcon(this.getClass().getResource("2.jpg"));
 
  g.drawImage(im2.getImage(), 0, 0, 1030, 1080, null);
 
  for (int i = 1; i < 17; i++) {
   Graphics2D g2 = (Graphics2D) g;
   g2.setStroke(new BasicStroke(4));
   g2.drawLine(START_X, START_Y * i, START_X + SIZE * V_LINE, START_Y
     * i);// 横线
   g2.drawLine(START_X * i, START_Y, START_X * i, START_Y + SIZE
     * V_LINE);// 竖线
 
   g2.setStroke(new BasicStroke(8));
   // 画边框
   g2.drawLine(35, 35, 990, 35);
   g2.drawLine(35, 990, 990, 990);
   g2.drawLine(35, 35, 35, 990);
   g2.drawLine(990, 35, 990, 990);
  }
  for (int k = 0; k < 17; k++) {
   for (int k1 = 0; k1 < 17; k1++) {
    if (bx[k][k1] == 1) {
     g.setColor(Color.BLACK);
     g.fillOval(Math.abs(k * SIZE - 25),
       Math.abs(k1 * SIZE - 25), 50, 50);
 
    } else if (bx[k][k1] == 2) {
     g.setColor(Color.WHITE);
     g.fillOval(Math.abs(k * SIZE - 25),
       Math.abs(k1 * SIZE - 25), 50, 50);
    }
 
   }
 
  }
 
 }
 
 public static void main(String[] args) {
  WZQFrame l = new WZQFrame();
  l.WZQFrame();
 
 }
 
}
 

到此这篇关于Java实现小程序简单五子棋的文章就介绍到这了,更多相关Java实现简单五子棋内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java实现小程序简单五子棋

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

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

猜你喜欢
  • Java实现小程序简单五子棋
    本程序适用于java初学者巩固类与对象、事件响应、awt包中各种工具的相关概念以及对逻辑能力的锻炼 需要注意的有: ①要加入java界面的重绘(基本原则) ②由...
    99+
    2024-04-02
  • java实现简单五子棋小游戏(1)
    本文实例为大家分享了java实现简单五子棋小游戏的具体代码,供大家参考,具体内容如下 讲解 五子棋,实际上就是用一个数组来实现的。没有其他很复杂的结构。首先我们制作五子棋,先要有一个...
    99+
    2024-04-02
  • java实现简单五子棋小游戏(2)
    本文实例为大家分享了java实现简单五子棋小游戏游戏的具体代码,供大家参考,具体内容如下 讲解 在第一步实现的基础上,添加游戏结束条件。五子棋游戏中的相同棋子如果同时有五个连接成一条...
    99+
    2024-04-02
  • java怎么实现简单五子棋小游戏
    本篇文章为大家展示了java怎么实现简单五子棋小游戏,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。讲解五子棋,实际上就是用一个数组来实现的。没有其他很复杂的结构。首先我们制作五子棋,先要有一个棋盘。...
    99+
    2023-06-26
  • java实现五子棋程序
    本文实例为大家分享了java实现五子棋程序的具体代码,供大家参考,具体内容如下 知识点 1、Swing 编程2、ImageIO 类的使用3、图片的绘制 1、 Swing的概念 S...
    99+
    2022-11-13
    java 五子棋
  • python实现简单五子棋小游戏
    用python实现五子棋简单人机模式的练习过程,供大家参考,具体内容如下 最近在初学python,今天就用自己的一些粗浅理解,来记录一下这几天的python简单人机五子棋游戏的练习,...
    99+
    2024-04-02
  • java实现简单的五子棋游戏
    目录一、主要界面二、功能概况三、代码部分四、部分效果展示本文实例为大家分享了java实现简单五子棋游戏的具体代码,供大家参考,具体内容如下 一、主要界面 1、登录界面;2、游戏选择界...
    99+
    2024-04-02
  • Java实现简单无界面五子棋
    本文项目为大家分享了Java实现无界面五子棋的具体代码,供大家参考,具体内容如下 项目介绍: 本次设计是基于知识点Java类和对象以及数组开发的一个小型五子棋游戏程序。游戏开始时,选...
    99+
    2024-04-02
  • Java实现简易五子棋小游戏
    本文实例为大家分享了Java实现简易五子棋小游戏的具体代码,供大家参考,具体内容如下 五子棋是一个简单小游戏,首先我们先想想五子棋都有什么东西,棋子,棋盘; 首先我们可以定义一个棋子...
    99+
    2024-04-02
  • QT实现简单五子棋游戏
    本文实例为大家分享了QT实现简单五子棋游戏的具体代码,供大家参考,具体内容如下 FIR.pro #----------------------------------------...
    99+
    2024-04-02
  • jQuery实现简单五子棋游戏
    本文实例为大家分享了jQuery实现五子棋游戏的具体代码,供大家参考,具体内容如下 五子棋小游戏实现的基本思路: 以15*15标准面板为棋盘布局,黑白棋子交替下棋。每落下一枚棋子就判...
    99+
    2024-04-02
  • pygame实现简单五子棋游戏
    本文实例为大家分享了pygame实现简单五子棋游戏的具体代码,供大家参考,具体内容如下 看代码: ①Gomuku2.py: import sys import random impo...
    99+
    2024-04-02
  • Java怎么实现简单的五子棋游戏
    本文小编为大家详细介绍“Java怎么实现简单的五子棋游戏”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java怎么实现简单的五子棋游戏”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。项目结构这个是在网上找的资源,...
    99+
    2023-06-30
  • Java怎么实现简单无界面五子棋
    这篇“Java怎么实现简单无界面五子棋”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java怎么实现简单无界面五子棋”文章吧...
    99+
    2023-06-30
  • Java怎么实现简易五子棋小游戏
    这篇文章主要介绍“Java怎么实现简易五子棋小游戏”,在日常操作中,相信很多人在Java怎么实现简易五子棋小游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java怎么实现简易五子棋小游戏”的疑惑有所帮助!...
    99+
    2023-06-30
  • 用C语言实现简单五子棋小游戏
    本文实例为大家分享了C语言实现简单五子棋小游戏的具体代码,供大家参考,具体内容如下 在vs2019创建新项目,然后添加两个源文件test.c和game.c,接着创建一个头文件game...
    99+
    2024-04-02
  • C语言实现简单的五子棋小游戏
    本文实例为大家分享了C语言实现五子棋小游戏的具体代码,供大家参考,具体内容如下 我们需要一个二维数组去储存当前的棋盘状态,然后打印出来。 我们游戏的逻辑是初始化棋盘,打印棋盘,人下棋...
    99+
    2024-04-02
  • Java实现五子棋单机版
    本文实例为大家分享了Java实现五子棋单机版的具体代码,供大家参考,具体内容如下 Java五子棋设计流程: 1.创建窗口和设计一个棋盘界面 2.实现鼠标点击,棋子出现,黑白棋轮流下 ...
    99+
    2024-04-02
  • 微信小程序实现五子棋游戏
    本文实例为大家分享了微信小程序实现五子棋游戏的具体代码,供大家参考,具体内容如下 效果图 .wxml <view class="title">   <view ...
    99+
    2024-04-02
  • java swing怎么实现简单的五子棋游戏
    这篇文章将为大家详细讲解有关java swing怎么实现简单的五子棋游戏,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。用java swing写的一个简单的五子棋游戏。下面是Main.java。packag...
    99+
    2023-06-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作