程序设计说明书

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

程序设计说明书
------游戏迷宫一、程序设计思想:
此程序是一款为年轻人设计的脑筋游戏,它可以按照我们的意愿在屏幕上自如地移动,是人工智能领域中的经典问题。

利用计算机强大的计算机能力和庞大的存储空间可以采用讨论问题每一步走法,并存储形成的状态。

当某一走法不可能达到目标时,可以回溯到并选择另一种走法。

采用这种方法可以节省编程者的劳动。

对于简单的问题能够轻松得到答案。

但是在此处,由于求胜过程中出现的中间状态实在太多,在通常使用微机上仍可能出现内存不足的问题,这就迫使要考虑让计算机多一点逻辑上的选择判断消除大量不必要的中间状态,尽量达到要求,也就是采用人工智能的方法来解决问题。

二、程序
1.#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <conio.h>
#include <graphics.h>
2.main()
{
int a[32][22];
char o;
int c,d,four,k=0,end,step;
int j[500][3];
int x=0,y,i,gd=9,gm=2;
3.initgraph(&gd,&gm,"");
for(i=0;i<500;i++)
{
j[i][0]=random(670);
j[i][1]=random(480);
j[i][2]=1;
}
for(i=0;i<100;i++)
{
circle(j[i][0],j[i][1],2);
setfillstyle(1,15);
floodfill(j[i][0],j[i][1],15);
}
for(i=100;i<300;i++)
{
circle(j[i][0],j[i][1],1);
setfillstyle(1,15);
floodfill(j[i][0],j[i][1],15);
}
for(i=300;i<500;i++)
putpixel(j[i][0],j[i][1],15);
while(!bioskey(1))
{
x=(x==8)?1:++x;
for(i=0;i<100;i++)
{
y=random(9)+1;
setcolor(0);
circle(j[i][0],j[i][1]+(j[i][2]-1)*3,2); setfillstyle(1,0);
floodfill(j[i][0],j[i][1]+(j[i][2]-1)*3,0); if(y%2==0)
{
if(j[i][0]-3>=0)
j[i][0]-=3;
}
else
{
if(j[i][0]+3<=480)
j[i][0]+=3;
}
setcolor(15);
circle(j[i][0],j[i][1]+j[i][2]*3,2);
setfillstyle(1,15);
floodfill(j[i][0],j[i][1]+j[i][2]*3,15); delay(50);
j[i][2]++;
if(j[i][1]+j[i][2]*3>=480)
{
setcolor(0);
circle(j[i][0],j[i][1]+(j[i][2]-1)*3,2); setfillstyle(1,0);
floodfill(j[i][0],j[i][1]+(j[i][2]-1)*3,0); j[i][0]=random(670);
j[i][1]=0;
j[i][2]=1;
}
}
if(x%2==0)
{
for(i=100;i<300;i++)
{
y=random(9)+1;
setcolor(0);
circle(j[i][0],j[i][1]+(j[i][2]-1)*3,1); setfillstyle(1,0);
floodfill(j[i][0],j[i][1]+(j[i][2]-1)*3,0); if(y%2==0)
{
if(j[i][0]-3>=0)
j[i][0]-=3;
}
else
{
if(j[i][0]+3<=480)
j[i][0]+=3;
}
setcolor(15);
circle(j[i][0],j[i][1]+j[i][2]*3,1); setfillstyle(1,15);
floodfill(j[i][0],j[i][1]+j[i][2]*3,15); delay(50);
j[i][2]++;
if(j[i][1]+j[i][2]*3>=480)
{
setcolor(0);
circle(j[i][0],j[i][1]+(j[i][2]-1)*3,1); setfillstyle(1,0);
floodfill(j[i][0],j[i][1]+(j[i][2]-1)*3,0); j[i][0]=random(670);
j[i][1]=0;
j[i][2]=1;
}
}
}
if(x%4==0)
{
for(i=300;i<500;i++)
{
putpixel(j[i][0],j[i][1]+(j[i][2]-1)*3,0); putpixel(j[i][0],j[i][1]+j[i][2]*3,15); delay(50);
j[i][2]++;
if(j[i][1]+j[i][2]*3>=480)
{
putpixel(j[i][0],j[i][1]+(j[i][2]-1)*3,0);
j[i][0]=random(670);
j[i][1]=0;
j[i][2]=1;
}
}
}
}
4.cleardevice();
settextstyle(3,0,5);
5.setcolor(4);
outtextxy(50,100,"Welcome to game park !"); 6.getch();
getch();
closegraph();
randomize();
7.printf("\nDo you want it run or step?(0/1)");
scanf("%d",&step);
clrscr();
for(x=0;x < 32;x++){
for (y=0;y < 22;y++){
if ((y==0)||(x==0)||(x==21)||(y==21)) {
a[x][y]=11;
continue;}
if (random(3)==0) {
a[x][y]=11;
gotoxy(x,y);
printf("\200");
}
else
a[x][y]=1;
}
}
for(y=1;y < 10;y++)
{ a[1][y]=1;
gotoxy(1,y);
printf(" ");
a[20][21-y]=1;
gotoxy(20,21-y);
printf(" ");
}
x=1;
y=1;
end=0;
8.gotoxy(1, 23);
printf("Step?(1/0) ");scanf("%d", &step);
if(step==1)
{
9. gotoxy(45,10);
printf("The little mouse is coming!");
}
10. while((x < 20)||(y < 20)) {
c=x;d=y;four=0;
do{
k++;
if
((a[x+1][y]==1)||((a[x+1][y]%7==0)&&(a[x][y]%2!=0)&&(four==1))) {
a[x][y]=a[x][y]*2;
x=x+1;
break;
}
if
((a[x][y+1]==1)||((a[x][y+1]%5==0)&&(a[x][y]%3!=0)&&(four==1
)))
{
a[x][y]=a[x][y]*3;
y=y+1;
break;
}
if
((a[x][y-1]==1)||((a[x][y-1]%3==0)&&(a[x][y]%5!=0)&&(four==1)) )
{
a[x][y]=a[x][y]*5;
y=y-1;
break;}
if
((a[x-1][y]==1)||((a[x-1][y]%2==0)&&(a[x][y]%7!=0)&&(four==1)) )
{a[x][y]=a[x][y]*7;
x=x-1;
break;
}
four++;
if (four == 2){
gotoxy(25, 23); printf("Cannot go out!");
end=1;
break;}
11.if (k>150) {
gotoxy(30,23); printf("Too long!");
end=1;
break;}
}while(1);
if (end==1) break;
/* gotoxy(x,y);printf("*");*/
gotoxy(c,d);printf("-");
gotoxy(16, 23); printf("step:%d ", k);
gotoxy(x,y); printf("*");
if (step==1) getch();
}/* no end point*/
12.if (end==1) printf("Error.");
else
{
initgraph(&gd,&gm,"");
settextstyle(3,0,9);
y=0;
while(!bioskey(1))
{
y=(y==15)?0:++y;
setcolor(y);
outtextxy(100,100,"You Win !");
}
closegraph();
}
}/*end main()*/
三、程序部分说明解释:
1.图形函数均在头文件“graphics.h”中定义,所以在程序中要调用这
些图形函数时,在程序的开头必须对头文件包含(include)进行说明。

#include<graphics.h>同时,在编写图形程序之前,必须把屏幕显示适配器
初始化为图形方式。

图形方式的初始化使用显示模式控制函数init-graph()
2.gdriver是一个整型值,表示要装入的图形的驱动程序。

3.gmode是一个整型值,表示图形显示模式,不同的图形驱动程序有不同
的图形显示模式,同一图形驱动程序,也会具有几种图形显示模式。

4.leardevice清除屏幕使用函数。

5. colsegraph()关闭图形系统,释放所有内存,恢复屏幕为调用initgraph
之前的文本显示模式。

6、当setcolour(c)前画颜色设置为参数为c 所指定的颜色。

7、定义组数设定图形介面大小运用initgraph ( & gdriver , & gmode ,
“ ”)进行图像的调用。

并在图像的(50,100)位置输入"welcome to
game park!"。

8、getch()是暂停程序。

9、system("cls"),cleardevice() 为清屏程序。

10.setcolor(4)为把图形设置为红色。

11.settextstyle(TRIPLEX_FONT,HORIZ_DIR,5)是设置字体,水
平输出,及把字体放大5倍。

12.当FOUR=0时执行循环语句.
13.屏幕显示有do you want ren or step?(0/1)玩者就可以选择。

14.选择迷宫由机器自由决定。

15.Do you step ?(0/1)机动?还是手动?
16.玩者一但做出选择,屏幕上就会显示the little mouse is coming !
17当four=0时,程序执行循环体部分。

18.如果four=2,显示can not out ! 如果k>150就显示too long!
19.小松鼠用*来表示,它走过的路线用--来表示.
20.游戏路线不可以重复,先看看左面是不是墙?再看看右面是不是墙?每走
一步都会用—做下纪录,并用SETP计数,当SETP超过150即退出程序!
21.如果在150步之内走出迷宫,即算赢!
22.屏幕便显示YOUWIN!
四、调试过程中容易出现的错误:
在主程序中,定义一个二维数组,并赋了初值。

之后就进入子程序中,在子程序中,首先开启图形工作模式,定义好前景,背景以及填充图等有关设置,在FOR()循环体中,程序中出现了死循环。

因为循环体内的什本身并未发生变化。

应注意,我们操作并不会改变该操作数本身的数值。

五、作品缺点:
游戏在思考过程中欠缺成熟,没有色彩感,有些简单,今后在学习中应多补充知识在以后的设计作品中,注意一些设计程序,在考虑全面些,把游戏操作过程设计得再灵活丰富一些。

六、程序流程图:
1.开启动画介面
2.WELCOMETOGAME PARK!
3.进入迷宫
4.选择机动还是手动
5.如果走出迷宫即显示YOU WIN!
6.。

相关文档
最新文档