1. 程式人生 > >c++簡易100行貪吃蛇

c++簡易100行貪吃蛇

大一小白的清明節作業。這個貪吃蛇的核心思路是用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,正在尋求解決辦法