贪吃蛇暑期实训总结报告.docx
《贪吃蛇暑期实训总结报告.docx》由会员分享,可在线阅读,更多相关《贪吃蛇暑期实训总结报告.docx(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、CHHilGSHU inSTiTUTE Dr TECHnOLOSV实训报告实训题目:贪吃蛇游戏程序设计院 系:计算机科学与工程学院专 业:网络工程班 级:网络工程131学 号:090213128姓%指导教师:肖微实训地点:九章楼N6-101开课时间:2022至2022学年第2学期常熟理工学院计算机科学与工程学院制struct SnakeOrientation dir;Body*head;Body *tail;uint bodylong;);HANDLE hStdout=GetStdHandle(STD_OUTPUT_HANDLE);using namespace std;const int X
2、=10;const int Y=5;/*pianyiliang*/const int WIDTH=60;const int HEIGHT=25;const char BRICK=H;const char snk=O;int cnt=0;int delaytime;int k;int score=0;PT foodpt;Snake snake;定义一些即将使用的全局变量,根据以前学到的知识,当全局变量在某一 函数中被使用的时候,即使不返回函数值,全局变量也会改变。因为这部份定义的结构体比较多,所以特殊容易弄混,在使用的时候,花 费好长期才熟练的掌握。void hidecursor()(CONSO
3、LE_CURSORJNFO cursorjnfo;cursorJnfo.bVisible =false;cursorJnfo.dwSize =30;SetConsoleCursorlnfo(hStdout,&cursor_info);)以上代码的运行,可以隐藏运行结果界面的光标,这是我们学习c语言以 来,第一次碰到类似的代码,有趣的是,其中的cursorJnfo.dwSize =30; 改变数字不影响运行结果,起初我以为这行代码是多余的,但是将它删除 之后,程序运行便浮现了错误,后来我上网查了一下才知道,这行代码的 作用是改变光标的大小,因为光标被隐藏,所以改变数字不会影响最终结 果,然而值得
4、注意的是,这行代码一定不能够省略。void paintsnake()贪吃蛇图形 void prepare()(游戏简介)void print_char(int x ,int y ,char ch)(COORD c;c.X=x;c.Y=y;SetConsoleCursorPosition(hStdout,c);putchar(ch);)上面代码中COORD表示的是坐标,“X”和“Y”分别表示的是横坐标和 纵坐标,规定好这两个后就可以很好的确定所打印的代码的位置。通过改 变x,y,以及ch就可以实现在任意位置打印任意字符的功能。void draw_wall()for(int i=O;iHEIGHT
5、;i+)for(int j=O;jnow,x=pt.x&b-now.y=pt.y)return 1;b=b-next;)return 0;)因为生成的小虫子可能落到蛇的身上,所以要排除落到蛇身的随机点void creat_worm()PT pt;pt=randpt();while(judge()=1)(randpt();生成满足条件的随机点foodpt.x=pt.x;foodpt.y=pt.y;将随机点的坐标赋给虫子print_char(foodpt.x5foodpt.y51 );)确定随即点之后,通过print_char ()函数可以画出我们需要的虫子。void init_snake()/*
6、蛇的结构*/(snake.dir=ORIENTATION_UP;首先确定蛇的第一步挪移方向Body* temp=new Body;/定义一个指针temp ,并进行初始化 snake. head=temp;/从蛇头开始snake.head -now.x=WIDTH/2+X;snake. head-now.y=HEIGHT/2+Y;使蛇头位置是在围墙的中间snake.head-last=NULL;temp=NULL;temp=new Body;/将指针temp指向蛇的第二节身体temp-now.x=snake.head-now.x-1;temp-now,y=snake.head-now.y;tem
7、p-last =snake.head /snake.head-next=temp*# temp 中存的信息存至U snake.head-next, 第二节蛇身的坐标确定*/temp=NULL;/*初始化 temp*/temp=new Body;temp-next=NULL;temp-now,x=snake.head-next-now.x-1;temp-now.y=snake.head-next-now.y;/*snake.head 蛇头位置向来确定*/snake.head-next-next=temp;新身体即第三节身体的信息确定temp-last=snake.head-next;snake.
8、tail=temp;snake.bodylong=3;蛇的身体长度creat_worm();/生成一个虫子)void show_snake()将蛇的身体画出(Body *temp= snake, head;while(temp!=NULL)(print_char(temp-now.x,temp-now.y,snk);temp=temp-next;)画蛇部份是链表的一种应用,因为链表是比较难的一部份,所以在此之前, 我就先将之前学的链表部份自己复习了一下,这样理解起老师所给的代码 就简单多了。void flash_windows()/* 颤动控制台窗 口*/(HWND hWnd=GetForeg
9、roundWindow();for (int i=0;inow.x=X|snake.head-now.y=Y|snake.head-now.x=( X+WIDTH- 1)|snake.head-now.y=(Y+HEIGHT-1)将蛇头的坐标和围墙 的座标进行比较,如果重合的话蛇就判断为死亡return 0;else return 1;)判断蛇是否存活int can_eat_worm()(if(snake.head-now.x=foodpt.x&snake.head-now.y=foodpt.y)return 1;elsereturn 0;)如果蛇头坐标和虫子坐标重合,则判断蛇可以吃到虫子,随
10、即返回1void eat_food()(Body *newHead=new Body;newHead-last=NULL;switch(snake.dir)(case ORIENTATION_UP:newHead-now.x=foodpt.x;newHead-now.y=foodpt.y-1;break;case ORIENTATION_DOWN:newHead-now.x=foodpt.x;newHead-now.y=foodpt.y+1;break;case ORIENTATION_LEFT:newHead-now.x=foodpt.x-1;实训报告成绩学生姓名周豪评语:指导教师(签名)年
11、 月 日说明:指导教师评分后,实训报告交院办公室保存。newHead-now.y=foodpt.y; break;case ORIENTATION_RIGHT:newHead-now.x=foodpt.x+1;newHead-now.y=foodpt.y;break;将食物的last作为新蛇头newHead-next=snake. head;snake.head-last=newHead;snake.head=newHead;snake.bodylong+;creat_worm();cnt+;每吃一次虫子,计数变量ent就会自身加一score+=100;每吃一次虫子,分数加100if (cnt
12、=5&cnt10)delaytime =100;/当吃的虫子达到一定数目的时候,速度就会改变)将食物看做新头,从而将蛇的身体长度加1,但是在这个过程中当蛇吃到事物的时候,新头和旧头会重合,所以蛇的增长会有一定时间的延迟,但 是如果将食物的last作为蛇头的话就不会浮现这个问题。int judgebody()Body *pt=snake.head;Body *b=snake.head;b=b-next;while(b!=NULL)if(b-now.x=pt-now.x&b-now,y=pt-now.y) return 1;b=b-next;return 0;将蛇头看做随机生成的虫子,然后通过“生
13、成虫子再也不蛇身上”的思路, 判断蛇受否撞到了自己。int move_snake()int flag=O;PT next;switch(snake.dir)(case ORIENTATION_UP:next.x=snake.head-now.x;next.y=snake.head-now.y-1;break;case ORIENTATION_DOWN:next.x=snake.head-now.x;next.y=snake.head-now.y+1;break;case ORIENTATION_LEFT:next.x=snake.head-now.x-1;next.y=snake.head-n
14、ow.y;break;case ORIENTATION_RIGHT:next.x=snake.head-now.x+1;next.y=snake,head-now.y;break;)int last_x=snake.tail-now.x;int last_y=snake.tail-now.y;先将蛇尾的坐标存到定义的常量中,为下面的去蛇尾做准备Body *temp=snake.tail;while(temp-last!=NULL) 不是蛇头(temp-now,x=temp-last-now.x;temp-now,y=temp-last-now.y; temp=temp-last;)temp-n
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 贪吃 暑期 总结报告
限制150内