摘要:学习如何定义游戏边界,并给小游戏增加了跳跃功能
原文见:http://www.blogjava.net/Andyluo/archive/2005/12/12/23435.html
posted @ 2005-12-12 20:23 罗明 阅读(58) | 评论 (0)编辑 收藏
 

 原文见: http://today.java.net/pub/a/today/2005/07/07/j2me3.html?page=3

定义游戏的角色和特征

一个只能将图片左右移动的游戏是没有意思的。我们现在要对清单1的代码作一些改动,让它变得更有趣些。首先我们要定义游戏显示的边界,这样能保证在所有设备上的大小一致,先定义一些常量,如下代码所示:

//游戏边界
public static final int GAME_WIDTH = 160;
public static final int GAME_HEIGHT = 160;

// 游戏屏幕的原点坐标(左上角)
public final int GAME_ORIGIN_X = (getWidth() - GAME_WIDTH) / 2;
public final int GAME_ORIGIN_Y = (getHeight() - GAME_HEIGHT) / 2;

// couple小精灵上下区域的高度
public final int SECTION_HEIGHT = 64;

// couple小精灵来回移动的基准位(base)
public final int BASE = GAME_ORIGIN_Y + GAME_HEIGHT - SECTION_HEIGHT;

// couple小精灵跳跃的最大高度
public final int MAX_HEIGHT = 32;


(注意,我们这里引入了一个游戏特征:couple小精灵很快就可以在屏幕上跳动了)

在游戏屏幕上定义的这些常量规定了游戏的边界,如图2所示。

j2me3_figure2.gif


                        图 2. 用常量定义游戏边界

当然,我们现在需要修改代码来使用这些常量。在清单1的代码中添加一个buildGameScreen(Graphics g)方法,如下代码所示:

private void buildGameScreen(Graphics g)
{
    
// 设置画笔为黑色
    g.setColor(0x000000);
    
    
// 绘制游戏边界
    g.drawRect(GAME_ORIGIN_X, GAME_ORIGIN_Y, GAME_WIDTH, GAME_HEIGHT);

    
// 绘制基准线
    g.drawLine(GAME_ORIGIN_X, BASE, GAME_ORIGIN_X + GAME_WIDTH, BASE);

    
//标出couple小精灵能跳到的最高位置
    g.drawLine(GAME_ORIGIN_X, BASE - MAX_HEIGHT, GAME_ORIGIN_X + GAME_WIDTH, BASE - MAX_HEIGHT);
}

再在updateGameScreen()方法里绘制couple之前添加一个该方法的调用,还要将couple小精灵的开始位置由CENTER_Y改为BASE(在start()方法里设置coupleY = BASE)。

couple小精灵可以左右移动,我们要限制它走出边界,更改calculateCoupleX()方法里左右移动的代码,避免坐标超出边界。修改后的代码如下:

private void calculateCoupleX(int keyState)
{
    
// 根据移动方向改变x坐标
    if((keyState & LEFT_PRESSED) != 0)
    
{
        coupleX 
= Math.max(
            GAME_ORIGIN_X 
+ coupleImg.getWidth() / 2,
            coupleX 
- dx);
    }

    
else if((keyState & RIGHT_PRESSED) != 0)
    
{
        coupleX 
= Math.min(
            GAME_ORIGIN_X 
+ GAME_WIDTH - coupleImg.getWidth() / 2,
            coupleX 
+ dx);
    }

}

方法使用Math.max()和min()函数使图片显示在游戏边界内。注意我们在计算中还考虑了图片的大小。

我们刚才说过要实现couple小精灵在屏幕上跳跃的功能,我们现在增加一个方法使图片在Y轴上移动,跳跃时移动的具体路径将不受玩家影响。

在清单1的代码中添加三个新的实例变量:up、jumpHeight 和random。如下所示:

// 表示couple小精灵移动方向的标识
private boolean up = true;

// 跳跃高度,跳跃时随机生成
private int jumpHeight = MAX_HEIGHT;

// 随机数产生器
public Random random = new Random();

jumpHeight初始值被设为MAX_HEIGHT。jumpHeight变量会在couple小精灵每次跳跃时动态设为随机值,新增的calculateCoupleY()方法如下:

private void calculateCoupleY(int keyState)
{
    
// 检查couple小精灵是否在跳跃
    if(up)
    
{
        
// 检查小精灵是否跳到了最大高度
        if((coupleY > (BASE - jumpHeight + coupleImg.getHeight())))
        
{
            
//没达到最大高度,继续上升
            coupleY -= dy;
        }

        
else if(coupleY == (BASE - jumpHeight + coupleImg.getHeight()))
        
{
            
// 到了最大高度,开始下降
            coupleY += dy;

            
// 修改方向标识
            up = false;
        }

    }

    
else
    
{
        
// 小精灵正在下降,检查是否到地面了?
        if(coupleY < BASE)
        
{
            
// 还没有,继续下降
            coupleY += dy;
        }

        
else if(coupleY == BASE)
        
{
            
// 到达地面,算一个新的随机高度(小于等于最大高度)
            int hyper = random.nextInt(MAX_HEIGHT + 1);
            
            
// 保证跳跃高度大于图像高度
            if(hyper > coupleImg.getHeight())
            
{
                jumpHeight 
= hyper;
            }


            
// 往上跳
            coupleY -= dy;

            
// 重置方向标识
            up = true;
        }

    }

}


你可能已经发觉,这个方法不依赖于用户的按键,传入的keyState信息也没有用到。传入这个值是为了与calculateCoupleX()方法保持一致。方法刚开始时通过渐增coupleY变量值使couple小精灵上升,直到达到这次的跳跃高度(刚开始是MAX_HEIGHT)。达到这个高度后,小精灵开始往下降,降到BASE后又随机生成一个介于MAX_HEIGHT和图像高度之间的数值,按这个高度开始下一次跳跃。

游戏的整个效果是一个以随机高度跳跃的couple小精灵,它可以在用户的操纵下左右移动。图3是游戏的一个截屏:

j2me3_figure3.GIF

                   图 3. 游戏截屏

posted @ 2005-12-12 11:39 罗明 阅读(826) | 评论 (0)编辑 收藏
 
摘要:图中有14个著名的开源项目,你都能看出来吗?(答案附文后)
原文见:http://www.blogjava.net/Andyluo/archive/2005/12/08/23024.html
posted @ 2005-12-09 04:10 罗明 阅读(40) | 评论 (0)编辑 收藏
 

承接第一部分,介绍小游戏的具体实现,实现第一个版本,并介绍GameCanvas类的使用及运行机制。

原文见:http://www.blogjava.net/Andyluo/archive/2005/12/08/23003.html

posted @ 2005-12-09 03:48 罗明 阅读(44) | 评论 (0)编辑 收藏
 
14个开源项目,你看出来了吗?

图中有14个著名的开源项目,你都能看出来吗?(答案附文后)
r_free-project-foundation.jpg


答案:

posted @ 2005-12-08 19:57 罗明 阅读(617) | 评论 (1)编辑 收藏
 
J2ME Tutorial, Part 3: 探究MIDP 2.0的游戏API(二)

原文见:http://today.java.net/pub/a/today/2005/07/07/j2me3.html?page=2

构建一个J2ME游戏:从GameCanvas类开始

GameCanvas类继承自Canvas,提供了一个屏幕后端的缓冲区,所有的绘制操作都先在这个缓冲区里进行。当所有绘制操作完成后,我们调用flushGraphics()方法将缓冲区内容输出到屏幕。这种双缓冲机制可以使图像的移动更加平滑,避免图像的闪烁。缓冲区大小等于屏幕的大小,而且每一个GameCanvas实例有且仅有一个缓冲区。

GameCanvas类提供一种存储按键状态的机制,我们可以通过它方便的了解用户与游戏的交互。这种机制可以跟踪用户按特殊键的次数,调用getKeyStates()方法返回所有游戏键按键状态的二进制表示,1代表上次调用方法后按过该键,0表示上次调用后还没有按过该键。我们可以跟踪的游戏状态有(这里的键都是在Canvas类里定义的):DOWN_PRESSED, UP_PRESSED, RIGHT_PRESSED, LEFT_PRESSED, FIRE_PRESSED, GAME_A_PRESSED, GAME_B_PRESSED, GAME_C_PRESSED和GAME_D_PRESSED。

首先扩展GameCanvas类,定制一个游戏画布,代码见清单1。清单2是运行例子的MIDlet。

package com.j2me.part3;

import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.game.GameCanvas;

import java.io.IOException;

public class MyGameCanvas
    
extends GameCanvas
    
implements Runnable
{
    
public MyGameCanvas()
    
{
        
super(true);
    }

    
    
public void start()
    
{
        
try
        
{
            
//导入couple图片,坐标定位在屏幕中央
            coupleImg = Image.createImage("/couple.gif");
            coupleX 
= CENTER_X;
            coupleY 
= CENTER_Y;
        }

        
catch(IOException ioex)
        
{
            System.err.println(ioex);
        }

        
        Thread runner 
= new Thread(this);
        runner.start();
    }

    
    
public void run()
    
{
        
//获取画布的graphics对象
        Graphics g = getGraphics();
        
        
while(true//无穷循环
        {
            
//基于上一个代码清单列出的结构
            
            
//首先检查游戏状态
            verifyGameState();
            
            
//检查用户输入
            checkUserInput();
            
            
//更新屏幕
            updateGameScreen(getGraphics());
            
            
//休息一下,控制刷新频率
            try
            
{
                Thread.currentThread().sleep(
30);
            }

            
catch(Exception e)
            
{}
        }

    }

    
    
private void verifyGameState()
    
{
        
//现在先不做任何操作
    }

    
    
private void checkUserInput()
    
{
        
//获取按键信息
        int keyState = getKeyStates();
        
        
//计算x轴位置
        calculateCoupleX(keyState);
    }

    
    
private void updateGameScreen(Graphics g)
    
{
        
//清空屏幕背景
        g.setColor(0xffffff);
        g.fillRect(
00, getWidth(), getHeight());
        
        
//将couple图片绘制到当前坐标位置
        g.drawImage(
            coupleImg, coupleX, coupleY, Graphics.HCENTER 
|
            Graphics.BOTTOM);
        
        flushGraphics();
    }

    
    
private void calculateCoupleX(int keyState)
    
{
        
//判断移动方向
        if((keyState & LEFT_PRESSED) != 0)
        
{
            coupleX 
-= dx;
        }

        
else if((keyState & RIGHT_PRESSED) != 0)
        
{
            coupleX 
+= dx;
        }

    }

    
    
private Image coupleImg;
    
private int coupleX;
    
private int coupleY;
    
private int dx = 1//移动量
    
    
//屏幕中心
    public final int CENTER_X = getWidth() / 2;
    
public final int CENTER_Y = getHeight() / 2;
}

清单 1. MyGameCanvas:游戏画布的第一个版本

清单 2 是使用这个游戏画布的MIDlet:

package com.j2me.part3;

import javax.microedition.lcdui.Display;
import javax.microedition.midlet.MIDlet;

public class GameMIDlet extends MIDlet
{
    MyGameCanvas gCanvas;
    
    
public GameMIDlet()
    
{
        gCanvas 
= new MyGameCanvas();
    }

    
    
public void startApp()
    
{
        Display d 
= Display.getDisplay(this);
        gCanvas.start();
        
        d.setCurrent(gCanvas);
    }

    
    
public void pauseApp()
    
{}
    
    
public void destroyApp(boolean unconditional)
    
{}
}

清单 2. 运行游戏示例的MIDlet类

使用Wireless工具建立一个工程,导入这两个类,然后生成并运行工程。确保你的工程目录res中有这个图片文件couple.gif,并保证名称为couple.gif, 图1是运行结果。

j2me3_figure1.gif
图1. 构建一个游戏:使用GameCanvas类

使用设备的方向键可以左右移动屏幕中的小图像,这是通过从checkUserInput()里取得按键状态,然后调用calculateCoupleX(),通过将按键状态与GameCanvas里预定义的按键值进行与操作(&),得到用户当前按的键,然后将实例变量更新,最终反映到设备屏幕上。

图像是在updateGameScreen()方法里被绘制到屏幕上的。这个方法使用传入的Graphics对象进行绘制,每一个GameCanvas只有一个Graphics对象。方法首先擦除上次绘制的图像,然后基于当前的coupleX值(还有一直不变的coupleY值)绘制couple.gif图像,最后将缓冲区的数据输出到屏幕。

run()方法里的循环体遵循我们刚开始提出的游戏结构。循环每30毫秒检查一次用户输入并刷新屏幕。你可以试着将这个值改变一下,这会改变刷新的频率。

最后,注意MyGameCanvas的构造器里调用了父类GameCanvas的构造方法,传入的参数为true,这表示从Canvas类继承的按键事件机制被抑制了,因为我们的代码不需要这些通知机制。我们的游戏状态用GameCanvas里自带的按键信息(由getKeyStates()方法取得)来处理已经足够了。通过抑制“keyPressed”、“keyReleased”和“keyRepeated”等通知机制,可以提高游戏的性能。

posted @ 2005-12-08 18:01 罗明 阅读(2487) | 评论 (3)编辑 收藏
 
J2ME Tutorial, Part 3: 探究MIDP 2.0的游戏API (一)
翻译了java.net上的J2ME tutorial文章,Part 3介绍J2ME中的游戏开发部分
介绍了javax.microedition.lcdui.game包中的类,通过开发一个完整的小游戏学习J2ME游戏开发。
原文见:http://www.blogjava.net/Andyluo/archive/2005/12/07/22911.html
posted @ 2005-12-08 04:52 罗明 阅读(60) | 评论 (0)编辑 收藏
 
更改Ubuntu系统的MAC地址(ZZ)
如何修改Ubuntu Linux系统的物理地址,也适用于其他Linux
原文见:http://www.blogjava.net/Andyluo/archive/2005/12/07/22907.html
posted @ 2005-12-08 04:49 罗明 阅读(47) | 评论 (0)编辑 收藏
 
J2ME Tutorial, Part 3: 探究MIDP 2.0的游戏API (一)

原文见:http://today.java.net/pub/a/today/2005/07/07/j2me3.html

J2ME是一个很流行的用于移动设备游戏开发的平台。J2ME中的MIDP 2.0引入了一个新的API包,它提供了一些定义好的游戏结构,这在以前的1.0版中要通过很多累赘代码来实现。在这部分tutorial中,我们会学习这个API包,然后用它开发一个小游戏(为了学习需要,我们会用到包中所有的类)。这个包是javax.microedition.lcdui.game. 它的建立基于我们前两次学的J2ME概念。

J2ME游戏API:摘要
javax.microedition.lcdui.game包只有5个类:GameCanvas, Layer, Sprite, TiledLayer和LayerManager. 这5个类提供了开发各种游戏应用的平台。

LayerSpriteTiledLayer的父类。这个类封装了游戏中可视化元素的行为。可视化元素可以是小精灵(sprite),代表一个可以在屏幕上来回移动的独立图形(或组成动画的一组图形),
或是一个背景层:通过很少的图片,就可以生成庞大游戏中的背景。我们可以用Layer来布置图形和进行可视化操作。Layer的子类通过重写paint(Graphics g)方法将元素绘制到屏幕上。

LayerManager类可以控制各层的绘制及绘制顺序,因此我们可以更方便地管理游戏中的可视化元素(包括小精灵和背景层)。

GameCanvas类扩展了上两节我们讲过的Canvas类(画布),提供一个在屏幕后端运行(off-screen)的缓冲区,所有绘制操作都先在这个缓冲区上进行,然后再显示到屏幕。它还提供了得到用户按键信息的快捷方法。

最好的学习方法应该是写一个完整的小游戏,通过这个小游戏我们可以了解游戏制作的方方面面。我们在介绍完这个小游戏的构造后(针对目前还没有游戏开发经验的),会在开发游戏的过程中具体介绍包中的每个类。

构建游戏的简短入门

游戏和动画是建立在重复执行某段代码的机制上的。这段代码跟踪实例变量的值,然后更新相应状态。基于当前游戏状态,代码将游戏元素绘制到屏幕上。实例变量值是随着用户交互和游戏内部行为而改变的。

代码的重复执行是通过将这段代码放入循环中实现的。在进入循环前,先检查一下实例变量,看是否要继续游戏,否则退出循环。为了控制实例变量的更新频率(其实是屏幕刷新的频率),循环体中的代码应该每次休眠一段时间(毫秒计)。

游戏的结构如下列代码所示:

// 主类
public class MainClass 
{
  
private GameCanvas canvas = new MyGameCanvas();


  
public MainClass() 
  
{
    
// 开始一个线程
    canvas.start();
  }

  
  
// 其他代码
}



// 实际进行绘制的类
public class MyGameCanvas extends GameCanvas implements Runnable 
{
  
public MyGameCanvas() 
  
{
    
// 初始化
  }

  
  
public void start() 
  
{
    
// 初始化
    
    
// 执行绘制线程
    Thread runner = new Thread(this);
    runner.start();
  }

  
  
private void run() 
  
{
  
    
// 或者使用(keeprunning = true) 
    
// keeprunning是一个控制游戏状态的实例变量

    
while(true
    



      
// 检查游戏是否达到 
      
// 某个边界值或特殊条件
      
      verifyGameState(); 


      
// 从用户那里得到输入,然后更新描述游戏元素状态的变量值 
      
        checkUserInput(); 


      
// 使用Graphics对象将当前游戏状态绘制到屏幕上

      updateGameScreen(getGraphics());


      
// 控制屏幕更新的频率 

      Thread.sleep(milliseconds); 
    }

  }

}

 

我们将在以下几节中使用这个结构来开发一个游戏。

posted @ 2005-12-07 20:40 罗明 阅读(1724) | 评论 (0)编辑 收藏
 
更改Ubuntu系统的MAC地址(ZZ)

转自:http://forum.ubuntu.org.cn/viewtopic.php?t=6774

1、临时更改(不需要重启):
代码:
$ sudo ifconfig eth0 down
$ sudo ifconfig eth0 hw ether XX:XX:XX:XX:XX:XX
$ sudo ifconfig eth0 up

这样做完以后default route可能就没有了,要重新加一下
代码:
$ sudo route add default gw xxx.xxx.xxx.xxx

2、永久更改:
代码:
$ sudo gedit  /etc/iftab 


eth0 mac 00:e0:4d:75:8e:50(改成你要的物理地址mac)

代码:
$ sudo gedit  /etc/network/interfaces

将iface eth0 inet static后面添加一行

hwaddress ether 00:E0:4d:75:8E:50

如:iface eth0 inet static
hwaddress ether 00:E0:4d:75:8E:50(自己加的)
address 219.220.214.113


然后就好了 可能要重启一下

posted @ 2005-12-07 19:52 罗明 阅读(2445) | 评论 (1)编辑 收藏
 
就当写毕业日志吧!!!
今天没有去公司,我可不想公司为我一个人订饭(公司里泡面的泡面,回家的回家,包子的包子),昨天因为只有我一个人要订饭,后来硬是凑了三个人,怕饭店不给送饭呢。我还是先在机房躲躲吧,tmd吉林石化,搞得我上班都没意思。
昨天听头头说有短信的项目做,要我先装一个Oracle, 然后把n多表导进去。现在还不知道做啥,数据库已经弄好了(Software上的Oracle不好使,下了半天,最后没装上,说缺少组件,烂),表也导进去了。可怜我的30G硬盘,我是边装边删啊。今天类似的“您的硬盘空间不够,请点击这里释放”提示已经出现不下6次了。下次再要有什么变动,我就格了重装,反正Home和Professional差不多(嗬嗬,只是盗版与正版的区别)。
J2ME的tutorial看到Part2了,学了几个控件,知道了MIDlet的lifecycle(不就是applet的lifecycle嘛!it's much the same).继续看
明天写几个java程序连下数据库,就可以找头头要任务了,hoho
继续学习j2me,
Go on, be a tiger!
PS: 发现学自己感兴趣的东西一点都不累(我还是很注意休息的哦,多吃水果), 今天比较有成就感,哈哈
posted @ 2005-12-07 05:07 罗明 阅读(32) | 评论 (0)编辑 收藏
 
就当写毕业日志吧!!!
 
今天没有去公司,我可不想公司为我一个人订饭(公司里泡面的泡面,回家的回家,包子的包子),昨天因为只有我一个人要订饭,后来硬是凑了三个人,怕饭店不给送饭呢。我还是先在机房躲躲吧,tmd吉林石化爆炸搞的松花江污染,搞得我上班都没意思。
 
昨天听头头说有短信的项目做,要我先装一个Oracle, 然后把n多表导进去。现在还不知道做啥,数据库已经弄好了(Software上的Oracle不好使,下了半天,最后没装上,说缺少组件,kick),表也导进去了。可怜我的30G硬盘,我是边装边删啊。今天类似的“您的硬盘空间不够,请点击这里释放”提示已经出现不下6次了。下次再要有什么变动,我就格了重装,反正Home和Professional差不多(嗬嗬,只是盗版与正版的区别,支持正版!)。
 
J2ME的tutorial看到Part2了,学了几个控件,知道了MIDlet的lifecycle(不就是applet的lifecycle嘛!it's much the same).继续看
 
明天写几个java程序连下Oracle,就可以找头头要任务了,hoho
继续学习j2me,
Go on, be a tiger!
 
PS: 发现学自己感兴趣的东西一点都不累(我还是很注意休息的哦,多吃水果), 今天比较有成就感,哈哈
posted @ 2005-12-06 21:08 罗明 阅读(116) | 评论 (0)编辑 收藏
 
这几天开始学习J2ME,从网上找了些资料,决定按J2ME Wiki的路线走:
1、Tutorial
里面有几篇java.net里的入门文章,讲的是MIDP 2.0和CLDC 1.1(最新版本),使用的工具是J2ME Wireless Toolkit 2.2(最新的release版,2.3beta已经出来了)。尽管这个系列主要使用工具Toolkit,但在一开始的时候先不用toolkit做了个项 目,符合初学一种技术的步骤。

Getting Started with MIDP 2.0

J2ME Tutorial, Part 1: Creating MIDlets

J2ME Tutorial, Part 2: User Interfaces with MIDP 2.0

J2ME Tutorial, Part 3: Exploring the Game API of MIDP 2.0

J2ME Tutorial, Part 4: Multimedia and MIDP 2.0

2、Articles(从网上搜集的文章):
MIDlet Development with J2ME and MIDP.pdf
MIDlet Development with Version 2.0 of the Wireless Toolkit.pdf
J2ME development with EclipseMe.pdf

2、Books
J2ME应用程序: 《J2ME in a Nutshell》
J2ME Gaming:
《Wireless.Game.Development.in.Java.with.MIDP.2.0.Oct.2004》、
《J2ME & Gaming》

对J2ME感兴趣的同胞,等着看我的Blog吧

*****************************************
12:35 12/05/2005
在Amazon看了所有相关书籍的读者反馈,发现《J2ME in a Nutshell》是2002年出版的,只有MIDP 1.1内容,所以换成《Wireless Java: Developing with J2ME, Second Edition》(读者反馈挺好的)
posted @ 2005-12-05 19:33 罗明 阅读(70) | 评论 (0)编辑 收藏
 
这几天开始学习J2ME,从网上找了些资料,决定按J2ME Wiki的路线走:
1、Tutorial
里面有几篇java.net里的入门文章,讲的是MIDP 2.0和CLDC 1.1(最新版本),使用的工具是J2ME Wireless Toolkit 2.2(最新的release版,2.3beta已经出来了)。尽管这个系列主要使用工具Toolkit,但在一开始的时候先不用toolkit做了个项 目,符合初学一种技术的步骤。

Getting Started with MIDP 2.0 

J2ME Tutorial, Part 1: Creating MIDlets 

J2ME Tutorial, Part 2: User Interfaces with MIDP 2.0 

J2ME Tutorial, Part 3: Exploring the Game API of MIDP 2.0 

J2ME Tutorial, Part 4: Multimedia and MIDP 2.0

2、Articles(从网上搜集的文章):
MIDlet Development with J2ME and MIDP.pdf
MIDlet Development with Version 2.0 of the Wireless Toolkit.pdf
J2ME development with EclipseMe.pdf

2、Books
J2ME应用程序: 《J2ME in a Nutshell》
J2ME Gaming:
《Wireless.Game.Development.in.Java.with.MIDP.2.0.Oct.2004》、
《J2ME & Gaming》

对J2ME感兴趣的同胞,等着看我的Blog吧

*****************************************
12:35 12/05/2005
在Amazon看了所有相关书籍的读者反馈,发现《J2ME in a Nutshell》是2002年出版的,只有MIDP 1.1内容,所以换成《Wireless Java: Developing with J2ME, Second Edition》(读者反馈挺好的)
posted @ 2005-12-05 12:54 罗明 阅读(421) | 评论 (0)编辑 收藏
 
别妄想会在以后去每个分类里找东西。将所有的书签都放在顶层,这才是你的注意力所在!
posted @ 2005-12-04 19:22 罗明 阅读(63) | 评论 (0)编辑 收藏
 
今天逛论坛时发现的,蓝迪游戏其实是一个跨平台的网游,支持W$、Linux和Mac, 是国产的网游,所以速度还比较快,跟QQ游戏大厅的样子差不多,现在有麻将、斗地主、军旗等几种游戏。做得挺好,玩的比较舒服。

现在主要是Linux和Mac的玩家,Mac居多,W$的最少。

玩了一个多点,差点忘吃午饭了,呵呵

网址:www.bluedj.com
posted @ 2005-12-04 11:27 罗明 阅读(2170) | 评论 (2)编辑 收藏
 
如果我的大学生活重新来过,我会在大一时配一台电脑,学会编程和装机;在大二时申请一个域名,装一个Linux系统,做一台服务器,提供Weblog等功能。。。再慢慢做精做大.....
posted @ 2005-12-04 11:27 罗明 阅读(296) | 评论 (0)编辑 收藏
 
别妄想会在以后去每个分类里找东西。将所有的书签都放在顶层,这才是你的注意力所在!
posted @ 2005-12-04 11:27 罗明 阅读(352) | 评论 (0)编辑 收藏
 
...
如果我的大学生活重新来过,我会在大一时配一台电脑,学会编程和装机;在大二时申请一个域名,装一个Linux系统,做一台服务器,提供Weblog等功能。。。
posted @ 2005-12-03 03:47 罗明 阅读(47) | 评论 (0)编辑 收藏
 
今天逛论坛时发现的,蓝迪游戏其实是一个跨平台的网游,支持W$、Linux和Mac, 是国产的网游,所以速度还比较快,跟QQ游戏大厅的样子差不多,现在有麻将、斗地主、军旗等几种游戏。做得挺好,玩的比较舒服。

现在主要是Linux和Mac的玩家,Mac居多,W$的最少。

玩了一个多点,差点忘吃午饭了,呵呵

网址:www.bluedj.com
posted @ 2005-12-01 03:23 罗明 阅读(97) | 评论 (0)编辑 收藏
仅列出标题
共14页: First 上一页 2 3 4 5 6 7 8 9 10 下一页 Last