C语言课设五子棋.docx

上传人:b****8 文档编号:30409819 上传时间:2023-08-14 格式:DOCX 页数:26 大小:119.83KB
下载 相关 举报
C语言课设五子棋.docx_第1页
第1页 / 共26页
C语言课设五子棋.docx_第2页
第2页 / 共26页
C语言课设五子棋.docx_第3页
第3页 / 共26页
C语言课设五子棋.docx_第4页
第4页 / 共26页
C语言课设五子棋.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

C语言课设五子棋.docx

《C语言课设五子棋.docx》由会员分享,可在线阅读,更多相关《C语言课设五子棋.docx(26页珍藏版)》请在冰豆网上搜索。

C语言课设五子棋.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1