首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一个下五子棋程序源代码的有关问题,

2012-02-03 
一个下五子棋程序源代码的问题,求助!!大家好,我在看《C语言速成3.0》中,有一个现成的五子棋源代码例程,我有

一个下五子棋程序源代码的问题,求助!!
大家好,

    我在看《C语言速成3.0》中,有一个现成的五子棋源代码例程,我有些看不懂,希望大家指点一下,谢。   代码如下:

/**********************************************************/
/*             本程序在Turbo   C或Borland   C下编译通过                             */
/*             源程序在光盘   \source\   目录下                                             */
/*             文件名:   afive.c                                                                       */
/**********************************************************/

/**********************************************************/
/*   程序中用到的库函数所在头文件应用   #include   命令包含进来   */

#include   <stdio.h>
#include   <bios.h>
#include   <ctype.h>
#include   <conio.h>
#include   <dos.h>

/**********************************************************/
/*   定义符号常量                                                                                       */

/*定义画棋盘所需的制表符*/
#define   CROSSRU           0xbf     /*右上角点*/
#define   CROSSLU           0xda     /*左上角点*/
#define   CROSSLD           0xc0     /*左下角点*/
#define   CROSSRD           0xd9     /*右下角点*/
#define   CROSSL             0xc3     /*左边*/
#define   CROSSR             0xb4     /*右边*/
#define   CROSSU             0xc2     /*上边*/
#define   CROSSD             0xc1     /*下边*/
#define   CROSS               0xc5     /*十字交叉点*/

/*定义棋盘左上角点在屏幕上的位置*/
#define   MAPXOFT           5
#define   MAPYOFT           2

/*定义1号玩家的操作键键码*/
#define   PLAY1UP           0x1157/*上移-- 'W '*/
#define   PLAY1DOWN       0x1f53/*下移-- 'S '*/
#define   PLAY1LEFT       0x1e41/*左移-- 'A '*/
#define   PLAY1RIGHT     0x2044/*右移-- 'D '*/
#define   PLAY1DO           0x3920/*落子--空格键*/

/*定义2号玩家的操作键键码*/
#define   PLAY2UP           0x4800/*上移--方向键up*/
#define   PLAY2DOWN       0x5000/*下移--方向键down*/
#define   PLAY2LEFT       0x4b00/*左移--方向键left*/
#define   PLAY2RIGHT     0x4d00/*右移--方向键right*/
#define   PLAY2DO           0x1c0d/*落子--回车键Enter*/

/*若想在游戏中途退出,   可按   Esc   键*/
#define   ESCAPE             0x011b

/*定义棋盘上交叉点的状态,   即该点有无棋子   */


/*若有棋子,   还应能指出是哪个玩家的棋子       */
#define   CHESSNULL       0     //没有棋子
#define   CHESS1             'O '//一号玩家的棋子
#define   CHESS2             'X '//二号玩家的棋子

/*定义按键类别*/
#define   KEYEXIT                 0/*退出键*/
#define   KEYFALLCHESS       1/*落子键*/
#define   KEYMOVECURSOR     2/*光标移动键*/
#define   KEYINVALID           3/*无效键*/

/*定义符号常量:   真,   假   ---   真为1,   假为0   */
#define   TRUE                 1
#define   FALSE               0

这些是宏定义部分的代码,我不太明白那些以0x开头的那些宏定义是根据什么指定出来的,如#define   ESCAPE             0x011b,
                #define   PLAY1UP           0x1157/*上移-- 'W '*/
为什么要是0x011b,0x1157?   根据什么呀?指定成别的可以吗?
还有#define   CROSSRU           0xbf     /*右上角点*/有什么用呀?   为甚么这么定义呀?
希望大家给我说明白一下好吗?

[解决办法]
看了一下,不是很懂,还是给你点建议吧:我认为是随便定义的,你可以实验一下:比如你把ESCAPE的宏定义修改一下,看看程序是否还可以正确执行,如果程序不能正常运行,说明必须那样定义,如果必须要那样定义,我想你应该看一下键盘上各个按键的代码,看是否可以找到原因。
[解决办法]
楼主知道是扫描码就不需要问键定义了。

还有#define CROSSRU 0xbf /*右上角点*/有什么用呀? 为甚么这么定义呀?
这个是扩展ascii码,估计你的程序是英文环境下的(很可能是dos下的),英文下扩展ascii码都是些图形字符,什么各式各样的横线竖线角什么的,那个0xbf大概是个右上角符号。
[解决办法]
你看看后面的程序就知道了,输出那些定义的CROSS的地方,都是棋盘上还没有布子的位置,它本身就是在画棋盘。然后有子的位置上就输出CHESS1、CHESS2。
[解决办法]
还有个问题,看到程序中有很多只能使用TC函数库才可以的函数,如bioskey(),textmode(),
gotoxy(),textcolor(),delay(),sound(),nosound()等等,请问有没有可以用ANSI C中对应功能的函数代替?我不想让她只是在TC下编译,也可以在VC++下编译的。
-------------------------------------

那是编译器提供的库函数,在VC下是无法编译通过的.

VC自身也有强大的库函数,加上API完全可以实现那些功能.

热点排行