围棋C语言程序的设计 功能模块设计 2.1.1系统模块 本程序分为四个子模块,分别是程序初始化模块、程序功能控制模块、弈棋操作模块和其他模块。 (1) 程序初始化模块。这个模块主要用于屏幕信息初始化,包括显示欢迎信息、操作信息和棋盘初始化。 (2) 程序功能控制模块。这个模块是各个功能函数的集合,主要是被其他模块调用,包括画棋子、胜负判断和行棋转换等功能。 (3) 弈棋操作模块。这个模块主要用于执行下棋操作。 (4) 其他模块。这个模块主要用于显示帮助信息,提示轮到哪方下棋等。 2.2 数据结构设计 2.2.1 定义数组 定义了一个数组status[N][N],这数组存储整数类型的值,至多可以存储到status[19][19]。数组status存储给定坐标的状态。状态有三个,分别是0、1和2。0表示给定坐标映射的位置上没有棋子,1表示给定坐标映射的位置上是Player1的棋子,2表示给定坐标映射的位置上是Player2的棋子。 2.2.2 全局变量 1)step_x和step_y 定义两个变量,这两个变量是整型类型的变量,表示行走时棋子处的坐标,step_x和step_y分别表示x和y坐标。 2)Key 定义一个变量,这变量是整型类型的,表示按下的键盘的键值,本程序中可以获取的值有0x4b00(LEFT)、0x4d00(RIGHT)、0x4800(UP)、0x011b(ESC)和0x3920(SPACE)。 3)flag 定义一个变量,这变量是整型类型的,用以表示是哪个玩家。Flag为1的时候是表示Player1,为2的时候是表示Player2。 2.2.3坐标位置偏移 坐标位置偏移主要是用在函数DrawBoard()和函数DrawCircle()中。在此定义了OFFSET_x(大小为4)、OFFEST_y(大小为3)和OFFSET(大小为20)三个偏移量,分别表示x、y坐标偏移和放大倍数。 2.3 函数功能描述 1)DrawBoard() 函数的原型是void DrawBoard() DrawBoard()函数用来画棋盘的。棋盘是由19条横线和19条纵线交叉组成的。这个函数主要是通过调用系统函数line()来实现的,同时也输出一些提示性的文字,例如按键操作。 2)DrawCircle() 函数的原型是void DrawCircle(int x,int y,int color) DrawCircle()函数用于在指定的坐标位置、用指定的颜色种类下画圆圈。本程序中,可以用小圆圈表示棋子的,不同颜色表示不用的下棋方下的棋子。在这里x、y指明所画圆圈的圆心位置,半径大小则在函数中设定;color用于表示所画圆圈的颜色的,分别为白色和红色(现实中是为黑白双方,但本程序为了方便颜色差异,改为了白红两种),白色小圆圈表示的是Player1下的棋子,红色小圆圈表示的是Player2下的棋子。该函数主要是调用系统里面的函数circle()来实现的。 3)Alternation() 函数的原型是void Alternation() Alternation()用于在两个下棋者之间交换两个人下棋的顺序,如果当前是Player1刚下棋,则转换后变成下一步由Player2来下;反之亦然。通过用全局变量flag来标识。 4)JudgePlayer() 函数的原型是void JudgePlayer(int x,int y) JudgePlayer()函数主要是根据不同的下棋方来画不同颜色的小圆圈,对下棋方的判断主要是根据全局变量flag来进行的。这个函数是调用DrawCircle()函数来实现的。 5)Done() 函数的原型是void Done() Done()函数是这个程序的最关键的函数,主要是用来实现下棋的各种操作。这个函数首先得到的是下棋方在键盘上面按下的键值,这么几个键值可能是LEFT、RIGHT、DOWN、UP、SPACE或ESC其中的一种,根据键入操作中得到的键值,然后再作相对应的一个操作。对于不同类型的操作,都是要先通过判定下棋的人下的棋子的位置范围是不是对了,也就是说,落下来的棋子是不是在棋盘里面,如果不在棋盘里面的棋子的话,就可以不再在管它;如果落 下的棋子是在棋盘里面的各种操作,就要根据定义的数组status[i][j]((i,j)表示当前棋子位置的坐标)中保存的当前的这个棋子的位置的状态来进行,一种情况是状态值是0的话,就可以按照下棋者的要求移动棋子位置,并且在移动棋子后,把(i,j)位置的状态值记录到flag1或者是flag2,1表示Player1,2代表Player2;一种情况是获取的键值是ESC的话,则表示退出程序。 6)Get_QI() 函数原型:int Get_QI(int x,int y) Get_QI()函数用于检查在(x,y)位置上的棋子的气的函数,通过函数检查出这个棋子四周是否存在气。 7)WelcomeInfo() 函数的原型是void WelcomeInfo() WelcomeInfo()函数用于输出屏幕上面显示的欢迎信息和一些提示类的信息,如按键操作等。 8)ShowMessage() 函数的原型是void ShowMessage() ShowMessage()函数用于显示当前下棋方,表示该轮到哪一方下棋了。 本文来源:https://www.wddqw.com/doc/af93f9586337ee06eff9aef8941ea76e59fa4a6b.html