C语言课程设计 黑白棋游戏
美丽中国作文-
辽
宁
工
业
大
学
C
语言程序设计
课程设计(论文)
题目:
黑白棋游戏
院(系)
:
软件学院
专业班级:
计算机信息管理
学
号:
000000000
学生姓名:
000 0
指导教师:
000 00
教师职称:
助
教
起止时间:
2008.12.22
至
2009.1.2
课程设计(报告)任务及评语
院(系)
:软件学院
教研室:软件教研窒
学
号
p>
程序设计
(报告)
题目
程序设计的任务与要求:
<
/p>
(
1
)掌握
C<
/p>
语言编程的基础知识。
(
2
)较熟练地编写
C
语言应
用程序。
(
3
)了解
C
语言的常用标准函数、编程技巧、异常处理。
(
5
)联系已学过
的内容,巩固所学的理论,增强独立工作能力。
(
6
)
通过设计主要使学生有一个独立编写程序的过
程,
对理论学习及动手能
力都有一个很大的提高。
(
7
)通过本次设计,<
/p>
进一步培养学生热爱专业的思想,
同时对本专业综合素
质的提高起一个积极的推动作用。
课程设计过程
中,要严格遵守实践环节的时间安排,听从指导教师的指导。
正确地完成上述内容,记录
实习日记,规范完整地撰写出课程设计报告。
000000
学生姓名
0000
专业班级
计算机信息管理
000
黑白棋游戏
程
序
设
计
(
报
告
)
任
务
p>
指
导
教
师
评
语
及
成
绩
成绩:
指导教师签字:
2009
年
1
月
13
日
辽
宁
工
业
大
学
课
程
设
计
说
明
书(论
文)
目
录
第
1
章
课程设计的目的与要求
......
.....................................
1
1.1
课程设计目的
.
.................................
......................
1
1.2
课程设计的实验环境
.
.............................................
....
1
1.3
课程设计的预备知识
.
.............................................
....
1
1.4
课程设计要求
.
................................................ .......
1
第
2
章
课程设计内容
.....................
...............................
2
2.1
程序功能介绍
..............................................
..........
2
2.2
程序整体设计说明
............................................ ........
3
2.2.1
设计思路
..............................................
........
3
2.2.2
数据结构设计及用法说明
.......................................
.
4
2.2.3
程序结构(流程图)
p>
.........................................
...
6
2.2.4
各模块的功能及程序说明
.......................................
.
8
2.2.5
程序结果
..............................................
........
8
2.3
程序源代码及注释
............................................ ........
9
第
3
章
p>
课程设计总结
........................
.............................
21
参考资料
.......................
..........................................
22
辽
宁
工
业
大
学
课
程
设
计
说
明
书(论
文)
第
1
章
课程设计的目的与要求
1.1
课程设计目的
本课程设计是计算机科
学与技术专业重要的实践性环节之一,是在学生学习完《程
序设计语言
< br>(C)
》课程后进行的一次全面的综合练习。本课程设计的目的和任务:
1.
巩固和加深
学生对
C
语言课程的基本知识的理解和掌握
2.
掌握
< br>C
语言编程和程序调试的基本技能
3.
利用
C
语言进行基本的软件设计
4.
掌握书写程序设计说明文档的能力
5.
提高运用
C
语言解决实际问题的能力
1.2
课程设计的实验环境
硬件要求能运行
Windows
20
00/XP
操作系统的微机系统。
C
语
言程序设计及相应的
开发环境。
1.3
课程设计的预备知识
熟悉
C
语言及
C
p>
语言开发工具。
1.4
课程设计要求
1.
分析课程设计题目的要求
2.
写出详细设计说明
3.
编写程序代码,调试程序使其能正确运行
4.
设计完成的软件要便于操作和使用
5.
设计完成后提交课程设计报告
1
辽
宁
工
业
大
学
课
程
设
计
说
明
书(论
文)
第
2
章
课程设计内容
2.1
程序功能介绍
只有在可以吃到对方棋子的方格里落子。
吃子规则:采用夹吃的原则,左图用红色标记的是黑方可落子的位置。当黑方落子
之
后,则夹在两黑子中间的白子都将变为黑子。右图是落子后的棋盘布局,蓝色标记的
是白
方可落子的位置。
夹子的方向包含:水平、竖直、斜对角。
1
.
点击“新游戏”,将从新初始化棋局。
2
.
3
.
4
.
5
.
打开游戏存档,默认是
.bwc
文件<
/p>
保存当前游戏,默认扩展名为
.bwc
后退一步,即悔棋
前进一步,只有在前面的操作存在后退的基础上,该按钮才有效。
6
.
“与或图”按钮,当选择与或法与电脑博弈时会显示与或图。
7
.
点击设置按钮后,会出现以下对话框,可以修改设置,点击确定按钮后生效。
2
辽
宁
工
业
大
学
课
程
设
计
说
明
书(论
文)
2.2
程序整体设计说明
程序设计的组成框图:
吃子规则:采用夹吃的原则,左图
用红色标记的是黑方可落子的位置。当黑方落子
之后,则夹在两黑子中间的白子都将变为
黑子。右图是落子后的棋盘布局,蓝色标记的
是白方可落子的位置。
夹子的方向包含:水平、竖直、斜对角
2.2.1
设计思路
从程序表面看,这是一个二维平面图,所以数据用二维数组来表示,数组两个下标可
以表示棋盘上的位置,数组元素的值代表棋格上的状态,共有三种情况,分别是
0<
/p>
代表
空格,
1
代
表白棋,
2
代表黑棋。这样程序的主要工作是接收棋手按键操作
,棋手用
Up
、
3
辽
宁
工
业
大
学
课
程
设
计
说
明
书(论
文)
Down
、
Left
、
Right
控制光标移动,回车键表示落子。如果无棋可走则显示停步信息。
一旦接收
到回车键或空格键,说明棋手落子,先判断是否是有效位置,也就是说已经有
棋子的位置
不能重叠落子,然后再判断该位置能否吃掉对方的棋子(根据黑白棋的游戏
规则,
只能将棋子落子能吃掉对方棋子的位置上)
,
如果条件满足则在该位置落子,
落子
时执行这样几个步骤,先调
用画棋子函数,将棋盘的相应位置上画上棋子,再调用吃棋
子函数,将对手的棋子变成自
己颜色的棋子,然后根据吃掉对手棋子的个数,给自己加
上相应的分数和给对手减去相应
的分数,再将数组中的相应元素赋值,标志该位置已经
落子,最后将落子的权限交给对手
。
2.2.2
数据结构设计及用法说明
在主函数中,通过调用绘制棋盘、棋手对战,判断棋盘变化、改变棋子颜色等函数的调<
/p>
用来实现主函数的相应的功能
,以下是有关于主函数的流程图。
绘制棋盘和初始棋子
rawQp
棋手对战
playtoplay
判断棋盘变化(能否分出胜负)
QpChange
计算棋手的成绩
输出胜利者信息
Y
1
DrawQp
绘制棋盘和初始棋子
在界面上绘制<
/p>
320*320
的棋盘,并在棋盘中绘制
8*8
的格子,初始棋子
2
SetPlay
设置棋子第一次的颜色
先走棋者持白子,后走棋黑子,每次交替
3
4
辽
宁
工
业
大
学
课
程
设
计
说
明
书(论
文)
Playtoplay
人人对战函数
俩棋手交替走棋,定义键盘操作等
4
MoveColor
恢复原来棋盘状态
棋子由初始位置到落子位置的路径不改变颜色
5
QpChange
判断棋盘的变化
改变棋子的颜色
走棋后判断棋盘的变
化情况,根据变化情况判断是否可以输出分数
6
DoScore
处理分数
根据棋盘上旗子的多少进行分数的处理
5
辽
宁
工
业
大
学
课
程
设
计
说
明
书(论
文)
2.2.3
程序结构(流程图)
p>
(
1
)落棋位置判断:
6
辽
宁
工
业
大
学
课
程
设
计
说
明
书(论
文)
(<
/p>
2
)输出成绩:
7
辽
宁
工
业
大
学
课
程
设
计
说
明
书(论
文)
(
3
)输出
最后的胜利者结果:
2.2.4
各模块功能及程序说明
<
/p>
落棋位置的判断模块:判断
落子后棋盘的变化,判
断棋手的落棋位置和次数,两方交
换走棋。
成绩输出模块:
判断输出哪个棋手的分
,
在不同的位置输出,
清空成绩,
判断哪方胜利
。
输出胜利者信息模块:
开始判断最
后的结果,
将两人分数分别输出。
2.2.5
程序结果
一方执黑棋,一方执白棋,轮流走棋,每方都试图在游戏结束前让自己棋子的数目
多于对方。按键盘上的方向键可以上下左右移动棋子,按回车键可以摆放棋子。下到最
后谁的棋子多,谁赢。
8
辽
宁
工
业
大
学
课
程
设
计
说
明
书(论
文)
2.3
程序源代码及注释
[size=12px]#include
图形系统头文件
*/
#define LEFT 0x4b00
/*
光标左键值
*/
#define RIGHT 0x4d00
/*
光标右键值
*/
#define DOWN 0x5000
/*
光标下键值
*/
#define UP 0x4800
/*
光标上键值
*/
#define ESC 0x011b /*
ESC
键值
*/
#define
ENTER 0x1c0d /*
回车键值
*/
int a[8][8]={0},key,score1,score2;/*
具体分数以及按键与存放棋子的变量
*/
char playone[3],playtwo[3];/*
两个人的得分转换成字符串输出
*/
void
playtoplay(void);/*
人人对战函数
*/
void
DrawQp(void);/*
画棋盘函数
*/
void SetPlayColor(int
x);/*
设置棋子第一次的颜色
*/
void MoveColor(int x,int
y);/*
恢复原来棋盘状态
*/
int QpChange(int x,int y,int
z);/*
判断棋盘的变化
*/
void
DoScore(void);/*
处理分数
*/
void PrintScore(int
n);/*
输出成绩
*/
void
playWin(void);/*
输出胜利者信息
*/ <
/p>
/******
主函数
********
*/
void main(void)
{
Int00wq
initgraph(&gd,&gr,
p>
初始化图形系统
*/
Dra
]p]();/*
画棋盘
*/
p>
playtoplay();/*
人人对战
*/
getch();
closegraph();/
*
关闭图形系统
*/
9
1
辽
宁
工
业
大
学
课
程
设
计
说
明
书(论
文)
}
void
DrawQp()/*
画棋盘
*/
{
int i,j;
scor
e1=score2=0;/*
棋手一开始得分都为
0*/
setbkcolor(BLUE);
for(i=100;i<=420;i+=40)
{
line(100,i,420,i);/*
画水平线
*/
line(i,100,i,420);
/*
画垂直线
*/
}
setcolor(0);/*
取消圆周围的一圈东西
< br>*/
setfillstyle(SOLID_FILL,15);/*
p>
白色实体填充模式
*/
fillellipse(500,200,15,15);
/*
在显示得分的位置画棋
*/
setfillstyle(SOLID_FILL,8);
/*
黑色实体填充模式
*/
fillellipse(500,300,15,15);
a[3][3]=a[4][4]=1;/*
初始两个黑棋
*
/
a[3][4]=a[4][3]=2;/*
初始两个白
棋
*/
setfillstyle(SOLID_FILL,WHITE);
fillellipse(120+3*40,120+3*40,15,15);
fillellipse(120+4*40,120+4*40,15,15);
setfillstyle(SOLID_FILL,8);
fillellipse(120+3*40,120+4*40,15,15);
fillellipse(120+4*40,120+3*40,15,15);
score1=score2=2;
/*
有棋后改变分数
*/
DoSc
ore();/*
输出开始分数
*/
}
void
playtoplay()/*
人人对战
*/
{
int x,y,t=1,i,j,cc=0;
10