快乐回忆之QBASIC语言-五子棋篇

五子棋缘


#1 快乐回忆之QBASIC语言-五子棋篇 作者:有志青年 发表时间:2007-4-18 19:08:19

快乐回忆之QBASIC语言-五子棋篇。
牐牐牐
牐牐牐
牐牐牐犓淙辉缙贐ASIC语言运算速度慢、对硬件的可操作性不高、语法结构不严谨、图形化界面开发困难甚至面向过程都被很多人所诟病。但是,BASIC实在是一种很奇妙的计算机语言。因为它完全可以让你在最小化的负担的情况下去按照自己的意愿去编程。
牐牐牐牷辜堑檬歉丈铣踔械氖焙蜓习MS-DOS6.22,接触了系统自带的QBASIC,那时候就觉得这个是个很奇妙的东西。因为以前接触电脑都是玩一些电脑游戏,用WINDOWS3.1里面的画图软件涂鸦。而用QBASIC可以让计算机按照自己的意愿自动地工作,接触了BASIC语言以后触发了我对计算机处理的思考,并通过逐步的学习,也能自己写一些小游戏和小应用软件了。
牐牐牐牸堑米钤缧吹挠蜗肥且桓觥笆头、剪子、布”的猜拳游戏,由人跟电脑一起游戏,人这边选择即将出的拳,电脑则在随即函数(RND)的控制的随机的出拳,然后在屏幕上显示出胜负结果。这个游戏现在看来很“弱智”,代码也只有寥寥数十行。但是却是启蒙的好材料,因为这里让我学到了基本的人机交互、算法过程的处理、还有界面的应用。后来,随着接受的知识的不断增多,对图形绘制慢满的有了了解。就开始思考做其它的游戏。那时候五子棋在学校里面非常流行,因为没有专门的棋,大多数情况下都自己在一张白纸上画上格子当做棋盘,然后带上这张纸和一支笔就去找人挑战去了。于是产生了写五子棋游戏的想法。
牐牐牐犇氖焙蚰懿僮魃匣的时候比较少,一个星期最多只有2节计算机课,还不一定能上机。所以程序的“算法”和源程序都是自己直接写在纸上的。刚开始,由于会的函数和语句都少,只好从一些常用语句的角度来考虑程序的流程。大概是这个样子的:
牐牐牐 1 绘制棋盘(使用FOR循环加LINE语句) 很简单^_^
牐牐牐 2 初始化黑子位置(黑子先行嘛)
牐牐牐 3 显示操作的文字说明
牐牐牐 4 截取键盘输入(利用INKEY$语句,截取上、下、左、右和功能键的输入)
牐牐牐 5 按照相应的的按键触发程序段的跳转以实现各种功能(使用GOTO,方向键、功能键、落子)
牐牐牐 6 返回到第4步
牐牐牐 7 对按键进行响应,完成相应功能以后返回(略)
牐牐牐 这个雏形,当时很快就写出来了,当然这个是非常不完善的,界面不好看,落子只是一个圈圈,不能够判断胜负,棋子可以被覆盖,只有一组操作键2个人一起玩的时候不方便(键盘退来退去的)。虽然程序很简陋,但是在学校机房里面还起了小小的影响。经常看到上计算机课的同学用这个在下五子棋。^_^
牐牐牐牴了几天学会了新的程序结构——数组,知道了嵌套式循环。于是,又自己想出了完善程序一些方法:
牐牐牐牴赜谖遄悠宓囊恍┕程思想:
牐牐牐1 关于能否落子的判断
牐牐牐 我自己想的办法是利用数组引入坐标权值来记录该位置上的状态,如果权值为0则说明该位置还没有落子。
牐牐牐 当然坐标的数字是比较大的,如果直接用坐标来当作数组,在BASIC里面容易溢出。当时自己想的办法是量化屏幕坐标系——棋盘的每
牐牐 犚桓裰间的坐标距离被作为量化的单位,这样一来即使是20*20的的棋盘也只用一个(20,20)的数组就可以了。(^_^,当时还没有接触互连网,学习资料是很匮乏的,能够独立想出这样的办法,心里面不免沾沾自喜。)
牐牐牐2 关于按键判断
牐牐牐 使用DO LOOP循环,或者WHILE甚至是GOTO 语句都可以完成,不停的最按键接受进行循环截取,一但按键是事先已经定义好的范围,则使用GOSUB来调用相应的子程序段。在按键判断里面学会了使用方向键,由此定义了两组操作按键,对应玩家1和玩家2。
牐牐牐3 对胜负的判断
牐牐牐 这个问题捆绕了我很久,开始想的是使用递推方法:即以当前落子位置为中心点开始,对8个方向上的棋子进行判断,如果下一颗棋子还跟当前棋子是同样的颜色(通过从坐标量化过来的数组,和数组的权值可以得到),则继续进入递推的下一次循环(从后来的接触和学习来看,这个是使用得比较多的办法)。不过这个算法却让我很头痛,因为写程序的时候很容易出错,8个方向上的判断写起来也非常烦琐。
牐牐牐犞钡匠踔斜弦担父母给自己买了电脑,有更多的时间来做这些,才有了新的思路。(^_^这也是早期让我引以为豪的地方,呵呵)
牐牐牐犚蛭我本身在判断落子的时候就使用了判断坐标数组的权值的方法,于是我想出了更便捷的算法,那就是当前落子点为基点,分别读取5组在某个方向上连续5颗旗子坐标的权值,并计算权值的和。如果权值为5则黑子胜,为50则为白子胜。因为在我的坐标权值里面1代表黑子,10代表白子,只要是达到了5子连珠的条件,那权值的和肯定是5或者是50,并且这样以来,8个方向的判断也被我简化为了4个方向^_^。哈哈,
牐牐牐犝飧鏊惴ㄔ经让我得意了好久^_^。因为五子棋的胜负条件是五子连珠,就是说只要两中棋子的坐标量化后的权值的差异超过5倍。这个胜利条件的

#2 Re:快乐回忆之QBASIC语言-五子棋篇 作者:小丸.net 发表时间:2007-4-18 21:30:53

看到这些,不觉想当年。偶用QBASIC编了一个黑板板的设计软件。