三子棋代码及实训报告
- 格式:doc
- 大小:159.50 KB
- 文档页数:25
南京工业职业技术学院项目技术报告
1 摘 要
作为一名大一新生,很高兴能有这次实训的机会。这次实训,收获甚多。
设计三子棋游戏,首先得明白设计过程,还要解决以下问题:
(1)如何画出棋盘、棋子?
(2)棋子如何在棋盘上移动?
(3)如何够判断输赢?
(4)怎样把界面设计漂亮才能吸引人?
画棋盘棋子要用到画图函数graphics() ,还有其他画圆函数circle()、画线函数line()、填充图样和颜色函数setfillstyle()等等。
这次实训报告遇到很多问题,通过大家的一起努力,很多问题被解决了。通过各种方法,有人去图书馆,有人上网查资料„„这样不仅能提高我们的实训成果,而且也能培养我们对C语言的兴趣。
南京工业职业技术学院项目技术报告
2 目 录
前 言 ..................................................... 3
第一章 概述 .............................................. 4
第二章 概要设计 .......................................... 5
框架图: .................................................. 5
第三章 详细设计 .......................................... 6
3.1 画棋盘 ............................................... 6
3.1.1画棋盘所用函数 .............................................. 6
3.2 画棋子 ................................................ 7
3.2.1画棋子所用函数 .............................................. 7
3.3棋子的初始位置和移动 ................................... 7
3.4 函数调用 .............................................. 8
结论 ..................................................... 15
致谢 ..................................................... 16
参考文献 ................................................. 17
附录 ..................................................... 18
南京工业职业技术学院项目技术报告
3 前 言
这次实训,对我们来说是一次很好的锻炼机会。这不仅能巩固我们的C语言知识,还能开拓我们的视野。
整个实训过程中,我收获了很多,懂得了合作,熟话说”人心齐,泰山移”,确实,刚开始的时候,一点都不知道,通过老师的指导,同学的帮助,渐渐地有些理解。
后来,和同学一起查资料,一起写代码。之间,各人都提出了自己的方法,大家一起参考、一起研究,找出了不足点,同时也选择了比较好的代码,或将几个比较好的代码综合起来,这充分体现了合作的好处,团结的力量。
下面,请看看我们这组2个星期的劳动成果吧!
南京工业职业技术学院项目技术报告
4 第一章 概述
设计三子棋,先设计棋盘,也就是画一个8 * 8的表格,然后两个人下棋,谁先将棋子连成一条线(相同棋子数大于 等于3)就算赢。
下面就是如何设计棋子和棋盘,这对于初学者来说比较难,因为对这些一无所知,所以要查找一些资料,但资料有了,并不一定能看懂,还要听老师的讲解,有时还要和同学一起研究,不懂得问题要问老师,比如说如何用键盘控制棋子的移动?如何判断输赢?等等,刚开始都是一头雾水,后来渐渐有点懂了,也知道怎样画棋子、棋盘了,如何改动棋子的位置,如何加上操作说明等等。
在和其他人讨论过程中,我们的代码在不断的完善,取其精华,去其糟粕,变得越来越简洁明了。
南京工业职业技术学院项目技术报告
5 第二章 概要设计
本次实训报告主要解决了以下问题:
1) 画棋盘。三子棋棋盘该是什么样子的?
2) 落子问题。应该用什么来落子,如何用键盘来控制棋子移动?
3) 落子错误问题。如何处理如果落子落在棋盘外,或者重复落子?
4) 结果。如何判断胜负?
5) 设计界面。把界面弄的好看点,吸引人。
6) 说明书该放在什么地方。不管怎么样把说明书放在一个清晰的位置。
框架图:
void draw_box ()画棋盘表格
void judgewho(int x,int y)
判断谁落子 main()主函数 void draw_cicle(int x,int y,int color)画圆
void change ()改变棋手 void judgekey()判断按的键盘
int judgeresult(int x,int y)判断输赢 void attentoin() 南京工业职业技术学院项目技术报告
6 第三章 详细设计
在前面已经粗略的介绍了三子棋的一些设计方案,包括画棋子、画棋盘、移动棋子以及判断输赢等等。那只是大体上的解释一下,下面就开始讲讲我的这个程序的详细步骤。
3.1 画棋盘
设计三子棋,最先研究的应该是棋盘,这里我们参考C语言教科书上的资料,老师的讲解,以及网上的资料。
通过查阅资料,总结经验,各种选择,我们都把三字棋棋盘确定下来了。
3.1.1画棋盘所用函数
void draw_box()
{
int x1,x2,y1,y2 ;
setbkcolor(BLUE);
setcolor(YELLOW);
gotoxy(15,3);
printf("move---Left, Right, Up, Down,put---Space,quit---ESC");
gotoxy(28,1);
printf("****GAME****");
for(x1=1,y1=1,y2=10;x1<=10;x1++)
line((x1+JZ)*BILI,(y1+JS)*BILI,(x1+JZ)*BILI,(y2+JS)*BILI);
for(x1=1,y1=1,x2=10;y1<=10;y1++)
line((x1+JZ)*BILI,(y1+JS)*BILI,(x2+JZ)*BILI,(y1+JS)*BILI);
for(x1=1;x1<=10;x1++)
for(y1=1;y1<=10;y1++)
box[x1][y1]=0 ;
}
两个printf("");是在棋盘上面加的说明,也就是告诉玩家棋子的上下左右移动是通过什么来实现的。用两个for循环,就是把棋盘的横线与竖线分开画了出来。
for(x1=1;x1<=10;x1++)
for(y1=1;y1<=10;y1++)
box[x1][y1]=0 ;
这三行是将二维数组全部赋值为零,即棋盘上所有格子是空的,没有棋子。棋盘到此就画出来了。 南京工业职业技术学院项目技术报告
7 3.2 画棋子
画棋子,首先棋子大小要满足棋盘中每个格子的大小,不能太大,也不能过分小,那样视觉效果不太好,其次要选择两中不同颜色的棋子,所以画棋子要经
过多次尝试。
3.2.1画棋子所用函数
void draw_circle (int x , int y , int color)
{
setcolor (color) ;
setlinestyle (SOLID_LINE,0,1) ;
x = (x+JZ) * BILI + 20 ;
y = (y+JS) * BILI + 20 ;
circle (x , y , 15) ;
setfillstyle (SOLID_FILL , color) ;
floodfill (x , y , color) ;
其中circle();是画圆函数,setfillstyle (SOLID_FILL , color) ;设置填充图样和颜色函数,setlinestyle (SOLID_LINE,0,1) ;是设置线型函数。
circle (x , y , 15)
setfillstyle (SOLID_FILL , color) ;
floodfill (x , y , color) ;
这三行是给棋子着色,floodfill () ;填充闭域函数,color为棋子的填充颜色。
到这里,棋子已经画出来了,然后就是调整棋子在棋要盘上的位置,让棋子不要掩盖棋盘格子。最后,也就是下面讲的,要在棋盘上移动棋子,并且每一步都要判断输赢。
3.3棋子的初始位置和移动
移动棋子是非常重要的,要注意不能超过界限,不能重复,当格子里有棋子时,不能再放棋子,更不能将原先的棋子覆盖,移动棋子要通过上下左右键实现,
落子也要用一个键来实现,也就是空格键。下面看看这个步骤的程序:
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
#define SPACE 0x3920
这是定义,每个键的键值,这是非常有必要的。移动棋子主要的就是靠这个,