이 기사의 예제에서는 스윙을 기반으로 Java로 구현된 핀볼 게임 코드를 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요.
주요 기능 코드는 다음과 같습니다.
다음과 같이 코드 코드를 복사합니다.
패키지 게임;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.ButtonGroup;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JRadioButtonMenuItem;
/**
* 게임 인터페이스 클래스
*
* @author 관리자
*
*/
공개 클래스 게임은 javax.swing.JFrame을 확장합니다.
개인 정적 최종 긴 serialVersionUID = 1L;
비공개 정적 게임 UI;
개인 그래픽 g;
개인 청취자 ml;
공개 javax.swing.JLabel text_field;
공개 javax.swing.JProgressBar pBar;
개인 문자열 명령;
공용 ArrayList<MyThread> 목록 = new ArrayList<MyThread>();
개인 javax.swing.JToggleButton 버튼;
공개 정적 무효 메인(문자열 인수[]) {
UI = 새로운 게임();
UI.initUI();
}
/**
* 폼 초기화 방법
*/
공공 무효 initUI() {
//제목 설정
this.setTitle("당신이 마스터라면 10초 동안 집중하세요.");
//크기 설정
this.setSize(610, 635);
// 종료를 설정하여 프로그램을 종료합니다.
this.setDefaultCloseOperation(3);
//폼이 열리면 화면 중앙에 표시되도록 설정
this.setLocationRelativeTo(null);
//폼의 흐름 레이아웃 관리자를 설정합니다.
this.setLayout(new java.awt.FlowLayout());
//폼 배경색 설정
this.getContentPane().setBackground(java.awt.Color.black);
//텍스트 라벨 객체 생성
text_field = new javax.swing.JLabel();
javax.swing.JLabel label = new javax.swing.JLabel("시간:");
//텍스트 라벨 전경색 설정
lable.setForeground(java.awt.Color.red);
text_field.setForeground(java.awt.Color.red);
//진행 막대 객체 생성
pBar = new javax.swing.JProgressBar(0, 330);
//버튼 객체 생성
버튼 = 새로운 javax.swing.JToggleButton();
버튼.setMargin(새 삽입(0, 0, 0, 0));
버튼.setIcon(new javax.swing.ImageIcon("images/Pause.gif"));
버튼.setActionCommand("일시중지");
// 익명 내부 클래스를 통해 액션 리스너 생성
java.awt.event.ActionListener 버튼_리스너 = 새로운 java.awt.event.ActionListener() {
공공 무효 actionPerformed(ActionEvent e) {
String com = e.getActionCommand();
if (com.equals("pause")) {
버튼.setMargin(새 삽입(0, 0, 0, 0));
버튼.setIcon(new javax.swing.ImageIcon("images/start.gif"));
버튼.setActionCommand("계속");
for (int i = 0; i < list.size(); i++) {
list.get(i).PauseThread();
}
}
if (com.equals("계속")) {
버튼.setMargin(새 삽입(0, 0, 0, 0));
버튼.setIcon(new javax.swing.ImageIcon("images/Pause.gif"));
버튼.setActionCommand("일시중지");
for (int i = 0; i < list.size(); i++) {
list.get(i).ContinueThread();
}
}
}
};
버튼.addActionListener(button_listener);
this.add(버튼);
this.add(레이블);
this.add(pBar);
this.add(text_field);
// 메뉴바로 이동
JMenuBar bar = creatMenuBar();
//폼의 메뉴바 설정
this.setJMenuBar(bar);
//폼의 가시성을 설정합니다.
this.setVisible(true);
}
/**
* 메뉴바 생성 방법
*
* @반품
*/
공개 JMenuBar creatMenuBar() {
//메뉴바 객체 생성
JMenuBar bar = new JMenuBar();
//메뉴 객체 생성
JMenu menu_menu = new JMenu("메뉴");
JMenu 난이도_메뉴 = new JMenu("난이도");
JMenu help_menu = new JMenu("도움말");
//메뉴 옵션 객체 생성
JMenuItem star_item = new JMenuItem("시작");
JMenuItem exit_item = new JMenuItem("종료");
JMenuItem help_item = new JMenuItem("게임 설명");
JMenuItem about_item = new JMenuItem("about");
//라디오 옵션 생성
JRadioButtonMenuItem easy_item = 새로운 JRadioButtonMenuItem(
"단순한");
JRadioButtonMenuItem middle_item = 새로운 JRadioButtonMenuItem(
"중간");
JRadioButtonMenuItem hard_item = 새로운 JRadioButtonMenuItem(
"어려움");
//버튼 그룹 생성
ButtonGroup 그룹 = new ButtonGroup();
// 버튼 그룹에 라디오 버튼 추가
그룹.추가(easy_item);
그룹.추가(middle_item);
그룹.추가(hard_item);
// 메뉴에 라디오 버튼 추가
어려움_메뉴.추가(easy_item);
어려움_메뉴.추가(middle_item);
어려움_메뉴.추가(hard_item);
// 익명 내부 클래스를 통해 액션 리스너 생성
ActionListener 리스너 = 새로운 ActionListener() {
공공 무효 actionPerformed(ActionEvent e) {
명령 = e.getActionCommand();
// start가 선택되면 스레드 객체를 생성합니다.
if (command.equals("start") && list.size() == 0) {
creatBall(20, 1);
}
// 종료 버튼이 선택되면 프로그램을 종료합니다.
if (command.equals("종료")) {
시스템.exit(0);
}
//간단한 버튼이 선택된 경우
if (command.equals("simple") && list.size() == 0) {
creatBall(20, 1);
}
// 미디엄 버튼이 선택된 경우
if (command.equals("medium") && list.size() == 0) {
creatBall(50, 2);
}
if (command.equals("난이도") && list.size() == 0) {
creatBall(40, 2);
}
if (command.equals("게임 설명")) {
JOptionPane.showMessageDialog(null,
"마우스를 움직여 배플을 사용해 공을 잡으세요. 잡지 못하면 패배합니다.../n게임은 쉬움, 중간, 어려움을 포함한 난이도를 선택할 수 있습니다.");
}
if (command.equals("about")) {
JOptionPane
.showMessageDialog(널,
"이것은 Java로 작성된 작은 게임입니다.../n제작자: Shen Guanjun/nTime: 2010년 8월/n저작권, 모든 복제는 조사됩니다!");
}
}
};
//액션 리스너 추가
star_item.addActionListener(리스너);
exit_item.addActionListener(리스너);
easy_item.addActionListener(리스너);
middle_item.addActionListener(리스너);
hard_item.addActionListener(리스너);
help_item.addActionListener(리스너);
about_item.addActionListener(리스너);
//메뉴 옵션 객체를 메뉴 객체에 추가합니다.
menu_menu.add(star_item);
menu_menu.add(exit_item);
help_menu.add(help_item);
help_menu.add(about_item);
//메뉴바에 메뉴객체 추가
bar.add(menu_menu);
bar.add(난이도_메뉴);
bar.add(help_menu);
// 메뉴바 객체를 반환합니다.
리턴 바;
}
/**
* 스레드 객체 생성 방법
*
* @param 속도
* :속도
*
*/
공개 무효 creatBall(int 속도, int num) {
무작위 실행 = new Random();
if (ml == null) {
g = UI.getGraphics();
ml = 새로운 리스너(g);
UI.addMouseListener(ml);
UI.addMouseMotionListener(ml);
}
for (int i = 0; i < num; i++) {
int x = ran.nextInt(600) + 10;
int y = ran.nextInt(300) + 100;
MyThread th = new MyThread(g, ml, UI, x, y, 속도);
list.add(th);
th.start();
}
}
/**
* 명령을 얻는 방법
*/
공개 문자열 getCommand() {
반환 명령;
}
}
다음과 같이 코드 코드를 복사합니다.
패키지 게임;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
/**
* 마우스 리스너 클래스
*
* @author 관리자
*
*/
공개 클래스 리스너는 MouseAdapter를 확장합니다.
개인 그래픽 g;
개인 정수 x = 5, y = 620;
개인용 int 너비 = 100, 높이 = 10;
공개 리스너(그래픽 g) {
this.g = g;
}
공공 무효 mouseMoved(MouseEvent e) {
//캔버스 객체 색상 설정
동기화됨(this.g) {
g.setColor(Color.black);
g.fillRect(x, y, 너비, 높이);
x = e.getX();
g.setColor(java.awt.Color.green);
g.fillRect(x, y, 너비, 높이);
}
}
/**
* x를 구하는 방법
*
* @return:x
*/
공개 int getX() {
x를 반환;
}
}
실행 효과는 아래 그림에 나와 있습니다.
이 글이 모든 사람의 Java 프로그래밍에 도움이 되기를 바랍니다.