PDA

Prikaži potpunu verziju : Izlaz iz petlje


okan 1988
28.3.2012, 12:18
Pozdrav,

Potrebna mi je pomoć. Program izgleda ovako:

//north side quest
if ( player == "Koreans"){
if (get_ctw_int("Koreans") == 0 ) { //Koreans 1
if (get_country_owner("East Laos") == "Koreans") {
ctw_disable_piece_moves();
if (get_country_owner("East Laos") == "Koreans") {
give_player_bonus_card("Food Economic Boom");
if (!ctw_is_war("Koreans", "aztecs")) {
ctw_set_war("Koreans", "aztecs");
}
set_ctw_int("Koreans", 1);
} else {
ctw_give_army("Koreans", "North East Cambodia");
ctw_center_camera("North East Cambodia");
}
}
}
-------------- kraj runde 1
if (get_ctw_int("Koreans") == 1 ) { //Koreans 2
set_ctw_int("Koreans", 2);
ctw_enable_piece_moves();
}
}
------------kraj runde 2

Pokušao sam razne varijante i nemam više snage :eek: pa vas molim ako imate neku ideju kako da prekinem svaku vezu sa ovim programom nakon druge runde.
Naime, u prvoj rundi odreagure komanda ctw_disable_piece_moves();.Pokretanje ctw_int jedini je način da ona funkcioniše jer ne radi recimo sama sa if ili switch. U drugoj rundi uspješno radi i naredba ctw_enable_piece_moves(); međutim , u trećoj i svim ostalim rundama ponovo se uključuje komanda iz prve runde ctw_disable_piece_moves()...Šta da radim, Return, break ili šta već i na koji način... samo pomagajte :facepalm.Stvarno ne kužim!!!

Belphegor
28.3.2012, 13:14
Prvo, kod ti je uzasno nepregledan. Da bi zadrzao lep format i preglednost koristi "code" tagove, znaci ovde tvoj kod, to izgleda ovako:

//north side quest
if ( player == "Koreans")
{
if (get_ctw_int("Koreans") == 0 )
{ //Koreans 1
if (get_country_owner("East Laos") == "Koreans")
{
ctw_disable_piece_moves();
if (get_country_owner("East Laos") == "Koreans")
{
give_player_bonus_card("Food Economic Boom");
if (!ctw_is_war("Koreans", "aztecs"))
{
ctw_set_war("Koreans", "aztecs");
}
set_ctw_int("Koreans", 1);
}
else
{
ctw_give_army("Koreans", "North East Cambodia");
ctw_center_camera("North East Cambodia");
}
}
}
else if (get_ctw_int("Koreans") == 1 )
{ //Koreans 2
set_ctw_int("Koreans", 2);
ctw_enable_piece_moves();
}
}
Drugo, vidim da se dosta puta ponavlja string "Koreans", da bi izbegao mnoge kopije a i moguce greske uradis ovako:

std::string koreans_str = "Koreans";
//north side quest
if ( player == koreans_str)
{
if (get_ctw_int(koreans_str) == 0 )
{ //Koreans 1
if (get_country_owner("East Laos") == koreans_str)
{
ctw_disable_piece_moves();
if (get_country_owner("East Laos") == koreans_str)
{
give_player_bonus_card("Food Economic Boom");
if (!ctw_is_war(koreans_str, "aztecs"))
{
ctw_set_war(koreans_str, "aztecs");
}
set_ctw_int(koreans_str, 1);
}
else
{
ctw_give_army(koreans_str, "North East Cambodia");
ctw_center_camera("North East Cambodia");
}
}
}
else if (get_ctw_int(koreans_str) == 1 )
{ //Koreans 2
set_ctw_int(koreans_str, 2);
ctw_enable_piece_moves();
}
}
Sta radi get_ctw_int() funkcija?

Kod sam po sebi ne objasnjava gde ti je problem. Probaj:

...
set_ctw_int(koreans_str, 1);
continue; // vraca se na pocetak petlje
Ako hoces samo da prekines petlju koristi break ili promeni uslov za petlju:

while(1)
{
...
if(nesto)
break;
}

bool play = true;
...
while(play)
{
...
switch(get_ctw_int(bla_bla))
{
case 1: ...
case 2: ...
case 3:
{
...
if(nesto)
{
play = false;
continue;// vraca se na pocetak petlje i nema efekta na switch za razliku od break-a
}
};
};
...
}
EDIT: Jos resenja:
Ako ti je petlja u funkciji, onda samo:

void foo()
{
while(1)
{
for(...)
{
switch(...)
{
case ...
return;
};
}
}
}
Ili "zli" goto:

while(1)
{
for(...)
{
for(...)
{
switch(...)
{
case ...:
goto end;
};
}
}
}
end:
... //ostatak koda