《贪吃蛇游戏课程设计》报告_第1页
《贪吃蛇游戏课程设计》报告_第2页
《贪吃蛇游戏课程设计》报告_第3页
《贪吃蛇游戏课程设计》报告_第4页
《贪吃蛇游戏课程设计》报告_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

贪吃蛇游戏程序设计一、课程设计任务设计二、设计要求 (3).上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能 (4).完成课程设计报告,并进行答辩三、需求分析围墙里,围墙里随机出现一个食物,通一个小矩形快表示蛇的一节身体,身体每动时必须从蛇头开始,所以蛇不能向相反移,但按下有效方向键后,蛇头朝键后,先确定蛇头的位置,而后蛇蛇多一节身体,所以将蛇的最后一块和覆盖矩形块。为了便于理解,定义两开始初始化界面和蛇身游戏者按键选择放置食物蛇开始运动蛇吃到食?NY蛇长大N蛇死亡?YYN退出界面 (1)函数定义yintscore=0;intgamespeed=250;//游戏速度可根据实际情况自行调整structFood{intx;//食物的横坐标inty;//食物的纵坐标intyes;//判断是否要出现食物的变量{intxM;intyMintnode;//蛇的节数intdirection//蛇的移动方向voidInit();//图形驱动voidClose();//图形结束voidDrawK();//开始画面voidGamePlay();//玩游戏的具体过程voidGameOver();//游戏结束voidPrScore();//输出成绩 (2)主函数main()全局变量及函数原型说明,然后初始化图形系统,调用函数DrawK()画出开始画面,调用函数GamePlay(),即玩游戏的具体用Close()关闭图形系统,结束程序voidmain()//主函数{DrawK始画面layose}voidInit)//图形驱动{intgdDETECTgminitgraph(&gd,&gm,"");/*此处为turboc的路径,读者可以根据自己的电脑而改*/cleardevice} (3)画界面函数DrawK()在水平和垂直方向输出连续的宽度和voidDrawK()//开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙{REENHTREDinestyleforiii墙{rectangleii,49);//上边i}i{rectangleii+10);//左边i}} (4)游戏具体过程函数GamePlay()节的坐标赋给后一节,用背景颜色将最后节voidGamePlay()//玩游戏的具体过程{rand生器ectionyrewhile(1)//可重复玩游戏,按ESC键结束{while(!kbhit())//在没有按键的情况下,蛇自己移动身体{if(food.yes==1)//需要出现新食物{whilefoody)odyes}if(food.yes==0)//画面上有食物就要显示{nglefoodxfoodyfoodxfoody}forisnakenodeii也就是贪吃蛇的关键算法{snakexisnakexisnakeyisnakeyi}switch(snake.direction)//1,2,3,4表示上下左右四个方向,通过这个判断来移动蛇头{breakxbreakybreakbreak}for(i=3;i<snake.node;i++)//从蛇的第四节开始判断是否撞到自己了,因为蛇头{ifsnake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0]){versnake.life=1;k}}{eOverfe}if(snake.life==1)//以上两种判断以后,如果蛇死就跳出内循环,重新开始kif(snake.x[0]==food.x&&snake.y[0]==food.y)//吃到食物以后{foodxfoodysnakenodesnake.y[snake.node]=-20;//新的一节先放在看不见得位置,下次循环就取前nodePrScore出新的得分}ITEakeyimespeedsetcolor一节rectangle(snake.x[snake.node-1],snake.y[snake.node-1],snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);}ifsnake.life==1)//如果蛇死就跳出循环kkeygetchar受案件if(key==Esc)//按ESC键退出kelseifkeyUPsnakedirection=4)onelseifkeyRIGHTsnakedirection!=2)ifkeyLEFTsnakedirectionifkeyDOWNsnakedirection} (5)游戏结束函数GameOver()voidGameOver()//游戏结束{outtextxy我会回来的!!!!!");}voidPrScore()//输出成绩{trllstyleSOLIDFILLYELLOWbar(50,15,220,35);coredscorextxystr}voidClose()//图形结束{}五、调试及解决方法图书馆或上网查阅一些资料或者是向老师请教也解决了对源程序一一修改直到运行成功。六、测试结果七、设计心得体会3)在做程序的时候先列框架,将这个程序所要达到的目的(功能)分析出行5)学会了有关头文件的使用方法,及系统调配问题的解决方法等。6)了解到了注释的重要性。#defineM200#include"graphics.h"#include<stdlib.h>#include<stdio.h>#include<string.h>#include<iostream.h>#include<dos.h>#include<conio.h>#include<windows.h>#defineLEFT97//A#defineRIGHT100//D#defineDOWN115//S#defineUP119//W#defineEsc0x011binti,key;intscore=0;intgamespeed=250;//游戏速度可根据实际情况自行调整structFood{intx;//食物的横坐标inty;//食物的纵坐标intyes;//判断是否要出现食物的变量}food;//食物的结构体structSnake{intx[M];inty[M];intnode;//蛇的节数intdirection;//蛇的移动方向voidInit();//图形驱动voidClose();//图形结束voidDrawK();//开始画面voidGamePlay();//玩游戏的具体过程voidGameOver();//游戏结束voidPrScore();//输出成绩voidmain()//主函数{Init();//图形驱动DrawK();//开始画面GamePlay();//玩游戏的具体过程Close();//图形结束}voidInit()//图形驱动{intgd=DETECT,gm;initgraph(&gd,&gm,"");/*此处为turboc的路径,读者可以根据自己的电脑而改*/cleardevice();}右下角坐标为(610,460)的围墙{setbkcolor(GREEN);setcolor(LIGHTRED);setlinestyle(0,0,5);//设置线型for(i=50;i<=600;i+=10)//画围墙{rectangle(i,40,i+10,49);//上边rectangle(i,451,i+10,460);//下边}for(i=40;i<=450;i+=10){rectangle(50,i,59,i+10);//左边rectangle(601,i,610,i+10);//右边}}voidGamePlay()//玩游戏的具体过程{rand();//随机数发生器snake.life=0;//蛇活着snake.direction=1;//方向往右snake.x[0]=100;snake.y[0]=100;//舌头坐标snake.x[1]=110;snake.y[1]=100;snake.node=2;//蛇的节数PrScore();//输出分数while(1)//可重复玩游戏,按ESC键结束{{if(food.yes==1)//需要出现新食物{food.x=rand()%400+60;food.y=rand()%350+60;while(food.x%10!=0)//食物随即出现后必须让食物能够在整格内,这样才能让蛇迟到food.x++;while(food.y%10!=0)food.y++;food.yes=0;//画面上有食物了}if(food.yes==0)//画面上有食物就要{setcolor(GREEN);rectangle(food.x,food.y,food.x+10,food.y-10);}for(i=snake.node-1;i>0;i--)//蛇的每个环节往前移动,也就是贪吃蛇的关键算法{snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1];}switch(snake.direction)//1,2,3,4表示上下左右四个方向,通过这个判断来移动蛇头{case1:snake.x[0]+=10;break;case2:snake.x[0]-=10;break;case3:snake.y[0]-=10;break;case4:snake.y[0]+=10;break;}for(i=3;i<snake.node;i++)//从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来{if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[{GameOver();//显示失败snake.life=1;break;}}snakey否撞到墙壁{GameOver();//本次游戏结束snake.life=1;//蛇死}if(snake.life==1)//以上两种判断以后,如果蛇死就跳出内循环,重新开始break;if(snake.x[0]==food.x&&snake.y[0]==food.y)//吃到食物以后{setcolor(0);//把画面上的食物去掉rectangle(food.x,food.y,food.x+10,food.y-10);snake.x[snake.node]=-20;snake.y[snake.node]=-20;//新的一节先放在看不见得位置,下次循环就取前一节的位置snake.node++;//蛇的身体长一节food.yes=1;score+=10;PrScore();//输出新的得分}setcolor(WHITE);//画出蛇for(i=0;i<snake.node;i++)rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10);Sleep(gamespeed);setcolor(0);//用黑色去除蛇的最后一节rectangle(snake.x[snake.node-1],snake.y[snake.node-1],snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);}if(snake.life==1)//如果蛇死就跳出循环break;key=getchar();//接受案件if(key==Esc)//按ESC键退出break;elseif(key==UP&&snake.direction!=4)snake.direction=3;elseif(key==RIGHT&&snake.direction!=2)snake.direction=1;elseif(key==LEFT&&snake.direction!=1)snake.direction=2;if(key==DOWN&&snake.direction!=3)snake.direction=4;}//endwhile(1)}voidGameOver()//游戏结束{cleardevice();PrScore();setcolor(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论