首页 > 编程语言 >Java实验-Swing 色子游戏

Java实验-Swing 色子游戏

时间:2023-03-02 13:34:05浏览次数:35  
标签:Java frame Swing imageLabel new import 色子 public

一、实验要求:、

  1. 筛子游戏是一个具有趣味性的小游戏,它的实现原理是绘制图形,加载图片,通过鼠标事件点击按钮,晃动色子采用的是定时器,每隔200毫秒切换一次色子的图片实现:

请用Java图形界面的知识,编写以上软件。

代码:

MyFrame主界面类和MyTask定时器类

package com.junlin.exer_8;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class MyFrame extends JFrame {
    public int score = 100; //记录得分
    public int cnt = 1;   //记录当前色子的点数
    public JLabel imageLabel;
    public String filepath = "D:/onedrive/桌面/Java学习/Java作业/实验/实验8色子游戏/色子素材/a";
    //由于我没有新开一个点击处理类,就直接将整个窗口放到全局了
    public MyFrame window = this;
    public Timer timer; //定时器
    public JLabel titleLabel;  //文字
    public boolean isStop = true;  //判断当前摇色子是否处于停止状态

    public MyFrame() {
        super("xxx");
        JPanel root = new JPanel();
        root.setLayout(null);

        titleLabel = new JLabel("当前分数为:" + score);
        titleLabel.setBounds(150, 20, 100, 20);
        root.add(titleLabel);

        imageLabel = new JLabel();
        imageLabel.setIcon(new ImageIcon(filepath + cnt + ".jpg"));
        imageLabel.setBounds(150, 80, 120, 120);
        root.add(imageLabel);

        JButton playBtn = new JButton("摇色子");
        playBtn.addActionListener(new ActionListener() {
            //摇色子按键处理
            @Override
            public void actionPerformed(ActionEvent e) {
                //如果上一次没有停止就不继续执行,因为这样会让定时加快
                if(isStop == false) return ;
                isStop = false;
                timer = new Timer();
                timer.schedule(new MyTask(window), 0, 200);
            }
        });
        playBtn.setBounds(150, 200, 120, 50);
        root.add(playBtn);

        JButton bigBtn = new JButton("买大");
        bigBtn.addActionListener(new ActionListener() {
            //买大按键处理
            @Override
            public void actionPerformed(ActionEvent e) {
                //如果摇色子停止了就不能再判断分数了
                if(isStop == true) return ;
                timer.cancel();
                isStop = true;
                if(cnt >= 4) {
                    score += 10;
                }else {
                    score -= 10;
                }
                titleLabel.setText("当前分数 为" + score);
                titleLabel.paintImmediately(titleLabel.getBounds());
            }
        });
        bigBtn.setBounds(100, 300, 80, 50);
        root.add(bigBtn);

        JButton smallyBtn = new JButton("买小");
        smallyBtn.addActionListener(new ActionListener() {
            //买小按键处理
            @Override
            public void actionPerformed(ActionEvent e) {
                //如果摇色子停止了就不能再判断分数了
                if(isStop == true) return ;
                timer.cancel();
                isStop = true;
                if(cnt < 4) {
                    score += 10;
                }else {
                    score -= 10;
                }
                titleLabel.setText("当前分数 为:" + score);
            }
        });
        smallyBtn.setBounds(220, 300, 80, 50);
        root.add(smallyBtn);

        this.add(root);
        this.setSize(new Dimension(400, 600));
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
//定时器线程用来进行摇色子
class MyTask extends TimerTask{
    private MyFrame frame;
    public MyTask(MyFrame frame) {
        this.frame = frame;
    }
    @Override
    public void run() {
        //生成一个随机数用来选择目录下的一张色子图片
        int n = 1 + (int)(Math.random() * (6-1+1));
        this.frame.cnt = n;
        this.frame.imageLabel.setIcon(new ImageIcon(this.frame.filepath + this.frame.cnt + ".jpg"));
        //frame.imageLabel.paintImmediately(frame.imageLabel.getBounds());
    }
}

JavaMain类:

package com.junlin.exer_8;

public class JavaMain {

    public static void main(String[] args) {
        new MyFrame();
    }
}

标签:Java,frame,Swing,imageLabel,new,import,色子,public
From: https://www.cnblogs.com/junlin623/p/17171478.html

相关文章

  • Java实验-Swing 计算器
    实验要求:计算器软件是非常实用的工具请用Java图形界面的知识,编写以上软件。仅用JButton、JTextField两个组件和JFrame窗口实现。实现基本的加减乘除运算。代码:Gr......
  • Java实验-Swing 扑克牌游戏
    实验要求:扑克牌游戏是非常具有趣味性游戏,如下图所示,建立一个窗口界面,用JLable和相关组件(比如适当增加按钮,文本域等,可以自由发挥)实现以下界面,要求:点击任何一张牌,能控制......
  • Java实验-Swing 涂鸦板
    实验要求:涂鸦板是一个具有趣味性的小程序,它的实现原理是通过鼠标事件,控制鼠标移动结合画图功能实现。鼠标拖拽才开始绘制,松开鼠标则停止绘制。代码:--MyPaint画板类:pac......
  • java调用WCF服务
    一、概述最近项目上有需要和建科机器进行通信的需求,而建科这边给的技术文档和服务都是webservice的,我这边要做的就是用Java和建科的webservice交互。启动建科的webservice......
  • 【JavaScript】33_递归
    17、递归递归调用自身的函数称为递归函数递归的作用和循环是基本一直递归的核心思想就是将一个大的问题拆分为一个一个小的问题,小的问题解决了,大的问题也就解决了编写递归函......
  • mac系统上hdfs java api的简单使用
    1、背景在上一节中,我们简单学习了在命令行上如何操作hdfsshellapi,此处我们通过java程序来操作一下。2、环境准备需要在本地环境变量中配置HADOOP_HOME或在程序启动......
  • mac系统上hdfs java api的简单使用
    目录1、背景2、环境准备3、环境搭建3.1引入jar包3.2引入log4j.properties配置文件3.3初始化HadoopApi4、javaapi操作4.1创建目录4.2上传文件4.3列出目录下有哪些文......
  • Java读取文件的几种方式
    1.使用流读取文件publicstaticvoidstream(){StringfileName="D:\\test.txt";finalStringCHARSET_NAME="UTF-8";List<String>content=new......
  • 【javascript】slice()、substring()和substr() 三种字符串截取方法区别
    slice(start,end):slice(start,end)方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。 1、start(包含)和end(不包含)参数来指定字符串提取的部分;2、......
  • Java--判空方法
    方法有StringUtils.isBlank(),StringUtils.isNotBlank(),StringUtils.isEmpty();使用关系StringUtils.isNotEmpty()==!StringUtils.isEmpty();StringUti......