C语言五子棋课程设计报告

清风拂面 范文 报告范文
精选回答

2012年C语言五子棋课程设计报告本文简介:本科《控制软件设计》课程设计题目五子棋学院计信院专业自动化年级2011级学号222011321042081姓名谯平同组人张健、李益指导教师黄仁杰2012年9月6日21目录1、设计简介32、设计模块43、小组分工44、流程图45、设计过程56、调试过程67、分析与总结98、源程序9Table1、设计简

2012年C语言五子棋课程设计报告本文内容:

本科《控制软件设计》课程设计

五子棋

计信院

自动化

2011级

222011321042081

谯平

张健、李益

黄仁杰

2012年

9

6

21

1、

设计简介

3

2、

设计模块

4

3、

小组分工

4

4、

流程图

4

5、

设计过程

5

6、

调试过程

6

7、

分析与总结

9

8、

源程序

9

Table

1、

设计简介

五子棋是一种传统的棋盘游戏,是起源于中国古代的传统黑白棋种之一。发展于日本,流行于欧美。容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。这种游戏用笔纸都可以进行。

本程序设计为人与人对弈,双方棋子为一种颜色。一方执O棋,一方执X棋,执O形棋的一方先行下子,移动光标键为“w(上)、s(下)、a(左)、d(右)”,落子键位“空格”,然后另一方走棋,移动光标键为“上、下、左、右”,落子键为“Enter“。接着双方轮流走棋,每方都试图在游戏结束前让自己的棋子在横线、竖线、斜线方向五子相连,首先实现五子相连的一方获胜,游戏结束。程序执行过程中,要求棋盘、棋子时时可见,并且人可以通过按键盘按键移动光标,摆放棋子。同时在落子不同情况以及出现赢家的时候都会出现相应的声音。

二、设计模块

3、

小组分工

李益:初始化模块

谯平:下棋操作模块

张健:胜负判断模块

四、流程图

5、

设计过程

1、列出所需头文件名

2、定义棋盘的制符表及位置

3、定义双方玩家各自的操作键

4、定义数据结构

5、说明自定义函数原型

6、定义全局变量

7、初始化图像以及获得按键值

8、嵌入各自定义函数编写主函数

9、编写界面初始化函数void

Init(void)

10、编写画棋盘函数void

DrawMap(void)

11、编写交换棋手函数int

ChangeOrder(void)

12、编写获取按键值函数int

GetKey(void)

13、编写落子处理函数void

DoError(void)

14、编写赢棋处理函数void

DoWin(int

Order)

15、编写走棋函数int

ChessGo(Order,point

Cursor)

16、编写判断是否赢棋函数int

JudgeWin(Order,point

Cursor)

17、编写判断在规定方向是否有五子相连函数int

JudgeWinline(Order,point

Cursor)

18、编写移动光标函数void

MoveCursor(Order,press)

19、编写游戏结束处理函数void

EndGame(void)

20、编写显示当前棋方函数void

ShowOrderMsg(Order)

21、编写落子正确处理函数void

DoOK(void)

22、编写检查用户按键类别函数int

CheckKey(press)

6、

调试过程

运行平台:C/C++程序设计学习与实验系统

1、点击运行,出现棋盘界面

2、根据界面提示键落子,玩家一先下,双方轮流落子。

3、一方五子相连,判出赢家,游戏结束。

4按任意键退出游戏。

七、问题与与总结

1、用十六进制数制表格的方法不了解,参照网例的时候也不是很明白原理,以至于表格不是很完善,两行中间的一行在棋盘上没有清晰的显示出来。

2、设计这样稍微复杂的程序时,我们要多多利用自定义函数的嵌入方法,这样把主程序分为若干个自定义函数,不仅可以减少程序设计中的遗漏现象,还有利于我们建立完善的设计思维模式。

3、设计程序前要多翻阅资料与阅读范例,尽量减少程序编写时犯错,程序编写时犯错很浪费时间和精力,而且往往很难找出错误的地方。

4、编程的前提是读懂其他程序,平时需要多练习才行,这次设计的过程步履维艰,就是因为没有长期的阅读练习和教训累积。

八、源程序

/*

程序中用到的库函数所在头文件应用

#include

命令包含进来/

#include

#include

#include

#include

#include

/**********************************************************/

/*

定义符号常量/

/*定义画棋盘所需的制表符*/

#define

CROSSRU

0xbf

/*右上角点*/

#define

CROSSLU

0xda

/*左上角点*/

#define

CROSSLD

0xc0

/*左下角点*/

#define

CROSSRD

0xd9

/*右下角点*/

#define

CROSSL

0xc3

/*左边*/

#define

CROSSR

0xb4

/*右边*/

#define

CROSSU

0xc2

/*上边*/

#define

CROSSD

0xc1

/*下边*/

#define

CROSS

0xc5

/*十字交叉点*/

/*定义棋盘左上角点在屏幕上的位置*/

#define

MAPXOFT

5

#define

MAPYOFT

2

/*定义1号玩家的操作键键码*/

#define

PLAY1UP

0x1157/*上移--

W/

#define

PLAY1DOWN

0x1f53/*下移--

S/

#define

PLAY1LEFT

0x1e41/*左移--

A/

#define

PLAY1RIGHT

0x2044/*右移--

D/

#define

PLAY1DO

0x3920/*落子--空格键*/

/*定义2号玩家的操作键键码*/

#define

PLAY2UP

0x4800/*上移--方向键up*/

#define

PLAY2DOWN

0x5000/*下移--方向键down*/

#define

PLAY2LEFT

0x4b00/*左移--方向键left*/

#define

PLAY2RIGHT

0x4d00/*右移--方向键right*/

#define

PLAY2DO

0x1c0d/*落子--回车键Enter*/

/*若想在游戏中途退出,可按

Esc

键*/

#define

ESCAPE

0x011b

/*定义棋盘上交叉点的状态,即该点有无棋子/

/*若有棋子,还应能指出是哪个玩家的棋子/

#define

CHESSNULL

0

//没有棋子

#define

CHESS1

O

//一号玩家的棋子

#define

CHESS2

X

//二号玩家的棋子

/*定义按键类别*/

#define

KEYEXIT

0/*退出键*/

#define

KEYFALLCHESS

1/*落子键*/

#define

KEYMOVECURSOR

2/*光标移动键*/

#define

KEYINVALID

3/*无效键*/

/*定义符号常量:

真,假

---

真为1,假为0/

#define

TRUE

1

#define

FALSE

0

/**********************************************************/

/*定义数据结构/

/*棋盘交叉点坐标的数据结构*/

struct

point

{

int

x,y;

};

/**********************************************************/

/*自定义函数原型说明/

void

Init(void);

int

GetKey(void);

int

CheckKey(int

press);

int

ChangeOrder(void);

int

ChessGo(int

Order,struct

point

Cursor);

void

DoError(void);

void

DoOK(void);

void

DoWin(int

Order);

void

MoveCursor(int

Order,int

press);

void

DrawCross(int

x,int

y);

void

DrawMap(void);

int

JudgeWin(int

Order,struct

point

Cursor);

int

JudgeWinLine(int

Order,struct

point

Cursor,int

direction);

void

ShowOrderMsg(int

Order);

void

EndGame(void);

/**********************************************************/

/**********************************************************/

/*

定义全局变量/

int

gPlayOrder;

/*指示当前行棋方/

struct

point

gCursor;

/*光标在棋盘上的位置/

char

gChessBoard[19][19];/*用于记录棋盘上各点的状态*/

/**********************************************************/

/**********************************************************/

/*主函数*/

void

main()

{

int

press;

int

bOutWhile=FALSE;/*退出循环标志*/

Init();/*初始化图象,数据*/

while(1)

{

press=GetKey();/*获取用户的按键值*/

switch(CheckKey(press))/*判断按键类别*/

{

/*是退出键*/

case

KEYEXIT:

clrscr();/*清屏*/

bOutWhile

=

TRUE;

break;

/*是落子键*/

case

KEYFALLCHESS:

if(ChessGo(gPlayOrder,gCursor)==FALSE)/*走棋*/

DoError();/*落子错误*/

else

{

DoOK();/*落子正确*/

/*如果当前行棋方赢棋*/

if(JudgeWin(gPlayOrder,gCursor)==TRUE)

{

DoWin(gPlayOrder);

bOutWhile

=

TRUE;/*退出循环标志置为真*/

}

/*否则*/

else

/*交换行棋方*/

ChangeOrder();

}

break;

/*是光标移动键*/

case

KEYMOVECURSOR:

MoveCursor(gPlayOrder,press);

break;

/*是无效键*/

case

KEYINVALID:

break;

}

if(bOutWhile==TRUE)

break;

}

/*游戏结束*/

EndGame();

}

/**********************************************************/

/*界面初始化,数据初始化*/

void

Init(void)

{

int

i,j;

charMsg[]=

{

“Player1

key:“,“UP----w“,“DOWN--s“,“LEFT--a“,“RIGHT-d“,“DO----space“,““,“Player2

key:“,“UP----up“,“DOWN--down“,“LEFT--left“,“RIGHT-right“,“DO----ENTER“,““,“exit

game:“,“ESC“,NULL,};

/*先手方为1号玩家*/

gPlayOrder

=

CHESS1;

/*棋盘数据清零,即棋盘上各点开始的时候都没有棋子*/

for(i=0;i/“);

getch();

}

/*走棋*/

int

ChessGo(int

Order,struct

point

Cursor)

{

/*判断交叉点上有无棋子*/

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;

return

TRUE;

}

else

return

FALSE;

}

/*判断当前行棋方落子后是否赢棋*/

int

JudgeWin(int

Order,struct

point

Cursor)

{

int

i;

for(i=0;i=0

}

else

count=0;

}

pos.x+=dpos.x;

pos.y+=dpos.y;

}

return

FALSE;

}

/*移动光标*/

void

MoveCursor(int

Order,int

press)

{

switch(press)

{

case

PLAY1UP:

if(Order==CHESS1

break;

case

PLAY1DOWN:

if(Order==CHESS1

break;

case

PLAY1RIGHT:

if(Order==CHESS1

break;

case

PLAY2DOWN:

if(Order==CHESS2

break;

case

PLAY2RIGHT:

if(Order==CHESS2

break;

}

gotoxy(gCursor.x+MAPXOFT,gCursor.y+MAPYOFT);

}

/*游戏结束处理*/

void

EndGame(void)

{

textmode(C80);

}

/*显示当前行棋方*/

void

ShowOrderMsg(int

Order)

{

gotoxy(6,MAPYOFT+20);

textcolor(LIGHTRED);

if(Order==CHESS1)

cputs(“Player1

go!“);

else

cputs(“Player2

go!“);

gotoxy(gCursor.x+MAPXOFT,gCursor.y+MAPYOFT);

}

/*落子正确处理*/

void

DoOK(void)

{

sound(500);

delay(70);

sound(600);

delay(50);

sound(1000);

delay(100);

nosound();

}

/*检查用户的按键类别*/

int

CheckKey(int

press)

{

if(press==ESCAPE)

return

KEYEXIT;/*是退出键*/

else

if

(

(

press==PLAY1DO

/*是落子键*/

else

if

(

press==PLAY1UP

||

press==PLAY1DOWN

||

press==PLAY1LEFT

||

press==PLAY1RIGHT

||

press==PLAY2UP

||

press==PLAY2DOWN

||

press==PLAY2LEFT

||

press==PLAY2RIGHT

)

return

KEYMOVECURSOR;/*是光标移动键*/

else

return

KEYINVALID;/*按键无效*/

}

满园春色 2022-06-24 22:46:12

相关推荐

蚍蜉撼树是什么意思蚍(蚍蜉撼树是什么意思)

1、蜉蝣树(拼音pfhnsh)是中国成语,蜉蝣树(蜉蝣:一种大蚂蚁;Shake:摇动)比喻力量本来就很弱,但是你想摇动一个很强大的东西,就不能随心所欲了。这个成语一般用作主语、谓语、宾语,属于主谓式,含有贬义。...
展开详情

得意洋洋,反义词(得意洋洋的反义词)

1、得意洋洋的反义词有郁郁寡欢的,有空虚进取的书,有哭天抢地的,有郁郁寡欢的,有失意的,有垂头丧气的,有谦虚谨慎的,有黯然销魂的,有抑郁的。2、“得意”是中国成语,读作:dyyngyng,解释为:得意:明白意图...
展开详情

士大夫怎么读(士大夫)

1、士大夫,在古代是指有官职的人,也指不当官的有名望的学者。2、在中国古代,官员和学者的统称。055-79000:“仆亦承传送门之业,受朝廷调教,使得冠带之端,在士大夫之列。”陈继儒,明朝《晋书夏侯湛传》:“立...
展开详情

福兮祸所伏祸兮福所倚什么意思(福兮祸所伏祸兮福所倚)

1、福兮祸所伏祸兮福所倚是俗语,意思是福祸相依,相互转化。比喻能有好结果,好事也能有坏结果。建议人在富贵时要谦虚谨慎,戒骄戒躁;踌躇满志,狂妄自大,却滋生灾难,由福转祸;逆境中坚持,努力,可以化逆境为顺境,从苦...
展开详情

回眸一笑是啥意思(回眸一笑什么意思)

1、回首微笑,拼音是humuy和ao,中国成语,意思是翻白眼,微笑。常用来形容女人妩媚的表情,诱惑人,引人入胜。出自唐白居易《长恨歌》。2、唐白居易《长恨歌》:“只要她转过头来笑一笑,就有一百个符咒在施,六宫的...
展开详情

精选推荐更多>

利用陀螺经纬仪可以测定什么方向

利用陀螺经纬仪可以测定真北方向,陀螺经纬仪是一种将陀螺仪和经纬仪集成在一起的测量仪器。它利用陀螺仪本身的物理特性及地球自转的影响,实现自动寻找真北方向,从而测定任意测站上任意方向的大地方位角。
陀螺经纬仪由陀螺仪和经纬仪两部分组成。经纬仪于1730年由英国人发明,经过金属经纬仪的漫长过程,20世纪20年代发展为光学经纬仪,60年代以来进入电子经纬仪阶段,现已相当先进,向着智能化方向发展。陀螺仪是陀螺经纬仪的主体,主导着整机的发展进程。
陀螺经纬仪按定向准确度可分为工程级和精密级。定向原理除了英美曾经用过的速度式外,一般都用摆式。陀螺仪和经纬仪整体使用,结合方式有下挂式和上架式两类。下挂式仪器是20世纪50年代发展起来的,几乎所有的精密级仪器和自动化程度较高的仪器均属此类。
陀螺经纬仪的使用方式与构造特点有关。一般上架式仪器都用人工测法,下挂式仪器多用自动测法。自动测法仪器主要采用自动跟踪法、多点光电计时法和光电积分法观测。其中,光电积分法最为先进。人工测法主要采用跟踪逆转点法、中天时间法、记时摆幅法和多点记时法观测。

罢了是什么意思

罢了,汉语词语,拼音是bà le,语气词,用在陈述句的末尾,有“仅此而已”的意味,对句子的意思起冲淡的作用,前面常跟“不过”、“无非”、“只是”等词呼应;表示容忍,有勉强放过、暂时不深究的意思。
出处:
1、元·关汉卿《金线池》第四折:“他委实不肯便罢了,教我怎生断理?”
2、明·高明《琵琶记·书馆悲逢》:“他把我嘲,难恕饶,你说与我知道,怎肯干休罢了?”
3、清·吴敬梓《儒林外史》第二十二回:“我不说你也罢了,你还问我这些话,这也可笑!”
4、刘大白《洪水》:“人也漂流去,倒也罢了;剩下这没饭吃没屋住的人们,是洪水底洪恩吗?”
5、明·施耐庵《水浒传》第二十三回:“只见枯草丛中钻出两只大虫来,武松道:‘阿呀!我今番罢了!’”
6、《儿女英雄传》第二回:“这可就罢了我了!慢说我没有这样的家当,便有,我也不肯这样做法。”
7、《西游补》第五回:“你四人回去罢了,千万替我谢声。”
8、明·凌濛初《二刻拍案惊奇》卷九:“凤官人还问我姐姐。你只打点迎亲罢了。”
9、《儒林外史》第十九回:“每日清早上是我弟媳妇出来屋后抱柴,你明日众人伏在那里,遇着就抢罢了。”
10、清·曹雪芹《红楼梦》第二十二回:谁又参禅,不过是一时的玩话儿罢了。
11、清·曹雪芹《红楼梦》第三十二回:“我也不过俗中又俗的一个俗人罢了。”
12、鲁迅《两地书·致许广平二》:“我相信写了出来,未必于你有用,但我也只能写出这些罢了。”
13、明·吴承恩《西游记》第二十三回:“哥哥,罢了!罢了!我们遇着鬼了!”
14、《儒林外史》第二十三回:“罢了!我上了这小畜生的当了!”
造句:
1、他不会真的打你,无非吓唬吓唬你罢了。
2、这不过是我的一点学习心得罢了。
3、他不愿意去也就罢了。
4、这道题很难吗?罢了。

搁浅的意思

搁浅,汉语词语,拼音为gē qiǎn,意思是船因水浅搁住不能动。也比喻事情遇到阻碍而中途停顿。
出自《儒林外史》第四十三回:“盐船搁浅了,我们快帮他去起拨!”
近义词:停止、停息、停留、中止、停顿、停滞。
反义词:沉没、漂浮、畅游。
用法:作动词,形容某件事暂时停顿。
例句:然而最可恶的是她现在要用的辞句,先生都没教过,英文读本上也找不到;她写了半行就搁浅了。
造句:
1、我开始意识到,那种至纯至美的欢乐已搁浅在童年,童年已变得十分遥远和亲切。
2、最远处那戈壁连绵起伏的沙梁,在夕晖尽染中,宛若被定格的金波荡漾的海面。晚风中摇曳的芦苇,就像没来得及起锚远航被搁浅在滩涂的帆影。
3、我倚在时光的寂深处,想象爱情恒远的缠绵。所有的故事,潋滟成文字里的幽怨,搁浅在无眠的夜里。行走在文字里的眷恋,染透了葱翠的思念,漫过记忆的潮岸,荡漾成午夜里一道寂寞的风景。

丰年好大雪 珍珠如土金如铁的意思

“丰年好大雪,珍珠如土金如铁”指当时金陵四大家族中的薛(谐音“雪”)家,家产丰厚,珍珠如土般堆成山,金银似铁到处都是。出自清·曹雪芹《红楼梦》:“贾不假,白玉为堂金作马。阿房宫,三百里,住不下金陵一个史。东海缺少白玉床,龙王来请金陵王。丰年好大雪,珍珠如土金如铁。”
《红楼梦》是中国古代章回体长篇小说,中国古典四大名著之一,通行本共120回,一般认为前80回是清代作家曹雪芹所著,后40回是清代作家高鹗所补。小说以贾、史、王、薛四大家族的兴衰为背景,以富贵公子贾宝玉为视角,以贾宝玉与林黛玉、薛宝钗的爱情婚姻悲剧为主线,描绘了一批举止见识出于须眉之上的闺阁佳人的人生百态,展现了真正的人性美和悲剧美,可以说是一部从各个角度展现女性美以及中国古代社会世态百相的史诗性著作。
《红楼梦》版本有120回“程本”和80回“脂本”两大系统。程本为程伟元排印的印刷本,脂本为脂砚斋在不同时期抄评的早期手抄本。脂本是程本的底本。
《红楼梦》是一部具有世界影响力的人情小说,中国封建社会的百科全书,传统文化的集大成者。小说作者以“大旨谈情,实录其事”自勉,只按自己的事体情理,按迹循踪,摆脱旧套,新鲜别致,取得了非凡的艺术成就。“真事隐去,假语村言”的特殊笔法更是令后世读者脑洞大开,揣测之说久而遂多。二十世纪以来,《红楼梦》更以其异常出色的艺术成就和丰富深刻的思想底蕴使学术界产生了以为研究对象的专门学问——红学。
常见热点问答
热点搜索
1-20
21-40
41-60
61-80
81-100
101-120
121-140
141-160
161-180
181-200
作文大全
1-20
21-40
41-60
61-80
81-100
101-120
121-140
141-160
161-180
181-200