Java开发教程--qyjohn版 [7]
发表时间:2004-05-19 17:20:33发信人: qyjohn (Sweet Potato -- 清扬婉兮,适我愿兮), 信区: JavaTutorial
标 题: Java开发教程--qyjohn版 [7]
发信站: BBS 水木清华站 (Wed May 19 16:28:08 2004), 站内
作业7:一个简单的多用户游戏的加强版
在开始教程7 之前我需要向各位网友道个歉,这个星期单位里
事情比较多,没有能够及时地将这个教程的内容贴上来。不过
在某些情况下忙也是一件好事情,至少说明我在最近还没有流
落街头的危险,也还能够抽时间将这个教程继续下去。
这个星期又有几位网友发信给我说是要加入JavaTutorial的学
习,让我颇有一种欢欣鼓舞的感觉。如果说在刚刚开设这个版
面的时候我对这个教程的定位还不够清楚的话,我想现在我已
经能够大概的理出一个思路来了。这个教程只有起点,没有终
点。在任何时候,我都欢迎新鲜血液的加入,只要还有需求,
就会有更新的内容出来供学员练习。我希望这个教程能够让参
与或者观望的网友都能够感觉到编程是一件有意思的事情,水
木清华是一个有意思的网站,水木清华的Java版面是有意思的
版面。
作业6 到现在只有两位网友交了上来,我大概的看了一下,觉
得功能上做得还不错,但是在文档方面稍显薄弱。记得这个教
程刚刚发出来的时候KingPlay说看起来比较象MUD ,不过我们
马上就要把它变得不太象MUD 了,因为我们马上就要有一个带
图形界面的客户端了。
这个星期的作业,就是给上个星期完成的游戏服务器设计一个
图形用户界面,要求如下:
启动图形用户界面的时候出现一个登陆窗口,接受用户输入的
用户名和密码,然后连接到服务器进行身份认证。通过服务器
的身份认证后进入游戏界面,否则提示登陆错误并返回登陆窗
口。
游戏界面包括一个大尺寸的游戏场景模拟窗口,根据自己程序
的需要设置4 个左右的命令按钮。由喜场景模拟窗口要尽可能
的大,这样我们以后就可以做更多的事情。下面提供了一段简
单的参考代码,各位可以根据这个思路构建自己的场景模拟窗
口。
import java.awt.*;
import java.awt.event.*;
public class TextUI extends Frame
{
private boolean laidOut;
private Dimension dimension;
private Panel gamePanel; // 游戏场景模拟窗口
private int gameButtonCount;
private Button gameButtons[];
public TestUI()
{
setTitle("SMTH JavaTutorial Game Client");
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
// maximize screen
Toolkit toolkit = Toolkit.getDefaultToolkit();
dimension = toolkit.getScreenSize();
setSize(dimension);
// create components
setLayout(null);
gamePanel = new Panel();
gameButtonCount = 4;
gameButtons = new Button[gameButtonCount];
add(gamePanel);
for (int i=0; i
gameButtons[i] = new Button();
add(gameButtons[i]);
}
}
public void paint(Graphics g)
{
if (!laidOut)
{
Insets insets = insets();
int width = dimension.width - insets.left - insets.right;
int height = dimension.height - insets.top - insets.bottom;
gamePanel.reshape(insets.left, insets.top, width, height-20);
float buttonWidth = width / gameButtonCount;
for (int i=0; i
gameButtons[i].reshape(insets.left+i*buttonWidth,
insets.top+height-20, buttonWidth, 20);
}
laidOut = true;
}
}
public static void main(String[] args)
{
TestUI ui = new TestUI();
ui.setVisible(true);
}
}
需要各位完成的内容,当然要比上面的参考代码要复杂那么一
点点。首先,要在游戏场景模拟窗口上显示所有用户的当前位
置。在这里我们需要做一点点小小的限制,就是服务器端的地
图坐标限制为由坐标(-10000, 10000)到(10000, -10000)所构
成的正方形以内。为了满足这个条件,在服务器那边的程序需
要做一点小小的修改,如果用户试图叛国潜逃的话,就将其拘
留在边界上,如果用户要往回走的话,就既往不咎吧。在客户
端这边,我本来打算要用一个像素来代表一个坐标单位,不过
这样做使用大屏幕的用户就要大大的占便宜了,因为它可以提
前看到很多使用小屏幕的用户尚不能够看到的信息。出于公平
的考虑,我们规定用户的视野范围为边长为400 的正方形。也
就是说,使用大屏幕的用户可以看到其他用户穿的是什么衣服
头上戴的是什么花是不是一个PPMM,但是他并不能够比使用小
屏幕的用户提前看到距离400 英里以外的PPMM。
当前登陆用户必须永远显示在当前游戏场景模拟窗口上,如果
当前登陆用户移动到当前游戏场景模拟窗口的显示范围之外,
必须及时调整游戏场景模拟窗口所显示的坐标范围。在何时调
整这个坐标范围,是一个很大的技巧,这一点我留给各位学员
自行决定。在交上来的作业里面,请详细说明你在调整游戏场
景模拟窗口的坐标范围的时候采取的是什么策略以及理由。
在作业4 里面我们做过一个简单的练习,通过上下左右箭头来
移动一个圆。在这里我们要通过上下左右箭头来改变用户的位
置。也就是说:当用户按下某个箭头的时候,向服务器发送命
令表示该用户往某个方向走了一步,这个移动结果要显示在游
戏场景模拟窗口里来。为了调试方面,我建议在游戏场景模拟
窗口的某个角落打印出当前用户的当前位置来。
当前用户的颜色必须与其他用户的颜色不同,不然在很多用户
同时进入游戏的时候,找不到自己的感觉可能会比较郁闷。由
于我们已经进入了第7 个作业,我个人认为再用圆圈来表示一
个用户可能不太敬业,因此我建议各位开始自定义用户形象,
让我们的游戏更加精彩一点。我比较喜欢的是小猫,那个懒惰
的茄菲猫简直可以说是我的最爱,呵呵。
我简直要忍不住继续往下说了,不过,看来上面的工作量已经
不小了的样子,更加精彩的内容,请听下回分解。不过,在结
束这个教程之前,我需要小小的提醒一下各位:要通过正常的
退出命令退出服务器,否则你的得分将不被服务器所保留。在
交作业的时候,请附上有多个用户参加的实际游戏场景屏幕截
图。
更多精彩,尽在JavaTutorial@SMTH。
--
("`-''-/").___..--''"`-._ 云与清风常拥有,
`6_ 6 ) `-. ( ).`-.__.`) 冰雪知音世难求。
(_Y_.)' ._ ) `._ `. ``-..- 击节纵歌相对笑,
_..`--'_..-_/ /--'_.' ,' 案上诗书杯中酒。
(il),-'' (li),' ((!.-' 2000.12.31
______________________________________________________________________
[m[1;32m※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.4.*][m
| 上一篇 | 下一篇 |
| 姓名: | |
| 评论: | |
|
请输入下面这首诗词的作者姓名。 渭城朝雨浥轻尘,客舍青青柳色新。 |
|
| 答案: | |
云与清风常拥有,
冰雪知音世难求。
击节纵歌相对笑,
案上诗书杯中酒。
2020年12月31日
洛杉矶
最新评论
2026-07-23 11:37:04
qyjohn 评论了 《几句翻译》
2026-07-21 20:11:28
wells 评论了 《几句翻译》
2025-11-15 06:29:51
qyjohn 评论了 《青桔》
2025-11-14 01:55:04
wells 评论了 《青桔》
2025-10-24 18:04:06
Ted Wang 评论了 《关于作者(About Me)》
2025-03-27 08:28:09
Max 评论了 《父亲走了》
2025-03-08 04:13:52
W 评论了 《我不想颂扬普京大帝》
2024-07-22 16:02:03
云思 评论了 《无题》
2024-06-27 10:01:54
yiming 评论了 《致访客(Welcome)》
2024-05-06 08:50:06
qyjohn 评论了 《致访客(Welcome)》
2024-05-03 19:49:00
jimmie 评论了 《致访客(Welcome)》
2024-02-19 03:32:57
林小静 评论了 《埋剑渡》
2024-01-05 03:54:28
路过者 评论了 《2023年度盘点》
2024-01-04 10:22:05
qyjohn 评论了 《致访客(Welcome)》
2024-01-04 08:05:13
qyjohn 评论了 《2023年度盘点》