收藏 分享(赏)

C大型程序设计综合实验结题报告(1)new.docx

上传人:dzzj200808 文档编号:2606526 上传时间:2018-09-23 格式:DOCX 页数:20 大小:24.74KB
下载 相关 举报
C大型程序设计综合实验结题报告(1)new.docx_第1页
第1页 / 共20页
C大型程序设计综合实验结题报告(1)new.docx_第2页
第2页 / 共20页
C大型程序设计综合实验结题报告(1)new.docx_第3页
第3页 / 共20页
C大型程序设计综合实验结题报告(1)new.docx_第4页
第4页 / 共20页
C大型程序设计综合实验结题报告(1)new.docx_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、C 大型程序设计综合实验结题报告选题名称:我的泡泡堂(Crazy Arcade)小组成员:黄泽浩 (吕红兵)18768113732 (510577)戴伟杰 (吕红兵)18768115659 (519873)薛睿 (吕红兵)18768119075 (531399)蔡灏旻 (吕红兵)18768114013 (511409)任课教师:吕红兵编程起止时间:2011 年 4 月-6 月C 大型程序设计综合实验总结报告一、 系统功能说明Crazy Arcade 是我们小组对泡泡堂这款游戏进行充分了解之后进行编程形成的一个小游戏。游戏可以一机双人操作,控制简便,只要使用指定键或方向键控制方向,再加上一个空格

2、键或 Enter 键放置泡泡,只需几个简单的按键就可以进行游戏了。游戏进入初始界面以后,玩家可以按任意键进入游戏界面。在游戏界面上,根据屏幕上的提示进行游戏。玩家 1 将键盘上的 A、S、D、W 键作为方向键,Space 键作为扔炸弹的按键,玩家 2 用键盘上的方向键来调整游戏中小人的位置,用 Enter来扔炸弹。两个玩家可以同时进行操作,相互之间无影响。当玩家被自己或者对方扔的炸弹炸到以后,将变成空心的形状,并会保持一段时间无法移动。如果在这段时间内,另一个玩家移动到了它所在的位置,即可以看作将它“吃掉了” ,那么另一个玩家即获胜。屏幕上将显示该玩家获胜的信息,并问是否继续游戏。玩家可以根据

3、自己需要选择 yes 或 no。如果玩家想中途退出,可以根据屏幕上的提示,按 Esc 键退出,结束游戏。二、 程序介绍1、 程序结构说明首先,在屏幕上绘制一个游戏初始界面,介绍游戏名称“泡泡堂” ,并引导玩家按任意键进入游戏界面。/*游戏开头显示的字符*/char name826 =“ O O O O “,“ O OOOOOO O OOOOOO“,“ OOO O OOO O“,“ O O O O O O O O“,“ O OOO O O OOO O“,“ O OO O OO“,“ O O O O O O“,“O OOOOOO O OOOOOO“;int Name_X = 26;int Name

4、_Y = 8;void DrawBegin()int x, y;for (y=0; y 10)switch (i)case 11:case 12: mapyx = O;gotoxy(x+15, y+6);textcolor(YELLOW);putch(o);break;case 13:case 14:mapyx = -;gotoxy(x+15, y+6);textcolor(YELLOW);putch(18);break;default:break;else mapyx = ;gotoxy(x+15, y+6);putch( );当其中一个玩家被自己或对方所放的炸弹炸到变成空心人以后,在它回复

5、为正常实心人之前,如果另一个玩家的小人移动到它的位置,那么另一个玩家就宣告胜利了。if (m-x = p-x printf(“Play%d Win!“, m-which);return 0;2、 重要数据说明首先,定义了大量的宏:#define TIME_DELAY 3/* 人物移动的延时*/#define WIN_DELAY 18#define MAXQSIZE 100#define PAO_TIME 50 /*放泡泡后,等待泡泡爆炸的时间*/#define BLAST_TIME 10 /*爆炸消失的时间*/#define PAOMAN_DELAY 60 /* 人被炸后恢复需要的时间 */*

6、 键盘中断函数(借用一个 TC 做的 CS 游戏中的) */#define KEY_Y 0x15#define KEY_A 0x1E#define KEY_D 0x20#define KEY_S 0x1f#define KEY_W 0x11#define KEY_ESC 0x01#define KEY_ENTER 0x1c#define KEY_SPACE 0x39#define KEY_UP 0x48#define KEY_LEFT 0x4b#define KEY_RIGHT 0x4d#define KEY_DOWN 0x50#define PLAY1UP KEY_W#define PLAY

7、1LEFT KEY_A#define PLAY1DOWN KEY_S#define PLAY1RIGHT KEY_D#define PLAY1FIRE KEY_SPACE#define PLAY2UP KEY_UP#define PLAY2DOWN KEY_DOWN#define PLAY2LEFT KEY_LEFT#define PLAY2RIGHT KEY_RIGHT#define PLAY2FIRE KEY_ENTER然后,主函数进行大体规划:/*显示游戏开始画面*/DrawBegin();/*开始游戏,先画地图*/DrawMap();/*画出两个人来*/DrawMan(play1);D

8、rawMan(play2);/*初始化泡泡队列和爆炸队列*/InitalQueue(InitalQueue(InstallKeyboard();iOldTime = clock();其中,链表起到了重要作用。/*以下为链表队列*/typedef PAO QElemType;typedef struct QNodeQElemType data;struct QNode *next;QNode, *QueuePtr;当然,结构数组也有重要应用。typedef enumPLAY1=1, PLAY2which_play;typedef enumCAN,CANNOTMOVE;typedef struct

9、int x, y; /*the position of the man */which_play which; /* play1 or play2?*/MOVE can_move; /* can man move? */int len; /*paopaos length*/int pao_num; /* how many pao can the man fire?*/int old_time; /* 人被泡泡炸后,恢复的时间 */man;3、 函数清单 键盘中断函数void InstallKeyboard(void) /*键盘中断程序*/int i;for(i=0;i128;i+)key_st

10、atei=key_pressedi=0;OldInt9Handler = getvect(9); /*中断向量值*/setvect(9,NewInt9); /*中断程序 NewInt9 地址存入指定的中断向量表中 INT 09H*/void ShutDownKeyboard(void)setvect(9,OldInt9Handler);void far interrupt NewInt9(void)unsigned char ScanCode,temp;ScanCode=inportb(0x60);temp=inportb(0x61);outportb(0x61,temp | 0x80);ou

11、tportb(0x61,temp if(ScanCodekey_stateScanCode=0;elsekey_stateScanCode=1;key_pressedScanCode=1;outportb(0x20,0x20);int GetKey(int ScanCode)int res;res=key_stateScanCode|key_pressedScanCode;key_pressedScanCode=0;return res; 画图函数/*画人函数*/DrawMan(man m)/*画空心的人的函数*/DrawPaoMan(man m)/*擦除人的函数*/EraseMan(man

12、m)/*画泡泡的函数*/DrawPao(int x, int y)/*画爆炸的#号的函数*/DrawBlast1(int x, int y)void DrawBegin()int x, y;for (y=0; yName_Y; +y)for(x=0; xName_X; +x)gotoxy(x+21, y+5);textcolor(LIGHTBLUE);putch(nameyx);gotoxy(19, 20);printf(“Press any key to Enter the game!“);/*画地图的函数*/void DrawMap()/*炸箱子后,出宝物的函数*/Treasure(int

13、 x, int y) 程序主干函数/*人物 m 向上移动的函数*/int MoveUp(man *m, man *p)/*人物 m 向下移动的函数*/int MoveDown(man *m, man *p)/*人物 m 向左移动的函数*/int MoveLeft(man *m, man *p)/*人物 m 向右移动的函数*/int MoveRight(man *m, man *p)/*放泡泡的函数*/void Paopao(man *m, LinkQueue *Q)/*泡泡爆炸的函数*/void PaoBlast(PAO pao, man *p1, man *p2, LinkQueue *Q,

14、 LinkQueue *B)/*擦除爆炸痕迹的函数*/void EraseBlast(PAO pao, man *p1, man *p2)/*初始化泡泡队列和爆炸队列*/InitalQueue(InitalQueue(InstallKeyboard();iOldTime = clock();/*循环一次就检查泡泡的爆炸时间到了没有*/iCurrentTime = clock();if (QueueHead(iOldTime = clock();/*如果按了 ESC 键或游戏结素,询问要不要重新开始*/if (END = 1)三、 程序设计难点及解决方法难点:【1】 链表;【2】 游戏主循环;【

15、3】 各个函数的关系;【4】 变量之间的关系;【5】 变量的类型;不足之处:(1) 游戏界面较简陋,画面基本上无观赏性;(2) 没有配乐,娱乐效果不佳。四、 开发过程首先是组队。四个人,三个班级,两种大类。然后是学习课本的内容,研究课本的案例。提出了各种方案,比如炸弹人(简化版泡泡堂) ,飞行棋,或者是星际大战之类的,但是经过大量的材料分析以及小实践,一致认为炸弹人(简化版泡泡堂)的可操作性以及趣味性最高。在授课结束后,便开始了程序的开发。首先是多泡泡堂游戏的规则进行分析,然后进行简化。保持了这个游戏的核心内容,即释放泡泡的数量和长度宽度随着玩家所收集的宝物的增多而增加和加强。而宝物就是箱子被

16、泡泡爆破之后出现的。基本上定下了目标。然后建立的讨论组以及各种联系方式。开发期间多次聚集在碧峰二舍的大厅讨论程序的进程。程序的开发,首先有明确的分工,但是由于大家都是零基础,学习又是各自分开的。所以到最后分工就不明确了,基本上是什么问题都一块儿解决,因为课本有点晦涩难懂。很多内容也是从未接触过的。所以一块讨论。查阅资料,还向多次老师,师兄师姐请教。有些内容虽然不是很理解,但是照着说明大概能够运行。最后把函数拼凑起来却无法运行,不知道原因。多次失败之后想换主题,最后进行删改,简化,去掉很多复杂的函数,得以运行,这便是游戏界面稍显简陋的原因。这次小组合作很愉快。学习到很多东西,不仅仅是程序设计,事实上现在还没办法自己一个人,不借助外界帮助独立完成程序编写。学习到的,是如何跟一群刚素未相识的人一块完成一个任务,如何使用各种工具来实现是自己的想方法。比如,我们想做游戏界面,查阅相关的资料,看懂例子,并自己尝试着编写,从失败吸取经验,还有就是,最后得以完成任务是的那种成就感胜利感。

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

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报