五子棋课程设计实验报告

五子棋课程设计实验报告
五子棋课程设计实验报告

西南交通大学

程序语言综合课程设计

五子棋游戏

课程《程序语言综合课程设计》

学院信息科学与技术学

专业软件工程

姓名

学号 20119050

日期 2016年月日

目录

第一章课程设计的目的和要求 (3)

1.1 课程设计的目的 (3)

1.2 课程设计的要求 (3)

1.3 课程设计的实验环境 (3)

第二章功能描述 (4)

第三章总体设计 (5)

3.1 功能模块设计 (5)

3.1.1 任务执行流程图 (5)

3.1.2 下棋函数流程图 (6)

3.2 数据结构设计 (7)

3.2.1 定义结构体 (7)

3.2.2 定义数组 (7)

3.2.3 全局变量 (7)

3.3 函数功能描述 (7)

第四章程序实现 (8)

4.1源码分析 (8)

4.2运行结果及界面介绍 (25)

第五章后记 (30)

第一章课程设计的目的和要求

1.1 课程设计的目的

1.加深对C语言数据类型,运算,语句结构及其程序设计的基本方法理解和掌握;

2.熟练掌握流程图的绘制、程序设计文档的书写;

3.通过编写一个完整的程序,一方面可以检查我们这学期的学习情况,为以后的学习打下坚实的基础;

4.熟悉C语言游戏编程,掌握五子棋游戏开发的基本原理,从而为以后的程序开发奠定基础。

1.2 课程设计的要求

1、编写程序代码,调试所写程序使其能够正确运行;

2、能进行基本的五子棋操作,有图形界面,能够用键盘操作;

3、能够实现悔棋、存档和读档等附加功能

1.3 课程设计的实验环境

该课程设计在设计与实验过程中需要在windows XP系统/windows 2000以上系统中进行,程序设计要求在visual C++6.0平台中进行,完成代码的编写、编译、调试、测试等工作。本游戏对计算机硬件和操作系统要求极低,所以在这里只是把自己的电脑硬件参数和系统参数列下:

硬件:Cpu:2.1GHZ,内存,2GB,硬盘:320GB,操作系统:windows xp

软件环境:安装VC++6.0

第二章功能描述

本程序用C语言实现了五子棋游戏,能进行基本的五子棋操作。程序能实现界面的初始化功能、下棋功能、人机智能对战功能、胜负判断功能、悔棋功能、读档及存档功能,通过键盘操作控制下棋。

(1)显示欢迎界面。在游戏开始时出现一个欢迎的界面同时介绍了游戏的规则;(2)初始化功能。程序初始化屏幕和棋盘,默认玩家先行。

(3)下棋操作。利用W、S、A、D及空格键实现下棋操作,在下棋过程中能随时按ESC键退出。

(4)人机智能对战功能。电脑根据玩家的下棋对棋盘进行智能分析,然后下棋,实现人机对弈。

(5)悔棋功能。玩家可以有三次悔棋机会。

(6)胜负判断功能。程序能对下棋的结果进行判断,分出胜负。并显示获胜方。(7)读档、存档功能。游戏中途退出会提示是否存档,如果存档,则下次开始的时候会提示是否读档继续上次的游戏。

第三章总体设计3.1 功能模块设计

3.1.1 任务执行流程图

3.1.2 下棋函数流程图

3.2 数据结构设计

3.2.1 定义结构体

将棋盘上每个点的左边定义为一个结构体;

typedef struct

{

int x, y;

}point;

3.2.2 定义数组

定义数组board[15][15]表示棋盘,用来记录棋盘上每个棋子的状态;

3.2.3 全局变量

定义整形数组 back[4] 用来记录前两步双方下棋的状态,便于后面进行悔棋操作

定义整形 n = 3; 用来记录悔棋次数

3.3 函数功能描述

1、显示欢迎信息 bool welcome();

2、初始化棋盘 void InitBoard();

3、输出棋盘 void chessboard();

4、判断胜负 int Win(char c);

5、下棋 void play(point &r);

6、显示获胜 void showsusscced(char c);

7、悔棋 bool BackStep(int back[]);

8、人机对战智能算法 void ComAlgo(point &r);

9、存盘函数 bool SaveLoad();

10、读盘函数 bool DownLoad();

第四章程序实现

4.1源码分析

1、显示欢迎信息

bool welcome()

{

char ch;

printf("\n\n\n\n");

printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");

printf("┃ Welcome you to gobang World! ┃

\n");

printf("┃1、You can use the A,D,W and S key to move the chessman; ┃

\n");

printf("┃2、You can press Space key to enter after you move it; ┃

\n");

printf("┃3、You can use Esc key to exit the game; ┃

\n");

printf("┃4、Don't move the pieces out of the chessboard. ┃\n");

printf("┃ Do you want to continue?(Y/N) ┃

\n");

printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

\n");

while (! strchr("YN", ch = toupper(getch())))

{

putchar('\a');

}

if(ch == 'N') return false;

else return true;

}

2、初始化棋盘

void InitBoard()

{

char ch; int i, j;

printf("\n\n是否读档?(Y/N)\n");

if((ch = toupper(getch())) == 'Y' && DownLoad())

printf("读档成功!\n");

else

{

for(i = 0; i < 15; i ++)

for(j = 0; j < 15; j ++)

board[i][j] = ' ';

}

chessboard();

}

3、输出棋盘

void chessboard()

{

//清屏

system("cls");

//输出棋盘的上边缘

printf(" 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 \n");

printf(" ┏━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━

┓\n");

printf(" ┃│││││││││││││││

┃\n");

for(int i = 1; i <= 15; i ++)

{

//输出列序号及相应的列元素

printf("%02d┣─", i);

for(int j = 1; j <= 15; j ++)

{

switch (board[i - 1][j - 1])

{

//(由于在命令行模式下显示,所以,颜色是颠倒的)

case ' ': printf("┼─"); break; //如果当前位置无子,则输出棋盘

case 'h': printf("○─"); break; //如果是黑子,则输出黑子的符号

case 'b': printf("●─"); break; //如果是白子,则输出白子的符号

case 'g': printf("⊙─"); break; //显示光标

}

}

//输出每列的最后一个制表符

printf("┫%02d\n", i);

printf(" ┃││││││││││││││

│┃\n");

}

printf(" ┗━┷━┷━┷━┷━┷━┷━┷━┷━┷━┷━┷━┷━┷━┷━┷━

┛ \n");

printf(" 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 \n");

}

相关主题
相关文档
最新文档