首页

> 期刊投稿知识库

首页 期刊投稿知识库 问题

贪吃蛇毕业论文加源码

发布时间:

贪吃蛇毕业论文加源码

#include #include #include using namespace std;void gotoxy(int x,int y) {COORD pos={x,y}; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);}//光标定位class Food {//食物类private: int m_x; int m_y;public: void randfood() {//随机产生一个食物 srand((int)time(NULL));//利用时间添加随机数种子,需要ctime头文件 L1:{m_x=rand()%(85)+2;//2~86 m_y=rand()%(25)+2;//2~26 if(m_x%2) goto L1;//如果食物的x坐标不是偶数则重新确定食物的坐标 gotoxy(m_x,m_y);//在确认好的位置输出食物 cout << "★";}} int getFoodm_x() {return m_x;}//返回食物的x坐标 int getFoodm_y() {return m_y;}};//返回食物的y坐标class Snake {private: struct Snakecoor {int x; int y;};//定义一个蛇的坐标机构 vector snakecoor;//将坐标存入vector容器中 //判断并改变前进方向的函数 void degdir(Snakecoor&nexthead) {//定义新的蛇头变量 static char key='d';//静态变量防止改变移动方向后重新改回来 if(_kbhit()) { char temp=_getch();//定义一个临时变量储存键盘输入的值 switch(temp) {//如果临时变量的值为wasd中的一个,则赋值给key default: break;//default是缺省情况,只有任何条件都不匹配的情况下才会执行 必须写在前面!不然蛇无法转向 case'w': case'a': case's': case'd': //如果temp的方向和key的方向不相反则赋值 因为两次移动方向不能相反 将蛇设置为初始向右走 if(key=='w' && temp!='s' || key=='s' && temp!='w' || key=='a' && temp!='d' || key=='d' && temp!='a') key=temp;}} switch (key) {//根据key的值来确定蛇的移动方向 case'd': nexthead.x=snakecoor.front().x+2; nexthead.y=snakecoor.front().y; break; //新的蛇头的头部等于容器内第一个数据(旧蛇头)x坐标+2 因为蛇头占两个坐标,移动一次加2 case'a': nexthead.x=snakecoor.front().x-2; nexthead.y=snakecoor.front().y; break; case'w': nexthead.x=snakecoor.front().x; nexthead.y=snakecoor.front().y-1; break; //因为控制台的x长度是y的一半,所以用两个x做蛇头,需要的坐标是二倍 case's': nexthead.x=snakecoor.front().x; nexthead.y=snakecoor.front().y+1;}} //游戏结束时设计一个界面输出“游戏结束”以及分数 void finmatt(const int score) { system("cls"); gotoxy(40, 14);//清屏然后输出 cout << "游戏结束"; gotoxy(40, 16); cout << "得分:" << score; gotoxy(0, 26); exit(0);}//exit为C++的退出函数 exit(0)表示程序正常退出,非0表示非正常退出 void finishgame(const int score) {//游戏结束 if(snakecoor[0].x>=88 || snakecoor[0].x<0 || snakecoor[0].y>=28 || snakecoor[0].y<0) finmatt(score);//撞墙 for(int i=1;i=0;i--) {//反向创建初始蛇身,初始蛇头朝右 temp.x=16+(i<<1); temp.y=8;//偶数 在蛇头左移生成蛇身 snakecoor.push_back(temp);}}//在蛇尾尾插入临时变量 void move(Food&food, int& score) {//蛇运动的函数 Snakecoor nexthead;//新蛇头变量 degdir(nexthead);//判断和改变蛇前进的方向 snakecoor.insert(snakecoor.begin(), nexthead);//将蛇头插入容器的头部 gotoxy(0, 0); cout << "得分:" << score;//每次移动都在左上角刷新得分 gotoxy(0, 2); cout << "蛇的长度为:" << snakecoor.size();//长度用来测试 finishgame(score);//判断游戏结束,输出分数 //吃到食物蛇的变化 if(snakecoor[0].x==food.getFoodm_x() && snakecoor[0].y==food.getFoodm_y()) {//蛇头与食物重合 gotoxy(snakecoor[0].x, snakecoor[0].y); cout << "●";//吃到食物时这次蛇没有移动,所以蛇会卡顿一下gotoxy(snakecoor[1].x, snakecoor[1].y); cout << "■";//重新输出一下蛇头和第一节蛇身让蛇不卡顿 score++; food.randfood(); return;}//吃到食物得分+1,如果蛇头坐标和食物坐标重合则重新产生一个食物并直接结束本次移动 for(int i=0;i

//******友情提示:如想速度快点,请改小_sleep(500)函数中参数*****   #include   #include   #include   #include   #include   const int H = 8;   //地图的高  const int L = 16;  //地图的长  char GameMap[H][L];   //游戏地图  int  key;  //按键保存  int  sum = 1, over = 0;  //蛇的长度, 游戏结束(自吃或碰墙)  int  dx[4] = {0, 0, -1, 1};  //左、右、上、下的方向  int  dy[4] = {-1, 1, 0, 0};  struct Snake   //蛇的每个节点的数据类型  {   int x, y;  //左边位置   int now;   //保存当前节点的方向, 0,1,2,3分别为左右上下  }Snake[H*L];  const char Shead = '@';  //蛇头  const char Sbody = '#';  //蛇身  const char Sfood = '*';  //食物  const char Snode = '.';  //'.'在地图上标示为空  void Initial();  //地图的初始化  void Create_Food(); //在地图上随机产生食物  void Show();   //刷新显示地图  void Button();  //取出按键,并判断方向  void Move();   //蛇的移动  void Check_Border();  //检查蛇头是否越界  void Check_Head(int x, int y);   //检查蛇头移动后的位置情况  int main()   {   Initial();   Show();   return 0;  }  void Initial()  //地图的初始化  {   int i, j;   int hx, hy;   system("title 贪吃蛇");  //控制台的标题   memset(GameMap, '.', sizeof(GameMap));  //初始化地图全部为空'.'   system("cls");   srand(time(0));   //随机种子   hx = rand()%H;    //产生蛇头   hy = rand()%L;   GameMap[hx][hy] = Shead;   Snake[0].x = hx;  Snake[0].y = hy;   Snake[0].now = -1;   Create_Food();   //随机产生食物   for(i = 0; i < H; i++)   //地图显示   {     for(j = 0; j < L; j++)     printf("%c", GameMap[i][j]);    printf("\n");   }         printf("\n小小C语言贪吃蛇\n");   printf("按任意方向键开始游戏\n");        getch();   //先接受一个按键,使蛇开始往该方向走   Button();  //取出按键,并判断方向  }  void Create_Food()  //在地图上随机产生食物  {   int fx, fy;   while(1)   {    fx = rand()%H;       fy = rand()%L;          if(GameMap[fx][fy] == '.')  //不能出现在蛇所占有的位置    {      GameMap[fx][fy] = Sfood;        break;    }   }  }  void Show()  //刷新显示地图  {   int i, j;   while(1)   {      _sleep(500); //延迟半秒(1000为1s),即每半秒刷新一次地图    Button();   //先判断按键在移动    Move();    if(over)  //自吃或碰墙即游戏结束    {      printf("\n**游戏结束**\n");     printf("     >_<\n");     getchar();        break;    }    system("cls");   //清空地图再显示刷新吼的地图    for(i = 0; i < H; i++)     {      for(j = 0; j < L; j++)      printf("%c", GameMap[i][j]);     printf("\n");    }          printf("\n小小C语言贪吃蛇\n");    printf("按任意方向键开始游戏\n");   }  }  void Button()  //取出按键,并判断方向  {   if(kbhit() != 0) //检查当前是否有键盘输入,若有则返回一个非0值,否则返回0   {     while(kbhit() != 0)  //可能存在多个按键,要全部取完,以最后一个为主        key = getch(); //将按键从控制台中取出并保存到key中    switch(key)    {   //左     case 75:  Snake[0].now = 0;            break;              //右              case 77:  Snake[0].now = 1;                 break;              //上     case 72:  Snake[0].now = 2;            break;              //下     case 80:  Snake[0].now = 3;            break;    }   }  }  void Move()   //蛇的移动  {   int i, x, y;      int t = sum;  //保存当前蛇的长度   //记录当前蛇头的位置,并设置为空,蛇头先移动   x = Snake[0].x;  y = Snake[0].y;  GameMap[x][y] = '.';   Snake[0].x = Snake[0].x + dx[ Snake[0].now ];   Snake[0].y = Snake[0].y + dy[ Snake[0].now ];   Check_Border();   //蛇头是否越界   Check_Head(x, y);  //蛇头移动后的位置情况,参数为: 蛇头的开始位置   if(sum == t)  //未吃到食物即蛇身移动哦      for(i = 1; i < sum; i++)  //要从蛇尾节点向前移动哦,前一个节点作为参照   {    if(i == 1)   //尾节点设置为空再移动     GameMap[ Snake[i].x ][ Snake[i].y ] = '.';          if(i == sum-1)  //为蛇头后面的蛇身节点,特殊处理    {     Snake[i].x = x;           Snake[i].y = y;        Snake[i].now = Snake[0].now;    }    else   //其他蛇身即走到前一个蛇身位置    {     Snake[i].x = Snake[i+1].x;           Snake[i].y = Snake[i+1].y;        Snake[i].now = Snake[i+1].now;    }           GameMap[ Snake[i].x ][ Snake[i].y ] = '#'; //移动后要置为'#'蛇身    }  }  void Check_Border()  //检查蛇头是否越界  {   if(Snake[0].x < 0 || Snake[0].x >= H   || Snake[0].y < 0 || Snake[0].y >= L)       over = 1;  }  void Check_Head(int x, int y)  //检查蛇头移动后的位置情况  {        if(GameMap[ Snake[0].x ][ Snake[0].y ] == '.')  //为空    GameMap[ Snake[0].x ][ Snake[0].y ] = '@';   else   if(GameMap[ Snake[0].x ][ Snake[0].y ] == '*')  //为食物    {     GameMap[ Snake[0].x ][ Snake[0].y ] = '@';       Snake[sum].x = x;   //新增加的蛇身为蛇头后面的那个        Snake[sum].y = y;        Snake[sum].now = Snake[0].now;           GameMap[ Snake[sum].x ][ Snake[sum].y ] = '#';      sum++;     Create_Food();  //食物吃完了马上再产生一个食物    }    else    over = 1;  }

/*贪吃蛇游戏,由于是C++源码 且 用到Windows API ,是控制台界面不是图形界面,需要用VC++6.0 或 VC++2010 在windows环境编译运行。如果符合上述条件一定可以编译运行zjlj,2015.3.16*/#define DEBUG 0 //当程序在调试阶段时 DEBUG为 1#include#include#include#includeusing namespace std;void readini(FILE **fphead, int *score, char *argv[]) //创建或打开一个和运行文件对应的ini文件,读取最高纪录{ char filename[200],*pfilename; int flag=-1,i;         strcpy(filename,argv[0]);    for(i=0;filename[i]!='\0';i++) {  if ('.'==filename[i])flag=1; }   if(1==flag) { filename[i-1]='i';    filename[i-2]='n'; filename[i-3]='i'; } else {  filename[i]='.'; filename[i+1]='i'; filename[i+2]='n';    filename[i+3]='i';    filename[i+4]='\0'; } for(;filename[i]!='\\'&&i>=0;i--)pfilename=&filename[i];    if ( (*fphead=fopen(pfilename, "rb+"))==NULL) {        if ( (*fphead=fopen(pfilename, "wb+"))==NULL)  {    printf("无法创建或打开\"%s\"文件\n",pfilename);    system("pause");       exit(0);  }    } else {  fread(score,sizeof(int),1,*fphead); }}void writeini(FILE **fphead, int *score, char *argv[])  //打开一个和运行文件对应的ini文件,写入最高纪录{ char filename[200],*pfilename; int flag=-1,i;        strcpy(filename,argv[0]);    for(i=0;filename[i]!='\0';i++) {  if ('.'==filename[i])flag=1; }   if(1==flag) { filename[i-1]='i';    filename[i-2]='n'; filename[i-3]='i'; } else {  filename[i]='.'; filename[i+1]='i'; filename[i+2]='n';    filename[i+3]='i';    filename[i+4]='\0'; } for(;filename[i]!='\\'&&i>=0;i--)pfilename=&filename[i];    if ( (*fphead=fopen(pfilename, "wb+"))==NULL) {          printf("无法写入\"%s\"文件,磁盘写保护!\n",pfilename);    system("pause");       exit(0); } else {  rewind(*fphead);  fwrite(score,sizeof(int),1,*fphead);  fclose(*fphead); }}void gotoxy(int x,int y)//光标定位,光标定位函数SetConsoleCursorPosition是左上角位置是0,0然后向左向下延伸{COORD pos;pos.X=2*y;pos.Y=x;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);}void color(int a)//颜色函数{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);} void Refresh(int q[][22], int grade, int gamespeed, int length,int score) //  输出贪吃蛇棋盘{ int i,j; for(i=0;i<22;i++) {  for(j=0;j<22;j++)  {   if(q[i][j]==0)//输出棋盘空白   {    gotoxy(i,j);    color(11);    cout<<"■";   }   if(q[i][j]==1||q[i][j]==2)//输出棋盘墙壁   {      gotoxy(i,j);    color(11);    cout<<"□";   }   if(q[i][j]==3)//输出蛇头   {      gotoxy(i,j);    color(14);    cout<<"★";   }   if(q[i][j]==4)//输出蛇身   {      gotoxy(i,j);    color(12);    cout<<"◆";   }     if(q[i][j]==5)//输出果子   {      gotoxy(i,j);    color(12);    cout<<"●";   }  }  if(i==0) cout << "\t***********************";  if(i==1) cout << "\t等级为:" << grade;//显示等级  if(i==3) cout << "\t自动前进时间";  if(i==4) cout << "\t间隔为:" << gamespeed << "ms";//显示时间     if(i==6) cout << "\t历史最高分为:" << score << "分";  if(i==7) cout << "\t你现在得分为:" << (length+(grade-1)*8)*10 << "分";  if(i==8) cout << "\t**********************";     if(i==9) cout << "\t游戏说明:";     if(i==10) cout << "\t(1)用小键盘方向键控制";  if(i==11) cout << "\t蛇头运动方向;";  if(i==12) cout << "\t(2)蛇每吃一个果子蛇身";  if(i==13) cout << "\t增加一节;";  if(i==14) cout << "\t(3)蛇咬到自己或碰到墙";  if(i==15) cout << "\t壁游戏结束。";  if(i==18) cout << "\t**********************";     if(i==19) cout << "\tC/C++语言作业:";     if(i==20) cout << "\tzjlj,2015.03.16 "; }}  int main(int argc, char *argv[]){    int tcsQipan[22][22];     //  贪吃蛇棋盘是一个二维数组(如22*22,包括墙壁)    int i,j,score,directiontemp; FILE  *fpini;//*fpini 信息文件 readini(&fpini, &score, argv);//读取ini文件的最高纪录 if (score<0)//最高成绩小于零设置为零,初建文件会是负数  score=0; while(1) {  for(i=1;i<=20;i++)   for(j=1;j<=20;j++)    tcsQipan[i][j]=0;    //贪吃蛇棋盘相应坐标标上中间空白部分的标志0  for(i=0;i<=21;i++)   tcsQipan[0][i] = tcsQipan[21][i] = 1;      //贪吃蛇棋盘相应坐标标上上下墙壁的标志1  for(i=1;i<=20;i++)   tcsQipan[i][0] = tcsQipan[i][21] = 2;      //贪吃蛇棋盘相应坐标标上左右墙壁的标志2  int tcsZuobiao[2][500];     //蛇的坐标数组  for(i=0; i<4; i++)  {   tcsZuobiao[0][i] = 1;//蛇身和蛇头的x坐标   tcsZuobiao[1][i] = i + 1;//蛇身和蛇头的y坐标  }  int head = 3,tail = 0;//标示蛇头和蛇尾的数组偏移量  for(i=1;i<=3;i++)   tcsQipan[1][i]=4;    //蛇身  tcsQipan[1][4]=3;       //蛇头  int x1, y1;           // 随机出果子  srand(time(0));//设置随机种子  do  {   x1=rand()%20+1;   y1=rand()%20+1;  }  while(tcsQipan[x1][y1]!=0);//如果不是在空白处重新出果子  tcsQipan[x1][y1]=5;//贪吃蛇棋盘相应坐标标上果子的标志5  color(12);  cout<<"\n\n\t\t\t\t贪吃蛇游戏即将开始 !"<=0;i--)  {   start=clock();   while(clock()-start<=1000);   system("cls");   if(i>0)    cout << "\n\n\t\t\t\t进入倒计时:" << i << endl;  //倒计时显示   else    Refresh(tcsQipan,grade,gamespeed,length,score);  //初始棋盘显示  }  int timeover=1,otherkey=1;//初始化超时时间和按键判断参数  char direction = 77;  // 设置初始情况下,向右运动  int x=tcsZuobiao[0][head],y=tcsZuobiao[1][head];//保存蛇头坐标到x,y变量  while(1)//运行一局游戏  {   start = clock();   while((timeover=((starttemp=clock())-start<=gamespeed))&&!kbhit());//如果有键按下或时间超过自动前进时间间隔则终止循环   if(direction==72||direction==80||direction==75 ||direction==77)   directiontemp=direction;//保留上一次方向按键            //starttemp=gamespeed+start-starttemp;//保留停留时间   if(timeover)   {    #if (DEBUG==1)    direction = getch();//调试代码             #else    if((direction =getch())==-32)     direction = getch();       #endif   }             #if (DEBUG==1)//调试代码       start=clock();    while(clock()-start<=2000);    gotoxy(24,4);    cout << "\t按键ASCII代码"<<(int)direction<<"    "<=(length+(grade-1)*8)*10)//判断是否破记录     {      gotoxy(10,7);      color(12);      cout << "闯关失败 加油耶!" << endl;      fclose(fpini);//关闭ini文件     }     else     {      gotoxy(10,7);      color(12);      cout << "恭喜您打破记录" << endl;      score=(length+(grade-1)*8)*10;      writeini(&fpini, &score, argv);//写入ini文件的最高纪录     }     gotoxy(23,12);        cout << "按回车键重新开始,按ESC退出游戏" << endl;//显示的提示     break;//退出该局游戏    }    if(tcsQipan[x][y]!=0&&!(x==x1&&y==y1)&&tcsQipan[x][y]!=3) //   蛇头碰到蛇身,结束本局游戏    {     gotoxy(22,12);     cout << "\t游戏已结束!" << endl;     if(score>=(length+(grade-1)*8)*10)//判断是否破记录     {      gotoxy(10,7);      color(12);      cout << "闯关失败 加油耶!" << endl;      fclose(fpini);//关闭ini文件     }     else     {      gotoxy(10,7);      color(12);      cout << "恭喜您打破记录" << endl;      score=(length+(grade-1)*8)*10;      writeini(&fpini, &score, argv);//写入ini文件的最高纪录     }     gotoxy(23,12);     cout << "按回车键重新开始,按ESC退出游戏" << endl;//显示的提示     break;//退出该局游戏    }    /*    游戏运行时的核心算法开始    */    if(x==x1 && y==y1) //  吃果子,长度加1    {        length ++;     if(length>=8)//长度大于等于8重新计算长度,等级加1     {      length -= 8;//重新计算长度      grade ++;//等级加1      if(gamespeed>50)//控制最快速度为50       gamespeed = 550 - grade * 50; // 改变自动前进时间间隔     }     tcsQipan[x][y]= 3;//贪吃蛇棋盘相应坐标现在蛇头标志改为蛇头标志3     tcsQipan[tcsZuobiao[0][head]][tcsZuobiao[1][head]] = 4;//贪吃蛇棋盘相应坐标原来蛇头标志改为蛇身标志4     head = (head+1)%400;//防止数组越界     tcsZuobiao[0][head] = x;//蛇头的x坐标     tcsZuobiao[1][head] = y;//蛇头的y坐标     do//随机出果子     {      x1=rand()%20+1;      y1=rand()%20+1;     }     while(tcsQipan[x1][y1]!=0);//如果不是在空白处重新出果子     tcsQipan[x1][y1]=5;//贪吃蛇棋盘相应坐标标上果子的标志5     gotoxy(22,12);     cout << "\t游戏进行中!" << endl;     Refresh(tcsQipan,grade,gamespeed,length,score);    }    else  //  不吃果子    {       if(otherkey)     {      tcsQipan [tcsZuobiao[0][tail]][tcsZuobiao[1][tail]]=0;      tail=(tail+1)%400;//防止数组越界      tcsQipan [tcsZuobiao[0][head]][tcsZuobiao[1][head]]=4;      head=(head+1)%400;//防止数组越界      tcsZuobiao[0][head]=x;//蛇头的x坐标      tcsZuobiao[1][head]=y;//蛇头的y坐标      tcsQipan[tcsZuobiao[0][head]][tcsZuobiao[1][head]]=3;      gotoxy(22,12);      cout << "\t游戏进行中!" << endl;      Refresh(tcsQipan,grade,gamespeed,length,score);     }     else     {      gotoxy(22,12);      cout << "\t游戏暂停中!" << endl;     }    }    /*    游戏运行时的核心算法结束    */       }    while(1)    {     while(!kbhit());     if((direction =getch())==13)//按回车键开始下一局      break;     if(direction ==27)//按ESC退出游戏      exit(0);    }       system("cls");//清除屏幕重新开始 } return 0;}

贪吃蛇 #define N 200 #include #include #include #define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800 #define ESC 0x011b int i,key; int score=0;/*得分*/ int gamespeed=50000;/*游戏速度自己调整*/ struct Food { int x;/*食物的横坐标*/ int y;/*食物的纵坐标*/ int yes;/*判断是否要出现食物的变量*/ }food;/*食物的结构体*/ struct Snake { int x[N]; int y[N]; int node;/*蛇的节数*/ int direction;/*蛇移动方向*/ int life;/* 蛇的生命,0活着,1死亡*/ }snake; void Init(void);/*图形驱动*/ void Close(void);/*图形结束*/ void DrawK(void);/*开始画面*/ void GameOver(void);/*结束游戏*/ void GamePlay(void);/*玩游戏具体过程*/ void PrScore(void);/*输出成绩*/ /*主函数*/ void main(void) { Init();/*图形驱动*/ DrawK();/*开始画面*/ GamePlay();/*玩游戏具体过程*/ Close();/*图形结束*/ } /*图形驱动*/ void Init(void) { int gd=DETECT,gm; initgraph(&gd,&gm,"c:\\tc"); cleardevice(); } /*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/ void DrawK(void) { /*setbkcolor(LIGHTGREEN);*/ setcolor(11); setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/ 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);/*右边*/ } } /*玩游戏具体过程*/ void GamePlay(void) { randomize();/*随机数发生器*/ food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/ 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键结束*/ { while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/ { 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]; } /*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/ switch(snake.direction) { case 1:snake.x[0]+=10;break; case 2: snake.x[0]-=10;break; case 3: snake.y[0]-=10;break; case 4: snake.y[0]+=10;break; } for(i=3;i595||snake.y[0]<55|| snake.y[0]>455)/*蛇是否撞到墙壁*/ { 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(4);/*画出蛇*/ for(i=0;i

安卓贪吃蛇毕业论文

我可以帮你搞定.

一份基于C语言的贪吃蛇我就可以写的

写单片机贪吃蛇游戏毕业设计开题报告文献综述方法如下。1、文献综述,研究思路研究方法及手段。2、参考文献进度安排。3、文献综述是开题报告中的最重要部分。

贪吃蛇项目运毕业论文

写单片机贪吃蛇游戏毕业设计开题报告文献综述方法如下。1、文献综述,研究思路研究方法及手段。2、参考文献进度安排。3、文献综述是开题报告中的最重要部分。

主要内容就是设计蛇的形状和方向,以及食物的产生与位置,先创建一个Point对象point,由多个point 组合成蛇身,当蛇吃到食物时,则增加一个point在蛇身上,使蛇身不断加长,同时利用随机函数在游戏面板上产生一个新的Food对象代替原来被“吃掉”的food,其次,玩家使用方向键来控制蛇的行进,当蛇吃到 food 就给玩家加分作为奖励,最后就可以得出用户的分数。 设计的目的在于学习Java程序设计基本技术,学习用MyEclipse开发Java程序的相关技术,以及熟悉项目开发的完整过程。学会怎样进行一个项目的需求分析、概要设计、详细设计等软件开发过程,熟练地掌握Java程序设计的基本技术和方法,以及熟练地掌握MyEclipse开发环境的使用方法,培养初步的项目分析能力和程序设计能力。 游戏实现的具体任务如下:1) 游戏的开始,停止,暂停,继续。 根据用户单击的按钮(开始,停止,暂停,继续),游戏实现具体相应的功能。2) 游戏难度的调整。 用户可以通过选择相应难度地形来设置游戏的难度级别,级别越高,游戏难度也越大。3) 游戏帮助。单击游戏帮助按钮弹出一个消息框提供相应的游戏介绍。另外在游戏中提供了网格对每一块小方块进行包裹,玩家可以选择是否显示网格,可以帮助刚入门的玩家比对蛇头与食物的位置。4) 蛇身和背景颜色的设置。可以通过单击相应的设置按钮让蛇身或背景的颜色以用户喜欢的颜色输出。另外如果玩家选择显示网格,也可以单击相应按钮设置网格线的颜色。5) 游戏奖励。当蛇吃到一颗食物时则得到10分作为奖励,同时如果吃到特殊的食物则会得到普通食物三倍的奖励。但特殊的食物会在一定时间内自动消失。

能。1、贪吃蛇简单些,而且可扩展的不少,方面多,如果不好好考虑和设计,将难以成功开发出这个游戏。2、在这个游戏设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中,还要应用c语言的图形库函数。3、在设计开发过程中,要对c语言的图形库函数有一定的了解,利用图形库函数实现一些功能。

贪吃蛇项目毕业论文设计

不懂 说明白点游戏设计的目的? 那不就是为了娱乐吗?

程序关键在于表示蛇的图形及蛇的移动。用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用俩节表示。移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现与消失也是画矩形块和覆盖矩形块。为了便于理解,定义两个结构体:食物与蛇目的 本程序实现主要技巧在于C程序二维数组的应用。目的在于提高编程的水平。

随着动画技术的不断发展,网络传播速度越来越快,Flash游戏已经成为现在人生活娱乐,打发时间,缓解压力的一项不可或缺的项目。而一个优秀的Flash游戏离不开游戏画面、程序脚本以及后期音效的共同作用。因此,越来越多有着引人入胜的剧情,丰富有趣的画面,好听难忘的音乐的Flash小游戏在互联网上被越来越多的玩家喜爱和分享。当这些兼具艺术性与流行性的元素都由一个游戏组合到一起,人们可以从中得到娱乐和放松,同时有得到一些对生活对人生的启发,让人会心一笑。而创作者也可以选择不同的风格,不同的手法用计算机的一系列数码艺术创作手法实现自己的创意,然后在一些交流互动网站上发表,供他人娱乐或者借鉴,同时也可以得到广大互联网用户的意见,从而提高自身的创作水品。由此可见,Flash游戏设计的意义就在于:集合不同的艺术门类,把艺术与技术相结合。从而让人可以在游戏中的到美的享受。给广大的互联网用户提供了一个娱乐,休闲,放松身心的地方。让设计师之与玩家之间产生交流,从而完善游戏。操作便捷,文件携带方便,无需安装,符合了现在很多快餐式的生活要求便于大众随时的下载,游戏。有丰富的图像,画面不受软件的限制。富有创意,风格多变。是其他电子游戏没有的。国内外研究现状及分析:目前利用Flash开发出了许多夸平台的网络游戏,甚至可以匹敌大型MMOR,在3G时代到来以后,我们很快可以在手机上玩到大型网络游戏,现有的Flash制作网络游戏有:SLG类(热血三国),体育类(热血球球),RPG类(凡人修真),桌面(德州扑克),TD类(保卫家园)等等.在日本和美国,动画和游戏这一类的技术超出国内比较多,日本的动漫位居世界前列是众所周知的。要想在这一方面能有所作为,仍需加倍努力。

贪吃蛇论文开题报告

您的电子信息工程专业论文具体是什么题目呢有什么要求呢论文是需要多少字呢开题报告 任务书 都搞定了不你可以告诉我具体的排版格式要求,希望可以帮到你,祝写作过程顺利论文如何定题目 首先看是什么专业的题目其次根据专业和教授的口味来定题目尽可能不要大众化 (一)选题毕业论文(设计)题目应符合本专业的培养目标和教学要求,具有综合性和创新性。本科生要根据自己的实际情况和专业特长,选择适当的论文题目,但所写论文要与本专业所学课程有关。(二)查阅资料、列出论文提纲题目选定后,要在指导教师指导下开展调研和进行实验,搜集、查阅有关资料,进行加工、提炼,然后列出详细的写作提纲。(三)完成初稿根据所列提纲,按指导教师的意见认真完成初稿。(四)定稿初稿须经指导教师审阅,并按其意见和要求进行修改,然后定稿。 选题是决定毕业设计(论文)训练成败与质量好坏的关健之一。1、通信工程专业本科从选题的内容上可以分为理论型毕业设计(论文)和应用型毕业设计(论文)两大类。2、从本科毕业设计(论文)课题的来源,也可以分为教师命题型和自选型毕业设计(论文)两大类。3、学生要根据通信工程专业课程群来确定选题方向,数字通信与网络交换方向及信号及信息处理方向的所有应用方面课程均可以作为选题内容。但是,电子技术应用方向及计算机应用方向必须与通信或信号信息处理相结合,其中要有与通信相关的内容。4、从通信工程专业本科毕业设计(论文)所涉及的研究领域来看,可以是以下内容:(1)网络交换与数据传输分析;(2)通信网络或数字通信仿真(MATLAB,Systemview等);(3)信号及信息处理,(如数据采集,USB接口传输,图像数据处理等);(4)红外线遥感技术(如防盗遥感技术)(5)网络信息安全(如编码技术)(6)通信类软件开发,(如C语言与蓝牙结合)(7)数据传输类接口电路设计或软件设计(如嵌入式蓝牙设计)(8)光纤、无线、移动等通信新技术方面的应用或开发;(9)微波技术,电磁波传输技术,卫星雷达等方面(10)计算机网络或计算机控制方面(11)通信在军事方面的应用研究;(12)程控交换,交互式有线电视网等。(13)其他与通信相关的命题。计算机信息,通信工程,本科毕业论文参考选题 Linux(gatagram模块)源码分析Linux网络子系统stream模块分析Linux网络子系统的FDDI模块分析?? Linux网络子系统的hippi模块分析Linux网络子系统的PB022.C模块分析Linux网络子系统的psnap模块分析Linux系统中socket.c模块的分析港口进口业务设计与实施基于Linux系统中sock.c模块分析建材商行商务管理系统师技校网站网络子系统PKTGEN模块的分析网上考核系统-杭州刑侦警务信息平台子系统药库药品管理系统住院管理系统毕业设计管理系统的设计与实现仓库进销存管理系统----库存管理模块成绩管理系统的设计与开发杭州市自助旅游服务系统的开发与设计建材库存管理系统明星个人网站建设农行信贷客户查询与信用等级管理系统皮具销售库存管理信息系统的分析与实现企业网站设计与建设汽车俱乐部管理系统的开发与设计人事工资管理系统人事管理系统瑞安市公交查询系统的设计与实现在线健身商品交易网站设计与实施杭州绿化网网站设计宁波亿泰工贸有限公司企业网站设计企业电子商务网站建设阳光集团人事信息管理系统的设计与实现义乌潜龙玩具厂电子商务网站建设LG分公司家电销售管理系统典当行传统物品管理系统电缆销售管理系统设计(订单管理系统)基于B/S结构的海关人事信息管理系统设计与实现基于WEB的人力资源管理系统家庭理财管理信息系统的设计与开发酒店客房管理系统的分析与设计旅行社业务管理信息系统的设计与实现企业设备档案管理信息系统的设计与实施汽车在线销售系统人事管理系统手机缴费帐务管理系统台帐管理信息系统网上书店的设计与实现小区物业管理信息系统的设计与实现烟草进销存管理信息系统的设计与实现中小型宾馆客房管理系统的实施与分析重庆九龙发电厂内部网站的设计与实现重庆索特集团销售信息管理系统DirectX小型游戏程序设计与分析基于3DS MAX三维建筑模型的设计与实现基于OPENGL的三维游戏引擎分析贪吃蛇游戏程序设计与实现Asp.net 2.0网络技术应用-在线实验教学管理信息系统的开发与设计银行人事管理信息系统的设计与实现珍珠及珍珠饰品(首饰)电子商务网站的设计与实现中学图书室图书管理信息系统从Perl正则表达式到关系数据库模式一种新型正则表达式分析树的建立用Perl语言抽取网页信息正则表达市的可视化构建超声图象管理系统设计与实施城际旅游铁路交通信息查询系统的设计与实现电脑经销物质管理信息系统基于Apriori算法的学籍课程成绩关联规则挖掘研究基于多维数据分析方法的学籍学分预警模型的研究课程教学管理信息系统联创客户关系管理系统的设计和实现审计辅助信息管理系统的设计与实现试题库管理和试卷生成系统图书借阅信息统计分析系统的设计与实现校园导游系统的设计与实现医药销售信息管理系统浙江财经学院校园信息查询网站的设计与实现--基于ASP.NET的WEB项目开发技术研究及应用浙江财经学院信息学院网站综合导师工作管理信息系统仓储管理系统超市商品销售管理系统的设计与实现车辆销售管理系统工厂员工管理系统基于ASP的网上购物系统的开发与实现基于Web技术的网络考试系统的设计与实现健康保健网站健身房管理软件酒店管理系统的设计与实现网络销售系统基于LL(1)算法实现pascal的子集的程序设计语言的语法分析商场进销存系统电脑配件销售管理系统的开发与设计电脑销售客户服务管理信息系统工资管理系统设计与实施零售业物资管理决策系统农村有线电视收费系统人事档案管理系统开发与实施书店管理系统的设计与实现小型旅馆管理信息系统中小型超市管理系统的设计与实现VIP贵宾卡积分消费系统电力参数分析系统的开发与设计电网功率因数自动补偿控制器的研究高等院校课程安排管理系统基于LABVIEW的粮库PH3浓度检测系统的研究基于S3C44BOX+uCLinux的嵌入式用程序的设计与开发基于单片机的电动车测速/里程测量显示系统的设计基于单片机的交通信号控制系统的设计基于单片机的数字式温度测量系统的设计基于单片机的心率测量系统的设计基于单片机的液滴速度测量系统的设计驾校信息管理系统进出口公司货物运输管理系统 汽车配件管理系统的设计与实施题库管理系统智能行出租车计价系统的设计个人主页建设的设计与实现基于XML的RDBMS数据提取方法研究基于构件的GIS软件开发研究玩具租借网站的设计与开发网络搜索引擎机制的研究学生档案管理信息系统的设计与实现中小型企业人事管理系统的开发与实现110指挥中心接处警调度管理系统宾馆客户管理系统个人所得税征管系统的设计与开发考勤管理系统的开发与设计企业人事管理系统信息系统安全策略的制订学生成绩管理信息系统第三方物流在供应链管理下的应用分析--区域经济下的第三方物流电子商务环境下的物流配送突破电子商务瓶颈、提高物流配送效率小区车辆收费管理系统的设计与开发IP网络QoS解决方案Intserv/RSVP研究当前IPV4向IPV6过渡技术浅析服装销售系统互联网路由器备份协议HSRP的研究拉链厂车间管理系统丽水学校校园设计方案网上聊天室程序设计网上人才管理信息系统的设计与实现网上银行系统的模拟与设计小区物业管理系统新天地健康会馆会员系统云和县国税局综合大楼网络规划运输物流信息管理系统在线图书零售系统IDXP(入侵检测信息交换协议)的标准IDXP(入侵检测信息交换协议)的简易实现IDXP协议的简易实现程序漏洞分析与利用基于RoadRunner的对等体间通信技术应用研究计算机网络安全案例分析鞋零售业进销存系统开发与设计出版社期刊出版中心发行业务管理系统纺织业务管理系统公关营销培训学校业务管理系统的设计与实施旅游资源及客户信息管理系统汽配管理系统嵊州市新型农村合作医疗征缴子系统校园网站设计与实现——数学与统计学院网站设计医药管理系统设计与实施银江电子科技有限公司库存管理系统的设计与实施浙江华天机械有限公司的客户信息管理系统的设计与实施住房公积金贷款管理系统餐饮管理系统城市公交线路查询系统房地产客户管理信息系统的设计与开发服装生产管理系统的设计与实现杭州伟星建材销售系统设计与实施基于WEB架构的幼儿园管理系统基于XML的影片租赁系统的开发与设计基于工作流思想的毕业设计管理系统健康风险评估系统社会劳动保障管理局新闻发布系统设计与实现塑料信息网站文件管理系统的开发与设计新闻网站管理系统的设计与实现医院住院管理 1、论文题目:要求准确、简练、醒目、新颖。2、目录:目录是论文中主要段落的简表。(短篇论文不必列目录)3、提要:是文章主要内容的摘录,要求短、精、完整。字数少可几十字,多不超过三百字为宜。4、关键词或主题词:关键词是从论文的题名、提要和正文中选取出来的,是对表述论文的中心内容有实质意义的词汇。关键词是用作机系统标引论文内容特征的词语,便于信息系统汇集,以供读者检索。 每篇论文一般选取3-8个词汇作为关键词,另起一行,排在“提要”的左下方。主题词是经过规范化的词,在确定主题词时,要对论文进行主题,依照标引和组配规则转换成主题词表中的规范词语。5、论文正文:(1)引言:引言又称前言、序言和导言,用在论文的开头。 引言一般要概括地写出作者意图,说明选题的目的和意义, 并指出论文写作的范围。引言要短小精悍、紧扣主题。〈2)论文正文:正文是论文的主体,正文应包括论点、论据、 论证过程和结论。主体部分包括以下内容:a.提出-论点;b.分析问题-论据和论证;c.解决问题-论证与步骤;d.结论。6、一篇论文的参考文献是将论文在和写作中可参考或引证的主要文献资料,列于论文的末尾。参考文献应另起一页,标注方式按《GB7714-87文后参考文献著录规则》进行。中文:标题--作者--出版物信息(版地、版者、版期):作者--标题--出版物信息所列参考文献的要求是:(1)所列参考文献应是正式出版物,以便读者考证。(2)所列举的参考文献要标明序号、著作或文章的标题、作者、出版物信息。

技术跟答辩有一毛钱关系吗

2019/02/07

我记得我年前的时候,我看过很多文章,包括一些论文,主题都是利用AI来玩贪吃蛇这种。他们利用的方法很多,例如利用搜索算法[1],还有利用监督学习来进行训练达到目的的,训练数据的来源是有自己玩游戏产生的(好像有算法是可以让他自己产生的,想不起来是在哪里看到的了。),当然这种正如他自己所说,后续的结果就是机器最多玩的和你一样好,最后一种见的比较多的就是利用强化学习,加上Q-Learning算法的方式。 针对搜索算法部分,可以看前面的一篇随笔《贪吃蛇游戏》。

那段时间看了不少这类的文章,我现在集中阅读一下,并简单理解一下这部分内容的关键部分。无论什么游戏,都有一个 相应的状态空间 的定义,这部分数据,本质上就是这个游戏能展现给我的所有的内容。那么怎么来利用这部分数据,就是你的能力了。

文章[2]中,他是用的方法同时结合了深度学习和强化学习。 (我也想深究一下,如果是仅仅使用强化学习,这个过程又是什么样的,得看我收集的文章中,是不是有这类部分的内容了;我记得好像强化学习就是利用Q-Learning这种算法来实现的) 但是这篇文章感觉说的不够清楚,最重要的那个点就是,强化学习到底是如何跟深度学习联合起来的。可能单单强化学习已经可以完成这个任务了。 我大概理解了这个过程,他是利用强化学习来作为自动化生成数据的过程了,一开始的时候,利用强化学习尽可能得到多的数据,然后采样或者怎么样使得最后的数据作为训练得到效果。 这篇文章讲述的并不是清楚,不推荐。 下面这个图从这篇文章中看到的,挺不错。

文章[3]基于强化学习Q-Learning完成了贪吃蛇的步骤,不过貌似他的这个效果并不是非常好。整个部分的源码他都是利用js来完成的, 讲解部分比较基础, 回答了前一小节的疑问。

本篇文章中,他介绍的另外一个内容挺不错,就是利用神经网络来玩谷歌浏览器的游戏。

文章[5]利用深度学习和遗传算法来训练玩游戏;这部分的文章一系列的内容,从使用pygame设计游戏,到后面自动化产生数据,最后使用GA+ANN直接不需要数据。他的思路 跟前面强化学习是不一样的。 前面部分讲到了自动化产生训练数据的部分,这个部分我感觉讲解的并不是非常好,他的自动化并不是说让游戏自己去探测这个各种内容。反而是根据某种公式来计算角度,最终实现这个过程。后续GA算法的时候又说道可以不是用训练数据。 他利用GA算法应该是使用了两个部分,第一个就是直接使用GA进行训练,他的适应函数(fittness function)部分,类似强化学习的部分,产生奖励和惩罚机制。第二个就是使用GA算法来选择神经网络的架构。 (这部分我也不是很确认,有点没看懂他要干什么) 对于神经网络中的权值部分他是如何进行实现的,这是我的一个疑问。 GA算法到底针对的是哪一部分的内容。这种文章还是有一定缺陷的。GA算法是两部分内容,首先就是权值更新内容。 虽然这篇文章感觉很基础,但我觉的写的不好。

利用学习的办法实现玩游戏的目标,比较重要的问题,有以下几个。

[1] Hawstein,如何用Python写一个贪吃蛇AI [2] 如何让AI玩贪吃蛇:深度强化学习 [3] 利用强化学习玩贪吃蛇 [4] 谷歌小恐龙 [5] 深度学习与贪吃蛇

相关百科

热门百科

首页
发表服务