📄 loadlevel.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 + -