暑期软件公司社会实践报告—实习报告.doc
暑期软件公司社会实践报告 —实习报告 2008 年 7 月 2日至 7 月 26 日,我来到了长沙热情科技软件公司进行了二十多天的社会实践。这些日子,是我人生中的一次难忘经历,这二十多天里,我接解了社会,懂得了工作间的乐趣和人际交往的复杂。这期间我用 C 语言独立开发了一款推箱子游戏,并得到了同事的好评,下面做个汇报: C 语言程序设计推箱子游戏 #include"stdio.h" #include"bios.h" #define LEFT 75 #define RIGHT 77 #define UPPER 72 #define DOWN 80 #define ESC 27 struct Boxss /*定义箱子结构体 ,其中包含坐标属性 */ { int x,y; }; union keyboard /*定义读取键盘码的共用体类型 */ { unsigned int iKeyInfo; char chKeyBit[2]; }; int fnGetKey(void) /*定义读取键盘码的函数 */ { union keyboard uniKey1; /*定义读取键盘码的共用体变量 */ while(bioskey(1)==0); /*检测用户是否按键 */ uniKey1.iKeyInfo=bioskey(0); /*读取按键信息 */ return(uniKey1.chKeyBit[0]==0?uniKey1.chKeyBit[1]:uniKey1.chKeyBit[0]); /*返回ASCII 码或扩充码 */ } void main() { int iKey,x=11,y=6,tx=11,ty=6; /*x,y 为人物移动后坐标 ,tx,ty 为人物移动前坐标*/ struct Boxss Box[4]; /*定义箱子数量 */ int chMap[10][10]={ /*用二维数组定义地图 */ {0,0,0,0,0,0,0,0,0,0}, /*0 表示墙 1 表示路 2表示目标 */ {0,1,0,0,0,0,1,1,1,0}, {0,1,0,2,0,0,1,0,1,0}, {0,1,0,1,0,0,1,0,1,0}, {0,1,1,1,0,0,1,0,1,0}, {0,1,0,0,0,0,1,0,1,0}, {0,1,1,1,1,1,1,0,1,0}, {0,1,0,1,0,0,0,0,2,0}, {0,2,0,1,1,1,1,2,0,0}, {0,0,0,0,0,0,0,0,0,0}, }; int i,j; Box[0].x=13; /*定义箱子的坐标属性 */ Box[1].x=11; Box[2].x=14; Box[3].x=18; Box[0].y=8; Box[1].y=7; Box[2].y=13; Box[3].y=7; while(1) /*反复进行求移动的坐标运算 */ { for(i=0;i<10;i++) /*输出新地 图 (刷新地图 )*/ { gotoxy(10,5+i); for(j=0;j<10;j++) { if(chMap[i][j]==0) printf("#"); if(chMap[i][j]==1) printf(" "); if(chMap[i][j]==2) printf("X"); } } j=0; /*判断是否所有箱子都在目标坐标上 */ for(i=0;i<4;i++) if(chMap[Box[i].y-5][Box[i].x-10]==2) j++; if(j==4) /*如果所有箱子都就位输出 "YOU WIN!"退出 */ { clrscr(); printf("You Win!"); break; } for(i=0;i<4;i++) /*在起始 (或移动后 )的坐标输出箱子 */ { gotoxy(Box[i].x,Box[i].y); printf("0"); } gotoxy(x,y); /*在起始 (或移动后 )的坐标输出人 */ printf("*\b"); tx=x; /*记录本次移动前的坐标 */ ty=y; iKey=fnGetKey(); if(iKey==LEFT&&chMap[y-5][x-1-10]!=0) /*按读取的按键信息改变坐标如果改变的坐标和墙 (0)重合则不改变 */ x--; if(iKey==RIGHT&&chMap[y-5][x+1-10]!=0) x++; if(iKey==UPPER&&chMap[y-1-5][x-10]!=0) y--; if(iKey==DOWN&&chMap[y+1-5][x-10]!=0) y++; /*输入 ESC 退出并输出 "YOU LOST"*/ if(iKey==ESC) { clrscr(); printf("You Lost"); break; } for(i=0;i<4;i++) /*如果移动后的人的坐标与箱子坐标重合 ,则改变箱子坐标向前一格 */ if(Box[i].x==x&&Box[i].y==y) { Box[i].x+=(x-tx); Box[i].y+=(y-ty); if(chMap[Box[i].y-5][Box[i].x-10]==0) /*如果移动后的箱子坐标会出现在墙上 ,则使箱子坐标和人坐标都返回移动前的值 */ { Box[i].x-=(x-tx); Box[i].y-=(y-ty); x=tx; y=ty; } break; } clrscr(); } getch(); }