<?xml version="1.0" encoding="gb2312"?>
<rss version="2.0">
<channel>
<title><![CDATA[触摸记忆]]></title>
        <image>
        <title>http://hi.baidu.com</title>
        <link>http://hi.baidu.com</link>
        <url>http://img.baidu.com/img/logo-hi.gif</url>
        </image>
<description><![CDATA[记忆有着不同的手感.有的柔顺,有的滑腻,也有的是苦涩...]]></description>
<link>http://hi.baidu.com/touchthememory</link>
<language>zh-cn</language>
<generator>www.baidu.com</generator>
<ttl>5</ttl>


<item>
        <title><![CDATA[转：Windows Mobile手机当无线网卡]]></title>
        <link><![CDATA[http://hi.baidu.com/touchthememory/blog/item/82bf90015ef4cd0e1c95834f.html]]></link>
        <description><![CDATA[
		
		<p>Windows Mobile手机当无线网卡<br>
Posted in Techno by l4ever on 2008-04-11. <br>
当然,你的Windows Mobile手机得有WIFI模块才可以,电脑通过手机的WIFI网卡上网<br>
1、修改注册表的HKEY_LOCAL_MACHINE\Comm\Tcpip\Parms下的IpEnableRouter为1。<br>
2、修改注册表的HKEY_LOCAL_MACHINE\Comm \ConnectionSharing下的DisabledOnBoot为0,EnableAddressTranslation为1。PrivateInterface这个是接PC的。如果S1是用usb连接PC的(与usb连接的PC最好是去掉ActiveSync的usb选项，避免出现同步)，那么通常这里填Rndisfn1，这要视注册表而定,PublicInterface这个是连S1的,同样的，要视注册表而定，填S1上WIFI挂载的网卡的名字Tnetw12511（用TaskMgr.exe可查看S1网卡名字）。<br>
3、重启,插上USB线把PC与S1连通。在PC里用&ldquo;运行&rdquo;ping测试连接S1网卡成功。<br>
点击&ldquo;开始&rdquo;&mdash;&mdash;&ldquo;连接到&rdquo;&mdash;&mdash;&ldquo;显示所有连接&rdquo;，可以看到多了一个&ldquo;本地连接＊&rdquo;（＊表示数字）。进入该连接的TCP/IP属性，作如下设置：<br>
IP 地 址：169.254.2.2<br>
子 网 掩 码：255.255.0.0<br>
默 认 网 关：169.254.2.1<br>
首选DNS服务器：168. 95.1.1（或者192.168.1.1）【有注意事项】<br>
注意：有多个网卡的最好把其它网卡全停掉。<br>
4、先连接wifi成功,再插上USB线。打开pc的IE，上网成功<br>
来源: I?{简单.快乐..} <a href="http://l4ever.cn/">http://l4ever.cn</a><br>
地址:http://l4ever.cn/archives/972</p>
<p>我使用多普达钻石按照上面的设置已经成功上网。其中稍微注意一下的地方如下：<br>
1.钻石网卡的名称于S1一致。<br>
2.IP设置的时候可以只设置首选DNS IP自动获取。<br>
3.DNS的值设置为连接到的无线路由的网关，比如我设置的就是192.168.0.1</p> <a href="http://hi.baidu.com/touchthememory/blog/item/82bf90015ef4cd0e1c95834f.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/touchthememory/blog/category/Public">Public</a>&nbsp;<a href="http://hi.baidu.com/touchthememory/blog/item/82bf90015ef4cd0e1c95834f.html#comment">查看评论</a>]]></description>
        <pubDate>2009-05-08  09:12</pubDate>
        <category><![CDATA[Public]]></category>
        <author><![CDATA[412858310]]></author>
		<guid>http://hi.baidu.com/touchthememory/blog/item/82bf90015ef4cd0e1c95834f.html</guid>
</item>

<item>
        <title><![CDATA[C#转换图形的色深]]></title>
        <link><![CDATA[http://hi.baidu.com/touchthememory/blog/item/ecaeed3f8048c4ca7c1e716e.html]]></link>
        <description><![CDATA[
		
		<p>感谢原作者提供该代码，因为我的图形只有黑白两色，所以对代码进行了简单的修改，即注释部分为原代码。</p>
<p>class BmpAdjuster<br>
&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public delegate ColorPalette PaletteAdjustEvent(ColorPalette plt);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public unsafe delegate void ConvertScanLineEvent(IntPtr srcLine, IntPtr dstLine, int width, int srcPixBit, int dstPixBit, Bitmap srcBmp, Bitmap dstBmp);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public static void AdjustColor(ref Bitmap bmp, PixelFormat format, PaletteAdjustEvent PalleteAdjust, ConvertScanLineEvent ConvertScanLine)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Bitmap bmpOut = new Bitmap(bmp.Width, bmp.Height, format);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Graphics g=Graphics.FromImage(bmp);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  bmpOut.SetResolution(g.DpiX, g.DpiY);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  g.Dispose();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  bmpOut.Palette = PalleteAdjust(bmpOut.Palette);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  PixelFormat srcFmt = bmp.PixelFormat;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  PixelFormat dstFmt = bmpOut.PixelFormat;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int srcPixBit = GetPixelSize(srcFmt);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int dstPixBit = GetPixelSize(dstFmt);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  BitmapData srcData = null;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  BitmapData dstData = null;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  try<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  srcData = bmp.LockBits(rect, ImageLockMode.ReadOnly, srcFmt);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  dstData = bmpOut.LockBits(rect, ImageLockMode.WriteOnly, dstFmt);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  unsafe<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  byte* srcLine = (byte*)srcData.Scan0.ToPointer();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  byte* dstLine = (byte*)dstData.Scan0.ToPointer();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  for (int L = 0; L &lt; srcData.Height; L++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ConvertScanLine((IntPtr)srcLine, (IntPtr)dstLine, srcData.Width, srcPixBit, dstPixBit, bmp, bmpOut);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  srcLine += srcData.Stride;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  dstLine += dstData.Stride;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  finally<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  bmp.UnlockBits(srcData);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  bmpOut.UnlockBits(dstData);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  bmp = bmpOut;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  internal static int GetPixelSize(PixelFormat format)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  switch (format)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case PixelFormat.Format16bppRgb555: return 16;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case PixelFormat.Format16bppRgb565: return 16;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case PixelFormat.Format24bppRgb: return 24;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case PixelFormat.Format32bppRgb: return 32;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case PixelFormat.Format1bppIndexed: return 1;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case PixelFormat.Format4bppIndexed: return 4;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case PixelFormat.Format8bppIndexed: return 8;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case PixelFormat.Format16bppArgb1555: return 16;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case PixelFormat.Format32bppPArgb: return 32;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case PixelFormat.Format16bppGrayScale: return 16;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case PixelFormat.Format48bppRgb: return 48;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case PixelFormat.Format64bppPArgb: return 64;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case PixelFormat.Canonical: return 32;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case PixelFormat.Format32bppArgb: return 32;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case PixelFormat.Format64bppArgb: return 64;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return 0;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public unsafe static void Monochrome(ref Bitmap bmp)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  AdjustColor(ref bmp, PixelFormat.Format1bppIndexed,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  new PaletteAdjustEvent(SetBlackWhitePallete),<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  new ConvertScanLineEvent(ConvertBlackWhiteScanLine));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  static ColorPalette SetBlackWhitePallete(ColorPalette plt)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  plt.Entries[0] = Color.Black;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  plt.Entries[1] = Color.White;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return plt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  unsafe static void ConvertBlackWhiteScanLine(IntPtr srcLine, IntPtr dstLine, int width, int srcPixBit, int dstPixBit, Bitmap srcBmp, Bitmap dstBmp)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  byte* src = (byte*)srcLine.ToPointer();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  byte* dst = (byte*)dstLine.ToPointer();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int srcPixByte = srcPixBit / 8;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int x, t = 0;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //int v = 0;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //int middle=200 * 256;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  for (x = 0; x &lt; width; x++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  t = (t &lt;&lt; 1) | (src[0] == 0 ? 0 : 1);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //v = 28 * src[0] + 151 * src[1] + 77 * src[2];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //t = (t &lt;&lt; 1) | (v &gt; middle ? 1 : 0);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  src += srcPixByte;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (x % 8 == 7)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  *dst = (byte)t;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  dst++;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  t = 0;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if ((x %= 8) != 7)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  t &lt;&lt;= 8 - x;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  *dst = (byte)t;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public static void Gray(ref Bitmap bmp)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  AdjustColor(ref bmp, PixelFormat.Format8bppIndexed,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  new PaletteAdjustEvent(SetGrayPallete),<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  new ConvertScanLineEvent(ConvertGaryScanLine));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  static ColorPalette SetGrayPallete(ColorPalette plt)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  for (int i = plt.Entries.Length - 1; i &gt;= 0; i--)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  plt.Entries[i] = Color.FromArgb(i, i, i);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return plt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  unsafe static void ConvertGaryScanLine(IntPtr srcLine, IntPtr dstLine, int width, int srcPixBit, int dstPixBit, Bitmap srcBmp, Bitmap dstBmp)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  byte* src = (byte*)srcLine.ToPointer();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  byte* dst = (byte*)dstLine.ToPointer();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int srcPixByte = srcPixBit / 8;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  for (int x = 0; x &lt; width; x++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  *dst = (byte)((28 * src[0] + 151 * src[1] + 77 * src[2]) &gt;&gt; 8);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  src += srcPixByte;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  dst++;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;  }</p> <a href="http://hi.baidu.com/touchthememory/blog/item/ecaeed3f8048c4ca7c1e716e.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/touchthememory/blog/category/Public">Public</a>&nbsp;<a href="http://hi.baidu.com/touchthememory/blog/item/ecaeed3f8048c4ca7c1e716e.html#comment">查看评论</a>]]></description>
        <pubDate>2009-04-09  19:14</pubDate>
        <category><![CDATA[Public]]></category>
        <author><![CDATA[412858310]]></author>
		<guid>http://hi.baidu.com/touchthememory/blog/item/ecaeed3f8048c4ca7c1e716e.html</guid>
</item>

<item>
        <title><![CDATA[C#条码打印经验整理]]></title>
        <link><![CDATA[http://hi.baidu.com/touchthememory/blog/item/1cb160ee56a435f3b2fb959c.html]]></link>
        <description><![CDATA[
		
		<p>条码长度过长可以使用Code128或Ean128码制压缩条码长度<br>
生成条码图形使用了第三方组件BCEncode.dll版本2.20<br>
需要设置图形的分辨率为打印分辨率，方法：Bitmap.SetResolution(PRINTER_RESOLUTION_X, PRINTER_RESOLUTION_Y);。否则图形为默认分辨率，打印时会被放大。<br>
需要使用如下方法对Graphics对象进行处理<br>
private void SetGraphics(Graphics g)<br>
{<br>
&nbsp;&nbsp;&nbsp;  g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;<br>
&nbsp;&nbsp;&nbsp;  g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixel;<br>
}<br>
否则绘制的图形会被做圆滑处理，添加很多黑白之外的颜色在图形上，且肉眼无法分辨。导致打印出来的图形有锯齿或虚线。<br>
组件生成图形的色深为1-bit，而如果将其绘制到另一图形上会产生一个32-bit的图形（因为Bitmap对象默认是32位色深）。将该图形强制转换为1位色深后，文件大小基本可压缩10倍以上。<br>
将打印机设置中切纸功能开启，且应设置打印的页边距，使每一个条码内容准确打印在条码标签上。<br>
在打印机设置中设置打印的密度，以使打印出更清晰的条码便于扫描识别。<br>
最后，不要打印长的横直线，容易使碳带被扯断。</p>
<p> </p> <a href="http://hi.baidu.com/touchthememory/blog/item/1cb160ee56a435f3b2fb959c.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/touchthememory/blog/category/Public">Public</a>&nbsp;<a href="http://hi.baidu.com/touchthememory/blog/item/1cb160ee56a435f3b2fb959c.html#comment">查看评论</a>]]></description>
        <pubDate>2009-04-09  18:38</pubDate>
        <category><![CDATA[Public]]></category>
        <author><![CDATA[412858310]]></author>
		<guid>http://hi.baidu.com/touchthememory/blog/item/1cb160ee56a435f3b2fb959c.html</guid>
</item>

<item>
        <title><![CDATA[醉步男[5]]]></title>
        <link><![CDATA[http://hi.baidu.com/touchthememory/blog/item/82bf90018c239b001d95833d.html]]></link>
        <description><![CDATA[
		
		为什么？因为下雨，大家都坐出租车回去了，只剩下我一个人。所以才会和小竹田说话。<br>
为什么会和小竹田说话？  <br>
因为是老朋友。  <br>
谁和谁是老朋友？  <br>
我和小竹田&mdash;&mdash;不对不对，不是那样。我是今天才第一次见那个男子，怎么能说他是老朋友啊？  <br>
这可真是从来都没体验过的一天啊。  <br>
看见自己家了。可是我应该是在相邻的一站下车的呀，一站路的距离，我就这样走过来了？或者是我自己在无意识的状态下又乘了一回地铁？  <br>
小竹田说，手儿奈是因为我们对自己的大脑进行过处理才会存在的。这个男的肯定是精神错乱了。非常明显，是由于手儿奈的死，才导致我们去处理自己的大脑。反过来根本说不通。呀，也不对，说来说去，并没有什么证据能证明我的大脑接受过那样的处理吧。不过今天我和小竹田的见面可以算作证据吗？叫作小竹田的这个男人的存在算是证据吗？  <br>
<br>
我努力控制着自己快要发狂的大脑，挣扎着走回了家里。我在玄关呆呆地站了好一会儿，然后才听到旁边的妻子在说着什么。  <br>
&ldquo;……回来晚的话，应该早点打个电话归来，不然家里人会很担心的。&rdquo;  <br>
&ldquo;下雨了啊。&rdquo;  <br>
&ldquo;下雨了？奇怪，这边一点都没下啊。不过就算下雨，也不能算是不打电话的理由吧。&rdquo;  <br>
&ldquo;遇上一个朋友。大学同学。&rdquo;  <br>
&ldquo;哦，什么人呀？&rdquo;  <br>
&ldquo;不能告诉你。&rdquo;  <br>
&ldquo;为什么？&rdquo;  <br>
我没理会妻子的问话，径直向浴室走去。  <br>
&ldquo;不能告诉我的人……&rdquo;妻子缠着问，&ldquo;女的？&rdquo;  <br>
我没回答。  <br>
&ldquo;不说我也知道！&rdquo;妻子在我身后冷笑着。  <br>
第二天还是个雨天。  <br>
我打着伞向车站走去。一路走，一路注意着道路两旁的景象。  <br>
那边，昨天的时候是长着树的吗？怎么好像完全没有见过的样子？这个地方有一个凹坑吗？怎么会现在才注意到？这一家的门口怎么这么气派？小学旁边什么时候有一块空地了？  <br>
从胡同里走出来的一个男子默默地向我微微鞠了一躬。  <br>
我认识这个男子吗？也许他只是条件反射性地和我寒暄一下？为什么我不记得自己以前见过这个男子？是不是我自己一下子想不起来呢？我到底该不该回应他一下呢？  <br>
我也默默地向那个男子微微鞠了一躬。  <br>
那个男子脸上是什么表情？他对我的答礼感到奇怪？他到底是不是我认识的人？  <br>
我到车站了。  <br>
啊，车站的月台有这么宽吗？想不起来了。现在正在月台上等车的人里有我认识的人吗？还是一个我认识的人都没有？  <br>
我低低地垂下头，等着地铁。不能抬头。说不定会和某个自己记不得的熟人的目光碰上。  <br>
地铁来了。我飞快地挤进了车厢。车厢里很拥挤，一个空位都没有。一会儿工夫，地铁就开到了地面上。我看着窗外，街上的景色零零碎碎地跳入了我的眼睛里。  <br>
这个地方有家杂货店。那个地方有块墓地。这些地方到底是我直到今天才注意到的，还是昨天为止都没有存在过的？啊呀，已经到站了吗？我要下车了。不过，真的该在这里下车吗？从这个车站能到公司吗？  <br>
我上班的公司就在车站前面那幢极高的大厦里吗？一直到昨天为止，我的公司是在那里面吗？好像是那样的吧。可是自己也不敢十分肯定。这位前台接待员和昨天的那个是同一个人吗？一直盯着看太不礼貌了，还是装着没事的样子偷偷看看&mdash;&mdash;果然有一点不大一样的感觉。对了，我的办公室在几楼？五楼，六楼？嗯，是五楼，不会错的。啊，就是这里。这里就是公司的楼层了。走廊里正在走过来的是谁？那个男子是我的同事，还是我的上司？  <br>
<br>
我躲到走廊拐角的阴暗处。  <br>
&ldquo;在干什么呢？&rdquo;那个男子的声音好像是在哪里听到过的。  <br>
&ldquo;啊，没……没什么。&rdquo;我扭过头，背对着男子。  <br>
一定不能去看声音的主人。看了的话，说不定会发现是我完全不认识的人。如果这是那样，那我……那我…  <br>
…我会发疯的。  <br>
&ldquo;能帮我个忙吗，血沼？&rdquo;  <br>
我大叫起来。声音的主人认识我。但是，如果我回过头让他看见我的脸的话，说不定他会发现我的长相和他认识的那个血沼完全不一样。那他就会认为我是在故意骗他，说不定会狠狠地骂我一顿。我绝不能让他看到我的脸。我继续尖叫着，一直到声音的主人胆怯地从我身边逃开为止。<br>
从那一天开始，我便只走固定的路线上下班了。如果走固顶路线之外的路线，我就会变得非常不安。休息日的时候，不管妻子怎么说，我都一整天关在家里不肯出门。我害怕出去之后会看到街道变得和以前不一样。当然，我也知道就算真的有变化，也不见得就会发生别的什么古怪的事情，毕竟有很多原因会引起变化，比如说道路施工、新建大楼之类。可即使我知道这些原因，仍然会很害怕。  <br>
<br>
上下班的路上有时候会和相识的人擦肩而过。但我从来都不敢停下来，因为我害怕他们实际上是我完全不认识的人。当然，就算真的不认识，也有可能是我自己认错了，可是这种解释对于我自己来说却也越来越没有说服力了。  <br>
我不敢与任何人对视。我不敢与任何人说话。我只敢与我自己说话。我构造自己的语言，构造自己的世界。我要构造一个不会变化，不会迷失自我，无论何时都可以自言自语的世界。只有没有他人的存在的世界，才是我可以安心生存的世界。为了这个目的，每一天我都决不去看多余的事物，决不去听多余的声音。我在无穷无尽的变化之中努力维持着自身世界的秩序。  <br>
<br>
是的。到了现在，我终于理解了那个叫作小竹田的男子的话的意思。手儿奈是我们两个悲剧的原因。时间被破坏了的世界就是因果律被破坏了的世界。原因和结果没有先后，没有区别。我们的悲剧作为原因，也就会引起手儿奈生存的结果。我们的世界就是手儿奈的一部分。呀，或许应该说，手儿奈才是我们的世界。这些也好，那些也好，都只是我的幻想，都是因为受到了只能认识因果律的头脑的限制而产生的扭曲。  <br>
<br>
我自己是不存在的。  <br>
世界是不存在的。  <br>
手儿奈同样是不存在的。  <br>
无边的恐惧攫住了我。我要从这种无边无际的恐惧中逃出来。我的指甲深深掐入了我的身体。无法忍受的痛苦。  <br>
我回到了我自己的世界。  <br>
我常常被这样的生活弄得精疲力尽。每当这个时候，我就会用尽可能小的，即使妻子站在我身后都听不到的声音试着问自己：&ldquo;我到底是什么？&rdquo;  <br>
你是祭祀品。  <br>
&ldquo;为什么人可以安定地生活？&rdquo;  <br>
因为波函数可以坍缩。  <br>
&ldquo;折磨我的是什么？&rdquo;  <br>
是无法抗拒的命运。  <br>
&ldquo;为什么人不能舍弃希望？&rdquo;  <br>
因为波函数可以发散。  <br>
&ldquo;你是谁？&rdquo;  <br>
我是手儿奈。  <br>
<br>
①狸猫：在日本的神话传说中，狸猫是一种神秘的动物，它们擅长使用障眼法，常常同人类搞些无伤大雅的恶作剧。  <br>
②即通常说的&ldquo;伽玛刀&rdquo;。  <br>
③《醉步男》的整个故事取材于日本现存最早的诗歌总集《万叶集》。在传说中，小竹田和血沼都爱上了菟原，而菟原又无法在他们两人之中取舍，最后投河自尽，得知这一消息的小竹田与血沼也随之自刎。因为这个传说，所以文中的手儿奈才会说出&ldquo;我是古代诗歌中的女主人公&rdquo;这样的话。另外，此前手儿奈说过她的名字来源于古书，原因也在于此。  <br>
<br>
④医短是&ldquo;医疗技术短期大学部&rdquo;的简称。 <a href="http://hi.baidu.com/touchthememory/blog/item/82bf90018c239b001d95833d.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/touchthememory/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/touchthememory/blog/item/82bf90018c239b001d95833d.html#comment">查看评论</a>]]></description>
        <pubDate>2008-10-24  19:44</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[412858310]]></author>
		<guid>http://hi.baidu.com/touchthememory/blog/item/82bf90018c239b001d95833d.html</guid>
</item>

<item>
        <title><![CDATA[醉步男[4]]]></title>
        <link><![CDATA[http://hi.baidu.com/touchthememory/blog/item/c1d48b1194384578ca80c43c.html]]></link>
        <description><![CDATA[
		
		你吃了一惊，把手伸进自己的大衣口袋，把你的手提电脑也拿了出来。 <br>
&ldquo;咦，巧得很啊，两个人都带着同样的东西？&rdquo;我假装很惊讶地说。 <br>
&ldquo;我是因为考虑到你有可能不会帮我处理大脑，所以才准备了这个。&rdquo; <br>
&ldquo;原来如此。我是偶然带着的。和你见面之前刚好有个要计算的项目，就把它一直带在身上了。不过，利用这台机器，我也可以自己对自己的大脑进行处理了。&rdquo; <br>
&ldquo;你自己？&rdquo;你惊讶地张大了嘴。 <br>
&ldquo;是的。只有我自己。我一个人对我自己的大脑进行处理。&rdquo; <br>
&ldquo;混蛋！首先应该是我！&rdquo; <br>
&ldquo;不，血沼，你静下心来好好想一想，&rdquo;我开始向你列举理由，&ldquo;如果一上来就由你接受处理，那要是失败了怎么办？如果你死了，或者变成废人了怎么办？&mdash;&mdash;显然你的种种研究就没办法继续下去了。可如果换做我又怎么样呢？不管我出了什么样的状况，至少你的研究还是不受影响的。&rdquo; <br>
&ldquo;……你说得好像有点道理……&rdquo; <br>
&ldquo;就是了。你现在告诉我那个区域的位置吧。&rdquo; <br>
这一次就像我对你催眠了一样，你一点一点告诉了我区域的位置。其实，我在上一次的五月十四日就已经知道了，不过为了不引起你的怀疑，我也只好耐心再听你说一遍。 <br>
在你解释完了之后，我开始调整程序，然后再一次爬进处理室里。 <br>
然后，是又一次恐怖的经历。 <br>
&ldquo;你还好吧？&rdquo;我从处理室里爬出来的时候，你问我说。 <br>
&ldquo;太可怕了！&rdquo;我因为难受而忍不住怒吼着，&ldquo;血沼，是不是失败了？根本没有变化啊！&rdquo; <br>
你也慌张起来，匆忙调出我的脑电波和脉搏之类的记录数据查看，可是始终没能查处任何奇怪的地方，最后你抬起头来看了我一眼，然后又失望地垂下头去。 <br>
我们两个人一言不发地往治疗室外走去。两三分钟以后，你突然开口说话了。 <br>
&ldquo;小竹田，你是在骗我！&rdquo; <br>
&ldquo;骗你？&rdquo;我心里一惊，但表面上不动声色，暗自祈祷能够蒙混过去，&ldquo;我骗你什么了？你以为我害怕对自己的大脑进行处理，所以装出一副接受处理的样子，实际上并没有作任何处理？&mdash;&mdash;胡说八道！你要不信的话，可以来扫描我的大脑，看看我是不是真的接受处理了。&rdquo; <br>
&ldquo;不是这个，我说的不是这个。&rdquo;你好像打了一个寒颤，&ldquo;唔，连我自己都不相信……你，你是要独占某种能力吧？&rdquo; <br>
&ldquo;独占什么能力？&rdquo; <br>
&ldquo;独占时间旅行的能力。&rdquo; <br>
&ldquo;你在说胡话吧……我为什么要那么做？&rdquo; <br>
&ldquo;因为，&rdquo;你的眼睛里布满了血丝，&ldquo;你已经了解到时间旅行的好处了。&rdquo; <br>
&ldquo;开玩笑……那你说，我到底是什么时候了解的？&rdquo; <br>
&ldquo;当然是在未来。你是来自于未来的……对！你骗了我！&rdquo;你回过身，又向着治疗室的方向跑去。 <br>
&ldquo;站住！你一个人进不了治疗室！&rdquo; <br>
你停了下来，回头看着我。 <br>
&ldquo;你到底想要什么？要赚很多很多钱，还是要征服整个世界？&rdquo; <br>
&ldquo;你不觉得这些都很有吸引力吗？不过，有吸引力的事情太多了，我还没有决定到底先作什么才好。反正我目前的第一件事情，就是要先除掉所有有能力阻止我的人。&rdquo; <br>
&ldquo;咯！&rdquo;你突然抓起脚边的一块石头，往我头上狠狠地砸了下去。 <br>
我醒来的时候，正趴在教授办公室的桌子前面睡觉。 <br>
今天是哪一天？ <br>
我看了看手表。日期是六月十九日。指针正指向晚上十点。 <br>
我到底是从什么时候开始睡觉的？在上次的六月十九日这一天，我记得自己好像并没有打过盹。我走到洗手间，对着镜子查看自己的头&mdash;&mdash;就像预想的那样，头上有一道伤口，不过看上去已经治疗过了，差不多愈合了。 <br>
原来如此。此前的我被你打昏了，然后就又一次开始了时间旅行。在上一次的五月十四日那一天本来并没有发生这种事情，现在既然发生了，它也就对历史发生了影响，于是我才会在本来没睡觉的时候睡觉，而我的意识也就连接到了这个新的时刻上。但是那件事情以后呢？那个血沼被警官抓走了吗？他说了说吗？啊，就算他说了也没人会相信吧…… <br>
<br>
我开始收拾东西准备回家了。忽然间，我想起明天就是纪念演讲的日子，接着又想起电子备忘本的事，我有点不放心，就把光盘放进电脑里启动，打算确认一下光盘的内容。<br>
然后，我仿佛掉进了冰窟，浑身一下子变得冰冷：因为电子备忘本的内容全都没有了。 <br>
是光盘错了吗？我慌慌张张地在抽屉里翻找起来，可是什么也没有找到。没有办法了，我带着最后一丝希望，往秘书家里打了一个电话。 <br>
&ldquo;喂，您好，这里是早乙女家。&rdquo; <br>
&ldquo;你好，我是小竹田。很抱歉这么晚了还给你打电话。&rdquo; <br>
&ldquo;怎么了？&rdquo; <br>
&ldquo;那个，是这样的。明天演讲用的光盘放在哪里了，你还记得吗？&rdquo; <br>
&ldquo;演讲用的光盘？教授您什么时候做的那个啊？&rdquo; <br>
&ldquo;啊，你不知道吗？就是存着电子备忘本的那一张啊。&rdquo; <br>
&ldquo;我不知道。&rdquo; <br>
&ldquo;奇怪，你应该知道的，不是今天刚刚做的吗？&rdquo; <br>
&ldquo;今天？今天什么都没有做啊？&rdquo; <br>
&ldquo;呃？做的电子备忘本啊。&rdquo; <br>
&ldquo;我不明白您在说什么。您不是一向都很讨厌学生使用电子备忘本的吗？怎么会自己也用那个呢？&rdquo; <br>
&ldquo;啊，这样啊……看来是我搞错了。那么，十分对不起，打扰你了。&rdquo; <br>
&ldquo;请您以后不要再开这种玩笑了。&rdquo; <br>
秘书似乎很不高兴地挂上了电话。 <br>
我尽力使自己保持冷静。 <br>
冷静。要冷静。着急不可能让事态好转；相反，如果冷静下来好好想想，说不定还能找到什么解决的方法。 <br>
首先，要把事情的顺序整理一下。 <br>
最初来到六月二十日的时候，光盘里并没有电子备忘本。但实际上在我对六月二十日做出观察前，这一点还并没有确定下来。有电子备忘本和没有电子备忘本的光盘都是以非实在化的，波函数的状态同时存在的。然后，我登场了，并且开始观察光盘的内容，于是波函数坍缩，光盘里没有电子备忘本的状态被实在化了。 <br>
此后我又回到了过去，于是波函数再次发散。 <br>
接着，我来到了十九日。在那时候，我自己在光盘中输入了电子备忘本的内容，强行使波函数坍缩了。 <br>
再后来，我跳过了二十日，直接去了未来。去往未来和回到过去是不同的，因为并没有发生时间的逆转，所以波函数一直处于坍缩的状态，我也就一直处于光盘中有电子备忘本内容的世界里。 <br>
但是后来，我又一次回到了五月十四日的过去。在那一瞬间，波函数又发散了。 <br>
当我再回到六月十九日，观察光盘内容的时候，波函数也再一次探索到了没有电子备忘本的状态。 <br>
那么，现在该怎么办才好？ <br>
什么都不管，直接睡一觉，说不定也是一个解决方法。我醒来的时候即可能是过去，也可能是未来。不管怎么样，明天的演讲都跟我没有什么关系了。如果我在过去醒来倒没关系，因为波函数会再次发散。但是如果我在未来&mdash;&mdash;当然也包括明天&mdash;&mdash;醒来，那么波函数一直都坍缩于没有电子备忘本的状态，这个状态恐怕是非常糟糕的。 <br>
另一个解决方法，是今天晚上熬一个通宵，这样，明天进行演讲的就不是具有另一个意识的我，而是现在的我了。现在的我毕竟在此前制作电子备忘本的时候把讲稿内容看过一遍，虽说没有把全部内容都记住，不过应付演讲应该也足够了&mdash;&mdash;可是，到明天演讲之前，一点觉都不睡，可能吗？在我现在的状态下，哪怕是稍稍打一个瞌睡都是致命的。 <br>
<br>
看来，只有今天晚上重新制作电子备忘本这条路还算可行了。 <br>
我又一次开始制作电子备忘本了。本以为我已经做过一次，这一次再做的话应该相当简单了。但是在开始做的时候才发现，讲稿的内容和此前都已经不一样了，甚至连结构都变得完全不同。看起来，当我再一次回到过去后，发生变化的不仅仅是电子备忘本，其他的方面也都变了。我别无他法，只有硬着头皮做下去。可是我的进度相当缓慢，眼看快到天亮的时候，连电子备忘本的一半都还没有完成。然后，不知道在什么时候，我一个不小心，打了两三秒的瞌睡&mdash;&mdash;其实那时我并没有打算睡觉，只是眼睛刚刚闭了一下，大脑就跟着停了下来，实际上我连睡觉的感觉都没感觉到，但等我再次睁开眼睛的时候，自己就已经坐在公园的长凳上了。 <br>
<br>
明亮的阳光照耀着我。我往四周看了看，认出这里是大学附近的一个公园。公园里的人不是很多，几个大人带着自己的孩子坐在草地上。我看看手表，时间是六月二十日上午，这时候正是会议召开的时候，我应该是在会议召开的中途跑出来了。所以，演讲终于还是失败了。我甚至可以想像到当时的情况：我忐忑不安地开始了演讲，然后注意到了电子备忘本，于是就很安心地一直讲下去。但讲到一半的时候，电子备忘本突然没有反应了&mdash;&mdash;实际上不是电子备忘本没有反应，而是后面的内容本来就没有输入，这一下我受的打击甚至比从一开始就没有电子备忘本的时候更大，所以只有突然中断演讲，逃出会场，来到公园里。在这里的椅子上，我闭上眼睛，又一次睡着了。<br>
从那时候起，我每天晚上都要进入时间旅行之中。在六月二十日之后的日子醒来的时候，基本上会有两种状态，一种是演讲成功的状态，另一种是演讲失败的状态。 <br>
早上起床，发现时前一种状态的时候噢，我就会长长出一口气，一整天都浑身乏力，没有心思做任何事情。 <br>
到夜晚临近的时候，又开始害怕明天说不定是噩梦的世界，最后怀着不安和苦闷昏昏睡去。 <br>
发现是后一种状态的时候，我会立即在抽屉里翻找安眠药，运气好的话可以直接找到，运气不好找不到的话，我就直接去大学里那一些回来，拿的时候我还特意多拿一些，预备着给以后日子的我使用。拿到安眠药以后，我就直接就着威士忌把药吃下去，强迫自己进入昏睡状态，进入到新的时间旅行之中。 <br>
当然，前一种状态也好，后一种状态也好，只要不退回六月二十日之前，情况就不会发生变化。也就是说，如果演讲成功的话，一直都会是成功的状态；如果演讲失败的话，也一直都会是失败的状态。但是一旦退回到六月二十日以前，那么演讲成功与否又会重新变得不确定起来。 <br>
如果我在六月二十日之前醒来，就会立刻赶往大学，去看光盘里的内容。然后如果光盘里没有电子备忘本，或者电子备忘本的内容不完整，我就会慌忙开始制作电子备忘本。有时候我醒过来的时候离开六月二十日还有不少日子，连演讲稿都还没有准备，我就会从演讲稿开始制作。 <br>
有时候我花费了一整天的时间做演讲稿，做得头昏眼花，于是忍不住眯了一下眼睛，结果醒过来的时候就发现又回到前一天去了，这样前面一整天的努力也就等于完全白费了。可是即使有这种事情，我还是不得不一次又一次地做讲稿，不然演讲失败的可能性就会很大很大。 <br>
偶尔也会遇到恰好在演讲当天醒过来的事情。这时候会有三种情况：一种是光盘里有完整的电子备忘本，一种是有不完全的电子备忘本，还有就是完全没有电子备忘本。不过好在不管有没有电子备忘本，我都大致能够顺利把演讲进行下去，因为毕竟内容都记在我的脑子里了。可是也有演讲内容发生巨大变化的时候，或者我自己太过疲惫的时候，于是演讲也会随之而失败。在这种时候我就会中止演讲，直接冲回家去吃安眠药。 <br>
<br>
这种日子虽然过得很痛苦，不过，我还没有完全绝望。 <br>
还有最后一个希望。 <br>
这样的日子我过了几十天&mdash;&mdash;不，不是，应该是过了几百天之后，我终于再一次来到了五月十四日。 <br>
这一天，就是我的希望之日。 <br>
我断然拒绝了你的提案&mdash;&mdash;就是使用立体定向放射治疗仪破坏大脑的特定区域，把自己从时间的束缚中解放出来的提案。 <br>
&ldquo;为什么？&rdquo;你好像都不敢相信自己的耳朵，&ldquo;为什么你不同意？难道你不想救手儿奈了吗？&rdquo; <br>
&ldquo;这种做法太危险了。&rdquo;我走在夜间的小路上，尽力编造一个合理的理由。 <br>
&ldquo;危险不危险，不去试试看又怎么知道？&rdquo; <br>
&ldquo;如果试过而失败了，那你就算知道了危险又有什么用！&rdquo;我争辩道，&ldquo;你敢肯定自己的理论一定就没有缺陷吗？&rdquo; <br>
&ldquo;当然没有！&rdquo; <br>
&ldquo;你确信？那你告诉我，失去时间知觉是不是一定会导致在时间中逆行？&rdquo; <br>
&ldquo;……当然不一定是在时间中逆行。&rdquo;你略微沉思了一下说，&ldquo;不过，如果真的完全失去了自身对时间的控制能力，那么肯定会有时往前进，有时往后退。不管怎么说，总有机会回到手儿奈还活着的时候的。&rdquo; <br>
&ldquo;你的话说起来容易啊……好，退一万步说，你可以在时间中逆行，那么你又打算如何在倒流的时间中生存呢？&rdquo;我一点一点地诱使你去考虑时间逆行状态下的种种情况。这时候的你还不知道在对大脑动过手术之后不会产生单纯的时间逆行，所以我应该多描述一些恶心的场面，也许有可能会把你说服的，&ldquo;你打算在吃饭的时候从嘴里吐出已经嚼碎的食物，然后看着它们在碗里排成原来的样子吗？你打算在刷牙的时候把排水沟里的脏水吸到嘴里，然后看着泡沫重新变成牙膏，再把变干净的水吐回到杯子里去吗？你打算在上厕所的时候让粪便缩回到肛门里吗？你打算在感冒的时候从垃圾箱里拿出沾着鼻涕的纸擤鼻子吗？&rdquo;<br>
&ldquo;这又怎么样？你描述的虽然恶心，但那只不过是你日常生活的错觉罢了。如果真的在时间之中逆行的话，那什么恶心都不会感觉到了。&rdquo; <br>
&ldquo;那和别人的交流怎么办？所有的话都是倒着的，你能听懂吗？是不是打算把别人的话先录下来，然后再倒着放？&rdquo; <br>
&ldquo;这只不过是习惯问题，听多了就好了。就和学外语是一样的。&rdquo; <br>
&ldquo;问题没你想的那么简单。生活在正常时间中的你和生活在逆行时间中的你，差不多是根本没有办法对话的。 <br>
举个例子：一般情况下，对方先提问，然后你做回答；现在则是要你在对方还没有问出问题之前就把答案回答出来。这可能吗？&rdquo; <br>
你沉默了一会儿，牙齿轻轻咬着嘴唇，然后慢慢地说：&ldquo;应该是不可能的……不过，这也并不算什么大问题。&rdquo; <br>
&ldquo;为什么？&rdquo; <br>
&ldquo;和我说话的人，十有八九会认为我的精神不正常，不过这也是要在和我谈话之后了。但是对于我来说，他们的谈话之后其实是我的谈话之前，那么这对我又有什么影响呢？&rdquo; <br>
我自己开始的这个讨论，居然把我自己也弄得思维混乱了。讨论这种自己都没有经验的事情，真是讨论得越来越奇怪了。看来，还是说说自己的经验比较好。我这么想着，说：&ldquo;你认为在对大脑处理过之后还能保持时间的连续性吗？说不定你想错了呢？说不定你会突然跳到多少天前的过去，或者跳到多少天后的未来呢？也说不定你做了一半的事情突然就全都没有了，需要重新开始做呢？这些情况你都考虑过没有呢？&rdquo; <br>
<br>
你突然抬起头，盯着我的眼睛看了半晌。 <br>
&ldquo;我想，没有任何理由认为时间不是连续体。你为什么会那么说？&rdquo; <br>
糟糕，你起疑心了。 <br>
&ldquo;难道说，你认为时间不是连续体？&rdquo;你的声音里带着一点震惊，&ldquo;难道你已经知道时间不是连续体了？&rdquo; <br>
每一次我都不得不叹服于你敏锐的观察力。不过这一次我事先已经有了准备。你刚刚从地上捡起一块石头，我就已经从口袋里拿出沾了麻醉剂的手帕，捂在你的脸上，等你昏过去以后，我把你送到了医院。在医院里我对医生撒谎说，你不知道什么原因突然尖叫起来，然后就昏了过去。值班医生作了简单的检查之后把你送到了病房里。我知道，今天晚上十之八九是不会给你做药物反应检查的，而到了明天的话，麻醉药的痕迹早就检不出来了。 <br>
<br>
当然，你肯定会说些什么东西，不过医生大概都会认为你是神经错乱，不可能相信你的话。即便你声称自己没问题，早早出院的话，我也觉得自己还是有办法对付你的。 <br>
其实，我今天根本没有说服你的必要，直接把你当成疯子，不管你说什么都不理你就行了。只不过，我到底还是希望自己能够说服你，让你彻底死心罢了。我曾经为了能独占神的能力而把你当作自己的障碍，但是现在，我已经知道那种能力其实是只虚幻的，也知道自己能做和不能做的事，所以不想让你陷入同样的痛苦中。 <br>
但是，我最后还是没有成功。我说服不了你。这样也好。你这家伙要是再陷入时间混乱的境地，可就没有我的责任了。我已经尽力做了我能做的事情，没办法做得更多了。 <br>
我这么想着，努力为自己的行为找一个正当的理由。 <br>
无论如何，我已经避免了自己的脑部手术。今天晚上，我终于可以从几百次的轮回中解脱出来，安心地睡一个觉了。 <br>
我再一次醒来的时候，时间回到了一周之前。 <br>
我看到手表上的日期的时候，忍不住大声尖叫了起来。妻子听到声音，慌慌张张地跑上楼来。 <br>
&ldquo;你怎么了？&rdquo; <br>
&ldquo;今天是几号？今天到底是几号？求求你，不要跟我开玩笑了，不要再骗我说是五月七号了！&rdquo; <br>
&ldquo;哎呀，什么事情啊？开玩笑的是你吧？我从来没骗过你……不过，今天确实是五月七号啊。&rdquo; <br>
我又一次尖叫起来。 <br>
那么，即使不对大脑动手术也没有用了。我会永远，永远具有时间旅行的能力。我不知道自己为什么会变成现在这个样子。也许，大脑和精神是不同的东西。也许，并不是大脑在感知时间，而是精神在感知时间。破坏了大脑的一部分，就同时破坏了精神的一部分。当我回到处理之前的时候，精神可以重新寄存到未被破坏的大脑上，但是已经破坏了的精神却无法再复原了。这就好比录像带和录像带上所记录的内容的关系。如果有一盘录制着节目的录像带，其中恰好有一部分被损坏了，那么这一部分上录制的节目也就同样被破坏了。假如说现在有一个人想看这部分节目，但是看不到，他认为这是由于录像带被损坏了，所以就准备了一盘新的录像带，然后将节目从原来被损坏的录像带里复制出来，认为这样就可以看到完整的节目&mdash;&mdash;但是实际上，录像带被损坏的时候，节目的内容就已经无法再恢复完整了，即使换用新的完整的录像带，也不会有任何帮助了。我现在可能也是同样的情况……我以为自己的大脑恢复完整之后就可以摆脱噩梦一样的命运，但实际上我精神的损伤已经无法再修复了……当然，这种解释到底是否正确，我并不知道。我只是就我所能理解的东西，对我自己经历的这份苦难作一个解释罢了。<br>
无论如何，我继续在时间中跳跃着。 <br>
每一天，我不停地准备着自己的演讲，不停地吃安眠药，不停地乱发脾气，不停地对妻子怒吼，不停地在演讲中失败，不停地称病不去演讲，不停地哭泣，不停地在演讲中成功，不停地向神明祈求，不停地从最初准备开始新的一次轮回，不停地绝望下去。 <br>
然后，在我经过了几年的主观时间之后，更大跨度的时间跳跃开始了。 <br>
我起先的时间跳跃大体只是从几天到几个月的范围，但是几千次之后，跳跃的范围扩展到了几年到几十年的范围。然而最初开始大跳跃的时候，我还对此根本一无所知。 <br>
我睁开眼睛，发现自己回到了高中生的时代。一开始我还以为这是梦，可是随着时间一点一点过去，现实感越来越强烈，最后不得不相信这是事实了。我置身于过去的自己的房间里，桌上的参考书和习题集堆积如山，随便打开一本，一股熟悉的味道便扑面而来，以往那些苦涩而又难忘的日子都在一瞬间苏醒了过来。而且苏醒的不仅仅是我头脑中的日子，，整个现实也将我的人裹挟着一起回到了那个时刻。有那么一会儿，我想到我自己可以从未来地狱一样的岁月里解放出来，不仅沉浸在巨大的喜悦感中。然而接着我又想到这个时代也绝非幸福，自己的情绪便又低落下来。 <br>
<br>
我走出房间，去到餐厅里吃早饭。我下意识的期望着能够看到妻子的身影，但是迎面看见的却是正在读着报纸的父亲和一边看着电视一边准备早饭的母亲。对，就是我的已经过世的双亲。 <br>
那一刹那，我的心里并没有一点点对亲情的怀念，只有恐惧。巨大的，无边的恐惧。仅仅是与过世的人的目光相对，就已经是相当恐怖的事情了。 <br>
&ldquo;哎，丈夫，干嘛傻站在那边？&rdquo;父亲从报纸上抬起头来看着我说。 <br>
&ldquo;怎么了？&rdquo;母亲回过头来问。 <br>
&ldquo;啊，不知道，丈夫好像看到什么古怪的东西，脸上的表情很奇怪。&rdquo; <br>
&ldquo;丈夫，你怎么了？&rdquo; <br>
我抬起头，然后就感觉一阵天旋地转，忍不住伸手扶住了桌子。 <br>
&ldquo;怎么了？学习太累了？&rdquo; <br>
&mdash;&mdash;的确，如果意识回到了少年时代，我的父母确实应该是活着的。 <br>
&ldquo;学习虽然很重要，太过于用功了也不好，身体会搞坏的。学习得差不多就行了。&rdquo; <br>
&mdash;&mdash;在我的主观意识里，他们都已经死了很久了。 <br>
&ldquo;但是，丈夫今年要高考了，稍微加把劲也是应该的吧。&rdquo; <br>
&mdash;&mdash;只要变换了主观和客观的视角，死了的东西也可以活过来吗？ <br>
&ldquo;可是如果生病的话，就什么都谈不上了。&rdquo; <br>
&mdash;&mdash;我知道他们绝对，绝对已经死了。 <br>
&ldquo;一天不睡觉也不至于生病吧。&rdquo; <br>
&mdash;&mdash;父亲是在我二十岁的时候过世的，母亲是在我二十五岁的时候过世的。 <br>
&ldquo;就算不生病，太疲劳了也不好。&rdquo; <br>
&mdash;&mdash;在火葬场，我亲眼见到了他们的骨灰。 <br>
&ldquo;我在丈夫这个年纪的时候一天只睡四个小时，什么病都没有。&rdquo; <br>
&mdash;&mdash;他们的死亡就这么简单地被颠覆了吗？ <br>
&ldquo;丈夫的身体可不像你那时候那么结实。&rdquo; <br>
&mdash;&mdash;我一直都认为死亡是无可回避，无法取消的。 <br>
&ldquo;不管怎么说，坚持到一月份就结束了。&rdquo; <br>
&mdash;&mdash;死亡是不分善恶，超越善恶的。它是宇宙间绝对平等的法则，是一切理论的基础。 <br>
&ldquo;是啊，不过还有第二志愿呢，还要多一个星期。&rdquo; <br>
&mdash;&mdash;这个法则就在我眼前覆灭了。 <br>
&ldquo;只有拼命才行啊。&rdquo; <br>
&mdash;&mdash;只不过对大脑作了一点手术而已。 <br>
&ldquo;只是今年一年，坚持一下就过去了。&rdquo; <br>
&mdash;&mdash;颠覆死亡居然就是这么容易的事情。 <br>
&ldquo;所以就算有再大的困难也不能放弃。&rdquo; <br>
我再也忍受不了了，向门外飞奔而去。 <br>
&ldquo;喂，丈夫！&rdquo; <br>
我飞奔着跑出家门的时候，迎面正开来一辆大卡车，我刹不住脚，一下子撞了上去。 <br>
再一次睁开眼睛，时间又往回退了三天。 <br>
我根本没有为考试专门复习过。而且，我成功考入平成大学的事件也已经非实在化了。难道说我还要从现在开始专门为了考试再从头学习吗？可就算学习了又有什么意义？参加考试的我不一定就是具有学习意识的我。况且就算学好了，考试通过了又能如何？只要再一次返回过去，所有的事件都被重新非实在化。所以还不如全都不去学得好。 <br>
<br>
在我这么决定以后，我又有许多次跳回到了考试结果发布之后的日子。但是和考试合格的结果比起来，考试不合格的次数要远多得多。我想，之所以如此，还是因为我一点都没有学习的缘故吧。即使偶尔考试合格了，我也不再是平成大学医学部的教授。这就像建筑在考试那一点上的我的人生轨迹都完全变化了一样。确实，当我返回到过去的时候，那一点之后的日子应该都幻化成了无边无际的波函数的海洋，无数种非实在化的可能重新叠加在一起了。 <br>
<br>
啊，所有一切努力都是徒劳无益的，不敢怎么样的努力都不过是浪费而已。我就在这样的境况下，身心俱疲，放弃了一切希望。然后，又有了更大跨度的时间跳跃。 <br>
在那以后的事情没必要再细说了，无非都是那些无聊而漫长的故事罢了。我流浪于自身的各个时代中，而且情况愈来愈恶化。从婴儿到老年的整个人生阶段我都体验过了，甚至还有胎儿期的经历。啊，恐怖的胎儿期！在那个时期，我只能看见外面透进来的一点模模糊糊的光线，我的四周也时刻回荡着含混不清的声音。你能理解那样的痛苦吗？人们都喜欢说自己希望回归到胎儿的状态，可他们何曾真正理解胎儿期的恐怖与痛苦呢？可是从另一方面来说，人生之中又哪里有比胎儿期更好的时期呢？ <br>
<br>
我的双亲是资本家。这是因为在我出生前波函数重新发散，而在我出生以后波函数又因我的观察而探索到目前状态的缘故。 <br>
在这个新的人生中，我从来不知道客观上的昨天的事情&mdash;&mdash;对于其他人来说，这就是记忆障碍了，所以我很难找到一份稳定的工作，只能依靠变卖土地、股票、家具之类的东西勉强糊口。我一直担心什么时候这些东西都会被耗空。可是资产并不会跟着我一起跳跃，所以即使我担心也完全无能为力。幸好，虽然我每次醒过来的时候都会发现资产有所变化，但是终究还没有遇到资产全部耗光的悲惨局面。 <br>
<table class="wr" cellspacing="0" cellpadding="0" border="0">
    <tbody>
        <tr>
            <td class="gray14"><cc></cc>虽然不去工作也可以在社会上生存，但是我也不能把自己和其他人的联系完全切断。只是对于一个没有记忆的人来说，和他人交往实在是相当困难，所以我每天睡觉前必须要把一天的事情写到日记里去，以便让明天的我了解今天发生的事情，就像给明天的我写的书信一样。而当我早上醒来的时候，第一件事也必然是找到日记本，读一下昨天的我所写的内容，好确定今天自己该做的事情。不过，数十年的日记积累下来，那个记录实在是太庞大了，所以实际上我也只是读一读最近几个月的记载而已。尽管如此，每天读这些纪录也实在是相当累人。除此之外，每天要记录的事情也是要区分的；毕竟不可能吧每天发生的每一件事情都记下来。不过，即便我作了这样的努力，可在别人的眼里，我恐怕仍旧扮演不出正常人的样子。 <br>
            <br>
            不管怎么说，最难办的还是幼儿时代。幼儿会把每天眼睛里看到的东西不分重点地记录下来，所以每逢这个时候，我只能把前一天的记录读一遍，然后把原来的内容总结成很短的文字重新写下来，再把原来的扔掉。可是由于原先就缺乏重点，所以这样做常常会导致丢失相当多的重要信息，于是我的行动也就难免会变得和昨天不一致，而问题也就随之而来，特别是我的父母常常会为此而感到悲伤，甚至认为我的大脑有问题，所以我也曾经遇到过住进精神病医院的实在化状态。不过，算是不幸中的万幸吧，我还没有碰到过比这更糟糕的事情。 <br>
            <br>
            然而，我早已经厌倦了这种在时间中漂泊的日子了。我不知道为此自杀过多少回，不过最近已经不这么做了。 <br>
            最初的时候，我试过吃安眠药，也试过上吊自杀，可一旦意识消失，我就会清醒于另一个日子。后来我也试过卧轨，也试过直接枪击自己的头部，然而结果还是一样的。在我死亡的同时，意识的跳跃也就开始了。不过很显然，在那些我自杀了的情况下，我的意识从来不会跳跃到未来的日子里去。因为从我自杀的那刻开始，以后的人生都已经不存在了，当然也就只能往过去跳跃。而一旦我跳跃到过去，那么我的死亡也就再次成为非实在化的状态，我的人生也就再一次以波函数发散的状态非实在化地复活了。 <br>
            <br>
            就是这样。在我主观的意识当中，我就这么几百年、几千年、几万年地生存下去，但什么都不会残留下来，连无边无际的绝望都在枯萎，凋谢。 <br>
            对了，最近我一直在想着手儿奈的事情。回顾她从最开始的的一言一行，我总觉得她好像真的了解所有将要发生的事情一样。她到底是什么人？她为什么会知道所有的事情？也许，在我经历的如此漫长的时间里，我头脑中关于手儿奈的记忆一直都在悄悄地变化&mdash;&mdash;换句话说，是我无意识地调整着自己关于她的记忆&mdash;&mdash;以至于我会产生出错觉，认为她是无所不知的了吗？不，应该不是那样。因为我的主观意识是把手儿奈当作我的恋人一样记忆的，如果我会调整关于她的记忆，那也应该是向着美化她的方向调整。然而她的那种表现即使在今天的我看来，也是相当奇怪的，所以，应该不是我无意识调整的结果。那么手儿奈究竟是什么人呢？ <br>
            <br>
            我不知道。 <br>
            小竹田的话讲完了。 <br>
            我浑身都是冷汗，汗水浸湿了我的衬衫，黏黏地贴在背上，很难受。 <br>
            &ldquo;你说的这些东西，都是你写的科幻小说吧？或者应该说……是恐怖小说？&rdquo; <br>
            &ldquo;你确实没有必要相信我说的话。只不过是你要求我说出真实的故事，所以我就把真实的故事告诉了你。&rdquo; <br>
            &ldquo;如果你说的确实都是真实的故事，那么你今天算是真的遇到一个可以理解你故事的人了。&rdquo;我伸手指着小竹田。当然，我这么说并不意味着我相信了他的故事；而是说，我看得出来，他确实相信了他自己的这个故事。 <br>
            &ldquo;这种说法对我来说没有任何意义。当我睡了一觉再次醒来之后，又会处于另一个完全不同的时间和完全不同的地点。&rdquo;小竹田面无表情地说，&ldquo;在那个时间、那个地点里，你仍然对我是一无所知的。当然，我也可以把今天对你说的内容再对那时的你重说一遍。但那仍然是毫无意义的。结果不会有任何不同。&rdquo;</td>
        </tr>
    </tbody>
</table>
我整理了一下自己的思路。 <br>
&ldquo;唔，在你的主观世界里，情况确实应该是这样。但是我的主观世界明显和你的不同。我即使在一觉睡醒之后仍然会记得今天晚上发生的事情。所以，如果你能告诉我你的住址，我可以去你家里拜访你，这样说不定对你有所帮助。&rdquo; <br>
&ldquo;没有用的。我不可能从我的主观世界里逃脱。你只能帮助那个你的主观世界里的我，但对于我的主观世界中的我来说，什么作用也没有。&rdquo; <br>
这个男子应该不是在说谎，这一点从他的表情和话语里就可以推测出来。但是，没有说谎并不等于他说的就是事实。也许这个男子说的都是他自己臆造的东西。而如果这确实是他自己臆造出来的话，那我倒是有可能帮助他摆脱这种臆想状态。 <br>
&ldquo;有一个谜团，你一直都没有解开。&rdquo; <br>
&ldquo;当然。因为时间有限，我不可能把所有的谜团都解释清楚。而且有些东西我自己都没有弄明白。不过没关系，有什么谜团不妨问问看，我会尽力试着解释的。&rdquo; <br>
&ldquo;这个谜团就是，我和你两个人都接受了脑部的处理&mdash;&mdash;&rdquo; <br>
&ldquo;不错。&rdquo;小竹田回答道。 <br>
&ldquo;那么，我们两个人都具有了时间旅行的能力&mdash;&mdash;&rdquo; <br>
&ldquo;不错。&rdquo; <br>
&ldquo;你对时间旅行已经有过实际的体验，所以我也应当有过同样的体验。&rdquo;我继续说，&ldquo;但是，小竹田先生，你曾经退回到脑部处理之前的时间，这样一来，你和我的脑部处理事件也就重新非实在化了，于是下面的未来就有了四种可能性：两个人都接受处理的未来；只有我一个人接受处理的未来；只有你一个人接受处理的未来；我们两人都没有接受处理的未来。所有这些未来，都是以平等的非实在化的可能存在着的。&rdquo; <br>
<br>
&ldquo;是的。&rdquo; <br>
&ldquo;而你实际上经历的是第三种未来，也就是说，是只有你一个人接受处理的未来实在化了，而其它的未来也就在同时被消灭了。这样，我也就不再具有时间旅行的能力了。&rdquo; <br>
小竹田默然点头。 <br>
&ldquo;在这以后，你又曾经退回到了接受处理之前的时间去，于是你一个人接受处理的未来再一次非实在化了。 <br>
但是，你却依旧具有时间旅行的能力。为什么？&rdquo; <br>
&ldquo;这个问题我刚刚应该已经解释过了。&rdquo; <br>
&ldquo;不，我问的并不是你为什么会继续保持时间旅行的能力。我问的是，为什么我没能保持时间旅行的能力。 <br>
如果你可以进行时间旅行，那么我也应该可以才对。&rdquo; <br>
我觉得自己已经驳倒了对手，心里暗自得意起来。然而小竹田只是面无表情地反问道：&ldquo;血沼先生，你不能进行时间旅行的说法，是在和我撒谎么？&rdquo; <br>
我在心里自问自答：我能进行时间旅行吗？当然不可能！ <br>
&ldquo;当然没有。&rdquo; <br>
&ldquo;嗯，果然如此。其实，对于你的问题，有许多种可能的解释，只不过我也不知道哪个才是真实的答案。在这之中，所谓&lsquo;你其实具有时间旅行的能力，只是想我撒谎说你没有&rsquo;也是其中的一种可能。不过这个可能已经被你否定了。&rdquo; <br>
&ldquo;那么其它的解释呢？&rdquo; <br>
&ldquo;根据波函数坍缩时的状态考虑，&rdquo;小竹田摆出一副旁观者的样子，就事论事地说，&ldquo;在我的主观世界里，我的意识具有能够令波函数坍缩的力量，但它本身却独立于波函数。当我将我们两人都没有接受脑部处理的未来实在化的时候，我的意识依旧保持着处理过的状态，所以尽管这是一个新的实在化的世界，我却可以依旧保持时间旅行的能力。但在另一方面，你的意识只在你自己的主观世界里独立，所以当我回到未处理前的主观世界的时候，你的意识也就跟着返回到未处理前的状态，于是当新的未来实在化的时候，你的意识也就重新固定于未处理的状态了。&rdquo; <br>
<br>
&ldquo;如果这么解释的话，那么我前面的那个具有时间旅行能力的意识去了哪里？&rdquo; <br>
&ldquo;大概是被消灭了。&rdquo; <br>
&ldquo;我不喜欢这种说法……&rdquo;我自言自语地说，&ldquo;这种说法对现在生存在这个世界的我并没有什么损害，可听上去还是让我不寒而栗啊。&rdquo; <br>
&ldquo;还有其它的解释。比如说，我们可以认为，针对一种主观意识，就存在一个平行世界。这样考虑的话，具有时间旅行能力的你就不是被消灭，而是存在于另一个平行世界当中。当然，在那个世界里，你说不定也象我一样孤独。&rdquo;&nbsp;&nbsp;<br>
&ldquo;这也不是很美妙的场景吧？&rdquo; <br>
&ldquo;那么，血沼先生，还有这样的解释，&rdquo;小竹田微微停顿了一下，吸了一口气，&ldquo;也就是所谓&lsquo;你从来就不具有时间旅行的能力&rsquo;。&rdquo; <br>
我费了这么大的力气，终于让这个男子开始认识到自己的荒谬了吗？ <br>
&ldquo;换句话说，血沼先生你，&rdquo;小竹田指着我的脸，&ldquo;给我设了个圈套。&rdquo; <br>
&ldquo;什么意思？&rdquo; <br>
&ldquo;是这个意思：因为你很清楚大脑处理的结果，所以你只是假装接受了处理，而只有我的大脑才是真正被处理的。&rdquo; <br>
&ldquo;你怎么会这么想？&rdquo;我吃了一惊。 <br>
&ldquo;因为只有这个方法才可以救回手儿奈，但是一旦接受处理，人就会永远迷失在时间的漩涡中。你不想让自己承受这个后果，于是就选中我来做这个牺牲品。&rdquo; <br>
&ldquo;怎……怎么可能……&rdquo; <br>
&ldquo;一开始的时候你用自己编写的程序来对自己的大脑进行处理，很显然，作假是很容易的，&rdquo;小竹田紧盯着我的眼睛，&ldquo;所以只有我一个人接受了真正的处理。第二天，你又和我谈了话，知道我是从六月二十日回来的，所以你就一直等到了那一天，然后装出一副你也可以时间旅行的样子，好好地对我演了一出戏。&rdquo; <br>
&ldquo;……&rdquo; <br>
是这样的吗？我真是那么卑劣的人吗？ <br>
小竹田忽然轻笑起来。&ldquo;血沼先生，你不用自责。就算这些都是事实，我今天在这里也并没有责怪你的意思。 <br>
今天的你和当初的那个你根本就不是同一个人，所以对于我的这个解释，你不用太在意。况且，这个解释基本上也是不成立的。&rdquo; <br>
&ldquo;嗯？&rdquo; <br>
&ldquo;首先，如果真如我说的那样，那么你的演技也未免太好了。我在第一次跳跃的时候会跳到什么时间完全是随机的，而第二次的跳跃能回到接受处理的第二天也是相当偶然的事情。一般来说，在五月十五日我们又一次会面之前，我就应该经历了几百次时间跳跃了。在那种情况下，你要想表演得天衣无缝，根本就是不可能的事情。 <br>
另外，从你那种无比狂热的态度来看，只要是对手儿奈有帮助的事情，你就会不顾一切去做，根本不会去考虑自己的处境。会不会永远迷失在时间之中，对狂热的你来说又算得了什么？更何况，你本来就不太信任我，你一直认为我很可能会放弃努力，不去拯救手儿奈&mdash;&mdash;&rdquo;说到这里，小竹田微微顿了一下，然后才接下去说，&ldquo;无论如何，还有其它的解释，也许可以说，你仍旧具有时间旅行的能力。&rdquo; <br>
<br>
&ldquo;不，这是不可能的解释。&rdquo; <br>
&ldquo;为什么说不可能？&rdquo; <br>
&ldquo;你生活在一个不断变幻的现实之中&mdash;&mdash;这时你一直坚持的说法，&rdquo;我说道，&ldquo;对于具有了时间旅行能力的你来说，所谓&lsquo;实在&rsquo;之类的东西已经是不存在的了。但是，我的世界仍旧是实在的世界，和不断变幻的非实在没有一点关系，所以我显然并没有任何时间旅行的能力。&rdquo; <br>
&ldquo;原来你是这样想的呀。&rdquo;小竹田轻笑着，&ldquo;可是所谓的&lsquo;实在&rsquo;，到底是你所处的现实，还是仅仅是你头脑中的想像呢？&rdquo; <br>
这家伙说什么啊？我所处的现实分明就是确定无误的实体，从来也没有突然变化到我预料之外的地方…… <br>
等一等，真的是这样的吗？ <br>
&ldquo;怎么样，血沼先生？&rdquo;小竹田把双手抱在自己的头后面，&ldquo;首先要澄清一点：所谓&lsquo;时间旅行&rsquo;，其实并不是一种能力，而是缺乏某些能力。就我来说，是因为我丧失了&lsquo;时间的认知能力&rsquo;、&lsquo;时间的控制能力&rsquo;、&lsquo;阻止波函数再发散的能力&rsquo;，还有其它各种各样的能力，才会表现出具有时间旅行的能力。而对于你来说，十有八九你还具备着&lsquo;时间的认知能力&rsquo;和&lsquo;时间的控制能力&rsquo;&mdash;&mdash;之所以这么说，是因为看起来你并没有像我一样因为时间的顺序问题而发狂&mdash;&mdash;但是，你具备着&lsquo;阻止波函数再发散的能力&rsquo;吗？比方说，今天的这条街，真的是你昨天看到的样子吗？常去的店铺的位置真的没有变化吗？昨天的公司和今天的公司是同样的吗？自称是你朋友的人当中不会突然多出你根本不认识的陌生人吗？&rdquo; <br>
<br>
&ldquo;我不明白&mdash;&mdash;算了，我也不想弄明白了。&rdquo;我眼中的小竹田变得模糊起来，&ldquo;能让我问个问题吗？&rdquo; <br>
&ldquo;请问。&rdquo; <br>
&ldquo;你救回手儿奈了吗？&rdquo; <br>
&ldquo;这是个毫无意义的问题。&rdquo;小竹田平静地回答道，&ldquo;我和你，在那一天，在医院里，接受了对大脑的处理。 <br>
那个处理就是原因。手儿奈就因为这一原因才得以存在，也才得以知道所有的一切，所以你的问题是无意义的&mdash;&mdash;当然，我也是最近才想通这一点的。&rdquo; <br>
&ldquo;对不起，我不明白。&rdquo;我反驳说，&ldquo;这种说法怎么听都很古怪，根本就是自相矛盾。在你的故事里，是手儿奈的死导致了你我两人施行脑部的处理，所以手儿奈才是原因；而按照你现在的说法，分明是把因果关系弄颠倒了。&rdquo; <br>
&ldquo;客人，雨好像停了。&rdquo;店员的声音从门口传来。 <br>
好吧，我也该回去了。和这个古怪的男子说了这么半天的话，搞得心情都有点不好了&mdash;&mdash;啊，不过单纯作为谈话来说还是挺有趣的。至少能打发等雨停的时间。 <br>
&ldquo;血沼先生，我果然还是不该和你说这些话的，&rdquo;小竹田的声音听起来有些怪异，远远近近的，像是鬼魂发出来的一样，&ldquo;最终你还不能理解。在你的头脑里，一直都认为，在我们身上发生的事情，在手儿奈身上发生的事情，还有其它所有一切事情之间都存在着因果关系&mdash;&mdash;但这其实是毫无意义的。因果关系根本就是不存在的。 <br>
&ldquo;我们的头脑仅仅具有有限的理解力，而世界的复杂度却远远超出我们的能力之外，于是在面对纷繁多变的世界的时候，为了防止我们的理智在无限的复杂度之前崩溃，我们的头脑自动设置了安全装置&mdash;&mdash;这装置就是所谓的因果律。我们只有这样才能够理解世界，但我们所理解的世界却因此而只是真实世界反映在我们头脑中的幻象。可是无论如何，如果缺少了这种幻象，我们人类就无法生存下去。就算是我，虽然可以在时间中任意来去，但如果抛开时间的前后关系和因果联系，我也根本无法进行思考。除了这种限制之外，还有一重限制，那就是：我不可能从自己的人生之中逃离，我不可能以这个小竹田丈夫之外的视角去看待任何一件事情。这是我的个体对我理解世界所施加的另一重限制。 <br>
<br>
&ldquo;不过，我毕竟还是瞥见了那种超越因果关系的世界的真实面目。在那种世界里，个人已经不再局限于自己的个体中，而是一种跨越时间的存在&mdash;&mdash;当然，这也只是在我所能理解的范围内产生的感觉。无论如何，那个世界中，所有的事物都并列存在于时间之中。诞生也好，死亡也好，都是同时存在的，相互之间根本没有任何因果关系。举例来说，就好象你的身体占据着三维空间的一定体积那样，在那个世界里，你也占据着时间的一段。&rdquo; <br>
<br>
这家伙，到现在还在胡说八道。 <br>
&ldquo;确实是很有趣的谈话。不过雨既然停了，我也该回去了。我们一起走怎么样？&rdquo;我向小竹田说。 <br>
&ldquo;血沼先生，这就是你抱有的幻想的一个例子：&lsquo;因为我听到了一个故事，所以说故事的人必然存在于现实之……&rdquo; <br>
小竹田消失了。而且，不仅仅是人消失了，连他存在的痕迹都消失得干干净净了。小竹田面前桌子上的威士忌也消失了。仿佛我从来都只是一个人孤孤单单地坐在座位上。 <br>
我的视线决没有从小竹田的身上移开过。可是我却没有任何关于他消失的事件的记忆。小竹田与眼前的虚空之间找不到任何的关联。 <br>
一阵寒意袭上身体，只有头烫得像要烧起来一样。我仿佛感觉到小竹田的波函数正在穿越我的意识，并且在我身畔的时间与空间之中扩散。 <br>
向店里的人问一下看看吧。 <br>
&mdash;&mdash;刚刚和我说话的那个男子，你知道他去哪里了吗？ <br>
&mdash;&mdash;咦，客人，一直都是你一个人在喝酒啊。 <br>
如果带着这样的回答回家去，恐怕是不能安心的。当然，我也可以对这种回答一笑置之&mdash;&mdash;店员说不定也和那个叫小竹田的男子是一伙的，故意对我搞恶作剧&mdash;&mdash;我不敢再说话，沉默着走出了酒店。 <br>
天上一轮明月。 <br>
以后还是别再来这家酒店了。啊，我今天到底是怎么了，竟然和一个不认识的男子说了这么久。对了，我到底和他说了多长时间呢？ <br>
我要看时间的时候，才注意到手表不在了。 <br>
奇怪，早上从家里出来的时候应该是戴在手上的。是忘在公司了吗？应该不会，因为这种事情以前从来没有过。看起来自己是把手表丢在酒店里了，不过我可不想再回去找了。<br>
我一边迷惑着，一边下到地铁车站里。月台上有不少人，看起来都是趁着雨停从酒店里出来的人，不少都显得醉醺醺的。有些人似乎没意识到自己已经出了酒店，打算招呼并不存在的服务生继续上酒，还有些人甚至像是想要拿着幻想中的麦克风继续唱歌的样子。我焦躁不安起来，这倒不是因为月台的喧哗，而是因为我忍受不了对那些人的羡慕。那些家伙不明白自己的幸运啊！大概他们的一生中从来都不会碰上遇到自己不认识的好友的事。 <br>
<br>
但是我却碰上了。这可真是一件至死都忘不了的事情。不过，这件事情真的发生过吗？会不会是我喝醉之后的抑郁症作祟？对，我还是应该回到店里去找我的手表，就算找不到也没什么可怕的。说不定只是店员忽略了。说不定是丢在别的地方了。也说不定是被什么人偷偷拿走了。 <br>
不过，要是店员记不得我曾经去过酒店的事情呢？ <br>
&mdash;&mdash;店员不可能把每一个客人都记住吧。 <br>
就算是刚刚离开的客人也记不住吗？ <br>
&mdash;&mdash;可能本来就是记忆很差的家伙，也可能一下子想不起来了。 <br>
那么能不能把店里的所有店员都问问看呢？就算确实有个人记不住自己的事情的话，也不可能所有人都记不得吧。 <br>
不是自己接待的客人，不会多注意的。 <br>
&mdash;&mdash;如果酒店没有了呢？ <br>
往回家方向开的地铁进入了站台，我站在打开的地铁车厢门前，全身僵直，动弹不得。 <br>
地铁门关上了，把我一个人就这样遗弃在月台上。 <br>
不知道过了多久，我终于慢慢地回复了正常的呼吸。然后，我开始缓慢地向着通往地面的楼梯走去。 <br>
酒店真的会消失吗？其实，就算找不到，也不能说酒店消失了。因为我实在是个分不清方向的人，经常都会找不到想去的地方。 <br>
那么，如果，是我自己消失了呢？ <br>
我站住了。 <br>
我到底在想什么？我自己消失是什么意思？看起来，我到底还是醉得不轻了。是该赶快回家了。如果出站的话，又要重新买车票了。不回店里固然找不到手表，但回到店里也未必能找到吧。如果回去而有没找到的话，就等于经受手表和车票的双重损失了。可是，就这样回家的话，手表可就确实损失了。呀，这该是博弈论里的极小极大策略吧&mdash;&mdash;也就是预先推测出最坏的情况，然后按照利益最大化&mdash;&mdash;换句话说，就是损失最小化&mdash;&mdash;的方式来行事的一种策略。在目前的情况下，&ldquo;就这样回家&rdquo;的做法应该就是损失极小，利益极大的策略了。 <br>
<br>
我乘上了一下班地铁。车厢里许多人醉得都无法坐在座位上。这个时间总是这样，就好像是第三个上下班高峰一样。 <br>
在拥挤的人群中，我恍恍惚惚地想着。从建立自己的家庭以来，已经过去多少年了？ <br>
每一天，走着同样的路线去公司，走着同样的路线回家，从来都没有一点变化。当然如此。这样简单的世界怎么会突然变化呢！我究竟是怎么了，竟然会开始相信那个古怪男子的话？难道只是因为那个男子的话里带着阴森诡异的气息？ <br>
啊，已经到站了。不赶快回家的话，又要被老婆埋怨到头疼了。咦，为什么没有一个人下车？难道大家都在躲着我？我是非要在这里下车不可的。啊，终于下来了。自行车肯定被雨淋湿透了，很讨厌啊。又没有什么东西能把座垫擦一下，屁股肯定要挨冻了。这楼梯真是长啊。已经精疲力尽了。啊，终于看到出站口了。咦，弄错了？我不应该爱着一站下车的啊。我怎么会认为这是我平时下车的车站呢？到最后还是白白损失了车票钱。而且到底要到几点钟才会到家啊？ <br>
<br>
我下意识地抬起手看了看手表。 <br>
已经过了十二点。 <br>
突然之间，我惊起了鸡皮疙瘩。 <br>
怎么回事？我怎么会戴着手表？刚刚不是没有戴吗？难道那时候只是我的错觉？还是说，我在刚刚的什么时候已经去过店里把手表拿回来了？不可能，不可能，绝对不可能。真是怪事，怪事啊。好像有什么东西开始不对头了。从什么时候开始的？啊，对了。今天在店里的时候，我是和大家一起喝酒的。可是接下来，店里就只剩下我一个人了。 <br> <a href="http://hi.baidu.com/touchthememory/blog/item/c1d48b1194384578ca80c43c.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/touchthememory/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/touchthememory/blog/item/c1d48b1194384578ca80c43c.html#comment">查看评论</a>]]></description>
        <pubDate>2008-10-24  19:43</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[412858310]]></author>
		<guid>http://hi.baidu.com/touchthememory/blog/item/c1d48b1194384578ca80c43c.html</guid>
</item>

<item>
        <title><![CDATA[醉步男[3]]]></title>
        <link><![CDATA[http://hi.baidu.com/touchthememory/blog/item/c2fae800dc843817728b6536.html]]></link>
        <description><![CDATA[
		
		我学着前面你的样子，躺到了处理室里。刚刚把头用皮带固定好，你的声音就从扬声器里传了出来：&ldquo;怎么样？可以开始了吗？&rdquo; <br>
&ldquo;开始吧。&rdquo; <br>
一开始只有凉凉的感觉，然后渐渐变得麻痹起来。麻痹的感觉从我头脑的中心开始向四周扩散，慢慢地扩散到了整个头部，然后又向下蔓延到颈部、胸部、腹部、四肢，一直扩散到全身的每一个部位。这种麻痹的感觉就像水面上的巨大涟漪一样，一圈一圈地激荡开来。每一道涟漪经过的时候，全身的感觉都仿佛被同时调动起来了一样，一层层叠加在一起，冲击着我的神经，最后汇聚成一种无法形容的麻痹感。 <br>
<br>
我的眼前也闪烁着各种色彩的光芒&mdash;&mdash;不，那些光芒应该是从大脑的后部开始，逐渐向中间扩散的&mdash;&mdash;赤色、橙色、黄色、绿色、青色、蓝色、紫色，还有其它一切人类所能感觉到的光线全都汇聚在一起，构成让人几乎无法忍受的炫目光芒，无边无际地充斥在整个视野之中。而且它们并不是简单地混杂成一种颜色，相反地，我可以清晰地辨认出其中的每一种光芒。 <br>
<br>
此外，声音也充斥在我全身的每一个毛孔里。我甚至可以感觉到自己的皮肤也随着那些声音在颤动，而且那些声音仿佛要将我的皮肤撕破，直接从我身体里激荡出去一样。 <br>
还有各种各样的味觉，各种各样的嗅觉，各种各样的触觉，各种各样的内脏感觉，各种各样的情感感觉，全都汇聚在一起，犹如大海的波浪一样，一波一波地冲刷着我全身上下的每一个角落。我无法抵抗也无力抵抗这样的冲击，唯一能做的，只有像是完全没有感觉的木头人一样听任这一切感觉的摆布。 <br>
不知道过了多久，突然之间，那些庞杂纷繁的感觉一下子全都烟消云散了，仿佛我在一瞬间转移到了一处巨大的山谷，四周只剩下无穷的黑暗和无边的寂静。那种感觉就像在艳阳高照的夏天里突然闯进阴暗的房间，又像刚刚参加过摇滚音乐会后的低声耳语。简而言之，那就像一种失去了一切感觉的感觉一样。 <br>
再接着，幻觉出现了。但那不是一般意义上的幻觉。它不仅仅是听觉或视觉意义上的幻觉，而是包含了所有感觉的幻觉，就好像是我亲身体验着的感觉一样。 <br>
我是在夏日里捉知了的小学生。在离家很近的小山里，在密密的小树林间，偶尔也有巨大的树木生长着。山上有很多陡峭的断面，断面上露着黄黄的泥土。站在断面的边上往下看，在远远近近的树木间隙里，隐隐约约可以看见我家所在的那条街道。太阳虽然高高地挂在天上，树林里却凉风习习，清爽宜人。我的肩上斜挎着虫笼，从早上开始到现在，捉到的知了差不多已经把笼子给塞满了，可我还是不断地去捉知了，不断地把它们往笼子里塞。笼子里的知了们连身子都动不了，只能时不时发出一点吱吱声。我毫不理会，继续往里面塞着，直到笼子里发出一种古怪的声音，像是有什么东西碎掉了，笼子也被撑得鼓了起来，知了的体液飞溅了出来，站在我的T恤衫上。这时候我才注意到，笼子里有一个不是知了的东西。那是一只没有了头的麻雀。 <br>
<br>
我是缩在操场的一角远远躲着那个少女，却又用炽热的目光追随着她身影的中学生。那个少女胸前校服的飘带飞扬着，牢牢地攫住了我的心灵，让我忘却了其他女生的胸前也有着同样质地，同样颜色，同样形状的飘带。 <br>
那少女犹如初春绚丽的阳光一样，在操场上轻盈地跳跃着。我从没有和她说过话，是的，连做梦都不敢想要和她说话。忽然间，那个少女向我这里看过来，那一瞬间我们的目光碰到一起。虽然彼此隔着一个操场，但我清楚地知道，我和她的目光相遇了。然后我终于忍不住低下了头，试图避开她的目光，但我却感觉到她仍然在继续观察着我，她的视线贯穿了我的全身。接着那个少女不疾不徐地向我走来。我想逃，但逃走就等于我承认自己心虚，于是我只能定在原地，不知道如何是好。少女来到我的面前，微笑着问我：&ldquo;你在看我？&rdquo;我仰起脸，微微颔首。 <br>
<br>
于是少女又问：&ldquo;你喜欢我？&rdquo;我说不出话，只有轻轻点头。少女说：&ldquo;想和我接吻？&rdquo;我握紧拳头，再放开。 <br>
少女说：&ldquo;想和我做爱？&rdquo;我的身子僵住，动弹不得。少女接着说下去：&ldquo;但是，这些事情都是不可能的。我听不到你的声音，也看不到你的样子&mdash;&mdash;我完全察觉不到你的存在，因为，&rdquo;少女轻轻指着我，&ldquo;你是死亡躯体残存的灵魂哦。&rdquo; <br>
我是天真无邪地吮吸着奶瓶的婴孩。母亲在厨房里洗东西，我一个人睡在摇篮里。有一只老鼠从摇篮下面爬上来，它顺着布袄爬上我的奶瓶，牢牢盯住我的眼睛。&ldquo;可怜的孩子，&rdquo;老鼠说，&ldquo;我是老鼠，如果被人类发现了，我就没有活路了，所以我永远都要鬼鬼祟祟地生活。而你是人类的婴儿，自己还不能活动，你的生死此刻就掌握在我的手里。如果我杀了你，你的母亲一定会对我恨之入骨。但即使我不杀你，你的母亲也不会因此而感谢我。因此杀不杀你，对我都既没有好处，也没有损失，那么我杀不杀你呢？瞧，我只有二三十秒的时间做决定，因为你的母亲马上就要回来了。啊，真是可怜的孩子啊。&rdquo; <br>
<br>
我是面临高考，却在深夜里偷听广播的高中生。收音机里一直播放着毫无意义的音乐节目，节目内容大概也只有主持人自己会觉得有趣。怎么就没有一个有趣一点的节目呢？咦，不对，收音机里的声音怎么变了？是要换节目了吗？&ldquo;……好了，接下来有我们的听众嘉宾为大家主持。今天我们从来信的听众中选出的嘉宾主持是&mdash;&mdash;小竹田丈夫！&rdquo;咦？什么意思？我是嘉宾主持？是要打电话来给我吗？这么晚了还给我打电话，把家里人吵醒了怎么办？我是不是应该偷偷溜出去，找一个公用电话打给他们？可是，我不记得自己给他们寄过信，他们又怎么会选中我的？难道是朋友们的恶作剧，冒用了我的名字？&ldquo;今天是小竹田君第一次来到我们的直播间，那么，我们会听到什么呢？呵呵，肯定是很有趣的东西。&rdquo;收音机里在说什么啊？我明明在这里，为什么说我在直播间里呢？&ldquo;现在我们要为小竹田君解释一下&mdash;&mdash;特别是要为那一位正在自己家里收听着节目，却因为突然听到自己在直播间里主持节目而吓了一跳的小竹田君解释一下。小竹田君，你之所以既在自己家里，又在工作室里，原因其实是很简单的&mdash;&mdash;因为坐在我身边的这个小竹田君才是真正的小竹田君，而你只是虚无缥缈的幻影罢了。<br>
好，现在我们请坐在我们身边的这个真正的小竹田君为我们说一句话……&rdquo;我在听到自己的声音之前关掉了收音机。 <br>
下一个我是因为初次离开父母而尖叫哭闹的托儿所里的小孩。&ldquo;到底要哭到什么时候啊？&rdquo;保姆说，&ldquo;不能安静一点吗？&rdquo;我不停地大声哭。&ldquo;真是麻烦啊&mdash;&mdash;喏，小竹田，你快看哪是什么&mdash;&mdash;是小金鱼哦！&rdquo;保姆还很年轻，不太会哄孩子的样子，她把不停哭闹的我抱到房间的一角，那里放着一张桌子，桌子上有一个金鱼缸。她让我站到桌子上，&ldquo;喏，小金鱼很可爱吧。&rdquo;可是她的行动却让其它的孩子纷纷抱怨起来。于是这个自食其果的女孩只有丢下还在哭闹的我，急匆匆赶过去安慰那些孩子。她回来的时候，完全没有注意到金鱼的数目不对，却很惊讶地对我说：&ldquo;怎么回事，小竹田？你的嘴里怎么有血淌出来？&rdquo; <br>
<br>
然后，我是一边和手儿奈甜蜜地说着话，一边漫步在草地上的青年。啊，手儿奈！她沐浴在和煦的春风里，如同美丽的精灵一样陪伴在我的身边。我禁不住说：&ldquo;手儿奈，你是多么可爱啊。&rdquo;手儿奈微笑着，她的笑靥比四下里怒放的樱花还要美丽。&ldquo;可是，你不是盼着我死么？&rdquo;&ldquo;你在乱说什么呀？！我怎么可能盼着你死呢？&rdquo; <br>
&ldquo;真的？那，难道是你放弃了？&rdquo;&ldquo;什么放弃了？我放弃什么了？&rdquo;&ldquo;我的命啊。&rdquo;&ldquo;你怎么能这么指责我呢？ <br>
到现在为止事故还没有发生，你不能因为你预见的事故责备我。只有在事故确实发生之后，你才能指责我放弃了你。在事故发生前就认定责任的做法从道理上讲是站不住脚的。假如未来人们可以预测杀人案件，于是就在案件发生之前将罪犯处决&mdash;&mdash;实际上是在对没有犯下死罪的人实施死刑，这怎么可以呢？所以，请你不要用还没有发生的事来责备我。&rdquo;&ldquo;你在说什么呀？什么事故啊？&rdquo;我突然醒悟过来，&ldquo;你到底是谁？&rdquo;少女回答：&ldquo;我是生下来就具有奇异命运的人。我是使两个男子的人生因我而疯狂的人。波函数坍缩的时候&mdash;&mdash;我是触摸气味的人，我是观察声音的人，我是品尝颜色的人，我是聆听味道的人，我是嗅取形状的人。我是古代诗歌中的女主人公③。 <br>
<br>
波函数发散的时候&mdash;&mdash;&rdquo;少女的瞳孔闪烁着绿色的光芒，&ldquo;我是手儿奈。&rdquo; <br>
所有这些体验，分不清是我大脑中本来的记忆，还是将记忆组合而生的幻觉。每一个画面都好象是我亲身经历的一样，却又在一瞬间突然切入到下一个画面。我在那些虚幻的，由我大脑创造出的世界里没有一点自由，只能如同大海里的小舟，漂浮在无可计数的记忆断片里。唯一支撑我坚持下去的东西，只有我还残存的一点意识，那意识若隐若现，却总在我将要迷失的时候提醒着我：我是在立体定向放射治疗仪的处理室里，所有这一切幻觉终究会有一个尽头&mdash;&mdash;然而尽头却迟迟没有到来。我想睡去，却谁不着；我想转身，却转不动。最后我终于放弃了一切努力，专心等待着死亡，然而等待了比一个人所能经历的一生长出数十倍、数百倍的时间后，我仍然没有等到死亡。我终于明白，死亡也已经是我无法做到的事情了。我心中的时钟已经停止了。 <br>
<br>
不知道过了多久，我发现自己横躺在黑暗之中。有那么一段时间，我判断不出自己是活着还是死了，然后处理室的门被打开，光线照射进来，于是我知道自己还活在世上。但即使知道了这一点，我也没有任何欣喜的感觉。 <br>
&ldquo;结束了？&rdquo;你问我，脸上带着阴郁的表情。 <br>
&ldquo;啊，太恐怖了。&rdquo; <br>
&ldquo;我那时候也很恐怖。&rdquo; <br>
&ldquo;可你只在里面待了三十分钟！&rdquo;我恨恨地说。 <br>
&ldquo;你不是也只待了三十分钟吗？&rdquo; <br>
我连看手表的力气都没有了。 <br>
&ldquo;为什么失败了？&rdquo;我擦去眼角的泪水。 <br>
&ldquo;不知道，我的操作应该是准确无误的。&rdquo; <br>
&ldquo;可是时间一直都在朝着未来的方向前进着啊！我刚刚除了经历了一次人生最大的休克外，也没有发生任何异常的情况啊。&rdquo; <br>
你闭上眼睛，默默地思考了一会儿。 <br>
&ldquo;有一个原因值得考虑。&rdquo; <br>
&ldquo;什么原因？&rdquo; <br>
&ldquo;我们破坏的那个区域确实是感知时间的器官。&rdquo; <br>
&ldquo;这个你已经说过了。&rdquo; <br>
&ldquo;就像半规管是感知重力的器官一样。&rdquo; <br>
&ldquo;这个你也说过了。&rdquo; <br>
&ldquo;但即使没有半规管，人还是能够站立着。&rdquo; <br>
&ldquo;……不对，你刚刚说……&rdquo; <br>
&ldquo;虽然不能直接感知重力，但还是可以利用间接的方法感知重力。一般来说，有两种方法可以代替半规管的作用：一种是利用我们的视觉，另一种&mdash;&mdash;在我们闭上眼睛的时候&mdash;&mdash;则可以利用我们对手脚的固有感觉来判断。通过这种方法，大脑就可以推测出重力的方向，从而保持我们身体的直立了。说不定我们目前也是类似的情况。&rdquo; <br>
&ldquo;你的意思是？&rdquo; <br>
&ldquo;我们既然破坏了那个感知时间的区域，那么就应该不能直接感觉时间的流变了。但是，我们身体中的其它感觉都还残留着。比如说，&rdquo;你拿起一支圆珠笔，然后放开手，于是笔掉在床上，&ldquo;我们可以利用半规管感知重力的方向，但也同样可以利用物体的下落来感知。同样，在我们主观还没意识到的情况下，大脑也会自动调用所有的感觉来判断时间流变的方向。你看好了&mdash;&mdash;&rdquo; <br>
<br>
你拿起圆珠笔，用力扔出去。圆珠笔撞到墙壁上，碎裂开来。 <br>
&ldquo;圆珠笔碎了。但是，碎掉的圆珠笔不会自动复原。我们具有的这种常识非常讨厌，&rdquo;你的泪水溢出了眼眶，&ldquo;如果退回到没有任何常识的婴儿状态，时间逆行一定就是很简单的事情。可讽刺的是，只有实现了时间逆行，才能退回到婴儿状态。&rdquo; <br>
&ldquo;那么现在还有什么办法吗？&rdquo; <br>
&ldquo;没有。&rdquo;你抬起头看着天花板，两行泪水从你的脸颊上淌了下来。 <br>
再不能做什么了。于是我回了自己的家，你还是去了我的研究室。 <br>
回到家里，妻子看见我恍恍惚惚的样子很担心。我推开她，抱起威士忌酒瓶发疯了一样地猛灌，然后很快就昏睡了过去。 <br>
第二天早上我醒过来的时候，发现自己已经睡在卧室的床上了。可是，似乎有一点不大对劲的感觉。房间里的样子和昨天似乎有一点微妙的差异，却也说不出到底哪里有差异。就好像在生活了几个月之后，总是有些小物件的位置被自然挪动了的感觉一样。 <br>
这肯定是昨天酒喝得太多了。我这么想着，往厨房走去。 <br>
先起床的妻子正在准备早餐。 <br>
&ldquo;我昨天是不是酒喝得太多了？&rdquo; <br>
&ldquo;呃？&rdquo;妻子停下来，转身看着我，&ldquo;你弄错了吧？&rdquo; <br>
&ldquo;弄错了？&rdquo; <br>
&ldquo;是啊。你昨天晚上只是练习了一下今天会议的纪念演讲就休息了。&rdquo; <br>
&ldquo;会议？今天？&rdquo; <br>
今天要举行会议吗？ <br>
我匆匆走到书房里去看自己的记事本。 <br>
今天是五月十五日，没有任何会议。难道我记错日子了？可是前后一个星期都没有任何会议的日程。肯定是妻子弄错了。 <br>
我又回到厨房。 <br>
&ldquo;是你弄错了，今天没有会议哟。&rdquo; <br>
&ldquo;不可能的吧。你告诉我这件事情的时候非常兴奋，一直在说&lsquo;这次会议上我是第一个演讲，这是很大的荣誉啊！&rsquo;&rdquo; <br>
&ldquo;我说了是五月十五日吗？&rdquo; <br>
&ldquo;没有……五月？&rdquo;妻子皱起眉头，&ldquo;你在说什么呀？今天是六月二十日啊。&rdquo; <br>
我一听到这句话，突然站不住了，一下滑倒在椅子上。然后，我又抬起头，努力对妻子做出微笑的表情。 <br>
&ldquo;啊，好像有点太累了。&rdquo; <br>
&ldquo;没问题吗？要不然，今天的会议请假别去了？&rdquo; <br>
六月二十日的回忆我还是记得的。那是我所在大学的四十周年纪念会议，我在会议上要做开幕演讲。显然，请假不去是不可能的。 <br>
&ldquo;没关系，到休息日的时候好好休息一下就行了。嗯……帮我把电视机开一下吧。&rdquo; <br>
我在电视节目上确认了今天的日期。没错，时间已经过去一个多月了。 <br>
我匆匆吃完早饭，向大学走去。 <br>
教授办公室的样子也发生了少许变化，这也证明过去不少日子了。到底发生了什么？为什么过去这一个月的记忆都没有了？从妻子的样子看，过去的这一个月里应该没有发生什么异常的事情……就是单纯地丢失记忆了吗？或者，我身上患有某种很罕见的多重人格的精神疾病？ <br>
走在路上的时候，我忽然想起了你对我脑部进行的处理，然后我又想起进行处理的立体定向放射治疗仪是我借用的，也许有人发现你也使用了那个设备。真要那样的话就糟糕了，说不定我教授的地位就保不住了。 <br>
啊，当时的我还不知道，马上我就不必再考虑地位一类的问题了。 <br>
&ldquo;教授，会议时间就要到了，可以来大礼堂了吗？&rdquo;对讲机里传来秘书的声音，&ldquo;演讲的光盘已经在礼堂的电脑里准备好了。&rdquo; <br>
我踏着绝望的步子走进大礼堂。礼堂里黑压压地坐了好几百人。 <br>
&ldquo;小竹田教授来了，请大家鼓掌欢迎。&rdquo;会议主席向大家介绍道。 <br>
我在大家的掌声中走向讲台。那种感觉就像走在太空中一样，轻飘飘的，又好像是我的灵魂的一部分离开了躯体，漂浮在半空观察着剩下的那一部分一样。 <br>
所有这些人好像都不知道我丢失了一个月的记忆。这一个月里发生了什么事情呢？我的话里涉及到最近的事情无疑是很危险的。到昨天为止，我表现的一切都还正常吗？一个月前的后遗症只在今天突然发作了？还是说，在过去的一个月里常常发作？ <br>
&ldquo;大家好。&rdquo;我站在讲台上开始了演讲。不知道是不是麦克风没有调整好，音响里发出巨大的啸叫声。我等这些噪音停止之后，才重新开始自己的话。 <br>
&ldquo;今天，我们在这里迎来了我们大学的四十周年校庆纪念日。&rdquo;我突然想到，也学我丢失了一年以上的记忆，而不是仅仅一个月。如果是这样的话，在座的人们可能会有各种各样的反应吧。我停住话头，会场里安静下来。还好，下面没有什么异常的反应。 <br>
&ldquo;在这个纪念大会上，我有幸受邀进行演讲，这是非常大的荣誉。当然我也很清楚，并不是因为我的工作，而只是因为我的年纪才得到了这样的荣誉……&rdquo; <br>
台下传来了轻轻的笑声。一般而言，在这样的会议上，不管开什么样的玩笑，台下都不会哄堂大笑的，所以现在尽管只有轻轻的笑声，我也感觉很满意了。 <br>
那么，接下来说什么好呢？尽管我可以放慢了自己的语速，但要想纯粹只依靠临场发挥就完成一次如此重要练习时候的演讲根本是不可能做到的事情。至少此前必须要做过一些准备才行&mdash;&mdash;对了，妻子不是也说我昨天在练习吗？研究室的其他同事应该也听过我的练习吧？如果我现在说的内容和的内容不一致，他们会不会觉得很奇怪？等等，等等，刚刚秘书说电脑里有光盘的&mdash;&mdash;&ldquo;玩笑话就不多说了，现在让我们进入正题。&rdquo; <br>
<br>
我点了一下屏幕上的&ldquo;开始&rdquo;按钮，画面上立刻闪现出几行大字。 <br>
大学四十周年庆建言 <br>
&mdash;&mdash;面向未来的展望 <br>
平成大学医学部 <br>
小竹田丈夫 <br>
我身边的巨大屏幕上显示出同样的内容。要是看到画面能让我想起些什么就好了。我沉默着，进入到下一个画面，那上面显示出一幅图画，画的是一个地球，上面写着&ldquo;医疗全球化&rdquo;几个字。我什么也没想起来。再进到下一个画面，是少年追着一条狗的动画，但是没有一点文字说明。我有些着急了，却还是不知道该说什么。会场也开始有些骚动。为什么每一个画面上都没有一点提示性的文字呢？我翻过一个又一个画面，大屏幕上的图案出现又消失，可是始终没有找到一幅可以让我好好说一点东西的画面。我只能三言两语胡乱介绍一下画面的内容，然后匆匆翻到下一页。很快就到了最后的画面，在这个画面上，有一些总结性的文字。我照着那上面的内容读了一遍，然后对台下鞠了一个躬，就这么走下了讲台。 <br>
<br>
预订一个半小时的演讲，我只在台上站了十分钟。 <br>
&ldquo;唔……那个……设备出了一点问题，纪念演讲提早了一点结束……&rdquo; <br>
会议主席坐不住了，站起来向大家试着解释。 <br>
我没有走回准备席，而是直接向场外走去。虽然看不见，我还是可以感觉到会场里众人的目光集中在我背上。 <br>
我回到教授研究室里。坐在办公桌前，我的目光越过山一样堆积着的文档望向窗外。 <br>
全都结束了吗？如果我承认自己的了奇怪的疾病，是否可以得到原谅呢？可是，如果承认有疾病，我还能继续做我的教授吗？我到底该怎么办？过去是否有过同样的病例？啊，这个疾病的原因我自己很清楚，一定是接受脑部处理导致的。那么，去调查接受过同样手术的患者应该会有帮助吧，可是我并不知道有谁接受过这种手术……除了一个人…… <br>
我抓住研究室里的学生，询问你在什么地方。可是不管哪个学生都一个多月没看见过你了。只有一个学生说，今天早上好象看见你在学生食堂周围闲逛。 <br>
我慌忙向食堂跑去，然后在垃圾桶之间看见了抱着膝盖坐在那里的你。 <br>
&ldquo;喂，血沼，你真的在吃别人的剩饭啊。&rdquo;我抓住你的手腕，把你拉起来，&ldquo;起来，我要找你帮忙。&rdquo; <br>
你面无表情地看着我，然后突然没头没脑地问了一句：&ldquo;你在时间里跳跃了？&rdquo; <br>
&ldquo;什么？&rdquo; <br>
&ldquo;不明白也好，那就和你没关系了。&rdquo;你又退回到自己独有的世界里。 <br>
&ldquo;你起来，跟你说正经事！&rdquo;我用力摇晃着你的肩膀，&ldquo;我在接受大脑处理之后，一觉醒来就到了今天。&rdquo; <br>
你一听到这话，突然就跳了起来，满是污垢的脸上绽放出笑容。 <br>
&ldquo;原来你果然跳跃了！不过好像才第一次吧……那，今天是几号？&rdquo; <br>
&ldquo;好像是六月二十号。&rdquo; <br>
&ldquo;唔，差不多刚好一个月。&rdquo;你沉思了一会儿，&ldquo;你说要找我帮忙，可我自己也有麻烦啊。&rdquo; <br>
&ldquo;难道你也遇上同样的情况了？&rdquo; <br>
&ldquo;是啊，你才刚刚是第一次遇上，我已经遇上几百次了。&rdquo; <br>
&ldquo;几百次？几百次什么？&rdquo;我越来越糊涂了，&ldquo;记忆丢失了几百次？就在一个月里？&rdquo; <br>
&ldquo;记忆丢失？啊，你还在那么想啊。&rdquo; <br>
&ldquo;怎么，这难道不是记忆丢失？你说过如果对大脑进行手术就可以返回过去，可实际上并没有回到过去，反而引起记忆障碍了。&rdquo; <br>
&ldquo;不是记忆障碍，是你来到未来了。&rdquo; <br>
&ldquo;什么？&rdquo; <br>
&ldquo;你从五月十五日直接来到了六月二十日：你经历时间旅行了。&rdquo; <br>
我笑了起来。 <br>
&ldquo;我确实丢失了一个月的记忆，所以看起来是我直接从五月十五日跳到了六月二十日，但这明显是错觉。因为我们本来是要回到过去的，怎么可能来到未来呢？&rdquo; <br>
&ldquo;原因我不知道。&rdquo;你平静地说，&ldquo;我本来以为，我们会以正常的、向未来前进的速度很平稳地向过去移动。 <br>
可是就和你经历的一样，我只要一睡着就会在时间里飞跃，而且我自己完全无法选择飞跃的目的点。看起来，还是我了解的理论太少，一直都把时间当成连续体了。&rdquo; <br>
&ldquo;时间本来就是连续体。&rdquo; <br>
&ldquo;唔，看上去时间好像确实是连续的，但实际情况并非如此。时间不是连续体。五月十四日既没有和六月二十日联系在一起，也没有和五月十五日联系在一起……或者干脆这么说：五月十五日下午一点零分零秒和五月十五日下午一点零分一秒实际上都没有联系在一起，只不过是我们的大脑把它们联系在一起罢了。这也就是说，时间是连续体的感觉，完全是我们大脑的错觉而已。&rdquo; <br>
<br>
&ldquo;你说的完全没有一点根据。就算你说的是真的，可是我们的大脑有什么必要做出这种错觉呢？&rdquo;我反问道。 <br>
&ldquo;有什么必要呢？必要性难道你还没有体会到吗？至于说原因&mdash;&mdash;时间本来只是一个个独立的点的集合，但是对于人类来说，如果不能把这些独立的点按顺序组合起来，对我们周围世界的认识也就无从说起了&mdash;&mdash;所以，我们的大脑才会发展出给时间点排序的能力。当然，对于你我来说，大脑的这一机能已经被破坏了。&rdquo; <br>
&ldquo;你说的肯定不对。现在你我感觉到的时间不还是流动得很正常吗？&rdquo; <br>
&ldquo;这个问题我以前应该对你解释过，这是因为我们大脑在自动使用其它部分代替原先的机能啊。但是当我们睡着的时候，大脑的意识活动减弱了，代替部分不再发挥作用，于是我们就会在时间点中跳跃了。&rdquo; <br>
&ldquo;……我还是不信。这么说吧，如果我真的通过时间旅行从五月十四日跳到了六月二十日，那么不仅是我个人的记忆不存在，对于其他人而言我也是不存在的，因为从五月十六日到六月十九日的这段时间，我根本就没有存在于这个世界上啊。&rdquo; <br>
&ldquo;小竹田，你还是没有弄明白。这虽然是时间旅行，但并不是说你的肉体被送到未来了。实际上，被送到未来的只有你的意识而已。&rdquo; <br>
&ldquo;这么解释也说不通啊。如果说只有我的意识跳到了六月二十日，而身体却没有跟过来，那么从五月十五日到六月十九日这段时间里，难道我的身体一直都处于神智不清的状态吗？但是我今天遇到那么多人，没有一个这么说啊。&rdquo;<br>
&ldquo;你果然不能理解。&rdquo;你轻轻地笑起来，&ldquo;当然，其实我也没有完全理解。这么说吧，首先，时间是流动的，至于时间为什么流动，原因我们不清楚，仅仅是把它作为一种客观现象接受了，而且给它标记上一个个的日期并加以排序：五月十四日之后是五月十五日；五月十五日之后是五月十六日，依此类推。现在，我们又有一个意识的流动，这种流动和时间的流动本来是独立的。五月十四日的意识和五月十五日的意识一开始并没有联系在一起，只有经过我们大脑当中时间感知器官的确认，发现在时间上存在着五月十四日到五月十五日的流动，这才把五月十四日的意识和五月十五日的意识结合到一起&mdash;&mdash;这是正常人的情况。但是对于你来说，大脑中的时间感知器官已经被破坏了，于是你的大脑就不知道该把五月十四日的意识结合到哪一天去，只能随机挑选一个日子结合，这就是为什么你的意识会从五月十四日一下子跳到六月二十日去。换句话说，你从五月十五日到六月十九日的意识都是存在的，只不过没有把它们同你五月十四日的意识联系起来罢了。&rdquo; <br>
<br>
&ldquo;单纯从逻辑上看，你的这种解释也算合理。但是作为一种理论，他缺乏足够的证据支持。我同样可以解释说，我身上发生的事情都是因为我的记忆丢失的缘故，因为你说的那个器官并不是所谓时间感知器官，而实际上是对记忆有着重要作用的器官&mdash;&mdash;这种说法不是更简单，也更容易理解吗？&rdquo; <br>
你大笑起来，笑得完全停不下来，但眼里却有泪水一滴滴地滑落。 <br>
&ldquo;如果你认为这种说法容易理解，你就这么想吧……我最初也和你想的一样，但是，但是……&rdquo; <br>
&ldquo;血沼，一起去接受检查吧。&rdquo; <br>
&ldquo;检查……我已经检查过很多次了。有几次还是你给我做的检查……当然是具有别的意识的你给我做的检查。 <br>
反正是没有用的，完全没有用。我已经放弃了。&rdquo; <br>
&ldquo;怎么能放弃？应该还是有希望的。&rdquo;我说。 <br>
&ldquo;希望？希望永远都有……对你也好，对我也好……我还剩下最后一句话要告诉你：以后，恐怕你我再也不能相会了。但这里的&lsquo;你&rsquo;并不是指&lsquo;小竹田丈夫&rsquo;，而是指和今天站在我面前的这个&lsquo;小竹田丈夫&rsquo;具有同样意识的&lsquo;小竹田丈夫&rsquo;。你明白吗？&rdquo; <br>
&ldquo;完全不明白。&rdquo; <br>
&ldquo;你说不定还有几次和我见面的机会……&rdquo;你说。 <br>
&ldquo;唔？你刚刚是不是说你没有机会再和我见面了？&rdquo; <br>
&ldquo;是啊，我却是那么说过。&rdquo; <br>
&ldquo;那你就自相矛盾了吧。&rdquo; <br>
&ldquo;没有，一点都不矛盾……你自己好好想想吧……&rdquo; <br>
你这么说着，慢慢转过身子，向远处走去。我呆呆地望着你的背影，不知道是追好还是不追的好。我只觉得，你好像已经强行把我拉入了一个未知的世界当中。 <br>
我呆立了半晌，知道你的背影消失。看来，再留在学校也没有任何意义，于是我回家了。 <br>
&ldquo;啊呀，你不是说今天会议结束之后还有一个座谈会的吗？怎么回来这么早啊？&rdquo;妻子看到我，惊讶地问。 <br>
我没有回答，直接进了书房。我在桌子前面坐下来，忍不住又想起今天演讲的事情，想着想着，也就渐渐地睡着了。 <br>
当我醒来的时候，发现自己又躺在床上了。一开始我还换了一个舒服的姿势躺着想：奇怪，自己什么时候睡到床上的呢？然后我就想起了睡着以前的事情，立刻从床上跳起来，回头去看看墙上挂着的壁钟，钟的指针指向七点，从窗外的样子看起来，应该是上午七点。 <br>
我下了床，来到厨房，提心吊胆地向妻子问：&ldquo;喂，我昨天什么时候睡的？是不是在工作的时候不知不觉就睡着了？连澡都没有洗？&rdquo; <br>
&ldquo;工作？不会吧？你昨天喝了好多酒。难道你后来还工作了吗？&rdquo; <br>
又跳了一个月吗？我心里升起一股寒意。照这种跳法，要不了多久我的寿命就该跳到头了。不，首先我还是要确定今天到底是哪一天。我看见儿子正在读的《恐怖新闻》。 <br>
&ldquo;啊，是这样啊。我昨天酒喝得太多了，记忆混乱了。那么，今天是几号了？&rdquo; <br>
&ldquo;呃？开玩笑的吧？酒喝得再多也不可能忘记日期吧？&rdquo; <br>
&ldquo;不是开玩笑，是真的忘了。毕竟我的年纪已经大了。&rdquo;<br>
妻子的脸上浮现出惊讶的表情，不过还是回答了我。 <br>
&ldquo;今天是五月十五日。&rdquo; <br>
五月十五日？我不敢相信，于是打开了电视机。电视上确实显示着五月十五日。这到底是怎么回事？我头脑迅速转动着，设想出若干解释。 <br>
第一，我从五月十五日通过时间旅行来到了六月二十日，然后又从六月二十日再次进行时间旅行回到五月十五日。 <br>
我最初想到的就是这个解释。但是，这种解释完全颠覆了我数十年来积累的人生经验&mdash;&mdash;不，它是完全颠覆了数千年来人类积累的全部经验。对于我而言，除非一切其他的解释都被否定了，否则我是无论如何也不会接受这样一种解释的。 <br>
第二，所有人都串通起来对我搞恶作剧。 <br>
你、我的妻子、研究室的学生、学会的会员，全都串通好了欺骗我&mdash;&mdash;可是，这种想法太古怪了吧？这么多人有什么理由要串通起来骗我呢？而且，难道连电视台都在骗我吗？ <br>
第三，六月二十日的事情只是一个梦。 <br>
从五月十四日晚上到五月十五日早晨，我做了一个梦，我是在梦里来到了六月二十日&mdash;&mdash;虽然经历的事情作为梦来说未免太逼真了一点，但这却是我唯一能接受的解释了。 <br>
当然，不管实际情况是哪种，我还是去了学校。 <br>
在研究室里，我看见你坐在桌子前面正写着什么东西。 <br>
&ldquo;血沼，一大清早的你在干什么呢？&rdquo; <br>
&ldquo;我在研究昨天失败的原因，看看能不能找到解决的办法。&rdquo; <br>
&ldquo;唔……&rdquo;我想起你昨天也接受了同样的手术，&ldquo;那个，你今天早上起来的时候有没有发现什么变化？&rdquo; <br>
是了，如果你回答我说没有任何变化，那我就可以肯定自己经历的那些都是在做梦了。 <br>
&ldquo;起来的时候？呀，没哟什么特别的啊&mdash;&mdash;&rdquo; <br>
你的回答让我松了一口气，但是，你又接着往下说。 <br>
&ldquo;反正我昨天一天都没睡……&rdquo;你注意到我的脸色阴沉了下来，&ldquo;咦？怎么突然不说话了……有什么事情对不对？喂，告诉我！&rdquo; <br>
我把前天&mdash;&mdash;准确地说，不是前天，而是一个月以后&mdash;&mdash;发生的事情原原本本对你说了一遍。 <br>
&ldquo;唔……&rdquo;你沉吟着，&ldquo;事情真的很古怪。时间不是连续体的话，实在让人难以置信。这种主张怎么也不像是精神正常的人提出来的啊。&rdquo; <br>
&ldquo;可这是你亲口对我说的啊。&rdquo; <br>
&ldquo;不是我说的，是那个男子&mdash;&mdash;未来的我说的。无论如何，如果他的理论是正确的话，那么我们的计划说不定还不能说是失败了。&rdquo; <br>
&ldquo;大概是吧。不过，有什么证据能表明我去过未来吗？比如说，如果我能够准确地预言一个月之后的事情，能不能认为这就是证据？&rdquo; <br>
&ldquo;如果你能说中这么一件两件事情的话，那谁都会相信的。&rdquo; <br>
&ldquo;不是单单只说中一两件事，而是百发百中啊。&rdquo; <br>
&ldquo;不可能百发百中的。&rdquo; <br>
&ldquo;为什么？&rdquo; <br>
&ldquo;小竹田，你去了未来，对未来的世界做了观测，&rdquo;你仿佛对一切都已经很清楚的样子，信心十足地开始说明，&ldquo;这就意味着波函数坍缩了。六月二十日的世界本来只不过是有着无限可能的非实在化的波，即存在着爆发核大战的非实在化世界，也存在大学消失的非实在化世界，还存在着突然发生革命的非实在化世界，等等等等。但是现在，由于你的观测，波函数坍缩到了唯一的一种可能上，无数的非实在化世界都消失了，只留下一个实在化的、你所观测到的世界。&rdquo; <br>
<br>
&ldquo;所以呢？六月二十日的世界已经被确定了，我的预言不也就必然可以应验了吗？&rdquo; <br>
&ldquo;不是你像你想的那么简单啊。已经确定的，仅仅是对于你而言的六月二十日的世界；对于包括我在内的其他所有人来说，六月二十日的世界仍旧是属于未来的。也就是说，你所观测的仅仅是你自己的六月二十日，其他人的六月二十日并不是你所能观测到的。而如果还没有被观测的波函数会自动坍缩的话，量子力学也就不能成立了。&rdquo; <br>
&ldquo;你就直接给我一个结论吧。&rdquo;我实在听不明白，感觉有点不耐烦了。 <br>
&ldquo;结论就是，当六月二十日来到的时候，波函数会以一种不同的方式再次坍缩，这种坍缩的结果很可能会与你所经历过的不同&mdash;&mdash;简而言之，你的预言很可能不会实现的。&rdquo; <br>
&ldquo;不会实现？要是真的不会实现，那去未来还有什么价值啊？我小的时候一直在想，如果自己能有时间机器就好了，只要先到未来去了解彩票呀、股票呀、赛马什么的结果，然后再回到现在，那就可以变成超级大富翁了……可是照你今天说的看，时间旅行岂不是一点意义都没有了吗？&rdquo; <br>
&ldquo;呵呵，时间旅行当然还是有价值的。你要知道，所谓的&lsquo;现在&rsquo;，站在&lsquo;过去&rsquo;的角度来看其实就是&lsquo;未来&rsquo;。所以，时间旅行的价值在于，它可以让我们返回到过去，把自己不满意的未来修正过来。&rdquo; <br>
&ldquo;听起来好像不错，可是这需要我们能在时间中倒退才行&mdash;&mdash;而现在的情况是，我只能朝着未来前进，没有办法回到过去啊。&rdquo; <br>
&ldquo;你已经回到过去了，从六月二十日回溯到五月十五日了。&rdquo; <br>
&ldquo;呃？&rdquo;我沉默了一会儿，仔细考虑着你的话，&ldquo;可是，六月二十日终究还是未来，五月十五日才是现在。 <br>
虽然说把六月二十日当作现在的话，五月十五日也就成了过去，可在现实中，六月二十日仍旧还是不存在的啊。&rdquo; <br>
&ldquo;小竹田啊，你对时间旅行的理解太僵硬了……你为什么一定要用五月十五日作为基准来区分过去、现在、未来呢？对于现在的你而言，这种分类已经完全没有意义了。你为什么不换一种角度，把现在看作是六月二十日的过去呢？&rdquo; <br>
&ldquo;这就是我不明白的地方，&rdquo;我试图把自己的疑惑说得更明白一点，&ldquo;今天是五月十五日，这是毋庸置疑的事实，也就是说，五月十五日是目前存在着的；另一方面，五月十四日已经过去了，也就是说，五月十四日已经消失了，在哪里都不存在了。如果存在于某个地方的话，那就不是过去，而应该是现在了；接下来，五月十六日还没有到来，所以它也是不存在的。所以说，过去和未来都是现实中不存在的，前者是存在过了，后者是还没有存在。&rdquo; <br>
<br>
&ldquo;如果说未来不存在的话，你不是已经经历过六月二十日了吗？&rdquo; <br>
&ldquo;……嗯，你说得不错。如果我的经历不是梦的话，那么未来就应该是存在于什么地方的……可是，到底是哪里呢？&rdquo; <br>
&ldquo;我已经说过很多次了，小竹田，那些都是你大脑的错觉而已。&rdquo;你说，&ldquo;所谓的错觉就是这样的想法：时间是分成过去、现在、未来的；未来在一分一秒地变成现在，现在也一分一秒地变成过去。打个比方来说，就好像穿过珠子的丝线一样，把丝线看作时间，于是正在珠子里的那一部分就是现在，已经穿过珠子的部分就是过去，还没有穿过珠子的部分就是未来&mdash;&mdash;但是，真是这样的吗？如果把丝线看作时间，那么珠子又是什么呢？&rdquo; <br>
<br>
&ldquo;珠子就是人啊。&rdquo; <br>
&ldquo;那么，过去和未来就没有人吗？&rdquo; <br>
&ldquo;珠子是人的意识。&rdquo;我修正道。 <br>
&ldquo;过去和未来的人就没有意识吗？&rdquo; <br>
&ldquo;……那，你说珠子是什么啊？&rdquo; <br>
&ldquo;根本就没有什么珠子啊，&rdquo;你从鼻子里笑出声来，&ldquo;时间并不是流动的。&rdquo; <br>
&ldquo;但是，血沼，你前天&mdash;&mdash;昨天说过时间是流动的。你当时是说，大脑可以感知时间的流动方向。&rdquo; <br>
&ldquo;那只是打个比方而已，是让你理解起来更容易一点，实际上应该说时间的方向性，而不是什么时间流动的方向。这就好像指南针一直都指着南方，但并不是有风在往南方吹啊。&rdquo; <br>
&ldquo;你到底在说什么啊，我怎么越来越糊涂了？&rdquo;我还是决定放弃理解你的话了。 <br>
&ldquo;不理解的话，硬要让你理解也没有道理，呵呵。反正你自己多想想，慢慢地一点点地理解就是了。&rdquo; <br>
&ldquo;那，你也一点一点地教我吧。&rdquo; <br>
&ldquo;教你？不可能了。&rdquo; <br>
&ldquo;为什么？&rdquo; <br>
&ldquo;六月二十日的我已经说过了&mdash;&mdash;我猜，那天的我说不懂和现在的我具有同样的意识&mdash;&mdash;今后我们恐怕都不会再相遇了。&rdquo; <br>
&ldquo;什么意思？&rdquo;我问道。 <br>
&ldquo;呀，没什么意思，反正没什么关系……好了，我要去睡觉了。&rdquo; <br>
&ldquo;你是打算去别的日期了吗？&rdquo; <br>
&ldquo;唔，是啊。所以说，小竹田，我以后大概都不会和你相遇了。&rdquo;你平静地说。 <br>
&ldquo;比方说，即使睡着了之后你的意识进入了别的时间流，可是你这个人还应该是存在的吧？&rdquo;<br>
&ldquo;血沼壮士明天当然还是存在的，但这并不是代表明天的我的意识会和今天的我的意识联系在一起。所以，我们就在这里告别吧。&rdquo; <br>
你向我挥了挥手，站起来，慢慢向研究室外面走去。走到廊下的时候，你像是想起了什么似的，停住脚，回过头对我说：&ldquo;喂，别忘了我们的目的啊！&rdquo; <br>
&ldquo;目的？什么目的啊？&rdquo; <br>
&ldquo;你这个混蛋！手儿奈呀！&rdquo; <br>
你说完之后再也没有回头。我也没有喊你，只是站在原地，透过泪水模糊的双眼看着你拐过廊下的墙角，背影消失在墙角后面。 <br>
我冷静下来，开始分析自己目前的处境。 <br>
首先，如果所谓的时间旅行只是我自己的梦，那么就没有任何问题了。现状既不会好转，也谈不上恶化。 <br>
其次，即使我真的进行时间旅行了，也完全没有必要悲观&mdash;&mdash;不，不但不应该悲观，而且说不定还是一个巨大的机会。 <br>
上一次在学术会议上演讲失败是因为自己毫无准备就去到未来的缘故。但这又有什么好担心的呢？我反正可以改变自己不喜欢的未来。虽然在我的主观上，会议演讲是失败了，但是其他人都不知道这一点，这就相当于我还没有失败&mdash;&mdash;不对，波函数还没有坍缩，所以不是&ldquo;还没有失败&rdquo;，而是根本还没有决定是不是失败。这样说来，好好做的话，我是完全可以避免失败的。 <br>
<br>
我开始思考能让我的纪念演讲获得成功的方法。 <br>
那天晚上，我早早上床睡觉了。当然，我并没有打算一定要一醒来就能达到我想去的日期，反正一次不行的话，多试几次就可以了。这就好比掷骰子，第一次就掷出&ldquo;一&rdquo;的可能性很小，但要是允许一直掷到&ldquo;一&rdquo;出现位置的话，那就相当容易了。每一次掷骰子的时候，出现的&ldquo;一&rdquo;概率都是六分之一，当然，很多人都会以为所谓&ldquo;六分之一的概率&rdquo;是指每掷六次必然有一次出现&ldquo;一&rdquo;，其实并非如此。即使前五次都不是&ldquo;一&rdquo;，第六次也不能说是百分之百出现&ldquo;一&rdquo;；实际上，第六次出现的&ldquo;一&rdquo;概率仍然还是六分之一。不过从另一个方面说，连续十次出现不是&ldquo;一&rdquo;的概率只有百分之十六，连续二十次出现不是&ldquo;一&rdquo;的概率只有百分之二点六，连续五十次出现不是&ldquo;一&rdquo;的概率只有百分之一，而连续一百次出现不是&ldquo;一&rdquo;的概率只有百万分之一了。到这种时候，事实上和零概率也没有什么差别了。所以，同样的道理，即使不能马上到达自己想去的日期，至少我相信自己终究还是会去到的。 <br>
<br>
不过很幸运的是，我第一次就成功了。 <br>
睁开眼的时候，恰好就是六月十九日。 <br>
我一到大学，立刻把秘书找到了教授办公室。 <br>
&ldquo;早乙女小姐，明天演讲用的光盘已经准备好了吗？&rdquo;我问秘书说。 <br>
&ldquo;是的，昨天已经给你了。&rdquo; <br>
&ldquo;哦，是啊。&rdquo;我急忙在抽屉里翻找起来，&ldquo;啊，在这儿呢。那个，早乙女小姐，这一次演讲，我准备用电子备忘本。&rdquo; <br>
所谓电子备忘本，是一种可以把演讲稿的字放大显示在显示器屏幕上的作弊工具。当然，既然是作弊工具，它只会把演讲稿显示给演讲者看，一般听众看的大屏幕上是不会显示出来的。 <br>
&ldquo;呃？教授也要用那个了吗？&rdquo;秘书有点惊讶地问。 <br>
&ldquo;嗯，是啊。&rdquo;我尽可能摆出一副平静的样子。 <br>
&ldquo;可是教授您从来都没有用过电子备忘本啊。&rdquo; <br>
&ldquo;怎么，我不能用吗？&rdquo; <br>
&ldquo;啊，我不是那个意思，只不过，您不是一向都很讨厌电子备忘本的吗？我记得您发现学生用那个的时候还发过很大的火呢。&rdquo; <br>
&ldquo;你说得不错，&rdquo;我早已准备好了一套说辞，&ldquo;对于一般的研究讲解而言，电子备忘本是相当不好的东西。 <br>
我在上大学的时候，就听老师说过，使用电子备忘本进行讲解的人并不真正理解自己要讲的内容，而仅仅是按着电子备忘本上显示的文字照葫芦画瓢地读出来罢了，可以说他们是缺乏诚信的，所以对于自己的学生，我也反对他们使用电子备忘本。我当然知道其它有些研究室允许学生使用电子备忘本，不过我也同样知道，那些学生当中也确实有些人并不理解自己所讲解的内容，这一点只要随便问他们几个问题就可以发现了。因为不管什么样的问题，电子备忘本上都不可能显示出写好的答案，所以那样的学生，在那种场合下都会遭到耻笑的。 <br>
<br>
但是，我这一次要做的，并不是研究目的的演讲，而只是纪念性质的演讲而已。如果我在演讲过程当中忘记了原稿的内容，那么对于听众来说就会感觉到非常困惑。况且我想，谁也不会以为我是因为不理解演讲的内容才使用电子备忘本的吧。&rdquo; <br>
&ldquo;啊，当然当然。&rdquo;秘书有点不大信服地说。不过看起来，她好像也不知道该对我的解释作什么反应才好。 <br>
&ldquo;那就是了&mdash;&mdash;早乙女小姐，你知道怎么用这个电子备忘本吗？&rdquo; <br>
我很清楚，虽然自己曾经禁止学生使用电子备忘本，但还是有学生在偷偷使用。秘书当然也应该从那些学生那里学到了一点使用方法。 <br>
&ldquo;是的，我知道一点。&rdquo; <br>
很好，非常好。 <br>
&ldquo;那么，教教我怎么用，行不行？&rdquo; <br>
秘书答应之后，我开始着手通读提纲，推测演讲的内容。上一次，因为是第一次，又受了不小的惊吓，根本没办法阅读了解演讲的内容到底是什么，这一次心平气和地看下来，对整体内容大致有了一个了解。虽说我的意识和此前写这份提纲的&ldquo;我&rdquo;是割裂的，但是说起来，这提纲终究还是自己做的东西，理解起来还是比较容易。 <br>
另外，我也感觉到这份提纲和上一次演讲所见的内容有些微差异，不过恐怕这也是我个人的感觉失误，所以也没有深究下去。 <br>
接下来就是制作电子备忘本了。首先是我通读原稿，然后指示秘书照我说的内容输入，全部完成之后再由我作一次全盘校验，确保每一幅画面都有对应的台词显示在只有我一个人可以看见的显示器屏幕上。好不容易所有内容都完成了，我看看时间，已经晚上九点了。 <br>
&ldquo;哎呀，我都没注意，竟然已经这么晚了啊！连饭都没有请你吃，真是该死了。下一次，一定要请你吃饭。&rdquo; <br>
&ldquo;嗯，没关系。&rdquo;秘书看上去有一点不高兴，&ldquo;不过，下一次希望教授您能早点和我说。比方说，如果前天就告诉我这件事情，也不至于搞得这么匆忙了。&rdquo; <br>
尽管秘书这么说，我还是相当满意的。电子备忘本已经弄得很完美了，明天的我即使完全不了解会议的内容，只要看了电子备忘本上的提示，演讲的时候应该就不至于惊慌失措了。当然，最后还有一个问题，就是演讲之后有一个听众提问时间，我现在因为不能预测听众会提什么问题，所以也没办法编写答案。不过，我毕竟不是对演讲内容一无所知，应该对于各种问题都能做一个比较适当的回答吧。<br>
我意气风发地踏上了回家的路。  <br>
第二天早上我睁开眼睛的时候，已经是会议举行一周之后了。  <br>
和研究室里的同事打招呼的时候，态度上似乎都没有什么特别的变化。看起来纪念演讲应该是很成功的。为了进一步确认，我特意发了一封E-mail给我的朋友&mdash;&mdash;他应该出席了那次会议。  <br>
小竹田@平成大学  <br>
久未见面，老友一向可好？  <br>
对于先前会议上我进行的演讲，老友的感觉如何？我觉得自己似乎犯了一些比较严重的错误，月花先生是怎么看的？  <br>
明年在夏威夷举行大会的时候，您是否还出席？如果出席的话，我们晚上一起吃一顿饭，您看如何？  <br>
此致  <br>
敬礼！  <br>
平成大学医学部 小竹田丈夫  <br>
shinoda@ed.heisei.ac.jp  <br>
三十分钟之后，答复的E-mail来了。  <br>
月花百分号今天还在醉酒中@白凤医短④  <br>
&gt;对于先前会议上我进行的演讲，老友的感觉如何？我觉得自己似乎犯了一些比较严重的错误，月花先生是怎么看的？  <br>
我没感觉您的演讲当中有什么问题，恰恰相反，我觉得您做了一次很漂亮的演讲。  <br>
&gt;明年在夏威夷举行大会的时候，您是否还出席？如果出席的话，我们晚上一起吃一顿饭，您看如何？  <br>
您说这话是什么意思？那一天我们不是一起参加了会议后的宴会吗？我记得在那时候我就和您说过下次的大会我不参加了吧？而且，  <br>
&gt;久未见面，老友一向可好？  <br>
这话又是什么意思？您是在开玩笑吧？  <br>
白凤医短 月花健吉  <br>
tukihana@hakuhoo.ac.jp  <br>
在还没有确定当天有没有见面的情况下就直接和朋友联络，确实是有一点草率了。不过，好歹也不算什么大失误。反正都是些细枝末节的事情，也没必要专门回E-mail解释，而且估计朋友渐渐就会自然而然地忘记了。另外，我现在也完全顾不得这些东西了。因为我的计划居然能够如此完美地实现，实在让我感觉像在梦里一样。我的设想居然是正确的，就意味着我拥有了改变历史的能力。改变历史！这居然就是如此简单的事情！  <br>
<br>
可是，历史是从什么时刻开始改变的？是我最初确定计划的时刻？是从六月十九日醒来的时刻？是来到大学找秘书的时刻？是和秘书一起制作电子备忘本的时刻？是晚上睡觉的时刻？是今天早上起床的时刻？可能性太多太多了，我不知道哪一个才是正确的答案。另外，我音乐也觉得有些奇怪，因为在我原先的记忆里，纪念演讲是失败了的，可是现在的事实又是一周前的演讲成功了，那么岂不是说现在的我和一周前的我是不同的两个人&mdash;&mdash;或者说，至少也是具有不同意识的两个人吗？  <br>
<br>
但是无论如何，我确实拥有了神一样的能力，拥有了将这个世界变成我希望的样子的能力。  <br>
我雀跃着从教授办公室走向停车场。  <br>
哦哦，我是全能者！我是全知者！我是这世上独一无二的……等等，真的独一无二么？  <br>
我想起还有一个人也和我一样，具备着神一样的能力。  <br>
我又一次开始了时间旅行。  <br>
七月五日。七月十一日。六月三十日。八月一日。九月十五日。六月二十二日。八月十三日。八月五日。八月四日。  <br>
然后，五月十四日。我和你一起前往立体定向放射治疗仪的治疗室。  <br>
你对我说：&ldquo;浪费时间争论这种问题根本毫无意义，你还是赶快教我怎么操作这个设备吧。&rdquo;  <br>
&ldquo;不行！&rdquo;我斩钉截铁地说。  <br>
&ldquo;为什么？&rdquo;你瞪大了眼镜，&ldquo;为什么说不行？&rdquo;  <br>
&ldquo;因为，不管怎样出色的理论，一旦投入实际应用，多多少少都会出现问题。所以无论哪种治疗手段，都要先进行充分的动物实验之后才能加以实际的临床应用。&rdquo;我稍稍停了一下，&ldquo;血沼，你做过动物实验没有？&rdquo;  <br>
&ldquo;没有……你是让我先去做动物实验？那种实验即使做了也完全没有意义。动物又不能说话，即使成功进行了时间旅行，它也不能告诉我们任何东西。况且，人类以外的动物难道也具有意识吗？&rdquo;  <br>
&ldquo;唔……确实如此。看起来，只有直接进行人体实验这一条路了。&rdquo;  <br>
&ldquo;你明白就好，&rdquo;你脸上浮现出如释重负的表情，&ldquo;那么快点教我吧。&rdquo;  <br>
&ldquo;没那个必要。&rdquo;我从大衣口袋里拿出手提电脑。&nbsp;&nbsp; <a href="http://hi.baidu.com/touchthememory/blog/item/c2fae800dc843817728b6536.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/touchthememory/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/touchthememory/blog/item/c2fae800dc843817728b6536.html#comment">查看评论</a>]]></description>
        <pubDate>2008-10-24  19:36</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[412858310]]></author>
		<guid>http://hi.baidu.com/touchthememory/blog/item/c2fae800dc843817728b6536.html</guid>
</item>

<item>
        <title><![CDATA[醉步男[2]]]></title>
        <link><![CDATA[http://hi.baidu.com/touchthememory/blog/item/ba2c20d8f31a443333fa1c35.html]]></link>
        <description><![CDATA[
		
		<p>&ldquo;是啊。&rdquo;  <br>
&ldquo;可是我没听你说几点钟给我们回答啊？&rdquo;  <br>
&ldquo;什么……啊啊啊！！&rdquo;你大叫起来，&ldquo;只有五分钟了！&rdquo;  <br>
&ldquo;什么？！在哪里？！&rdquo;  <br>
&ldquo;地铁站的月台。&rdquo;  <br>
&ldquo;奇怪的地方。&rdquo;  <br>
我们两个人对望了一眼，几乎同时拔腿向车站跑去。  <br>
我们到达车站的时间还是比约定的时间晚了很多。  <br>
到达的时候，车站外面黑压压的都是人。我停下脚步，还没弄清发生了什么事情，你就突然大叫着，往车站闸机口冲过去。车站工作人员试图拦住你，于是你就一边哭着举起拳头打他，直到被里面的警官制服为止。  <br>
我急忙赶过去，向旁边的一个警官问道：&ldquo;对不起，这里发生什么事情了吗？&rdquo;  <br>
&ldquo;嗯，有一起突发的人员伤亡事故。事故处理期间禁止无关人员进入。&rdquo;  <br>
&ldquo;不！！！&rdquo;你听到警官的回答，又一次大叫起来。  <br>
&ldquo;啊……是，是女性吗？&rdquo;我尽最大的努力控制住自己，尽可能冷静地问道。  <br>
&ldquo;是。&rdquo;  <br>
&ldquo;是大学生？&rdquo;  <br>
警官用疑惑的眼神看着我。  <br>
&ldquo;你怎么知道的？&rdquo;  <br>
&ldquo;因为我们两个人，&rdquo;我指了指几乎发狂的你，&ldquo;今天和一个女性朋友约好要在这里见面……&rdquo;  <br>
我不知道是不是你的歇斯底里让警官们相信我们是受害者的亲密朋友。总之起先警官还因为不能确认我们的身份而禁止我们进入，可最后还是放我们进去了。  <br>
手儿奈已经没有一副完整的躯体了。  <br>
我再也控制不住自己，不顾警官的阻拦，死命扑过去趴在残缺的手儿奈的躯体上痛哭起来。你就在我旁边一起嚎啕大哭着。我们两个人的衣服都被手儿奈的鲜血染红了。  <br>
突然之间，你抱起了手儿奈残缺的身体，疯狂地向月台外面跑去。你的这个举动让在场的所有人都大吃一惊，一时间连警官们都怔住了，隔了一会儿才有人反应过来，然后大家纷纷追了出去。抓住你的时候，你已经快要跑到出站闸机口了。而且即使好几个人抓着你，也很难吧手儿奈的身体从你手上夺下来。  <br>
&ldquo;手儿奈……手儿奈！&rdquo;你一边哭，一边不停地吻着满是血迹的残缺肢体&mdash;&mdash;现在回想起来，那的确是一副怪异的场面。但是在当时，至少我自己并不觉得这其中有什么怪异的地方，因为我也是同样把自己的脸贴在手儿奈的一条腿上，真心希望这样的做法能让她复活。  <br>
然而手儿奈已经不可能复活了。  <br>
根据目击者的描述，手儿奈一直恍恍惚惚地走在月台边上，连地铁开过来也没有注意，结果被地铁带起的气流卷落到了铁轨上。另一方面，警方并没有发现遗书之类的东西，而且手儿奈原本就是越好了要在这里和我们见面的，所以警方认为基本上可以排除自杀的可能性，于是将之定性为一起事故。但这只是由于缺乏有力的证据而不得不作出的判断罢了。事实到底是什么样子，大家都不知道。  <br>
<br>
为手儿奈举行葬礼的时候，她的父母都像是失去了理智。不过后来据我的朋友们说，当时你我两个人才更像是失去了理智。我们不知道到底在想什么，居然试图抢出手儿奈的棺材逃走&mdash;&mdash;然而我却完全不记得有这回事了……  <br>
葬礼之后的一个多月里，我的生活仿佛失去了所有的目标，每天都在浑浑噩噩的状态中度过。说实话，我就仿佛没有经历过那段时间一样，记忆中没有留下一点印象，只记得自己每天都想在梦里似的，在路边的椅子上呆坐，在公园的垃圾箱里翻找，在空荡荡的地铁站里睡觉，即使偶尔回到宿舍里，我的一举一动也像个呆子一样。  <br>
然而，终于有一天，我重新找回了我自己。我不知道那是怎么发生的，我只是突然看见自己被埋在宿舍里堆积如山的垃圾当中，几乎连转个身都困难。我自己当时还紧抱着一个塑料瓶，像是抱着无比重要的东西。瓶子里装着淡黄色的液体，我打开来闻了一闻，一股骚臭扑面而来&mdash;&mdash;居然是我自己的尿。我差点要呕吐出来，赶快跑到卫生间里去把尿液倒掉。  <br>
<br>
从卫生间里出来，我看着垃圾场一样的宿舍，奇怪自己为什么会弄成这个样子，然后我就想起了手儿奈的事情，于是又开始哭起来。我哭着哭着，突然之间又想起了你。连我都成了这副样子，我不知道你会做出什么更加不可理喻的事情，于是我就穿着满是血迹和泥污的衣服，急匆匆地向你住的公寓跑去。<br>
你的房间没有上锁。  <br>
&ldquo;血沼！&rdquo;我一边喊着一边冲进你的房间。  <br>
房间里并不像我想像的那样乱得不成样子，不过也不是说井井有条，只是像一般男生宿舍常见的那种混乱罢了。我在房间里没有看见你，只是听到从浴室里传来阵阵的水声。  <br>
我走过去，打开了浴室的门。  <br>
在扑面而来的恶臭中，我看见你躺在浴缸里，浴缸里黑黢黢的水直没过你的腰。  <br>
&ldquo;血沼！&rdquo;我抓住你的肩膀摇晃着，&ldquo;还活着吗？认识我吗？我是小竹田啊！&rdquo;  <br>
你脸上是一副呆滞的表情，过了半晌，你才渐渐意识到我的存在，露出惊讶的样子。  <br>
&ldquo;是小竹田？！你怎么……怎么穿成这个样子？&rdquo;你一边问，一边从浴缸里站起来。  <br>
&ldquo;我们两个人一直都在梦里啊！&rdquo;  <br>
&ldquo;梦？&rdquo;你低下头，像是在思考着什么问题，&ldquo;啊，对了，原来是梦啊。原来那些事情全都是做梦啊。&rdquo;  <br>
你的脸上露出了幸福甜蜜的表情。  <br>
&ldquo;不是，那些事情不是梦！&rdquo;  <br>
&ldquo;什么，不是梦？！&rdquo;你突然大叫起来，又一次滑到浴缸里。  <br>
&ldquo;够了！&rdquo;我也大叫着，&ldquo;你不能再这样子了！人生不是才刚刚开始吗？&rdquo;  <br>
&ldquo;刚开始？哪里是刚开始？我的人生已经结束了！手儿奈就是我的人生啊！&rdquo;你突然抬起头瞪着我，眼睛里有让我不寒而栗的光芒，&ldquo;是你，都是因为你！&rdquo;  <br>
&ldquo;你在说什么？&rdquo;  <br>
&ldquo;是你把手儿奈夹在我们两个中间！就是因为这个她才会自杀的！&rdquo;  <br>
&ldquo;不是自杀，是事故！&rdquo;  <br>
&ldquo;都一样，让手儿奈精神恍惚，以至于从月台上摔下去的不就是你吗？&rdquo;  <br>
&ldquo;为什么指责我？你不是一样有罪吗？&rdquo;  <br>
&ldquo;为什么要把我的手儿奈夺走？&rdquo;你紧紧抓住我的手腕，几乎连血流都被你掐住了。  <br>
&ldquo;手儿奈原本就是我的恋人，&rdquo;我试图甩开你的手，&ldquo;夺走她的人是你。&rdquo;  <br>
&ldquo;是你抛弃了手儿奈！为什么，你为什么抛弃她？你要是没有抛弃她，她就不会和我交往，那她现在还会活着！&rdquo;  <br>
&ldquo;……别说了！&rdquo;我无法回应你的这项指责。确实，手儿奈是因为我抛弃她才会死的。我一直都知道这一点，但一直都不敢面对这一点，&ldquo;别说了，求求你别说了。是我不对，原谅我……&rdquo;  <br>
&ldquo;不能原谅。这是你欠我的债，很大的债。&rdquo;你忽然平静下来，微笑着说，&ldquo;这份债，要用你的一生来偿还。&rdquo;  <br>
你突如其来的平静比刚刚的疯狂更让我感到恐惧。但是反过来说，这样的恐惧也激发了我自己的狂性。  <br>
&ldquo;好，你说吧，我要怎么做才能偿还你？&rdquo;  <br>
你放开了我的手，抱起胳膊，一动不动地坐在浴缸里。你的眼光并没有看着我，而是凝视着浴室半空虚无的一点。你就那样子一直呆坐着，一坐就坐了一个钟头。你动也不动一下，我以为你又陷入哀莫大于心死的状态了。  <br>
&ldquo;和我一起去参加医学部的入学考试。&rdquo;  <br>
我怔了一下，没有明白你的意思。  <br>
&ldquo;医学部的考试难度很大，&rdquo;你没理会我，自顾自地往下说，&ldquo;我没有把握肯定自己一定能通过。但如果两个人一起参加，至少成功的可能性比一个人的时候来得大。下一次考试的时间太紧了，没有办法做足够的准备，不过下下次，再下下次的考试说不定就可以准备好参加了。&rdquo;  <br>
参加医学部的考试和手儿奈有什么关系？我不明白。我猜那只是你头脑中妄想的一种表现吧。但我还是按照你的要求，开始着手准备参加考试。无论如何，对我自己来说，失去了手儿奈，也等于我失去了人生目标，从现在起，以后究竟要做什么，我自己反正也没有心情去决定&mdash;&mdash;既然自己无法决定，那就让你替我决定好了。  <br>
突击学习非常辛苦。不过我本来就是抱着一种赎罪的心态参加学习的，所以并不在意那些辛苦，反而以一种近乎自残的方式学习着。  <br>
然后就是考试。  <br>
考试的结果，我通过了。而你没有。  <br>
你又来到了我的宿舍。  <br>
&ldquo;计划不得不作些改变了。我留在学校里继续做我的研究，你一个人在医学部研究如何拯救手儿奈。&rdquo;  <br>
我的泪水涌上双眼，只能尽力强忍着不让它流出来。  <br>
&ldquo;血沼，太晚了。到现在这个手，不管什么样的医学手段都无法拯救手儿奈了。&rdquo;<br>
你猛地冲上来，一拳把我打得飞了出去。我慢慢从地上爬起来，重新走到你面前。  <br>
&ldquo;现在这个时候还不晚！&rdquo;你的鼻子里淌出两条血痕，我不知道那是不是你极度愤怒的缘故，&ldquo;本来就是你的原因才导致了这一切，你有什么资格说太晚了？&rdquo;  <br>
&ldquo;是的。可是，要让手儿奈的灵魂安息，这已经不是医学能够解决的问题了。&rdquo;  <br>
&ldquo;我说的是拯救手儿奈，不是说让她的灵魂安息！&rdquo;  <br>
你从口袋里拿出一个灰黑色的塑料袋，袋口紧紧地捆着，防止里面半液体状的东西流出来。  <br>
&ldquo;拿着。&rdquo;  <br>
&ldquo;这是什么？&rdquo;我刚一问出口就明白了。  <br>
&ldquo;是手儿奈。如果医学十分发达的话，就能把她救活。&rdquo;  <br>
我抬起头，凝视着你。  <br>
&ldquo;血沼，你好好听着：手儿奈已经死了。&rdquo;  <br>
&ldquo;还不一定。你在医学部做研究的时候，说不定可以找到救活她的方法。&rdquo;  <br>
&ldquo;死了的人不会再活过来。更何况，手儿奈的大部分都已经烧成灰了。&rdquo;  <br>
&ldquo;手儿奈就在这里。就算手儿奈的大部分都已经烧成灰了，这里仍然是手儿奈。&rdquo;  <br>
&ldquo;这个不是手儿奈。&rdquo;  <br>
&ldquo;不，就是手儿奈，&rdquo;你说，&ldquo;我一直都记得自己是怎么把她救出来的。&rdquo;  <br>
我知道自己无法说服你。你已经疯了。要让你理解这腐烂的肉块不是手儿奈，那是比登天还难的事情。然而很诡异的是，在你疯狂的坚持下，我竟然也开始把这肉块当作手儿奈了。  <br>
是的，因为这肉块里有手儿奈的遗传基因。  <br>
我知道可以根据遗传基因来确定一个人的真实身份。所以在理论上，只要有遗传基因，就应该可以将手儿奈复原出来。这就是所谓人体克隆技术。虽然直到今天，世界上也还没有任何有关成功的克隆人类的报告，但至少在理论上这种事情并不是不可能的。之所以至今都没有这方面的报道，很大程度上也许只是因为无法解决伦理方面的问题。如果真是这样，那还是有希望的。  <br>
<br>
你握住了我的手。血从你的鼻子里滴到我们握着的手上。你没有理会。我也没有去擦它。  <br>
&ldquo;拜托你了。我也要继续努力。&rdquo;  <br>
&ldquo;你？&rdquo;  <br>
&ldquo;是。我有我的考虑。&rdquo;你仿佛想说什么，但最后只是说，&ldquo;如果你失败了，那就只有我能拯救手儿奈了。&rdquo;  <br>
你离开了我的宿舍。  <br>
随着在医学部的学习不断深入，我也渐渐恢复了理智。我终于意识到，克隆手儿奈是一件完全没有意义的事情。  <br>
从最理想的角度说，即使克隆成功了，那也不会是原来的手儿奈了。我所克隆出来的，仅仅是具有着相同基因的陌生人而已。一个人之所以成为一个特定的人，并非单纯是由遗传基因决定的。明显的例子是：同卵双生子就具有完全相同的基因，但仍旧具有完全不同的人格。所以即使真的制造出和手儿奈一模一样的婴儿又能怎么样呢？就算那个孩子是用手儿奈的细胞培养出来的又能怎么样呢？无论如何，那应该是一个全新的人生开始了，你或者我，又有什么权力去规定她的人生呢？  <br>
<br>
我把手儿奈的残片扔掉了。  <br>
三十年过去了。  <br>
这时候的我已经当上了医学部的教授。至于你&mdash;&mdash;从三十年前的那一次见面之后，我就再也没有见过你，只是听传闻说，你参见了博士课程的进修，但最后并没有获得博士学位。据说，你在做毕业设计的时候丝毫不理会导师的指导，完全按照自己的想法搞研究做实验，所以最终被学校除名。在那之后，我便再也没听到过关于你的任何消息。  <br>
<br>
然而突然有一天，你到大学里来找我了。  <br>
&ldquo;很久不见了，小竹田，&rdquo;你看上去老了许多，比实际的年龄还要老上十岁的样子，&ldquo;手儿奈治好了吗？&rdquo;  <br>
我心里咯噔了一下。难道你这三十年一直都是在妄想中度过的吗？  <br>
你从脏得已经看不出本来颜色的大衣口袋里拿出了手儿奈的照片。照片已经发黑了，可你看着照片，脸上还是露出了幸福的笑容。  <br>
&ldquo;啊，那个……&rdquo;我不知道说什么好。  <br>
&ldquo;还没有成功吗？果然如此……没关系，本来就不是很容易的事。何况你还要先做好自己的工作。&rdquo;你坐到教授办公室的沙发上，&ldquo;你好像已经当上教授了。&rdquo;  <br>
&ldquo;运气好罢了。&rdquo;  <br>
&ldquo;是吗？不错吧……我的运气就太差了，到今天连吃饭的地方都没有着落，住的地方也没有啊。那个，你，结婚了吧？&rdquo;<br>
&ldquo;唔唔，二十年前就结婚了。有两个孩子。&rdquo;  <br>
你突然站起来，伸手抓住了我的胸口。  <br>
&ldquo;你果然就是这么个家伙！总是先考虑自己的事情……算了，这样也不错。&rdquo;你放开手坐了回去，&ldquo;这样的话，你也能专心做研究了。那么，研究的结果呢？很难取得进展？&rdquo;  <br>
我向你说明了研究中止的情况，也向你解释了我中止研究的原因。当然，我是带着忐忑不安的心情说明的。  <br>
我不知道一直陷于妄想的你会不会被我的分析说服。  <br>
&ldquo;原来如此，&rdquo;出乎我的意料，你居然一点都没有发怒，反而笑嘻嘻地说，&ldquo;我本来也没有抱什么希望。&rdquo;  <br>
我露出惊讶的表情看着你，你忍不住笑起来。  <br>
&ldquo;那显然不是医学能够解决的事情。从一开始我就没有对你存有期望……啊，你先别生气。&rdquo;你看着我目瞪口呆的样子，&ldquo;通过医学的手段拯救手儿奈，存在着好几个问题。首先，手儿奈的残片里能不能提取出她的有活性的遗传基因，能不能用这个遗传基因克隆出一个新的手儿奈，这都是有疑问的。因为残片里的细胞死亡很久了，虽然我自己不肯承认，但我也知道从它里面十有八九无法得到有活性的遗传基因。另一方面，就算肉体克隆成功了，我们也还面临一个如何克隆手儿奈的意识的问题。毕竟对于一个人来说，最重要的不是她的肉体，而是她的精神意识。而关于这个克隆意识问题，实际上首先就是要搞清楚人类的记忆到底保存在什么地方。如果是保存在灵魂里，那么就不得不去捕捉人类的灵魂；如果是保存在大脑当中，那么就不得不去复原所有神经细胞的状态……无论如何，要想做到这些，几乎根本就是不可能的事。&rdquo;  <br>
<br>
说道这里，你停下来沉默了一会儿，然后才接下去说：&ldquo;但是还不到彻底绝望的时候。医学方法不行，不代表别的方法也不行。如果我的理论正确，那还是有希望的……小竹田，你能帮我一个忙吗？&rdquo;  <br>
&ldquo;帮什么忙？&rdquo;  <br>
&ldquo;你这所大学的附属医院里有神经科吗？&rdquo;  <br>
&ldquo;有。&rdquo;  <br>
&ldquo;那么，我想看看患者的病历。&rdquo;  <br>
&ldquo;什么！&rdquo;我&ldquo;禁不住提高了声音，&ldquo;你疯了！这是犯法的！&rdquo;  <br>
&ldquo;别大惊小怪。我又不是要看患者的名字或长相，只是想看看患者的症状和大脑内部状态的相关记录罢了。&rdquo;  <br>
&ldquo;我的专业既不是神经科，也不是脑外科。你的要求我做不到。&rdquo;  <br>
&ldquo;我不需要全体患者的资料。合适的话，只要一两个人的纪录就够了。我想要的只是那种患有时间知觉障碍症的患者的资料。&rdquo;  <br>
&ldquo;时间知觉障碍症？&rdquo;  <br>
&ldquo;对。你和我都具有正常的时间感知能力。昨天之后是今天，今天之后是明天，诸如此类。之所以会有这种感觉，应该是由大脑来判断完成的。但是有些人不具备这样的能力。他们可能会把今天同前天直接联系在一起，也可能认为今天之后就是后天，于是他们就会无法预测昨天还没发生的事情，或者经常会想起明天曾经发生过的事情。&rdquo;  <br>
&ldquo;啊，我明白了，你说的是精神分裂症中的一种。找你描述的症状看起来，应该是记忆障碍或者是妄想症什么的。&rdquo;  <br>
&ldquo;为什么说是妄想症？&rdquo;  <br>
&ldquo;因为没人能回到过去，也没人能跳到未来。而且，在患者头脑中想像出来的那些&lsquo;明天曾经发生的事情&rsquo;，实际上到了第二天也并没有发生。所以那些当然就是妄想了。&rdquo;  <br>
&ldquo;你确定？那些患者的记忆和未来实际发生的事情从来都不相符合？&rdquo;  <br>
&ldquo;嗯……那倒也不是。不过即便发生这样的事，也是极偶然极偶然的，完全可以用极小概率事件来解释。&rdquo;  <br>
&ldquo;妙极了！&rdquo;你开心地大叫起来，&ldquo;不然我就可真的绝望了。如果这些人对于未来的记忆一直都和现实一致的话，我就真的不知道还有什么办法了……现在还是有希望的……小竹田，什么时候能拿到患者资料？&rdquo;  <br>
&ldquo;这个我可说不准。我去问问神经科的朋友，看看能不能拿到那种资料。&rdquo;  <br>
&ldquo;无论如何要拿到，不然就麻烦了。那么，我过一个星期再来，到时候期待你的好消息。&rdquo;  <br>
&ldquo;喂，等等。你有住的地方吗？不行的话可以住在我家……&rdquo;  <br>
&ldquo;车站候车室也能睡觉。&rdquo;  <br>
你又像来的时候那样漫无目的地晃了出去。  <br>
也许我应该无视你的请求才对。  <br>
可是不知道究竟出于什么心理，我最后还是去找了神经科的朋友。也许在我的潜意识里，也还仍旧在为手儿奈的死内疚吧。手儿奈的死我也要负一部分责任，而她的死亡又导致了你数十年浑浑噩噩的生活。我虽然无法补偿她或你，但是为实现你的愿望尽一点力量&mdash;&mdash;尽管我认为你的愿望不过是妄想而已&mdash;&mdash;至少可以给我自己带来一点点心灵上的安慰，即使自己也知道那只不过是我的虚伪的安慰而已。<br>
患者的资料都搜集在一张光盘里。一部分是基于X射线扫描而得到的大脑内部结构图，另一部分则是脑电波的数据记录。  <br>
&ldquo;多谢了。不过，还有一件事情要你帮忙。&rdquo;你把光盘接过去时说，&ldquo;我需要一些设备来分析这些数据，所以要借你研究室的电脑用用。另外，晚上我能不能直接睡在你的研究室里？我自己带了睡袋，只要占用研究室的一个角落就可以了。&rdquo;  <br>
&ldquo;电脑的事情没问题，不过睡觉&mdash;&mdash;你完全可以睡在我家里。&rdquo;  <br>
&ldquo;这就不用了。我倒不是怕打扰你，只是不想把时间浪费在从你家到研究室的这段路上。&rdquo;  <br>
从那一天开始，你就在研究室里住下了。每天你都忙着分析患者的资料，对学生们好奇的目光视若无睹。我也不敢说出真实情况，遇到有学生问的时候就胡乱编些理由搪塞过去。这样大约过了一个月，忽然有一天，你飞奔着向教室跑来。  <br>
&ldquo;可以了！小竹田，我弄明白了！能把手儿奈救活了！&rdquo;  <br>
到底什么时候才能结束啊？我这么想着。  <br>
&ldquo;你跑慢一点，当心摔着。你弄明白什么了？&rdquo;  <br>
&ldquo;等一下跟你仔细说，现在你先帮我一个忙。&rdquo;  <br>
&ldquo;又想要帮什么忙了？&rdquo;  <br>
&ldquo;我想要用立体定向放射治疗仪②。&rdquo;  <br>
&ldquo;什么啊！你这是得寸进尺！虽然我是教授，可你也要知道，有些事情我能办到，有些事情我办不到啊。&rdquo;  <br>
&ldquo;你应该能办到啦。只要让我用，我就能救回手儿奈了。&rdquo;  <br>
&ldquo;如果救不回来呢？&rdquo;  <br>
&ldquo;绝对能救回来！&rdquo;  <br>
&ldquo;万一呢？啊，就算失败的可能性是一亿分之一吧，你为什么那么肯定一定能救回来？&rdquo;  <br>
&ldquo;到时候你就知道了。反正这是绝对、绝对可以实现的。&rdquo;  <br>
我在想，该怎么做才能把你从妄想的世界中拉出来呢？你已经沉迷了那么就，单靠语言能把你说服吗？显然不可能。那么，就满足你的请求，让你自己最终明白自己的设想有多么疯狂，怎么样？退一万步说，如果你真的成功了，不也是真的拯救了手儿奈了吗？但是另一方面，你的要求并不是可以那么容易做到的，我必须编造一些理由，如果这些理由被揭穿，我就会丢掉我现有的地位。这样说来，假如你的设想根本就是错的，那么我值得冒这么大的风险吗？  <br>
<br>
啊，不，我怎么能那么想？这三十年来，手儿奈的死一直都像一块沉甸甸的铅块一样压在我的心上，如果有任何事情能让这种罪恶感减轻一点的话，即使明知到那是不可能成功的，又有什么值得不值得的呢？  <br>
我编造了一个借口，从院方得到了立体定向放射治疗仪的使用许可。  <br>
你认为，为了尽量不引起别人的注意，应当在深夜里使用这一装置。我当然同意这一点。  <br>
&ldquo;现在，你该告诉我你到底要那这个装置干什么了吧？&rdquo;在治疗仪的控制室里，我对你说。  <br>
立体定向放射治疗仪&mdash;&mdash;这是一种用来治疗癌症的装置。一般来说，当癌症发展到无法使用手术治疗；或者由于癌症本身的性质无法动手术的时候，就要用这种装置了。它的原理是把高能粒子射线分成若干束，从人体的不同角度照射进去，这些分散的射线会在人体内的某个点上交叉，于是这一点上就会承受极高的放射剂量，从而达到杀灭这一点上的癌细胞的效果；而对于正常的人体组织来说，它们承受的都是极小的放射剂量，所以几乎不会受到任何影响。当然，确定射线交叉点是一件精度要求非常高的工作，所以这种治疗仪都是使用电脑控制的。  <br>
<br>
&ldquo;嗯，当然是为了逆转时间啊。&rdquo;  <br>
你果然这么说了。从上一次你说到时间知觉的时候开始，我就猜到你的目的了。  <br>
&ldquo;干吗用那种眼神看我？&rdquo;你从鼻子里重重地哼了一声，&ldquo;你以为我疯了？你以为我是在信口胡说？&rdquo;你忽然咯咯地笑了起来，&ldquo;算了吧，我不是今天才被人看成疯子，早在三十年前就被人这么看了。但是不要以为我真的疯了。这三十年来，我的任何一项举动都有我自己的理由。啊！我知道，你认为我是受不了手儿奈的死，所以发狂了……可惜你还是想错了。这样吧，还是让我从头开始解释给你听。  <br>
<br>
&ldquo;手儿奈发生事故之后，我一直在考虑，是否真的没有办法能将她救活。接下来，我就想到了两种方法，一种就是拜托你去研究的，从细胞中提取DNA进行克隆的方法；还有一种就是逆转时间，回到过去的方法。当然，我当时也知道，不管哪一种方法都是脱离现实的，可是换一个角度想，哪里存在比这两种方法更加接近现实的方法呢？显然没有。所以还是只有这两种方法可行一点。<br>
&ldquo;说实话，一开始我觉得克隆的希望更大一点，可是由于没能通过医学部的入学考试，所以只好拜托你去研究。不过从另外一方面说，我也想到，与其两个人都研究同一种方法，不如各人寻找各自的途径，这样才更有可能成功。所以我就开始了时间方向的研究。  <br>
&ldquo;我调查了物理学当中许许多多的领域。当时我的想法是，首先要研究那些禁止时间逆行的物理法则，然后设法构造出那些法则使用范围之外的条件，这样就有可能实现时间的逆行了。  <br>
&ldquo;于是我就开始了我的调查&mdash;&mdash;相对论、量子力学、电磁学、热学、混沌学，诸如此类。可出乎我意料的是，不管在哪一个领域，我都没有发现禁止时间逆行的物理法则&mdash;&mdash;换句话说，在我们今天所知道的所有物理学中，没有任何禁止时间逆行的理由存在。  <br>
&ldquo;不管那一种物理理论或者物理法则，基本上都是以一组方程式的形式表现出来。当然，描述静态现象的方程组一般都具有三个参数，分别用来表示空间中的三个位置；而动态方程组则会多包含一个表示时间的参数t.奇妙的是，无论是哪一组方程式，对于t的方向都没有要求。t沿着正方向变化也好，沿着负方向变化也好，方程式都是成立的。这实际上就是说，从物理学的意义上看，时间逆行并不是不可能发生的事情。可如果真是这样的话，为什么在现实当中我们从来都没有遇到过时间逆行的事情呢？这究竟是为什么呢？&rdquo;  <br>
<br>
&ldquo;这原因不是很简单吗？&rdquo;我一边尽力回想着几十年前学习的那些物理学知识，一边回答说，&ldquo;物理法则并不一定都表现成方程式的形式。比如说因果律&mdash;&mdash;&lsquo;原因必在结果之先&rsquo;的法则就没有对应的方程式。&rdquo;  <br>
&ldquo;很好，你提出了因果律&mdash;&mdash;但因果律是确实可信的物理法则吗？仔细想想就会发现，所谓&lsquo;原因&rsquo;、&lsquo;结果&rsquo;之类的说法，其实都是相当暧昧的概念。&lsquo;这个是原因，那个是结果&rsquo;，其实都是基于人类的理性作出的判断。实际上，&lsquo;原因必在结果之先&rsquo;的说法和&lsquo;时间不能逆行&rsquo;的说法在本质上是一致的，你假定其中一种说法正确，然后以此来证明另一种说法的正确性，这岂不是在循环论证吗？说到底，你所说的仍旧是基于你日常生活的体验。但是对于我而言，我认为，这种日常生活的体验并不足以证明因果律的物理实在性。&rdquo;  <br>
<br>
&ldquo;好吧，你不承认因果律也没关系，至少你要承认热力学第二定律吧？那不也是包含了时间方向性的物理学法则吗？&rdquo;  <br>
&ldquo;就是所谓&lsquo;熵随时间增加而增加&rsquo;的理论？我知道这个理论，它的意思不就是事物总是向着更加混乱的方向变化吗？可是这一说法足够严密吗？无论在何种情况下，熵都是向着更加混乱的方向变化吗？确实，建筑会毁坏，杯子会碎裂，木桩会腐烂，钉子会锈蚀。但生物体呢？不断向更加高级的方向进化，这也能说是混乱吗？  <br>
还有人类的文明呢，这也是在向混乱的方向变化吗？&rdquo;  <br>
&ldquo;你看的范围太小了，如果放到全宇宙的范围来看，你的问题就不成为问题了。你要注意到，太阳是在不断散发能量的，正是利用了这些能量，地球上的生物体才能向着熵减少的方向进化。如果你把地球连同整个太阳系作为一个整体来考虑，你就会发现它们确实还是在向着混乱的方向演化的。&rdquo;  <br>
&ldquo;你这终究只是一种悲观的论调罢了。对我来说，热力学第二定律仍旧是一种相当暧昧的说法。它到底有什么意义呢？&lsquo;熵随时间增加而增加&rsquo;，这一定律本身就已经使用了&lsquo;时间&rsquo;这一名词来进行表述，换句话说，热力些第二定律首先假定，宇宙中的某些因素决定了时间的方向性&mdash;&mdash;可是，这种决定因素到底是什么？&rdquo;  <br>
&ldquo;我对物理学不是很了解，&rdquo;我努力回想着学过的所有科学知识，&ldquo;不是说，宇宙一直都在膨胀吗？越到未来，宇宙的体积就会越大，差不多就是类似这样的答案吧。&rdquo;  <br>
&ldquo;唔，我猜你就会这么说，可这个解释和熵增加的说法又有什么本质区别吗？照你的解释，宇宙的膨胀也好，熵的增加也好，如果确实能够观测到这些现象，就可以决定时间的流动方向；那么，如果观测不到这些现象，是不是说时间就没有流动性了？小竹田，你认为呢？假设我们闭上眼睛，这是不是就相当于我们观测不到外界的情况了？那么在这种情况下，我们能说时间也停止流动了吗？&rdquo; <br>
&ldquo;呀，当然不能这么说。就算闭上眼睛，还是能感觉到时间的流动，因为我们的头脑还能意识到时间的流动啊。&rdquo;  <br>
&ldquo;说得对，说得太对了！&rdquo;你兴奋得差不多要跳起来了，&ldquo;时间的流动和意识的流动根本就是一回事！是人类的意识构造出了时间的流动性！&rdquo;  <br>
&ldquo;不是那回事吧。虽然说人类的意识可以感觉到时间的流动，可那也不是你说的意思吧。&rdquo;  <br>
&ldquo;那好，你说说为什么意识可以感觉到时间的流动？&rdquo;  <br>
&ldquo;这应该是和记忆本身的特性有关。人民记得过去的事情，记不得未来的事情，这没有什么可奇怪的吧？也就是说，记忆就是和记录相同的东西。不单单是我们的意识具有记录的能力，还有像磁带、光盘，甚至纸张等等都有记录的能力。它们都可以记录过去的事情，但不能记录未来的事情：这些东西都和我们的意识具有相同的性质。你前面说，意识决定了时间的方向，照你的逻辑推下来，岂不是也可以说是纸和铅笔决定了时间的方向吗？&rdquo;  <br>
<br>
&ldquo;你知道&lsquo;薛定谔的猫&rsquo;吗？&rdquo;你突然没头没尾地问了我一句。  <br>
&ldquo;唔，知道一点。&rdquo;我记得那是一个比较复杂的理论，于是仔细想了想，回答说，&ldquo;那好像是用来责难量子力学当中的某个解释&mdash;&mdash;好像是叫作&lsquo;哥本哈根解释&rsquo;的思想实验。具体内容大概是这样的吧：假设有一个密闭的箱子，箱子里有一只猫和一颗放射性粒子。粒子的半衰期为一个小时。也就是说，在一个小时以内，这颗粒子发出放射线的几率恰好是50百分号.此外，箱子里还有一个监测放射线的装置，一旦监测到放射线，就会放出毒气来把猫杀死。那么，在一个小时之后打开箱子的盖子，看见死猫的可能性有50百分号，看见活猫的可能性也有50百分号.但不管是哪一种状态，至少在打开箱子前就已经决定下来了&mdash;&mdash;然而有些物理学家却不这么看。他们认为，在打开箱子之前，箱子里既有活着的猫，也有死了的猫，只是这两者都处于一种&lsquo;非实在化&rsquo;的状态，一直要到有人打开箱子的那一瞬间，其中一个状态才会被实在化，而另一个状态则会完全消失。&rdquo;  <br>
<br>
&ldquo;说得不错。这其实就是理解世界的一种方法。密闭的箱子里既没有活着的猫，也没有死了的猫。猫究竟是死是活，必须等到有人来把箱子打开，对猫的状态做出观察的那一瞬间才会决定下来。&rdquo;  <br>
&ldquo;嗯，但是这种考虑方法存在缺陷吧。要想确认猫的状态其实很简单嘛，我可以不打开箱子，只要摇一摇就行了。如果猫活着，它就会叫的。&rdquo;  <br>
&ldquo;摇箱子也是一种观察方式。在摇箱子的一瞬间里，活的猫和死的猫也就被实在化了。&rdquo;  <br>
&ldquo;用超声波扫描呢？&rdquo;  <br>
&ldquo;一回事。扫描的一瞬间就决定了猫的生死。&rdquo;  <br>
&ldquo;你既然这么说，那我问你，像婴儿的性别，也是在出生的一瞬间决定的吗？在此之前，孕妇怀着的既是非实在化的男性婴儿，也是非实在化的女性婴儿？&rdquo;  <br>
&ldquo;不错，不过，因为出生前都会使用超声波诊断婴儿的性别，所以实际上在诊断的时候性别就已经确定下来了。此外，像录像带的内容也可以说是在播放的前一瞬间才确定的；还有书信，在拆封之前它的内容也是不确定的。&rdquo;  <br>
&ldquo;接电话的时候呢？谁打来的电话也不能确定？&rdquo;  <br>
&ldquo;当然，那也是在接电话的一瞬间确定下来的。总而言之，所有的记录都并非是真实确定的记录，如果没有经过意识的观察，那么记录就不会实在化。从这个角度来说，我们所认为的记录其实只不过是我们意识的延伸而已。  <br>
&ldquo;再举个例子，比如说月球。在人类踏上它的表面之前，那里既是非实在化的荒凉的无生命的世界，也是非实在化的充满了生命气息的世界。但是随着人类的勘察，如今只有一个死寂的世界被实在化了，生命的世界也就随之归于寂灭&mdash;&mdash;说到底，我们并不是在观察一直存续着的现象，而是我们的观察导致了现象的实在化。&rdquo;  <br>
&ldquo;唔，你的想法倒是很有趣。但这种想法与其说是科学，倒不如说是哲学，因为它根本都是无法用实验证明的。&rdquo;  <br>
&ldquo;不是我的想法有趣，而是量子力学本身就这么有趣。按照量子力学的观点，在静态的层面上，所有的物质都由质子、中子、电子之类的粒子构成的。但在动态的层面上，在具体计算粒子运动的时候，量子力学又不把它们看作粒子，而是把它们当作波来进行计算。有趣的是，基于这种看法而得到的计算结果，竟然可以和实验结果吻合得相当好，而且无论是对粒子本身的性质的预测，还是对粒子运动方式的预测，都得到了大量实验结果的证实，所以人们也逐渐倾向于接受这一看法。在这一基础上，又有一些物理学家提出了更加古怪的理论，他们认为粒子在没有接受任何观察的情况下都以波的形式存在，只有在接受观察的时候，才会以粒子的形式表现出来。<br>
&ldquo;值得注意的是，这个理论虽然说的是微观粒子，但却很容易推广到宏观层面。&lsquo;薛定谔的猫&rsquo;就是推广的一种形式。箱子里作为宏观存在的猫，它的状态受到微观粒子状态的影响，于是在人们做出观察的一瞬间，猫的生死状态也就随之确定了。&rdquo;  <br>
&ldquo;你说的这些东西都不能算物理的范畴了。&rdquo;  <br>
&ldquo;但这确实是物理过程，物理学家们还专门给这个过程起了一个名字，称之为&lsquo;波函数坍缩&rsquo;，而且这个过程是不可逆转的，即使停止观察也不会返回到初始状态。对薛定谔的猫来说，如果打开箱子的时候猫已经死了，那么关上箱子后猫也不会活过来&mdash;&mdash;但是，这和时间完全没有关系。并不是时间的方向决定了死亡的不可逆转，而是意识的介入导致了这一情况。你知道这意味着什么吗？&rdquo;  <br>
<br>
我不明白，于是只是看着你，没有说话。  <br>
&ldquo;这意味着，时间的流变就等于意识的流变！如果我们能够控制意识的流变，那么就可以控制时间的流变了！&rdquo;  <br>
&ldquo;根本就是妄想。&rdquo;  <br>
&ldquo;认为时间有方向的想法才是妄想。&rdquo;你轻轻笑了起来，&ldquo;这么说吧……哪，我问你，你我为什么要头朝上脚朝下地站着？&rdquo;  <br>
&ldquo;……因为有重力呗。&rdquo;  <br>
&ldquo;不错，因为有重力，而且我们的大脑也感受到重力，所以才会保持我们的直立。当然，只要我们愿意，倒立也是可以的。时间也是一样。我们的大脑一定是感觉到了什么东西&mdash;&mdash;或者是宇宙的膨胀，或者是熵的增加，或者是粒子的衰变，反正总会有什么东西被感觉到了&mdash;&mdash;然后大脑才会将意识的方向&mdash;&mdash;实际上也就是时间的方向&mdash;&mdash;同这种未知的东西保持一致。但是现在，我想要把这个方向逆转过来，就像我打算倒立一样。&rdquo;  <br>
<br>
&ldquo;好吧，&rdquo;我明白自己的物理学知识不足以找到你理论中的漏洞，&ldquo;你说的意思我明白了，但这和立体定位放射治疗仪有什么关系？&rdquo;  <br>
&ldquo;你和我之所以能够保持身体直立，是因为大脑能够感知重力；而这个感知重力的器官其实就是隐藏在你我耳朵里的半规管。如果破坏了半规管，人就不能感知上下方向，也就无法保持身体的垂直了。同样的道理，我们之所以能够保持时间的流变方向，也是由于我们大脑中的某个器官能够感知到某些东西。假如把这个器官找出来破坏掉，我们也就可以不必再和时间的流变方向保持一致了。&rdquo;  <br>
<br>
&ldquo;这么说，你要患者的资料就是为了……&rdquo;  <br>
&ldquo;不错。我推测，时间知觉障碍症应该就是由于大脑中的时间感知器官损坏而导致的。如果在患者大脑的扫描信息中，能找到某些共通的不正常的部分，那么这些部分差不多可以肯定就是感知时间的器官了&mdash;&mdash;而且，我也确实找到了这些部分，那是大脑当中的一个很小的区域，只是几厘米大小，要想在不伤害到其他部分的情况下破坏这个部分，非要利用立体定向放射治疗仪不可。&rdquo;  <br>
<br>
&ldquo;你不是要真的破坏自己的大脑吧？&rdquo;  <br>
&ldquo;准确地说，我只是要破坏大脑中特定的部分罢了。这样的话，我就可以从时间的流变中解放出来了。&rdquo;  <br>
&ldquo;可是你能保证这么做没有问题吗？无论如何，你是在对大脑动手术啊。&rdquo;  <br>
&ldquo;只要没有损伤到其他部分就不会有问题。&rdquo;  <br>
&ldquo;可是你调查的那些患者都有各种各样不正常的地方，你怎么知道自己不会变得和他们一样不正常呢？&rdquo;  <br>
&ldquo;那是因为他们的大脑当中受损的不仅仅是时间感知的部分，在那部分附近的区域也受到了不同程度的损伤，所以他们才会表现出各种各样的精神障碍；如果只破坏时间感知区域的话，是不会有问题的。&rdquo;你有点不耐烦地说，&ldquo;浪费时间争论这种问题根本毫无意义，你还是赶快教我怎么操作这个设备吧。&rdquo;  <br>
尽管我很清楚，你设想的这个可怕计划根本就不该实行，可我就好象是被你催眠了一样，居然就按着你的要求开始想你讲解了。不过，从另一方面来说，我也并非是在完全听你的摆布。当时我心中所想的是，现在我还说服不了你，但是等到适当的时候&mdash;&mdash;比如说你不得不依靠我帮忙的时候&mdash;&mdash;我再来说服你放弃这个计划也不迟。  <br>
&ldquo;这个设备的使用方法很简单。只要将患者的头部固定好，送入处理室，关上门，然后在这个控制面板上选择&lsquo;X射线扫描&rsquo;，再点击&lsquo;开始&rsquo;就可以了。&rdquo;&nbsp;&nbsp;<br>
我用鼠标点了一下屏幕上的&ldquo;X射线扫描&rdquo;按钮，一条错误信息弹了出来。  <br>
&ldquo;处理室内无患者，本操作无法执行。点击&lsquo;确定&rsquo;按钮切换到演示界面。&rdquo;  <br>
我点了&ldquo;确认&rdquo;，屏幕上显示出模拟的大脑内部结构。图像根据双眼的视差进行了立体化处理，同时也可以很方便地进行横切处理和透视处理。  <br>
&ldquo;厉害啊！&rdquo;你赞叹了一声，&ldquo;要是我做学生的时候就有这种系统，肯定会认真努力去研究这个方向……  <br>
界面的操作方法我大概还知道一点，让我自己试试看吧。&rdquo;  <br>
你接过鼠标开始自己操作。看起来，你好像对操作电脑很熟悉，我看见你熟练地把光标移动到大脑的图像上，对它双击鼠标之后，大脑图像被放大显示了出来。  <br>
&ldquo;怎么输入要治疗的部位？&rdquo;你问道。  <br>
&ldquo;一般情况下，程序在扫描患者的大脑之后，都会自动定位若干个可能发生了病变的部位，我们要的就是从这几个部位中选择出真正发生了病变的部位就可以了。&rdquo;  <br>
&ldquo;不能手动操作吗？&rdquo;  <br>
&ldquo;你等等，我找找看。&rdquo;我点开帮助菜单，&ldquo;手动输入的方法有两种，一种是输入坐标位置，另一种是用鼠标直接在大脑图像上点击。看起来应该是鼠标操作比较简单……在治疗区域的表面用鼠标确定若干标记点，然后系统就会自动把这些点用一条平滑曲线连接起来，围出一块区域。如果这个区域不符合要求，还可以继续标记更多的点，点数越多，区域就越精确。&rdquo;  <br>
<br>
你按着我的解释用鼠标在图像上点选出一块区域，然后这块区域就显示成了绿色。接着你按下了&ldquo;开始治疗&rdquo;  <br>
的按钮，一条确认信息弹了出来。你再点了一下确认信息上的&ldquo;YES&rdquo;按钮，却又弹出一个新的窗口，要求你输入操作者的ID.&ldquo;这是什么？&rdquo;  <br>
&ldquo;安全措施。确保一定是具备资格的操作者才能够操作这样的设备。&rdquo;  <br>
&ldquo;你有资格吗？&rdquo;  <br>
&ldquo;唔，申请使用权的时候一起给我了。&rdquo;我报出一串数字。  <br>
你照着我说的把ID输进去。然后是最后的确认信息。YES.可以看到处理室里有一道红光闪烁了一下，画面上弹出一条新的信息：&ldquo;指定的部分已经治疗完毕。要继续治疗其它部分吗？&rdquo;  <br>
你看着屏幕上的提示信息，陷入了沉思。  <br>
&ldquo;怎么了？&rdquo;我有点奇怪地问。  <br>
&ldquo;小竹田，前面这些操作，能编个程序让它自动执行吗？&rdquo;  <br>
&ldquo;不可能。这个控制装置是治疗仪专用的，和普通的电脑不兼容，不可能自动执行。&rdquo;  <br>
&ldquo;那么，处理室里有控制装置吗？&rdquo;  <br>
&ldquo;怎么可能有呢？难道说要让患者自己给自己治疗吗？根本不会发生这种情况的。&rdquo;  <br>
&ldquo;现在不就是这样的情况吗？&rdquo;你微微闭上眼睛，沉吟着说，&ldquo;要不然，你帮我操作？&rdquo;  <br>
&ldquo;想都别想。&rdquo;  <br>
&ldquo;为什么？&rdquo;  <br>
&ldquo;如果你的理论有错误会怎么样？如果你找到的那个区域是维持生命存续必不可少的关键区域怎么办？就算不是必不可少的关键区域，这也毕竟是在对大脑内部动手术，稍有不慎就会让你变成废人。我虽然不是医生，但至少也知道会有什么严重后果。真要是发生这种事情，不要说你，就连我的下半辈子也跟着完了。如果真是因为我自己的原因倒也罢了，可如果是因为你自己的理论出错，那我的这个责任也担得实在太冤枉了。&rdquo;  <br>
<br>
你突然大笑起来。  <br>
&ldquo;原来如此。小竹田，你还留恋着你的人生啊。看起来，你对现在这个没有手儿奈的人生相当满足呢。&rdquo;你猛然间收住笑容，换作一副严肃的表情，&ldquo;但我不一样。我一直都牵挂着手儿奈。而且，我从当初就没有真的打算依靠你来解救手儿奈。&rdquo;  <br>
听到你的指责，我不禁重新审视自己刚才的言行。我为什么会说那样的话？这不是很难得的赎罪机会吗？难道我真的是一个自私自利，只知道考虑自己的小人？可是话说回来，手儿奈的死真的有我的责任吗？  <br>
你从大衣口袋里把手提电脑和手儿奈的照片一起拿了出来&mdash;&mdash;那件大衣破得几乎都和抹布没什么区别了。  <br>
&ldquo;我用这个东西代替我进行操作。&rdquo;  <br>
你很熟练地用一根电缆把手提电脑接到控制系统的鼠标键盘输入口上，又用另一根电缆接到显示器的信号输入端，接着就调用了一个不知名的程序。程序运行了一会儿后，立体定向放射治疗仪的处理室的门便打开了。&nbsp;&nbsp;<br>
&ldquo;我现在进去把头固定住之后，处理室的门就会自动关上，接下来的一切动作都会由这台电脑为我自动完成。不管我出了什么问题，都和你没有任何一点关系。即使警方传讯你，你也只需要把这台电脑那给他们看，就可以开脱罪责了。&rdquo;  <br>
&ldquo;等等，你要是不打麻药……&rdquo;  <br>
&ldquo;不需要打麻药，大脑内部根本没有感受痛觉的器官。&rdquo;  <br>
你进入处理室几秒钟之后，电脑程序就自动开始运行了。立体定向放射治疗仪的显示器屏幕闪烁起来，在疯狂地闪烁跳动着。我本来以为立体定向放射治疗仪这样的设备里面应该不会有声音传出，可实际上里面不但有声音，而且那声音听上去还相当可怕，几乎都不是人间该有的声音。听着那些声音，我的头发都竖了起来，全身的血液都仿佛要凝固了一样，恨不得用指甲把自己脸上的皮肤一条一条撕下来。而且就算死命捂住耳朵，那声音还是戳入了我的鼓膜，一直刺进我的大脑中。  <br>
<br>
我实在忍受不了了，放声尖叫起来。  <br>
不知道过了多久，那恐怖的声音终于停了下来。然后处理室的门又一次打开，你摇摇晃晃地从里面爬了出了。  <br>
&ldquo;你没事吧？&rdquo;我差不多也要被那声音弄得神经崩溃了，看见你出来，便赶快过去把你扶起来。你身子软绵绵地靠在我的肩膀上。  <br>
&ldquo;没事。我身上哪儿都不痛不痒，也不难受，只是好像休克了一会儿。&rdquo;  <br>
我支持不住你的体重，于是扶着你走到床边上，让你坐了下来。  <br>
&ldquo;奇怪啊？！&rdquo;你猛然看到了自己的手，把手握成拳头再张开，连着做了几次，&ldquo;小竹田，你有手表吗？&rdquo;  <br>
你抓住我的手臂拉到自己面前，盯着我手腕上的手表看了半天。  <br>
&ldquo;为什么！为什么没有变化！&rdquo;  <br>
你站起来，跌跌撞撞地冲到桌子旁边。电脑屏幕上正显示着当前的时间。你呆呆地看着上面的数字，过了一会儿，双手捂住脸，慢慢滑倒在椅子上。  <br>
&ldquo;什么地方弄错了，不应该这样的。&rdquo;你神经质似的扯着自己的头发，&ldquo;不行，就算这一次失败了，我还是不能放弃。&rdquo;  <br>
&ldquo;还是放弃了好，&rdquo;我安慰着你，&ldquo;对大脑内部动手术，能够平安结束就足够谢天谢地了。况且你自己对自己的大脑处理过了，现在再想做什么都做不成了。&rdquo;  <br>
确实，你能够安然无恙地从处理室里出来，已经很让我惊讶了。从你进去的时候开始，我就一直担心你会死在里面，或者至少也会被变成一个废人。现在看你的身体似乎没有任何不妥，我也稍稍安心了一点。  <br>
&ldquo;你！&rdquo;猛然从椅子上站起来，但身子晃了一下，幸好及时扶住了桌子，&ldquo;你就一直光想着你自己！&rdquo;  <br>
我大吃一惊。你说的这是什么话？难道你就真的不是只考虑你自己吗？  <br>
&ldquo;……算了，你这样也没什么不对。只是目前看起来，我预想的计划确实失败了，我的意识确实没有从时间的流变中解放出来……到底是什么原因呢……对了！&rdquo;你把汗津津的手掌按在我肩上，&ldquo;小竹田，你刚才一直在看着电脑屏幕，看到什么了？程序是不是正常运行了？&rdquo;  <br>
&ldquo;……我不知道，&rdquo;我有些胆怯地说，&ldquo;我没看电脑屏幕，因为，刚刚的声音实在……&rdquo;  <br>
你一把放开我，转回头去看立体定向放射治疗仪的屏幕，一边看一边自言自语：&ldquo;程序里什么地方应该有BUG，所以对大脑的处理失败了……早知道还是不应该依靠电脑……可是，我的大脑已经处理过了，而且还是错误的处理……&rdquo;你忽然抬起头，转身盯住了我的脸，&ldquo;此刻就是你赎罪的时刻了。&rdquo;  <br>
啊，你终于说出这句可怕的话了。你终于要对我的大脑动手了。为什么我就逃脱不了这样的命运？我知道我应该断然拒绝你。但是最终，从我的口中却说出了完全不同的回答。  <br>
&ldquo;好的。那么就请你操作吧。&rdquo;  <br>
为什么会说出那样的话，至今我自己也没有明白。难道说我当时真的是被你催眠了吗？或者是因为看到你安然无恙，所以我对整件事情的看法也变乐观了吗？呀，说不定在我内心深处，其实是在盼望着能接受这样的处理吧。把我自己的性命交到你的手里，这总可以向你证明我不是一个自私自利的小人了吧？你应该也相信我确实是想补偿自己对手儿奈犯下的罪责了吧？&nbsp;&nbsp;</p> <a href="http://hi.baidu.com/touchthememory/blog/item/ba2c20d8f31a443333fa1c35.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/touchthememory/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/touchthememory/blog/item/ba2c20d8f31a443333fa1c35.html#comment">查看评论</a>]]></description>
        <pubDate>2008-10-24  19:34</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[412858310]]></author>
		<guid>http://hi.baidu.com/touchthememory/blog/item/ba2c20d8f31a443333fa1c35.html</guid>
</item>

<item>
        <title><![CDATA[【强文】醉步男 □ 小林泰三  【转】]]></title>
        <link><![CDATA[http://hi.baidu.com/touchthememory/blog/item/e83d37f46ccb5868ddc4742f.html]]></link>
        <description><![CDATA[
		
		<p>醉步男 <br>
□ 小林泰三 <br>
【日】小林泰三 著 <br>
丁丁虫 译 <br>
<br>
我不知道其他人是否也有类似的经历，至少我经常会遇到一些比较奇怪的事情。比如说，某一天想去一家小饭馆的时候，突然就发现自己找不着那家小饭馆在哪里了。自己明明去过很多次，而且饭馆所在的那一带也都是自己平时经常去过的地方，饭馆的大概方位也还记得，可是就算一条胡同一条胡同地找下去，找到最后还是找不到。这时候我就会禁不住想，说不定这家店破产了，再不然就是搬家了。可是，过几天再路过那里的时候，突然又看见那家小饭馆，这就说明前几天没有找错地方，那么为什么当时就找不到呢？我想只能说我当时是被狸猫①迷住了，不然就没有什么更好的解释了。 <br>
<br>
<br>
有时候我也会想：到底这种事情是只有我一个人才经历过，还是不管是谁都曾遇到过呢？虽然我确实很希望知道答案，可是又不敢贸然去问旁人。因为如果直接去问了，而问出来的结果是这种事情竟然只有我一个人才经历过，以后再和这些人见面的时候，难免会觉得比较尴尬。处于这样的考虑，我到现在也没有问过旁人。 <br>
有间酒店就是这样的。那件酒店是我和朋友们参加完宴会或派对之后去的小酒店。在我的记忆里，去这间酒店时就算不预约，也从没有碰到过客满的情况，这一点还是让人比较满意的。反正找一间新的酒店也很麻烦，所以大家自然而然就经常到哪家店去，可走着走着，不知道什么时候那件酒店就在面前了；更古怪的事，如果换作白天，我即使走遍了那一带也找不见那家店，而且好像连店的名字都不是很清楚。有一回我试着问了问朋友们，他们都认为一定是我醉得太厉害了，连喝酒的地方都弄混了&mdash;&mdash;反正就是弄得我很难为情，于是后来再也没问过了。 <br>
<br>
有一天晚上，我又和一些朋友来到这间酒店。聚到一起喝酒的原因已经记不得了，总不外乎是谁换了工作，或者谁升了职之之类的事情。 <br>
&ldquo;但是，公司里我们的同学可越来越少了。&rdquo;有人说。 <br>
&ldquo;你弄错了吧？你以为那些号称辞职不干的家伙们真的是不干了吗？其实有不少人就是换了个地方继续工作，只不过谁都没有告诉罢了。&rdquo;我回答道。 <br>
&ldquo;不是不是，整整辞职的人确实有很多，&rdquo;另外一个人说，&ldquo;山田、佐仓、丸尾、野口，还有藤木，不都是辞职了吗？&rdquo; <br>
&ldquo;藤木是调动工作，&rdquo;我纠正说，&ldquo;那家伙去了亚马逊分公司。&rdquo; <br>
&ldquo;是吗？嗨，反正不管怎么说，辞了职的、换了工作的家伙相当多啊。&rdquo; <br>
&ldquo;那也就是说，&rdquo;又有个什么人说，&ldquo;我们都老了，在公司的年头越来越长，同学也越来越少了。&rdquo; <br>
&ldquo;你是老了，我可还不老。&rdquo; <br>
&ldquo;什么呀，我和你是同年的吧？&rdquo; <br>
&ldquo;我比你出生的还要早哩。&rdquo; <br>
&ldquo;是啊。所以你失业了，而我还在工作呢。&rdquo; <br>
大家有一句没一句地闲聊着，时不时冒出一阵哄笑。不知不觉间，又过去了好几个钟头，这时候便有几个人提出该回去了，于是大家都纷纷起身准备回家。糟糕的是，外头天气突变，居然下起了瓢泼大雨。大家都没带伞，商量了一下，都觉得冒这么大的雨冲到车站的话，全身肯定都要湿透，还不如几个人出钱合乘一辆出租车回家来得好一些。 <br>
<br>
然而合乘出租车的做法对我并没有什么好处，因为我家的方向和他们所有人都相反，没办法合乘一辆出租车。于是，我不得不让打算合乘的人先走，直到整个酒店里只剩下我自己一个人，孤零零地等着最后一辆出租车开过来。 <br>
不过，店里其实还有一个男子在。不知道为什么，我总觉得这个男子好像一直在偷偷观察着我。他的年龄和我差不多，看上去比流浪者强不了多少，穿的衣服又脏又乱，一眼就能看出他不是有稳定工作的人。他带着一副眼镜，脸上尽是弯弯曲曲的皱纹，眼镜一直不停地往下掉，是不是地要伸手去扶正它。整体看起来，我感觉这个男子虽然不大像是喝醉酒的样子，却总有一些不大对头的地方。 <br>
<br>
我被这个家伙观察了很久，多少觉得有点不大自在，于是也开始注意他，谁知道他察觉之后居然从座位上站起来，直接走到我的面前说：&ldquo;唔……冒昧打扰了，我想请问一下……你是不是认识我呢？&rdquo; <br>
我把那个男子的形象在头脑中迅速搜索了一遍。 <br>
&ldquo;对不起，我不认识你。你恐怕是弄错人了吧？&rdquo; <br>
&ldquo;啊，是这样。我明白了……原来如此……十分抱歉。不过，我并没有认错人。应该说，我对你非常了解，但既然你不清楚我的事情，那我就不能自称是熟人了……那么，打扰你了。&rdquo; <br>
他向自己的座位走去。 <br>
&ldquo;等一下，&rdquo;我叫住了那个男子，&ldquo;你说的是什么意思？你非常了解我的事情？你刚刚是这么说的吗？&rdquo; <br>
&ldquo;是啊，我了解你的事情。&rdquo;男子回答说，但并没有转过身，&ldquo;不过你好像完全不了解我的样子。&rdquo; <br>
男子继续往自己的座位走去。 <br>
&ldquo;等一下，&rdquo;我也站了起来，三步两步追上那个男子，&ldquo;那就是说，你刚刚还是弄错了。&rdquo; <br>
&ldquo;不是弄错了……不过反正都一样。对不起了。&rdquo; <br>
&ldquo;不一样吧？如果你确实了解我的事情，而我却有不认识你，那就是说，是我把你忘记了&mdash;&mdash;是这样吧？&rdquo; <br>
&ldquo;不，不是这样的。应该说，你从一开始就不认识我。毕竟按我对你的了解，你并不是那种会忘记大学同学长相的人。&rdquo;男子向我露出一点微笑。 <br>
&ldquo;你的意思是，你是我的大学同学？&rdquo; <br>
&ldquo;啊，不，应该不是。如果我是你的大学同学，那么你就是真的忘记老朋友的长相了&mdash;&mdash;呵呵，我不能说自己一定就是你的老朋友，不过即使是关系一般的同学，也总应该记得长相的。所以说，你既然不记得我，那么我就应该也不是你的同学了。&rdquo; <br>
我完全被弄糊涂了。这个家伙到底在说什么？他的话好像完全没有意义。难道说，这个家伙虽然从外表上看不出喝醉了，但实际上却是醉得一塌糊涂了？或者是说，真正醉得一塌糊涂的人是我？ <br>
&ldquo;在确认一下，你和我并不认识？&rdquo; <br>
&ldquo;是的，&rdquo;他点了点头，&ldquo;你完全没有关于我的记忆就证明了这一点。&rdquo; <br>
&ldquo;我问的不是这个，&rdquo;我有点不耐烦地说，&ldquo;我的事情是我的事情，但现在我想知道的是你的事情&mdash;&mdash;你知道我的事情，可我不知道你的事情，这样说没错吧？&rdquo; <br>
&ldquo;是的。&rdquo; <br>
&ldquo;那么，你和我到底是什么关系啊？&rdquo; <br>
&ldquo;这个啊……我不知道。应该没关系吧。&rdquo;他轻轻叹了一口气。 <br>
&ldquo;那么我换个问题好了。你为什么说你知道我的事情？&rdquo; <br>
&ldquo;因为你是我大学时候很要好的朋友。&rdquo; <br>
&ldquo;刚刚……就在十秒钟之前，你刚刚说过我和你之间没有关系，对吧？&rdquo;我确认道。 <br>
&ldquo;是的。&rdquo; <br>
&ldquo;可是你又为什么说我们是大学时代的好朋友呢？既然是好友，那么不管嘴上怎么说，事实上应该还是有很好的关系吧？&rdquo; <br>
&ldquo;不是。&rdquo;他回答说。我觉得，他的表情看上去似乎有点悲哀。 <br>
&ldquo;那么，是不是说我们以前是好友，但后来闹翻了，所以现在就成了毫无关系的人？&rdquo; <br>
&ldquo;不是……我想，现在也好，以前也好，我们都是毫无关系的。&rdquo; <br>
&ldquo;那你刚才为什么说我们两个人在大学里是很好的朋友？&rdquo;我愈加急躁，声调也高了起来。 <br>
&ldquo;十分抱歉，是我说错了。&rdquo; <br>
&ldquo;不是抱歉不抱歉的问题，而是你刚刚确实那么说过。你说，你之所以了解我，是因为我们在大学里是很好的朋友。&rdquo; <br>
&ldquo;是的。&rdquo;他似乎终于决定了什么，直视着我的眼睛说，&ldquo;我是那么说过。&rdquo; <br>
这个家伙是在戏弄我吗？差不多从第一句话开始，他就一直含含糊糊地说着完全没有头绪的话，这样的人，还是别去招惹他比较好吧，反正出租车就快来了。而且，这个男子大概也不是真的想和我说话，他应该只是随便想找个什么人聊聊。如果是这样的话，这家伙可真是太无聊了。 <br>
&ldquo;如果你的回答能再稍微清楚一点，那我可能会比较容易理解，但现在我却怎么也听不懂你的话，大概是因为我自己太笨了。十分对不起。&rdquo;我往自己的座位走回去。 <br>
&mdash;&mdash;不对。就这样回去的话，岂不是让他得逞了吗？他一定以为自己把我耍得团团转了。不行，无论如何，我也应该揭穿这个家伙的把戏，至少要让他知道我并不是那么容易被耍的人。 <br>
我走了回来。 <br>
&ldquo;你知道我的名字吗？如果你的确是我的好友，总应该知道我的名字吧。&rdquo; <br>
&ldquo;血沼壮士。&rdquo;<br>
太简单了。刚刚和朋友喝酒的时候就有不少人喊我的名字。这个男子肯定就是那时候听见的。 <br>
&ldquo;我的生日呢？&rdquo;我紧接着问。 <br>
&ldquo;十一月二十八日。&rdquo;他也紧接着回答。 <br>
&ldquo;血型？&rdquo; <br>
&ldquo;AB型。&rdquo; <br>
这是怎么回事？难道说，这个家伙很早以前就打算好了要找我的麻烦，所以专门对我做了许多调查？可是他到底有什么企图呢&mdash;&mdash;啊，我还是让他报报自己的名字看看，说不定真是我多年前的朋友呢。 <br>
&ldquo;那你的名字是？&rdquo; <br>
&ldquo;小竹田丈夫。&rdquo; <br>
从没听过这个名字。这到底是怎么回事？难道是这个自称小竹田的男子在给我下什么圈套？再不然就是我醉得太厉害一，以至于连自己的好友都忘记了？ <br>
&ldquo;那么，小竹田先生，关于我，你还知道些什么事情呢？&rdquo; <br>
&ldquo;你从初中到高中，一直都希望成为一名诗人。&rdquo; <br>
确实如此，不过，在中学时代，本来就有很多人都希望自己能够成为诗人吧。 <br>
&ldquo;一直到大学毕业为止，你一共存下了五本诗集。&rdquo; <br>
诗集的册数居然还被他随口说对了。不过能坚持写十几本诗集的人本来就很少。 <br>
&ldquo;但在大学毕业以前，你就把那些诗集全都给烧了。所以关于那些诗集的事情，除了你自己以外，其他人都不知道。&rdquo; <br>
偶然，肯定是偶然。纯粹是碰运气瞎猜的。要不然是我曾经把诗集的事情告诉过某个人了？不可能，这件事应该连家里人都不知道的。除非……这个男子真的是我的老朋友？ <br>
&ldquo;那五本诗集的名字，分别叫《春之诗》、《夏之歌》、《秋之句》、《冬之咏》，还有一本叫《无题》。&rdquo; <br>
我僵住了。我有一种预感，这件事也许根本没有一个合理的解释。我有点恶心，想吐。我怀疑这是个梦。可是，它又是真实发生在我面前的。我浑身冰冷。不能再和这个男子说话了，必须马上停止。可是就算马上停止，恐怕都已经太迟了。我要保持清醒。无论如何都要从这里逃出去。我无声地祈祷着。 <br>
&ldquo;出租车来了。&rdquo;从酒店的门外传来了出租车司机的声音。 <br>
谢天谢地，祈祷应验了。可我浑身还是冷得像冰一样。我头脑中盘旋着无数的可能，却始终找不到一个足以让人信服的解释。幸好出租车来了，可以不用再管这些事情了，终于可以逃出去了。 <br>
&ldquo;真是很有趣。&rdquo;我的嗓子干渴得难受，只能嘶哑着声音向那个男子&mdash;&mdash;小竹田丈夫&mdash;&mdash;说，&ldquo;但可惜的是，这个戏法太出奇了，所以反而让人难以置信。不过，我这个人好奇心比较重，对这种事情还算有点兴趣。这样吧，如果方便的话，明天晚上，还是在这里，我再向你请教，你看怎么样？&rdquo; <br>
&ldquo;……有点困难啊……如果真的要明天在这里见面的话，我就不得不熬一个通宵了。&rdquo; <br>
这家伙在说什么啊？ <br>
&ldquo;你的意思是，你没有住的地方吗？那么，住在我家如何？不过，因为家里还有内人……&rdquo;我猜到了他的想法，于是抢先说。 <br>
&ldquo;当然不行。那样的话可就太失礼了。&rdquo; <br>
&ldquo;那么，我介绍一家旅馆给你，如何？那家旅馆也是我经常去住的……&rdquo; <br>
&ldquo;不是因为住宿的问题。&rdquo;那男子坦然地说，&ldquo;实际上，我的家就在这儿附近，直接回家就可以了。&rdquo; <br>
&ldquo;那为什么又说要熬夜呢……冒昧问一下，是不是因为有什么不好的事情发生了，你才来这家店的？&rdquo; <br>
&ldquo;啊，不是，不是那样的事情。我的意思是，如果不熬通宵的话，明天大概就来不了这里了。&rdquo; <br>
&ldquo;为什么？&rdquo;我又开始急躁起来了。 <br>
&ldquo;唔……不太好解释，因为事情很复杂，一时半会儿说不清楚。而且，就算我说了，你也未必相信……一定要我解释的话，我只能说，到明天的时候，我就不在了。&rdquo; <br>
&ldquo;&lsquo;不在了&rsquo;是什么意思？是要离开这个城市了？旅行？搬家？&rdquo; <br>
&ldquo;不是的，是我哪里都不在了。&rdquo;男子低声回答道。 <br>
&ldquo;呃？难道……对不起……你的意思是说，你今天晚上就会……死？&rdquo; <br>
&ldquo;啊，不是死的意思。我的话确实不太容易理解。这么说吧，从你的角度来看，明天是我不在了；而从我的角度来看，明天就是你不在了&mdash;&mdash;但不管从哪个角度看，都不能说对方死了。&rdquo; <br>
这个家伙还是在戏弄我吧？或者是打算诈骗我？如果他确实准备好了要诈骗窝，那他事先肯定会对我做一番充分的调查，这就可以说明为什么他会知道我的名字和生日之类的信息了。 <br>
&ldquo;客人，出租车在等着呢。&rdquo;酒店门口传来司机有些不耐烦的声音。 <br>
&ldquo;对不起，马上就来。&rdquo;我向外答应一声，转回头对男子说，&ldquo;既然如此，那就只有这样了。出租车还在外面等着呢，我先告辞了。&rdquo; <br>
我走出酒店，向出租车走去。 <br>
还不错，没出什么事。就算那个男子存心诈骗我，可只要我不理会他，他就没办法把我怎么样。不过话说回来，如果我没有赶快离开的话，说不定就要上当了。 <br>
出租车司机大概是等得太久，憋了一肚子的闷气，所以我一走到车子的前面，车门便猛地弹了开来。我自己觉得理亏，于是装着没有注意的样子，直接坐到里面的座位上，抱起双臂，闭上眼睛，回想那个男子话中的含义。 <br>
&mdash;&mdash;那家伙为什么会说起诗集的事？是为了取信于我？以为只要说出诗集的事，我就会相信这个不认识的男子是我大学时代的好友？不对，那家伙自己说过他不是我好友。那么，他到底有什么目的呢？ <br>
&ldquo;请问你要去哪里？&rdquo; <br>
他为什么会知道诗集的事？他又为什么会选我做目标？ <br>
&ldquo;我还是不走了。&rdquo; <br>
&ldquo;什么？&rdquo; <br>
&ldquo;我暂时还不打算回去。&rdquo; <br>
&ldquo;什么意思啊！你先叫了出租车，叫来之后又让我等了这么长时间，现在又说不走了&mdash;&mdash;开玩笑也不能这么开吧？&rdquo; <br>
&ldquo;对不起，是我不对。&rdquo; <br>
&ldquo;虽然说了对不起，可到底这种做法也太过分了吧。我开车到这里的时间加上等待这么久的时间，这些损失该怎么算啊？&rdquo; <br>
我从钱包里取了几张钞票出来。 <br>
&ldquo;这样你看可以吗？我想，即使把我送到家里，大概也不过这么多钱吧。这样你就应该没有损失了&mdash;&mdash;而且实际上你还节约下了送我回去的时间，你还是占了便宜的，对吧？&rdquo; <br>
&ldquo;呃？这样可以吗？不是不是，我虽然这么说，但并不是这个意思……这样子总不太好吧。&rdquo; <br>
&ldquo;没关系，本来就是我不对，请收下吧。&rdquo; <br>
&ldquo;那样的话，我就不客气了。&rdquo; <br>
司机收下钱，等我下了车之后，很快就把车开走了。 <br>
接下来&mdash;&mdash;那个家伙，你既然让我蒙受了损失，就必须给我一个说得过去的解释！&mdash;&mdash;一团怒火在我胸中升起。为什么要像一个小孩子似的，被人家稍稍吓唬一下就忙不迭地想要逃跑呢！ <br>
我踩着重重的脚步，怒气冲冲地回到酒店里。 <br>
那男子正坐在收银台旁边的座位上，面前酒杯里的加冰威士忌已经喝完了，剩下的冰块也渐渐化开，杯底积了一层薄薄的水。 <br>
&ldquo;小竹田先生！&rdquo;我大声喊道。 <br>
他好像吃了一惊。 <br>
&ldquo;啊，血沼先生，出租车开走了吗？&rdquo; <br>
&ldquo;不是。我忘记了东西，所以回来了。&rdquo;我在他旁边坐下，&ldquo;实际上，是我忘记听你说完剩下的话了。如果就这么回去，心里头实在不舒服，何况我已经知道，自己丢失了一部分有关过去的记忆。&rdquo; <br>
&ldquo;丢失了记忆？&rdquo;那男子脸上露出怀疑的神色，&ldquo;你应该没有丢失记忆吧。&rdquo; <br>
&ldquo;你不是告诉过我，你是我的好友吗？可我却完全没有那样的记忆，这不就是我的记忆丢失了吗？&rdquo; <br>
&ldquo;啊，恐怕不是吧……一定要说丢失记忆的话，恐怕也应该说是我的记忆丢失了。因为，血沼先生，你和我确实不是好友，只不过在我的头脑当中存有这样的记忆，，以为你是我的好友罢了。&rdquo; <br>
&ldquo;你的意思是，&rdquo;这个男子说的话越来越莫名其妙，看来我留下来是个错误，还是应该直接回家才对，&ldquo;你自己的记忆出错了？被植入了虚假的记忆？&rdquo; <br>
&ldquo;我的记忆是真实的，只不过，关于两人是好友的部分并不是事实。&rdquo; <br>
&ldquo;你这话很矛盾啊……&rdquo; <br>
&ldquo;我知道我的话不是很容易理解。这样说吧：首先，很明显，你并不知道关于我的事情，所以你和我并没有上过同一所大学。&rdquo;小竹田的目光并没有落在我身上，而是落在了酒店墙壁上某个遥远的地方，&ldquo;其次，对于我来说，我本来期望你能了解一些关于我的事情，这样说不定就有可能帮助我找到过去的某些位置的片段&mdash;&mdash;但是，现在的结果却是让你完全陷入了谜团之中。&rdquo; <br>
<br>
&ldquo;明白了&mdash;&mdash;啊，不是，是完全不明白。总而言之，出问题的不是我，而是小竹田先生你？&rdquo;<br>
&ldquo;确是如此，&rdquo;他点了点头，&ldquo;而且出的问题极其怪异，简直就不可想像。&rdquo; <br>
&ldquo;那么我有什么能做的吗？&mdash;&mdash;既然我对于你而言，是你的一个好友？&rdquo; <br>
那男子微微抬起头，然后振奋起精神说：&ldquo;我……很孤独。&rdquo; <br>
&ldquo;说不定我可以帮忙。是精神上的问题吗？&rdquo; <br>
&ldquo;是的。&rdquo; <br>
&ldquo;那，你去接受治疗了吗？&rdquo;我确信自己抓住解决问题的关键了。 <br>
&ldquo;治疗……那是不可能的。&rdquo; <br>
&ldquo;你怎么知道？去看过医生了？&rdquo; <br>
&ldquo;我就是医生。&rdquo;男子突兀地说，然后看着我笑了笑，&ldquo;不，当然不是，不过说是医生也不算错吧。呀，总之我实际上并不是医生。&rdquo; <br>
&ldquo;那么就请和我说说看吧。&rdquo;我轻吁了一口气说：&ldquo;不过，最好能按着顺序说，这样我可能更容易理解一点。&rdquo; <br>
&ldquo;血沼先生，你没有听我说话的义务啊。&rdquo;他微笑着说，&ldquo;勉强自己陪我的话，你自己也会不愉快的。&rdquo; <br>
&ldquo;我确实没有听你说话的义务。但是&mdash;&mdash;&rdquo;我指着小竹田说，&ldquo;我想你有同我说话的义务。&rdquo; <br>
他好像吃了一惊。&ldquo;这又是怎么说的？&rdquo; <br>
&ldquo;你本来可以不和我说话，但你还是说了，而且说的都是些很难理解的东西。就拿你来说，如果听到某些事情完全不合逻辑，但又有确凿的证据表明这些事情都是真实的&mdash;&mdash;更重要的是，话说到一半的时候还停下不说了，那么你会有什么样的感觉？&rdquo; <br>
&ldquo;如果那样的话，&rdquo;他想了想，慢慢地回答说，&ldquo;我大概会觉得很难受，应该会觉得总有什么地方不对劲吧。&rdquo; <br>
&ldquo;说不定整个晚上都睡不着觉吧。&rdquo; <br>
&ldquo;唔……不过，随着时间一天天过去，渐渐地也就会忘记了吧。&rdquo; <br>
&ldquo;你也许会忘记，可我是个有点神经质的人，现在遇上了这种事情，说不定此后一生都会在不安中度过。&rdquo; <br>
我感觉现在自己已经掌握了谈话的主动权，于是进一步用命令的口气说，&ldquo;不管怎么说，小竹田先生，如果不是因为你，我这一生恐怕都不会听到那些奇怪的事情。所以，请你承担起你应该承担的责任。&rdquo; <br>
&ldquo;……就算是我的责任，可我到底该怎么做才好呢？&rdquo; <br>
&ldquo;很简单，你给我一个合理的解释就可以了。&rdquo; <br>
&ldquo;即使我说的都是事实，你还是会觉得难以理解的。&rdquo; <br>
&ldquo;能否理解，最终要由我自己来判断。你还是先说说看吧。&rdquo; <br>
&ldquo;但是……&rdquo; <br>
&ldquo;再磨蹭下去这里就要关门了。快说吧。&rdquo; <br>
于是，男子开始了讲述。 <br>
我&mdash;&mdash;小竹田丈夫，和你&mdash;&mdash;血沼壮士，我们两人在同一年里考入了同一所大学的同一个专业，恰好我们又是同乡，所以很快就成了要好的朋友。在大学里，我们两个都没有什么特别出众的地方。学业上我们都不是顶尖的学生，体育上也没有什么出色的表现，四年里我们就这么平平淡淡地过来了。到毕业的时候，我们两个人都不想马上参加工作，于是又结伴去考研究生&mdash;&mdash;现在回想起来，大学四年里，只有考研那段时间是在认真学习吧。不过考上研究生之后，我们又恢复了老脾气，加上两个人都分在同一间研究室，于是每天就在校园里漫无目的地到处闲逛。 <br>
<br>
有一天，研究室里分来了几个大学四年级的学生。通常来说，每年四五月份的时候都会有这种分配。但那些分配来的学生往往都要等到研究生入学考试结束，暑假休完之后才会真正到研究室学习，所以那时候我们都没注意到新分配来的这些学生里还有一个女生。实际上，我们直到收到新生欢迎会的邀请函，看见上面竟然有一个女性的名字的时候，才注意到那个女生&mdash;&mdash;菟原手儿奈的存在。 <br>
<br>
那时候，我已经有过几次恋爱的经历了，不过次数并不太多，而且每一次持续的时间都不太长，往往也就是在几个月内就结束了。其实说是结束，也不是那种很明确的分手，只是见面的次数不知不觉间越变越少，慢慢到最后一次面都不见了，也就相当于分手了&mdash;&mdash;换句话说，恋爱关系是自然而然地消失了。一些恋爱经验丰富的朋友经常会说，我这个样子其实根本就是还没有开始真正的恋爱。我被他们说得多了，自己也觉得有些失败，所以暗暗下决心要尝试一次真正的恋爱看看。恰好在这时候，手儿奈出现了。<br>
下定了决心的我，在新生欢迎会上坐到了手儿奈的旁边。为什么会做出那样的举动，至今我都不太明白，也许是一时出现的灵感吧。而当我察觉到你一直在自己的座位上注视着手儿奈的时候，我也突然明白自己必须要赶快行动，否则，说不定什么时候就被你捷足先登了。至于为什么我会注意到你的行为，这恐怕也是某种突然闪现的直觉吧。 <br>
<br>
&ldquo;嗯……菟原小姐，&rdquo;我的声音听上去比平时高了一度，&ldquo;那个……你的名字，是不是有变音，该怎么读呢？&rdquo; <br>
该怎么读，我当然是知道的。之所以这么问，其实只是为了寻找一个说话的机会。 <br>
&ldquo;呃？&rdquo;突然被人问话，手儿奈稍稍吃了一惊，&ldquo;啊，我的名字应该被念作&lsquo;taikaona&rsquo;。&rdquo; <br>
&ldquo;有什么含义吗？&rdquo; <br>
&ldquo;是古书里的名字，大概是传说什么的。不过，这个名字的含义大概也正被彻底改变着呢。&rdquo; <br>
我不明白手儿奈的回答是什么意思。什么叫&ldquo;含义正被彻底改变着&rdquo;？是古书的内容被改写了吗？我考虑着手儿奈说的话的意思，交谈自然就在中途停了下来，我们两个之间出现了冷场。 <br>
我犹豫了一下，深深吸了一口气，开始寻找一个新的话题。 <br>
&ldquo;菟原这个姓，好像也是很难写的吧。&rdquo; <br>
&ldquo;是啊，经常有人这么说呢。&lsquo;菟&rsquo;是一种草的意思。我父亲的老家在乡下，那里好像全都是叫图苑的人。&rdquo; <br>
&ldquo;哦，你父亲的老家在哪里？&rdquo; <br>
手儿奈皱着眉头回想着。&ldquo;对不起，我很久没碰地理书了。&rdquo; <br>
&ldquo;很久没碰地理书？可是，父亲的老家总该记得的吧？&rdquo; <br>
&ldquo;嗯，有点奇怪吗？我以前还是记得的，但时间长了，慢慢地就懒得一个一个重新记起来了。&rdquo; <br>
&ldquo;啊，这并不奇怪啊。&rdquo;我还是不明白手儿奈的意思，于是又鼓起勇气转了一个话题，&ldquo;菟原小姐有什么爱好吗？&rdquo; <br>
&ldquo;石头的气味。&rdquo; <br>
&ldquo;呃？&rdquo; <br>
&ldquo;石头的气味就是我的爱好啊！&rdquo; <br>
&ldquo;石头……是什么特别的矿石吗？&rdquo; <br>
&ldquo;唔唔，就是路边普通的石头。&rdquo; <br>
&ldquo;可是，普通的石头什么气味都没有啊。&rdquo; <br>
&ldquo;啊，是那样的吗？我还没注意到呢。这么说，石头的气味已经没有了呢。&rdquo;手儿奈的眼镜恶作剧似的闪耀着绿色的光芒。 <br>
啊，她是在取消我吗？是取笑我太认真了？还是取消我这个人没有什么幽默感？我是不是应该开一个美国式的玩笑让她看看呢？算了吧，如果一直都说这些不着边际的话，那到晚会结束都没个完。我还是直接问一些比较关键的问题试试看吧。 <br>
&ldquo;菟原小姐，你现在……那个……有男朋友了吗？&rdquo; <br>
&ldquo;为什么会问这种问题呢？&rdquo;手儿奈的表情变得严肃起来。 <br>
完了，她讨厌被人问到这种问题吗？现在我该怎么回答才好呢？ <br>
&ldquo;没什么特别的理由，只是刚好想知道一下罢了。&rdquo;我想不出什么好的借口，只得这么说。 <br>
&ldquo;我有没有男朋友的事情，你只是&lsquo;刚好&rsquo;想知道一下吗？&rdquo; <br>
&ldquo;啊，不是，是哪个……是因为我比较关心菟原小姐的事情啊。&rdquo; <br>
手儿奈微微侧着头，注视着我说：&ldquo;小竹田先生是喜欢我吗？&rdquo; <br>
手儿奈说出那句话的瞬间，我忽然觉得四周变得一片静寂，整个会场上似乎只剩下我和手儿奈两个人。 <br>
&ldquo;要说喜欢嘛……&rdquo; <br>
&ldquo;或者是讨厌？&rdquo; <br>
&ldquo;不，是喜……喜欢。&rdquo;啊，我这个家伙，居然说出来了。在这样的场合下，这样的状况下。 <br>
&ldquo;我对你的感觉很普通。&rdquo;在周围的喧闹嘈杂中，手儿奈淡淡地说，&ldquo;不过，因为刚刚认识，所以也没有什么讨厌的感觉。&rdquo; <br>
不知道发生了什么事情，会场里的人们突然都大笑了起来。我瞥见你也一起大笑着，心忽然放了下来。 <br>
&ldquo;这么说，如果你还没有讨厌我的话，明天一起去看电影好吗？电影的名字叫《沉默的山脉》，明天是小范围的预演，我刚好有两张票。&rdquo;我知道有几个学弟有票，今天晚上去抢他们两张就行了。 <br>
&ldquo;啊，那部电影非常有意思啊。&rdquo; <br>
&ldquo;呃？你已经看过了吗？不对吧，明天才是第一场预演啊，你是在哪里看的呢？&rdquo; <br>
&ldquo;是在露天电影院看的。&rdquo; <br>
&ldquo;呃？没有道理吧，你是不是和别的电影弄混了？&rdquo; <br>
手儿奈忽然高声笑了起来。<br>
&ldquo;生气了吗？&rdquo;我不安起来。期待许久的机会就这样彻底断送了？&ldquo;不是真的生气了吧？&rdquo; <br>
&ldquo;没有没有。&rdquo;手儿奈的眼睛又开始闪烁起绿色的光芒，&ldquo;是啊，还没开始预演的电影我居然早就在露天电影院看过了，当然是很奇怪的事情啰。&rdquo;然后她又大笑起来，等到笑完之后，才对我微笑着说，&ldquo;那明天我们在哪里见面呢？&rdquo; <br>
就这样，我和手儿奈开始交往了。从那时候开始，我们每个星期少则约会一次，多则约会五六次，所有认识我们的人，也包括我自己，都认为我们确实是一对亲密的恋人了。 <br>
手儿奈虽然不是那种闭月羞花的美女，却有一张孩子般可爱的脸庞，对于男性来说，似乎有一种天然的亲和力。她的身材虽然并不如何出众，但这种像孩子一样略显丰满的体态也能让男子的心里有一种痒痒的感觉。和这样的手儿奈一起漫步在校园里，我总会有一种情不自禁的自豪感。 <br>
&ldquo;这朵花的香味，从音乐的音阶上来说，就是尖锐的&lsquo;LA&rsquo;。&rdquo; <br>
&ldquo;尖锐的&lsquo;LA&rsquo;？什么意思？闻这朵花的香味的时候可以听到声音？&rdquo; <br>
&ldquo;唔唔，不是那样的意思。这个香味和尖锐的&lsquo;LA&rsquo;是一回事。小竹田不这么认为吗？&rdquo; <br>
&ldquo;呃？可是，声音是声音，气味是气味。你的话很奇怪呀。&rdquo;我看见手儿奈认真的样子，忍不住笑起来。 <br>
&ldquo;讨厌啦，把人家当成傻瓜一样。&rdquo;手儿奈越来越可爱了，&ldquo;前几天也是这样的。我找到好吃的巧克力糕点店，告诉你糕点的味道的时候，你也是这么大笑的。&rdquo; <br>
&ldquo;可是，那是因为你说糕点的味道是绿色的啊……&rdquo; <br>
&ldquo;不是绿色，是红里带一点紫的颜色啦。&rdquo; <br>
&ldquo;反正我觉得那糕点的颜色很奇怪。&rdquo; <br>
&ldquo;颜色还是普通的颜色，就是巧克力、冰淇凌和水果混合起来的颜色呀。只不过味道是红里带一点紫的。&rdquo; <br>
我笑了起来。 <br>
&mdash;&mdash;然而，今天再回想起来，手儿奈应该是真的听到了香气，看到了味道。她有着一颗自由的心，对于什么是声音，什么是颜色，并没有常人那种死板的概念。我越来越觉得，在手儿奈的身上散发着一种奇妙的，难以言喻的魅力。 <br>
&ldquo;手儿奈，我以前和你说过的，你应该去结识一些朋友。&rdquo;我温柔地笑着说，&ldquo;怎么样，找到人选了吗？&rdquo; <br>
&ldquo;唔，找到了。我本来并不是特别想要交朋友的，不过你既然说了，我就开始注意了。有一次我在上课的时候看到有人拿着同样的讲义，于是就和她交上朋友了。&rdquo; <br>
&ldquo;哦，是怎么交上朋友的呢？&rdquo; <br>
&ldquo;很普通啦。下课以后，我走到她的座位前面说，&lsquo;我叫菟原手儿奈，我想和你交朋友。能告诉我你的名字吗？&rsquo;&rdquo; <br>
我再一次大笑起来，环抱住手儿奈。即使是今天，我再一次回想起这件事的时候，依然觉得那是我人生中最美好的时刻。 <br>
&ldquo;我至死也不离开你。&rdquo; <br>
&ldquo;真的？&rdquo; <br>
&ldquo;嗯，真的。&rdquo; <br>
&ldquo;直到死？&rdquo; <br>
&ldquo;嗯。&rdquo; <br>
&ldquo;直到谁死？&rdquo; <br>
&ldquo;嗯？&rdquo; <br>
&ldquo;直到我死的时候？还是直到小竹田君死的时候？&rdquo; <br>
&ldquo;都一样，你如果死了，我也就死了。&rdquo; <br>
&ldquo;可是，就算小竹田君真的死了，我也不会死的。&rdquo; <br>
手儿奈的话让我感到微微一震。 <br>
&ldquo;没关系，小竹田君不会死的。即使我死了，小竹田君也不会死的。可怜的小竹田君……&rdquo;她把嘴凑到我的耳边轻轻地说，&ldquo;你说假话哦。&rdquo; <br>
我知道手儿奈的性格绝不是卖弄的那种，但她举手投足之间自然流露出来的魅力，却常常会吸引异性灼热的目光，于是便常常会有男子趁我不在的时候向她求爱。当然，手儿奈决不是一个轻浮的女子，对于吸引异性的种种事情，她其实是一无所知的。可以说，这种影响力更多的是一种与生俱来的本能，而不是她刻意追求的效果。 <br>
从她的角度来说，她只不过是想要尽可能巧妙而适当地接待那些朋友罢了&mdash;&mdash;然而我那时还是个孩子，远不能理解这一点，所以在不知不觉间，我心中嫉妒的火焰便愈燃愈烈了。如果说在一开始我的嫉妒还只是小小火苗的话，那么每当我看到她又被男子追求的情景，我心中的嫉妒之火就又会燃烧得猛烈一分。 <br>
终于有一天，当我又一次看到她和某个纠缠了她很久的男子在一起，而那个男子又一次要求和她约会的时候，我心中最原始的野性终于爆发了出来。<br>
<table class="wr" cellspacing="0" cellpadding="0" border="0">
    <tbody>
        <tr>
            <td class="gray14"><cc></cc>&mdash;&mdash;手儿奈！你就这么喜欢被人邀请吗？这样的话，你最好事先就告诉我！为什么一边享受别人求爱，一边假惺惺地把我的名字挂在嘴边？你喜欢看男人因为你打架是吗？那好，我今天就满足你的愿望！ <br>
            我从后面一把抓住正在和男子说话的手儿奈的手，用力把她的身子强行扳到面朝着我的方向。手儿奈吃了一惊，不过等她发现拉住她手的人是我的时候，瞳仁里便又闪烁起狡黠的绿色光芒。 <br>
            &ldquo;哎呀，原来是小竹田君啊。你是想吓我一跳吧。&rdquo; <br>
            我不理睬她故作乐观的回答，带着深深的怨气咬着牙问：&ldquo;你到底在和这个家伙说什么？在订约会的时间？&rdquo; <br>
            &ldquo;呃，什么呀？&rdquo;手儿奈真的吃惊了，&ldquo;我正在和这位坂森君说美芦的事情。美芦就是我以前和你说过的那个网球部的朋友，坂森君和她在同一个俱乐部，他又曾经看见我和美芦在食堂一起吃饭……今天坂森君刚好遇到我，就和我说起关于她的事了……&rdquo;手儿奈的视线在我和那个叫坂森的人之间跳跃着，有点难为情地解释说。 <br>
            我根本不听手儿奈的解释，也完全不理会坂森的存在，只是伸手抓住手儿奈的肩膀，一边摇着她的身子一边大喊道：&ldquo;多少回！多长时间！你说，你说，你说！想拿这种借口骗我，当我是傻子吗？你们到底在干什么？ <br>
            告诉我，告诉我！&rdquo; <br>
            &ldquo;我没有骗你！我说的都是事实！&rdquo; <br>
            其实，我自己也明白这一点。手儿奈是无辜的。退一万步说，就算手儿奈真的是在和别的男子约会，甚至订婚、结婚，对我这个和她非亲非故的人来说，也根本没有阻止她的权力。但是，那时候的我完全不懂得宽容，只要一想到我的手儿奈在和别的男人说话，我全身的血就像冲到了头顶上一样&mdash;&mdash;尤其是这一幕就发生在我的眼前的时候。是的，那时候的我还太年轻了，即使我已经意识到了自己的失态，也完全没有办法控制自己的情绪。 <br>
            <br>
            &ldquo;你狡辩！就因为你天天都是一副含糊暧昧的样子，这些男人才会天天缠着你！你要是真的那么清白，就拿个更坚决的态度出来，让这些不三不四的男人死心！&rdquo; <br>
            被我说成是不三不四的男人，一直在旁沉默着的坂森好像也受到了刺激。 <br>
            &ldquo;等一下哟，你这个人，不了解菟原小姐的事情就这么乱说，不觉得自己有点过分吗？谁不知道菟原小姐是个好女孩啊。&rdquo; <br>
            &mdash;&mdash;坂森说得对。 <br>
            &ldquo;放聪明点，别把手放在菟原小姐的肩膀上！&rdquo; <br>
            &mdash;&mdash;我是惹人厌的男人。 <br>
            &ldquo;怎么，还不放开？&rdquo; <br>
            坂森举起拳头，但立刻就被手儿奈按住了。 <br>
            &mdash;&mdash;啊，为什么？手儿奈，为什么你会去接触其他男人的身体？ <br>
            我的一腔怒火突然都转到了坂森的身上。 <br>
            &ldquo;要我说，&rdquo;坂森瞪着我说，&ldquo;菟原小姐这样温柔的女孩子竟然成了你的女朋友，真是一朵鲜花插在牛粪上了。&rdquo; <br>
            我试图冲过去把坂森揪起来，手儿奈那整个身子挡住我。我嘴里骂着不成字句的话，坂森对我比了个手势，然后穿过看热闹的人群，匆匆走开了。 <br>
            我用力把手儿奈推开，她跌坐在地上。我故意不去看摔倒的手儿奈，冲着坂森的背影喊道：&ldquo;是男人就不要跑！&rdquo; <br>
            手儿奈像是哭了。 <br>
            然后手儿奈从地上站了起来，死死盯住我。我能感觉到她眼神里的愤怒。 <br>
            &ldquo;你闹够了吧！你把我当成是你小竹田的私有财产了吗？&rdquo; <br>
            &ldquo;你终于承认了？干脆告诉我，你现在想做谁的私有财产？！&rdquo; <br>
            手儿奈的肩膀颤抖起来。 <br>
            &ldquo;够了！&rdquo; <br>
            她推开围观的人，从我身边跑了出去。我也追出去，在她后面高声喊着：&ldquo;你这个勾三搭四的女人！我看上你是我自己瞎了眼！&rdquo; <br>
            &mdash;&mdash;手儿奈不是那样的女人。 <br>
            那件事之后，一连好几个晚上我都是在后悔、心痛和苦闷中度过的。手儿奈那里没有任何消息。我也想过主动向她去认错，但我终究没有，因为我担心即使自己去认了错，也没办法得到手儿奈的原谅。 <br>
            季节变换，一转眼半年过去了。半年中我从没有去找新的女朋友，每天都只想着手儿奈。每次走进校园，我都会下意识地寻找手儿奈的身影。但即使偶尔真的看到了手儿奈，我也从来不敢靠近，只是远远地望着她。 <br>
            当我看见手儿奈一个人走着，或者和女性朋友们走在一起的时候，我就会感谢神灵的眷顾&mdash;&mdash;尽管我本来是一个彻头彻尾的无神论者。但是，当我运气不好，看见她和男子说话的时候，我就会揪住自己的头发，发出痛苦的呻吟。 <br>
            可以聊以自慰的是，我从别人那里得知，手儿奈并没有交别的男朋友，所以我一直都幻想着&mdash;&mdash;甚至经常会在梦里见到&mdash;&mdash;她再一次回到我的身边。我自己也暗暗发誓，如果真的能回到从前的样子，我一定不会再像以前那么嫉妒了。 <br>
            然而，有一天，我还是看到了我最不想看到的事情。 <br>
            那一天我吃过午饭，向研究室漫步过去的时候，忽然看见你和手儿奈从相反的方向走过来，一边走一边很热闹地有说有笑的样子。我看到你们两个说得那么开心，几乎下意识地躲到了道路旁边的树荫后面，而你们两人也似乎根本没有注意到我，就这么从我隐身的树木旁边向着食堂的方向走了过去。看起来，你们两个人是要一起去吃饭的样子。</td>
        </tr>
    </tbody>
</table>
</p>
这个时候，我才是真正体会到什么叫做嫉妒得发狂了。和这一次比起来，以前的嫉妒就像天鹅绒一样微不足道。现在回想起来，我那时之所以会有那么强烈的嫉妒心，恐怕也是因为和手儿奈交往的对象是你&mdash;&mdash;我大学里最好的朋友。我从手儿奈的表情中察觉到了你们的这种关系。  <br>
那天晚上，我把你叫到我的宿舍。  <br>
&ldquo;血沼，你到底是什么居心？&rdquo;  <br>
&ldquo;什么意思？&rdquo;你看起来好像并没有意识到自己做了什么，&ldquo;怎么发这么大的火？&rdquo;  <br>
&ldquo;手儿奈的事。&rdquo;  <br>
&ldquo;手儿奈？&rdquo;你摆出一副无辜的表情说，&ldquo;手儿奈怎么了？&rdquo;  <br>
&ldquo;你最近一直在缠着手儿奈！&rdquo;  <br>
&ldquo;呃，这话不对头吧？可不是我缠着手儿奈，是我们两个在交往哦。&rdquo;  <br>
&ldquo;不可能！&rdquo;  <br>
&ldquo;不可能？呵呵，显然你想错了。不但可能，而且手儿奈好像很喜欢我啊。&rdquo;  <br>
&ldquo;手儿奈是我的女朋友。&rdquo;  <br>
&ldquo;是么？怎么我听手儿奈说的和听你说的事情不一样呢……嗯，一定是有谁弄错了。我猜，弄错的多半是你吧？我和手儿奈已经交往了三个月，完全没有觉得她是脚踩两只船啊。&rdquo;  <br>
&ldquo;废话，手儿奈当然不是那种女人。&rdquo;  <br>
&ldquo;哦，那就没有误解了。好啦，我回去了，明天见。&rdquo;你顺手把我的桌子抽屉拉开，从里面拿出五本笔记本。  <br>
&ldquo;诗集我拿回去了，明天去给手儿奈看。&rdquo;  <br>
你正要往外走，我叫住了你。  <br>
&ldquo;站住！血沼，你是个既卑鄙又胆小的家伙。&rdquo;  <br>
&ldquo;你说什么？&rdquo;你好像有点生气了，&ldquo;为什么说我既卑鄙又胆小？&rdquo;  <br>
&ldquo;你不是想逃走吗？&rdquo;  <br>
&ldquo;逃走？我什么时候逃走了？我又为什么要逃走？&rdquo;  <br>
&ldquo;如果你认为手儿奈是自己的女人，那么就来争一个胜负吧！&rdquo;  <br>
&ldquo;小竹田，你知道自己在说什么吗？争胜负是什么意思？胜负早就定了。&rdquo;你好像很疑惑，&ldquo;胜负也好，别的什么也好，抛弃手儿奈的好像就是你吧？&rdquo;  <br>
我猛地往你胸口上一推。你重重地撞到墙壁上。  <br>
&ldquo;你听谁说的？！&rdquo;我嘶哑着声音说，&ldquo;我抛弃手儿奈的事情是听谁说的？&rdquo;  <br>
&ldquo;本来就是谁都知道的事情。&rdquo;  <br>
&ldquo;我怎么就从来没听说过？你到底是从哪里听来的？&rdquo;  <br>
你没有回答我的问题，头也偏到了一边。  <br>
我一直死盯着你。  <br>
最初，你脸上摆着一副强硬的样子。半晌过后，你的表情渐渐软化了下来，最后你低下头，用低低的声音回答：&ldquo;是手儿奈……&rdquo;  <br>
我突然间明白了。  <br>
原来如此。  <br>
很好，很好。手儿奈并没有忘记我，所以她才会说，是我把她抛弃了，而不是她主动离开了我。这也就是说，到今天为止她仍然爱着我。  <br>
原来如此。  <br>
不用说，我当然没有抛弃她，但她以为我抛弃她了。换句话说，两个人都没有要抛弃对方的意思，但两个人都以为对方把自己抛弃了。  <br>
我大笑起来。  <br>
&ldquo;喂，小竹田，你没事吧？&rdquo;  <br>
&ldquo;啊，遗憾啊，真是遗憾啊。&rdquo;我大笑着，泪水却充满了我的双眼，&ldquo;这一次争胜负，是你输了。&rdquo;  <br>
&ldquo;你没头没脑地说的是什么话呀？&rdquo;  <br>
&ldquo;我是说，手儿奈还爱着我。&rdquo;  <br>
&ldquo;你是认真的？&rdquo;  <br>
&ldquo;啊，&rdquo;我带着怜悯的眼神看着你，&ldquo;血沼，你也是个可怜的家伙啊。&rdquo;  <br>
&ldquo;你是在胡言乱语吧。&rdquo;  <br>
&ldquo;不过这样说应该也可以：手儿奈自己都不知道自己到底更喜欢谁。&rdquo;我又一次大笑起来，&ldquo;这样的话，还是要决一个胜负了&mdash;&mdash;你去传个话给手儿奈，只要说&lsquo;小竹田还爱着你&rsquo;就行了。&rdquo;  <br>
&ldquo;我完全不明白你到底在说什么。我就算照你说的传话给手儿奈，那又能怎么样？&rdquo;  <br>
&ldquo;手儿奈就会变成我现在这种痴狂的样子。&rdquo;  <br>
&ldquo;我要是不同意呢？&rdquo;  <br>
我逼近你。&ldquo;你怕了？&rdquo;  <br>
你抱起胳膊，偏着头沉思了一会儿，然后慢慢地，几乎是一字一顿地说：&ldquo;好吧，我答应你。我会向手儿奈传话，但我不会给你任何保证。我只是传话，然后把她的反应告诉你。另外，我也不会单单扮演一个传话筒的角色。我会尽我自己的全力阻止她再回到你的身边。我会告诉她我也爱着她&mdash;&mdash;这样做你满意吗？&rdquo;  <br>
我一直大笑着，说不出话，只有点头表示同意。  <br>
第二天，你来到了我的宿舍。单单看到你脸上严肃的表情，我就已经喜不自禁了。 <br>
<table class="wr" cellspacing="0" cellpadding="0" border="0">
    <tbody>
        <tr>
            <td class="gray14"><cc></cc>&ldquo;小竹田，你高兴得太早了。&rdquo;你烦躁地说，&ldquo;别以为手儿奈给了什么对你有利的答复。对你也好，对我也好，手儿奈什么答复都没有。&rdquo;  <br>
            &ldquo;什么意思？手儿奈到底怎么说的？&rdquo;  <br>
            &ldquo;手儿奈说，她不能只对我一个人作答复。她要在今天，在我们两个人面前作答复。&rdquo;  <br>
            我感到自己脸上的笑容凝固了。&ldquo;……奇怪啊。&rdquo;  <br>
            &ldquo;是啊，奇怪啊。&rdquo;你应了我一声。  <br>
            我们两个人都沉默了。宿舍里只有静静的呼吸声。  <br>
            半晌之后，你终于忍耐不住了。  <br>
            &ldquo;小竹田，我觉得，还是手儿奈喜欢你的可能性更大一点。&rdquo;  <br>
            &ldquo;为什么？&rdquo;我反问道。  <br>
            &ldquo;如果她爱我的话，当时就应该告诉我了。&rdquo;  <br>
            &ldquo;说不定她是想把这件事跟我说清楚，让我死了这条心。&rdquo;  <br>
            &ldquo;可是没必要同时对两个人说啊。&rdquo;你像是回复了一点信心，自言自语似的说，&ldquo;如果她爱着我的话，应该先对我说，然后再三个人见面才对啊。&rdquo;  <br>
            &ldquo;她没说过？&rdquo;  <br>
            &ldquo;没有。&rdquo;  <br>
            又是一阵沉默。  <br>
            这一次是我先忍不住了。  <br>
            &ldquo;我不觉得我比较有利。&rdquo;  <br>
            &ldquo;为什么？&rdquo;  <br>
            &ldquo;如果她还爱着我，应该马上就让你传话给我了。有必要三个人一起见面吗？&rdquo;  <br>
            &ldquo;说不定是怕我隐瞒不告诉你吧。&rdquo;  <br>
            &ldquo;但这种事情即使隐瞒也是没用的。&rdquo;我说。  <br>
            沉默。  <br>
            &ldquo;真是奇怪啊。&rdquo;  <br>
            &ldquo;是啊，真是奇怪啊。&rdquo;  <br>
            我们两个人不约而同抬起头，对视着对方的眼睛，试图发现对方是故意装出忧虑的样子，但是我们什么都没有发现。突然之间，我们两个人都想到，也许原本你我在手儿奈心目中的位置就是一样的。  <br>
            &ldquo;为什么，&rdquo;我自言自语般地说，&ldquo;为什么会变成这个样子？&rdquo;  <br>
            &ldquo;难道只有到了今天，手儿奈才能决定自己更喜欢哪一个？&rdquo;我注意到你刻意避开了&ldquo;爱&rdquo;这个字眼。  <br>
            &ldquo;是吗？那就是说，昨天她还决定不了？&rdquo;  <br>
            &ldquo;大概是吧……可是为什么到今天就能决定了呢？&rdquo;  <br>
            &ldquo;决定不了也许是因为两个都喜欢吧……&rdquo;我低声嘟囔着。  <br>
            &ldquo;说不定也有可能是两个都讨厌吧……&rdquo;  <br>
            &ldquo;我知道她讨厌我。&rdquo;我回想着自己对她做过的那些事情，&ldquo;但是，为什么她会讨厌你呢？&rdquo;  <br>
            &ldquo;她讨厌你？你现在怎么没信心了？昨天你不是还说&lsquo;手儿奈还爱着我&rsquo;吗？&rdquo;  <br>
            &ldquo;我昨天那么说过吗？&rdquo;  <br>
            &ldquo;一个字都不差，你就是那么说的。&rdquo;你说。  <br>
            &ldquo;……其实，我想说的是如果手儿奈喜欢我的话……算了，血沼，你怎么知道她会讨厌你呢？&rdquo;你说得对，我对自己确实没有信心了。  <br>
            &ldquo;我猜，说不定就是我帮你传话，让她觉得我这个人优柔寡断，然后就讨厌我了。&rdquo;  <br>
            &ldquo;不可能是那样的吧。照手儿奈的性格来说，她是不会有那种想法的。&rdquo;  <br>
            &ldquo;说的也是，应该不会是那样的。&rdquo;看起来，你也同样没有信心。  <br>
            &ldquo;说不定，是两个都喜欢？&rdquo;我叹了一口气说。  <br>
            &ldquo;那么她今天是要对我们说，&lsquo;我两个人都喜欢&rsquo;？&rdquo;  <br>
            &ldquo;呃，那又是什么意思呢？&rdquo;  <br>
            &ldquo;&lsquo;两个人我都喜欢，决定不了更喜欢哪一个，所以，我们三个人开始交往吧&rsquo;？&rdquo;你模仿着手儿奈的口气说。  <br>
            &ldquo;我可不喜欢这样子。&rdquo;我轻轻叹了一口气。  <br>
            &ldquo;我也不喜欢。&rdquo;你也轻轻叹了一口气。  <br>
            &ldquo;可是，如果手儿奈她并不讨厌这样子呢？&rdquo;  <br>
            &ldquo;唔，我不知道……但是没有什么根据认为手儿奈会这么说，对吧？&rdquo;  <br>
            &ldquo;对是对，可手儿奈到底为什么要让我们三个人一起见面呢？&rdquo;  <br>
            这个问题差不多已经是第四次问出来了。  <br>
            &ldquo;就是要一起讨论吧。&rdquo;你说。  <br>
            &ldquo;就是要讨论手儿奈到底该和哪一方交往？&rdquo;  <br>
            &ldquo;就算讨论之后决定了要和哪一方交往，那么不交往的一方又能理解吗？小竹田，比方说，你能理解吗？&rdquo;  <br>
            &ldquo;手儿奈喜欢强壮的男人吗？好像不是那样的吧？&rdquo;  <br>
            &ldquo;……要不然，她还是一个都不喜欢？&rdquo;我惴惴不安地说，&ldquo;她不是喜欢上了别的男人了吧？&rdquo;  <br>
            &ldquo;啊，没有的事不要乱说。你见到过她和别的男人约会吗？&rdquo;  <br>
            ……  <br>
            ……  <br>
            ……  <br>
            就这样子，两个人的对话一直都在这样的话题里绕来绕去。  <br>
            &ldquo;喂，血沼，&rdquo;我突然想起来了，&ldquo;你刚刚说，手儿奈今天会给我们两个当面回答的。&rdquo;</td>
        </tr>
    </tbody>
</table> <a href="http://hi.baidu.com/touchthememory/blog/item/e83d37f46ccb5868ddc4742f.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/touchthememory/blog/category/Public">Public</a>&nbsp;<a href="http://hi.baidu.com/touchthememory/blog/item/e83d37f46ccb5868ddc4742f.html#comment">查看评论</a>]]></description>
        <pubDate>2008-10-24  19:26</pubDate>
        <category><![CDATA[Public]]></category>
        <author><![CDATA[412858310]]></author>
		<guid>http://hi.baidu.com/touchthememory/blog/item/e83d37f46ccb5868ddc4742f.html</guid>
</item>

<item>
        <title><![CDATA[C# 扫雷 面向对象程序设计 3]]></title>
        <link><![CDATA[http://hi.baidu.com/touchthememory/blog/item/eb65944bfa762af682025cf5.html]]></link>
        <description><![CDATA[
		
		<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  protected override void OnPaint(PaintEventArgs e)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  base.OnPaint(e);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  PaintBlocks(e.Graphics);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private void PaintBlocks(Graphics g)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  for (int y = ZERO; y &lt; _height; y++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  for (int x = ZERO; x &lt; _width; x++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _blocks[y, x].Paint(null, g);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private void GameFrame_MouseClick(object sender, MouseEventArgs e)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (GameState == GameState.Ready)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  GameStart();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  else<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (GameState != GameState.Started)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int x = e.X / Block.Width;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int y = e.Y / Block.Width;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Block block = _blocks[y, x];</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (block.Bounds.Contains(e.Location))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (e.Button == MouseButtons.Right)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (block.State != Block.BlockState.Open)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  block.FlagBlock();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (block.State == Block.BlockState.Flag)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _flagNum++;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (block.Bomb)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  RightFlagNum++;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  else<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _flagNum--;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (block.Bomb)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  RightFlagNum--;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (e.Button == MouseButtons.Left)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (block.State == Block.BlockState.Close)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  OpenBlock(x, y);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (OnGamingClick != null)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  OnGamingClick(this, new EventArgs());<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private void OpenBlock(int x, int y)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (x &lt; ZERO || y &lt; ZERO || x &gt;= _width || y &gt;= _height)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Block block = _blocks[y, x];</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (block.State != Block.BlockState.Close)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  block.OpenBlock();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (block.Bomb)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  GameEnd();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  OpenedBlockNum++;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (block.Num == ZERO)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  OpenBlock(x - 1, y - 1);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  OpenBlock(x, y - 1);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  OpenBlock(x + 1, y - 1);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  OpenBlock(x - 1, y);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  OpenBlock(x + 1, y);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  OpenBlock(x - 1, y + 1);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  OpenBlock(x, y + 1);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  OpenBlock(x + 1, y + 1);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public void Showbomb()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  for (int y = ZERO; y &lt; _height; y++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  for (int x = ZERO; x &lt; _width; x++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Block block = _blocks[y, x];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (block.Bomb &amp;&amp; block.State!=Block.BlockState.Flag)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  block.OpenBlock();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private bool _clickDown = false;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private Point _lastLocation = new Point();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private void GameFrame_MouseDown(object sender, MouseEventArgs e)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (GameState != GameState.Ready &amp;&amp; GameState != GameState.Started)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _clickDown = true;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int x = e.X / Block.Width;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int y = e.Y / Block.Width;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (x &lt; ZERO || y &lt; ZERO || x &gt;= _width || y &gt;= _height)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _lastLocation = new Point(x, y);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Block block = _blocks[y, x];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  block.OnBlockClickDown();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private void GameFrame_MouseMove(object sender, MouseEventArgs e)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (GameState != GameState.Ready &amp;&amp; GameState != GameState.Started)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (_clickDown)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int x = e.X / Block.Width;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int y = e.Y / Block.Width;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (!_lastLocation.Equals(e.Location))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Block b = _blocks[_lastLocation.Y, _lastLocation.X];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  b.OnBlockClickUp();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (e.X &lt; ZERO || e.Y &lt; ZERO || x &lt; ZERO || y &lt; ZERO || x &gt;= _width || y &gt;= _height)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Block block = _blocks[y, x];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _lastLocation = new Point(x, y);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  block.OnBlockClickDown();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private void GameFrame_MouseUp(object sender, MouseEventArgs e)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (GameState != GameState.Ready &amp;&amp; GameState != GameState.Started)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _clickDown = false;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;  }</p>
<p>终于完了</p> <a href="http://hi.baidu.com/touchthememory/blog/item/eb65944bfa762af682025cf5.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/touchthememory/blog/category/Public">Public</a>&nbsp;<a href="http://hi.baidu.com/touchthememory/blog/item/eb65944bfa762af682025cf5.html#comment">查看评论</a>]]></description>
        <pubDate>2008-08-17  14:57</pubDate>
        <category><![CDATA[Public]]></category>
        <author><![CDATA[412858310]]></author>
		<guid>http://hi.baidu.com/touchthememory/blog/item/eb65944bfa762af682025cf5.html</guid>
</item>

<item>
        <title><![CDATA[C# 扫雷 面向对象程序设计 2]]></title>
        <link><![CDATA[http://hi.baidu.com/touchthememory/blog/item/36d208ad7a8b2f0f4b36d6f5.html]]></link>
        <description><![CDATA[
		
		<p>enum GameState<br>
&nbsp;&nbsp;&nbsp;  { <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Ready,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Started,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Victory,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Failed<br>
&nbsp;&nbsp;&nbsp;  };</p>
<p>&nbsp;&nbsp;&nbsp;  public partial class GameFrame : UserControl<br>
&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private Color _defBackColor = Color.FromArgb(0x80, 0x80, 0x80);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //private const int SPACE_WIDTH = ZERO;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private const int ZERO = 0;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private const int ONE_SEC = 1000;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public EventHandler OnGameInitialized = null;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public EventHandler OnGemeStart = null;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public EventHandler OnGameEnd = null;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public EventHandler OnGameVictory = null;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public EventHandler OnGamingClick = null;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public EventHandler OnGameTick = null;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private Block[,] _blocks = null;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private int _width = ZERO;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private int _height = ZERO;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private GameState _gameState = GameState.Ready;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  internal GameState GameState<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  get { return _gameState; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  set <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  { <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _gameState = value;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  switch (_gameState)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  { <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case GameState.Ready:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _timer.Enabled = false;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  break;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case GameState.Started:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _timer.Enabled = true;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  break;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case GameState.Victory:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _timer.Enabled = false;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  break;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case GameState.Failed:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _timer.Enabled = false;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  break;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private int _bombNum = ZERO;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public int BombNum<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  get { return _bombNum; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  set { _bombNum = value; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private int _rightFlagNum = ZERO;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public int RightFlagNum<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  get { return _rightFlagNum; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  set <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  { <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _rightFlagNum = value;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (_rightFlagNum == BombNum)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  GameVictory();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private int _openedBlockNum = ZERO;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public int OpenedBlockNum<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  get { return _openedBlockNum; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  set <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  { <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _openedBlockNum = value;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (_openedBlockNum == _width * _height - _bombNum)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  GameVictory();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private int _flagNum = ZERO;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public int FlagNum<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  get { return _flagNum; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  set { _flagNum = value; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private Timer _timer = new Timer();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private int _sec = ZERO;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public int Sec<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  get { return _sec; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  set { _sec = value; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private void timer_Tick(object sender, EventArgs e)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _sec++;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (OnGameTick != null)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  OnGameTick(this, new EventArgs());<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public GameFrame()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  InitializeComponent();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this.BackColor = _defBackColor;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this.BorderStyle = BorderStyle.FixedSingle;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Block.Owner = this;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Block.BtImg = Image.FromFile(&quot;blockClosed.gif&quot;);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Block.FlagImg = Image.FromFile(&quot;flag.gif&quot;);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Block.BombImg = Image.FromFile(&quot;bomb.gif&quot;);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Block.BackGroundImg = Image.FromFile(&quot;backGround.gif&quot;);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _timer.Interval = ONE_SEC;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _timer.Tick += new EventHandler(timer_Tick);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public GameFrame(int blockWidth)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  InitializeComponent();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Block.Owner = this;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Block.Width = blockWidth;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public void InitGame(int width, int height, int bombNum)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (bombNum &gt;= (width * height))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  throw new Exception(&quot;要厚道!不能设置太多的地雷!&quot;);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this._bombNum = bombNum;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this.Width = width * Block.Width ;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this.Height = height * Block.Width;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this._blocks = new Block[height, width];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this._width = width;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this._height = height;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this.FormatBlocks(_blocks);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  GameState = GameState.Ready;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this.Sec = ZERO;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this.OpenedBlockNum = ZERO;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this.FlagNum = ZERO;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this.RightFlagNum = ZERO;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this.Refresh();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (OnGameInitialized != null)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  OnGameInitialized(this, new EventArgs());<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public void GameStart()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (OnGemeStart != null)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  OnGemeStart(this, new EventArgs());<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  GameState = GameState.Started;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private void GameVictory()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  GameState = GameState.Victory;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (OnGameVictory != null)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  OnGameVictory(this, new EventArgs());<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public void GameEnd()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  GameState = GameState.Failed;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Showbomb();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (OnGameEnd != null)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  OnGameEnd(this, new EventArgs());<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private void FormatBlocks(Block[,] blocks)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  for (int y = ZERO; y &lt; _height; y++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  for (int x = ZERO; x &lt; _width; x++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  blocks[y, x] = new Block(x * Block.Width , y * Block.Width, false);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  BombSetup(blocks, _bombNum);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  BlockNumSetup(blocks);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private void BombSetup(Block[,] blocks,int bombNum)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Random rd = new Random((int)DateTime.Now.Ticks);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int num = ZERO;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  while (num != bombNum)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int x = rd.Next(ZERO, _width);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int y = rd.Next(ZERO, _height);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Block block = _blocks[y, x];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (!block.Bomb)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  block.Bomb = true;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  num++;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private void BlockNumSetup(Block[,] blocks)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  for (int y = ZERO; y &lt; _height; y++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  for (int x = ZERO; x &lt; _width; x++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Block block = _blocks[y, x];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (!block.Bomb)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  SetBlockNum(x, y);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private void SetBlockNum(int x,int y)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Block block = _blocks[y, x];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int num = ZERO;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (GetBlockHasBomb(x - 1, y - 1))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  num++;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (GetBlockHasBomb(x, y - 1))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  num++;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (GetBlockHasBomb(x + 1, y - 1))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  num++;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (GetBlockHasBomb(x - 1, y))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  num++;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (GetBlockHasBomb(x + 1, y))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  num++;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (GetBlockHasBomb(x - 1, y + 1))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  num++;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (GetBlockHasBomb(x, y + 1))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  num++;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (GetBlockHasBomb(x + 1, y + 1))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  num++;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  block.Num = num;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private bool GetBlockHasBomb(int x,int y)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  { <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (x &lt; ZERO || y &lt; ZERO || x &gt;= _width || y &gt;= _height)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return false;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Block block = _blocks[y, x];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return block.Bomb;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>还放不下..</p> <a href="http://hi.baidu.com/touchthememory/blog/item/36d208ad7a8b2f0f4b36d6f5.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/touchthememory/blog/category/Public">Public</a>&nbsp;<a href="http://hi.baidu.com/touchthememory/blog/item/36d208ad7a8b2f0f4b36d6f5.html#comment">查看评论</a>]]></description>
        <pubDate>2008-08-17  14:56</pubDate>
        <category><![CDATA[Public]]></category>
        <author><![CDATA[412858310]]></author>
		<guid>http://hi.baidu.com/touchthememory/blog/item/36d208ad7a8b2f0f4b36d6f5.html</guid>
</item>

<item>
        <title><![CDATA[C# 扫雷 面向对象程序设计]]></title>
        <link><![CDATA[http://hi.baidu.com/touchthememory/blog/item/1d59a72f516a713e1f3089eb.html]]></link>
        <description><![CDATA[
		
		<p>最近一直在忙CMMI3级评估，比较无聊 写了个扫雷玩玩</p>
<p>程序主要是一个Block类和一个GameFrame类 界面窗体只需要做初始化和响应事件就可以了 还没有做双键按下的效果 比较原始</p>
<p> </p>
<div forimg="1" align="left"><a target="_blank" href="http://hiphotos.baidu.com/touchthememory/pic/item/a730c4fa7998a2c6b58f316c.jpg"><img class="blogimg" height="200" width="172" border="0" small="1" src="http://hiphotos.baidu.com/touchthememory/pic/item/a730c4fa7998a2c6b58f316c.jpg"></a> <a target="_blank" href="http://hiphotos.baidu.com/touchthememory/pic/item/0ebd3a3bc77e98f214cecb6e.jpg"><img class="blogimg" height="200" width="172" border="0" small="1" src="http://hiphotos.baidu.com/touchthememory/pic/item/0ebd3a3bc77e98f214cecb6e.jpg"></a></div>
<p>class Block<br>
&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private const int WIDTH_DEF = 16;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private Color[] _numColors = new Color[] {Color.Blue,Color.Green,Color.DarkRed,Color.DeepSkyBlue,Color.DimGray,Color.DarkOrange,Color.Brown,Color.Black };</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private Color _defColor = Color.White;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private Color _defBackColor = Color.FromArgb(0xC0, 0xC0, 0xC0);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private static Image _btImg = null;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public static Image BtImg<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  get { return Block._btImg; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  set { Block._btImg = value; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private static Image _bombImg = null;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public static Image BombImg<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  get { return Block._bombImg; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  set { Block._bombImg = value; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private static Image _flagImg = null;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public static Image FlagImg<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  get { return Block._flagImg; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  set { Block._flagImg = value; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private static Image _backGroundImg = null;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public static Image BackGroundImg<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  get { return Block._backGroundImg; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  set { Block._backGroundImg = value; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public enum BlockState<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Close,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Open,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Flag<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  };</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private BlockState _state = BlockState.Close;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public BlockState State<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  get { return _state; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  set { _state = value; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private Rectangle _rct;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public Rectangle Bounds<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  get { return _rct; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  set { _rct = value; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private bool _bomb = false;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public bool Bomb<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  get { return _bomb; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  set { _bomb = value; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private int _num = 0;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public int Num<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  get { return _num; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  set <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (!_bomb)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  { _num = value; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private static int _width = WIDTH_DEF;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public static int Width<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  get { return _width; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  set { _width = value; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //public Block() { }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private static GameFrame _owner = null;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public static GameFrame Owner<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  get { return Block._owner; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  set { Block._owner = value; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public Block(int x,int y,bool bomb)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _rct.X = x;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _rct.Y = y;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _rct.Width = _width;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _rct.Height = _width;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _bomb = bomb;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public Block(int x, int y, int num)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _rct.X = x;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _rct.Y = y;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _rct.Width = _width;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _rct.Height = _width;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _bomb = false;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _num = num;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public void Paint(object sender, Graphics g)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  g.DrawImage(_backGroundImg, this.Bounds.Location);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  switch (_state)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  { <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case BlockState.Close:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  g.DrawImage(_btImg, this.Bounds.Location);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  break;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case BlockState.Flag:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  g.DrawImage(_flagImg, this.Bounds.Location);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  break;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case BlockState.Open:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  switch(_bomb)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case false:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (_num != 0)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Point p=this.Bounds.Location;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  p.X+=1;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  g.DrawString(_num.ToString(), new Font(&quot;宋体&quot;, 12, FontStyle.Bold), new SolidBrush(_numColors[Num - 1]), p);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  else<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  g.DrawImage(_backGroundImg, this.Bounds.Location);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  break;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case true:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  g.DrawImage(_bombImg, this.Bounds.Location);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  break;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  break;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public void OnBlockClickDown()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Graphics g = Block.Owner.CreateGraphics();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (State == BlockState.Close)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  g.DrawImage(_backGroundImg, this.Bounds.Location);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public void OnBlockClickUp()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Graphics g = Block.Owner.CreateGraphics();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (State == BlockState.Close)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  g.DrawImage(_btImg, this.Bounds.Location);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public void Refresh()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Graphics g = Block.Owner.CreateGraphics();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Paint(null, g);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public void OpenBlock()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this.State = BlockState.Open;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this.Refresh();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public void FlagBlock()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this.State = this.State == BlockState.Flag ? BlockState.Close : BlockState.Flag;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this.Refresh();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;  }</p>
<p>放不下了...</p>
<p> </p> <a href="http://hi.baidu.com/touchthememory/blog/item/1d59a72f516a713e1f3089eb.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/touchthememory/blog/category/Public">Public</a>&nbsp;<a href="http://hi.baidu.com/touchthememory/blog/item/1d59a72f516a713e1f3089eb.html#comment">查看评论</a>]]></description>
        <pubDate>2008-08-17  14:53</pubDate>
        <category><![CDATA[Public]]></category>
        <author><![CDATA[412858310]]></author>
		<guid>http://hi.baidu.com/touchthememory/blog/item/1d59a72f516a713e1f3089eb.html</guid>
</item>

<item>
        <title><![CDATA[关于约瑟夫环（c#解）]]></title>
        <link><![CDATA[http://hi.baidu.com/touchthememory/blog/item/9da0f0175066430dc93d6de6.html]]></link>
        <description><![CDATA[
		
		<p>&nbsp;&nbsp;&nbsp;  class Program<br>
&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  static void Main(string[] args)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int r = new Cysf(10,5).GetLast();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Console.WriteLine(r);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;  class Cysf<br>
&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private int _max = 0;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private int _n = 0;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public Cysf(int max,int n)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _max = max;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  _n = n;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public int GetLast()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int m = 0;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ArrayList list = new ArrayList();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  InitList(ref list, _max);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  while (list.Count &gt; 1)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  for (int i = 0; i &lt; list.Count;)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (++m % _n == 0)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Console.WriteLine(Convert.ToInt32(list[i]));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  list.RemoveAt(i);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  else<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ++i;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return Convert.ToInt32(list[0]);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  private void InitList(ref ArrayList list, int max)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  for (int i = 1; i &lt;= max; i++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  list.Add(i);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;  }</p> <a href="http://hi.baidu.com/touchthememory/blog/item/9da0f0175066430dc93d6de6.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/touchthememory/blog/category/Public">Public</a>&nbsp;<a href="http://hi.baidu.com/touchthememory/blog/item/9da0f0175066430dc93d6de6.html#comment">查看评论</a>]]></description>
        <pubDate>2008-01-03  14:01</pubDate>
        <category><![CDATA[Public]]></category>
        <author><![CDATA[412858310]]></author>
		<guid>http://hi.baidu.com/touchthememory/blog/item/9da0f0175066430dc93d6de6.html</guid>
</item>

<item>
        <title><![CDATA[递归构造二叉树+分析 （温习）]]></title>
        <link><![CDATA[http://hi.baidu.com/touchthememory/blog/item/ee0c1134fc76203f5ab5f57c.html]]></link>
        <description><![CDATA[
		
		<p>typedef&nbsp;&nbsp;  int&nbsp;&nbsp;  TElemType;<br>
typedef&nbsp;&nbsp;  struct&nbsp;&nbsp;  BitNode<br>
{<br>
TElemType data;<br>
struct&nbsp;&nbsp;  BitNode *lchild, *rchild;<br>
}BitNode, *BitTree;</p>
<p>BitTree CreateBiTree(void)<br>
{<br>
BitTree bt;<br>
TElemType x;<br>
scanf(&quot;%d&quot;, &amp;x);<br>
if(x == -1)<br>
{<br>
bt = NULL;<br>
}<br>
else<br>
{<br>
bt = (BitTree)malloc(sizeof(BitNode));<br>
bt-&gt; data = x;<br>
bt-&gt; lchild = CreateBiTree();<br>
bt-&gt; rchild = CreateBiTree();<br>
}</p>
<p>return bt;<br>
}</p>
<p>下面是我的分析:</p>
<p>输入1 <br>
建立节点A <br>
此时执行节点A的bt-&gt; lchild = CreateBiTree(); <br>
输入2 <br>
建立节点B <br>
执行节点B的bt-&gt; lchild = CreateBiTree(); <br>
输入3 <br>
建立C <br>
执行节点C的bt-&gt; lchild = CreateBiTree(); <br>
输入-1 <br>
f(x == -1) <br>
{ <br>
bt = NULL; <br>
} <br>
return bt; <br>
<br>
返回空 即节点C完成左子树 <br>
节点C的bt-&gt; lchild = CreateBiTree(); 该句执行完毕 返回为空 <br>
此时执行节点C的bt-&gt; rchild = CreateBiTree(); 建立右子树 <br>
输入-1 <br>
返回 节点C完成右子树 <br>
此时 <br>
bt-&gt; lchild = CreateBiTree();&nbsp;&nbsp;  ↓ <br>
bt-&gt; rchild = CreateBiTree();&nbsp;&nbsp;  ↓ <br>
}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ↓ <br>
return bt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ↓ <br>
} <br>
返回完整节点C <br>
此时节点C完成 也就是节点B的左子树完成 开始构造节点B的右子树 <br>
节点B的bt-&gt; lchild = CreateBiTree(); 完成 <br>
执行节点B的bt-&gt; rchild = CreateBiTree(); <br>
输入4 <br>
构造节点D <br>
输入 -1 <br>
返回 完成节点D左子树 <br>
输入 -1 <br>
返回 完成节点D右子树 <br>
此时节点B完成 <br>
也就是节点A的左子树完成 <br>
开始构造节点A的右子树 <br>
如此这般。。。。 <br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  A1 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  B2 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   E5 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  C3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  D4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  F6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;  G7 <br>
&nbsp;&nbsp;&nbsp;  空&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  空 空&nbsp;&nbsp;&nbsp;&nbsp;  空&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;  空&nbsp;&nbsp;&nbsp;&nbsp;  空&nbsp;&nbsp;&nbsp;  空&nbsp;&nbsp;&nbsp;&nbsp;  空</p> <a href="http://hi.baidu.com/touchthememory/blog/item/ee0c1134fc76203f5ab5f57c.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/touchthememory/blog/category/Public">Public</a>&nbsp;<a href="http://hi.baidu.com/touchthememory/blog/item/ee0c1134fc76203f5ab5f57c.html#comment">查看评论</a>]]></description>
        <pubDate>2008-01-03  10:46</pubDate>
        <category><![CDATA[Public]]></category>
        <author><![CDATA[412858310]]></author>
		<guid>http://hi.baidu.com/touchthememory/blog/item/ee0c1134fc76203f5ab5f57c.html</guid>
</item>

<item>
        <title><![CDATA[修炼一名程序员的职业水准（转）]]></title>
        <link><![CDATA[http://hi.baidu.com/touchthememory/blog/item/121e26305d40469ba9018eea.html]]></link>
        <description><![CDATA[
		
		<p>作者：林庆忠，1990年毕业于昆明工学院计算机软件专业，后又于1999年毕业在南京大学 完成软件工程专业硕士的学习，现供职于NPC旗下的一个行业软件研发中心，因为在网上看了许多有经验的各路软件开发人员写的好帖，一时手痒兴起，也凑一篇壮壮声势。 <br>
<br>
<br>
假设你是一名软件专业毕业的本科学子，如何在工作中修炼成为一名有较高职业水准的程序员呢，本文试图总结作者从事15年软件开发工作的感想，希望对有志成为职业程序员的人有所帮助，并借此机会感谢原昆明工学院计算机系的和智玲老师和张怀宁老师，特别感谢我的硕士导师，南京大学计算机系的博导郑国梁教授。 <br>
<br>
<u>注：本帖言辞尖刻，乃作者脾气秉性使然，如果你看着有气，就请多多见谅，放下别看了。</u> <br>
<br>
程序就是一系列按步骤进行的操作序列，它有好多种级别，比如最低级的微程序、次低级的汇编程序、高级的各种编程语言程序、最高级的脚本语言程序，也许我列的不对，但没关系，我要说的是不管是那个级别的程序，其本质都是操作的逻辑序列。大多数系统和应用程序都是建立在高级编程语言上的，比如C、C++、C#、FORTRAN、BISIC、JAVA等等，就让我们只关注这一级的编程能力吧。因此如果一个程序员的逻辑能力不高，他永远都不能成为一名具有合格职业水准的程序员，我们在下面的讨论有关编程能力的方方面面，最终都是为了最大程度地提高和实现一名程序员的逻辑能力。 <br>
<br>
<strong>一、掌握基础知识：十六年寒窗的持续积累</strong> <br>
<br>
从7岁读小学起，经过16年的学习，你从软件专业本科毕业后，必须完成以下几门专业课程的学习：计算机组成、操作系统原理、汇编语言、数据结构、编译原理、数据库原理、软件工程、结构性设计语言(PASCAL、C)、面向对象设计语言(C++、C#)、计算机网络等，你最好还懂一些算法分析、分布式系统、计算机图形学、形式逻辑、人工智能原理、软件设计模式、软件构架/框架等研究生的课程，16年来，你积累的除了知识，更重要的是形成最适合自己的学习方法和工作方法。这些是你具备程序员职业水准的基础能力，不要受什么计算机软件怪杰之类传奇的影响，那不过是小概率事件，而且这些怪杰们就算没有读过软件本科和研究生，也往往自学了大多数专业课程，很可能比在校学习的学生对这些课程的精髓部分理解的更好，还有他们的工作方法和思维方式是特别而高效的，但普遍性差，可以借鉴，不宜模仿。好，所以现在你只需要问问自己，那些课程和知识都学会并掌握了吗？如果是，那就准备好进行实践了。 <br>
<br>
<strong>二、在实践中提高：成为一名高水平的Coder</strong> <br>
<br>
好了，你毕业了，在校功课都不错，也找了一个专业对口的工作，你想大展鸿图了，可是别急，你的翅膀还不够硬，不信我们说来看看。 <br>
通常，你在工作中都会用到某一种单位/公司固定的操作系统和编程语言开发环境，比如Windows、UNIX、LINUX等操作系统，又比如用VC、VB、PB、Delph、JAVA、Motif/XWindow、QT、OpenGL、OpenInventor等编程语言和开发环境，我们在后面把它们合称为开发环境。就在校学习的有关开发环境的知识而言，大概你距工作需要的差距是不小的，当某个操作系统和编程语言环境成为你的饭碗时，就不应也不能用通过课程/认证考试之类的眼光和要求来评价你的能力，即使你能考100分。你需要深入地学习该操作系统和编程语言环境的各类开发手册的所有内容，你会说大多数你都用不上，其实你既对又不对，对的是单从使用的角度而言，你确实用不上开发手册的大多数内容，比如庞大的VC开发类库和复杂的开发环境，你在实际工作中能用到的不到总数的1/10或1/5，不对的地方在于，你用到的部分不是孤立存在的，它们是整个体系中的一部分，只有对整个体系有了一个较完整的了解，才能得心应手、随心所欲地用好你用到的部分，你才算初步具备在这种开发环境下进行Coding的职业水准(还远不够程序员的职业水准呢)，而这只是刚开始。如何才能真正掌握一种开发环境的全面的知识呢，最原始的办法就是读开发指南/教程、参考手册，一般来讲，学习开发指南/教程时，你如果是一个认真的人，都会完成5/10~7/10左右内容的学习和练习，如果你想成为职业选手，就应该完成9/10以上内容的学习和练习。参考手册不同，大多数所谓的“程序员”们只是用到了才翻翻，这差的太远了，你应该象读开发指南/教程一样，每个环节都要读，比如VC，参考手册中的每个类，类的每个函数，都要读上几遍，它们往往是一小伙一小伙地纠缠在一起使用的，开始时读得你毫无头绪、心烦意乱，不要紧，还有一手呢，如果你开发环境安装的全面，它们往往都有开发商做的demo例子可看，你就进入另一个境界了，开始时你关注demo中的具体技术，后来你发现这些demo的程序写的都还算不错，结构简单但合理，如果你真的用心，就一定能发现一些个别的demo是极品，它所展现的程序逻辑结构是你设计不出来的，你现在有点更关心它的程序设计构架，甚于对你原始目的(某种相关的技术/技巧)的关注，这时的你，开始了从一名Coder向一名Programmer的转变，你会忍不住要看看开发商提供的源程序，比如.h和.cpp，通常你会找到include路径下所有的.h程序，你才知道，哇！好多好多东东在参考手册中都没提到，你要学的太多了，没时间顾及其它的业余爱好了，现在知道为什么程序员是年轻人的职业了吧，你要有足够多的时间才行，即使你的智商有160。如果你走到这一步，在你工作的团队中，已经是经常有人向你请教技术问题，经常有人请求你帮忙debug，你已是公认的“高手”了，别得意，因为你仍然是个Coder，为什么这么说呢，你想想，你已深入了解了这个开发环境中的各种技能，知道一名Coder如何用好这些东西，可是你能设计的出提供给Coder们用的东西吗？唔……，你想了想，可能还不太行。对了，就是这样，你还是一名小我境界的程序员呢，本质是个Coder，当然已是一名高水平的Coder了，然而你需要进一步登堂入室才能成为一名真正的程序员。 <br>
<br>
让我们继续吧，通常你都是从精通一种编程环境开始的，假设你已经较为精通在Windows下用VC开发软件了，这时在技术和技巧方面你将面临一小一大两个挑战，第一个小挑战是如果公司/单位改换了开发环境，比如用LINUX下的QT交互语言工具进行开发，你不过是把前面掌握VC的过程再来一遍，由于在主观上经历了VC工具的学习过程，在客观上各种开发环境都有太多相似的方面，这回你掌握的应该较快。要小心，在这时第一次诱惑之门打开了，因为你感觉良好，看！这回这么快，我就这么好地掌握了新的开发环境，你开始关注其它暂时还用不到的同类环境，比如VB、Delph、JAVA，如饥似渴地掌握各种开发工具，证明自己的学习能力和价值，但你忘了一点，你仍然是个Coder，只不过是一个在好多开发环境下都能编程的Coder，就像你生活在中国，因而精通了汉语，工作需要你又掌握了英语，然后你就来了劲，把俄语、日语、阿拉伯语、拉丁语，等等等等，都学习个遍，我只能说，有点BT。你忘了自己是个职业人，同一类的东西工作中用得到才需学习，太多太多的Coder们喜欢在一起比较和炫耀自己会掌握了几种开发工具，不信你看看招聘时的求职书就知道了，sigh！他们中绝大多数人永远都只能停留在这个层次上，心浮气躁，一生都再也当不成真正的程序员了。总结一下，其实你在这时需要的是对自己掌握新开发环境的能力的自信，而不是一遍遍地重复来证明自己。第二个大挑战就是你明白了只掌握VC是不够的，你发现自己有点浅薄，有很多东东你会用但你不太懂，很多方面支持VC编程的知识你都没掌握，比如操作系统的源码、网络协议知识、Windows 的注册表、进程和线程的基础知识、硬件驱动方面的知识、ActiveX、Windows 庞大的 API，又是一个等等等等，这些基础知识的学习和掌握可是要花费大量时间的，你再一次深切地感到时间太不够用了，因为这时的你大概有许多俗务缠身了，所以有点沮丧，还不用提IT业每天不知有多少新东西在发布，KAO，永远都跟不上，越拉越远了。哎！别气馁，振作一点，你还是忘记了自己是个职业人，既然好多东东在工作中你永远都没机会用，那么干嘛要学呢？用什么才学什么，最多预测到马上要用什么，先一步学什么好了，要知道没有人是真正的、无所不精的全科大夫，除非你是神，但如果你还在耐着性子看这篇文章，你肯定是个人嘛。 <br>
<br>
OK，一般工作后三五年，你经历了上述过程，经受了诱惑和考验，终于明白了一个道理：你要的是强劲的学习知识的能力，是对某种软件知识/技能的有深度的精通，一种摸到它的根的深度，而不是已掌握的技能的种类和数量。这时无论谁用他掌握了多少种你不会的技能来吓唬你都没用，你对他的层次只有蔑视。通过几年的学习和工作，要记住最重要的一点，永远最重要：对自己学习IT知识能力的自信，一个程序员一生都要不停地进行高强度的学习，用心问问自己，有没有这个自信？别用虚荣心来骗自己哦，如果没有的话，那就不必花费你宝贵的时间向下看了，作者在此感谢你有耐心看到这里，现在建议你关闭这篇文章，趁着年轻，当机立断转行吧！ <br>
<br>
<strong>三、注重逻辑：成为一名职业程序员</strong> <br>
<br>
好，再前进一点点，你就要成为一名职业程序员了，让我们继续来完成这个任务吧！我们在前一节提到过，“你发现一些个别的demo是极品，它所展现的程序逻辑结构是你设计不出来的，你现在有点更关心它的程序设计构架，甚于对你原始目的(某种相关的技术/技巧)的关注”，其实你是在关注这个demo程序作者的思维逻辑，所有程序的本质就是逻辑。技术你已经较好地掌握了，但只有完成逻辑能力的提高，你才能成为一名职业程序员。打一个比方吧，你会十八般武艺，刀枪棍棒都很精通，但就是力气不够，所以永远都上不了战场，这个力气对程序员而言就是逻辑能力(其本质是一个人的数学修养，注意，不是数学知识)。逻辑能力也是逐步提高的，开始时你一定是用直观的逻辑能力来编程的，怎么想就怎么编，不对就再改，在改进中提高自己的逻辑能力，从直观逻辑能力提高到抽象逻辑能力，这是很正常的。提前说一句吧，到达逻辑能力的至高境界，其表现是用数学语言来描述问题和问题的解决办法，高度抽象！好，说回来吧，你要提高逻辑能力，最快的办法就是读别人写的结构优秀的程序。优秀的代码是百读不厌的(这句话是我抄来的)，暂时放放对其中某种技术和技巧的关注吧，你要推导和学习的是这些好程序的逻辑结构，它们是被精心设计出来的。你可以先捂住这个demo程序，自己设计一个功能相同的程序结构，然后比较一下demo的程序结构，如果差距较大，那你就不应简单地改进一下，而是要把demo作者设计的过程在心里复原一遍，做到这一点也许有点困难，但这种事干的多了，你就会越干越快，越来越得心应手，你的逻辑能力飞速提升，你能看得上的逻辑结构优秀的程序开始不多了，下一步就是练习。从工作中开始吧，如果你有空闲，你需要做至少两类练习，一类是算法练习，所有的经典算法都是经典的逻辑，题目有的是，像个好学生一样吧，每年的国内国际编程竞赛都有逻辑要求非常高的题，你可以只选一两道难题来做做。当你可以把复杂的单递归程序(只有A调A)变成非递归程序时，已经不错了，如果你能看得懂双递归程序(A调A、A调B、B调A、B调B都有)，我为你鼓掌！你不必往下看了，我有点不好意思啦――班门弄斧，你快滚蛋吧！另一类是把以前和当前你工作中你不满意的程序推倒重新设计一遍，这非常重要，省时省力，因为你熟悉需求，技术上也没问题，目的就是改进程序的逻辑结构，很划算哦，唯一要克服的就是：你对推翻以前工作中那点小小成就的心理障碍，如果你真想优秀，说句粗话：这点心理障碍算个屁，一遍遍反复地推倒已有的成果只能使自己快速进步，放手干吧，没什么好可惜的，马恩早就在《共.产.党宣言》里说过了：在这个过程中，你失去的只有锁链(禁锢你思想的锁链)。 <br>
<br>
让我们来总结一下，经过自我否定后，再生的你尽管对过去的“业绩”还有一些眷恋，但已是一个初步具备职业水准的程序员了，掌握了相应的技术和技巧，具备了较高的抽象逻辑思维能力，最主要的特征是：能自觉地自我否定，不断地追求更高水平的逻辑能力。 <br>
<br>
在这个过程中，如果你能注意以下一些小的方面，你前进的步伐也许会快一些。 <br>
<br>
l 从编译原理的角度来理解你工作中使用的高级语言，如果你做到这一点，至少有两个好处，第一个好处是避免一大堆低水平重复出现的编译错误。一名优秀的Coder平均在一个工作日中应该完成200行以上的源码，其编译错误应该控制在5个以下，要知道这200行源码不是一次完成的，所以大多数情况下你都要追求一次编译通过，而一名职业水准的程序员，应该进一步做到即使用purify这类的工具来检查源码，也不会存在严重的内存泄露。第二个好处是可以提高源码的可读性和效率。规范地编写你的代码使你自己的逻辑清晰，因为你明白多加几个括号和空行、多换行对齐、多注释，编译器是会自动识别的，不影响程序执行的效率，反过来，控制好递归调用和循环内的if语句才是提高程序效率的关键，要全力避免递归，但要深刻理解递归，能通过自己建立堆栈来把递归程序转换成非递归程序，要求还是较高的哦！ <br>
<br>
l 避免思维陷阱，只要你是人就一定有自己的思维惯性，这一定又会表现在你的程序逻辑中，有时你就是从这个惯性中跳不出来(谁都有这个时候)，但要心里有数才行，所以你需要帮助，如果你有几个水平相若或更高的职业伙伴，太好了，当遇到花30分钟还打不下的bug时，就别浪费时间了，找他们吧，最要紧的是能思路清晰明确地表述你的问题，通常你自己在这个过程中或者伙伴中就有人把问题解决了，又快又好。另外，有几个可以良性竞争的职业伙伴是人生的一件幸事，1+1&gt;2，大家各有所长，你最好做到及时公开你的成果，技不压身嘛，IT发展的这么快，你再优秀，那点东东也没有什么值得隐藏的，所以你可以技术或水平不够高，但千万不可以让真正具有职业水准的选手鄙视你的职业品质和行为。 <br>
<br>
l 有自己debug的特点，下面的说法作者不敢太肯定，只是经验之谈。即使在VC这种高度完善的开放环境下，你仍然应该要求自己仅凭打印语句就能debug。这也有两点好处，第一个好处是，遇到bug你会认真想问题所在，而不是用debug工具一步步简单地追踪卡在哪儿了，你定位bug范围的方式是从大到小、从粗到精，这是一种自顶向下的思维方式，而用工具追踪，容易形成自底向上的思维方式，这不算好，你应该先看到森林，再看到树木。我反复提及：程序就是逻辑过程，大多数程序从main函数开始，是由数据结构和功能子程序组成的一个树形结构的逻辑过程(要认清即使是面向对象的程序语言也是一样的)，它的执行过程是深度优先的，但你定位bug应该是广度优先的，好好想想这一点，嗯？第二个好处是强迫你思考并记住而不是用工具看到调用过程，你大脑的抽象逻辑思维能力和胳膊上肌肉的力量一样，都是练出来的，如果你的bug是程序结构上的逻辑错误引起的，这一点就非常重要了，顺便说一句，最难打的bug就是程序逻辑结构错误导致的bug。你要是真正明明白白地认识到这儿了，那我就没什么东西可以告诉你了。总之，程序员的职业水准：生产效率和程序质量，主要是取决于源码中bug的数量和debug的速度，而不是取决于编写源码的速度。给你一个我自己定义的考查一个职业程序员的指标：一个合格水准的职业程序员，编程的时间如果算一份的话，其累计debug的时间不能超过一份，真正职业高手累计debug的时间应该控制在0.5份以下，如何？你关上门悄悄问问自己，你花费在编程和debug上的时间比例是多少？如果你把程序员作为自己一生的职业，那么就永远都要牢记一点：追求做一个0 bug的优秀程序员！这是任何一个想成为职业程序员的人的理想，请相信：坚忍不拔地追求实现这个理想将让你出类拔萃！ <br>
<br>
l 做好程序的单元测试，这是另一项考查你是否是一名具有合格职业水准的程序员的一个必要指标。其实在你拿到需求的时候就要准备单元测试用例了，并且这些用例将直接影响你的详细设计(有关软件设计本来是该放在第四节讲的)。我们还是打比方吧，当你拿到一个需求时，除了分析它静态的功能外，还应明确它动态的操作/执行过程，把这个动态过程明确地用流程图画出来，比如分为A～Z的26步，其中A又可以进一步分解为A1～A5的5步，直到不能再分解为止。又比如说A3步不可分解了，那么你应该把A3步的正常操作和所有五花八门的异常操作都列出来，确保正常的操作肯定正确，异常的操作起码程序不退出才行。这样你就要写好多好多的测试用例，说句老实话，我也从来不写！但我一般会列一个提纲，比如A3步有正常的操作a、b、c、d、e共5项，异常的操作有f、g、h、i、j、k、l、m、n共9项，你在进行单元测试时都应该跑一遍，这样的程序都还不敢说质量如何好，但起码可以说较稳定吧！如果要想在进行单元测试时干得快、效率高，那么在进行详细设计时，你就应该把A3步中对所有正常操作和异常操作的判断都设计好，在编程实现A3步时，使得程序的结构合理高效，对不对？所以，如果你在工作中是割裂地看待软件工程中从需求、分析、设计、编程、测试等各个环节，恐怕水平很有限喔！但如果你在分析需求时就能看到测试的问题，并改进设计和实现，为此做好相应的准备工作，嘿嘿，整个软件开发过程你的效率会高很多，通常你在一个开发团队中就会高度自信的，你已越过当一名偏颇、露骨的高手的境界，成为一个平静的高手，这可是The best in the best！，用周星星的话说：是高手之高高手，因为别人看不出你高在哪儿，没见你有什么高招或特拚命干，但反正你就是干得又快又好、又省力。关于进行单元测试还有很多复杂的方法，在此本文只提到了最基本的一点，目的是让你在工作上考虑周全、安排有序，其它的自己琢磨吧，没有人能替你吃饱饭！ <br>
<br>
l 如果你是用C＋＋编程，我再简单谈谈有关内层释放的一个小技巧，就是对所有你编写的类，在构造和析构函数中加打印语句，统计每个类在运行程序时构造和析构的地方，如果是配对的，那么起码没有对象类一级的内层在程序运行结束时没有释放，然后你就可以把打印语句删掉了，招数虽土，但管用！ <br>
<br>
l 还有其它一些好习惯，在这里我随笔写一些，你要是有不同看法也请一笑过之吧。编程时应该对齐缩进，一个缩进用一个tab键，一般是4个空格，严格遵守开发团队的编程规范也是非常重要的。一个子程序不应超过30行(不算空行)，其内多重循环不应超过3层，否则都应该分裂成两个子程序，个别算法程序可以长一些，但也不宜超过200行。通常一个类的所有成员函数总和不宜超过1500行，多了就应该考虑分解成两个类(这个工作最好在设计时就完成)。每完成一小段程序，比如15～30行，就立即编译运行，不要假装高手，先敲它一大堆程序，再编译运行，妄想一次成功，体验一种假爽的、虚荣的快感，或炫耀给别人看，这么做只能证明自己是一个不折不扣的傻瓜，装酷而已。因为只要有一次不成功，你就会花费大量的时间来调程序，别人的进度在这时就远远地超过你了，平常心是道，还是修炼真功夫吧！孙子兵法里关于这一点有明确的阐述，我就不引用了，但建议你真的不要这么干，除非你确实就是这样总是一次就成功的天才，那你还看这篇文章干什么呢？我又不是写给你们这些天才们看的。再就是有学会买好书、读好书，关于计算机和软件方面的书太多了，时间有限，比如有一个叫侯捷的家伙，几乎写的每本书都不错，张国峰的C＋＋编程也不错，这只是我的个人意见啊，好书多着呢，列出来比这篇文章长好多倍，我就不多说了。还有一招，要是你运气好，能搞到一些著名软件系统的源码，好好读读吧，在此我只能告诉你，Linux操作系统的一些源码不错，是开放的，你可以合法地搞到，其它的不要说是我建议你侵犯知识版权啊！ <br>
<br>
<strong>四、天生神力：成为系统分析员</strong> <br>
<br>
本来就论述如何成为一名职业程序员而言，本文已基本完成任务了，但《菜根谭》有言：竭世机枢，似一滴投于巨壑，穷诸玄辩，若一毫置于太虚。既已乘兴到此，何妨多置一毫于太虚呢，作者不才，干脆尽兴写算了。 <br>
<br>
你要是运气好，直接进入了一个严格规范生产的软件企业就业，刚开始就应该是按别人做好的软件设计来实现编程，你可以有机会直接学习软件设计，当你积累的足够多了，能够对其中的一些设计提出好的改进建议，而且干得又快又好，就会渐渐地展露头角，我相信你终有一天成为一名软件设计人员(注意，不是软件产品设计人员)，步入系统分析员的行列，但这还需其它的一些条件和自我修炼。如果你在一个不规范的软件企业工作，那也不错，你很可能直接就有机会进行软件设计，然后开发、测试，甚至还不得不自己定义需求，把软件开发过程的各个环节走一个遍，当然这样对你的要求更高，而且你也不容易得到及时有益的指点，在正态分布的情况下，你应该是成长的很慢。但不管就业的单位如何，如果你决心要成为顶尖软件职业选手，通常什么客观困难都阻挡不了你，然而你个人的因素可能会阻止你的前进。下面提出的观点纯属一己之见，伤人自尊之处作者在此提前道歉，并建议你除非对本文有强烈的兴趣，否则就请直接看第五节或放下别看了。丑话已说在前头了，在各种软件开发组织的发展过程中的事实也证明，只有少数程序员能成为系统分析员，我想这一点不是我杜撰的吧，因此你要是在看接下来的部分时感到气愤难当，那也实在没着，纯属活该，因为作者只是在说明自己的观点而已，你最多可以呲之以鼻，表示一下你的轻蔑好了，但没有任何理由可以骂人！ <br>
<br>
作者自己没有到微软面试过，但身处软件行业，关于微软的许多东东当然还是有耳闻的，据说微软招聘一名程序员要过五个已经成为微软程序员的面试关，而且是一票否决制，又据说大多数面试题并非编程，而是一些有关逻辑和智力的题，作者私下也做过许多流传的微软面试题，并对此做法深以为然。程序的本质就是逻辑，所以几十年前就有人提出编程是一门艺术，而艺术是要靠天份的，这一点少有人反对。一个人的逻辑能力可以不断提高，但其能到达的终极逻辑能力的层次必定为其天生智力所限制，这一点就让人不易接受了。好笑啊！人们可以公开承认自己没有某种或全部的艺术天份，但要说自己逻辑天份不够，换句话说承认自己笨、IQ不够高，往往是要怒发冲冠的，其实这又有什么区别呢？话都说到这儿了，再次建议你如果不够自信，就跳过这一节吧，直接看第五节，好吗？ <br>
<br>
好了，把话题说回来，你已经成为一门合格的职业程序员了，如果要想成为从事软件系统设计的职业系统分析员，第一件事就是悄悄找一个标准智商测试的网站或其它渠道，严格认真的测一测自己的智商，如果IQ低于130 (正常智商是110)，就请别费劲了，打消掉成为系统分析员的念头吧！好！好！先请你冷静一下，好好想想，其实微软面试时就是在测你的智商和逻辑数学素质呢，这就是本节的标题为“天生神力”的原因，因为设计就是从无到有地进行创造，无论是软件还是其它行业都一样，可以有借鉴的，没有现成的，设计就是创造！如果你IQ在130以上，又决心要当一名职业软件系统分析员，其实你不过是要准备好吃更大的苦而已，有什么好虚荣的呢？ <br>
<br>
修炼还是从基本功开始的，过程和成为一名职业程序员差不多。必须使用设计工具这一点是不用多说的。在工作中，你基本上遇到的是两类方式的设计，一个是结构化设计，另一个是面向对象设计，就个人经验而言，面向对象的设计更好。如果你工作中不得不采用结构化的设计，你必须熟练地掌握数据流图和控制流图的分析和设计，一般来讲，如果你把一个软件中用到的数据模型设计好了，针对功能化的流程，不难设计出数据流图，但下一步设计控制流图才是挑战，如果你按照需求走不通设计好的控制流图，那么你或别人在按照这个设计编程实现时，必定也走不通，没有奇迹会发生，还是在设计阶段严格要求吧，又有一点需要牢记：返工是最慢的。当你在进行控制流图的设计时，也不要妄想得到需求人员提供给你明确的指点，通常他们要是能够把需求的功能和操作次序写完整的话，你应该就感恩戴德了，从需求中整理出功能、操作的拓扑次序和条件是你作为系统分析员的职责。看看，要是没有一点图论的基础和拓扑学的入门知识，你是当不好一个职业系统分析员的，即使你天赋不错，必要的数学和逻辑素质仍然不可或缺。也不用气馁，永远没有最好的设计，只有更好的设计，反复地进行设计迭代，勇于推翻旧的设计，你将快速进步。如果你在工作中是采用面向对象进行设计的，那就更有利了，有关面向对象设计的书太多了，不用作者在此多费口舌，建议精读一本经典的书，比如北大邵维忠等编译的《面向对象的分析》，有些方法和技巧可能过时，但其逻辑的基本原理是非常正确的，其本质是，你在逻辑上是如何认识这个世界的，你就是如何设计软件体系结构的，然后读读其它书，触类旁通，自己创造机会多实践，成功自然会到来的，总之，不管是结构化设计还是面向对象设计，评价一下自己的软件系统设计方案吧，有好多指标呢，比如是否均匀和平衡？局部独立性强不强？有没有歧异的结构？有没有层次太多或太少？有没有某个层次太大、太广？是不是逻辑结构先复杂了再化简的？还是只会设计简单的，复杂不起来(这一点是笨哦，如果出现多次，请你不要意气用事，转行吧)？最重要的一点，是否容易理解、实现和改进？你自己会得出评价的。如果有机会看到别人的设计，一定不要错过学习的机会，自己推导一遍，认真比较比较，获益会较多。 <br>
<br>
走到这一步，你就应该关注设计模式了，首先还是学习，这方面的好书有的是，但一般在工作中用到的设计模式较为单一，应该多尝试一下其它的设计模式。其次必须要明白设计模式不是设计思路，也不能代替设计思路，比方你要从A到B修一条路，设计模式只是让你选择，是修水泥的还是柏油的？是高架路还是普通的，但线路必须你自己定，而线路就是设计思路，模式对思路是有影响，但不能代替，所以如果你的智商高达250，我相信你直接用汇编语言也能写出面向对象的程序来。第三在此有一个陷阱，很多系统分析员生搬硬套设计模式，全然不懂如何融会贯通，在你的一项具体工作中，往往是以一种设计模式为主，其它模式为辅的，思维不拘泥于形式才是关键，而且也为你到达更高的软件设计的境界做好准备。 <br>
<br>
唉！都不知该怎么向下写好了，因为已达到作者水平的极限了，我胡乱说一点，你凑合看吧。软件设计最终的层次是：以无法为有法、以无限为有限，这句话是李小龙说的，不是我说的。再拾人牙慧一把，类比一个故事吧，金大侠在《倚天屠龙记》里讲到张无忌初学太极，学会的标志是把刚学的招数全忘了，记住的是太极的道理和精神，和李小龙有些相似喔，软件设计也一样，忘记所有的设计模式，随心所欲进行设计才是至高境界，所以你能到达多高的软件设计的境界最终将取决于你的哲学素质，这一点实在是不好写啊，你自己领悟吧！作者只有祝福了！ <br>
<br>
<strong>五、职业人的终极目标：全面修炼，成为Leader</strong> <br>
<br>
这一节更不好写，涉及到太多其它非技术方面的因素，特别是个人人生观和世界观的修炼，如果本帖的点击率超过作者私下期望的一个数值，那我就争取尽力厚着脸皮再补上吧。我只说一句，虽然大家都知道软件开发是一个团队性的工作，但追求参与一个大型软件系统的成功开发，是一名软件人员的本能，就像拿破仑说的不想当元帅的士兵不是好士兵，所以不追求实现大系统的软件人员，也不是一个好的职业软件人员，但你只有成为Leader，领导一个优秀的软件开发团队，才有机会实现这个终极职业目标，对不对？ <br>
<br>
好吧，不管你现在的感受如何，我都谢谢你能读到这里！我不习惯假歉虚，就不说什么作者水平有限，本文抛砖引玉，欢迎大家批评斧正之类的客套话了，虽然作者水平确实有限。所以我认为你尽管有权砸砖，但实在没必要搞回帖、或回骂、或顶之类的玩意儿，我只是尽兴写一点多年从事软件开发工作的体验，因此接下来我就高挂免战牌，不回复任何回帖了。再次谢谢你能有耐心读到这里！希望本文对你有所裨益，祝你成功！再见！ </p> <a href="http://hi.baidu.com/touchthememory/blog/item/121e26305d40469ba9018eea.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/touchthememory/blog/category/Public">Public</a>&nbsp;<a href="http://hi.baidu.com/touchthememory/blog/item/121e26305d40469ba9018eea.html#comment">查看评论</a>]]></description>
        <pubDate>2007-09-03  10:42</pubDate>
        <category><![CDATA[Public]]></category>
        <author><![CDATA[412858310]]></author>
		<guid>http://hi.baidu.com/touchthememory/blog/item/121e26305d40469ba9018eea.html</guid>
</item>

<item>
        <title><![CDATA[C#的昨天,今天和明天:和 Anders Hejlsberg 座谈(转)]]></title>
        <link><![CDATA[http://hi.baidu.com/touchthememory/blog/item/03fd8ffd272f2e1409244d16.html]]></link>
        <description><![CDATA[
		
		<p>Anders Hejlsberg 在1996年加入微软，开始是Visual J++ 和 Windows Foundation Classes 的架构师。Hejlsberg 是目前微软杰出的工程师和C#语言的设计者，并在微软 .NET 框架中扮演了重要的角色。今天，他正在领导C#语言的开发工作。John Osborn，是O’Reilly 媒体公司的执行编辑，负责公司在.NET和其他微软开发者书籍的工作，最近和Hejlsberg碰面进行了下面广泛的会谈。 <br>
<br>
Osborn:我想我最好还是跳回到2000年我们上次聊天的地方。重新复习上次的对话，对我来说是很有趣的。那时，我们曾经被java痴迷，C#语言和java的对比当时也非常的多。 <br>
<br>
Hejlsberg:是这样的。 <br>
<br>
Osborn:从那是起，五年过去了，C#现在怎么样了，你现在对语言有什么想法吗？C#是微软唯一的工具吗？是否在社区里有一个很宽的领域？ <br>
<br>
Hejlsberg:是这样的。这几年发生了很多事情，世界的发展看起来和当时非常不同，特别是从一个竞争的观点来看。我们没有让.NET和java变得更新，更流行。因此，这里有很多比较可以做。我想在过去的五年里，C#已经成长起来了。今天，我们来说说C# 3.0 我们刚刚发布了 C# 2.0 ，在这之前是 1.0 和 1.1 的版本。 <br>
<br>
我们考虑跟踪研究，从使用方式上看.NET看起来和java有着非常相似的应用。C#的应用更多一些。因此，相对于一个新语言，C#已经成长起来了。很显然，我非常高兴看到这种情况。在.NET和java平台上有着很多明显的不同。我的意思是首先.NET是windows的开发平台。这让你有了一个不同的商业策略。现在，你也知道，我们正在着手进行C#的标准化和.NET框架的核心工作。现在实际上已经有了C# 3.0 的一个标准版本了。ECMA-334 and ISO/IEC 23270]。 <br>
<br>
这里有一点迷惑：那些可以称为是3.0 ，那些则是2.0...... <br>
<br>
Osborn:这是我后面要问你的问题。 <br>
<br>
Hejlsberg:这些数字这有一点不行，我们应该在某种程度上修改一些东西。但除此之外，已经有第三方独立的C#的实现了。这就是大家都知道的Mono。并且，并不是我们的私有策略。 <br>
<br>
同时我也想微软在过去的五年中从透明化，社区参与，开放程度等方面有了很大的转变。像我们现在和客户进行的对话和五年之前是非常非常不同的，和十年前相比更是天壤之别。你知道，整个行业，通过Blog和开放源代码，已经改变了很多，单个开发者参与的也和过去是不能比拟的。 <br>
<br>
<strong>C# 语言作为面向组建的语言</strong> <br>
<br>
Osborn:当你在2000介绍C#语言的时候，一个很厉害的武器是这是第一个面向组件的语言。在过去的五年中，这一点改变了吗？ <br>
<br>
Hejlsberg:哦，当然，变得更好的。可是，C#仍然是有很多面向组件语言的特点。这带给我们属性，方法，事件和其他的开发者每天编程都会平到核心部分。很久以前，甚至最近，编程仍然是一个辅助工具，这些工具仍然倾向于这样一种编程模型：设计界面，在这上面放上组件，然后修改属性，并加上代码。 <br>
<br>
我总觉得属性，事件，方法是如此重要，应该作为语言的一等公民来对待，这就是我们在C#上所做的工作。老实说：我也听到了一些对属性的抱怨。这其实是个屁事，你明白我的意思吗？事实上，人们总是按照事实来想问题。 <br>
<br>
从常识上来看：作为一等公民来看待的主意是我们经常做的，是非常自然的。我们在LINQ中有很多方法来做一件事情，语言集成的查询，不是吗？因为我们都需要查询，那么不应该在编程语言中把这些查询符号作为很重要的事情对待吗？用声明的方法在一个更高的层次来表达一些事情比你写很多诸如for循环和if判断语句的来得更自然吧。 <br>
<br>
Osborn： 回到和语言相关的问题，我现在还是想说说LINQ。微软 Visual Stuido .NET 的产品经理 Tony Goodhew 在一次访谈中说过，微软的研究表明越来越多的人倾向于在编程中使用2种或者更多的语言来工作。好像现在有一种感觉，这就是语言只是 syntactic sugar 语法糖块。你选择某种语言是因为你对他最满意。 <br>
<br>
你认为现在有这种变化吗？我们以前没有过多谈过这方面的。 <br>
<br>
Hejlsberg: 好吧，的确没有谈过，但是语法是不是走到了尽头？我的意思是我们只是用 XML 文档来描述抽象语法树来表现你想做的，这也是一种语法，但是很显然，这对程序员来说并不怎么有用。因此，我认为编程语言在人们的脑海中占据这一个特别的位置，如果人们用语言说话是表达自己的一种方式，程序语言也和自然语言一样用来表达你自己的。 <br>
<br>
实际上，语法是编程语言的组成和表现形式，在很多方面，语法影响你如何思考你的程序，等等。因此，我认为语法很重要，非常重要。 <br>
<br>
Osborn： 那么从语法的角度来看，C#有什么特别的呢？你能给我们描述一下吗？ <br>
<br>
Hejlsberg: 好，我认为我们现在所说的面向组件类的特点是极为重要的。我们努力的做到没有其他的方法可以做这件事情。我们尝试发现语法间的协同，我的意思是：这很难用语言来精确的形容。那我们来看看语言级别集成的LINQ查询吧。这个可扩展的模型是：我们采用方法调用的方式来实现这一点。当你使用 where , orderby 和 select 语句来写查询语句的时候，我们把这个转换成对等的方法调用：Where, OrderBy 和 Select 集合。我们把你写的查询作为 Lambda 表达式语句传递给相关的方法。 <br>
<br>
这样，查询就变成连在一起的方法调用，从而查选也变得可读性更好，这就像一个语言胶水一样。上面的转换是立即执行的，如同 foreach 循环转换成：从while 循环中获得一个数字一样。这个小小的改进非常有利于你在更高的层次上思考问题。你明白我的意思吗？ <br>
<br>
Osborn：明白。 <br>
<br>
Hejlsberg:从这方面来讲，语法在很大程度上影响了你如何思考问题的，尽管这些语法上的东西根本和事情本身毫无关系。 <br>
<br>
Osborn: 是的。从书籍出版商的角度来看，我们公司自己的历史数据上显示，古老的C++语言有自己的地盘，在书籍出版量上只有很少的增长；去年VB的销量下降了百分之20到百分之25。C# 书籍销量还算平稳。但是很平淡。 <br>
<br>
Hejlsberg:哦，这样呀。 <br>
<br>
Osborn： 情况很清楚，从我们的销量来看，似乎有股从VB转向到C#的动向，或者其他的。可是C++却自始至终占领者一部分市场。 <br>
<br>
Hejlsberg: 没错。VB 和 C# 在同一个程序员的群体里是相互竞争的。C++ 扮演这一个特别的角色，可是C++的核心是写非托管的代码，是相对底层的编程。我知道我刚才是泛化的说明，你也可以使用 STL 来作基于模板的编程。标准模板库有他伟大的地方。我只是说，从更广泛的背景上看C++写出的应用程序和用 VB 和 C# 写出的程序是应用于不同的目的的。 <br>
<br>
Hejlsberg:对于C++应用领域的跌落，我感到并不惊讶。 <br>
<br>
Osborn：我知道一个人不能用C++来写托管代码。 <br>
<br>
Hejlsberg: 从个人出发点来看，我也不会用它来写托管代码。但是，你要是让我来写一个编译器，这可不能是托管代码，那我还是会用C++的。经过这么多年的发展，我认为作为一条通用的规则，写托管代码的理由会越来越多。原因很简单啦，硬件变得更加强大，牺牲点 CPU 和内存来换取更高的生产效率来说就变得更重要了。我觉得这时一个非常有价值的命题。并且，我坚信这会逐渐的成为共识。另外，托管世界的也变得更加精彩啦。也就是，越是有创新的地方就越有更多的程序被企业所应用。 <br>
<br>
<strong>泛型和C#</strong> <br>
Osborn：侃了这么多，我们来说点关于 C# 2.0 的事情吧。很明显，C# 语言朝着泛型的方向发展有很长一段时间了。 <br>
<br>
Hejlsberg:没错。 <br>
<br>
Osborn： 那么，相对于其他的语言而言C#的泛型有什么不同呢？ <br>
<br>
Hejlsberg: 哈哈，靠，很明显我更想让你说：就在C#和Java之间比较吧。 <br>
<br>
Osborn：没错，我也是这个意思。 <br>
<br>
Hejlsberg: 首先，我非常高兴的我们在2.0里面加入了泛型编程。你现在看我们做的C# 3.0 里面的很多东西都是泛型在起作用。这的确是意义深远的，引入泛型后为类型系统开辟了一个新的空间，也打开了实现更多可能性的大门。比如：没有泛型的帮助，我们不可能做到语言级别集成的查询LINQ。从这个意义上讲，这是更多有趣功能后面的发动机。泛型也是现实编程世界里的解决方法的好帮手。 <br>
<br>
对，有更多的类型是很好的，这意味着你可以更快的发现错误，因为只有很少的运行时动态检查程序的类型，因此你可以写出很好的代码来。 <br>
<br>
现在，看看 java 和 C# 这对冤家吧，从语法学上面看两者实现泛型的形式是很相似的。他们都像 C++ 的模板，这是继承下来的。 <br>
<br>
现在我们抛开表面看本质，Java 和 C# 的泛型实现机制是截然不同的。我认为最大的不同在于：.NET平台下的泛型不只是一个语言特色。泛型根植于 CLR 和 .NET 的类型系统。这也就是为什么泛型可以在运行的时候表现出来。 <br>
<br>
而 Java 则选择了另一个不同的方式实现泛型，一言以蔽之，他们是在编译时实现的。而且 Java 编译器把泛型化从代码中移除了，并注入了对象，有效的对象替代了类型参数信息。也就是说呀，Java 在运行时根本没有泛型这一说。这就有意思啦，一方面可以让泛型跑在一个未经修改的 VM 虚拟机上，另一方面强加给你很多让然吃惊的限制和规则。相对于我们的泛型实现来说，java 的泛型并不能带来性能的收益，很显然吗，不管外表 List&lt;T&gt; 看起来多么泛型，Java 在运行时压根没泛型这马事儿，你不得不自己做运行时的动态检查和类型转换。 <br>
<br>
更微妙的是，因为 Java 没有在运行时的泛型信息，你从你的编译后的代码丢失了泛型信息。。如果在运气期间，有人给你一组自定义的对象，他们传递给你的仅仅是对象，如过你想从对象中推测是这些对象的更多信息是办不到的，因为额外的信息已经被移除了。 <br>
<br>
在现实世界里，我们越来越多的依赖运行中代码和动态行为的动态生成和检查，而Java 的泛型实现对我来说，是很大问题，他缺少程序运行时候的真实表现。 <br>
<br>
Osborn： 牛呀，这么说 .NET 实现的泛型允许我们…… <br>
<br>
Hejlsberg: 太对了。如果我定义一个 List&lt;T&gt; 作为一个 object , 我可以问 “这是什么“？系统可以告诉我，这是一个列表。他还可以告诉我们，这是一个 List&lt;T&gt; ，T 代表 Customers 类。我还可以说：为什么不给我一个 System.Type 的 List&lt;T&gt;也可以是，你为什么没有把 T 绑定到 Order ？也就是说我们可以把类型转换为 List&lt;Order&gt; ，并创建他的一个实例。说了这么多，总之，我可以通过反射在编译的时候，在运行的时候来实现上述功能，这是一个巨牛的功能呀。 <br>
<br>
Osborn:关于增加的匿名方法有什么特点吗？我记得当匿名方法刚被人介绍出来的时候，我和其作者聊过，他说你不得不在语言中支持这样的功能，但是为什么要这么做，却说不出个所以然来。我肯定匿名方法有他的实际用处，看我们这篇报道的人也有同样的问题吧。尽管如此，在C# 3.0中支持匿名方法的特色，和泛型一样，还是很吸引人的。 <br>
<br>
Hejlsberg:那绝对是。老实说，首先，你知道我们应该把荣誉放到他应该放的地方。我并没有在这里创造什么新的东西出来。这一切都是基于 lambda 表达式或者 lambda 微积分 的，他们已经在基于函数的编程方法里存在几十年了。然而，在主流的编程语言中确看不到他们的身影。 <br>
<br>
C# 语言有幸成为第一个实现这个特色的语言。我们是怀着严肃的态度来改进它的，这一点你将在C# 3.0中看到他们的身影。我们在匿名方法的基础上做了进一步的改进，我们成为 lambda 表达式，并给了它丰富的接口支持。 <br>
<br>
Hejlsberg:为了表明这一点是如此的重要，我们来举例说明吧。在 C# 3.0 中我们引入了和语言集成的查询符号：LINQ。我们做的事情是：把查询的语言做成API的方式变成了可能。上面我说过，这些方法就是：Where,Select,OrderBy 和 GroupBy 等等。我们可以用一系列的Where ,Select ,OrderBy 和 GroupBy 方法组合起来，形成一个完整的查询。 <br>
<br>
如果你想在一种不支持匿名方法或者 lambda 表达式的语言中实现一个Where方法，这是不太可能的。一个 测试应用到每个元素上， 你知道我说的意思吗？我想说 list.Where(blah) ， blah 是我希望在测试中输入的一个参数。 <br>
<br>
但这并不是一个普通意义上的参数，因为我并没有把它作为一个 布尔 值参数，很显然这个参数首先被计算，然后在传递进去。我并不想看到 真 或者 假，我只是想传递 测试 本身。你知道我刚才讲的意思吗？ <br>
<br>
Osborn:是的，你想传递一个过程，然后执行这个过程。 <br>
<br>
Hejlsberg:没错。实际上，我希望的是我引用一些代码，并且我可以执行这些代码，对不对？我希望一个方法的引用或者一个函数的引用，然后把他们传递到 Where 表达式，然后Where表达式可以为每个数据项运行这些代码，这就是测试，然后最终的结果是返回所有执行结果为真的数据项。同样的道理，如果你看看 Select 操作符是如何执行的，他和上面的道理是一样的。这就是：提供一个元素，提供一个函数他就能把元素转换成另一个元素。这就是组合的威力。 <br>
<br>
OrderBy 和这是同样的道理，提供一些元素，然后对他们进行比较。重申一遍，这些都是通过写代码实现的。在这里，最让人印象深刻的是编程语言丢失了把代码作为参数传递的能力。 <br>
<br>
Osborn:这是非常重要的功能。 <br>
<br>
Hejlsberg:这只是 lambda 表达式和匿名方法能让我们实现的一点事情。另外要补充说明的是： lambda 表达式 和匿名方法其实是一件事情。唯一的不同是：他们语法表现形式不同。Lambda 表达式是在语法方面的更进一步的进化。在本质上，他们是一件事情。他们的作用都是：产生方法。这就是：内联方法。 <br>
<br>
<strong>C# 2.0 的其他方面的亮点<br>
</strong> <br>
Osborn:除了 泛型 和 匿名方法外 人们还应该注意 C# 2.0 的其他方面呢？ <br>
<br>
Hejlsberg:Nullable 类型，一个非常重要的进步。因为这是在数据库世界和通用编程世界的变得平等的第一步。你知道，在数据库中基于 Nullable 类型 而程序编程中确不是，因此这两者之间的映射很难说明明白有什么意义。 <br>
<br>
Hejlsberg:当然，你可以跳过这些… <br>
<br>
Osborn:你现在要做的事情是? <br>
<br>
Hejlsberg:在编程过程中人们经常用装箱操作。比如：为对象分配空间，然后保存数据，如果不再使用了就设置为：null。在java中做这个是非常有效率的。但是这种方法使用起来却是非常耗费效率的。因为，为了表示一个可能值为null的整数值，在java中使用Integer封装类，为每个 int 值分配空间，然后当他们是null的时候你设置值null来实现。 <br>
<br>
Hejlsberg:这不是直接发生的，你让每个int值耗费了4陪的内存空间。又很多耗费和这点相关。在 C# 使用 nullable 类型，我们可以非常高效的让你可以把对象值设置为null,可是并不给他分配内存空间。我们通过一个泛型类型：T 和 bool 来实现这个特性。这就是： Nullable&lt;T&gt; ，他的内部有2个字段： T 和 bool。 <br>
<br>
但是 Nullable&lt;T&gt; 本身也是一个值类型。这个类型实际上用了 栈分配 或者 内联分配，从内存的角度来看这是非常高效的。总之 ， 我们使用语言语法来支持： nullable 。我们使用问号作为修饰语。 <br>
<br>
因此： int 是一个整形数据， int? 是一个 nullable的整形数据。可以把 int 隐式的转换成 nullable int ，其他方式的显式转换可以抛出 null 异常。这就是说：把人们常用的这种情况作为一等公民来对待。 <br>
<br>
对于我，一个语言的设计者，这个问题就是：人们在这里会做什么呢？在编程中什么是应该作为一等公民来对待的。 <br>
<br>
Osborn:这么说 C# 一种语言将会统治所有其他语言？ <br>
<br>
Hejlsberg:^_^，绝对不是啦，我真的不是这么想的。世界上还有很多其他的场合更适用于其他的语言。在 C# 的本质来说， 他是一种强类型的语言。你知道，对于很多事情来说，动态语言更适合，如果你只是准备写几行代码，并且不愿意在还没有写代码之前就要写一大堆声明。你只是想试试而已。 <br>
<br>
在语言的世界里，我希望我能够尽我所能超前发展。 <br>
<br>
Osborn:对于 2.0 来说，我们看到微软是不是也是按照标准实现的？ <br>
<br>
Hejlsberg: 2.0　吗？ <br>
<br>
Osborn:对 2.0 。 <br>
<br>
Hejlsberg:没错。从标准上说，叫：第三版，但实际上我们叫他 2.0 。 <br>
<br>
Osborn:因此这里面微软没有做什么改变吧？ <br>
<br>
Hejlsberg:没有，每个语言特色我们都提交到了 ECMA ，并且这是一个标准的过程。我们希望公平简短的社区投票，在这一点上，这的确是个问题。这些事情都已经发生了，我们已经这么干了。参考：C# 和 CLI 变得更加强大。 <br>
<br>
Osborn:是不是大概就在今年年底？ <br>
<br>
Hejlsberg:没错。 <br>
<br>
<br>
John Osborn 是 O’Reilly Media 公司的执行编辑。</p> <a href="http://hi.baidu.com/touchthememory/blog/item/03fd8ffd272f2e1409244d16.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/touchthememory/blog/category/Public">Public</a>&nbsp;<a href="http://hi.baidu.com/touchthememory/blog/item/03fd8ffd272f2e1409244d16.html#comment">查看评论</a>]]></description>
        <pubDate>2007-09-03  09:48</pubDate>
        <category><![CDATA[Public]]></category>
        <author><![CDATA[412858310]]></author>
		<guid>http://hi.baidu.com/touchthememory/blog/item/03fd8ffd272f2e1409244d16.html</guid>
</item>


</channel>
</rss>