Java游戏开发案例-方块游戏

2008-02-23 09:11:29来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

“方块游戏”简介

“方块”游戏使用一个3x3的网格,其中每一个单元格要么显示一种颜色,要么什么都没有(表示为黑色)。游戏开始时一些单元格随机填充颜色,其他的都用默认黑色。只要你在30秒内清除所有单元格的颜色(全部变为黑色,没有其他颜色存在),你就获胜了。

你要么移动鼠标点击一个单元格,要么直接按小键盘的相应数字键,都可以清除那个单元格里的颜色。类似的,如果你所点击的单元格本身是黑色,那么那个单元格就会被填充一种其他颜色。也就是说会有这样的循环:黑色变彩色,彩色变黑色。如果仅仅这样游戏就太容易了,因此我设计的方块游戏是,你对单元格的点击/按键会影响他自己和他的周围单元格,如图1所示。


图1. (A) 游戏板布局;(B) 当单元格1改变而受到影响的单元格;(C) 当单元格2改变而受到影响的单元格;(D) 当单元格5改变而受到影响的单元格

图1根据数字小键盘的布局显示了相应的游戏板。例如,数字键7对应左上角的单元格。图1中还展示了当一个单元格改变而受到影响的相应单元格(B、C、D中)。如果改变的是角上的,周围三个单元格也会受到影响(B);如果你改变的是边上的,同一边的其他两个单元格也会受到影响(C);如果改变的是中心的,它东南西北的单元格也都会受影响(D)。

用Java重写

我最早是用C写的“方块”游戏。因为C和Java的语法很相似,所以用Java重写并不困难。在我展示我的第一个“方块”Applet的代码之前,你大概想知道界面是怎样的。图2显示了你运行那个applet时的界面。


图2. 包含一个游戏板、两个按钮的“方块”游戏界面

游戏板控件是一个类似于“石头剪子”游戏的网格的区域,并且在它下边有一个白色的消息区域。这个控件还有一个边框,这个边框在空间失去焦点的时候是黑色的,在获得焦点时变成蓝色。“Change Square Color”按钮初始时无效,只有游戏开始以后才可用(如果游戏没有进行,也就没理由改变颜色了)。点击“Start”按钮可以开始游戏,如图3所示。


图3. “方块”游戏开始以后,在游戏板的消息区域会显示当前剩余的秒数

图3显示了游戏进行时的界面。消息区显示了把所有单元格变为黑色还剩余的秒数。如果这个数字到达0,你就输了。如果你能在此之前把所有单元格变为黑色,那你就赢了。在游戏进行时,你可以点击“Change Square Color”按钮以随机改变各单元的颜色。不过如果你输了或者赢了,那“Change Square Color”按钮会变成无效,而“Start”按钮会恢复有效,这样你就可以开始另一个游戏了。

下边是源代码:
Squares.java
// Squares.java

import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import javax.Swing.*;

public class Squares extends JApplet
{
private void createGUI ()
{
// 设定界面
getContentPane ().setLayout (new FlowLayout ());

// 创建游戏板控件:每个单元格有40像素宽,默认绿色,并且在获得焦点时边框是蓝色,
// 而失去焦点时变为黑色。把控件加到content pane里。
final GameBoard gb;
gb = new GameBoard (40, Color.green, Color.blue, Color.black);
getContentPane ().add (gb);

// 界面其他部分包括两个按钮,他们会被放到一个panel里以作为整体处理。例如,
// 如果Applet的宽度变大了,两个按钮(而不是一个按钮)都会向游戏板的右侧对齐。
JPanel p = new JPanel ();

// 创建“Change Square Color”按钮并设置为无效。只有游戏进行中可以改变颜色。
final JButton btnChangeSquareColor = new JButton ("Change Square Color");
btnChangeSquareColor.setEnabled (false);

// 建立“Change Square Color”按钮的action事件监听器,点击此按钮,会随机改变
// 单元格的颜色
ActionListener al;
al = new ActionListener ()
{
public void actionPerformed (ActionEvent e)
{
Random rnd = new Random ();

while (true)
{
int r = rnd.nextInt (256);
int g = rnd.nextInt (256);
int b = rnd.nextInt (256);

// 不使用所有组成原色(红、绿、蓝)都小于192的颜色,因为那不
// 容易和背景的黑色区分出来。
if (r < 192 && g < 192 && b < 192)
continue;

gb.changeSquareColor (new Color (r, g, b));

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:RSA算法的实现——java版

下一篇:在 Eclipse 中运行带参数的 Java 程序