간단한 타자 게임
8623 단어 swing
import java.util.List;
import java.util.ArrayList;
import java.util.Timer;
import java.util.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Game extends JFrame{
//
public static void main(String[] args){
EventQueue.invokeLater(new Runnable(){
public void run(){
new Game().setVisible(true);
}
});
}
//
public Game(){
initComponent();
}
//
public void initComponent(){
//
Toolkit kit = Toolkit.getDefaultToolkit();
int x = (kit.getScreenSize().width - WIDTH)/2;
int y = (kit.getScreenSize().height - HEIGHT)/2;
setBounds(x,y,WIDTH,HEIGHT);
//
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//
setResizable(false);
//
setTitle(" - :luoxun");
//
setIconImage(kit.getImage("icon.png"));
//
UIManager.LookAndFeelInfo[] infos = UIManager.getInstalledLookAndFeels();
try{
UIManager.setLookAndFeel(infos[1].getClassName());
}catch(Exception e){
e.printStackTrace();
}
SwingUtilities.updateComponentTreeUI(this);
//
ImageIcon backImage = new ImageIcon("background.gif");
JLabel label = new JLabel(backImage);
label.setBounds(0,0,backImage.getIconWidth(),backImage.getIconHeight());
JPanel imagePanel = (JPanel)getContentPane();
imagePanel.setOpaque(false);
getLayeredPane().setLayout(null);
getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));
//
drawPanel = new MyPanel();
add(drawPanel);
}
private class MyPanel extends JPanel{
private List<MyFont> list = null;
private Timer timer;
private int state = 0;//0: 1: 2:
private int success = 0;
private int fail = 0;
private Gamer gamer = null;
public MyPanel(){
initComponent();
}
public void initComponent(){
setOpaque(false);
list = new ArrayList<MyFont>();
//
btnStart = new JButton(" ");
btnStop = new JButton(" ");
btnEnd = new JButton(" ");
StartHandler start = new StartHandler();
StopHandler stop = new StopHandler();
EndHandler end = new EndHandler();
add(btnStart);
add(btnStop);
add(btnEnd);
// : 、 : 、esc:
btnStart.addActionListener(start);
btnStop.addActionListener(stop);
btnEnd.addActionListener(end);
InputMap inmap = getInputMap(JPanel.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
inmap.put(KeyStroke.getKeyStroke("alt Z"),"Enter");
inmap.put(KeyStroke.getKeyStroke("alt X"),"Space");
inmap.put(KeyStroke.getKeyStroke("alt C"),"Esc");
for(int i='A';i<='Z';i++){
inmap.put(KeyStroke.getKeyStroke(String.valueOf((char)i)),"input");
inmap.put(KeyStroke.getKeyStroke("shift "+String.valueOf((char)i)),"input");
}
ActionMap amap = getActionMap();
amap.put("Enter",start);
amap.put("Space",stop);
amap.put("Esc",end);
amap.put("input",new InputHandler());
}
private class InputHandler extends AbstractAction{
public void actionPerformed(ActionEvent evt){
if(state!=0) return;
char c = evt.getActionCommand().charAt(0);
for(MyFont mf : list){
if(c == mf.getChar()){
gamer.setIcon(Toolkit.getDefaultToolkit().getImage("men.png"));
gamer.getPoint().x = mf.getPoint().x;
remove(mf);
success ++;
return;
}
}
gamer.setIcon(Toolkit.getDefaultToolkit().getImage("icon.png"));
fail ++;
}
}
private class StartHandler extends AbstractAction{
public void actionPerformed(ActionEvent evt){
state = 0;
if(timer == null){
timer = new Timer();
timer.schedule(new TimerTask(){
public void run(){
if(state == 0){
add();
}
}
},new Date(),800);
timer.schedule(new TimerTask(){
public void run(){
if(state == 0){
move();
}
}
},new Date(),10);
}
}
}
private class StopHandler extends AbstractAction{
public void actionPerformed(ActionEvent evt){
state = 1;
}
}
private class EndHandler extends AbstractAction{
public void actionPerformed(ActionEvent evt){
list.clear();
state = 2;
JOptionPane.showMessageDialog(null,String.format(" :%d :%d ",success,fail));
success = 0;
fail = 0;
}
}
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
if(gamer == null){
gamer = new Gamer();
}
g2.drawImage(gamer.getIcon(),gamer.getPoint().x,gamer.getPoint().y,gamer.getWidth(),gamer.getHeight(),this);
synchronized(list){
for(MyFont mf : list){
g2.setColor(mf.getColor());
g2.setFont(mf.getFont());
Point p = mf.getPoint();
g2.drawString(String.valueOf(mf.getChar()),(int)p.getX(),(int)p.getY());
}
}
}
public void add(){
synchronized(list){
list.add(new MyFont());
repaint();
}
}
public void remove(MyFont mf){
synchronized(list){
list.remove(mf);
}
}
public void move(){
List<MyFont> temp = new ArrayList<MyFont>();
for(MyFont mf : list){
Point p = mf.getPoint();
p.y = (int)p.getY()+1;
if(p.y+80>Game.HEIGHT){
temp.add(mf);
}
}
if(temp.size() > 0){
fail += temp.size();
list.removeAll(temp);
gamer.setIcon(Toolkit.getDefaultToolkit().getImage("icon.png"));
}
repaint();
}
}
private class Gamer{
private Image icon;
private Point point;
private int width;
private int height;
public Gamer(){
icon = Toolkit.getDefaultToolkit().getImage("men.png");
point = new Point(350,520);
width = 50;
height = 50;
}
public void setIcon(Image icon){
this.icon = icon;
}
public void setPoint(Point point){
this.point = point;
}
public Image getIcon(){
return this.icon;
}
public Point getPoint(){
return this.point;
}
public int getWidth(){
return this.width;
}
public int getHeight(){
return this.height;
}
}
private class MyFont{
private String text = "abcdefghijklmnopqrstuvwsyzABCDEFGHIJKLMNOPQRSTUVWSYZ";
private Point p;
private Font font;
private Color color;
private char c;
public MyFont(){
initData();
}
private void initData(){
String[] fontNames = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
Random rand = new Random(new Date().getTime());
int i = rand.nextInt(52);
this.p = new Point(rand.nextInt(700)+50,80);
this.font = new Font(fontNames[fontNames.length-21+rand.nextInt(21)],Font.BOLD,80);
this.color = new Color(rand.nextInt(255),rand.nextInt(255),rand.nextInt(255));
this.c = text.charAt(i);
}
private Point getPoint(){
return this.p;
}
private Color getColor(){
return this.color;
}
private Font getFont(){
return this.font;
}
private char getChar(){
return this.c;
}
}
//
private MyPanel drawPanel;
private JButton btnStart;
private JButton btnStop;
private JButton btnEnd;
private static final int WIDTH = 800;
private static final int HEIGHT = 600;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[JAVA](Swing) 입력 받고 HTTP 요청 보내기 (GET, POST)문자열 입력받기 메이븐 추가 + jackson 추가 (IntelliJ) HTTP 요청 (HttpURLConnection) Java Swing을 이용해 문자열을 입력 받고 해당 문자열을 HTTP 요청 보내는 과정을 설...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.