c++簡易100行貪吃蛇
阿新 • • 發佈:2019-01-03
大一小白的清明節作業。這個貪吃蛇的核心思路是用vector建立物件陣列,將蛇體移動轉化為蛇頭移動並將尾部物件刪除,吃到食物則不刪除尾部。遊戲開始後點擊wasd鍵進行上下左右移動。
#include <iostream> #include<vector> #include<ctime> #include<cstdlib> #include<conio.h> using namespace std; class Snake{ public: int x,y;//記錄每個蛇身單位的座標 bool p;//1為蛇頭,0為尾 Snake(){} Snake(int x,int y,bool p); }; Snake::Snake(int a,int b,bool c){ x=a; y=b; p=c; } int main() { bool timeover; bool food=false;//記錄地圖上有沒有食物 int i=0,x,y,p=0,q=0; char map[20][40]={' '};//初始化地圖 int start;//計錄每次迴圈開始時間用 char wasd='d';//控制方向 bool life=true;//為0時結束遊戲 vector<Snake>s; int w=0,e=0; for(w=0;w<20;w++){//建立圍牆 for(e=0;e<40;e++){ if(w==0||e==0||w==19||e==39){ map[w][e]='o'; } } } s.push_back(Snake(1,4,1)); s.push_back(Snake(1,3,0)); s.push_back(Snake(1,2,0)); s.push_back(Snake(1,1,0));//初始化蛇 while(life){//遊戲迴圈 system("cls"); if(!food){//沒有食物時隨機產生食物 do{ srand((unsigned int)(time(NULL))); x=rand()%19+1; y=rand()%39+1; }while(map[x][y]=='o'||map[x][y]=='a'||map[x][y]=='0'); map[x][y]='$'; food=1; } start=clock(); while((timeover=(clock()-start<=250))&&!kbhit()); if(timeover){wasd=getch();} switch(wasd){ case 'w': s[0].p=0;//將蛇頭設定為蛇身 s.insert(s.begin()+0,Snake(s[0].x-1,s[0].y,1));//把前一格設為蛇頭 if(map[s[0].x][s[0].y]!='o'&&map[s[0].x][s[0].y]!='0'&&map[s[0].x][s[0].y]!='$'){//如果沒撞到牆和食物,將尾部的格子設為空格然後刪除尾部 map[s[s.size()-1].x][s[s.size()-1].y]=' '; s.erase(s.begin()+s.size());} else food=0; break; case 'a': s[0].p=0; s.insert(s.begin()+0,Snake(s[0].x,s[0].y-1,1)); if(map[s[0].x][s[0].y]!='o'&&map[s[0].x][s[0].y]!='0'&&map[s[0].x][s[0].y]!='$'){ map[s[s.size()-1].x][s[s.size()-1].y]=' '; s.erase(s.begin()+s.size());} else food=0; break; case 's': s[0].p=0; s.insert(s.begin()+0,Snake(s[0].x+1,s[0].y,1)); if(map[s[0].x][s[0].y]!='o'&&map[s[0].x][s[0].y]!='0'&&map[s[0].x][s[0].y]!='$'){ map[s[s.size()-1].x][s[s.size()-1].y]=' '; s.erase(s.begin()+s.size());} else food=0; break; case 'd': s[0].p=0; s.insert(s.begin()+0,Snake(s[0].x,(s[0].y)+1,1)); if(map[s[0].x][s[0].y]!='o'&&map[s[0].x][s[0].y]!='0'&&map[s[0].x][s[0].y]!='$'){ map[s[s.size()-1].x][s[s.size()-1].y]=' '; s.erase(s.begin()+s.size());} else food=0; break; } if(map[s[0].x][s[0].y]=='o'||map[s[0].x][s[0].y]=='a'){ life=0; }//撞牆或自己死 i=0; for(i=0;i<s.size();i++){ if(s[i].p==1){map[s[i].x][s[i].y]='0';} else {map[s[i].x][s[i].y]='a';} }//遍歷蛇物件的陣列在地圖上列印蛇 p=0;q=0; for(p=0;p<20;p++){ for(q=0;q<40;q++){ cout<<map[p][q]; } cout<<endl; }//輸出新圖 } cout<<"YOU LOSE!!!HIAHIAHIAHIAHIA"<<endl; return 0; }
在後續測試中發現,將exe檔案移植到其他路徑下會提示缺少libgcc_s_dw2-1.dll,正在尋求解決辦法