2012年C语言五子棋课程设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*






*/
int
gPlayOrder;
/* 指 示 当 前 行 棋 方
*/
struct point gCursor;
/*光标在棋盘上的位置
*/
char gChessBoard[19][19];/*用于记录棋盘上各点的状态*/
/**********************************************************/
#define PLAY2RIGHT 0x4d00/*右移--方向键right*/
#define PLAY2DO
0x1c0d/*落子--回车键Enter*/
/*若想在游戏中途退出, 可按 Esc 键*/
#define ESCAPE
0x011b
/*定义棋盘上交叉点的状态, 即该点有无棋子 */
/*若有棋子, 还应能指出是哪个玩家的棋子
if(ChessGo(gPlayOrder,gCursor)==FALSE)/*走棋*/ DoError();/*落子错误*/
else {
DoOK();/*落子正确*/
/*如果当前行棋方赢棋*/ if(JudgeWin(gPlayOrder,gCursor)==TRUE) {
DoWin(gPlayOrder); bOutWhile = TRUE;/*退出循环标志置为真*/ } /*否则*/ else /*交换行棋方*/ ChangeOrder(); } break;
六、调试过程
运行平台:C/C++程序设计学习与实验系统 1、点击运行,出现棋盘界面
6
2、根据界面提示键落子,玩家一先下,双方轮流落子。
7
3、一方五子相连,判出赢家,游戏结束。 4 按任意键退出游戏。
8
七、问题与与总结
1、用十六进制数制表格的方法不了解,参照网例的时候也不是很明白原
理,以至于表格不是很完善,两行中间的一行在棋盘上没有清晰的显示出
#define MAPXOFT
5
#define MAPYOFT
2
/*定义1号玩家的操作键键码*/
#define PLAY1UP
0x1157/*上移--'W'*/
#define PLAY1DOWN
0x1f53/*下移--'S'*/
#define PLAY1LEFT
0x1e41/*左移--'A'*/
#define PLAY1RIGHT 0x2044/*右移--'D'*/
/**********************************************************/
/*






*/
/*定义画棋盘所需的制表符*/ #define CROSSRU #define CROSSLU #define CROSSLD #define CROSSRD #define CROSSL #define CROSSR #define CROSSU
3
二、设计模块
三、小组分工 李益:初始化模块 谯平:下棋操作模块 张健:胜负判断模块
四、流程图
4
五、设计过程
1、列出所需头文件名 2、定义棋盘的制符表及位置 3、定义双方玩家各自的操作键 4、定义数据结构 5、说明自定义函数原型 6、定义全局变量
5
7、初始化图像以及获得按键值 8、嵌入各自定义函数编写主函数 9、编写界面初始化函数 void Init(void) 10、编写画棋盘函数 void DrawMap(void) 11、编写交换棋手函数 int ChangeOrder(void) 12、编写获取按键值函数 int GetKey(void) 13、编写落子处理函数 void DoError(void) 14、编写赢棋处理函数 void DoWin(int Order) 15、编写走棋函数 int ChessGo(Order , point Cursor) 16、编写判断是否赢棋函数 int JudgeWin(Order,point Cursor) 17 、 编 写 判 断 在 规 定 方 向 是 否 有 五 子 相 连 函 数 int JudgeWinline(Order,point Cursor) 18、编写移动光标函数 void MoveCursor(Order,press) 19、编写游戏结束处理函数 void EndGame(void) 20、编写显示当前棋方函数 void ShowOrderMsg(Order) 21、编写落子正确处理函数 void DoOK(void) 22、编写检查用户按键类别函数 int CheckKey(press)
#define PLAY1DO
0x3920/*落子--空格键*/
/*定义2号玩家的操作键键码*/
#define PLAY2UP
0x4800/*上移--方向键up*/
#define PLAY2DOWN
0x5000/*下移--方向键down*/
#define PLAY2LEFT
0x4b00/*左移--方向键left*/
0/*退出键*/ 1/*落子键*/ 2/*光标移动键*/ 3/*无效键*/
/*定义符号常量: 真, 假 --- 真为1, 假为0 */
#define TRUE
1
#define FALSE
0
/**********************************************************/
press=GetKey();/*获取用户的按键值*/
11
switch(CheckKey(press))/*判断按键类别*/ { /*是退出键*/ case KEYEXIT:
clrscr();/*清屏*/ bOutWhile = TRUE; break;
/*是落子键*/ case KEYFALLCHESS:
/*先手方为1号玩家*/ gPlayOrder = CHESS1; /*棋盘数据清零, 即棋盘上各点开始的时候都没有棋子*/ for(i=0;i<19;i++)
for(j=0;j<19;j++) gChessBoard[i][j]=CHESSNULL;
/*光标初始位置*/ gCursor.x=gCursor.y=0;
void ShowOrderMsg(int Order);
void EndGame(void);
/**********************************************************/
/**********************************************************/
0xbf 0xda 0xc0 0xd9 0xc3 0xb4 0xc2
/*右上角点*/ /*左上角点*/ /*左下角点*/ /*右下角点*/ /*左边*/ /*右边*/ /*上边*/
9
#define CROSSD #define CROSS
0xc1 0xc5
/*下边*/ /*十字交叉点*/
/*定义棋盘左上角点在屏幕上的位置*/
int CheckKey(int press);
int ChangeOrder(void);
int ChessGo(int Order,struct point Cursor);
void DoError(void);
void DoOK(void);
void DoWin(int Order);
void MoveCursor(int Order,int press);
步履维艰,就是因为没有长期的阅读练习和教训累积。
八、源程序
/* 程序中用到的库函数所在头文件应用 #include 命令包含进来 */
#include #include #include #include #include
<stdio.h> <bios.h> <ctype.h> <conio.h> <dos.h>
/*画棋盘*/ textmode(C40); DrawMap();
/*显示操作键说明*/ i=0;
13
textcolor(BROWN); while(Msg[i]!=NULL) {
*/
#define CHESSNULL
0 //没有棋子
#define CHESS1
'O'//一号玩家的棋子
#define CHESS2
'X'//二号玩家的棋子
/*定义按键类别*/ #define KEYEXIT #define KEYFALLCHESS #define KEYMOVECURSOR #define KEYINVALID
/*界面初始化,数据初始化*/ void Init(void) {
int i,j; char *Msg[]= {
"Player1 key:", " UP----w", " DOWN--s", " LEFT--a", " RIGHT-d", " DO----space", "", "Player2 key:", " UP----up", " DOWN--down", " LEFT--left", " RIGHT-right", " DO----ENTER", "", "exit game:", " ESC", NULL, };
/*定义数据结构
*/
/*棋盘交叉点坐标的数据结构*/
struct point
10
{
int x,y;
};
/**********************************************************/
/*









*/
void Init(void);
int GetKey(void);
/*是光标移动键*/ case KEYMOVECURSOR:
MoveCursor(gPlayOrder,press); break;
/*是无效键*/ case KEYINVALID:
break; }
if(bOutWhile==TRUE) break;
}
/*游戏结束*/
12
EndGame(); } /**********************************************************/
/**********************************************************/ /*主函数*/ void main() {
int press; int bOutWhile=FALSE;/*退出循环标志*/
Init();/*初始化图象,数据*/
while(1) {
本科《控制软件设计》课程设计
题目
五子棋


专来自百度文库







同 组人
指导教师
计信院 自动化 2011 级 222011321042081 谯平 张健、李益 黄仁杰
2012 年 9 月 6 日
1
目录
1、设计简介
3
2、设计模块
4
3、小组分工
4
4、流程图
4
5、设计过程
5
6、调试过程
6
7、分析与总结
9
8、源程序
9
2
一、设计简介
五子棋是一种传统的棋盘游戏,是起源于中国古代的传统黑白棋种之一。 发展于日本,流行于欧美。容易上手,老少皆宜,而且趣味横生,引人入 胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。 这种游戏用笔纸都可以进行。
本程序设计为人与人对弈,双方棋子为一种颜色。一方执 O 棋,一方执 X 棋,执 O 形棋的一方先行下子,移动光标键为“w(上)、s(下)、a(左)、 d(右)”,落子键位“空格”,然后另一方走棋,移动光标键为“上、下、 左、右”,落子键为“Enter"。接着双方轮流走棋,每方都试图在游戏结束 前让自己的棋子在横线、竖线、斜线方向五子相连,首先实现五子相连的 一方获胜,游戏结束。程序执行过程中,要求棋盘、棋子时时可见,并且 人可以通过按键盘按键移动光标,摆放棋子。同时在落子不同情况以及出 现赢家的时候都会出现相应的声音。
来。
2、设计这样稍微复杂的程序时,我们要多多利用自定义函数的嵌入方法,
这样把主程序分为若干个自定义函数,不仅可以减少程序设计中的遗漏现
象,还有利于我们建立完善的设计思维模式。
3、设计程序前要多翻阅资料与阅读范例,尽量减少程序编写时犯错,程
序编写时犯错很浪费时间和精力,而且往往很难找出错误的地方。
4、编程的前提是读懂其他程序,平时需要多练习才行,这次设计的过程
void DrawCross(int x,int y);
void DrawMap(void);
int JudgeWin(int Order,struct point Cursor);
int JudgeWinLine(int Order,struct point Cursor,int direction);
相关文档
最新文档