这个程序是windows环境下完成的,为了更好的做出动画效果,定义了gotoxy函数,主要用了三个 类Game_Map,Snake,和Snake_Game类,在第一次游戏时需要在菜单中初始化玩家数据,用了vector来保存蛇身。

//Windows环境下c++贪食蛇 #include <windows.h>
#include <iostream>
#include <fstream>
#include <conio.h>
#include <vector>
#include <ctime>using namespace std;void gotoxy(int x,int y){          //定义Windows坐标函数 COORD pos = {x,y};    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hOut,pos);
}enum {                             //枚举类型用来表示按键 Up = 72,Down = 80,Left = 75,Right = 77,Enter = 13,Esc = 27
};class Snake_Body{                   //蛇的身体节点数据类型  public:int x;   int y;char body;
};class Player_Data{                  //玩家信息数据类型 public:    char grade[10];char name[10];  int score;
};int Snake_Speed = 100;             //全局变量蛇的速度
char Snake_HeadShape = '#';        //蛇头图形
char Snake_BodyShape = '*';        //蛇身图形
char Snake_PointShape[3] = "*#";   //菜单指针图形 class Game_Map{                  //游戏地图类public:Game_Map();   void Creat_Map();void Show_Logo(int );void Creat_Food();void Creat_Food(Snake_Body *,int );int Stop_Menu();friend class Snake;private:int i,Map_Long,Map_Wide;char Map_Node; Snake_Body Food;
};Game_Map::Game_Map(){              //初始化地图和食物Map_Long = 60;Map_Wide = 24;Map_Node = ' ';Food.body = '$';srand(time(NULL));               //初始化随机数种子 Creat_Map();Creat_Food();
}void Game_Map::Creat_Map(){        //画出地图int x = 2,y = 0,n = 0; while(n<162){     gotoxy(x,y);cout<< Map_Node;  if(x<Map_Long&&y==0){x++;Map_Node = '-';}if(x==Map_Long&&y<Map_Wide){y++;Map_Node = '|';} if(y==Map_Wide&&x>1){x--;Map_Node = '-';} if(x==1&&y>0){y--;Map_Node = '|';} Sleep(10);n++;    }for(i = 1;i!=19;i++){gotoxy(Map_Long+i,5);cout<< "_"; }gotoxy(65,2);  cout<< "SCORE";                  //初始化分数显示栏 gotoxy(66,4);cout<< '0';
}void Game_Map::Show_Logo(int n){   //游戏中动画(笑脸)int x = Map_Long+3,y = 10;if(n==1){ gotoxy(x,y);    cout<< " *********** ";gotoxy(x,y+1);  cout<< "*           *";gotoxy(x,y+2);cout<< "*  !     !  *";gotoxy(x,y+3);cout<< "*           *";gotoxy(x,y+4);cout<< "*   !!!!!   *";gotoxy(x,y+5);cout<< " *********** ";gotoxy(x,y+7);cout<< " Very Careful! "; }else if(n==2){gotoxy(x,y);   cout<< " *********** ";gotoxy(x,y+1);  cout<< "*           *";gotoxy(x,y+2);cout<< "*  ?     ?  *";gotoxy(x,y+3);cout<< "*           *";gotoxy(x,y+4);cout<< "*   ?????   *";gotoxy(x,y+5);cout<< " *********** "; gotoxy(x,y+7);cout<< " Be Careful! ";}
}void Game_Map::Creat_Food(){       //初始化食物Flag: Food.x = rand()%57+2;Food.y = rand()%22+1;if(Food.x==7&&Food.y==3)goto Flag;if(Food.x==8&&Food.y==3)goto Flag;if(Food.x==9&&Food.y==3)goto Flag;gotoxy(Food.x,Food.y);cout<< Food.body;
}//随机产生食物且不与蛇身冲突
void Game_Map::Creat_Food(Snake_Body *s,int length){flag:Food.x = rand()%57+2;Food.y = rand()%22+1;for(i = 0;i!=length-1;i++){if(Food.x==s[i].x&&Food.y==s[i].y)goto flag;  } gotoxy(Food.x,Food.y);cout<< Food.body;
}int Game_Map::Stop_Menu(){           //暂停菜单 int x = Map_Long+6,y = 20; gotoxy(Map_Long+1,y-2);cout<< "__________________";     gotoxy(x,y);cout<< "! Continue";gotoxy(x,y+1);cout<< "! Exit Game"; gotoxy(x-3,y);cout<< Snake_PointShape;while(true){Flag:switch(getch()){case Up:if(y>20){y--;  gotoxy(x-3,y+1);cout<< "  ";gotoxy(x-3,y);cout<< Snake_PointShape;   }   else goto Flag;break;case Down:if(y<21){y++;   gotoxy(x-3,y-1);cout<< "  ";gotoxy(x-3,y);cout<< Snake_PointShape;}else goto Flag;break;case Enter:gotoxy(Map_Long+1,y-2);cout<< "                   ";  gotoxy(x-3,y);cout<< "              ";gotoxy(x-3,y+1);cout<< "              ";     switch(y){case 20:return 1;case 21:return 0;    } break;}}
}class Snake{                       //贪食蛇类public:   Snake();void Console(); void Move_Up();void Move_Down();void Move_Left(); void Move_Right();void Add_Body();void Snake_Dead();int Show_Score();friend class Game_Map;friend class Snake_Game;private:     int Head_X,Head_Y,Length;int i,Move_Flag,Dead_Flag; vector<Snake_Body> snake;      //用动态数组保存蛇身  Snake_Body aBody;Game_Map map;
};Snake::Snake(){                    //初始化蛇int i;   Head_X = 6;    Head_Y = 3;Length = 3;Dead_Flag = 1;aBody.body = ' '; snake.resize(Length);           //初始化动态数组(蛇身)长度 snake[0].body = Snake_HeadShape;for(i = 1;i<Length-1;i++){   snake[i].body = Snake_BodyShape;       }snake[Length-1].body = ' ';snake[0].x = Head_X;                    snake[0].y = Head_Y;    while(snake[0].x<Head_X+4){for(i = Length-1;i!=0;i--){snake[i].x = snake[i-1].x;snake[i].y = snake[i-1].y;}snake[0].x++;for(i = 0;i<Length;i++){gotoxy(snake[i].x,snake[i].y);cout<< snake[i].body;}}
}void Snake::Console(){             //蛇身控制主函数 while(true){Flag:switch(getch()){case Up:if(Move_Flag!=2)Move_Up();else Move_Down();if(Dead_Flag==0)return;goto Flag;break;    case Down:if(Move_Flag!=1)Move_Down();else Move_Up();if(Dead_Flag==0)return;goto Flag;break; case Left:if(Move_Flag!=4)Move_Left();else Move_Right();if(Dead_Flag==0)return;goto Flag;break;case Right:if(Move_Flag!=3)Move_Right();else Move_Left();if(Dead_Flag==0)return;goto Flag;break;case Esc:Dead_Flag = map.Stop_Menu();if(Dead_Flag==0)return;else goto Flag;break; default: switch(Move_Flag){case 1:Move_Up();break;case 2:Move_Down();break;case 3:Move_Left();break;case 4:Move_Right();break; default:goto Flag; }                               } }
}void Snake::Move_Up(){             //蛇身向上移动Move_Flag = 1; while(true){if(kbhit()!=0){return ;}if(snake[0].x==map.Food.x&&snake[0].y==map.Food.y){                               //判断是否吃到食物 Add_Body();                 Show_Score();                //实时显示分数 Snake_Body s[Length];     for(i = 0;i!=Length;i++){s[i] = snake[i];}map.Creat_Food(s,Length);  }Snake_Dead();                  //死亡判断 if(Dead_Flag==0)return;for(int i = Length-1;i>0;i--){snake[i].x = snake[i-1].x;snake[i].y = snake[i-1].y;}snake[0].y--;Sleep(Snake_Speed);for(int i = 0;i<Length;i++){gotoxy(snake[i].x,snake[i].y);cout<< snake[i].body;}if(snake[0].x==2||map.Map_Long-snake[0].x==1)map.Show_Logo(1);elsemap.Show_Logo(2);    }
}void Snake::Move_Down(){          //蛇身向下移动Move_Flag = 2;while(true){if(kbhit()!=0){return;}if(snake[0].x==map.Food.x&&snake[0].y==map.Food.y){                            Add_Body();Show_Score();Snake_Body s[Length];for(i = 0;i!=Length;i++){s[i] = snake[i];}map.Creat_Food(s,Length);  }Snake_Dead();if(Dead_Flag==0)return;for(int i = Length-1;i>0;i--){snake[i].x = snake[i-1].x;snake[i].y = snake[i-1].y;}snake[0].y++;Sleep(Snake_Speed);for(int i = 0;i<Length;i++){gotoxy(snake[i].x,snake[i].y);cout<< snake[i].body;}   if(snake[0].x==2||map.Map_Long-snake[0].x==1)map.Show_Logo(1);elsemap.Show_Logo(2); }
}void Snake::Move_Left(){           //蛇身向左移动Move_Flag = 3;while(true){if(kbhit()!=0){return;}if(snake[0].x==map.Food.x&&snake[0].y==map.Food.y){  Add_Body();Show_Score();Snake_Body s[Length];for(i = 0;i!=Length;i++){s[i] = snake[i];}map.Creat_Food(s,Length);   }Snake_Dead();if(Dead_Flag==0)return;for(int i = Length-1;i>0;i--){snake[i].x = snake[i-1].x;snake[i].y = snake[i-1].y;}snake[0].x--;Sleep(Snake_Speed);for(int i = 0;i<Length;i++){gotoxy(snake[i].x,snake[i].y);cout<< snake[i].body;}if(snake[0].y==1||map.Map_Wide-snake[0].y==1)    map.Show_Logo(1);elsemap.Show_Logo(2);}
}void Snake::Move_Right(){          //蛇身向右移动    Move_Flag = 4;while(true){if(kbhit()!=0){return ;}if(snake[0].x==map.Food.x&&snake[0].y==map.Food.y){ Add_Body();Show_Score();Snake_Body s[Length];for(i = 0;i!=Length;i++){s[i] = snake[i];}map.Creat_Food(s,Length);   }Snake_Dead();if(Dead_Flag==0)return;for(int i = Length-1;i>0;i--){snake[i].x = snake[i-1].x;snake[i].y = snake[i-1].y;}snake[0].x++;Sleep(Snake_Speed);for(int i = 0;i<Length;i++){gotoxy(snake[i].x,snake[i].y);cout<< snake[i].body;}  if(snake[0].y==1||map.Map_Wide-snake[0].y==1)    map.Show_Logo(1);elsemap.Show_Logo(2);  }
}   void Snake::Add_Body(){            //增加蛇身snake[Length-1].body = Snake_BodyShape; Length++;snake.push_back(aBody);
}void Snake::Snake_Dead(){int i = 1;if(snake[0].x==map.Map_Long||snake[0].y==map.Map_Wide||snake[0].x==1||snake[0].y==0){Dead_Flag = 0;   }while(snake[i].body!=' '){if(snake[i].x==snake[0].x&&snake[i].y==snake[0].y)    Dead_Flag = 0;i++; }
}int Snake::Show_Score(){           //显示分数gotoxy(65,2);  cout<< "SCORE";gotoxy(66,4);cout<< Length-3;return Length-3;
}class Snake_Game{                  //贪食蛇游戏类 public:Snake_Game();void Start_Game();void Start_Snake();void Game_Menu();void Game_Setting();void Color_Select();void Grade_Select();void Snake_Select();void SnakeGame_Logo(int );void GameOver_Logo();void Show_Top();void Read_Data();void Init_Data();void Handle_Data(int &);void Game_How(); private:int i,Player_Score,Menu_X,Menu_Y; Player_Data *p,player[4];fstream DataFile;
};Snake_Game::Snake_Game(){          //初始化游?p = NULL;Menu_X = 0;Menu_Y = 0;Read_Data();SnakeGame_Logo(15);
}void Snake_Game::Start_Game(){     //创建蛇对象开始游戏                Snake _snake;_snake.Console();system("cls");GameOver_Logo();                  Player_Score = _snake.Show_Score();Handle_Data(Player_Score);
}void Snake_Game::Start_Snake(){system("cls");Start_Game();
}void Snake_Game::SnakeGame_Logo(int speed){         //开始动画与主菜单                     i = 0,Menu_X = 1,Menu_Y = 0;while(i<197){  if(Menu_X<77&&Menu_Y==0){ Menu_X++;gotoxy(Menu_X,Menu_Y);cout<< '~';     }if(Menu_X==77&&Menu_Y<24){gotoxy(Menu_X,Menu_Y);cout<< '|';  Menu_Y++;} if(Menu_Y==24&&Menu_X>1){     gotoxy(Menu_X,Menu_Y);cout<< '~';Menu_X--;  } if(Menu_X==1&&Menu_Y>0){ Menu_Y--;gotoxy(Menu_X,Menu_Y);cout<< '|'; } Sleep(speed);i++;}Menu_X = 60,Menu_Y = 2; while(Menu_X>4){gotoxy(Menu_X,Menu_Y);cout<< "*********** \n";  gotoxy(Menu_X,Menu_Y+1);cout<< "*********** \n";  gotoxy(Menu_X,Menu_Y+2);cout<< "** \n";    gotoxy(Menu_X,Menu_Y+3);cout<< "** \n";    gotoxy(Menu_X,Menu_Y+4);cout<< "*********** \n";gotoxy(Menu_X,Menu_Y+5);cout<< "*********** \n";gotoxy(Menu_X,Menu_Y+6);cout<< "         ** \n";gotoxy(Menu_X,Menu_Y+7);cout<< "         ** \n";gotoxy(Menu_X,Menu_Y+8);cout<< "*********** \n";gotoxy(Menu_X,Menu_Y+9);cout<< "*********** \n";Sleep(speed);Menu_X--;   }Menu_X = 18,Menu_Y = 2;while(Menu_X<61){gotoxy(Menu_X,Menu_Y);cout<< " ***********\n";  gotoxy(Menu_X,Menu_Y+1);cout<< " ***********\n";  gotoxy(Menu_X,Menu_Y+2);cout<< " **\n";    gotoxy(Menu_X,Menu_Y+3);cout<< " **\n";    gotoxy(Menu_X,Menu_Y+4);cout<< " ***********\n";gotoxy(Menu_X,Menu_Y+5);cout<< " ***********\n";gotoxy(Menu_X,Menu_Y+6);cout<< " **\n";gotoxy(Menu_X,Menu_Y+7);cout<< " **\n";gotoxy(Menu_X,Menu_Y+8);cout<< " ***********\n";gotoxy(Menu_X,Menu_Y+9);cout<< " ***********\n";Sleep(speed);Menu_X++;   } Menu_X = 48,Menu_Y = 2; while(Menu_X>18){gotoxy(Menu_X,Menu_Y);cout<< "**       ** \n";  gotoxy(Menu_X,Menu_Y+1);cout<< "***      ** \n";    gotoxy(Menu_X,Menu_Y+2);cout<< "****     ** \n";   gotoxy(Menu_X,Menu_Y+3);cout<< "** **    ** \n";   gotoxy(Menu_X,Menu_Y+4);cout<< "**  **   ** \n";gotoxy(Menu_X,Menu_Y+5);cout<< "**   **  ** \n";gotoxy(Menu_X,Menu_Y+6);cout<< "**    ** ** \n";gotoxy(Menu_X,Menu_Y+7);cout<< "**     **** \n";gotoxy(Menu_X,Menu_Y+8);cout<< "**      *** \n";gotoxy(Menu_X,Menu_Y+9);cout<< "**       ** \n";Sleep(speed);Menu_X--;   }Menu_X = 32 ,Menu_Y = 2; while(Menu_X<47){gotoxy(Menu_X,Menu_Y);cout<< " ** \n";  gotoxy(Menu_X,Menu_Y+1);cout<< " **      **\n";     gotoxy(Menu_X,Menu_Y+2);cout<< " **    **\n";  gotoxy(Menu_X,Menu_Y+3);cout<< " **  **\n";    gotoxy(Menu_X,Menu_Y+4);cout<< " ****\n";gotoxy(Menu_X,Menu_Y+5);cout<< " ***\n";gotoxy(Menu_X,Menu_Y+6);cout<< " ** **\n";gotoxy(Menu_X,Menu_Y+7);cout<< " **   **\n";gotoxy(Menu_X,Menu_Y+8);cout<< " **     **\n";gotoxy(Menu_X,Menu_Y+9);cout<< " **       **\n";Sleep(speed);Menu_X++;    }   Menu_X = 33,Menu_Y = 13;    while(Menu_Y>1){gotoxy(Menu_X,Menu_Y);cout<< "     * \n";  gotoxy(Menu_X,Menu_Y+1);cout<< "    *** \n";    gotoxy(Menu_X,Menu_Y+2);cout<< "   ** ** \n";  gotoxy(Menu_X,Menu_Y+3);cout<< "  **   ** \n";     gotoxy(Menu_X,Menu_Y+4);cout<< "  **   ** \n";gotoxy(Menu_X,Menu_Y+5);cout<< " ********* \n";gotoxy(Menu_X,Menu_Y+6);cout<< " **     ** \n";gotoxy(Menu_X,Menu_Y+7);cout<< "**       ** \n";gotoxy(Menu_X,Menu_Y+8);cout<< "**       ** \n";gotoxy(Menu_X,Menu_Y+9);cout<< "**       ** \n";gotoxy(Menu_X,Menu_Y+10);cout<< "            \n";Sleep(speed*2);Menu_Y--;   }   Menu_X = 3,Menu_Y = 12; while(Menu_X<77){gotoxy(Menu_X,Menu_Y);cout<< "_"; Menu_X++; }Menu_X = 45,Menu_Y = 14; while(Menu_X>4) {gotoxy(Menu_X,Menu_Y);cout<< " * ** * \n";  gotoxy(Menu_X,Menu_Y+1);cout<< "* .  . * \n";   gotoxy(Menu_X,Menu_Y+2);cout<< "*      * \n";  gotoxy(Menu_X,Menu_Y+3);cout<< "*  -   * \n";  gotoxy(Menu_X,Menu_Y+4);cout<< " *    *      * * \n";gotoxy(Menu_X,Menu_Y+5);cout<< "   *  *    * * * *         * \n";gotoxy(Menu_X,Menu_Y+6);cout<< "    *  * * *    * * *  * ** \n";gotoxy(Menu_X,Menu_Y+7);cout<< "     * * *       * * * * * \n";Sleep(speed*2+10);   Menu_X--;   }   Menu_X = 41,Menu_Y = 15; Sleep(200);gotoxy(Menu_X+4,Menu_Y);cout<< "! Start Game";Sleep(200);gotoxy(Menu_X+7,Menu_Y+2);cout<< "! Smake Menu";Sleep(200);gotoxy(Menu_X+10,Menu_Y+4);cout<< "! Exit Game";Sleep(200);gotoxy(Menu_X+13,Menu_Y+6);cout<< "! About Game";gotoxy(Menu_X,Menu_Y);cout<< Snake_PointShape;while(true){ switch(getch()){case Up: if(Menu_Y>15){Menu_X = Menu_X-3;Menu_Y = Menu_Y-2;gotoxy(Menu_X+3,Menu_Y+2);cout<< "  ";gotoxy(Menu_X,Menu_Y);cout<< Snake_PointShape;}break;case Down:if(Menu_Y<21){ Menu_X = Menu_X+3; Menu_Y = Menu_Y+2;gotoxy(Menu_X-3,Menu_Y-2);cout<< "  ";gotoxy(Menu_X,Menu_Y);cout<< Snake_PointShape;}break;case Enter:switch(Menu_Y){case 15:system("cls");Start_Game();break;        case 17:system("cls");Game_Setting();break;  case 19:exit(0);case 21:Game_How();break;}       break;}}
}void Snake_Game::GameOver_Logo(){       //结束动?int n = 0;Menu_X = 1,Menu_Y = 0;while(n<197){   if(Menu_X<77&&Menu_Y==0){ Menu_X++;gotoxy(Menu_X,Menu_Y);cout<< '~';     }if(Menu_X==77&&Menu_Y<24){gotoxy(Menu_X,Menu_Y);cout<< '|';  Menu_Y++;} if(Menu_Y==24&&Menu_X>1){     gotoxy(Menu_X,Menu_Y);cout<< '~';Menu_X--;  } if(Menu_X==1&&Menu_Y>0){ Menu_Y--;gotoxy(Menu_X,Menu_Y);cout<< '|'; }  n++;}   Menu_X = 25,Menu_Y = 2;gotoxy(Menu_X,Menu_Y); cout<< "*****    *     *   *   *****";Sleep(100);gotoxy(Menu_X,Menu_Y+1); cout<< "*       * *    ** **   *    ";Sleep(100);gotoxy(Menu_X,Menu_Y+2); cout<< "*  **   ***    * * *   *****";Sleep(100);gotoxy(Menu_X,Menu_Y+3); cout<< "*   *  *   *   *   *   *    ";Sleep(100);gotoxy(Menu_X,Menu_Y+4); cout<< "*****  *   *   *   *   *****";Menu_X = 35,Menu_Y = 2;Sleep(100);gotoxy(Menu_X,Menu_Y+6); cout<< " ***    *   *  *****   **** ";Sleep(100);gotoxy(Menu_X,Menu_Y+7); cout<< "*   *   *   *  *       *   *";Sleep(100);gotoxy(Menu_X,Menu_Y+8); cout<< "*   *   *   *  *****   **** ";Sleep(100);gotoxy(Menu_X,Menu_Y+9); cout<< "*   *    * *   *       *  * ";Sleep(100);gotoxy(Menu_X,Menu_Y+10); cout<< " ***      *    *****   *   *";Menu_X = 6,Menu_Y = 12;Sleep(100);gotoxy(Menu_X,Menu_Y); cout<< "  * ** * ";Sleep(100);gotoxy(Menu_X,Menu_Y+1); cout<< " * > <  *";Sleep(100);gotoxy(Menu_X,Menu_Y+2); cout<< " *      *";Sleep(100);gotoxy(Menu_X,Menu_Y+3); cout<< " *  ^   *";Sleep(100);gotoxy(Menu_X,Menu_Y+4); cout<< "  *    *      * *";Sleep(100);gotoxy(Menu_X,Menu_Y+5); cout<< "    *  *    * * * *         *";Sleep(100);gotoxy(Menu_X,Menu_Y+6); cout<< "     *  * * *    * * *  * ** ";Sleep(100);gotoxy(Menu_X,Menu_Y+7); cout<< "      * * *       * * * * *  ";
}void Snake_Game::Game_Setting(){        //游戏二级菜?Menu_X = 4;Menu_Y = 4;gotoxy(8,4);   cout<< "! Color Select";    gotoxy(8,6);cout<< "! Grade Select";gotoxy(8,8);cout<< "! Snake Select";gotoxy(8,10);cout<< "! Check Top";gotoxy(4,4);cout<< Snake_PointShape;gotoxy(3,22);cout<< "Press [Up] or [Down] To Select,Then Press [Enter],Press [Esc] To Return";for(i = 0;i<20;i++){gotoxy(30,i);cout<< "|";    }gotoxy(0,20);for(i = 0;i<80;i++){cout<< "_"; }while(true){Flag:switch(getch()){  case Up:if(Menu_Y>4){Menu_Y = Menu_Y-2;gotoxy(Menu_X,Menu_Y+2);cout<< "  ";gotoxy(Menu_X,Menu_Y);cout<< Snake_PointShape;}else goto Flag;break;case Down: if(Menu_Y<10){Menu_Y = Menu_Y+2;gotoxy(Menu_X,Menu_Y-2);cout<< "  ";gotoxy(Menu_X,Menu_Y);cout<< Snake_PointShape;}else goto Flag;break;case Esc:system("cls");SnakeGame_Logo(0);break;       case Enter:switch(Menu_Y){case 4:gotoxy(Menu_X,Menu_Y); cout<< "  ";    Color_Select();break;case 6: gotoxy(Menu_X,Menu_Y); cout<< "  ";Grade_Select();break;case 8: gotoxy(Menu_X,Menu_Y); cout<< "  ";Snake_Select();break;case 10: gotoxy(Menu_X,Menu_Y);    cout<< "  ";Show_Top();break;}  }   }
}void Snake_Game::Color_Select(){        //色彩选择菜?Menu_X = 45;Menu_Y = 4;gotoxy(Menu_X,Menu_Y);cout<< "! Blue";gotoxy(Menu_X,6);cout<< "! Red  ";gotoxy(Menu_X,8);cout<< "! Green ";gotoxy(Menu_X,10);cout<< "! Purple";gotoxy(Menu_X,12);cout<< "! Yellow";gotoxy(Menu_X,14);cout<< "! white";gotoxy(Menu_X-4,Menu_Y);cout<< Snake_PointShape;while(true){Flag:switch(getch()){case Esc:gotoxy(Menu_X-4,Menu_Y);cout<< "  ";Game_Setting();  case Up:if(Menu_Y>4){Menu_Y = Menu_Y-2;gotoxy(Menu_X-4,Menu_Y+2);cout<< "  ";gotoxy(Menu_X-4,Menu_Y);cout<< Snake_PointShape;}else goto Flag;break;case Down: if(Menu_Y<14){Menu_Y = Menu_Y+2;gotoxy(Menu_X-4,Menu_Y-2);cout<< "  ";gotoxy(Menu_X-4,Menu_Y);cout<< Snake_PointShape;}else goto Flag;break;   case Enter:switch(Menu_Y){case 4:           system("color 1");break;case 6: system("color 4");break;case 8: system("color 2");break;case 10:system("color 5");break;    case 12:system("color 6");break;case 14:system("color 7");break;    }  }    }
}void Snake_Game::Grade_Select(){        //游戏等级选择菜?Menu_X = 45;Menu_Y = 4;gotoxy(Menu_X,Menu_Y);cout<< "! Practice";gotoxy(Menu_X,6);cout<< "! Easy   ";gotoxy(Menu_X,8);cout<< "! Normal ";gotoxy(Menu_X,10);cout<< "! Hard   ";gotoxy(Menu_X,12);cout<< "! Max    ";gotoxy(Menu_X,14);cout<< "        ";gotoxy(Menu_X-4,Menu_Y);cout<< Snake_PointShape;while(true){Flag:switch(getch()){case Esc:gotoxy(Menu_X-4,Menu_Y);cout<< "  ";Game_Setting(); case Up:if(Menu_Y>4){Menu_Y = Menu_Y-2;gotoxy(Menu_X-4,Menu_Y+2);cout<< "  ";gotoxy(Menu_X-4,Menu_Y);cout<< Snake_PointShape;}else goto Flag;break;case Down: if(Menu_Y<12){Menu_Y = Menu_Y+2; gotoxy(Menu_X-4,Menu_Y-2);cout<< "  ";gotoxy(Menu_X-4,Menu_Y);cout<< Snake_PointShape;}else goto Flag;break;   case Enter:switch(Menu_Y){case 4:Snake_Speed = 400;gotoxy(Menu_X-4,4);cout<< "  ";     Game_Setting();         break;case 6:Snake_Speed = 200; gotoxy(Menu_X-4,6);cout<< "  ";    Game_Setting();break;case 8:Snake_Speed = 100;gotoxy(Menu_X-4,8);cout<< "  ";      Game_Setting();break;case 10:Snake_Speed = 50;gotoxy(Menu_X-4,10);cout<< "  ";     Game_Setting();break;   case 12:Snake_Speed = 20;gotoxy(Menu_X-4,Menu_Y);cout<< "  ";      Game_Setting(); break;  }  }    }
}void Snake_Game::Snake_Select(){        //蛇形状选择菜?Menu_X = 45;Menu_Y = 4;gotoxy(Menu_X,Menu_Y);cout<< "! **#     ";gotoxy(Menu_X,6);cout<< "! -->    ";gotoxy(Menu_X,8);cout<< "! ~~@    ";gotoxy(Menu_X,10);cout<< "         ";gotoxy(Menu_X,12);cout<< "         ";gotoxy(Menu_X,14);cout<< "         ";gotoxy(Menu_X-4,Menu_Y);cout<< Snake_PointShape;while(true){Flag:switch(getch()){case Esc:gotoxy(Menu_X-4,Menu_Y);cout<< "  ";Game_Setting();case Up:if(Menu_Y>4){Menu_Y = Menu_Y-2;gotoxy(Menu_X-4,Menu_Y+2);cout<< "  ";gotoxy(Menu_X-4,Menu_Y);cout<< Snake_PointShape;}else goto Flag;break;case Down: if(Menu_Y<8){Menu_Y = Menu_Y+2;gotoxy(Menu_X-4,Menu_Y-2);cout<< "  ";gotoxy(Menu_X-4,Menu_Y);cout<< Snake_PointShape;}else goto Flag;break;  case Enter:switch(Menu_Y){case 4:           strcpy(Snake_PointShape,"*#");Snake_HeadShape = '#';Snake_BodyShape = '*';gotoxy(Menu_X-4,4);cout<< "  ";   Game_Setting();break;case 6: strcpy(Snake_PointShape,"->");Snake_HeadShape = '>';Snake_BodyShape = '-';gotoxy(Menu_X-4,6);cout<< "  ";    Game_Setting();break;case 8:strcpy(Snake_PointShape,"~@");Snake_HeadShape = '@';Snake_BodyShape = '~'; gotoxy(Menu_X-4,8);cout<< "  ";    Game_Setting();break;   }  }    }
}void Snake_Game::Read_Data(){           //读取玩家数?DataFile.open("Data.dat",ios::in|ios::binary);if(!DataFile){cerr << "open error"<< endl;return ;   } for(i = 0;i!=4;i++){  p = new Player_Data;DataFile.read((char *)p,sizeof(Player_Data));player[i] = *p;delete p;}DataFile.close(); strcpy(player[0].grade,"Easy");strcpy(player[1].grade,"Normal");strcpy(player[2].grade,"Hard");strcpy(player[3].grade,"Max");
}void Snake_Game::Init_Data(){           //初始化玩家数?DataFile.open("Data.dat",ios::out|ios::binary);if(!DataFile){cerr << "open error"<< endl;return;  }for(i = 0;i!=4;i++){strcpy(player[i].name,"NULL");   player[i].score = 0;   }strcpy(player[0].grade,"Easy");strcpy(player[1].grade,"Normal");strcpy(player[2].grade,"Hard");strcpy(player[3].grade,"Max");for(i = 0;i!=4;i++){p = &player[i];  DataFile.write((char *)p,sizeof(Player_Data));} DataFile.close();
}void Snake_Game::Show_Top(){            //显示英雄?Menu_X = 45;Menu_Y = 4;while(Menu_Y<15) {gotoxy(Menu_X,Menu_Y);cout<< "          ";Menu_Y = Menu_Y+2;}Menu_X = 40;Menu_Y = 4;gotoxy(Menu_X,Menu_Y);cout<< "| GRADE |---";gotoxy(Menu_X+12,Menu_Y); cout<< "| NAME |----";gotoxy(Menu_X+24,Menu_Y);cout<< "| SCORE |";gotoxy(Menu_X+1,Menu_Y+2);cout<< '['<< player[0].grade<< ']';gotoxy(Menu_X+1,Menu_Y+4);cout<< '['<< player[1].grade<< ']';gotoxy(Menu_X+1,Menu_Y+6);cout<< '['<< player[2].grade<< ']';gotoxy(Menu_X+1,Menu_Y+8);cout<< '['<< player[3].grade<< ']';gotoxy(Menu_X+13,Menu_Y+2);cout<< '['<< player[0].name<< ']';gotoxy(Menu_X+13,Menu_Y+4);cout<< '['<< player[1].name<< ']';gotoxy(Menu_X+13,Menu_Y+6);cout<< '['<< player[2].name<< ']';gotoxy(Menu_X+13,Menu_Y+8);cout<< '['<< player[3].name<< ']';   gotoxy(Menu_X+25,Menu_Y+2);cout<< '['<< player[0].score<< ']';gotoxy(Menu_X+25,Menu_Y+4);cout<< '['<< player[1].score<< ']';gotoxy(Menu_X+25,Menu_Y+6);cout<< '['<< player[2].score<< ']';gotoxy(Menu_X+25,Menu_Y+8);cout<< '['<< player[3].score<< ']';gotoxy(Menu_X+2,Menu_Y+14);cout<< "Press [R] To Init Data!";if(getch()=='r'){gotoxy(Menu_X+2,Menu_Y+15);cout<< "Are You Sure?(Y/N)";if(getch()=='y'){Init_Data();    }else;}system("cls");Game_Setting();
}void Snake_Game::Handle_Data(int &score){           //处理数?switch(Snake_Speed){case 20:if(Player_Score>player[3].score){player[3].score = score;gotoxy(50,16);  cout<< "Good Job!";gotoxy(50,17);   cout<< "Please Enter Your Name :";gotoxy(50,18);        cin>> player[3].name;     }else{gotoxy(40,17);cout<< "Please make persistent efforts !";gotoxy(40,18);cout<< "Press Any Key To Return Menu";   }break;    case 50:if(Player_Score>player[2].score){player[2].score = score;gotoxy(50,16); cout<< "Good Job!";gotoxy(50,17);   cout<< "Please Enter Your Name :";gotoxy(50,18);        cin>> player[2].name;     }else{gotoxy(40,17);cout<< "Please make persistent efforts !";gotoxy(40,18);cout<< "Press Any Key To Return Menu";}break;case 100:if(Player_Score>player[1].score){player[1].score = score;gotoxy(50,16);   cout<< "Good Job!";gotoxy(50,17);   cout<< "Please Enter Your Name :";gotoxy(50,18);        cin>> player[1].name;     }else{gotoxy(40,17);cout<< "Please make persistent efforts !";gotoxy(40,18);cout<< "Press Any Key To Return Menu";} break;case 200:if(Player_Score>player[0].score){player[0].score = score;gotoxy(50,16);  cout<< "Good Job!";gotoxy(50,17);   cout<< "Please Enter Your Name :";gotoxy(50,18);            cin>> player[0].name;     }else{gotoxy(40,17);cout<< "Please Make Persistent Efforts !";gotoxy(40,18);cout<< "Press Any Key To Return Menu";}break;   case 400:break; }   DataFile.open("Data.dat",ios::out|ios::binary);if(!DataFile){cerr << "open error"<< endl;return ;   }for(i = 0;i!=4;i++){p = &player[i];   DataFile.write((char *)p,sizeof(Player_Data));} DataFile.close();getch();system("cls");SnakeGame_Logo(15);
}void Snake_Game::Game_How(){            //游戏说?system("cls"); i = 0,Menu_X = 20,Menu_Y = 5;while(i!=110){gotoxy(Menu_X,Menu_Y);cout<< '*';if(Menu_X!=60&&Menu_Y==5)    {Menu_X++;}   if(Menu_X==60&&Menu_Y!=20){Menu_Y++;}if(Menu_X!=20&&Menu_Y==20){Menu_X--;}if(Menu_X==20&&Menu_Y!=5){Menu_Y--;}i++;}Menu_X = 25,Menu_Y = 8;gotoxy(Menu_X,Menu_Y);cout<< "The up and down or so key ";gotoxy(Menu_X,Menu_Y+2);cout<< "control the movement of the ";gotoxy(Menu_X,Menu_Y+4); cout<< "snake .If encounter itself ";gotoxy(Menu_X,Menu_Y+6);cout<< "or walls, game over .";gotoxy(Menu_X,Menu_Y+8);cout<< "And practice mode into the list"; getch();system("cls");SnakeGame_Logo(0);
}int main()
{   system("title Snake");                  //设置标题 system("mode con cols=80 lines=25");    //设置显示大小 system("color 2");                      //设置初始颜色 Snake_Game snakegame;                   //创建游戏类对象 getch(); return 0;
}

以下是截图

以下是进入游戏 菜单选项(颜色)

(游戏等级)

(蛇身图形)

(英雄榜)

游戏中暂停

游戏结束

c++课程设计之贪食蛇相关推荐

  1. c语言程序设计贪吃蛇需求分析,c语言贪吃蛇课程设计报告.docx

    C?语言课程设计报告 C语言课程设计报告 贪 吃 蛇 专业 学生姓名 班级 学号 完成日期 C?语言课程设计报告 一.游戏规则需求 1.?在打开程序后,出现选择界面,里面包含难度选择,其中难度选择能够 ...

  2. 贪食蛇的C++实现(课程设计)

    世人独爱之,重复感知. --Lrice 设计内容 结合大一学习的<C++面向对象程序设计>课程内容,实现一个简单的控制台游戏程序,游戏名称为贪食蛇.贪食蛇是一款十分经典的休闲游戏,玩家可以 ...

  3. 使用C++设计贪食蛇小游戏

    说明:所有代码均可在Visual Studio 2013上编译执行.并未测试在其它编译器上编译情况. 游戏规则 贪食蛇游戏要求玩家控制方向键(或WSAD键)来控制小蛇的前进方向,以使蛇吃掉面板上随即位 ...

  4. java贪吃蛇设计流程_JAVA版贪食蛇(贪吃蛇)游戏的设计与实现(含录像)

    JAVA版贪食蛇(贪吃蛇)游戏的设计与实现(含录像)(任务书,开题报告,外文翻译,毕业论文12000字,程序代码,MySQL数据库,答辩PPT,答辩视频录像) 摘要 "贪食蛇"游戏 ...

  5. Java版贪食蛇游戏的设计与实现毕业设计

    技术:Java.JSP等 摘要: 使用java语言,贪吃蛇游戏,其界面简单易于操作,受到了世界各地玩家的喜爱.近年来,作为一种的高级语言java收到了大家的欢迎欢迎,具有简单.易于理解的特性,被广泛应 ...

  6. tomcat websock html5,websocket实战(4) websocket版贪食蛇游戏(tomcat官方自带)

    通过前面3篇的阐述,相信可以构建一个简单的socket应用了.当然,也会遗漏了许多知识点,相信会在以后分享的实例中捎带说明下. 本文的主要是分析下tomcat官方自带的贪食蛇游戏.为什么选择分析这个项 ...

  7. java小程序贪吃蛇代码_微信小程序Demo之贪食蛇

    原标题:微信小程序Demo之贪食蛇 差不多大半年前,笔者发布了一篇关于OC版贪食蛇开发的文章,时隔多月,微信小程序横空出世,于是闲来无事的我又写了一个小程序版. 01页面布局 关于小程序笔者就不做介绍 ...

  8. Android 贪食蛇

    初级贪食蛇 文章目录 初级贪食蛇 效果展示: 界面设计 算法设计 游戏面板类 蛇身类 蛇类 方向类 主函数类 效果展示: 界面设计 游戏界面的设计布局我们采用"相对布局中嵌套线性布局&quo ...

  9. 有一只会射子弹的贪食蛇,你见过吗?

    在游戏编程学习过程中,我们可以有意识地对游戏案例进行一些改进和创新,这样不仅能增进学习效果,还能提高编程能力. 这里简单聊聊改进的思路,一般可以从两方面考虑:一是改变原有的玩法规则,二是综合不同案例的 ...

最新文章

  1. Ubuntu下报错PCIe Bus Error:severity=Corrected, type=Physical Layer, id=00e8(Receiver ID)
  2. 部署nodejs项目到服务器的一些总结
  3. linux常用命令 java,Java工程在Linux常用命令
  4. scrcpy投屏_scrcpy 使用教程:将安卓设备投屏到 PC 端
  5. Win32ASM学习[20]:子程序
  6. 【转载】基于rasa的对话系统搭建(上)
  7. 随想录(多学一点汇编语言)
  8. Print2flash在.NET(C#)64位中的使用,即文档在线预览(转载)
  9. centos6.8下安装dc2012
  10. 世事(1987.吴忠)
  11. Tampermonkey 实现 csdn 免登陆复制
  12. SoapUI被动接口的压力测试/性能测试
  13. go Test Benchmark 性能测试
  14. Python画多条线在一个图里
  15. 【天光学术】现当代文学论文:《围城》中人情世情的体现及其描写方法(节选)
  16. μC/OS-II或III移植时keil里面的文件有个金黄色小钥匙的原因
  17. ClickHouse使用实践与规范
  18. 会计资料无纸化已经全面来临,iBox开始步入硬软结合的新时代
  19. Qt Creator实现简易画板代码解析【工具栏】【画板】
  20. microstrip(微带线)、stripline(带状线)的区别

热门文章

  1. python-英文字母的大小写转换
  2. 青龙面板关闭青龙二级验证
  3. sql2000服务器的注册码,安装完成后如何找回SQL Server实例安装时的序列号
  4. 用 InstallShieldX 做教育片的安装
  5. Slidworks2018基础到实战设计视频教程 产品建模 渲染 钣金设计
  6. git时光穿梭机---女神的侧颜
  7. 【翻译】Visual Place Recognition_ A Survey视觉场景识别综述【四】
  8. 图形界面介绍Create Size Blockage
  9. 第二次作业:网易云音乐案例分析
  10. origin导出图片时出现input graph is invalid