当前页面位置: » 丰搜网 » 文档中心 » 详细内容
开始这个游戏-准备进入基于java的娱乐环境中去
开始这个游戏-准备进入基于java的娱乐环境中去作者:jeff friesen翻译:ice_x版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
英文原文地址:
http://www.
javaworld.com/
javaworld/jw-07-2005/jw-0718-fun&games.
html中文地址
http://www.matrix.org.cn/resource/article/43/43626_
java_game_start.
html关键词:
java game
applet policy
摘要这些年来,我从
java这里获得了很多乐趣。
java娱乐和
游戏这个新栏目是我接触这个技术以来获得的一些快乐经验的分享。这篇文章将为你进入我的基于
java环境的旅行做充分的准备(1100字;7月18号,2005)。
大约10年内,我为it产业开发了许多
java程序,写了很多的相关文章和书,回答了大量有关
java的问题,教了无数的学生。虽然我忙于学习、写程序、教学,我依然从中获得了很多的乐趣。
java 娱乐和
游戏包含了一些我接触
java以来获得的有趣的东西。每一个部分对应一个特殊的我认为是有趣的主题和一个或者多个我相应开发的
java程序。在你浏览的过程中,你将会遇到类似拖动跳棋棋盘上的棋子来产生经典的3d粒子系统这样的主题,我希望你会喜欢。
由于我很喜欢电脑
游戏,在这里我会着重介绍它。在展现我个人的娱乐主题之前,我想先让你看看对你来说更为重要的东西。提出一个你想知道的主题,我会尽量满足你。
惯例操作在每一个小部分我会以
java applets的形式展现那些程序(我对于应用程序没有反感,仅仅是想把大家的注意集中到
applets上来)。我使用
j2se1.4来编译(通过
javac)
applets的代码并且用
appletviewer来运行。
在多数情况下,我不会用网页浏览器来运行
applets。如果你想这样做,确定你的浏览器支持
j2se1.4(或更新的版本)。举例来说,如果你用的是ie6.0,那么将选项里的“将jre1.4.0用于<
applet>那个复选框勾上。这样,ie会用
java plug-in 1.4(或更高版本)代替它的inte
.net 虚拟机来处理<
applet>标签。
如果你不能通过网页浏览器访问
java plug-in,你需要创建一个
java1.x的类文件(假设源代码不包括比1.x更新的元素,并且假设你的虚拟机不能识别比1.x版本更新的类文件)。可以用以下的方法编译源文件:
javac -target 1.1 classname.java 在以上的命令行中,-target 1.1告诉
javac创建一个
java1.1的文件(在大多数虚拟机上可以识别)。当然,classname.
java 仅仅是一个用于放置
applet的源文件的容器。
摆脱束缚有些
applets需要访问文件系统(例如存档读档),而虚拟机的管理者禁止此类事件。有两种办法可以解决,一种用于
appletviewer,另一种用于网页浏览器。在讨论这两种技术之前,我们来看一看listing 1's fileio.
java的源代码:
listing 1. fileio.java // fileio.java
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class fileio extends java.applet.applet
{
private static string filename = "stats.dat";
private string name;
private int score;
public void init ()
{
// 创建文本框组件
final textarea tastatus = new textarea (10, 40);
// 创建用放按钮的面板
panel p = new panel ();
//创建读档按钮
button btnload = new button ("load game stats");
// 建立读文件的事件侦听器
btnload.addactionlistener (new actionlistener ()
{
public void actionperformed (actionevent e)
{
datainputstream dis = null;
try
{
fileinputstream fis;
fis = new fileinputstream
(file.separator +filename);
dis = new datainputstream (fis);
name = dis.readutf ();
score = dis.readint ();
tastatus.settext ("name = " + name + ", " + "hi score = " + score);
}
catch (ioexception e2)
{
tastatus.settext (e2.tostring ());
}
finally
{
if (dis != null)
try
{
dis.close ();
}
catch (ioexception e2)
{
tastatus.settext (e2.tostring ());
}
}
}
});
//把读档按钮加到面板中去
p.add (btnload);
// 创建存档按钮
button btnsave = new button ("save game stats");
// 创建存档事件侦听器
save.addactionlistener (new actionlistener ()
{
public void actionperformed (actionevent e)
{
dataoutputstream dos = null;
try
{
fileoutputstream fos;
fos = new fileoutputstream
(file.separator + filename);
dos = new dataoutputstream (fos);
dos.writeutf ("john doe");
dos.writeint (50000);
tastatus.settext ("name and " + "score saved");
}
catch (ioexception e2)
{
tastatus.settext (e2.tostring ());
}
finally
{
if (dos != null)
try
{
dos.close ();
}
catch (ioexception e2)
{
tastatus.settext (e2.tostring ());
}
}
}
});
// 把存档按钮加到面板上
add (btnsave);
// 设置applet的设计为borderlayout
setlayout (new borderlayout ());
// 在applet的北部添加按钮面板
add (p, borderlayout.north);
// 把状态文本框放到applet南面
add (tastatus, borderlayout.south);
}
}
listing 1 描述了一个简单的在
applet环境中文件i/o 的范例。 当用户点击存档按钮的时候,
applet将姓名和得分保存到数据文件中去。如果点击读档按钮,
applet 将先前保存的数据从数据文件中读出。任意点击一个按钮,在下面的状态文本框中会显示相应信息。用下面的方式编译它:
javac fileio.java 在成功编译后, 你将得到三个类文件: fileio.class, fileio$1.class, and fileio$2.class. 在你运行fileio.class之前 (主要的类), 你需要一个带<
applet>标签的
html文件。为了避免你创建
html的烦恼,我准备了 fileio.
html:
listing 2. fileio.html <applet code=fileio.class width=250 height=250>
</applet>
policy 文件用
appletviewer fileio.
html执行 fileio.class。
applet开始运行了。试试按下存档和读档按钮,你将注意到一个
安全的异常: 试图读或写文件违背了
applet的默认的
安全策略。 为了防止异常的产生, 首先创建一个策略文件给予所有的许可。 listing 3的 my.policy 文件做的就是这个:
listing 3. my.policy grant
{
permission java.security.allpermission;
};
现在让虚拟机在运行
appletviewer的时候识别这个特定的策略文件。接下来这一行命令完成了这个任务:
appletviewer -j-djava.security.policy=my.policy fileio.html 如果一切正常你会看到如图1所示的内容
图1:从数据文件中读出先前存入的数据警告:给予applet所有许可权限是一件很严重的事,除非你自己或者值得信任的朋友创建了这样的applet,不然这样做是不是一件好事。注册jar文件使用策略文件的方法并不适用于网页浏览器,在你用它执行fileio之前,你首先要将
applet的类文件保存到一个jar文件中去。
注册一个jar文件需要一个证书。当然如果你要发布一个商业的
applet你可以去买一个,在这里我将告诉你如何创建一个免费的自己注册的证书(你只能用于
测试)。完成以下几步:
1:创建jar文件:运行 jar cvf fileio.jar *.class,你会得到一个fileio.jar 。
2:在键库中创建一个新的键: 运行keytool -genkey -keystore mykeystore -alias me, "me" 可以任意定义。它提醒你这个证书是你自己注册的,所以你不要一不小心把它放到产品中去。在这个例子中keytool 提供给你关于这个新键值的相关信息:它要求你提供保护键库的密码,然后它会要求你的姓名、部门、单位、城市、地区和国家。这些信息将会保存到新的键库文件-mykeystore中去。
3:用键库创建一个自己注册的
测试证书:运行keytool -selfcert -alias me -keystore mykeystore。在提交时输入密码。
4:用
测试证书注册jar文件:运行jarsigner -keystore mykeystore fileio.jar me。在提交时输入密码。the jarsigner 程序更新jar文件的 meta-inf 目录来产生证书信息和访问存档文件的数字签名。如果成功,你会得到一个注册了的fileio.jar 文件。
注意: 我推荐在学习到这里的时候看一看j2se文档中有关工具的部分来更好的学习jar, keytool, and jarsigner。在运行
applet之前,创建一个
applet标签含有jar文件属性的
html文件。 listing 4的 fileio2.
html 做的不错。
listing 4. fileio2.html <applet archive=fileio.jar code=fileio.class width=250 height=250>
</applet>
到了执行
applet的时候了。假设fileio.jar 和 fileio2.
html 在一台windows电脑的 c:\temp 目录下,打开浏览器在地址栏输入c:\temp\fileio2.
html。过一会,会跳出一个对话框,如图2所示,提出一个
安全警告并要求你给予运行的许可。
图2:提出一个安全警告并要求你给予运行的许可点击许可这个或者点一直许可来运行,如果你是一个谨慎的人,你可以查看证书来得到这个你先前创建的证书的细节。图3显示了在火狐浏览器中运行的
applet。
图3,相对appletviewer的网页浏览器回顾:准备进入我的基于
java的娱乐世界,每一个
java fun and games的部分都对应一个我觉得有趣的主题,并且有一些
java程序发布。这些程序以
applet的形式运行,其中有一部分需要访问文件系统,例如读写。因为访问文件系统在虚拟机的
安全管理是禁止的,所以要用策略文件或者注册的jar文件的方法。在用
appletviewer的时候用策略文件,用浏览器的话用jar文件。
下次,我会展现如何在跳棋棋盘上拖棋子。
关于作者jeff friesen 是一个
开源软件开发者和在c, c++, 还有
java技术方面的教育工作者
下载这篇文章的代码:
http://www.
javaworld.com/
javaworld/jw-07-2005/fun&games/jw-0718-fun&games.zip
关于
applets的更多文章,点击相应的
applets的标签:
http://www.
javaworld.com/channel_content/jw-
applets-index.s
html 想要更多关于
java工作或者娱乐上的技巧的文章在
javaworld的applied
java版块搜索:
http://www.
javaworld.com/channel_content/jw-applied-index.s
html