简易五子棋文档
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计
班级:电信16-2班
姓名:
学号:
指导教师:
成绩:
电子与信息工程学院
信息与通信工程系
目录
1. 任务概述 (3)
1.1 课题设置要求 (3)
1.2 系统说明 (3)
2. 功能及模块设计 (3)
2.1 功能 (3)
2.2 模块设计 (3)
3.数据结构与算法分析 (4)
3.1 结构说明 (4)
3.2 算法逻辑流程 (5)
4. 程序描述 (11)
5. 个人心得体会 (11)
6. 参考文献 (11)
1. 任务概述
1.1 题目设计要求
1.1.1 程序设计语言不限,可以自选。C,java,c#...
1.1.2 棋盘大小为 15* 15 。
1.1.3 能判断胜负。任何一方在盘面上先连到5个棋子(横、竖、对角方向)即为胜利。
1.1.4 功能必须正确,其余功能可以自行丰富。
1.2 系统说明
我完成的程序是一款五子棋小游戏,由双方对弈,谁提前完成横竖或对角五子连珠谁获得最终胜利。我选用的操作语言是c语言,该程序在Codeblocks下实现运行,该程序完全执行五子棋下棋规则,使得玩家在程序中与他人对弈,并由程序自动判断输赢。结果如图1 运行结果。
图1 运行结果
2. 功能及模块设计
2.1 功能:
开始运行程序后进入初始化界面,进入游戏后玩家可在棋盘一空白棋位处落子,黑棋先执行,玩家或对手哪一方先在棋盘上使五个子联行,程序就判定哪一方取胜。
Play1 ,play2均使用键盘控制落子点,play1由‘w,s,a,d’控制上下左右,空格键落子,play2由数字键盘‘8,5,4,6’控制上下左右,‘0’落子。
2.2 模块设计:
由于对于C语言的学习不够深入和精通,尽可以作一些简单的操作,因此我只安排了简单双人对弈,并没有人机对弈。棋盘也是十分简明美观,还改成了黄颜色,看起来更加明亮。
3. 数据结构与算法分析
3.1 结构说明:
3.2 算法逻辑流程
#include
#include
#include
定义play1和play2的操作
#define play1up 'w'
#define play1down 's'
#define play1left 'a'
#define play1right 'd'
#define play2up '8'
#define play2down '5'
#define play2left '4'
#define play2right '6'
#define play1lq ' '
#define play2lq '0'
#define N 15
#define playnext 'q'
#define exit 'e'
int m=1;
int p[N][N];/*记录棋盘落子情况*/
char q[N][N];/*记录棋盘交叉点棋子种类*/
结构体,定义坐标位置:
struct zuobiao
{
int x;
int y;
}weizhi;
/*注意以上为全局声明部分,应用到下面所有调用函数与主函数*/
char* getStyle(int i,int j)//获得棋盘中指定坐标交点位置的字符,通过制表符拼成棋盘{
if(i==0&&j==0)//以下为边缘棋盘样式
return "┏";
else if(i==N-1&&j==0)
return "┓";
else if(i==N-1&&j==N-1)
return "┛";
else if(i==0&&j==N-1)
return "┗";
else if(i==0)
return "┠";
else if(i==N-1)
return "┨";
else if(j==0)
return "┯";
else if(j==N-1)
return "┷";
return "┼";//中间的空位
}
void gotoxy(int x, int y) /*(屏幕)建立光标移动位置的坐标函数*/
{
COORD c; // COORD表示一个结构体的字符在控制台屏幕上的坐标
c.X=x;
c.Y=y;
SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c); //定位光标位置的函数将光标移动到指定位置一个特定的标准设备取得句柄
}
void drawqipan()/*建立棋盘*/
{
int i,j;
for(j=0;j { for(i=0;i { printf(getStyle(i,j)); } printf("\n"); } } void movegb(char press)/*(非屏幕)光标的移动*/ { switch(press) { case play1up:if(weizhi.y>-1)weizhi.y--;if(weizhi.y<0)weizhi.y=14;break; /*对手1光标向上移动*/ case play1down:if(weizhi.y<15)weizhi.y++;if(weizhi.y>14)weizhi.y=0;break; /*对手1光标向下移动*/ case play1left:if(weizhi.x>-1)weizhi.x--;if(weizhi.x<0)weizhi.x=14;break; /*对手1光标向左移动*/ case play1right:if(weizhi.x<15)weizhi.x++;if(weizhi.x>14)weizhi.x=0;break; /*对手1光标向右移动*/ case play2up:if(weizhi.y>-1)weizhi.y--;if(weizhi.y<0)weizhi.y=14;break; /*对手2光标向上移动*/ case play2down:if(weizhi.y<15)weizhi.y++;if(weizhi.y>14)weizhi.y=0;break; /*对手2光标向下移动*/