UNIT* createAllUnits(void) { FILE *f; UNIT *pList; pList = NULL; f = fopen("units.txt", "r"); while (!feof(f)) { UNIT *pUnit; pUnit=createUnit(); fscanf(f, "%s %d %d %d %d %d %d", &(pUnit->Name), &(pUnit->Rang), &(pUnit->FullHP), &(pUnit->FullDefense), &(pUnit->FullMana), &(pUnit->FullAttack), &(pUnit->Concentration)); if (pList==NULL) { pList=pUnit; } else { pList->pNext=pUnit; pUnit->pPrev=pList; pList=pUnit; } } fclose(f); return (UNIT *) pList; }
void UnitInterface::spawnPlayerUnits(const iXY &location, Uint16 player_id, const PlayerUnitConfig &unit_config) { iXY next_loc; UnitBase *unit; unsigned long unit_type_index; unsigned long unit_spawn_count; unsigned long unit_spawn_index; NetMessageEncoder encoder; unit_placement_matrix.reset( location ); for ( unit_type_index = 0; unit_type_index < UnitProfileInterface::getNumUnitTypes(); unit_type_index++ ) { unit_spawn_count = unit_config.getSpawnUnitCount( unit_type_index ); for ( unit_spawn_index = 0; unit_spawn_index < unit_spawn_count; unit_spawn_index++ ) { unit_placement_matrix.getNextEmptyLoc( &next_loc ); unit = createUnit(unit_type_index, next_loc, player_id); assert(unit != 0); UnitRemoteCreate create_mesg(unit->player->getID(), unit->id, next_loc.x, next_loc.y, unit->unit_state.unit_type); encoder.encodeMessage(&create_mesg, sizeof(create_mesg)); } // ** for unit_spawn_index } // ** for unit_type_index encoder.sendEncodedMessage(); }
static int createCode(struct JsonNode *code) { int id = -1; int unit = -1; int state = -1; double itmp = -1; if(json_find_number(code, "id", &itmp) == 0) id = (int)round(itmp); if(json_find_number(code, "unit", &itmp) == 0) unit = (int)round(itmp); if(json_find_number(code, "down", &itmp) == 0) state=0; else if(json_find_number(code, "up", &itmp) == 0) state=1; if(id == -1 || unit == -1 || state == -1) { logprintf(LOG_ERR, "arctech_screen_old: insufficient number of arguments"); return EXIT_FAILURE; } else if(id > 31 || id < 0) { logprintf(LOG_ERR, "arctech_screen_old: invalid id range"); return EXIT_FAILURE; } else if(unit > 15 || unit < 0) { logprintf(LOG_ERR, "arctech_screen_old: invalid unit range"); return EXIT_FAILURE; } else { createMessage(id, unit, state); clearCode(); createUnit(unit); createId(id); createState(state); createFooter(); arctech_screen_old->rawlen = RAW_LENGTH; } return EXIT_SUCCESS; }
void SiegeWorkshop::startTurn(){ Game* game = &Game::getInstance(); if(buildturn != -1 && buildturn <= ((GameScene*)scene)->turnCount) { createUnit(); buildturn = -1; cout<< "creating Catapult" << endl; } }
void User:: makeMove() { int choice; int type; int unit; char move; cout<< "\033[1;33m"<<"Player "<<getName()<<" your turn starts now\033[0m\n"; while(!outOfMoves()) { cout<<"\033[1;32mChoose your move\033[0m\n"<<endl; cout<<"\033[1;32m To create a new unit press 1\033[0m\n"<<endl; cout<<"\033[1;32m To move units press 2\033[0m\n"<<endl; cin>>choice; if(choice== 1) { cout<<"\033[1;32mEnter the type of unit you want to make\033[0m\n"<<endl; cout<<"\033[32mTo create a Mage enter 1\033[0m\n"<<endl; cout<<"\033[32mTo create a Soldier enter 2\033[0m\n"<<endl; cout<<"\033[32mTo create a Thief enter 3\033[0m\n"<<endl; cin>>type; switch (type) { case 1: { createUnit(baracks.at(0)); }; break; case 2: { createUnit(baracks.at(1)); };break; case 3: { createUnit(baracks.at(2)); }break; } } else if(choice== 2)
static int createCode(struct JsonNode *code) { int id = -1; int unit = -1; int state = -1; int all = 0; int learn = -1; double itmp = -1; if(json_find_number(code, "id", &itmp) == 0) id = (int)round(itmp); if(json_find_number(code, "unit", &itmp) == 0) unit = (int)round(itmp); if(json_find_number(code, "all", &itmp) == 0) all = (int)round(itmp); if(json_find_number(code, "off", &itmp) == 0) state=0; else if(json_find_number(code, "on", &itmp) == 0) state=1; if(json_find_number(code, "learn", &itmp) == 0) learn = 1; if(all > 0 && learn > -1) { logprintf(LOG_ERR, "arctech_switch: all and learn cannot be combined"); return EXIT_FAILURE; } else if(id == -1 || (unit == -1 && all == 0) || state == -1) { logprintf(LOG_ERR, "arctech_switch: insufficient number of arguments"); return EXIT_FAILURE; } else if(id > 67108863 || id < 1) { logprintf(LOG_ERR, "arctech_switch: invalid id range"); return EXIT_FAILURE; } else if((unit > 15 || unit < 0) && all == 0) { logprintf(LOG_ERR, "arctech_switch: invalid unit range"); return EXIT_FAILURE; } else { if(unit == -1 && all == 1) { unit = 0; } createMessage(id, unit, state, all, learn); createStart(); clearCode(); createId(id); createAll(all); createState(state); createUnit(unit); createFooter(); arctech_switch->rawlen = RAW_LENGTH; } return EXIT_SUCCESS; }
int main() { Unit *unit; srand( time( NULL ) ); UnitCollection *c = new UnitCollection; Unit *u[SIZE]; time_t seconds; for (int i = 0; i < SIZE; ++i) u[i] = createUnit(); seconds = time( NULL ); for (int i = 0; i < (SIZE/2); ++i) c->prepend( u[i] ); seconds = time( NULL )-seconds; printf( "constructed list of size : %d in %d seconds using prepend\n", SIZE/2, seconds ); printf( "Randomnly inserting %d \n", SIZE/2 ); int ii = SIZE/2; seconds = time( NULL ); while (ii < SIZE) for (un_iter iter = c->createIterator(); !iter.isDone() && ii < SIZE; ++iter) { int rnd = rand(); if (rnd < RAND_MAX/200) { iter.postinsert( u[ii] ); ++ii; } else if (rnd < RAND_MAX/100) { iter.preinsert( u[ii] ); ++ii; } } seconds = time( NULL )-seconds; printf( ".... took %d seconds \n", seconds ); for (int i = 0; i < SIZE/32; ++i) if (rand() < RAND_MAX/20) u[i]->Kill(); printf( "randomly killed SIZE/32 to start off with \n" ); printf( "beginning unitCollection removal/advance operations\n" ); seconds = time( NULL ); int passes = 0; int levels = 0; while ( !c->empty() ) { ++passes; Iteration( c, &levels ); #if !oldtest } #else UnitCollection::FreeUnusedNodes(); }
int main (void) { char uInput= ' '; path *P; unit ** U; int i; U = malloc(sizeof(unit*) * 10); P = createPath(20, 3); for (i = 0; i < 10; i++) { U[i] = createUnit(0,P->x[i],P->y[i]); U[i]->health = U[i]->health - (i * 10); U[i]->pathIndex = i; U[i]->type = i%3; printf("%d\n",U[i]->x); } getch(); initscr(); start_color(); init_pair(text, 7,0); init_pair(blue, 4,0); init_pair(red, 1,0); init_pair(orange, 3,0); init_pair(green, 2,0); while (uInput != 'q') { drawMap(P,20); drawUnits(P,U,10); refresh(); uInput = getch(); } endwin(); printPath(P,20); return(0); }
static int createCode(struct JsonNode *code) { int id = -1; int unit = -1; int state = -1; int all = 0; double itmp = -1; if(json_find_number(code, "id", &itmp) == 0) id = (int)round(itmp); if(json_find_number(code, "unit", &itmp) == 0) unit = (int)round(itmp); if(json_find_number(code, "all", &itmp) == 0) all = 1; if(json_find_number(code, "off", &itmp) == 0) state=0; if(json_find_number(code, "on", &itmp) == 0) state=1; if(id == -1 || (unit == -1 && all == 0) || (state == -1 && all == 1)) { logprintf(LOG_ERR, "beamish_switch: insufficient number of arguments"); return EXIT_FAILURE; } else if(id > 65535 || id < 1) { logprintf(LOG_ERR, "beamish_switch: invalid id range"); return EXIT_FAILURE; } else if((unit > 4 || unit < 1) && all == 0) { logprintf(LOG_ERR, "beamish_switch: invalid unit range"); return EXIT_FAILURE; } else { if(all == 1 && state == 1) unit = 5; if(all == 1 && state == 0) unit = 6; createMessage(id, unit, state, all); clearCode(); createId(id); unit = map[unit]; createUnit(unit); createFooter(); beamish_switch->rawlen = RAW_LENGTH; } return EXIT_SUCCESS; }
static int createCode(JsonNode *code) { int id = -1; int systemcode = -1; int unit = -1; int state = -1; double itmp = -1; if(json_find_number(code, "id", &itmp) == 0) id = (int)round(itmp); if(json_find_number(code, "systemcode", &itmp) == 0) systemcode = (int)round(itmp); if(json_find_number(code, "unit", &itmp) == 0) unit = (int)round(itmp); if(json_find_number(code, "off", &itmp) == 0) state=1; if(json_find_number(code, "on", &itmp) == 0) state=0; if(id == -1 || systemcode == -1 || unit == -1 || state == -1) { logprintf(LOG_ERR, "daycom: insufficient number of arguments"); return EXIT_FAILURE; } else if(id > 63 || id < 0) { logprintf(LOG_ERR, "daycom: invalid id range"); return EXIT_FAILURE; } else if(systemcode > 16999 || systemcode < 0) { logprintf(LOG_ERR, "daycom: invalid systemcode range"); return EXIT_FAILURE; } else if(unit > 7 || unit < 0) { logprintf(LOG_ERR, "daycom: invalid unit range"); return EXIT_FAILURE; } else { createMessage(id, systemcode, unit, state); clearCode(); createId(id); createSystemCode(systemcode); createState(state); createUnit(unit); createFooter(); daycom->rawlen = RAW_LENGTH; state = 0; } return EXIT_SUCCESS; }
void UnitInterface::spawnPlayerUnits(const iXY &location, PlayerID player_id, const PlayerUnitConfig &unit_config) { iXY next_loc; UnitBase *unit; unsigned long unit_type_index; unsigned long unit_spawn_count; unsigned long unit_spawn_index; NetMessageEncoder encoder; unit_placement_matrix.reset( location ); for ( unit_type_index = 0; unit_type_index < UnitProfileInterface::getNumUnitTypes(); unit_type_index++ ) { unit_spawn_count = unit_config.getSpawnUnitCount( unit_type_index ); for ( unit_spawn_index = 0; unit_spawn_index < unit_spawn_count; unit_spawn_index++ ) { unit_placement_matrix.getNextEmptyLoc( &next_loc ); unit = createUnit(unit_type_index, next_loc, player_id); UnitRemoteCreate create_mesg(unit->player->getID(), unit->id, next_loc.x, next_loc.y, unit->unit_state.unit_type); if ( !encoder.encodeMessage(&create_mesg, sizeof(create_mesg)) ) { LOGGER.info("UnitInterface encoder full, sending and resetting"); SERVER->broadcastMessage(encoder.getEncodedMessage(), encoder.getEncodedLen()); encoder.resetEncoder(); encoder.encodeMessage(&create_mesg, sizeof(create_mesg)); } } // ** for unit_spawn_index } // ** for unit_type_index if ( ! encoder.isEmpty() ) { LOGGER.info("UnitInterface sending remaining"); SERVER->broadcastMessage(encoder.getEncodedMessage(), encoder.getEncodedLen()); } }
static int createCode(JsonNode *code) { double itmp = -1; int unit = -1, id = -1, learn = -1, state = -1, all = 0; if(json_find_number(code, "id", &itmp) == 0) id = (int)round(itmp); if(json_find_number(code, "unit", &itmp) == 0) unit = (int)round(itmp); if(json_find_number(code, "all", &itmp) == 0) all = (int)round(itmp); if(json_find_number(code, "learn", &itmp) == 0) learn = (int)round(itmp); if(json_find_number(code, "off", &itmp) == 0) state=0; else if(json_find_number(code, "on", &itmp) == 0) state=1; if(id==-1 || (unit==-1 && all==0) || state==-1) { logprintf(LOG_ERR, "quigg_gt7000: insufficient number of arguments"); return EXIT_FAILURE; } else if(id > 4095 || id < 0) { logprintf(LOG_ERR, "quigg_gt7000: invalid programm code id range"); return EXIT_FAILURE; } else if((unit > 3 || unit < 0) && all == 0) { logprintf(LOG_ERR, "quigg_gt7000: invalid button code unit range"); return EXIT_FAILURE; } else { if(unit == -1 && all == 1) { unit = 4; } quigg_gt7000->rawlen = RAW_LENGTH; createMessage(id, state, unit, all, learn); clearCode(); createId(id); createUnit(unit); createState(state); createParity(); createFooter(); } return EXIT_SUCCESS; }
Unit* UnitFactory::parseUnitBuffer( NetBuffer &netbuf ) { ObjSerial serial = netbuf.getSerial(); string file( netbuf.getString() ); string name( netbuf.getString() ); string fullname( netbuf.getString() ); bool sub = netbuf.getChar(); int faction = netbuf.getInt32(); string fname( netbuf.getString() ); string custom( netbuf.getString() ); int fg_num = netbuf.getInt32(); cerr<<"NETCREATE UNIT : "<<file<<" ("<<serial<<")"<<endl; string facname = FactionUtil::GetFactionName( faction ); if ( facname.empty() ) { //Got an invalid faction number... cerr<<" Unit has an invalid faction "<<faction<<endl; faction = 0; } Flightgroup *fg = NULL; if ( !fname.empty() ) { fg = mission[0].findFlightgroup( fname, facname ); if (!fg) fg = Flightgroup::newFlightgroup( fname, file, facname, "default", 1, 1, "", "", mission ); } Unit *un = createUnit( file.c_str(), sub, faction, custom, fg, fg_num, NULL, serial ); if (netbuf.version() <= 4951) un->curr_physical_state = netbuf.getTransformation(); else netbuf.getClientState().setUnitState( un ); un->name = name; un->fullname = fullname; return un; }
void overmind(gameMap_t * self, sf::RenderWindow & window, selection_t * cUnit,sf::Sprite & aCell, sf::Sprite & aEnemy, cursor_t * gCur, sf::Sprite & gameBackground, sf::Sprite & gameInterface, sf::Sprite & gameMenu, sf::Sprite & gameEndTurn, int player, sf::Sprite & cTc, player_t*pl, sf::Sprite & cBc){ resources_t r; r.count = 0; r.optimal = 0; int tCost=200; int bCost=150; int ran; if(pl->resourcesPlayer2>=bCost){ if(pl->resourcesPlayer2>=tCost){ createUnit(self,pl,1,3,window,cUnit,gameBackground,gameInterface,gameMenu,gameEndTurn,cTc,cBc); }else{ createUnit(self,pl,1,4,window,cUnit,gameBackground,gameInterface,gameMenu,gameEndTurn,cTc,cBc); } } for(int i = 0;i<cellNumX*cellNumY;i++){ r.op[i] = NULL; } for(int i = 0;i<cellNumX;i++){ for(int j = 0;j<cellNumY;j++){ if(self->cell[i][j].object!=NULL&&self->cell[i][j].obj_un_null==1&&self->cell[i][j].object->type==0){ r.op[r.count] = &self->cell[i][j]; r.count++; } } } for(int i = 0;i<cellNumX;i++){ for(int j = 0;j<cellNumY;j++){ if (self->cell[i][j].unit!=NULL&&self->cell[i][j].obj_un_null==1) { if(self->cell[i][j].unit->player == 1){ selection_t tSel; setSelect(&self->cell[i][j],&tSel); while(tSel.cell->unit->cPoints>0){ if(overmindAttack(self,window,&tSel,aCell,aEnemy,gCur,gameBackground,gameInterface,gameMenu,gameEndTurn,1,cTc,pl,cBc)==1){ continue; } if(overmindFoundResources(self,window,&tSel,aCell,aEnemy,gCur,gameBackground,gameInterface,gameMenu,gameEndTurn,1,cTc,pl,cBc,i,j,&r)==1){ continue; } tSel.cell->unit->cPoints-=1; } } } } } getOP(self,pl); getResources(self,1,pl); }
void getUnit(ifstream& input,vector<Unit>& vecUnit) { if(!input) return; string str; while(1) { str.clear(); getline(input,str); if(str=="<Unit::nx type=全数>") {//需要先读取很多行无用信息才能找到目标行,检索方法可以考虑改进 str.clear(); getline(input,str); vector<string> vecUnitHeader=split(str); int UnitEqColumn(0);//识别表头 int UnitV_RateColumn(0); int UnitP_RateColumn(0); int UnitTopoNodeColumn(0); int UnitPColumn(0); int UnitQColumn(0); int UnitUeColumn(0); int UnitAngColumn(0); int UnitOffColumn(0); int UnitP_HColumn(0); int UnitP_LColumn(0); int UnitQ_HColumn(0); int UnitQ_LColumn(0); int UnitVoltColumn(0); for(size_t t=0;t<vecUnitHeader.size();++t) {//考虑switch,更清晰 if(vecUnitHeader[t]=="Eq") { UnitEqColumn=t; } else if(vecUnitHeader[t]=="V_Rate") { UnitV_RateColumn=t; } else if(vecUnitHeader[t]=="P_Rate") { UnitP_RateColumn=t; } else if(vecUnitHeader[t]=="node") { UnitTopoNodeColumn=t; } else if(vecUnitHeader[t]=="P") { UnitPColumn=t; } else if(vecUnitHeader[t]=="Q") { UnitQColumn=t; } else if(vecUnitHeader[t]=="Ue") { UnitUeColumn=t; } else if(vecUnitHeader[t]=="Ang") { UnitAngColumn=t; } else if(vecUnitHeader[t]=="off") { UnitOffColumn=t; } else if(vecUnitHeader[t]=="P_H") { UnitP_HColumn=t; } else if(vecUnitHeader[t]=="P_L") { UnitP_LColumn=t; } else if(vecUnitHeader[t]=="Q_H") { UnitQ_HColumn=t; } else if(vecUnitHeader[t]=="Q_L") { UnitQ_LColumn=t; } else if(vecUnitHeader[t]=="Volt") { UnitVoltColumn=t; } else continue; } const int UnitEqColumnConst=UnitEqColumn;//识别表头 const int UnitV_RateColumnConst=UnitV_RateColumn; const int UnitP_RateColumnConst=UnitP_RateColumn; const int UnitTopoNodeColumnConst=UnitTopoNodeColumn; const int UnitPColumnConst=UnitPColumn; const int UnitQColumnConst=UnitQColumn; const int UnitUeColumnConst=UnitUeColumn; const int UnitAngColumnConst=UnitAngColumn; const int UnitOffColumnConst=UnitOffColumn; const int UnitP_HColumnConst=UnitP_HColumn; const int UnitP_LColumnConst=UnitP_LColumn; const int UnitQ_HColumnConst=UnitQ_HColumn; const int UnitQ_LColumnConst=UnitQ_LColumn; const int UnitVoltColumnConst=UnitVoltColumn; //记录所需要行列的位置 str.clear();//其中一行数据是不需要的,先清除一行数据 getline(input,str); str.clear(); getline(input,str); while(str!="</Unit::nx>") { vector<string> vec=split(str); //所有数据都已经存放在vec中,接下来是选出有用数据,对数所进行转换 bool eq=stringToBool(vec[UnitEqColumnConst]); double v_Rate=stringToDouble(vec[UnitV_RateColumnConst]); double p_Rate=stringToDouble(vec[UnitP_RateColumnConst]); string topoNode=vec[UnitTopoNodeColumnConst]; double p=stringToDouble(vec[UnitPColumnConst]); double q=stringToDouble(vec[UnitQColumnConst]); double ue=stringToDouble(vec[UnitUeColumnConst]); double ang=stringToDouble(vec[UnitAngColumnConst]); bool off=stringToBool(vec[UnitOffColumnConst]); double p_H=stringToDouble(vec[UnitP_HColumnConst]); double p_L=stringToDouble(vec[UnitP_LColumnConst]); double q_H=stringToDouble(vec[UnitQ_HColumnConst]); double q_L=stringToDouble(vec[UnitQ_LColumnConst]); int volt=stringToInt(vec[UnitVoltColumnConst]); //在bus表中找到对应的节点才创建ACline对象 Unit unit=createUnit(eq,v_Rate,p_Rate,topoNode,p,q,ue,ang,off, p_H,p_L,q_H,q_L,volt); vecUnit.push_back(unit); str.clear(); getline(input,str); } } if(str=="</Unit::nx>") break; } }
void gameClient(sf::RenderWindow & window,char * mapName){ int i,/*displacementX=0,displacementY=0,*/ menu=0; gameMap_t map; // int redrawMMAP = 1; cursor_t gCur; gCur.status = 0; gCur.cell = NULL; player_t players; players.resourcesPlayer1 = 400; players.resourcesPlayer2 = 400; // player_t player2; unsigned int currentPlayerTurn=0; selection_t select; select.status=0; select.cell=NULL; createMap(&map); /* Set textures. */ sf::Texture background, interface_image,menu1,menu2,grind,cursor,pCourse,endTurn1,endTurn2,sel,enemy,fpT,spT,cT1,cT2,cB1,cB2; sf::Sprite gameBackground,gameInterface,gameMenu,gameGrind,gameCursor,aCell,gameEndTurn,cSel,cEnemy,cpT,cTc,cBc; menu1.loadFromFile("gameInterface/menu.png"); fpT.loadFromFile("gameInterface/fpTurn.png"); spT.loadFromFile("gameInterface/spTurn.png"); enemy.loadFromFile("gameInterface/enemyCell.png"); sel.loadFromFile("gameInterface/selected.png"); menu2.loadFromFile("gameInterface/menuConfirmed.png"); grind.loadFromFile("maps/grind.png"); endTurn1.loadFromFile("gameInterface/endTurn.png"); endTurn2.loadFromFile("gameInterface/endTurnConfirmed.png"); cT1.loadFromFile("gameInterface/cTank.png"); cT2.loadFromFile("gameInterface/cTankC.png"); cB1.loadFromFile("gameInterface/cBuggy.png"); cB2.loadFromFile("gameInterface/cBuggyC.png"); //test addUnit(&map,window,0,TANK,15,0); addUnit(&map,window,0,BUGGY,12,0); addUnit(&map,window,0,TANK,9,0); addUnit(&map,window,1,TANK,27,18); addUnit(&map,window,1,BUGGY,30,18); addUnit(&map,window,1,TANK,33,18); addObject(&map,window,0,20,12); addObject(&map,window,0,10,10); addObject(&map,window,0,30,8); cpT.setPosition(130,0); cursor.loadFromFile("gameInterface/setCell.png"); pCourse.loadFromFile("gameInterface/availableCell.png"); background.loadFromFile(mapName); interface_image.loadFromFile("gameInterface/mainInterface.png"); gameBackground.setTexture(background); cSel.setTexture(sel); aCell.setTexture(pCourse); gameGrind.setTexture(grind); gameInterface.setTexture(interface_image); cEnemy.setTexture(enemy); gameCursor.setTexture(cursor); drawMinMap(window,currentPlayerTurn,&map); while (window.isOpen()){ cameraMouseMove(window,&map); mouseEvents(window,&map); menu=gameSelection(window,gameMenu,menu1,menu2,gameEndTurn,endTurn1,endTurn2,cTc,cT1,cT2,cBc,cB1,cB2); gameBackground.setPosition(map.displacementX,map.displacementY); gameInterface.setPosition(-1,-1); gameMenu.setPosition(1700,0); gameEndTurn.setPosition(1500,5); cTc.setPosition(1680,750); cBc.setPosition(1680,890); selectUnit(&map,window,cSel,&select,currentPlayerTurn); if(select.status==1){ cSel.setPosition(select.cell->X,select.cell->Y); } sf::Event event; if (sf::Mouse::isButtonPressed(sf::Mouse::Left)&&menu==1){ if(pauseMenu(window)==0){ break; } } if (sf::Mouse::isButtonPressed(sf::Mouse::Left)&&menu>=3){ createUnit(&map,&players,currentPlayerTurn,menu,window,&select,gameBackground,gameInterface,gameMenu,gameEndTurn,cTc,cBc); } if (sf::Mouse::isButtonPressed(sf::Mouse::Left)&&menu==2){ isEnd(&map,window,endFn); getOP(&map,&players); getResources(&map,currentPlayerTurn,&players); deleteSelect(&select); overmind(&map,window,&select,aCell,cEnemy,&gCur,gameBackground,gameInterface,gameMenu,gameEndTurn,currentPlayerTurn,cTc,&players,cBc); endTurn(&map); Sleep(500); } if (sf::Mouse::isButtonPressed(sf::Mouse::Right)){ deleteSelect(&select); } while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) { window.close(); } } window.clear(sf::Color::Black); window.draw(gameBackground); drawUnits(&map,window); if(cursorConfirm(window,&map,gameCursor,&gCur)==1){ window.draw(gameCursor); } if(select.status==1){ window.draw(cSel); findWay(&map,window,&select,aCell,cEnemy,&gCur,gameBackground,gameInterface,gameMenu,gameEndTurn,currentPlayerTurn,cTc,&players,cBc); } window.draw(gameInterface); if(select.status==1){ pData(window,&select); } window.draw(gameMenu); window.draw(gameEndTurn); drawMinMap(window,currentPlayerTurn,&map); drawPlayer(window,currentPlayerTurn,&players); window.draw(cTc); window.draw(cBc); window.display(); } }
static void handle_unit_start(LoadMibState *state, const char **atts) { int znbr = 0; char *zname = NULL; int rsp = 0; char **att; char *name; char *value; Unit *unit; if (noMibYet(state)) return; if (state->venture == NULL) { return noteLoadError(state, "Venture not specified."); } for (att = (char **) atts; *att; att++) { name = *att; att++; value = *att; if (strcmp(name, "nbr") == 0) { znbr = atoi(value); } else if (strcmp(name, "name") == 0) { zname = value; } else if (strcmp(name, "resync_period") == 0) { rsp = atoi(value); } else return noteLoadError(state, "Unknown attribute."); } if (zname == NULL) { return noteLoadError(state, "Need name of unit."); } unit = lookUpUnit(state->venture, zname); switch (state->currentOperation) { case LoadAdding: if (unit == NULL) { unit = createUnit(state->venture, znbr, zname, rsp); if (unit == NULL) { return putErrmsg("Couldn't add unit.", zname); } } else { return noteLoadError(state, "Unit already in MIB."); } break; case LoadChanging: return noteLoadError(state, "'Change' not yet implemented."); case LoadDeleting: if (unit == NULL) { return noteLoadError(state, "No such unit."); } state->target = unit; /* May be deletion target. */ break; default: return noteLoadError(state, "Not in an operation."); } }
static int createCode(struct JsonNode *code) { int id = -1; int unit = -1; int state = -1; int all = 0; int dimlevel = -1; int learn = -1; int max = 15; int min = 0; double itmp = -1; if(json_find_number(code, "dimlevel-maximum", &itmp) == 0) max = (int)round(itmp); if(json_find_number(code, "dimlevel-minimum", &itmp) == 0) min = (int)round(itmp); if(json_find_number(code, "id", &itmp) == 0) id = (int)round(itmp); if(json_find_number(code, "unit", &itmp) == 0) unit = (int)round(itmp); if(json_find_number(code, "dimlevel", &itmp) == 0) dimlevel = (int)round(itmp); if(json_find_number(code, "all", &itmp) == 0) all = (int)round(itmp); if(json_find_number(code, "learn", &itmp) == 0) learn = 1; if(json_find_number(code, "off", &itmp) == 0) state=0; else if(json_find_number(code, "on", &itmp) == 0) state=1; if(all > 0 && learn > -1) { logprintf(LOG_ERR, "arctech_dimmer: all and learn cannot be combined"); return EXIT_FAILURE; } else if(id == -1 || (unit == -1 && all == 0) || (dimlevel == -1 && state == -1)) { logprintf(LOG_ERR, "arctech_dimmer: insufficient number of arguments"); return EXIT_FAILURE; } else if(id > 67108863 || id < 1) { logprintf(LOG_ERR, "arctech_dimmer: invalid id range"); return EXIT_FAILURE; } else if((unit > 15 || unit < 0) && all == 0) { logprintf(LOG_ERR, "arctech_dimmer: invalid unit range"); return EXIT_FAILURE; } else if(dimlevel != -1 && (dimlevel > max || dimlevel < min) ) { logprintf(LOG_ERR, "arctech_dimmer: invalid dimlevel range"); return EXIT_FAILURE; } else if(dimlevel >= 0 && state == 0) { logprintf(LOG_ERR, "arctech_dimmer: dimlevel and off state cannot be combined"); return EXIT_FAILURE; } else { if(unit == -1 && all == 1) { unit = 0; } if(dimlevel >= 0) { state = -1; } createMessage(id, unit, state, all, dimlevel, learn); createStart(); clearCode(); createId(id); createAll(all); createState(state); createUnit(unit); if(dimlevel > -1) { createDimlevel(dimlevel); } createFooter(); arctech_dimmer->rawlen = RAW_LENGTH; } return EXIT_SUCCESS; }
void CUnitManager::process_ai() { for(unsigned int i = 0 ; i < units.size(); i++) { if(units[i].health > 0) { units[i].lx = units[i].x; units[i].ly = units[i].y; SUnit* trg = NULL; unsigned int range = 0; switch(units[i].r) { case 1: for(unsigned int r = 1; r < 5; r++) { range = r; trg = getUnitByPos(units[i].x,units[i].y+r); if(!Map->getMapTile(units[i].x,units[i].y+r)->passable or trg) break; } if(trg) { unit_shot(&units[i],trg,range); continue; } break; case 2: for(unsigned int r = 1; r < 5; r++) { range = r; trg = getUnitByPos(units[i].x+r,units[i].y); if(!Map->getMapTile(units[i].x+r,units[i].y)->passable or trg) break; } if(trg) { unit_shot(&units[i],trg,range); continue; } break; case 3: for(unsigned int r = 1; r < 5; r++) { range = r; trg = getUnitByPos(units[i].x,units[i].y-r); if(!Map->getMapTile(units[i].x,units[i].y-r)->passable or trg) break; } if(trg) { unit_shot(&units[i],trg,range); continue; } break; case 4: for(unsigned int r = 1; r < 5; r++) { range = r; trg = getUnitByPos(units[i].x-r,units[i].y); if(!Map->getMapTile(units[i].x-r,units[i].y)->passable or trg) break; } if(trg) { unit_shot(&units[i],trg,range); continue; } break; } switch(units[i].r) { case 1: if(units[i].fm or (Map->getMapTile(units[i].x,units[i].y+1)->passable and not Map->getMapTile(units[i].x-1,units[i].y)->passable) ) { units[i].y++; units[i].fm = 0; break; } else { if(Map->getMapTile(units[i].x-1,units[i].y)->passable) { units[i].r = 4; units[i].fm = 1; break; } if(not Map->getMapTile(units[i].x-1,units[i].y)->passable) { units[i].r = 2; break; } } break; case 2: if(units[i].fm or (Map->getMapTile(units[i].x+1,units[i].y)->passable and not Map->getMapTile(units[i].x,units[i].y+1)->passable)) { units[i].x++; units[i].fm = 0; break; } else { if( Map->getMapTile(units[i].x,units[i].y+1)->passable) { units[i].r = 1; units[i].fm = 1; break; } if( not Map->getMapTile(units[i].x,units[i].y+1)->passable) { units[i].r = 3; break; } } break; case 3: if(units[i].fm or (Map->getMapTile(units[i].x,units[i].y-1)->passable and not Map->getMapTile(units[i].x+1,units[i].y)->passable)) { units[i].y--; units[i].fm = 0; break; } else { if(Map->getMapTile(units[i].x+1,units[i].y)->passable) { units[i].r = 2; units[i].fm = 1; break; } if(not Map->getMapTile(units[i].x+1,units[i].y)->passable) { units[i].r = 4; break; } } break; case 4: if(units[i].fm or (Map->getMapTile(units[i].x-1,units[i].y)->passable and not Map->getMapTile(units[i].x,units[i].y-1)->passable)) { units[i].x--; units[i].fm = 0; break; } else { if(Map->getMapTile(units[i].x,units[i].y-1)->passable) { units[i].r = 3; units[i].fm = 1; break; } if(not Map->getMapTile(units[i].x,units[i].y-1)->passable) { units[i].r = 1; break; } } default: units[i].r = (rand()%4)+1; break; } if(units[i].r == 5) units[i].r = 1; } else { units.erase(units.begin() + i); createUnit(); } } }