⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loadlevel.cpp

📁 SDL-Ball这款经典的弹球游戏克隆自arkanoid、dxball、breakout
💻 CPP
字号:
/* ************************************************************************* *     SDL-Ball - DX-Ball/Breakout remake with openGL and SDL for Linux     Copyright (C) 2008 DusteD.dk    This program is free software: you can redistribute it and/or modify    it under the terms of the GNU General Public License as published by    the Free Software Foundation, either version 3 of the License, or    (at your option) any later version.    This program is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    GNU General Public License for more details.    You should have received a copy of the GNU General Public License    along with this program.  If not, see <http://www.gnu.org/licenses/>.  * ************************************************************************* */char randomPowerup(char p){  char powerups[] = { '1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','P','Q','R' };  int chance=0;    if(p=='J')  {    chance = 11;  } else if(p=='K')  {    chance = 21;  } else if(p=='L')  {    chance = 41;  } else if(p=='M')  {    chance = 51;  } else if(p=='N')  {    chance = 61;  } else if(p=='O')  {    chance = 101;  } else {    return(p);  }    int rnd = rand()%100;  if(rnd < chance)  {    rnd=rand()%21; //Der er 21 forskellige powerups    return(powerups[rnd]);  }  return('0');}int loadlevel(string file, brick bricks[] ,int level){  ifstream levelfile(file.data());  if(!levelfile.is_open())  {    cout << " Could not open " << file << endl;    var.quit=1;    return(0);  }  string line;  int levelread=0,brick=0,ch=0;;  var.numlevels=0;    while(!levelfile.eof())  {    getline(levelfile,line);    //Har vi fundet start?    if(levelread == 0)    {      //Nej, er det nu?      if(line.substr(0,11) == "** Start **")      {        levelread++;      }    } else if(levelread == 1)    {      //Er vi stoppet?      if(line.substr(0,10) == "** Stop **")      {        levelread=0;        var.numlevels++;        brick=0;        cout  << "Level "<<var.numlevels<<" found and parsed" << endl;      } else {        //Vi læser data        if(var.numlevels == level)        {          while(line[ch] != 0)          {            bricks[brick].powerup = line[ch];            bricks[brick].type = line[ch+1];                        if(bricks[brick].type == 'D')            {              char rgb[3][5];                            sprintf(rgb[0], "0x%c%c", line[ch+2], line[ch+3]);              sprintf(rgb[1], "0x%c%c", line[ch+4], line[ch+5]);              sprintf(rgb[2], "0x%c%c", line[ch+6], line[ch+7]);                            bricks[brick].color[0] = 0.003921569*(float)strtol(rgb[0], NULL, 16);              bricks[brick].color[1] = 0.003921569*strtol(rgb[1], NULL, 16);              bricks[brick].color[2] = 0.003921569*strtol(rgb[2], NULL, 16);                                          ch +=6;            }            //cout << "Level: " << levelnum  << " brick: " << brick << " Powerup: " << line[ch] << " Type: " << line[ch+1]<<"\n";            brick++;            ch +=2;          }          ch=0;                  } //denne level settes op      }    }  }  cout << "Levelfile read." << endl;  levelfile.close();  return(var.numlevels);}void initlevels(brick bricks[], textureClass texLvl[]){  int brick;    //Formelen for at regne offset ud er: xoffset = framewidth / picturewidth                                      //yoffset = frameheight / pictureheight    //test animation  texLvl[0].prop.ticks = 50;  texLvl[0].prop.cols = 1;  texLvl[0].prop.rows = 8;  texLvl[0].prop.xoffset = 0.25;  texLvl[0].prop.yoffset = 0.125;  texLvl[0].prop.frames = 8;  texLvl[0].prop.bidir = 0;  texLvl[0].prop.playing = 1;    //normal brik  texLvl[1].prop.ticks = 1000;  texLvl[1].prop.cols = 1;  texLvl[1].prop.rows = 1;  texLvl[1].prop.xoffset = 1.0;  texLvl[1].prop.yoffset = 1.0;  texLvl[1].prop.frames = 1;  texLvl[1].prop.playing = 0;  //cement  texLvl[2].prop.ticks = 1000;  texLvl[2].prop.cols = 1;  texLvl[2].prop.rows = 1;  texLvl[2].prop.xoffset = 1.0;  texLvl[2].prop.yoffset = 1.0;  texLvl[2].prop.frames = 1;  texLvl[2].prop.playing = 0;  //DOOM  texLvl[3].prop.ticks = 250;  texLvl[3].prop.cols = 8;  texLvl[3].prop.rows = 16;  texLvl[3].prop.xoffset = 0.125;  texLvl[3].prop.yoffset = 0.062;  texLvl[3].prop.frames = 8;  texLvl[3].prop.bidir=1;  texLvl[3].prop.playing = 1;    //Glass  texLvl[4].prop.ticks = 250;  texLvl[4].prop.cols = 1;  texLvl[4].prop.rows = 2;  texLvl[4].prop.xoffset = 1.0;  texLvl[4].prop.yoffset = 0.5;  texLvl[4].prop.frames = 2;  texLvl[4].prop.bidir=0;  texLvl[4].prop.playing = 0;    //Invisible  texLvl[5].prop.ticks = 250;  texLvl[5].prop.cols = 1;  texLvl[5].prop.rows = 3;  texLvl[5].prop.xoffset = 1.0;  texLvl[5].prop.yoffset = 0.25;  texLvl[5].prop.frames = 3;  texLvl[5].prop.bidir=0;  texLvl[5].prop.playing = 0;    //Set dem op  int row,i;  srand((unsigned)time(0));  i=0;  //cout << endl << endl << "Level: "<< l <<endl;  for(row=0;row<23;row++)  {    // cout << endl<<"Row:"<<row;    for(brick=0;brick < 26; brick++)    {          bricks[i].posx =  -1.54 + (GLfloat)brick*0.1232;      bricks[i].posy =  1+ ((GLfloat)row*0.07)*-1;            if(bricks[i].type != '0')      {        if(bricks[i].type != 'D') //type D får farverne fra loadlevel        {          bricks[i].color[0]=1.0f;          bricks[i].color[1]=1.0f;          bricks[i].color[2]=1.0f;        }                bricks[i].tex=texLvl[1];        bricks[i].active=1;        bricks[i].collide=1;        bricks[i].isdyingnormally=0;        bricks[i].isexploding=0;        bricks[i].reflect=1;        bricks[i].opacity=1.0;        bricks[i].fade=1.0;        bricks[i].fadespeed=0.8;        bricks[i].zoom=1.0;        bricks[i].zoomspeed=0.8;        bricks[i].width=0.0616;        bricks[i].height=0.035;                bricks[i].score=11;        bricks[i].destroytowin=1;        bricks[i].hitsLeft=1;                     bricks[i].powerup = randomPowerup(bricks[i].powerup);        bricks[i].bricknum=brick;        bricks[i].row=row;        nbrick[row][brick] = i; // This brick is active        //cout<<"Brick:"<< nbrick[row][brick]<<endl;      }  else {        bricks[i].score=0;        bricks[i].destroytowin=0;        bricks[i].active=0;        nbrick[row][brick]=-1;       // cout<<"Brick:"<< nbrick[row][brick]<<endl;      }                          if(bricks[i].type == '1')      {        bricks[i].color[0]=0.0f;        bricks[i].color[1]=0.0f;        bricks[i].color[2]=1.0f;            } else if(bricks[i].type == '2')      {        bricks[i].color[0]=1.0f;        bricks[i].color[1]=1.0f;        bricks[i].color[2]=0.0f;            }else if(bricks[i].type == '3')      {        bricks[i].powerup = '0';        bricks[i].tex= texLvl[2];        bricks[i].score=30;        bricks[i].destroytowin=0;              } else if(bricks[i].type == '4')      {        bricks[i].tex=texLvl[4]; //glass texture        bricks[i].hitsLeft = 2; //takes two hits to kill        bricks[i].opacity=0.5f;            } else if(bricks[i].type == '5')      {        bricks[i].color[0]=0.0f;        bricks[i].color[1]=1.0f;        bricks[i].color[2]=0.0f;            } else if(bricks[i].type == '6')      {        bricks[i].color[0]=0.5f;        bricks[i].color[1]=0.5f;        bricks[i].color[2]=0.5f;            } else if(bricks[i].type == '7')      {        bricks[i].color[0]=1.0f;        bricks[i].color[1]=0.0f;        bricks[i].color[2]=1.0f;            } else if(bricks[i].type == '8')      {            } else if(bricks[i].type == '9')      {        bricks[i].tex=texLvl[5]; //invisible texture        bricks[i].tex.frame=1;        bricks[i].hitsLeft = 3; //takes 3 to kill        bricks[i].color[0]=1.0f;        bricks[i].color[1]=0.0f;        bricks[i].color[2]=1.0f;            } else if(bricks[i].type == 'A')      {        bricks[i].color[0]=1.0f;        bricks[i].color[1]=0.0f;        bricks[i].color[2]=0.0f;            } else if(bricks[i].type == 'B')      {        bricks[i].tex=texLvl[0];      } else if(bricks[i].type == 'C')      {        bricks[i].tex=texLvl[3];              }      //cout << "[" << bricks[i].type << "  " << bricks[i].active <<"]";      i++;    }  }  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -