问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java小游戏编程

发布网友 发布时间:2022-04-27 04:08

我来回答

1个回答

热心网友 时间:2022-06-25 23:24

/**
* File: ControlPanel.java
* User:相思无偿
* Date: 2004.12.3
* Describe: 俄罗斯方块的 Java 实现
*/

import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.EtchedBorder;
import java.awt.*;
import java.awt.event.*;

/**
* 控制面板类,继承自JPanel.
* 上边安放预显窗口、等级、得分、控制按钮
* 主要用来控制游戏进程。
*/
class ControlPanel extends JPanel {
private JTextField
tfLevel = new JTextField("" + ErsBlocksGame.DEFAULT_LEVEL),
tfScore = new JTextField("0");

private JButton
btPlay = new JButton("Play"),
btPause = new JButton("Pause"),
btStop = new JButton("Stop"),
btTurnLevelUp = new JButton("Turn hard"),
btTurnLevelDown = new JButton("Turn easy");

private JPanel plTip = new JPanel(new BorderLayout());
private TipPanel plTipBlock = new TipPanel();
private JPanel plInfo = new JPanel(new GridLayout(4, 1));
private JPanel plButton = new JPanel(new GridLayout(5, 1));

private Timer timer;
private ErsBlocksGame game;

private Border border = new EtchedBorder(
EtchedBorder.RAISED, Color.white, new Color(148, 145, 140));

/**
* 控制面板类的构造函数
* @param game ErsBlocksGame, ErsBoxesGame类的一个实例引用,
* 方便直接控制ErsBoxesGame类的行为。
*/
public ControlPanel(final ErsBlocksGame game) {
setLayout(new GridLayout(3, 1, 0, 4));
this.game = game;

plTip.add(new JLabel("Next block"), BorderLayout.NORTH);
plTip.add(plTipBlock);
plTip.setBorder(border);

plInfo.add(new JLabel("Level"));
plInfo.add(tfLevel);
plInfo.add(new JLabel("Score"));
plInfo.add(tfScore);
plInfo.setBorder(border);

tfLevel.setEditable(false);
tfScore.setEditable(false);

plButton.add(btPlay);
plButton.add(btPause);
plButton.add(btStop);
plButton.add(btTurnLevelUp);
plButton.add(btTurnLevelDown);
plButton.setBorder(border);

add(plTip);
add(plInfo);
add(plButton);

addKeyListener(new ControlKeyListener());

btPlay.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
game.playGame();
}
});
btPause.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
if (btPause.getText().equals(new String("Pause"))) {
game.pauseGame();
} else {
game.resumeGame();
}
}
});
btStop.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
game.stopGame();
}
});
btTurnLevelUp.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
try {
int level = Integer.parseInt(tfLevel.getText());
if (level < ErsBlocksGame.MAX_LEVEL)
tfLevel.setText("" + (level + 1));
} catch (NumberFormatException e) {
}
requestFocus();
}
});
btTurnLevelDown.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
try {
int level = Integer.parseInt(tfLevel.getText());
if (level > 1)
tfLevel.setText("" + (level - 1));
} catch (NumberFormatException e) {
}
requestFocus();
}
});

addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent ce) {
plTipBlock.fanning();
}
});

timer = new Timer(500, new ActionListener() {
public void actionPerformed(ActionEvent ae) {
tfScore.setText("" + game.getScore());
int scoreForLevelUpdate =
game.getScoreForLevelUpdate();
if (scoreForLevelUpdate >= ErsBlocksGame.PER_LEVEL_SCORE
&& scoreForLevelUpdate > 0)
game.levelUpdate();
}
});
timer.start();
}

/**
* 设置预显窗口的样式,
* @param style int,对应ErsBlock类的STYLES中的28个值
*/
public void setTipStyle(int style) {
plTipBlock.setStyle(style);
}

/**
* 取得用户设置的游戏等级。
* @return int, 难度等级,1 - ErsBlocksGame.MAX_LEVEL
*/
public int getLevel() {
int level = 0;
try {
level = Integer.parseInt(tfLevel.getText());
} catch (NumberFormatException e) {
}
return level;
}

/**
* 让用户修改游戏难度等级。
* @param level 修改后的游戏难度等级
*/
public void setLevel(int level) {
if (level > 0 && level < 11) tfLevel.setText("" + level);
}

/**
* 设置"开始"按钮的状态。
*/
public void setPlayButtonEnable(boolean enable) {
btPlay.setEnabled(enable);
}

public void setPauseButtonLabel(boolean pause) {
btPause.setText(pause ? "Pause" : "Continue");
}

/**
* 重置控制面板
*/
public void reset() {
tfScore.setText("0");
plTipBlock.setStyle(0);
}

/**
* 重新计算TipPanel里的boxes[][]里的小框的大小
*/
public void fanning() {
plTipBlock.fanning();
}

/**
* 预显窗口的实现细节类
*/
private class TipPanel extends JPanel {
private Color backColor = Color.darkGray, frontColor = Color.lightGray;
private ErsBox[][] boxes =
new ErsBox[ErsBlock.BOXES_ROWS][ErsBlock.BOXES_COLS];

private int style, boxWidth, boxHeight;
private boolean isTiled = false;

/**
* 预显窗口类构造函数
*/
public TipPanel() {
for (int i = 0; i < boxes.length; i++) {
for (int j = 0; j < boxes[i].length; j++)
boxes[i][j] = new ErsBox(false);
}
}

/**
* 预显窗口类构造函数
* @param backColor Color, 窗口的背景色
* @param frontColor Color, 窗口的前景色
*/
public TipPanel(Color backColor, Color frontColor) {
this();
this.backColor = backColor;
this.frontColor = frontColor;
}

/**
* 设置预显窗口的方块样式
* @param style int,对应ErsBlock类的STYLES中的28个值
*/
public void setStyle(int style) {
this.style = style;
repaint();
}

/**
* 覆盖JComponent类的函数,画组件。
* @param g 图形设备环境
*/
public void paintComponent(Graphics g) {
super.paintComponent(g);

if (!isTiled) fanning();

int key = 0x8000;
for (int i = 0; i < boxes.length; i++) {
for (int j = 0; j < boxes[i].length; j++) {
Color color = (((key & style) != 0) ? frontColor : backColor);
g.setColor(color);
g.fill3DRect(j * boxWidth, i * boxHeight,
boxWidth, boxHeight, true);
key >>= 1;
}
}
}

/**
* 根据窗口的大小,自动调整方格的尺寸
*/
public void fanning() {
boxWidth = getSize().width / ErsBlock.BOXES_COLS;
boxHeight = getSize().height / ErsBlock.BOXES_ROWS;
isTiled = true;
}
}

private class ControlKeyListener extends KeyAdapter {
public void keyPressed(KeyEvent ke) {
if (!game.isPlaying()) return;

ErsBlock block = game.getCurBlock();
switch (ke.getKeyCode()) {
case KeyEvent.VK_DOWN:
block.moveDown();
break;
case KeyEvent.VK_LEFT:
block.moveLeft();
break;
case KeyEvent.VK_RIGHT:
block.moveRight();
break;
case KeyEvent.VK_UP:
block.turnNext();
break;
default:
break;
}
}
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
cfhd超声波战刃怎么获得 cfhd美人鲨怎么获得 cfhd是不是每个抽奖角色宝箱都放两个角色 端午雅称叫什么名字好听 端午节古代雅称 如何文化交融 文化交流与文化交融的区别 什么是 文化融合 文化交流、借鉴和融合是 ... 水氧活肤有什么副作用出现了要怎么处理 java 游戏开发需要哪些技术 我想学java游戏编程谁能给我介绍几本好书啊 求java初级小游戏程序代码,本人是新学java的,最好带注释,不要太大,越简单越好 新手练习用? Java从入门到可以开发一些游戏或者软件一般情况要多长时间? 入门的java游戏小程序 Java各种小游戏的编程思路 JAVA游戏开发需要学什么知识? 会声会影怎么把素材图片替换成自己的图 什么软件可以把照片或视频中背景(某一部分)换成自己拍的照片 为什么我PDF转换成Word都是乱码? pdf转换成word乱码怎么解决 雅乐滋米粉要用开水冲还是温开水冲呢? 宝宝七个半月了,米粉是单独吃还是加奶粉里面吃? 是不是所有婴儿米粉都可以加奶粉一起吃的? 母乳怎么冲米粉才是正确 宝宝快五个月了,纯母乳喂养,添辅食,高铁米粉是用奶粉冲还是用开水冲? 给宝宝冲米粉要冲对,有什么方法? 钙铁锌蛋白质粉可以和米粉一起 冲着喝吗?那, 过敏性体质会遗传吗? 过敏性体质对怀孕有影响吗? 同贷书是什么意思,是贷款合同吗 什么是同贷书 什么叫同贷书 同贷书和贷款合同是不是过户时给我还是放款后在给我 银行的同贷书和贷款合同是不是过户时给我还是放款后在 珠宝设计的手绘自学可以学会吗? 二手房交易的按揭同贷书/贷款合同/过户 珠宝设计图稿(手稿)要详细到什么地步,才能给师傅直接打造出来?最好能详... 珠宝设计手绘的基本功需要怎样去练习呢? 珠宝设计图手稿用的什么笔 银行利率折扣是以同贷书和贷款合同为准,还是以放款时 同贷书,不动产证. 购买新房子去银行面签后开了同贷书会因为某些原因导致贷款不下来吗?可以签购 首饰设计如何做到“穿金戴银”而又不显“人傻钱多? 作一个饰品设计师,画手稿图的时候...要注意什么? 各位组合贷款的大神们:同贷书出来后多长时间 同贷书下来后,是先去递件还是先去签按揭合同 珠宝设计难学吗 是在同贷书下来后给.还是先做首付,在等同贷书下来 珠宝设计单幅设计图收费大约多少钱