用Java做五子棋小游戏

      断断续续看了马士兵的JavaSE基础教程,现在还有容器、IO和多线程没有看完。学习给我感触最深的是内存分析,知识点可以是先有个了解,需要用时再去翻书,看看具体怎么样,当然如果特别熟是更好的。

       通过对程序进行内存分析,理解了程序运行过程,在JAVA中,有六个不同的地方可以存储数据[1]:

1. 寄存器(register)。这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部。但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配。你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象。

2. 堆栈(stack)。位于通用RAM中,但通过它的“堆栈指针”可以从处理器哪里获得支持。堆栈指针若向下移动,则分配新的内存;若向上移动,则释放那些内存。这是一种快速有效的分配存储方法,仅次于寄存器。创建程序时候,JAVA编译器必须知道存储在堆栈内所有数据的确切大小和生命周期,因为它必须生成相应的代码,以便上下移动堆栈指针。这一约束限制了程序的灵活性,所以虽然某些JAVA数据存储在堆栈中——特别是对象引用,但是JAVA对象不存储其中。

3. 堆(heap)。一种通用性的内存池(也存在于RAM中),用于存放所以的JAVA对象。堆不同于堆栈的好处是:编译器不需要知道要从堆里分配多少存储区域,也不必知道存储的数据在堆里存活多长时间。因此,在堆里分配存储有很大的灵活性。当你需要创建一个对象的时候,只需要new写一行简单的代码,当执行这行代码时,会自动在堆里进行存储分配。当然,为这种灵活性必须要付出相应的代码。用堆进行存储分配比用堆栈进行存储存储需要更多的时间。

4. 静态存储(static storage)。这里的“静态”是指“在固定的位置”。静态存储里存放程序运行时一直存在的数据。你可用关键字static来标识一个对象的特定元素是静态的,但JAVA对象本身从来不会存放在静态存储空间里。

5. 常量存储(constant storage)。常量值通常直接存放在程序代码内部,这样做是安全的,因为它们永远不会被改变。有时,在嵌入式系统中,常量本身会和其他部分分割离开,所以在这种情况下,可以选择将其放在ROM中.

6. 非RAM存储。如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。

程序的执行过程[2]:

      在学了一部分常用类后,想看看程序运行结果,根据网上的五子棋源代码,阅读了两个java五子棋的程序,并且生成了游戏,成功对弈一盘。我看到的两种算法:1.利用分数代表每个位置的重要程度,越重要的位置的分数值会越高,当电脑下棋时会先将电脑和玩家棋型的分数分别计算一遍,然后选择二者中分数最高的点下子。如果玩家的分数高,那么代表电脑应该防守,如果电脑的分数高,那么代表电脑应该进攻。2.计算棋盘上某一方格上左、右、上、下、左上、左下、右上、右下八个方向棋子的最大值,判断该坐标位置是否可下棋子。计算机走棋时,用穷举法判断每一个坐标点的四个方向的的最大棋子数,最后得出棋子数最大值的坐标,然后下子。

    使用第二个方案的源代码生成的游戏,完了两局都,设计的还是不好,程序只是给了简单的判断准则,相对智能点还是实现不了,以后会留心着更智能的设计。

参考资料

[1] 《Thinking in Java》中文第四版。

[2]  马士兵《J2SE课件》。

转载于:https://www.cnblogs.com/lefan/archive/2012/12/01/2797801.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值