c语言图形五子棋课程设计报告带流程图_第1页
c语言图形五子棋课程设计报告带流程图_第2页
c语言图形五子棋课程设计报告带流程图_第3页
c语言图形五子棋课程设计报告带流程图_第4页
c语言图形五子棋课程设计报告带流程图_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

南昌航空大学软件学院 102032 班 陈琦帆 1 1C 语言课程设计报告-五子棋C 语言课程设计报告五子棋院系:软件学院 专业:软件工程班级:102032 学号:10203230 指导老师:王星南昌航空大学软件学院 102032 班 陈琦帆 2 2C 语言课程设计报告-五子棋摘 要五子棋是一种两人对弈的纯策略型棋类游戏,应用 C 语言编写程序可以在计算机上实现二人对弈五子棋功能。二人对弈五子棋程序由图像生成、光标移动与落子、判断胜负和系统帮助等子程序构成;程序中应用了结构体、数组、全局变量、按键处理和图形编程等元素和语句。程序通过棋盘和棋子图像生成、二人移子与落子和判断胜负等功能的实现,在计算机上实现了二人五子棋对弈。AbstractGobang is a traditional checker-type game in which the lining up of five pieces in a straight line scores victory. And C language can accomplish a 2-player gobang on computers. This 2-player gobang program contains 4 main sections, they are, graphics, movement and selection, victory judgment and helping system. Several elements and sentences of C programming language such as structural element, array, global variables, press processing and Graphics Programming are also applied in the program. With the accomplishment of the three main subprograms, namely, checker board and pieces construction, players step-selection and victory judgment, a whole program of gobang is established and gobang is available on computers.南昌航空大学软件学院 102032 班 陈琦帆 3 3C 语言课程设计报告-五子棋目 录一、需求分析 .4二、概要设计 .6三、详细设计 .9四、调试分析 .23五、用户手册 .24六、测试数据 .25七、附录 .26南昌航空大学软件学院 102032 班 陈琦帆 4 4C 语言课程设计报告-五子棋第 1章:需求分析1.1 五子棋背景传统五子棋的棋具与围棋相同,棋子分为黑白两色,棋盘为 1515,棋子放置于棋盘线交叉点上。两人对局,各执一色,轮流下一子,先将横、竖或斜线的 5 个或 5 个以上同色棋子连成不间断的一排者为胜。 因为传统五子棋在落子后不能移动或拿掉,所以也可以用纸和笔来进行游戏。1.2 程序设计本程序设计为人与人对弈,一方执黑棋,一方执白棋,轮流走棋,每方都试图在游戏结束前让自己的棋子五子相连,首先实现五子相连的一方获胜。程序执行过程中,要求棋盘、棋子时时可见,并且人可以通过按键盘按键移动光标,摆放棋子。1.2.1 程序需求分析根据功能需求,将程序分为图形显示、玩家控制、胜负判断和玩家计分四个模块,以下分析各模块的需求。图形显示模块:程序开始运行时,给出欢迎及帮助界面;游戏开始后要求生成 1919 的棋盘图像,并在棋盘上方提示当前落子方棋子颜色,游戏进行过程中,要求实时显示棋盘上已落下的棋子;分出胜负后,要求给出游戏结束画面。玩家控制模块:程序开始时,需玩家确定而后开始游戏;游戏过程中,两个玩家通过不同的按键移动光标,选择落子;游戏结束时,有玩家选择是否开始新棋局。胜负判断模块:实时监测棋盘上棋子,一旦某一色棋子出现五子连线,终止游戏程序,并着色连成一线的五子,弹出该色玩家胜出界面。玩家计分模块:一方玩家再胜利后通过对文件的操作进行计分,并输出于计分板上。1.2.2 程序流程设计根据程序需求分析结果,可以得出程序的总体结构图如图 1,程序总体流程图如图 2。南昌航空大学软件学院 102032 班 陈琦帆 5 5C 语言课程设计报告-五子棋五 子 棋 游 戏图 形 产 生模 块玩 家 操 作模 块胜 负 判 断模 块玩 家 计 分模 块图 1南昌航空大学软件学院 102032 班 陈琦帆 6 6C 语言课程设计报告-五子棋第 2 章:概要设计2.1.1 各类头文件,变量及宏定义#include“stdio.h“#include “Conio.h“#include “graphics.h“#include #include#define closegr closegraph/*定义 1 号玩家的操作键键码*/#define W 0x1177/*上移-W*/#define S 0x1f73/*下移-S*/#define A 0x1e61/*左移-A*/#define D 0x2064/*右移-D*/#define SP 0x3920/*落子-空格键*/*定义 2 号玩家的操作键键码*/ #define UP 0x4800/*上移-方向键 up*/#define DOWN 0x5000/*下移-方向键 down*/#define LEFT 0x4b00/*左移 -方向键 left*/#define RIGHT 0x4d00/*右移- 方向键 right*/#define ENTER 0x1c0d/*落子-回车键 Enter*/#define ESC 0x011b/*退出*/#define Y 0x1579/*YES*/#define N 0x316e/*NO*/#define BACK 0xe08 /*悔棋*/#define DEL 0x5300 /*删除比分*/2.1.2 全局变量int ch,dh,del;/*文件操作计分变量*/int k,i,j,n,t;/*控制变量*/int a2020;/*棋盘数组*/2.2 图形模块棋盘的显示由游戏开始与结束部分控制,棋子以及棋子定位框的显示与保留由玩家操控部分决定,本章只列写棋盘与棋子的显示程序。南昌航空大学软件学院 102032 班 陈琦帆 7 7C 语言课程设计报告-五子棋图形模块主要由以下函数组成:initgr();/*图形界面初始化函数*/Welcome();/*欢迎界面*/Help();/*帮助界面 */board();/*画棋盘*/white();/*画白棋子*/black();/*画黑棋子 */bye();/*结束界面*/green();/*连珠时着色相应棋子 */show();drawmat();/*显示中文的点阵图函数,以及产生动态变色效果*/border();/*棋子定位框函数*/delborder();/*删除当前位置棋子定位框函数 */p1turn();/*轮到 1p 时在左边边框画出白棋以及输出 white turn 以提示 1p 进行操作*/p2turn();/*轮到 2p 时在右边边框画出黑棋以及输出 black turn 以提示 2p 进行操作*/p1del();/*轮到 2p 时去除 p1turn();函数的效果*/p2del();/*轮到 1p 时去除 p2turn();函数的效果*/2.3 玩家操作模块棋子的移动与落子有键盘上按键控制,本程序选取 1P 按键为W、S、A、D 和空格键,2P 按键为、 、和回车键,分别代表上移、下移、左移、右移光标和落子。在光标移动的过程中,光标按照玩家按键移动;在玩家按下落子按键后,程序自动调用棋子显示子程序和判断胜负子程序。1P、2P 的落子后,程序会为落子处的数组元素赋一个特定值,用于判定胜负。玩家操作模块主要由以下函数构成:P1move();/*玩家 1 移动函数*/P2move();/*玩家 2 移动函数*/Back();/*悔棋函数*/2.4 胜负判断模块胜负判断模块是程序的关键,该模块的设计直接关系到程序的运行速率和运行结果的正确与否。本函数根据每次落子的位置,分别向上、下、左、右、左上、左下、右上、右下八个方向判断是否有相同颜色的棋子连成五子,如果成立,游戏就结束,并显示提示信息,否则继续落子。以下简析本程序流程:,由获胜条件可以知,通过判断上、下、左、右、斜上、斜下八个方向上是否有连续的 5 个子即可得出是否获胜结果。在游戏开始时,将棋盘初始化,即将棋盘抽象为一个 19*19 的数组,数组中每个元素数值设为 6。1P 落子时,将数组内相应坐标处元素赋值为 0;2P 落子时,将数组内南昌航空大学软件学院 102032 班 陈琦帆 8 8C 语言课程设计报告-五子棋相应坐标处元素赋值为 1。通过循环扫描棋盘数组,如果 上、下、左、右、斜上、斜下八个方向某 5 个连续的子所对应的数组中元素之和等于 5 时,1P 获胜;当上、下、左、右、斜上、斜下八个方向某 5 个连续的子所对应的数组中元素之和等于 0 时,2P 获胜。胜负判断模块主要由以下几个函数构成:Win();/*主要函数,判断胜负*/P1win();/*p1 胜利时调用,用于告知 p1 玩家胜利及询问是否继续 */P1win();/*p2 胜利时调用,用于告知 p2 玩家胜利及询问是否继续 */restart();/*询问是否重新开始新的一局比赛的函数*/initialization();/*初始化棋盘对应数组所有值为 6*/2.5 玩家计分模块为了能使 1p 和 2p 更直观更便捷地看到双方对战的比分,所以做了此计分模块,因为分数不能因为重新调用 main()函数就丢失了,所以采用对文件的操作,通过文件来记录双方的比分,这里对 score1.txt 和 score2.txt 文件进行操作,用来计 1p 和 2p 的分数。玩家计分模块主要由以下几个函数构成:Point();/*整合所有文件操作的模块*/p1_point_input();/*1p 计分文件读取*/p1_point_input2();/*1p 计分文件写入*/p1_point_output();/*1p 计分文件输出*/p2_point_input();/*2p 计分文件读取*/p2_point_input2();/*2p 计分文件写入*/p2_point_output();/*2p 计分文件输出*/delscore1() ; /*删除当前 1p 分数*/delscore2(); /*删除当前 2p 分数*/南昌航空大学软件学院 102032 班 陈琦帆 9 9C 语言课程设计报告-五子棋2.6 各模块之间调用关系如下主 函 数 图 形 模 块 操 作 模 块 判 断 胜 负 模块 文 件 操 作 模块第 3 章:详细设计3.1 图形模块initgr() /* BGI 初始化 */int gd = DETECT, gm = 0; /* 和 gd = VGA,gm = VGAHI 是同样效果 */registerbgidriver(EGAVGA_driver);/* 注册 BGI 驱动后可以不需要.BGI 文件的支持运行 */initgraph( welcome() /*欢迎界面*/ initgr() ; /*初始化*/clearviewport(); /*清屏*/setcolor(2); /*设置颜色*/settextstyle(0,0,6); /*样式*/outtextxy(180,180,“Welcome“);/*位置以及内容*/settextstyle(0,0,2); /*文本样式*/outtextxy(240,420,“press any key to continue“);/*位置以及内容*/getch(); /*press any key to continue*/南昌航空大学软件学院 102032 班 陈琦帆 10 10C 语言课程设计报告-五子棋 help() /*帮助界面,基本操作同 welcome();函数 */initgr();clearviewport();setcolor(2);settextstyle(0,0,2);outtextxy(60,100,“P1 move; W S A D “);outtextxy(60,120,“ set : space “);outtextxy(60,180,“P2 move: up down left right “);outtextxy(60,200,“ set: Enter“);outtextxy(60,240,“You can press Backspace to pull back!“) ;outtextxy(60,280,“When you want to quit the game,“);outtextxy(60,300,“press Esc.“);outtextxy(220,440,“press any key to continue“);getch(); bye() /*say bye!,实现功能同上 */initgr();clearviewport();setcolor(4) ;settextstyle(0,0,6);outtextxy(130,180,“Thank you!“);settextstyle(0,0,2);outtextxy(240,420,“press any key to quit“);getch(); board()/*画棋盘*/setcolor(14); /*线色*/setfillstyle(1,6); /*样式*/bar(120,50,520,450); /*棋盘底*/南昌航空大学软件学院 102032 班 陈琦帆 11 11C 语言课程设计报告-五子棋for(k=0;kk)putpixel(x+i*8+k,y+j,color);show() /*动态点阵图中文闪烁效果*/for(n=0;n410)delborder();moveto(getx(),70);delborder();moverel(0,20);border();p1move();case D: /*右移*/ if(getx()480)delborder();moveto(140,gety();delborder();moverel(20,0);border();p1move();case SP: /*落子*/if(agetx()gety()!=6)/*判定如果棋盘此处无子才能下,否则重新调用 p1move 函数*/p1move();delborder(); /*去除定位框 */white(); /*画棋子*/agetx()gety()=1;/*将所在位置对应的数组点赋值为 1*/win(); /*判断胜负*/border(); /*在新的位置画出定位框*/p1del();p2turn();p2move();case ESC: / *结束游戏*/bye();closegraph(); exit(0);case BACK : /*悔棋操作*/back();p1del();p2turn();p2move();default: p1move();对左右两边提示框操作,提示轮到 2p进行操作,并调用 p2move()函数所有 if 语句作用在于如果落子即将溢出边框,让其改变位置到另一端,例如移动棋盘最上端,若继续向上移动,则移动至棋盘最下端对应位置南昌航空大学软件学院 102032 班 陈琦帆 15 15C 语言课程设计报告-五子棋p2move() /*玩家 2 操作*/switch(bioskey(0)case UP:if(gety()410)delborder();moveto(getx(),70);delborder();moverel(0,20);border();p2move();case RIGHT: if(getx()480)delborder();moveto(140,gety();delborder();moverel(20,0);border();p2move();case ENTER:if(agetx()gety()!=6)p2move();delborder();black();agetx()gety()=0;win();border();p2del();p1turn();p1move();default: p2move();case ESC:bye();closegraph(); exit(0);case BACK :back();p2del();p1turn();p1move();back() /*悔棋功能*/setcolor(6);setfillstyle(1,6);circle(getx(),gety(),9);floodfill(getx(),gety(),6); /*通过将现有棋子覆盖与棋盘底色相同的颜色来实现*/setcolor(14) ;P2move(); 函数与 p1move();函数基本作用相同南昌航空大学软件学院 102032 班 陈琦帆 16 16C 语言课程设计报告-五子棋line(getx()-9,gety(),getx()+9,gety() ;line(getx(),gety()-9,getx(),gety()+9) ;3.3 胜负判断模块win() /*胜负判断主程序*/for(i=120;i#include#define closegr closegraph/*定义 1号玩家的操作键键码*/#define W 0x1177/*上移-W*/#define S 0x1f73/*下移-S*/#define A 0x1e61/*左移-A*/#define D 0x2064/*右移-D*/#define SP 0x3920/*落子-空格键*/*定义 2号玩家的操作键键码*/ #define UP 0x4800/*上移-方向键 up*/#define DOWN 0x5000/*下移-方向键 down*/#define LEFT 0x4b00/*左移-方向键 left*/#define RIGHT 0x4d00/*右移-方向键 right*/#define ENTER 0x1c0d/*落子-回车键 Enter*/#define ESC 0x011b南昌航空大学软件学院 102032 班 陈琦帆 27 27C 语言课程设计报告-五子棋#define Y 0x1579#define N 0x316e#define BACK 0xe08 /*悔棋*/#define DEL 0x5300 /*删除比分*/int ch,dh,del;int k,i,j,n,t;int a2020;p1move(); /*定义函数*/p2move();win();p1_point_input();p1_point_input2();p1_point_output();p2_point_input();p2_point_input2();p2_point_output();point();back();p1win();p2win();white();black();welcome();help();initialization();board();p1turn();p2turn();p1del();initgr();p2del();border();show();delborder();drawmat();restart();green();bye();delscore2();delscore1();/*所有函数定义完毕*/welcome() /*欢迎界面*/ initgr() ;clearviewport();南昌航空大学软件学院 102032 班 陈琦帆 28 28C 语言课程设计报告-五子棋setcolor(2);settextstyle(0,0,6);outtextxy(180,180,“Welcome“);settextstyle(0,0,2);outtextxy(240,420,“press any key to continue“);getch();bye() /*say bye!*/initgr();clearviewport();setcolor(4) ;settextstyle(0,0,6);outtextxy(130,180,“Thank you!“);settextstyle(0,0,2);outtextxy(240,420,“press any key to quit“);getch();help() /*帮助界面*/initgr();clearviewport();setcolor(2);settextstyle(0,0,2);outtextxy(60,100,“P1 move; W S A D “);outtextxy(60,120,“ set : space “);outtextxy(60,180,“P2 move: up down left right “);outtextxy(60,200,“ set: Enter“);outtextxy(60,240,“You can press Backspace to pull back!“) ;outtextxy(60,280,“When you want to quit the game,“);outtextxy(60,300,“press Esc.“);outtextxy(220,440,“press any key to continue“);getch();char wu32K=/* 以下是 五 的 32 点阵楷体_GB2312 字模,128 byte */0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x03,0xFF,0x00,0x00,0x7F,0xE0,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,南昌航空大学软件学院 102032 班 陈琦帆 29 29C 语言课程设计报告-五子棋0x00,0x06,0x38,0x00,0x00,0x07,0xFE,0x00,0x01,0xFE,0x1C,0x00,0x00,0xEC,0x18,0x00,0x00,0x08,0x18,0x00,0x00,0x18,0x18,0x00,0x00,0x18,0x30,0x00,0x00,0x10,0x30,0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x00,0x20,0x7F,0xF0,0x00,0xFF,0xFF,0xF8,0x7F,0xC0,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,;char zi32K=/* 以下是 子 的 32 点阵楷体_GB2312 字模,128 byte */0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x01,0xFE,0x00,0x00,0xFF,0x9E,0x00,0x00,0x78,0x18,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0xC0,0x00,0x00,0x03,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x83,0xF0,0x00,0x01,0xFF,0xFC,0x00,0x3F,0xF0,0x00,0x3F,0xF8,0xC0,0x00,0x1E,0x00,0xC0,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0xC0,0x00,0x00,0x

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论