当前位置: 首页 > news >正文

暑假复习篇之五子棋①

五子棋项目步骤:

1、创建界面【界面必要因素:界面标题、尺寸、位置、关闭方式】

2、创建面板(控制面板与棋盘面板)【面板可以改变面板背景、面板的固定尺寸使用Dimension】

3、在控制面板上添加按钮【可以改变按钮的颜色,以及尺寸(Dimension)】

4、将面板添加到界面上面

5、界面可视化

6、主函数调用界面方法

7、创建监听器类,在界面方法的最前面添加上监听器,棋盘面板加上鼠标监听器,创建棋子类chessFlag是棋子类型

8、监听器类中actionPerformed(ActionEvent e) 实现按钮功能

9、自定义类GoService 用于管理游戏的核心逻辑,先规定棋盘的各项数据【坐标,尺寸,行,列,游戏流程控制变量,定义棋盘二维数组chessArr 在定义一个二维数组chessList储存棋盘的历史记录,chessIndex是chessList的索引】,画棋盘棋子

package lfx250629;import javax.swing.*;
import java.awt.*;import static java.awt.BorderLayout.*;public class GoBangUI {//添加监听器GoBangLinstener goBangLinstener = new GoBangLinstener();public GoBangUI(){//创建一个五子棋界面,添加:界面名字、尺寸、位置、关闭方式JFrame jf = new JFrame();jf.setTitle("五子棋");jf.setSize(1000,1000);jf.setLocationRelativeTo(null);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//添加两块面板,分别是棋盘面板和控制面板JPanel chessPanel = new JPanel();JPanel controlPanel = new JPanel();//设置面板背景chessPanel.setBackground(Color.CYAN);controlPanel.setBackground(Color.white);//设置控制面板的固定尺寸Dimension dimension = new Dimension(120,0);controlPanel.setPreferredSize(dimension);//添加按钮String[] btmStr ={"开始游戏","悔棋","人人对战"};for (int i = 0;i<btmStr.length;i++){JButton jButton = new JButton(btmStr[i]);controlPanel.add(jButton);//将按钮添加到控制面板上jButton.setBackground(Color.GREEN);jButton.setPreferredSize(new Dimension(100,30));//设置按钮的优先尺寸}jf.add(chessPanel, EAST);jf.add(controlPanel, WEST);jf.setVisible(true);//在棋盘面板上添加鼠标监听器chessPanel.addMouseListener(goBangLinstener);}public static void main(String[] args) {new GoBangUI();}
}

注意:如果定义棋盘面板是ChessPanel chessPanel = new ChessPanel();则需要创建一个ChessPanel使其继承JPanel 

package lfx250629;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;public class GoBangLinstener implements MouseListener, ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {//实现按钮功能String ac = e.getActionCommand();if (ac.equals("开始游戏")){//(JButton)是一个强制转换符 将object转化为JButton//e.getSource();作用:返回触发事件对象,其返回类型为objectJButton jButton = (JButton) e.getSource();jButton.setText("结束对局");jButton.setBackground(Color.RED);} else if (ac.equals("悔棋")) {} else if (ac.equals("人人对战")) {JButton jButton = (JButton) e.getSource();jButton.setText("开始游戏");jButton.setBackground(Color.GREEN);}}@Overridepublic void mouseClicked(MouseEvent e) {int x = e.getX();int y = e.getY();System.out.println("x:"+x+"y:"+y);}@Overridepublic void mousePressed(MouseEvent e) {}@Overridepublic void mouseReleased(MouseEvent e) {}@Overridepublic void mouseEntered(MouseEvent e) {}@Overridepublic void mouseExited(MouseEvent e) {}
}
package lfx250629;import java.awt.*;
import java.awt.image.BufferedImage;public class GoService {//GoService 是一个自定义类,通常用于管理游戏的核心逻辑//规定好棋盘的数据static final int X = 50;static final int Y = 50;static final int SIZE = 50;static final int ROW = 15;//行static final int COL = 15;//列//游戏流程控制变量int chessFlog = 0;//图形渲染Graphics g;//游戏数据static  int[][] chessArr = new int[ROW+1][COL+1];//[ROW+1][COL+1]表示二维数组的长度static Chess[] chessList = new Chess[(ROW+1)*(COL+1)];//chessList储存棋盘中棋子的数据,是棋盘的历史记录final int chessIndex = 0;//chessIndex为chessList的索引//画棋盘public static void drawChessPad(Graphics g){//缓冲绘图BufferedImage bufferedImage = new BufferedImage(880,1000,2);Graphics ig = bufferedImage.getGraphics();//从缓冲绘图上获得画笔//绘制棋盘背景ig.setColor(Color.pink);  //画笔颜色ig.fillRect(X-SIZE/2,Y-SIZE/2,SIZE*(COL+1),SIZE*(ROW+1));//先画棋盘最外面的框框//绘制棋盘的线ig.setColor(Color.BLACK);for (int i = 0;i <= COL;i++){ig.drawLine(X,Y+SIZE*1,X+SIZE*COL,Y+SIZE*i);ig.drawLine(X+SIZE*1,Y,X+SIZE*i,Y+SIZE*ROW);}g.drawImage(bufferedImage,0,0,null);}//自定义开始游戏public  void initGame(){chessFlog = 1;//数据重置chessArr = new int[ROW+1][COL+1];drawChessPad(g);}//画棋子public static void drawAllChess(Graphics g){}}
package lfx250629;public class Chess {int r,c;int chessFlag;public Chess(int r, int c, int chessFlag){this.r = r ;this.c = c ;this.chessFlag = chessFlag;}
}

知识点回顾加补充

1、BorderLayout布局有东西南北中四个部分,面板使用该布局添加到界面上的时候

格式:jf.add(chessPanel , BorderLayout . 方位)

 东EAST            西WEST        南SOUTH           北NORTH          中CENTER

2、动作监听器与鼠标监听器的方法

@Overridepublic void actionPerformed(ActionEvent e) {// 处理按钮点击事件String ac = e.getActionCommand();//获取按钮的文本信息}
public interface MouseListener extends EventListener {void mouseClicked(MouseEvent e);   // 鼠标点击(按下并释放)void mousePressed(MouseEvent e);   // 鼠标按下void mouseReleased(MouseEvent e);  // 鼠标释放void mouseEntered(MouseEvent e);   // 鼠标进入组件区域void mouseExited(MouseEvent e);    // 鼠标离开组件区域
}

3、上面代码中的:

        ①e.getSource();返回触发事件对象,其返回类型为object

        ②(JButton)强制转换符 将object类型转换为JButton【①②  适用于多个按钮共同使用一个监听器,用于区别出发了什么事件】

         ③BufferedImage:图像缓冲区,本质是一个存储像素数据的内存区域

        构造方法:BufferedImage(int width,int height,int ImageType[图像类型])

        常用方法:int getWidth/int get height()获得图像宽度,高度

                          int getRGB(int x, int y)获得指定坐标像素颜色

        ④chessIndex:计数器,记录当前棋盘上棋子的数目

        ⑤Graphics常用方法

 单词:

default 默认,违约,缺席

close 关闭,停止,完成

operation 运作,实施,行动

preferredsize 优先位置

dimension 大小,维度,范围

border 边界,包边,花带,国境

相关文章:

  • MongoDB06 - MongoDB 地理空间
  • Cursor 教程:用 Cursor 创建第一个 Java 项目
  • Blood-Cat 公網網路攝像機泄露收集器:查看指定國家地區攝像
  • 左神算法之螺旋打印
  • Docker 镜像构建 - Aliyun
  • 深入探索 GORM:Go 语言中的强大 ORM 工具
  • 熟悉 PyCharm
  • 常识科普:去杠杆通常分为四个步骤
  • Spring Cloud:分布式事务管理与数据一致性解决方案
  • KPL战队近五年热度指数
  • springboot小区物业管理系统
  • CppCon 2017 学习:Undefined Behavior in 2017
  • Redis 持久化之 AOF 策略
  • (LeetCode 面试经典 150 题 ) 134. 加油站 (贪心)
  • RedisVL Schema 官方手册详读
  • 用户行为序列建模(篇六)-【阿里】DSIN
  • BF的数据结构题单-省选根号数据结构 - 题单 - 洛谷 计算机科学教育新生态
  • SQL Server从入门到项目实践(超值版)读书笔记 19
  • 03【C++ 入门基础】函数重载
  • 使用ros2服务实现人脸检测4-客户端(适合0基础小白)