三子棋代码及实训报告

  • 格式: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

这是定义,每个键的键值,这是非常有必要的。移动棋子主要的就是靠这个,