关键词不能为空

当前您在: 首页 > 育儿 >

黑白棋游戏课程设计

作者:陕西保健网
来源:http://www.xapfxb.com/yuer
更新日期:2021-01-27 05:57

磁疗疝气带-

2021年1月27日发(作者:祖海)
湖南文理学院课程设计报告



课程名称:

计算机软件技术基础












院:

电气与信息工程学院


专业班级:

通信
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

黑白棋游戏课程设计的相关文章