返回顶部
首页 > 资讯 > 后端开发 > Python >Java实现空指针后的猜拳游戏
  • 818
分享到

Java实现空指针后的猜拳游戏

2024-04-02 19:04:59 818人浏览 八月长安

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

摘要

目录前言插件实现创建项目猜拳游戏实现游戏弹窗实现监听空指针异常安装插件演示最后前言 “java.lang.NullPointerException” 空指针异

前言

“java.lang.NullPointerException” 空指针异常可以说是Java程序最容易出现的异常了,我写了一个 idea 插件,每当程序出现空指针异常时就会弹出一个“猜拳游戏”窗口,该窗口不能直接关闭,只有当你游戏获胜时,窗口才会自动关闭。

作用是啥?

嘲讽罢了。

插件实现

创建项目

IDEA 创建一个插件开发项目非常方便,已经内置了。

猜拳游戏实现

很简单。

实现原理:提供3个按钮,分别为“石头、剪刀、布”,对应值“1、2、3”,再为按钮绑定点击事件,按键点击之后调用处理函数传入对应的值即可。

处理函数 handle(int selectedValue) 的实现:利用随机数随机为电脑生成一个值与用户选择的值做比较,“石头赢剪刀、剪刀赢布、布赢石头”,然后显示游戏结果,用户获胜时会触发回调函数(用于关闭弹窗)。

package cn.xeblog.mora.ui;

import javax.swing.*;
import java.awt.*;
import java.util.Random;


public class MoraGame extends JPanel {

    
    private Runnable runnable;

    
    private JLabel tipsLabel;

    
    private boolean isOver;

    public MoraGame(Runnable runnable) {
        setMinimumSize(new Dimension(250, 100));
        setLayout(new BorderLayout());
        this.runnable = runnable;
        init();
    }

    private void init() {
        this.tipsLabel = new JLabel("请出拳!", JLabel.CENTER);
        this.tipsLabel.setPreferredSize(new Dimension(250, 50));
        this.tipsLabel.setFont(new Font("", 0, 15));
        this.tipsLabel.setForeground(new Color(255, 128, 128));

        JButton stoneButton = new JButton("石头");
        JButton shearsButton = new JButton("剪刀");
        JButton clothButton = new JButton("布");

        stoneButton.setFocusPainted(false);
        stoneButton.setBorderPainted(false);
        stoneButton.addActionListener(l -> handle(1));

        shearsButton.setFocusPainted(false);
        shearsButton.setBorderPainted(false);
        shearsButton.addActionListener(l -> handle(2));

        clothButton.setFocusPainted(false);
        clothButton.setBorderPainted(false);
        clothButton.addActionListener(l -> handle(3));

        JPanel centerPanel = new JPanel();
        centerPanel.setPreferredSize(new Dimension(250, 30));
        centerPanel.add(stoneButton);
        centerPanel.add(shearsButton);
        centerPanel.add(clothButton);

        add(tipsLabel, BorderLayout.NORTH);
        add(centerPanel, BorderLayout.CENTER);
    }

    private void handle(int selectedValue) {
        if (isOver) {
            return;
        }

        int value = new Random().nextInt(3) + 1;
        boolean isWin = selectedValue == (value - 1 == 0 ? 3 : value - 1);

        String result;
        if (isWin) {
            isOver = true;
            result = "你赢~";
        } else if (selectedValue == value) {
            result = "平局~";
        } else {
            result = "电脑赢~";
        }
        showTips("电脑 -> " + getText(value) + ",你 -> " + getText(selectedValue) + "," + result);

        if (isWin) {
            new Thread(() -> {
                try {
                    Thread.sleep(800);
                    this.runnable.run();
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }).start();
        }
    }

    private String getText(int value) {
        switch (value) {
            case 1:
                return "石头";
            case 2:
                return "剪刀";
            case 3:
                return "布";
        }

        return "";
    }

    private void showTips(String tips) {
        tipsLabel.setText(tips);
    }

}

游戏弹窗实现

将窗口设置为不可关闭,传递弹窗关闭回调函数到游戏处理对象。

package cn.xeblog.mora.ui;

import com.intellij.openapi.ui.DialogWrapper;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import javax.swing.*;


public class MoraDialog extends DialogWrapper {

    public MoraDialog() {
        super(true);
        setTitle("猜拳游戏?");
        setResizable(false);
        setCrossClosesWindow(false);
        init();
    }

    @Override
    protected @Nullable JComponent createCenterPanel() {
        return new MoraGame(() -> SwingUtilities.invokeLater(() -> this.close(0)));
    }

    @Override
    protected @NotNull Action[] createActions() {
        return new Action[]{};
    }

}

监听空指针异常

实现控制台过滤接口,判断控制台的输出内容是否包含 java.lang.NullPointerException ,如果包含则弹出游戏窗口。

package cn.xeblog.mora.filter;

import cn.xeblog.mora.ui.MoraDialog;
import com.intellij.execution.filters.ConsoleFilterProvider;
import com.intellij.execution.filters.Filter;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;

import javax.swing.*;


public class ConsoleFilter implements ConsoleFilterProvider {

    @Override
    public Filter @NotNull [] getDefaultFilters(@NotNull Project project) {
        return new Filter[]{(line, entireLength) -> {
            if (line.contains("java.lang.NullPointerException")) {
                SwingUtilities.invokeLater(() -> new MoraDialog().show());
            }

            return null;
        }};
    }

}

注册过滤器

plugin.xml 添加我们自定义的控制台过滤器实现。

    <extensions defaultExtensionNs="com.intellij">
        <consoleFilterProvider implementation="cn.xeblog.mora.filter.ConsoleFilter"/>
    </extensions>

安装插件

插件打包

Gradle -> Tasks -> build -> assemble

打包之后的文件位于项目的 build 目录下:build/distributions/xxx.zip

插件安装

进入插件中心,选择本地文件安装即可。

演示

会出现空指针的代码

    public static void main(String[] args) {
        Object obj = null;
        System.out.println(obj.toString());
    }

运行之后

当我猜拳赢了之后,窗口就自动关闭了。

最后

完整代码:https://GitHub.com/anlingyi/Mora

到此这篇关于Java实现空指针后的猜拳游戏的文章就介绍到这了,更多相关Java猜拳游戏内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java实现空指针后的猜拳游戏

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

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

猜你喜欢
  • Java实现空指针后的猜拳游戏
    目录前言插件实现创建项目猜拳游戏实现游戏弹窗实现监听空指针异常安装插件演示最后前言 “java.lang.NullPointerException” 空指针异...
    99+
    2024-04-02
  • java实现猜拳游戏试题
    本文实例为大家分享了java实现猜拳游戏的具体代码,供大家参考,具体内容如下 试题描述 通过控制台方式实现一个人机对战的猜拳游戏,用户通过输 入(1.剪刀 2.石头 3.布),机器随...
    99+
    2024-04-02
  • JS实现猜拳游戏
    本文实例为大家分享了JS实现猜拳游戏的具体代码,供大家参考,具体内容如下 一、简单版猜拳游戏 编写一个用户和计算机猜拳的游戏,用户输入剪刀、石头或布,与计算机的出拳进行比较,判断胜负...
    99+
    2024-04-02
  • 使用java实现猜拳小游戏
    本文实例为大家分享了java实现猜拳小游戏的具体代码,供大家参考,具体内容如下 实现下图要求 public class User { private String u_n...
    99+
    2024-04-02
  • java实现简单猜拳小游戏
    本文实例为大家分享了java实现猜拳小游戏的具体代码,供大家参考,具体内容如下 User.java import java.util.Scanner; public class ...
    99+
    2024-04-02
  • Java实现人机对战猜拳游戏
    本文实例为大家分享了Java实现人机对战猜拳游戏的具体代码,供大家参考,具体内容如下 通过控制台方式实现一个人机对战的猜拳游戏 1.用户通过输入(2.剪刀 0.石头 5.布) 2...
    99+
    2024-04-02
  • java如何实现猜拳游戏试题
    这篇文章将为大家详细讲解有关java如何实现猜拳游戏试题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。试题描述通过控制台方式实现一个人机对战的猜拳游戏,用户通过输入(1.剪刀 2.石头 3.布),机器随机...
    99+
    2023-06-14
  • 怎么用java实现猜拳小游戏
    本篇内容介绍了“怎么用java实现猜拳小游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!本文实例为大家分享了java实现猜拳小游戏的具体代...
    99+
    2023-06-20
  • Python实现简单猜拳游戏
    本文实例为大家分享了Python实现猜拳游戏的具体代码,供大家参考,具体内容如下 分析 1.玩家从控制台输入内容 2.电脑随机输出石头剪刀布 3.判断 4.程序结束 代码块 #1猜拳...
    99+
    2024-04-02
  • java怎么实现简单猜拳小游戏
    本篇内容主要讲解“java怎么实现简单猜拳小游戏”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java怎么实现简单猜拳小游戏”吧!User.javaimport java.util.S...
    99+
    2023-06-25
  • 怎么用Java实现人机对战猜拳游戏
    本篇内容主要讲解“怎么用Java实现人机对战猜拳游戏”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Java实现人机对战猜拳游戏”吧!本文实例为大家分享了Java实现人机对战猜拳游戏的具体代...
    99+
    2023-06-20
  • Python实现猜拳与猜数字游戏的方法详解
    至此,我们的 Python零基础入门篇 的系列专栏到今天基本上算是结束了。今天没有任何的知识点,只是运用我们之前学习过的知识做两个小游戏的案例。第一个是模拟猜拳的小游戏,第二个就是猜...
    99+
    2024-04-02
  • HTML+JS实现猜拳游戏的示例代码
    目录效果图关于JS构建过程添加事件监听器函数 gameRules()函数 whoWon()效果图 游戏可以通过这个链接进入 关于JS构建过程 首先,我创建了一个对象,其中包含每种可...
    99+
    2024-04-02
  • 最常见的猜拳小游戏Android代码实现
    本文实例为大家分享了Android猜拳小游戏,供大家参考,具体内容如下 简单的 页面跳转 和 点击事件 的实现... --> AndroidManifest.xml ...
    99+
    2022-06-06
    猜拳 Android
  • C语言详细实现猜拳游戏流程
    目录一、游戏逻辑二、思维导图三、游戏过程四、代码分析1.设置随机数的方法2.设置计算机出拳的方法3.判断输赢的方法4.玩家猜拳五、完整代码一、游戏逻辑 1.打印选择菜单(1.play...
    99+
    2024-04-02
  • C语言实现猜拳游戏的代码怎么写
    本篇内容主要讲解“C语言实现猜拳游戏的代码怎么写”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言实现猜拳游戏的代码怎么写”吧!一、游戏逻辑打印选择菜单(1.play,0.exit)提示玩家0...
    99+
    2023-06-30
  • 使用C语言怎么实现一个猜拳小游戏
    本篇文章给大家分享的是有关使用C语言怎么实现一个猜拳小游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。具体内容如下#include<stdio.h>#includ...
    99+
    2023-06-06
  • 用java实现猜数字游戏
    本文实例为大家分享了java实现猜数字游戏的具体代码,供大家参考,具体内容如下 一、游戏操作 游戏操作如下: 后台预先生成一个1-100之间的随机数,用户键盘录入猜数字 如果猜...
    99+
    2024-04-02
  • Java实现猜数字小游戏
    目录1. 开篇简介2. 需求简介3. 思路分析4. 步骤讲解5. 代码实现6. 如何更快猜到数字的方法总结1. 开篇简介 嗨,大家好!!!『』最近『马上』就要『过年』了,先祝大家『新...
    99+
    2024-04-02
  • Java怎么实现猜数字游戏
    本篇文章给大家分享的是有关Java怎么实现猜数字游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。前言以前在学C语言的时候,做过一个猜数字游戏,这两天学了Java的逻辑结构,试...
    99+
    2023-06-25
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作