磁疗疝气带-
湖南文理学院课程设计报告
课程名称:
计算机软件技术基础
学
院:
电气与信息工程学院
专业班级:
通信
08102
班
姓
名:
刘
平
学
号:
2
指导教师
:
曹
玲
玲
完成时间:
2010
年
12
月
29
日
报告成绩
:
评阅意见:
评阅老师:
评阅时间:
目
录
一、设计目的
.
................ ....................................
3
二、设计要求
.
.......................... ..........................
3
三、所需仪器设备
.
........................ ........................
3
四、课题分析
.
......................................... ...........
3
五、具体设计过程
.
.. ..............................................
4
5.1
、设计思路
............... ...................................
4
5.2
、程序设计流程图
............................................
4
5.3
、函数实现说明
..............................................
7
5.4
、图形库函数介绍
............................................
8
5.5
、程序源代码及注释
.........................................
1
0
5.6
、调试结果
.............. ...................................
2
0
六、设计心得体会
.
........................ .......................
2
1
七、参考文献
.
......................................... ..........
2
2
2
《黑白棋游戏》
C
语言课程设计
一、设计目的
本课程设计是计算机软件技术基础重要的实践性环节之一,是在学生学习完《程序设
计语言(C)
》课程后进行的一次全面的综合练习。本课程设计的目的和任务:
(
1
)巩固和加深学生对
C
语言课程的基本知识的理解和掌握;
(
2
)掌握
C
语言编程和程序调试的基本技能;
(
3
)利用
C
语言进行基本的软件设计,掌握软件设计一般方法,了 解软件设计的思路;
(
4
)掌握书写程序设计报告的能力;
(
5
)提高运用
C
语言解决实际问题的能力;
这 个程序也是对编程基本功的一个训练,对于初学
C
语言的人,讲分支、循环、数组
函数 综合应用,而不仅限于编制独立的小程序,能够大大提高变成水平。
二、设计要求
(
1
)收集资料,全面分析课题,分解问题,形成中体编程思路;
(
2
)深入分析各个小问题,编写个部分程序模块;
(
3
)对于设计中用到的关键函数,要联系实际
问题进行具体介绍;
(
4
)上机调试,确保程序能正确运行;
(
5
)设计完成后提交课程设计报告;
三、所需仪器设备
(
1
)硬件要求能运行
Windows 2000/XP
操作系统的微机系统。
(
2
)
C
语言程序设计及相应的开发环境。
(本设计用的是
Turbo C for Windows
集成实验
与学习环境
V6.0
)
四、课题分析
编写一个《黑白棋游戏》的
C
程序,包括以下功能:
初始状态:在一个
8*8
的棋盘中央交叉排放黑白棋子各两枚,白棋先走。
(
1
)每个棋手下棋时,摆子的位置必须是以自己的棋子能包围住对方一个或多个棋子 ,
被包围住的对方棋子将成为自己的棋子。包围的方向可以是上下左右以及斜线
8
个方 向,
只要能连成一线即可。
(
2
)当轮到某一个棋手下子,但是他 没有可以包围对方棋子的位置时,他必须停步,让
对方走棋,直到他可以走为止。
(
3
)当棋盘上一方的棋子为
0
或者下满
64
格,游戏结束, 棋子少者输。
3
五、具体设计过程
5.1
、设计思路
程序界面应是一个二维平面图,所以数据的表示用二维数 组,数组两个下标可以表示
棋盘上的位置,数组元素的值代表棋格中的状态,共有三种情况,分别是空格 、黑棋和白
棋。这样给数组元素的取值设定为
0
、
1
、
2< br>,其中
0
代表空格,
1
代表白色棋子,
2
代表黑色棋子。这样程序的主要工作是接收棋手按键操作,一旦接收到回车键,说明棋手摆子,
先判断是不 是有效位置,也就是能不能包围住对方棋子,如果能,便为棋子所在的位置往
上下、左右、左上、左下、 右上、右下
8
个方向寻找被包围住的所有棋子(必须是连续的,
中间不能有空格),将这些被包围住的对方棋子都变成自己的棋子,然后对当前棋盘中的
黑白棋个数进行统计并输出结 果。如果没有这样的位置可以落子,则停步,让对方走棋,
重复上述步骤,直到游戏结束。如果想提前终 止游戏,可以按
Esc
键。
5.2
、程序设计流程图
(
1
)程序整体组成结构框图如下图所示:
图
1
程序整体组成结构框图
(
2
)由上述设计思路可画出程序整体流程图,如下图所示:
4
开
始
初始化图形系统
画出棋盘
按键操作
按键是否
为回车键?
是
是否为有效
位置?
是
落
棋
否
否
变成自己的棋子
统计黑白棋个数,
输出成绩。
输出胜利者信息
关闭图形系统
结
束
游
戏
图
2
程序整体流程图
5
(
3
)人人对战模块程序流程图如下图所示:
图
3
人人对战模块流程图
(
4
)
成绩输出模块程序流程图如下图所示
6
图
4
成绩输出模块程序流程图
5.3
、函数实现说明
(
1
)
main()
主函数
在主函数中,
首先定义使用到的常数、
全局变量、
函数原型说明。
盘状态用数组
a[8] [8]
,
初值为
0
,
表示空格。
函数的实体部分,
开始初始化图形系统,
然后通过调用函数
DrawQp()
先画出棋盘,
调用
playtoplay()
人人对战函数开始游戏,
一旦游戏结束后,
关闭图 形系统,
程序结束。
(
2
)
DrawQp()
画棋盘函数
背景颜色设 为蓝色,从坐标(
100
,
100
)开始每隔
40
个单位用 白色画一条水平直线,
一条垂直线,构成棋盘,用循环语句实现。函数
setfillstyl e()
可以设置填充模式和填充
颜色,
fillellipse(int x,int y,xradius,int yradius)
以
x
和
y
为圆心,
xradius
和
yradius
为水平和垂直轴画一填充椭圆,当
xradius
和
yradius
相等时,则画出的是圆,
用它表示棋子。< br>
(
3
)
SetPlayColor()
设置棋子的颜色
函数的参数为整型变量
t
,
根据
t
的值来 设计填充棋子的当前颜色,
值为
1
代表白棋,
值为
2
代表黑 棋。
(
4
)
MoveColor()
恢复原来格子的状态
7
由于棋手在走棋的时候,他的棋子总是首先出现在棋盘的左上角,棋手要通过移 动
光标走到要落子的位置,在经过的路程上显示当前棋子,就会覆盖原来的棋盘状态,所
以一旦 棋子走过后,就应恢复原来的状态,是空格的依然显示空格,是棋子的就显示原
来棋子的颜色。因为棋子 移动过程并没有改变数组元素的值,所以可以根据数组元素的
值判定原来的状态,如果值是
1< br>,就恢复白色棋子,值是
2
则恢复黑色棋子,否则恢复
蓝色空格。
(
5
)
、
playtoplay()
人人对战函数
这是游戏进行的函数,主要是接收棋手的按键消息,其处理过程如下:
1)
按
Esc
键程序可以随时结束。
2)
按上下左右光标键,则改变棋子移动的坐标值。
3)
按回车键后判断:
①如落子的位置已经有棋则无效,继续压键。
②如落子位置是空格,可以将棋子落 入格内,调用函数
QpChange
()判断是否引起棋盘
的变化,
函数值为
1
有变化,
为
0
没变化。
如果棋盘有变化,
说明将 包围的对方棋子吃掉,
统计当前分数,
如果棋盘没有变化,
则说明落子的位置无法包围 对方的棋子也视为无效棋,
可以继续寻找合适的位置,
但开始统计其落子次数,
一旦尝 试次数超过当前棋盘的空格数,
则说明他无棋可走,则放弃此步,让对方下棋。
③ 如果棋子变化后,格子已占满
64
格或一方棋子为
0
,则游戏结束,显示胜利 方信息。
按任意键程序结束。
④重复上述步骤,直到游戏结束。
(
6
)
、
QpChange()
判断棋盘变化
当棋手按回 车键落子后,就要分别往
8
个方向判断是否包围住对方棋子,如果是,则改变
棋盘,也 就是棋盘上黑白棋子的个数要发生变化。如果所有方向都判断过,并且没有引起
棋盘的变化,则棋盘变化 标志值
yes
为
0
,返回
yes
,结束本函数。
(
7
)
、
DoScore()
处理分数
根据当前数组元素的值判断分数,也就是各方棋子的个数,如果数组元素值为
1
,白棋
棋子数累加;如果数组元素值为
2
,则黑棋棋子数累加。
(
8
)
、
PrintScore()
输出成绩
利用设置实体填充模式填充矩形条清除掉前次的成绩,
再利用
spri ntf()
函数将整数转
换为字符串的形式,再利用
outtextxy()
函数将成绩输出。
(
9
)
、
playWin()
输出胜利者结果
根据分数值
score1
和
score2
的大小得出 下棋的结果,输出赢者信息。如果是白方胜
就输出“
white win!
”
,黑方胜就输出“
black win!
”
,平局就输出“
you all win!
”
。
5.4
、图形库函数介绍
图形库
TC
里面的图形库,分为:像素函数、直线和线型函数、多边形
函数、填充函数 等。在本程序中主要应用到了以下功能函数:
8
(
1
)、
line()
画线函数
功能:
函数
line()
使用当前绘图色、线型及线宽,在给定的两点间画一直线。
函数原型:
void line(int startx,int starty,int endx,int endy);
说明:
参数
startx,starty
为起点坐标
,endx,endy
为终点坐标,函数调用前后,图
形状态下屏幕光标
(
一般不可见
)
当 前位置不改变。
(2
)、
setcolor()
图形屏幕函数
函数原型:
void setcolor(int color)
功能
:
将当前图形屏幕的当前笔画颜色置为
color.
(3)
、
setfillstyle()
设置填充图样和颜色函数
函数原型
:
void far setfillstyle(int pattern, int color);
功
能
:
设置填充模式和颜色
(
4
)
、
fillellipse()
画椭圆区函数
功
能
:
画出并填充一椭圆
函数原型
: void far fillellipse(int x, int y, int xradius, int yradius);
说明:填充边框所定义的椭圆的内部,该边框由一对坐标、一个宽度和一个高度指定。
(
5
)
、
setbkcolor()
功能:该函数用指定的颜色值来设置当前的背景色
函数原型:
Void far SetBkColor(int Color );
(
6
)
、C
语言中的颜色表及填充模式如下两表所示:
9
5.5
、程序源代码及注释
#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,scor e2;/*
具体分数以及按键与存放棋子的变量
*/
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);/*
输出胜利者信息
*/
/******
主函数
*********/
void main(void)
10
{
int gd=DETECT,gr;
initgraph(&gd,&gr,
初始化图形系统
*/
DrawQp();/*
画棋盘
*/
playtoplay();/*
人人对战
*/
getch();
closegraph();/*
关闭图形系统
*/
}
void DrawQp()/*
画棋盘
*/
{
int i,j;
score1=score2=0;/*
棋手一开始得分都为
0*/
setbkcolor(BLUE);
for(i=100;i<=420;i+=40)
{
line(100,i,420,i);/*
画水平线
*/
line(i,100,i,420); /*
画垂直线
*/
}
setcolor(0);/*
取消圆周围的一圈东西
*/
setfill style(SOLID_FILL,15);/*
白色实体填充模式
*/
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; /*
有棋后改变分数
*/
DoScore();/*
输出开始分数
*/
}
void playtoplay()/*
人人对战
*/
{
11
磁疗疝气带-
磁疗疝气带-
磁疗疝气带-
磁疗疝气带-
磁疗疝气带-
磁疗疝气带-
磁疗疝气带-
磁疗疝气带-
本文更新与2021-01-27 05:57,由作者提供,不代表本网站立场,转载请注明出处:http://www.xapfxb.com/yuer/429888.html
-
上一篇:基于JAVA的五子棋游戏系统设计与实现
下一篇:五子棋游戏__课程设计报告