C语言设计拼图游戏Word格式.docx

上传人:b****6 文档编号:18981983 上传时间:2023-01-02 格式:DOCX 页数:19 大小:435.22KB
下载 相关 举报
C语言设计拼图游戏Word格式.docx_第1页
第1页 / 共19页
C语言设计拼图游戏Word格式.docx_第2页
第2页 / 共19页
C语言设计拼图游戏Word格式.docx_第3页
第3页 / 共19页
C语言设计拼图游戏Word格式.docx_第4页
第4页 / 共19页
C语言设计拼图游戏Word格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

C语言设计拼图游戏Word格式.docx

《C语言设计拼图游戏Word格式.docx》由会员分享,可在线阅读,更多相关《C语言设计拼图游戏Word格式.docx(19页珍藏版)》请在冰豆网上搜索。

C语言设计拼图游戏Word格式.docx

useoftheTCgraphicslibrary,randomnumbergeneration,andpositioningthecursor.

Keywords:

Clanguage;

Puzzle;

TurboC;

graphics

 

第一章绪论

1.1设计的功能

功能包括方向键控制方块移动、空格键重新开始、Esc键退出。

1.2游戏编程思想

1.2.1确定软件的功能

玩家可以通过按键上、下、左、右实现数字换位,并且有记录移动次数功能,直到把数字矩阵排列成为

123

456

78

即为胜利。

“space”重新开局或“Esc”退出游戏。

1.2.2定义软件的核心数据结构

全局变量puzz[9]为九宫格的10个数字;

方格的移动就是一次次的刷新屏幕,puzz[n]为0的方格,既不打印充填矩形,也不打印数字(九宫格总有一个个空缺,我用0来标记);

change(a,b)作用是交换puzz[9]数组元素的顺序,通过数组内元素的顺序变化来控制九宫格的打印情况。

1.2.3对整个软件进行功能模块化分

1.初始化:

首先显示欢迎屏幕,然后按任意键(Esc除外)进入游戏初始化界面,此时puzz[9]={1,2,3,4,5,6,7,8,0},屏幕宫格顺序排列。

2.进入游戏循环:

在初始化界面按任意键进入游戏循环,此时宫格被随机打乱;

这是可以按方向键控制方格移动;

无效按键做忽略处理(如果空格已在最底端,则按up键时无效)。

游戏是死循环,用while

(1)实现;

3.判断是否胜利:

游戏在循环中,每次执行一次按键操作,都会扫描一次当前数组是否与初始化时相符合,若相符,则游戏成功,在中间宫格上打印出一个红色五角星,上面打印文字“SUCCESSFUL!

!

”。

然后按任意键再次进入初始化界面,此时可以继续玩或者退出游戏。

1.2.4整个拼图游戏的功能介绍

1.初始化屏幕。

2.方向键控制宫格移动方向。

3.计数。

4.空格键复位游戏。

5.Esc键退出游戏。

第二章游戏的总体设计

2.1功能模块设计

本程序包括4个模块,分别是初始化模块、按键模块、交换模块和图形打印模块。

2.1.1系统模块图

2.1.2任务执行流程图

(N/A)

2.2数据结构设计

2.2.1设置全局变量

①定义puzz[9]一维数组,记录九宫格的数据变化。

②i初始化界面的提示语,j获取空格位置,k移动次数。

③space空缺位置

2.3函数功能描述

第三章拼图游戏的程序实现

3.1源码分析

3.1.1程序预处理

/*加载头文件*/

#include<

stdio.h>

stdlib.h>

conio.h>

time.h>

graphics.h>

/*定义全局变量*/

intpuzz[9];

//九格游戏数组

inti=0,j,k;

//i初始化界面的提示语,j获取空格位置,k移动次数

intspace;

//空缺位置

/*自定义函数原型*/

voidinterface()//界面,包括打印充填矩形和数字

voidchange(inta,intb)//交换

voidpress()//按键

voidstart()//初始化和判断是否胜利

屏幕默认分辨率640*480

3.1.2初始化模块

{

inta,b,c;

intstar[22]={300,120,320,160,360,160,320,200,340,240,300,200,260,240,280,200,240,160,280,160,300,120};

k=0;

for(a=0;

a<

8;

a++)

puzz[a]=a+1;

puzz[8]=0;

interface();

for(c=0;

c<

100;

c++)//随机打乱顺序

{

a=rand()%9;

b=(a+2)%8;

//关于有无解问题,搞不清楚,引用的

change(a,b);

}

while

(1)

interface();

for(a=0;

if(puzz[a]!

=a+1)

break;

if(a==8)

{

drawpoly(11,star);

//五角星

setcolor

(1);

//文本“SUCCESSFUL”颜色

setfillstyle(1,4);

//五角星填充色

floodfill(300,150,15);

//五角星内一点

outtextxy(260,180,"

SUCCESSFUL!

"

);

getch();

start();

}

for(j=0;

j<

=8;

j++)

if(puzz[j]==0)

space=j;

press();

}

3.1.3画图模块

clearviewport();

//清楚屏幕图形

setbkcolor(6);

//设置背景色

setfillstyle(2,2);

//矩形块颜色

if(puzz[0]!

=0)

bar(160,60,240,140);

if(puzz[1]!

bar(260,60,340,140);

if(puzz[2]!

bar(360,60,440,140);

if(puzz[3]!

bar(160,160,240,240);

if(puzz[4]!

bar(260,160,340,240);

if(puzz[5]!

bar(360,160,440,240);

if(puzz[6]!

bar(160,260,240,340);

if(puzz[7]!

bar(260,260,340,340);

if(puzz[8]!

bar(360,260,440,340);

gotoxy(25,7);

printf("

%d"

puzz[0]);

gotoxy(38,7);

puzz[1]);

gotoxy(50,7);

puzz[2]);

gotoxy(25,13);

puzz[3]);

gotoxy(38,13);

puzz[4]);

gotoxy(50,13);

puzz[5]);

gotoxy(25,19);

puzz[6]);

gotoxy(38,19);

puzz[7]);

gotoxy(50,19);

puzz[8]);

if(i==0)

\n\n\n\n\n\t\tPressanykeytodare"

getch();

gotoxy(60,4);

//打印移动次数

printf("

%dth"

k);

i+=1;

return;

3.1.5主函数

intmain()

{

intgdriver=VGA,gmode=VGAHI;

initgraph(&

gdriver,&

gmode,"

c:

\\tc30\\BGI"

srand((unsigned)time(NULL));

//播种子

clearviewport();

//清屏

printf("

\n\n\t\t\t/////////////////////////////\n"

\n"

\t\t\t\tPUZZLEGAME\n"

\t\t\t/////////////////////////////\n"

\n\n\n\n\n\n\tPressanykeytostartgame"

\n\n\tPressEsctoexit\n\n\t"

if(getch()==27)

clrscr();

\n\n\n\t\t\t//////////////////////////////////\n"

\n\t\t\t\tSeeyounexttime\n"

\n\t\t\t//////////////////////////////////\n"

\n\n\n\n\n\t\t\tPressanykeytoexit"

getch();

closegraph();

return0;

start();

return0;

}

3.2运行结果分析

3.2.1进入游戏界面

欢迎屏幕:

初始化界面:

随机打乱顺序:

移动过程中计数功能:

3.2.2游戏成功

第四章总结

本文介绍了一种用C语言编写九宫格拼图小游戏的方法。

其中用到了TurboC的图形库,画了一些简单几何图形,从而完成了可视化的小游戏界面。

作者论文格式仿照《XX文库.基于C语言推箱子游戏设计》[2];

设计程序参考《XX文库.最经典的C语言拼图小游戏源代码》[3]。

本文与参考资料的原理是完全不同的:

参考资料的界面用定位光标和打印特殊字符组成了非常简洁的界面;

由于作者对C尚不够深入,能力尚不强大,无法理解参考资料具体实现宫格移动的方法,所以作者最后决定采用调用图形库绘图的方法实现游戏界面。

作者从参考资料得到一个思路和引用一个算法:

思路是通过交换数组元素的位置来控制可视化界面的图形打印;

引用这个算法是为了解决随机打乱顺序后没有解的问题。

心得体会:

C语言已经结课,可是书本上讲的只是一些基础,关于光标定位和图形界面问题未曾涉及。

学完之后不免有困惑:

C语言还能干什么?

作者通过从网络上搜集的大量资料,加上自己的探索,终于做出了拼图游戏,这也证明了C语言可以制作小游戏!

遗憾:

关于随机交换出现无解情况的的问题,是个数学问题,网上介绍甚少,作者未能理解问题原因,所以直接引用了参考资料的一个算法解决此问题。

参考文献

[1]谭浩强.C程序设计(第三版)

[2]XX文库.基于C语言推箱子游戏设计

[3]XX文库.最经典的C语言拼图小游戏源代码

源代码:

intpuzz[9];

inti=0,j,k;

intspace;

voidinterface()//界面,包括打印充填矩形和数字

voidchange(inta,intb)//交换

intt;

t=puzz[a];

puzz[a]=puzz[b];

puzz[b]=t;

voidpress()//按键

voidstart();

charkey=0;

key=getch();

switch(key)

case80:

//上

if(space>

=3)

{

change(space,space-3);

k++;

}

break;

case72:

//下

if(space<

=5)

change(space,space+3);

case77:

//左

if(space%3!

change(space,space-1);

case75:

//右

=2)

change(space,space+1);

case32:

//空格键重新开始

i=0;

case27:

clrscr();

clearviewport();

printf("

closegraph();

exit

(1);

voidstart()//初始化和判断是否胜利

i=0;

setcolor(4);

//五角星边框

//五角星填充

floodfill(300,150,4);

//文本“SUCCESSFUL”

intmain()

\t\t\t\tPUZZLE

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

当前位置:首页 > 自然科学

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

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