(this vb express on console application btw) i'm novice @ programming, bear me - tried make small pokemon battle (cheesy, know) , worked okay except fact enemy attacked 3 times in 1 turn sort of complication. here's code - how can fix this?
module module1 sub main() dim num integer dim num1 integer dim num2 integer dim num3 integer num = 0 console.writeline("select wild zigzagoon's health.") num3 = console.readline console.writeline("select charmander's health.") num2 = console.readline console.writeline("a wild zigzagoon appeared! go, charmander!") while num3 > 0 , num2 > 0 console.writeline("what charmander do? use tackle(1), burn(2), smack(3) or ember(4)?") num1 = console.readline if num1 > 0 , num1 < 2 num3 = num3 - 15 console.writeline("charmander used tackle! zigzagoon took 15 damage! zigzagoon on " & num3) num = num + 1 elseif num = 1 num2 = num2 - 10 console.writeline("zigzagoon used tackle! charmander took 10 damage! charmander on " & num2) elseif num = 2 num2 = num2 - 20 console.writeline("zigzagoon used quick attack! charmander took 15 damage! charmander on" & num2) elseif num = 3 num2 = num2 - 25 console.writeline("zigzagoon used headbutt! charmander took 25 damage! charmander on" & num2) elseif num = 4 num2 = num2 - 40 console.writeline("zigzagoon used take down! charmander took 40 damage! charmander on " & num2) end if if num1 > 1 , num1 < 3 num3 = num3 - 20 console.writeline("charmander used burn! zigzagoon took 20 damage! zigzagoon on " & num3) num = num + 1 elseif num = 1 num2 = num2 - 10 console.writeline("zigzagoon used tackle! charmander took 10 damage! charmander on " & num2) elseif num = 2 num2 = num2 - 20 console.writeline("zigzagoon used quick attack! charmander took 15 damage! charmander on" & num2) elseif num = 3 num2 = num2 - 25 console.writeline("zigzagoon used headbutt! charmander took 25 damage! charmander on" & num2) elseif num = 4 num2 = num2 - 40 console.writeline("zigzagoon used take down! charmander took 40 damage! charmander on " & num2) num = num - 4 end if if num1 > 2 , num1 < 4 num3 = num3 - 30 console.writeline("charmander used smack! zigzagoon took 30 damage! zigzagoon on " & num3) num = num + 1 elseif num = 1 num2 = num2 - 10 console.writeline("zigzagoon used tackle! charmander took 10 damage! charmander on " & num2) elseif num = 2 num2 = num2 - 20 console.writeline("zigzagoon used quick attack! charmander took 15 damage! charmander on" & num2) elseif num = 3 num2 = num2 - 25 console.writeline("zigzagoon used headbutt! charmander took 25 damage! charmander on" & num2) elseif num = 4 num2 = num2 - 40 console.writeline("zigzagoon used take down! charmander took 40 damage! charmander on " & num2) num = num - 4 end if if num1 > 3 , num1 < 5 num3 = num3 - 40 console.writeline("charmander used ember! zigzagoon took 30 damage! zigzagoon on " & num3) elseif num = 1 num2 = num2 - 10 console.writeline("zigzagoon used tackle! charmander took 10 damage! charmander on " & num2) elseif num = 2 num2 = num2 - 20 console.writeline("zigzagoon used quick attack! charmander took 15 damage! charmander on" & num2) elseif num = 3 num2 = num2 - 25 console.writeline("zigzagoon used headbutt! charmander took 25 damage! charmander on" & num2) elseif num = 4 num2 = num2 - 40 console.writeline("zigzagoon used take down! charmander took 40 damage! charmander on " & num2) num = num - 4 end if end while if num3 <= 0 console.writeline("the wild zigzagoon fainted! charmander gained 30 xp!. charmander leveled level 6!") end if end sub end module
the reason why enemy attacks 3 times because there 4 if/end if blocks.
when num set in first if/end if block (num=num+1), gets executed 3 times in subsequent if/end if blocks.
it looks num if statements should nested inside first if statement. there lot of code duplication (which should converted functions) makes harder understand.
i took liberty of rewriting code:
sub main() dim charmanderattack integer dim charmanderhealth integer dim zigzagonattack integer dim zigzagoonhealth integer console.writeline("select wild zigzagoon's health.") zigzagoonhealth = console.readline console.writeline("select charmander's health.") charmanderhealth = console.readline console.writeline("a wild zigzagoon appeared! go, charmander!") zigzagonattack = 0 while zigzagoonhealth > 0 , charmanderhealth > 0 console.writeline("what charmander do? use tackle(1), burn(2), smack(3) or ember(4)?") charmanderattack = console.readline charmanderattacks(charmanderattack, zigzagoonhealth) zigzagonattack += 1 zigzagonattacks(zigzagonattack, charmanderhealth) end while if zigzagoonhealth <= 0 console.writeline("the wild zigzagoon fainted! charmander gained 30 xp!. charmander leveled level 6!") end if end sub sub charmanderattacks(byref charmanderattack integer, byref zigzagoonhealth integer) select case charmanderattack case 1 zigzagoonhealth -= 15 console.writeline("charmander used tackle! zigzagoon took 15 damage! zigzagoon on " & zigzagoonhealth) case 2 zigzagoonhealth -= 20 console.writeline("charmander used burn! zigzagoon took 20 damage! zigzagoon on " & zigzagoonhealth) case 3 zigzagoonhealth -= 30 console.writeline("charmander used smack! zigzagoon took 30 damage! zigzagoon on " & zigzagoonhealth) case 4 zigzagoonhealth -= 40 console.writeline("charmander used ember! zigzagoon took 40 damage! zigzagoon on " & zigzagoonhealth) end select end sub sub zigzagonattacks(byref zigzagonattack integer, byref charmanderhealth integer) select case zigzagonattack case 1 charmanderhealth -= 10 console.writeline("zigzagoon used tackle! charmander took 10 damage! charmander on " & charmanderhealth) case 2 charmanderhealth -= 20 console.writeline("zigzagoon used quick attack! charmander took 20 damage! charmander on " & charmanderhealth) case 3 charmanderhealth -= 25 console.writeline("zigzagoon used headbutt! charmander took 25 damage! charmander on " & charmanderhealth) case 4 charmanderhealth -= 40 console.writeline("zigzagoon used take down! charmander took 40 damage! charmander on " & charmanderhealth) zigzagonattack -= 4 end select end sub
Comments
Post a Comment