1、 C语言程序设计之五子棋摘要:本程序是一种两人对弈的纯策略型棋类游戏,规则简单,变化多端,非常富有趣味性和消遣性。主要应用了Visual C+编程来完成这个游戏的设计的。本文主要介绍了本游戏的开发环境Microsoft Visual C+6.0,使用当前优秀的开发工具VC+编程基于MFC的基本对话框,编写了一个五子棋的游戏软件。包含了五子棋程序的棋盘初始化、游戏规则、胜负判断方法。关键词:五子棋游戏应用程序、初始化、规则、图形函数、判断1. 问题描述在Visual C+ 6.0编译器的基础上,基于MFC的基本对话框,编写一个五子棋的游戏软件。该游戏应该符合以下要求:1.1游戏模式:人先下棋,电
2、脑在人下子后会随后下棋。1.2人机对弈:完成人和计算机的对弈,用黑色棋子表示人,白色棋子表示电脑,电脑要具有一定的人工智能,能够可以与人对弈一段时间。1.3棋盘:要求棋盘绘制美观耐看。1.4判断输赢:当一方有五个相邻的棋子连成一条线时,计算机能判定输赢,并能结束本次游戏并重新开始。1.5存储功能:要求五子棋有存储功能,可以将进行中的游戏存储在棋盘上,也可以读取已存盘的游戏。1.6弹窗功能:要求制作按钮,实现弹框功能,可以弹出指导老师与小组成员的信息。2. 详细设计2.1总体设计程序流程图如下图所示:2.1.1 新建工程,选MFC AppWizard(exe),添上工程名,确定。2.1.2选基本
3、对话框,完成,确定2.1.3插入位图我们选择的方式从网上搜寻一些图片,然后直接贴图。先插入位图(BMP格式)。位图插入后会自动赋予ID值,我们将其修改一下:分别修改为BLACK BOARD WHITE CLEAR2.1.4添加DRAW函数添加成员函数Draw:然后添加所编的程序代码。2.1.5在OnPaint函数中加入代码画图在OnPaint函数中加入以下代码:CDC *pDC;pDC=GetDC();Draw(0,0,IDB_CLEAR,pDC);Draw(13,13,IDB_BOARD,pDC);for(int i=0;i15;i+)for(int j=0;jMoveWindow(10,5
4、15,55,24);GetDlgItem(IDC_OPEN)-MoveWindow(70,515,55,24);GetDlgItem(IDC_teacher)-MoveWindow(345,515,55,24);GetDlgItem(IDC_students)-MoveWindow(405,515,55,24);2.1.12更改icon图标2.2数据结构设计开始游戏人开始下棋电脑下棋输赢能否确定输赢能否确定电脑下棋开始游戏人开始下棋N我赢了,结束战斗谁获胜Y结束游戏电脑胜利,结束战斗电脑人2.3函数功能描述OnInitDialog():通过这个函数,我们定义了窗口的大小、窗口所处的位置、保存按
5、钮的放置、读档按钮的放置、指导老师按钮的放置以及小组成员按钮的放置。OnPaint():通过这个函数,我们在窗口上画出了棋盘。Draw(int x, int y, UINT bitmap, CDC *pDC):通过这个函数,我们可以画出各种图片。OnLButtonUp(UINT nFlags, CPoint point):通过这个函数,我们可以通过鼠标控制在窗口上下子。iswin(int i, int j):通过这个函数,我们可以判断胜负。search(int i, int j, int m, int n):通过这个函数,我们可以判断棋子周围的情况。AIplay():通过这个函数,我们设计了一
6、个人工智能来与人对弈。searchvalue(int &best_i, int &best_j, int color):寻找棋子的有利位置getscore(int i, int j, int color):计算这个函数位置的分数OnSave():通过这个函数,我们实现了存储的功能。OnOpen():通过这个函数,我们实现了打开存储的功能。Onteacher():通过这个函数,我们实现了”指导老师“的弹出窗口。Onstudents():通过这个函数,我们实现了”小组成员“的弹出窗口。3. 总结本作品是一个简单的双人五子棋游戏,运行程序后直接进入棋盘界面,最终会判断出输赢。主要设计内容概括如下:3
7、.1在初期,本小组认真的对五子棋进行了研究分析,参考了可供参考的资料和程序,确定了运行步骤和流程,并分配了各自的任务。要求每位组员细致了解部分MFC函数,以便实现五子棋游戏的编译。如定义好窗口大小及所处位置、保存按钮的放置、读档按钮的放置、指导老师按钮的放置以及小组成员按钮的放置等。通过各种函数实现画出棋盘、用鼠标控制落子、判断棋子周围的情况、判断胜负、实现存储、打开存储等功能。搜寻图片,找到适合用于五子棋游戏中棋盘、棋子的图片。分配任务给各个小组成员,分别编写五子棋程序所需要的函数。3.2期间程序需要添加很多成员函数及消息处理函数,如Draw函数、OnPaint函数、iswn函数等。3.3运
8、行五子棋并进行测试,每位组员负责的程序部分写好之后,再将大家的程序汇总,但发现有些人的模块编写有误,导致程序无法运行,因此大家在一起讨论与修改并回去思考。经过多次测试并改进程序部分函数,程序已经可以运行了。考虑到五子棋游戏比较简单,就没有设置悔棋环节。3.3在做C语言程序设计之前,编辑游戏在组里的每个成员看来,都是遥不可及的。但通过这次设计我明白了并不是如此,只要团队合作也可以搞定,我多学了许多课上没有的知识,比如怎么用C程序画图、写出文本等。通过C语言课程设计,我们对语言这门课程有了更深一步的了解。它是计算机程序设计的重要理论技术基础,在我们电子专业的学习中占据着十分重要的地位。同时也使我们知道,要学好这门课程,仅学习书本上的知识是不够的,还要有较强的实践能力。只要多实践,多编写程序,才能更好的掌握书本上的东西。参考文献:梁栋、李新华等,C语言程序设计,中国电力出版社,2009年2月谭浩强,C程序设计(第二版),清华大学出版社,2005年邓莉,C+程序设计(第四版),清华大学出版社,2010年侯俊杰,深入浅出MFC(第二版),华中科技大学出版社,2001年葛亮,Visual C+从入门到实践,清华大学出版社,200715