全国
Java--教育路上

栏目导航

全国站 > Java > 课堂作业
需求

java 任务介绍 豆机 gui 图形界面

摘要:java 任务介绍 豆机。以下是我们为大家整理的,相信大家阅读完后肯定有了自己的选择吧。

标签:
发布时间:
2024-04-24 21:59
信息来源:
网络推荐
浏览次数:
830
java 任务介绍 豆机 gui 图形界面

任务介绍 豆机,也叫梅花瓶或高尔顿机,它是用来做统计实验的设备,使用英国科学家
瑟弗兰克斯高尔顿的名字命名的。它是一个三角形状的均匀放置钉子的直立板子。球都是从
板子口落下,每当碰到钉子,它就有 50%的机会落向左边或右边。在板子底部的槽子中都会
积累一些球。编写程序模拟豆机。
任务目标 掌握窗体界面的使用,掌握图形绘制的方法,掌握豆机的实现思想。
实现思路 绘制豆机瓶子和钉子位置,生成小球落入瓶中,随机生成下落路径(向左或向

右落的次数),根据下路路径绘制小球下落轨迹。

from shengerguan

实现代码:
Example01.java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Example01 extends JFrame { 
 final static int NUMBER_OF_SLOTS = 9;
 final static int NUMBER_OF_ROWS = NUMBER_OF_SLOTS - 2;
 private int shift = 0;
 private int[] slots = new int[NUMBER_OF_SLOTS];
 private int numberOfBallsDropped = 0;
 private int moveCount = 0;
 private int position = 0;
 private BeanMachinePanel paintPanel = new BeanMachinePanel();
 private Timer timer = new Timer(200, new ActionListener() {
 public void actionPerformed(ActionEvent e) {
 moveCount++;
 if (moveCount <= NUMBER_OF_ROWS) {
 if (Math.random() < 0.5) 
 paintPanel.moveRedBallLeft();
 else {
 paintPanel.moveRedBallRight();
 position++;
 }
 }
 else {
 slots[position]++;
 paintPanel.startRedBall();
 shift = 0;
 moveCount = 0;
 position = 0;
 
 numberOfBallsDropped++;
 if (numberOfBallsDropped == 10) {
 timer.stop();
 paintPanel.hideRedBall();
 }
 }
 }
 });
 
 public Example01() {
 add(paintPanel);
 timer.start();
 }

 class BeanMachinePanel extends JPanel {
 final static int HGAP = 20;
 final static int VGAP = 20;
 final static int RADIUS = 5;
 final static int LENGTH_OF_SLOTS = 40;
 final static int LENGTH_OF_OPENNING = 15;
 final static int Y_FOR_FIRST_NAIL = 50;
 final static int RED_BALL_START_Y = Y_FOR_FIRST_NAIL - RADIUS;
 private int yRed = RED_BALL_START_Y;
 private boolean hideRedBall = false;
 
//小球向左落下
 public void moveRedBallLeft() {
 shift -= HGAP / 2;
 yRed += VGAP;
 repaint();
 }
 //小球向右落下
 public void moveRedBallRight() {
 shift += HGAP / 2;
 yRed += VGAP;
 repaint();
 }
 
 public void startRedBall() {
 yRed = RED_BALL_START_Y;
 hideRedBall = false;
 repaint();
 }
 
 public void hideRedBall() {
 hideRedBall = true;
 repaint();
 }
 
 
 protected void paintComponent(Graphics g) {
 super.paintComponent(g);
 int y = Y_FOR_FIRST_NAIL;
 int xCenter = getWidth() / 2;
 if (!hideRedBall) {
 g.setColor(Color.RED);
 int xRed = xCenter + shift;
 g.fillOval(xRed - RADIUS, yRed - RADIUS, 2 * RADIUS, 2 * RADIUS);
 }
 
 g.setColor(Color.GREEN);
 for (int i = 0; i < NUMBER_OF_ROWS; i++) {
 y += VGAP;
 for (int k = 0; k <= i; k++) {
 g.fillOval(xCenter - i * HGAP / 2 + k * HGAP - RADIUS, y - RADIUS, 2 * RADIUS, 2 * 
RADIUS);
 }
 }
 
 
 g.setColor(Color.BLACK);
 y = y + RADIUS;
 for (int i = 0; i < NUMBER_OF_SLOTS; i++) {
 int x = xCenter - (NUMBER_OF_ROWS - 1) * HGAP / 2 + (i - 1) * HGAP;
 g.drawLine(x, y, x, y + LENGTH_OF_SLOTS);
 }
 
 
 g.drawLine(xCenter - (NUMBER_OF_ROWS - 1) * HGAP / 2 - HGAP, y + LENGTH_OF_SLOTS, 
 xCenter - (NUMBER_OF_ROWS - 1) * HGAP / 2 + NUMBER_OF_ROWS * HGAP, y + 
LENGTH_OF_SLOTS);
 
 g.drawLine(xCenter + HGAP / 2, Y_FOR_FIRST_NAIL + RADIUS, xCenter -
(NUMBER_OF_ROWS - 1) * HGAP / 2 + NUMBER_OF_ROWS 
* HGAP, y);
 g.drawLine(xCenter - HGAP / 2, Y_FOR_FIRST_NAIL + RADIUS, xCenter -
(NUMBER_OF_ROWS - 1) * HGAP / 2 - HGAP, y);
 
 g.drawLine(xCenter - HGAP / 2, Y_FOR_FIRST_NAIL + RADIUS, xCenter - HGAP / 2, 
Y_FOR_FIRST_NAIL - LENGTH_OF_OPENNING);
 g.drawLine(xCenter + HGAP / 2, Y_FOR_FIRST_NAIL + RADIUS, xCenter + HGAP / 2, 
Y_FOR_FIRST_NAIL - LENGTH_OF_OPENNING);
 
 
 g.setColor(Color.RED); 
 for (int i = 0; i < slots.length; i++) {
 int x = xCenter - (NUMBER_OF_ROWS) * HGAP / 2 + i * HGAP;
 for (int j = 0; j < slots[i]; j++) {
 g.fillOval(x - RADIUS, y + LENGTH_OF_SLOTS - 2 * RADIUS - j * 2 * RADIUS, 2 * 
RADIUS, 2 * RADIUS);
 }
 }
 }
 }
 public static void main(String[] args) {
 JFrame frame = new Example01();
 frame.setTitle("Example01");
 frame.setSize(300, 300);
 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 frame.setLocationRelativeTo(null);
 frame.setVisible(true);
 }
}

上一篇:
java定义成员变量
下一篇:
java聊天室代码图形窗口设计
相关推荐
最近更新
学校免费发布信息关闭
如有图片请发邮件到:edu63@foxmail.com,审核后显示

 换一张

确认提交
完善补充本文信息关闭
非常感谢您帮助完善补充本文信息


 换一张

确认提交