c语言程序的设计五子棋.docx
《c语言程序的设计五子棋.docx》由会员分享,可在线阅读,更多相关《c语言程序的设计五子棋.docx(16页珍藏版)》请在冰豆网上搜索。
c语言程序的设计五子棋
伊犁师学院
高级语言课程设计报告
学院:
电子与信息工程学院
学生:
学号:
专业届别:
指导教师:
完成时间:
五子棋游戏
1设计目的及要求
目的:
(1)学习综合运用C语言课程和其他相关课程的知识,提高分析解决实际问题的能力,进一步巩固、加深和拓宽所学的知识,进一步加强结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解。
(2)全面系统的学习面向对象程序设计的基本概念、基本语法和编程方法,与同学合作设计整套程序,并且独立完成一定工作量的程序设计.
(3)掌握程序设计中的常用算法和C语言的程序技巧,培养良好的程序设计风格。
(4)运用所学的知识了解五子棋游戏的制作结构,将所学的知识运用于实践中。
要求:
(1)独自设计、编制、调试出一款五子棋游戏。
(2)要求该游戏具有趣味性和可操作性,能够正常运行。
其中用到C语言中的各种语句、结构。
(如其中需要注意全局变量和局部变量的申明,数组的使用等)(3)五子棋游戏要求能够进入欢迎界面,当有五颗相同颜色的棋子连续连成五颗,就胜出。
任务:
五子棋是一种传统的棋盘游戏,是我国古代传统的黑白棋种之一发展于日本,流行于欧洲任务容就是设计一款老少皆宜、能够锻炼个人策略谋划能力棋。
有助于孩子开发智力,或者闲暇时打发时间。
原则:
(1)系统性。
系统作为统一整体而存在,因此,在设计中,要从系统的角度考虑。
系统的代码要统一,传递语言要尽可能一致。
(2)可靠性。
可靠性是指系统抵御外界干扰的能力及外界干扰时的恢复能力。
(3)规性。
游戏的运用以吸引玩家的乐趣为前提,一方面,系统设计应尽量避免不必要的复杂化,另一方面模块应尽量简洁,以缩短处理流程。
2开发工具
C语言
3应用平台
Windowsxp
4功能设计
游戏分析:
五子棋是两人之间的竞技游戏,该五子棋程序基本上实现了五子棋游戏的功能,有双方下棋之前的欢迎界面及下棋过程中的棋盘界面,还有最终会判断出输赢。
同时,该游戏采用了二维坐标实现的,明了易懂,方便玩家在游戏过程中的基本操作,使游戏更加简便。
细节方面,该程序有实时储存功能,随时记录。
另外考虑到游戏挺简单的,就没有设置悔棋的相关模块。
游戏介绍:
该游戏是简单的双人五子棋,所实现的功能是能够显示欢迎界面,选择是否进行游戏,进入游戏界面以后,玩家开始下棋。
玩家输入坐标则会在棋盘上显示棋子,(若是输入的坐标超出棋盘或者该位子已经有子则会提示玩家重新输入坐标位子),若输入则退出游戏。
4.1算法设计
程序说明:
五子棋是一款经典的益智类游戏,通常是黑棋先行;五子棋专用盘为15*15方格,五个子的连接方向为横、竖、斜,当任一方的五个子在各方向上连成一线时,则该方获胜。
程序要求:
按照程序说明编写五子棋程序,要求可以进行双人之间的游戏。
程序输出:
输出棋盘、棋子,并能够进行相应的操作。
4.2流程图模块
图1:
程序整体设计思路流程图
开始
黑白棋子交替出现
移动当前棋子
选择位置后放置棋子
判断是否有5个连成一线
结束
否
是
图2:
绘图过程的算法流程
初始化图形设备
绘制棋盘(15*15)
结束
放置棋子
开始
同颜色的五个连成直线
否
是
5程序调试及运行
5.1程序运行结果
图1初始化界面
图2运行游戏的界面
5.2程序代码
#include“stdio.h”
#include”graphics.h”
#defineLEFT0x4b00
#defineRIGHT0x4d00
#defineDOWN0x5000
#defineUP0x4800
#defineESC0x011b
#defineENTER0x1c0d
intx=-1,y=0;
intmax_x,max_y;
intboard_flag[15][15];
voiddraw_board();
voidshow_init(intpat);
voidhide();
voidshow(intpat);
voidmove();
intis_win(intpat);
voidmain()
{
intdriver=DETECT,mode;
inti,j;
for(i=0;i<15;i++)
for(j=0;j<15;j++)
{
board_flag[i][j]=0;
}
initgraph(&driver,&mode,””);
draw_board();
show_init(0);
move();
getch();
closegraph();
}
voiddraw_board()
{
inti;
max_x=getmaxx();
max_y=getmaxy();
setfillstyle(1,BLUE);
bar(0,0,max_x,max_y);
for(i=-7;i<=8;i++)
{
line(max_x/2-7*26,max_y/2+i*26,max_x/2+8*26,max_y/2+i*26);
line(max_x/2+i*26,max_y/2-7*26,max_x/2+i*26,max_y/2+8*26);
}
}
voidshow_init(intpat)
{
setcolor(BLUE);
if(pat==0)
{
setfillstyle(1,BLACK);
}
else
{
setfillstyle(1,WHITE);
}
x=-1;
y=0;
fillellipse(max_x/2-8*26+13,max_y/2-7*26+23,12,12);
}
voidhide()
{
intm;
m=board_flag[x][y];
switch(m)
{
case0:
setfillstyle(1,BLUE);
break;
case1:
setfillstyle(1,BLACK);
break;
case2:
Setfillstyle(1,WHITE);
break;
default:
break;
}
fillellipse(max_x/2+(x-7)*26+13,max_y/2+(y-7)*26+13,12,12);
}
voidshow(intpat)
{
switch(pat)
{
case0:
setfillstyle(1,BLACK);
break;
case1:
setfillstyle(1,WHITE);
break;
default:
break;
}
fillellipse(max_x/2+(x-7)*26+13,max_y/2+(y-7)*26+13,12,12);
}
voidmove()
{
intkey;
intpat=0;
for(;;)
{
key=bioskey(0);
switch(key)
{caseLEFT:
if(x==-1)
{
break;
}
hide();
x--;
x=x<0?
0:
x;
show(pat);
break;
caseRIGHT:
if(x==-1)
{
setfillstyle(1,BLUE);fillellipse(max_x/2+(x-7)*26+13,max_y/2+(y-7)*26+13,12,12);
}
else
{
hide();
}
x++;
x=x>14?
14:
x;
show(pat);
break;
caseDOWN:
if(x==-1)
{
break;
}
hide();
y++;
y=y>14?
14:
y;
show(pat);
break;
caseUP:
if(x==-1)
{
break;
}
hide();
y--;
y=y<0?
0:
y;
show(pat);
break;
caseENTER:
if(board_flag[x][y]!
=0)
{
break;
}
show(pat);
board_flag[x][y]=pat+1;
if(is_win(pat))
{
settextstyle(0,0,3);
setcolor(RED);
if(pat==0)
{
outtextxy(max_x/2-80,max_y/2,”BlackWin!
”);
}
else
{
outtextxy(max_x/2-80,max_y/2,”WhiteWin!
”);
}
setcolor(BLUE);
getch();
exit
(1);
}
if(pat==0)
{
pat=1;
}
else
{
pat=0;
}
show_init(pat);
break;
caseESC:
exit
(1);
break;
default:
break;
}
}
}
intis_win(intpat)
{
inti,j;
intt=0;
cnt=0;
i=x;
while(i<15)
{
if(board_flag[i][y]==pat+1)
{
t++;
}
else
{
break;
}
i++;
}
i=x-1;
while(i>=0)
{
if(board_flag[i][y]==pat+1)
{
cnt++;
}
else
{
break;
}
i--;
}
if(cnt>=5)
{
return1;
}
cnt=0;
i=x;
j=y;
while(i<15)
{
if(j<0)
{
break;
}
if(board_flag[i][j]==pat+1)
{
t++;
}
else
{
break;
}
i++;
j--;
}
i=x-1;
j=y+1;
while(i>=0)
{if(j>14)
{
break;
}
if(board_flag[i][j]==pat+1)
{
cnt++;
}
else
{
break;
}
i--;
j++;
}
if(cnt>=5)
{
return1;
}
cnt=0;
j=y;
while(j>=0)
{
if(board_flag[x][j]==pat+1)
{
cnt++;
}
else
{
break;
}
j--;
}
j=y+1;
while(j<15)
{if(board_flag[x][j]==pat+1)
{
cnt++;
}
else
{
break;
}
j++;
}
if(cnt>=5)
{
return1;
}
cnt=0;
i=x;
j=y;
while(i>=0)
{
if(j<0)
{
break;
}
if(board_flag[i][j]==pat+1)
{
cnt++;
}
else
{
break;
}
i--;
j--;
}
i=x+1;
j=y+1;
while(i<15)
{
if(j>14)
{
break;
}
if(board_flag[i][j]==pat+1)
{