C语言课设五子棋.docx
- 文档编号:18251383
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:26
- 大小:119.83KB
C语言课设五子棋.docx
《C语言课设五子棋.docx》由会员分享,可在线阅读,更多相关《C语言课设五子棋.docx(26页珍藏版)》请在冰点文库上搜索。
C语言课设五子棋
C语言课程设计
课题:
基于C语言的五子棋游戏的制作
学院:
班级:
姓名:
指导老师:
二零一一年7月1日
*****学院
计算机课程设计课题申报表
系级学生
相关课程
C语言
指导教师
学生人数
1
课题名称
基于C语言五子棋游戏的制作
设计地点
检测楼
204
课题工作内容
用c语言设计一个五子棋的小游戏
课题来源
课题性质
使用计算机情况
工程实践
模拟,实践
使用是使用电脑
系负责人签字:
申报人:
杨帆
2011年7月1日
******学院
计算机课程设计任务书
系班学生:
课题名称:
基于C语言五子棋游戏的制作
课题要求:
本程序旨在训练基本编程能力和游戏开发技巧、熟悉C言语(或VB)图形模式下的编程。
本程序涉及很多图形函数;颜色设置;PC扬声器的打开、延迟、关闭等。
本计算器主要需由以下几个功能模块组成:
(1)实现下棋操作;
(2)胜负判断;
(3)帮助信息的显示。
可以在实现以上基本模块后进一步扩展。
工作进度安排:
●程序编辑思路的初步设定1周
●五子棋游戏设计和软件编程0.5周
●撰写课程设计报告0.5周
主要参考资料:
[1]C语言程序设计(第三版)谭浩强著清华大学出版社
[2]C语言程序设计题解谭浩强著清华大学出版社
[3]C语言实例解析精粹(第2版)曹衍龙著人民邮电出版社
[4]C++程序设计与上机指导李师贤著中山大学出版社
系负责人:
指导教师:
高鸿波
时间:
2011年7月1日
C语言五子棋游戏
学生姓名:
学号:
指导老师:
摘要
五子棋是一种两人对弈的纯策略型棋类游戏,应用c语言编写程序可以在计算机上实现两人对已五子棋功能。
两人对弈五子棋程序由图像生成,光标移动与落子,判断胜负和系统帮助等子程序构成;程序中应用了结构.数组.全局变量.案件处理和图形编程等元素和语言。
程序通过棋盘和棋子图像生成.两人移子与落子和判断胜负等功能的实现,在计算机上实现了;两人五子棋对弈。
目录
摘要·················································1
目录·················································2
第一章前言···········································3
第二章C语言背景及发展背景·······················4
第三章基于C语言的五子棋游戏的制作·········
3.1系统流程图设计·································
程序代码及测试结果
心得与体会
参考文献
第一章前言
C语言是一种成功的系统描述语言,用C语言开发的UNIX操作系统就是一个成功的范例;同时C语言又是一种通用的程序设计语言,在国际上广泛流行。
世界上很多著名的计算公司都成功的开发了不同版本的C语言,很多优秀的应用程序也都使用C语言开发的,它是一种很有发展前途的高级程序设计语言。
1.C是中级语言。
它把高级语言的基本结构和语句与低级语言的实用性结合起来。
C语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。
2.C是结构式语言。
结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。
这种结构化方式可使程序层次清晰,便于使用、维护以及调试。
C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
3.C语言功能齐全。
具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。
而且计算功能、逻辑判断功能也比较强大,可以实现决策目的的游戏。
4.C语言适用范围大。
适合于多种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。
C语言对编写需要硬件进行操作的场合,明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的。
C语言具有较好的可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。
它是数值计算的高级语言。
常用的C语言IDE(集成开发环境)有MicrosoftVisualC++,Dev-C++,Code:
:
Blocks,BorlandC++,WatcomC++,BorlandC++Builder,GNUDJGPPC++,Lccwin32CCompiler3.1,HighC,TurboC,C-Free,win-tc等等……
我们认为,C语言是可以作为程序设计的入门语言来学习的。
第二章C及其发展背景
c语言
C语言的祖先是BCPL语言。
1967年,剑桥大学的MartinRichards对CPL语言进行了简化,于是产生了BCPL(BasicCombinedPogrammingLanguage)语言。
1970年,美国贝尔实验室的KenThompson。
以BCPL语言为基础,设计出很简单且很接近硬件的B语言(取BCPL的首字母)。
并且他用B语言写了第一个UNIX操作系统。
在1972年,美国贝尔实验室的D.M.Ritchie在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。
为了使UNIX操作系统推广,1977年DennisM.Ritchie发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。
1978年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。
同时由B.W.Kernighan和D.M.Ritchie合著
c语言程序设计
了著名的《TheCProgrammingLanguage》一书。
通常简称为《K&R》,也有人称之为《K&R》标准。
但是,在《K&R》中并没有定义一个完整的标准C语言,后来由美国国家标准化协会(AmericanNationalStandardsInstitute)在此基础上制定了一个C语言标准,于一九八三年发表。
通常称之为ANSIC。
K&R第一版在很多语言细节上也不够精确,对于pcc这个“参照编译器”来说,它日益显得不切实际;K&R甚至没有很好表达它所要描述的语言,把后续扩展扔到了一边。
最后,C在早期项目中的使用受商业和政府合同支配,它意味着一个认可的正式标准是重要的。
因此(在M.D.McIlroy的催促下),ANSI于1983年夏天,在CBEMA的领导下建立了X3J11委员会,目的是产生一个C标准。
X3J11在1989年末提出了一个他们的报告[ANSI89],后来这个标准被ISO接受为ISO/IEC9899-1990。
1990年,国际标准化组织ISO(InternationalOrganizationforStandards)接受了89ANSIC为ISOC的标准(ISO9899-1990)。
1994年,ISO修订了C语言的标准。
1995年,ISO对C90做了一些修订,即“1995基准增补1(ISO/IEC/9899/AMD1:
1995)”。
1999年,ISO有对C语言标准进行修订,在基本保留原来C语言特征的基础上,针对应该的需要,增加了一些功能,尤其是对C++中的一些功能,命名为ISO/IEC9899:
1999。
2001年和2004年先后进行了两次技术修正。
目前流行的C语言编译系统大多是以ANSIC为基础进行开发的,但不同版本的C编译系统所实现的语言功能和语法规则有略有差别。
第三章:
3.1系统流程图设计
程序代码:
#include
#include
#include
#include
#include
#defineCROSSRU0xbf/*右上角点*/
#defineCROSSLU0xda/*左上角点*/
#defineCROSSLD0xc0/*左下角点*/
#defineCROSSRD0xd9/*右下角点*/
#defineCROSSL0xc3/*左边*/
#defineCROSSR0xb4/*右边*/
#defineCROSSU0xc2/*上边*/
#defineCROSSD0xc1/*下边*/
#defineCROSS0xc5/*十字交叉点*/
/*定义棋盘左上角点在屏幕上的位置*/
#defineMAPXOFT5
#defineMAPYOFT2
/*定义1号玩家的操作键键码*/
#definePLAY1UP0x1157/*上移--'W'*/
#definePLAY1DOWN0x1f53/*下移--'S'*/
#definePLAY1LEFT0x1e41/*左移--'A'*/
#definePLAY1RIGHT0x2044/*右移--'D'*/
#definePLAY1DO0x3920/*落子--空格键*/
/*定义2号玩家的操作键键码*/
#definePLAY2UP0x4800/*上移--方向键up*/
#definePLAY2DOWN0x5000/*下移--方向键down*/
#definePLAY2LEFT0x4b00/*左移--方向键left*/
#definePLAY2RIGHT0x4d00/*右移--方向键right*/
#definePLAY2DO0x1c0d/*落子--回车键Enter*/
/*若想在游戏中途退出,可按Esc键*/
#defineESCAPE0x011b
/*定义棋盘上交叉点的状态,即该点有无棋子*/
/*若有棋子,还应能指出是哪个玩家的棋子*/
#defineCHESSNULL0/*没有棋子*/
#defineCHESS1'O'/*一号玩家的棋子*/
#defineCHESS2'X'/*二号玩家的棋子*/
/*定义按键类别*/
#defineKEYEXIT0/*退出键*/
#defineKEYFALLCHESS1/*落子键*/
#defineKEYMOVECURSOR2/*光标移动键*/
#defineKEYINVALID3/*无效键*/
/*定义符号常量:
真,假---真为1,假为0*/
#defineTRUE1
#defineFALSE0
/**********************************************************/
/*定义数据结构*/
/*棋盘交叉点坐标的数据结构*/
structpoint
{
intx,y;
};
/**********************************************************/
/*自定义函数原型说明*/
voidInit(void);
intGetKey(void);
intCheckKey(intpress);
intChangeOrder(void);
intChessGo(intOrder,structpointCursor);
voidDoError(void);
voidDoOK(void);
voidDoWin(intOrder);
voidMoveCursor(intOrder,intpress);
voidDrawCross(intx,inty);
voidDrawMap(void);
intJudgeWin(intOrder,structpointCursor);
intJudgeWinLine(intOrder,structpointCursor,intdirection);
voidShowOrderMsg(intOrder);
voidEndGame(void);
/**********************************************************/
/**********************************************************/
intgPlayOrder;
structpointgCursor;
chargChessBoard[19][19];/*用于记录棋盘上各点的状态*/
/**********************************************************/
/**********************************************************/
/*主函数*/
voidmain()
{
intpress;
intbOutWhile=FALSE;/*退出循环标志*/
Init();/*初始化图象,数据*/
while
(1)
{
press=GetKey();
switch(CheckKey(press))
{
/*是退出键*/
caseKEYEXIT:
clrscr();/*清屏*/
bOutWhile=TRUE;
break;
/*是落子键*/
caseKEYFALLCHESS:
if(ChessGo(gPlayOrder,gCursor)==FALSE)/*走棋*/
DoError();/*落子错误*/
else
{
DoOK();/*落子正确*/
/*如果当前行棋方赢棋*/
if(JudgeWin(gPlayOrder,gCursor)==TRUE)
{
DoWin(gPlayOrder);
bOutWhile=TRUE;
}
/*否则*/
else
ChangeOrder();
ShowOrderMsg(gPlayOrder);
}
break;
/*是光标移动键*/
caseKEYMOVECURSOR:
MoveCursor(gPlayOrder,press);
break;
/*是无效键*/
caseKEYINVALID:
break;
}
if(bOutWhile==TRUE)
break;
}
/*游戏结束*/
EndGame();
}
/**********************************************************/
/*界面初始化,数据初始化*/
voidInit(void)
{
inti,j;
char*Msg[]=
{
"Player1key:
",
"UP----w",
"DOWN--s",
"LEFT--a",
"RIGHT-d",
"DO----space",
"",
"Player2key:
",
"UP----up",
"DOWN--down",
"LEFT--left",
"RIGHT-right",
"DO----ENTER",
"",
"exitgame:
",
"ESC",
NULL,
};
gPlayOrder=CHESS1;
for(i=0;i<19;i++)
for(j=0;j<19;j++)
gChessBoard[i][j]=CHESSNULL;
gCursor.x=gCursor.y=0;
textmode(C40);
DrawMap();
i=0;
textcolor(BROWN);
while(Msg[i]!
=NULL)
{
gotoxy(25,3+i);
cputs(Msg[i]);
i++;
}
ShowOrderMsg(gPlayOrder);
gotoxy(gCursor.x+MAPXOFT,gCursor.y+MAPYOFT);
}
voidDrawMap(void)
{
inti,j;
clrscr();
for(i=0;i<19;i++)
for(j=0;j<19;j++)
DrawCross(i,j);
}
voidDrawCross(intx,inty)
{
gotoxy(x+MAPXOFT,y+MAPYOFT);
if(gChessBoard[x][y]==CHESS1)
{
textcolor(LIGHTBLUE);
putch(CHESS1);
return;
}
if(gChessBoard[x][y]==CHESS2)
{
textcolor(LIGHTBLUE);
putch(CHESS2);
return;
}
textcolor(GREEN);
if(x==0&&y==0)
{
putch(CROSSLU);
return;
}
if(x==0&&y==18)
{
putch(CROSSLD);
return;
}
if(x==18&&y==0)
{
putch(CROSSRU);
return;
}
if(x==18&&y==18)
{
putch(CROSSRD);
return;
}
if(x==0)
{
putch(CROSSL);
return;
}
if(x==18)
{
putch(CROSSR);
return;
}
if(y==0)
{
putch(CROSSU);
return;
}
if(y==18)
{
putch(CROSSD);
return;
}
putch(CROSS);
}
intChangeOrder(void)
{
if(gPlayOrder==CHESS1)
gPlayOrder=CHESS2;
else
gPlayOrder=CHESS1;
return(gPlayOrder);
}
intGetKey(void)
{
charlowbyte;
intpress;
while(bioskey
(1)==0)
;
press=bioskey(0);
lowbyte=press&0xff;
press=press&0xff00+toupper(lowbyte);
return(press);
}
voidDoError(void)
{
sound(1200);
delay(50);
nosound();
}
voidDoWin(intOrder)
{
sound(1500);delay(100);
sound(0);delay(50);
sound(800);delay(100);
sound(0);delay(50);
sound(1500);delay(100);
sound(0);delay(50);
sound(800);delay(100);
sound(0);delay(50);
nosound();
textcolor(RED+BLINK);
gotoxy(25,20);
if(Order==CHESS1)
cputs("PLAYER1WIN!
");
else
cputs("PLAYER2WIN!
");
gotoxy(25,21);
cputs("\n");
getch();
}
intChessGo(intOrder,structpointCursor)
{
if(gChessBoard[Cursor.x][Cursor.y]==CHESSNULL)
{
gotoxy(Cursor.x+MAPXOFT,Cursor.y+MAPYOFT);
textcolor(LIGHTBLUE);
putch(Order);
gotoxy(Cursor.x+MAPXOFT,Cursor.y+MAPYOFT);
gChessBoard[Cursor.x][Cursor.y]=Order;
returnTRUE;
}
else
returnFALSE;
}
intJudgeWin(intOrder,structpointCursor)
{
inti;
for(i=0;i<4;i++)
if(JudgeWinLine(Order,Cursor,i))
returnTRUE;
returnFALSE;
}
intJudgeWinLine(intOrder,structpointCursor,intdirection)
{
inti;
structpointpos,dpos;
constinttestnum=5;
intcount;
switch(direction)
{
case0:
pos.x=Cursor.x-(testnum-1);
pos.y=Cursor.y;
dpos.x=1;
dpos.y=0;
break;
case1:
pos.x=Cursor.x;
pos.y=Cursor.y-(testnum-1);
dpos.x=0;
dpos.y=1;
break;
case2:
pos.x=Cursor.x-(testnum-1);
pos.y=Cursor.y+(testnum-1);
dpos.x=1;
dpos.y=-1;
break;
case3:
pos.x=Cursor.x-(testnum-1);
pos.y=Cursor.y-(testnum-1);
dpos.x=1;
dpos.y=1;
break;
}
count=0;
for(i=0;i ? ? ? ? ? ? ? i { if(pos.x>=0&&pos.x<=18&&pos.y>=0&&pos.y<=18) { if(gChessBoard[pos.x][pos.y]==Order) { count++; if(count>=testnum) returnTRUE; } else cou
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言课设 五子棋 语言
![提示](https://static.bingdoc.com/images/bang_tan.gif)