PolizElem* PolizBuild::EvaluateFun(PolizItem **stack) const { char cmd[8] = "build\n"; printf("cmd_build\n"); server.send_message(cmd); robot.begin_constructing(); return 0; }
PolizElem* PolizProd::EvaluateFun(PolizItem **stack) const { int amount; PolizElem *operand1 = Pop(stack); PolizInt *i1 = dynamic_cast<PolizInt*>(operand1); if (!i1) throw PolizExNotInt(operand1); amount = i1->Get(); char cmd[16] = "prod ", str1[9]; sprintf(str1, "%d\n", amount); strcat(cmd, str1); printf("cmd_prod = %s", cmd); server.send_message(cmd); delete operand1; return 0; }
PolizElem* PolizEndTurn::EvaluateFun(PolizItem **stack) const { char cmd0[32] = "# Trading results"; char cmd[16] = "& ENDTURN"; char cmd2[16] = "turn\n"; char *str; int t = 0; robot.set_auct(); server.send_message(cmd2); for (;;) { str = server.read_message(); if (strncmp(str, cmd0, 16)==0) { //in auction table for (;;) { delete str; str = server.read_message(); if ((strncmp(str, "& BOUGHT", 8)==0)|| (strncmp(str, "& SOLD", 6)==0)){ t = 1; robot.add_new_elem(str); } else { if (t==1) { break; } } } } // out auction table if (strncmp(str, "# You are a bankrupt, sorry.", 28)==0) { printf("%s", str); delete str; robot.free_auct_list(); exit(0); } if (strncmp(str, cmd, 9)==0) { delete str; break; } delete str; } return 0; }
PolizElem* PolizBuy::EvaluateFun(PolizItem **stack) const { int amount, price; PolizElem *operand1 = Pop(stack); PolizInt *i1 = dynamic_cast<PolizInt*>(operand1); if (!i1) throw PolizExNotInt(operand1); PolizElem *operand2 = Pop(stack); PolizInt *i2 = dynamic_cast<PolizInt*>(operand2); if (!i2) throw PolizExNotInt(operand2); price = i1->Get(); amount = i2->Get(); robot.expected_raw_sold = amount; robot.expected_raw_price = price; char cmd[32] = "buy "; char str1[9], str2[9]; sprintf(str1, "%d\n", price); sprintf(str2, "%d ", amount); strcat(cmd, str2); strcat(cmd, str1); printf("cmd_buy = %s", cmd); server.send_message(cmd); delete operand1; delete operand2; return 0; }