C语言吃金豆游戏程序设计实验报告(3)

2019-03-22 11:22

092213112 刘泽中

3.6.5 退出程序流程图 (略)

4.程序详细分析

4.1 部分函数功能描述

4.1.1 void init();/*用于图形模式初始化*/

4.1.2 void initPacman(Face *face,int r,int c,int size,int x0,int y0)

/*pacman的一些初始值设置(坐标,初始位置,大小等)*/

4.1.3 void initMonster(Monster *monster,int x,int y,enum Direction dir)

/*Monster的一些初始设置(坐标,运动方向)*/

4.1.4 void drawBlock(int i,int j)/*用于画整个地图盘面*/ 4.1.5 void drawBall(int i,int j)/*用于画地图上的金豆*/ 4.1.6 void drawWall(int i,int j) /*画地图中的墙*/

4.1.7 void drawGame()/*调用上面三个函数,完成整个地图的绘制*/ 4.1.8 void drawPacman(Face *face)/*画主角Pacman*/

4.1.9 void drawmonster(int i,int j,int color)/*画第二男主角Monster*/ 4.1.10 void delays()/*设置延时,用于处理动画效果,易修改*/ 4.1.11 void drawCaidan()/*用于绘画选择关卡里面的提示菜单界面*/ 4.1.12 void moveFace(Face *face)/*移动第一男主角Pacman*/

4.1.13 void moveMonster(Monster *monster)/*移动第二男主角Monster*/ 4.1.14 void clearFace(int i,int j)/*清除第一男主角Pacman的图案*/ 4.1.15 void clearMonster(int i,int j) /*清除第二男主角Monster的图案*/ 4.1.16 void changeDir(Face *face,enum Direction dir)/*调整Pacman运动方向*/ 4.1.17 void srandMonster(Monster *monster)/*为Monster随机产生一个方向*/ 4.1.18 void Win()/*显示赢了的画面并输出分数*/ 4.1.19 void gameOver()/*显示输了的画面并输出分数*/ 4.1.20 void DoError()/*输了的声音*/ 4.1.21 void DoWin()/*赢了的声音*/

4.1.22 void DoOK()/*第一男主角Pacman改变一次方向的声音*/ 4.1.23 void gamePlay()/*整个游戏的主要核心函数*/ 4.1.24 void showLevel()/*在屏幕上输出第几关的函数*/

常熟理工学院

4.1.25 void loadLevel()/*读取相应等级的地图函数*/

4.1.26 void Help()/*选择关卡里面F8键对应产生的帮助信息*/ 4.1.27 void softHighscore()/*排行榜的显示*/ 4.1.28 void chooseKard()/*选择关卡主界面*/

4.1.29 void showMenu()/*程序运行开始前显示五彩的游戏名称Pacman*/ 4.1.30 void Menu()/*游戏的主菜单*/

4.1.31 int main()/*主函数用于调用init及Menu来实现整个程序的运转*/

4.2 结构体的定义

4.2.1 Pacman的定义: typedef struct{

int r,c;

int startX,startY; int isLive;

enum Direction dir;

}Face;/*定义Pacman,成员包括坐标,起始位置,死活的标志以及运动方向*/ 4.2.2 Monster的定义: typedef struct{ int x; int y;

enum Direction dir;

}Monster; /*定义Monster,成员包括坐标,运动方向*/

4.3部分函数源码分析

4.3.1 图形模式初始化函数

void init(){ int gdriver,gmode; gdriver=DETECT;

initgraph(&gdriver,&gmode,\ cleardevice();/*清屏*/ }

4.3.2 文件的读取函数

void loadFile(){

092213112 刘泽中

FILE *fp; int i,k=0,m=0;

if((fp=fopen(\判断文件是否能打开*/

printf(\ exit(1);

}

for(i=0;i<8;i++){/*格式化读取函数*/

fscanf(fp,\ }

fclose(fp);/*关闭文件*/ }

4.3.3 对文件内的信息进行排序

void sortHighscore(){/*运用选择法进行排序*/ int i,k,j; int temp; char temp2[20]; for(i=0;i<9;i++){ k=i;

for(j=i+1;j<9;j++)

if(highScorescore[j]>highScorescore[k]) k=j;

temp=highScorescore[k];/*拷贝分数到中间变量*/

strcpy(temp2,highScorename[k]); /*拷贝姓名到中间变量*/ highScorescore[k]=highScorescore[i]; strcpy(highScorename[k],highScorename[i]); highScorescore[i]=temp; strcpy(highScorename[i],temp2); }

saveHighscore();/*调用saveHighscore()函数将排好序的函数写入文件*/

}

4.3.4 画地图界面函数 void drawGame(){

常熟理工学院

int i,j,size;

till=0;/*用于计算地图中金豆的总个数*/ for(i=0;i<10;i++)

for(j=0;j<10;j++)

str2[i][j]=str[i][j];/*拷贝地图用于gamePlay里面的判断*/ for(i=0;i<10;i++)

for(j=0;j<10;j++)

if(str[i][j]==0)/*如果是0就是路,否则就是墙*/

drawBlock(i,j);/*画路*/ else drawWall(i,j);/*画墙*/

size=imagesize(ORGX+1*W,ORGY+1*H,ORGX+1*W+W-1,ORGY+1*H+H-1); buff=(void*)malloc(size); /*计算缓存大小,把格子存入缓存区用于清除*/

getimage(ORGX+1*W,ORGY+1*H,ORGX+1*W+W-1,ORGY+1*H+H-1,buff); for(i=0;i<10;i++)

}

4.3.5 画第一男主角Pacman

void drawPacman(Face *face){ int x0,y0;

x0=ORGX+face->c*W+W/2;/*计算男主角的中心坐标*/

y0=ORGY+face->r*W+W/2; setfillstyle(1,RED); setcolor(RED);

if(face->dir==RIGHT){ /*默认方向右*/

clearFace(face->r,face->c); /*擦除Pacman*/

pieslice(x0,y0,30,330,12); /*画扇形*/

pieslice(x0,y0,0,360,12);/*画圆,制作动画效果*/ delays(); /*延时,制作动画效果*/ }else{

for(j=0;j<10;j++) }

if(str[i][j]==0){/*如果是路的话*/

drawBall(i,j);/*画金豆*/ till++;/*金豆的总个数加1*/

092213112 刘泽中

setcolor(RED);

circle(x0,y0,12); /*画圆*/ floodfill(x0,y0,RED); /*填充红色*/ setfillstyle(1,WHITE); setcolor(WHITE);

delays(); /*延时*/

switch(face->dir){ case UP: /*上*/

pieslice(x0,y0,60,120,12);break; pieslice(x0,y0,240,300,12);break;

pieslice(x0,y0,150,210,12);break;

case DOWN: /*下*/ case LEFT: /*左*/ } }

}

4.3.6 Pacman的移动(Monster移动与之相仿,故略)

void moveFace(Face *face){

switch(face->dir){/*if语句用来判断是否为墙*/ }

4.3.7 Pacman的清除(Monster清除与之相仿,故略)

void clearFace(int i,int j){/*将存入缓存的那一块图取出来覆盖*/ putimage(ORGX+j*W,ORGY+i*H,buff,COPY_PUT);

}

4.3.8 随机产生怪物方向的函数

case UP:if(str[face->r-1][face->c]==0) face->r--;break; case DOWN:if(str[face->r+1][face->c]==0) face->r++;break; case LEFT:if(str[face->r][face->c-1]==0) face->c--;break; case RIGHT:if(str[face->r][face->c+1]==0) face->c++;break;

}


C语言吃金豆游戏程序设计实验报告(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:青岛版科学五年级下册教学计划

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: