Kellään tietoa VB6-tuetusta pyöristyskeinosta desimaalinumero seuraavaan suurempaan tasalukuun ?
Esim. 1.00990909001011 -> 2
Tarkoitat yksinkertaisesti kokonaisluku pyöristystä ja se hoituukin yksinkertaisesti int funktiolla:
MsgBox Int(1.00990909001011)
Eikös Int vain leikkaa desimaaliosan pois? Näin ainakin C:ssä, ja niin putkan opaskin tuntuu väittävän.
VB-opas kirjoitti:
Luvun muuttaminen kokonaisluvuksi niin, että pyöristys menee oikein, tapahtuu Round-funktiolla. Funktion toisena parametrina voi olla desimaalien määrä. Esimerkiksi Round(15.7) = 16 ja Round(1.2345, 2) = 1.23.
Lisää pyöristettävään lukuu 0.5 ja käytä Round-funktiota.
Muistaakseni VB:ssä Int(number) pyöristää alaspäin, jolloin Int(number) + 1 pyöristää ylöspäin.
Toimisiko tämä?
-Int(-luku)
Vertailua:
luku Round(luku+0.5) Int(luku)+1 -Int(-luku) ---------------------------------------------------------------- 2 2 3 2 2.1 3 3 3 2.3 3 3 3 2.5 3 3 3 2.7 3 3 3 2.9 3 3 3 3 4 4 3 3.1 4 4 4 3.3 4 4 4 3.5 4 4 4
Kaavojen toiminnassa on siis eroja, kun luku on valmiiksi tasaluku.
En ymmärrä mitä teen väärin. List1:seen tulostuu aina vain sama litannia
10 --> 11 Kill !1! Guards of HP22
11 --> 12 Kill !1! Guards of HP22
12 --> 13 Kill !1! Guards of HP22
13 --> 14 Kill !1! Guards of HP22
14 --> 15 Kill !1! Guards of HP22
15 --> 16 Kill !1! Guards of HP22
16 --> 17 Kill !1! Guards of HP22
17 --> 18 Kill !1! Guards of HP22
18 --> 19 Kill !1! Guards of HP22
19 --> 20 Kill !1! Guards of HP22
-aivan- sama mitä funktiota käytän. Olen vääntänyt tätä koodia jo yön plus tämän aamun ILMAN TULOSTA ! :@ Huomatkaa erikoismerkattu !1!, ylhäältä alas sen pitäisi olla tyyliin 1 3 5 7 9 11 13 15 17 19 EIKÄ MIKÄÄN KIROTTU 1.
'JULISTUKSET Option Explicit Const Level1XP = 0 Const Level2XP = 83 Const Level3XP = 174 Const Level4XP = 276 Const Level5XP = 388 Const Level6XP = 512 Const Level7XP = 650 Const Level8XP = 801 Const Level9XP = 969 Const Level10XP = 1154 Const Level11XP = 1358 Const Level12XP = 1584 Const Level13XP = 1833 Const Level14XP = 2107 Const Level15XP = 2411 Const Level16XP = 2746 Const Level17XP = 3115 Const Level18XP = 3523 Const Level19XP = 3973 Const Level20XP = 4470 Const Level21XP = 5018 Const Level22XP = 5624 Const Level23XP = 6291 Const Level24XP = 7028 Const Level25XP = 7842 Const Level26XP = 8740 Const Level27XP = 9730 Const Level28XP = 10824 Const Level29XP = 12031 Const Level30XP = 13363 Const Level31XP = 14833 Const Level32XP = 16456 Const Level33XP = 18247 Const Level34XP = 20224 Const Level35XP = 22406 Const Level36XP = 24815 Const Level37XP = 27473 Const Level38XP = 30408 Const Level39XP = 33648 Const Level40XP = 37224 Const Level41XP = 41171 Const Level42XP = 45529 Const Level43XP = 50339 Const Level44XP = 55649 Const Level45XP = 61512 Const Level46XP = 67983 Const Level47XP = 75127 Const Level48XP = 83014 Const Level49XP = 91721 Const Level50XP = 101333 Const Level51XP = 111945 Const Level52XP = 123660 Const Level53XP = 136594 Const Level54XP = 150872 Const Level55XP = 166636 Const Level56XP = 184040 Const Level57XP = 203254 Const Level58XP = 224466 Const Level59XP = 247886 Const Level60XP = 273742 Const Level61XP = 302288 Const Level62XP = 333804 Const Level63XP = 368599 Const Level64XP = 407015 Const Level65XP = 449428 Const Level66XP = 496254 Const Level67XP = 547953 Const Level68XP = 605032 Const Level69XP = 668051 Const Level70XP = 737627 Const Level71XP = 814445 Const Level72XP = 899257 Const Level73XP = 992895 Const Level74XP = 1096278 Const Level75XP = 1210421 Const Level76XP = 1336443 Const Level77XP = 1475581 Const Level78XP = 1629200 Const Level79XP = 1798808 Const Level80XP = 1986068 Const Level81XP = 2192818 Const Level82XP = 2421087 Const Level83XP = 2673114 Const Level84XP = 2951373 Const Level85XP = 3258594 Const Level86XP = 3597792 Const Level87XP = 3972294 Const Level88XP = 4385776 Const Level89XP = 4842295 Const Level90XP = 5346332 Const Level91XP = 5902831 Const Level92XP = 6517253 Const Level93XP = 7195629 Const Level94XP = 7944614 Const Level95XP = 8771558 Const Level96XP = 9684577 Const Level97XP = 10692629 Const Level98XP = 11805606 Const Level99XP = 13034431 Const GuardHP = 22 Public varCalc Public CurLVL As Integer '/JULISTUKSET Private Sub Command1_Click() Select Case Val(txtCurrentXP.Text) Case Val(Level1XP) To Val(Level2XP - 1): CurLVL = 1 Case Val(Level2XP) To Val(Level3XP - 1): CurLVL = 2 Case Val(Level3XP) To Val(Level4XP - 1): CurLVL = 3 Case Val(Level4XP) To Val(Level5XP - 1): CurLVL = 4 Case Val(Level5XP) To Val(Level6XP - 1): CurLVL = 5 Case Val(Level6XP) To Val(Level7XP - 1): CurLVL = 6 Case Val(Level7XP) To Val(Level8XP - 1): CurLVL = 7 Case Val(Level8XP) To Val(Level9XP - 1): CurLVL = 8 Case Val(Level9XP) To Val(Level10XP - 1): CurLVL = 9 Case Val(Level10XP) To Val(Level11XP - 1): CurLVL = 10 Case Val(Level11XP) To Val(Level12XP - 1): CurLVL = 11 Case Val(Level12XP) To Val(Level13XP - 1): CurLVL = 12 Case Val(Level13XP) To Val(Level14XP - 1): CurLVL = 13 Case Val(Level14XP) To Val(Level15XP - 1): CurLVL = 14 Case Val(Level15XP) To Val(Level16XP - 1): CurLVL = 15 Case Val(Level16XP) To Val(Level17XP - 1): CurLVL = 16 Case Val(Level17XP) To Val(Level18XP - 1): CurLVL = 17 Case Val(Level18XP) To Val(Level19XP - 1): CurLVL = 18 Case Val(Level19XP) To Val(Level20XP - 1): CurLVL = 19 Case Val(Level20XP) To Val(Level21XP - 1): CurLVL = 20 Case Val(Level21XP) To Val(Level22XP - 1): CurLVL = 21 Case Val(Level22XP) To Val(Level23XP - 1): CurLVL = 22 Case Val(Level23XP) To Val(Level24XP - 1): CurLVL = 23 Case Val(Level24XP) To Val(Level25XP - 1): CurLVL = 24 Case Val(Level25XP) To Val(Level26XP - 1): CurLVL = 25 Case Val(Level26XP) To Val(Level27XP - 1): CurLVL = 26 Case Val(Level27XP) To Val(Level28XP - 1): CurLVL = 27 Case Val(Level28XP) To Val(Level29XP - 1): CurLVL = 28 Case Val(Level30XP) To Val(Level30XP - 1): CurLVL = 29 Case Val(Level31XP) To Val(Level31XP - 1): CurLVL = 30 Case Val(Level32XP) To Val(Level32XP - 1): CurLVL = 31 Case Val(Level32XP) To Val(Level33XP - 1): CurLVL = 32 Case Val(Level33XP) To Val(Level34XP - 1): CurLVL = 33 Case Val(Level34XP) To Val(Level35XP - 1): CurLVL = 34 Case Val(Level35XP) To Val(Level36XP - 1): CurLVL = 35 Case Val(Level36XP) To Val(Level37XP - 1): CurLVL = 36 Case Val(Level37XP) To Val(Level38XP - 1): CurLVL = 37 Case Val(Level38XP) To Val(Level39XP - 1): CurLVL = 38 Case Val(Level39XP) To Val(Level40XP - 1): CurLVL = 39 Case Val(Level40XP) To Val(Level41XP - 1): CurLVL = 40 Case Val(Level41XP) To Val(Level42XP - 1): CurLVL = 41 Case Val(Level42XP) To Val(Level43XP - 1): CurLVL = 42 Case Val(Level43XP) To Val(Level44XP - 1): CurLVL = 43 Case Val(Level44XP) To Val(Level45XP - 1): CurLVL = 44 Case Val(Level45XP) To Val(Level46XP - 1): CurLVL = 45 Case Val(Level46XP) To Val(Level47XP - 1): CurLVL = 46 Case Val(Level47XP) To Val(Level48XP - 1): CurLVL = 47 Case Val(Level48XP) To Val(Level49XP - 1): CurLVL = 48 Case Val(Level49XP) To Val(Level50XP - 1): CurLVL = 49 Case Val(Level50XP) To Val(Level51XP - 1): CurLVL = 50 Case Val(Level51XP) To Val(Level52XP - 1): CurLVL = 51 Case Val(Level52XP) To Val(Level53XP - 1): CurLVL = 52 Case Val(Level53XP) To Val(Level54XP - 1): CurLVL = 53 Case Val(Level54XP) To Val(Level55XP - 1): CurLVL = 54 Case Val(Level55XP) To Val(Level56XP - 1): CurLVL = 55 Case Val(Level56XP) To Val(Level57XP - 1): CurLVL = 56 Case Val(Level57XP) To Val(Level58XP - 1): CurLVL = 57 Case Val(Level58XP) To Val(Level59XP - 1): CurLVL = 58 Case Val(Level59XP) To Val(Level60XP - 1): CurLVL = 59 Case Val(Level60XP) To Val(Level61XP - 1): CurLVL = 60 Case Val(Level61XP) To Val(Level62XP - 1): CurLVL = 61 Case Val(Level62XP) To Val(Level63XP - 1): CurLVL = 62 Case Val(Level63XP) To Val(Level64XP - 1): CurLVL = 63 Case Val(Level64XP) To Val(Level65XP - 1): CurLVL = 64 Case Val(Level65XP) To Val(Level66XP - 1): CurLVL = 65 Case Val(Level66XP) To Val(Level67XP - 1): CurLVL = 66 Case Val(Level67XP) To Val(Level68XP - 1): CurLVL = 67 Case Val(Level68XP) To Val(Level69XP - 1): CurLVL = 68 Case Val(Level69XP) To Val(Level70XP - 1): CurLVL = 69 Case Val(Level70XP) To Val(Level71XP - 1): CurLVL = 70 Case Val(Level71XP) To Val(Level72XP - 1): CurLVL = 71 Case Val(Level72XP) To Val(Level73XP - 1): CurLVL = 72 Case Val(Level73XP) To Val(Level74XP - 1): CurLVL = 73 Case Val(Level74XP) To Val(Level75XP - 1): CurLVL = 74 Case Val(Level75XP) To Val(Level76XP - 1): CurLVL = 75 Case Val(Level76XP) To Val(Level77XP - 1): CurLVL = 76 Case Val(Level77XP) To Val(Level78XP - 1): CurLVL = 77 Case Val(Level78XP) To Val(Level79XP - 1): CurLVL = 78 Case Val(Level79XP) To Val(Level80XP - 1): CurLVL = 79 Case Val(Level80XP) To Val(Level81XP - 1): CurLVL = 80 Case Val(Level81XP) To Val(Level82XP - 1): CurLVL = 81 Case Val(Level82XP) To Val(Level83XP - 1): CurLVL = 82 Case Val(Level83XP) To Val(Level84XP - 1): CurLVL = 83 Case Val(Level84XP) To Val(Level85XP - 1): CurLVL = 84 Case Val(Level85XP) To Val(Level86XP - 1): CurLVL = 85 Case Val(Level86XP) To Val(Level87XP - 1): CurLVL = 86 Case Val(Level87XP) To Val(Level88XP - 1): CurLVL = 87 Case Val(Level88XP) To Val(Level89XP - 1): CurLVL = 88 Case Val(Level89XP) To Val(Level90XP - 1): CurLVL = 89 Case Val(Level90XP) To Val(Level91XP - 1): CurLVL = 90 Case Val(Level91XP) To Val(Level92XP - 1): CurLVL = 91 Case Val(Level92XP) To Val(Level93XP - 1): CurLVL = 92 Case Val(Level93XP) To Val(Level94XP - 1): CurLVL = 93 Case Val(Level94XP) To Val(Level95XP - 1): CurLVL = 94 Case Val(Level95XP) To Val(Level96XP - 1): CurLVL = 95 Case Val(Level96XP) To Val(Level97XP - 1): CurLVL = 96 Case Val(Level97XP) To Val(Level98XP - 1): CurLVL = 97 Case Val(Level98XP) To Val(Level99XP - 1): CurLVL = 98 Case Val(Level99XP) To Val(Level99XP + 86965568): CurLVL = 99 End Select List1.Clear Do While Not CurLVL >= txtTargetLVL.Text varCalc = ((Val(txtTargetLVL.Text) - CurLVL) / (4 * GuardHP)) List1.AddItem CurLVL & " --> " & (CurLVL + 1) & " " & "Kill " & (Int(varCalc) + 1) & " Guards of 22HP" CurLVL = CurLVL + 1 Loop End Sub Private Sub txtcurrentxp_Change() Select Case Val(txtCurrentXP.Text) Case Val(Level1XP) To Val(Level2XP - 1): lblCurrentLVL.Caption = "[ lvl1 ]" Case Val(Level2XP) To Val(Level3XP - 1): lblCurrentLVL.Caption = "[ lvl2 ]" Case Val(Level3XP) To Val(Level4XP - 1): lblCurrentLVL.Caption = "[ lvl3 ]" Case Val(Level4XP) To Val(Level5XP - 1): lblCurrentLVL.Caption = "[ lvl4 ]" Case Val(Level5XP) To Val(Level6XP - 1): lblCurrentLVL.Caption = "[ lvl5 ]" Case Val(Level6XP) To Val(Level7XP - 1): lblCurrentLVL.Caption = "[ lvl6 ]" Case Val(Level7XP) To Val(Level8XP - 1): lblCurrentLVL.Caption = "[ lvl7 ]" Case Val(Level8XP) To Val(Level9XP - 1): lblCurrentLVL.Caption = "[ lvl8 ]" Case Val(Level9XP) To Val(Level10XP - 1): lblCurrentLVL.Caption = "[ lvl9 ]" Case Val(Level10XP) To Val(Level11XP - 1): lblCurrentLVL.Caption = "[ lvl10 ]" Case Val(Level11XP) To Val(Level12XP - 1): lblCurrentLVL.Caption = "[ lvl11 ]" Case Val(Level12XP) To Val(Level13XP - 1): lblCurrentLVL.Caption = "[ lvl12 ]" Case Val(Level13XP) To Val(Level14XP - 1): lblCurrentLVL.Caption = "[ lvl13 ]" Case Val(Level14XP) To Val(Level15XP - 1): lblCurrentLVL.Caption = "[ lvl14 ]" Case Val(Level15XP) To Val(Level16XP - 1): lblCurrentLVL.Caption = "[ lvl15 ]" Case Val(Level16XP) To Val(Level17XP - 1): lblCurrentLVL.Caption = "[ lvl16 ]" Case Val(Level17XP) To Val(Level18XP - 1): lblCurrentLVL.Caption = "[ lvl17 ]" Case Val(Level18XP) To Val(Level19XP - 1): lblCurrentLVL.Caption = "[ lvl18 ]" Case Val(Level19XP) To Val(Level20XP - 1): lblCurrentLVL.Caption = "[ lvl19 ]" Case Val(Level20XP) To Val(Level21XP - 1): lblCurrentLVL.Caption = "[ lvl20 ]" Case Val(Level21XP) To Val(Level22XP - 1): lblCurrentLVL.Caption = "[ lvl21 ]" Case Val(Level22XP) To Val(Level23XP - 1): lblCurrentLVL.Caption = "[ lvl22 ]" Case Val(Level23XP) To Val(Level24XP - 1): lblCurrentLVL.Caption = "[ lvl23 ]" Case Val(Level24XP) To Val(Level25XP - 1): lblCurrentLVL.Caption = "[ lvl24 ]" Case Val(Level25XP) To Val(Level26XP - 1): lblCurrentLVL.Caption = "[ lvl25 ]" Case Val(Level26XP) To Val(Level27XP - 1): lblCurrentLVL.Caption = "[ lvl26 ]" Case Val(Level27XP) To Val(Level28XP - 1): lblCurrentLVL.Caption = "[ lvl27 ]" Case Val(Level28XP) To Val(Level29XP - 1): lblCurrentLVL.Caption = "[ lvl28 ]" Case Val(Level30XP) To Val(Level30XP - 1): lblCurrentLVL.Caption = "[ lvl29 ]" Case Val(Level31XP) To Val(Level31XP - 1): lblCurrentLVL.Caption = "[ lvl30 ]" Case Val(Level32XP) To Val(Level32XP - 1): lblCurrentLVL.Caption = "[ lvl31 ]" Case Val(Level32XP) To Val(Level33XP - 1): lblCurrentLVL.Caption = "[ lvl32 ]" Case Val(Level33XP) To Val(Level34XP - 1): lblCurrentLVL.Caption = "[ lvl33 ]" Case Val(Level34XP) To Val(Level35XP - 1): lblCurrentLVL.Caption = "[ lvl34 ]" Case Val(Level35XP) To Val(Level36XP - 1): lblCurrentLVL.Caption = "[ lvl35 ]" Case Val(Level36XP) To Val(Level37XP - 1): lblCurrentLVL.Caption = "[ lvl36 ]" Case Val(Level37XP) To Val(Level38XP - 1): lblCurrentLVL.Caption = "[ lvl37 ]" Case Val(Level38XP) To Val(Level39XP - 1): lblCurrentLVL.Caption = "[ lvl38 ]" Case Val(Level39XP) To Val(Level40XP - 1): lblCurrentLVL.Caption = "[ lvl39 ]" Case Val(Level40XP) To Val(Level41XP - 1): lblCurrentLVL.Caption = "[ lvl40 ]" Case Val(Level41XP) To Val(Level42XP - 1): lblCurrentLVL.Caption = "[ lvl41 ]" Case Val(Level42XP) To Val(Level43XP - 1): lblCurrentLVL.Caption = "[ lvl42 ]" Case Val(Level43XP) To Val(Level44XP - 1): lblCurrentLVL.Caption = "[ lvl43 ]" Case Val(Level44XP) To Val(Level45XP - 1): lblCurrentLVL.Caption = "[ lvl44 ]" Case Val(Level45XP) To Val(Level46XP - 1): lblCurrentLVL.Caption = "[ lvl45 ]" Case Val(Level46XP) To Val(Level47XP - 1): lblCurrentLVL.Caption = "[ lvl46 ]" Case Val(Level47XP) To Val(Level48XP - 1): lblCurrentLVL.Caption = "[ lvl47 ]" Case Val(Level48XP) To Val(Level49XP - 1): lblCurrentLVL.Caption = "[ lvl48 ]" Case Val(Level49XP) To Val(Level50XP - 1): lblCurrentLVL.Caption = "[ lvl49 ]" Case Val(Level50XP) To Val(Level51XP - 1): lblCurrentLVL.Caption = "[ lvl50 ]" Case Val(Level51XP) To Val(Level52XP - 1): lblCurrentLVL.Caption = "[ lvl51 ]" Case Val(Level52XP) To Val(Level53XP - 1): lblCurrentLVL.Caption = "[ lvl52 ]" Case Val(Level53XP) To Val(Level54XP - 1): lblCurrentLVL.Caption = "[ lvl53 ]" Case Val(Level54XP) To Val(Level55XP - 1): lblCurrentLVL.Caption = "[ lvl54 ]" Case Val(Level55XP) To Val(Level56XP - 1): lblCurrentLVL.Caption = "[ lvl55 ]" Case Val(Level56XP) To Val(Level57XP - 1): lblCurrentLVL.Caption = "[ lvl56 ]" Case Val(Level57XP) To Val(Level58XP - 1): lblCurrentLVL.Caption = "[ lvl57 ]" Case Val(Level58XP) To Val(Level59XP - 1): lblCurrentLVL.Caption = "[ lvl58 ]" Case Val(Level59XP) To Val(Level60XP - 1): lblCurrentLVL.Caption = "[ lvl59 ]" Case Val(Level60XP) To Val(Level61XP - 1): lblCurrentLVL.Caption = "[ lvl60 ]" Case Val(Level61XP) To Val(Level62XP - 1): lblCurrentLVL.Caption = "[ lvl61 ]" Case Val(Level62XP) To Val(Level63XP - 1): lblCurrentLVL.Caption = "[ lvl62 ]" Case Val(Level63XP) To Val(Level64XP - 1): lblCurrentLVL.Caption = "[ lvl63 ]" Case Val(Level64XP) To Val(Level65XP - 1): lblCurrentLVL.Caption = "[ lvl64 ]" Case Val(Level65XP) To Val(Level66XP - 1): lblCurrentLVL.Caption = "[ lvl65 ]" Case Val(Level66XP) To Val(Level67XP - 1): lblCurrentLVL.Caption = "[ lvl66 ]" Case Val(Level67XP) To Val(Level68XP - 1): lblCurrentLVL.Caption = "[ lvl67 ]" Case Val(Level68XP) To Val(Level69XP - 1): lblCurrentLVL.Caption = "[ lvl68 ]" Case Val(Level69XP) To Val(Level70XP - 1): lblCurrentLVL.Caption = "[ lvl69 ]" Case Val(Level70XP) To Val(Level71XP - 1): lblCurrentLVL.Caption = "[ lvl70 ]" Case Val(Level71XP) To Val(Level72XP - 1): lblCurrentLVL.Caption = "[ lvl71 ]" Case Val(Level72XP) To Val(Level73XP - 1): lblCurrentLVL.Caption = "[ lvl72 ]" Case Val(Level73XP) To Val(Level74XP - 1): lblCurrentLVL.Caption = "[ lvl73 ]" Case Val(Level74XP) To Val(Level75XP - 1): lblCurrentLVL.Caption = "[ lvl74 ]" Case Val(Level75XP) To Val(Level76XP - 1): lblCurrentLVL.Caption = "[ lvl75 ]" Case Val(Level76XP) To Val(Level77XP - 1): lblCurrentLVL.Caption = "[ lvl76 ]" Case Val(Level77XP) To Val(Level78XP - 1): lblCurrentLVL.Caption = "[ lvl77 ]" Case Val(Level78XP) To Val(Level79XP - 1): lblCurrentLVL.Caption = "[ lvl78 ]" Case Val(Level79XP) To Val(Level80XP - 1): lblCurrentLVL.Caption = "[ lvl79 ]" Case Val(Level80XP) To Val(Level81XP - 1): lblCurrentLVL.Caption = "[ lvl80 ]" Case Val(Level81XP) To Val(Level82XP - 1): lblCurrentLVL.Caption = "[ lvl81 ]" Case Val(Level82XP) To Val(Level83XP - 1): lblCurrentLVL.Caption = "[ lvl82 ]" Case Val(Level83XP) To Val(Level84XP - 1): lblCurrentLVL.Caption = "[ lvl83 ]" Case Val(Level84XP) To Val(Level85XP - 1): lblCurrentLVL.Caption = "[ lvl84 ]" Case Val(Level85XP) To Val(Level86XP - 1): lblCurrentLVL.Caption = "[ lvl85 ]" Case Val(Level86XP) To Val(Level87XP - 1): lblCurrentLVL.Caption = "[ lvl86 ]" Case Val(Level87XP) To Val(Level88XP - 1): lblCurrentLVL.Caption = "[ lvl87 ]" Case Val(Level88XP) To Val(Level89XP - 1): lblCurrentLVL.Caption = "[ lvl88 ]" Case Val(Level89XP) To Val(Level90XP - 1): lblCurrentLVL.Caption = "[ lvl89 ]" Case Val(Level90XP) To Val(Level91XP - 1): lblCurrentLVL.Caption = "[ lvl90 ]" Case Val(Level91XP) To Val(Level92XP - 1): lblCurrentLVL.Caption = "[ lvl91 ]" Case Val(Level92XP) To Val(Level93XP - 1): lblCurrentLVL.Caption = "[ lvl92 ]" Case Val(Level93XP) To Val(Level94XP - 1): lblCurrentLVL.Caption = "[ lvl93 ]" Case Val(Level94XP) To Val(Level95XP - 1): lblCurrentLVL.Caption = "[ lvl94 ]" Case Val(Level95XP) To Val(Level96XP - 1): lblCurrentLVL.Caption = "[ lvl95 ]" Case Val(Level96XP) To Val(Level97XP - 1): lblCurrentLVL.Caption = "[ lvl96 ]" Case Val(Level97XP) To Val(Level98XP - 1): lblCurrentLVL.Caption = "[ lvl97 ]" Case Val(Level98XP) To Val(Level99XP - 1): lblCurrentLVL.Caption = "[ lvl98 ]" Case Val(Level99XP) To Val(Level99XP + 86965568): lblCurrentLVL.Caption = "[ lvl99 ]" End Select End Sub
Ööh. Jos tämä nyt ei ole trolli, niin pari vinkkiä:
1) Kannattaa opetella käyttämään tietorakenteita, vaikka ihan aluksi taulukoita (Array)
2) Ei kannata käyttää dailywtf:n koodeja opiskelumateriaalina
Mutta jos kuitenkin mietitään mitä olet käskenyt sen koodisi tehdä, niin käsittääkseni halusit siis seuraavan tulostuksen:
14 --> 15 Kill 9 Guards of HP22
Oletan että txtTargetLVL on 20, GuardHP = 22
varCalc = ((Val(txtTargetLVL.Text) - CurLVL) / (4 * GuardHP))
varCalc = (20 - 14) / (4 * 22) = 6 / 88 = 3 / 44 = n. 0,07
Joten luonnollisesti (Int(varCalc) + 1) = 0+1 = 1
Vinkki koodaukseen: vältä turhaa toistoa.
Vinkki pelin koodaukseen: älä turhaan käytä energiaa 99 levelin naputteluun, jos peli ei toimi vielä kolmellakaan oikein.
' Hakee levelin alimman XP:n Public Function GetLevelXP(Level As Integer) GetLevelXP = ... ' Itse tekisin ennemmin kivan lausekkeen, mutta käytä Iffiä, jos siltä tuntuu. >_> End Function ' Hakee levelin, kun XP tiedetään Public Function GetLevelByXP(XP As Integer) Dim Level As Integer Level = 1 Do While GetLevelXP(Level + 1) <= XP Level = Level + 1 Loop GetLevelByXP = Level End Function ' Irtovinkki: CurrentLVL = GetLevelByXP(Val(txtCurrXP.Text)) lblCurrentLVL.Caption = "[ " & CurrentLVL & " ]"
Edit: Jaa, eipä ollut VB:n kommenttimerkki enää muistissa... :)
Metabolix kirjoitti:
älä turhaan käytä energiaa 99 levelin naputteluun, jos peli ei toimi vielä kolmellakaan oikein.
Ylipäätään on mielestäni aika outoa laittaa 99 tasoa magic numbereita, kun luultavasti tuossa on taustalla jokin kaava. Eli voisi hyvin alussa vaikka laskea ne taulukkoon loopissa. Mutta jos nyt on pakko olla juuri tietyt numerot, niin edelleen taulukkoon että niitä voi käsitellä parilla rivillä eikä tuollaisilla sadan rivin case-lauseilla.
Ilomielin käyttäisin muita keinoja kuin tuossa koodissani käy ilmi jos yleensäkään osaisin monimutkaisempia, täytyyhän ohjelma saada simppelisti toimimaan ensin ;) Toisaalta tämä kyseessä oleva koodi on laskinohjelma. Anyway, oli ohjelma mikä vain, vinkit ovat aina tervetulleita :)
Sovellan noita vinkkejä pikimmiten. Kiitän jo etuajassa.
Kannattaa varmaan laittaa suoraan numerotyyppisinä nuo vakiot:
Const Level11XP As Long = 1358
ja Select Casessa ilman Val-funktiota:
Case Level11XP To Level12XP - 1: '...
En tiedä auttaako itse ongelmaan mutta tulee ainakin vähän selkeämpi.
vesimies kirjoitti:
Kannattaa varmaan laittaa suoraan numerotyyppisinä nuo vakiot:
Const Level11XP As Long = 1358ja Select Casessa ilman Val-funktiota:
Case Level11XP To Level12XP - 1: '...En tiedä auttaako itse ongelmaan mutta tulee ainakin vähän selkeämpi.
Jos olen ymmärtänyt oikein, Val on pakollinen jos numeron sisältävä paikka määrittää numeron tekstinä (Text1.Text = "100", huomaa kaninkorvat) mutta jotenkin toimivuus oli korkeampi kun joka paikassa viitattaessa numerotietopaikkaan käytin Val.
IF Exps => Lvl * X * Lvl THEN Lvl = Lvl + 1
Jossa X tilalle mikä tahansa haluttu lukema. Ei purkkaa, ei jokaisen kokemusmäärän määritystä erikseen ja lisäksi. Ei tasorajoitusta, kuin muuttujan maksimikoko mikä sisältää kokemuksen. Alla esimerkkejä X:n ollessa 83:
1 = 83 2 = 332 3 = 747 4 = 1328 5 = 2075 6 = 2988 7 = 4067 8 = 5312 9 = 6723 10 = 8300 11 = 10043 12 = 11952 13 = 14027 14 = 16268 15 = 18675 16 = 21248 17 = 23987 18 = 26892 19 = 29963 20 = 33200 21 = 36603 22 = 40172 23 = 43907 24 = 47808 25 = 51875 26 = 56108 27 = 60507 28 = 65072 29 = 69803 30 = 74700 31 = 79763 32 = 84992 33 = 90387 34 = 95948 35 = 101675 36 = 107568 37 = 113627 38 = 119852 39 = 126243 40 = 132800 41 = 139523 42 = 146412 43 = 153467 44 = 160688 45 = 168075 46 = 175628 47 = 183347 48 = 191232 49 = 199283 50 = 207500 51 = 215883 52 = 224432 53 = 233147 54 = 242028 55 = 251075 56 = 260288 57 = 269667 58 = 279212 59 = 288923 60 = 298800 61 = 308843 62 = 319052 63 = 329427 64 = 339968 65 = 350675 66 = 361548 67 = 372587 68 = 383792 69 = 395163 70 = 406700 71 = 418403 72 = 430272 73 = 442307 74 = 454508 75 = 466875 76 = 479408 77 = 492107 78 = 504972 79 = 518003 80 = 531200 81 = 544563 82 = 558092 83 = 571787 84 = 585648 85 = 599675 86 = 613868 87 = 628227 88 = 642752 89 = 657443 90 = 672300 91 = 687323 92 = 702512 93 = 717867 94 = 733388 95 = 749075 96 = 764928 97 = 780947 98 = 797132 99 = 813483
Jos tahtoo säätää tarkemmin, niin sitten muutama muuttuja lisää. Simppeliä ja opettavaista..
-Grey-
Hei, ettei ongelma vaan olisi kiusallinen pilkku-piste-dualismi!
Auttaako tällainen yhtään:
Dim strPisteellä As String Dim dblDesimLuku As Double Dim lngYlösPyör As Long strPisteellä = Replace(txtCurrentXP.Text, ",", ".") dblDesimLuku = Val(strPisteellä) lngYlösPyör = -Int(-dblDesimLuku) ' Antin hieno ja siisti kaava :) Select Case lngYlösPyör ' Vakiot tässä edelleen Long-tyyppisiä: Case Level1XP To Level2XP - 1: CurLVL = 1 Case Level2XP To Level3XP - 1: CurLVL = 2 Case Level3XP To Level4XP - 1: CurLVL = 3 '... End Select '...
vesimies kirjoitti:
Hei, ettei ongelma vaan olisi kiusallinen pilkku-piste-dualismi!
Vika ei ole tuossa, vaan siinä minkä jo aikaisemmin mainitsinkin.
Itse lähtisin kuitenki siitä, että käyttöliittymässä käytetään käyttäjän valitsemaan Windows-localea, jolloin ei tarvitse tehdä mitään omia replace-virityksiä, jotka eivät kuitenkaan tulisi toimimaan kaikissa tapauksissa.
Eli jos halutaan, että ohjelman käynnistyessä ruudulla on oletusarvo, niin se asetetaan siihen sovelluskoodista:
txtCurrentXP.Text = CStr(15.8)
Ja kun arvo tarvitsee lukea
If Not IsNumeric(txtCurrentXP.Text) Then MsgBox("Syötetty XP ei kelpaa. Arvon tulee olla numero") On Error Resume Next txtCurrentXP.SetFocus On Error Goto 0 End If dblDesimLuku = CDbl(txtCurrentXP.Text)
Näin toteutettuna käyttäjä saa omista asetuksistaan riippuen esim. 15.8, 15,8, 15;8 tms näytölle ja ohjelma hyväksyy syötteen samassa muodossa.
Joku voisi tietysti sanoa että tuo vesimiehan tapa on "parempi", koska se hyväksyy syötteen "missä vaan" muodossa. Mutta miettikääpä mitä tapahtuu kun jenkki syöttää siihen 1,200 (eli 1200)...
vesimies kirjoitti:
Kannattaa varmaan laittaa suoraan numerotyyppisinä nuo vakiot:
Const Level11XP As Long = 1358
Tuohon lisäys kun tuli luettua noista kokonaisluvuista ...
Byte voi sisältää luvun haitarilla 0 <-> 255
Integer voi sisältää luvun haitarilla -32768 <-> 32767
Long voi sisältää luvun haitarilla -2147483648 <-> 2147483647
, jolloin tekeekö mitään (merkittävää) muutosta jos laitan Byte-muuttujaan mahtuvat Level*XP:t As Byte kaikkien laittamisen As Long sijasta ?
Jos olet ihan varma, että ne mahtuu kaikki Integeriin, niin voit määritellä
Dim LevelXP(1 To 199) as Integer
199 erillisen constantin käyttäminen on täysin älytöntä. Tuskinpa on paljon haittaa vaikka määrittelisit tuon edellä mainitsemani taulukon Longinakaan.
Sen sijaan kahden eri tyypin käyttäminen muutaman tavun säästämiseksi on järjetöntä.
Grez kirjoitti:
Jos olet ihan varma, että ne mahtuu kaikki Integeriin, niin voit määritellä
Dim LevelXP(1 To 199) as Integer199 erillisen constantin käyttäminen on täysin älytöntä. Tuskinpa on paljon haittaa vaikka määrittelisit tuon edellä mainitsemani taulukon Longinakaan.
Sen sijaan kahden eri tyypin käyttäminen muutaman tavun säästämiseksi on järjetöntä.
Miten sitten määritän koko taulun viittaamatta ja tallentamatta jokaiseen soluun erikseen ? En ole vieläkään käsittänyt millä kaavalla pystyisi erehtymättömästi laskemaan nämä luvut kuin noissa Const'eissa seisoo.
Heh, niitä olikin vain 99.. Luin tuon Level99 muodossa Leve199. Jälleen yksi hyvä syy miksi taulukko on parempi.
Joo, en minäkään keksi ihan tarkkaa. Sellaisen, jossa pahimmillaan heittää välillä 44 (2421087 vs 2421131) ja suurin osa on tasan sama tai parin verran eri saan kyllä keksittyä helposti.
Mielestäni VB6:ssa ei ole suoraan mahdollista alustaa taulukkomuuttujaa, joten jos nyt haluat ne väkisin tunkea koodiin, niin jotenkin tähän tyyliin.
Dim LevelXP(1 To 99) As Long Dim t As Variant, i As Integer t = Array(0, 83, 174, 276, 388, 512, 650, 801, 969, 1154, 1358, 1584, 1833, 2107, 2411, 2746, 3115, 3523, 3973, 4470, 5018, 5624, _ 6291, 7028, 7842, 8740, 9730, 10824, 12031, 13363, 14833, 16456, 18247, 20224, 22406, 24815, 27473, 30408, 33648, 37224, _ 41171, 45529, 50339, 55649, 61512, 67983, 75127, 83014, 91721, 101333, 111945, 123660, 136594, 150872, 166636, 184040, _ 203254, 224466, 247886, 273742, 302288, 333804, 368599, 407015, 449428, 496254, 547953, 605032, 668051, 737627, 814445, _ 899257, 992895, 1096278, 1210421, 1336443, 1475581, 1629200, 1798808, 1986068, 2192818, 2421087, 2673114, 2951373, _ 3258594, 3597792, 3972294, 4385776, 4842295, 5346332, 5902831, 6517253, 7195629, 7944614, 8771558, 9684577, 10692629, _ 11805606, 13034431) For i = 1 To 99 LevelXP(i) = t(i - 1) Next
Onko tarpeeksi lähellä?
Private Sub Command1_Click() Dim lngA As Long, dblTotal As Double, dblXP As Double, dblVal As Double dblXP = 83 dblVal = 1.10406321 '( ... + (CDbl(VScroll1.Value) * 0.00000000001)) List2.Clear For lngA = 2 To 99 dblTotal = dblTotal + Int(dblXP) List2.AddItem lngA & vbTab & Int(dblXP) & vbTab & RightB$("0000000" & dblTotal, 16), 0 dblXP = dblXP * dblVal Next lngA Me.Caption = dblVal End Sub
Tuossa on vielä joku muukin muuttuja mukana suoran kertolaskun lisäksi, mutta sen selvittäminen meneekin jo hieman vaikeammaksi. Tällä hetkellähän aluksi kumulatiivisesti kasvavat kokemuspisteet jäävät liian alhaisiksi, mutta sitten loppupäästä kokemuspisteet ovat jo liian isoja.
Siin on teille kaava: http://www.truthscape.com/html/
Option Explicit Dim RuneXP(1 To 99) As Long Private Sub Generate_RuneXP() Dim lngA As Long, dblTotal As Double For lngA = 1 To 98 dblTotal = dblTotal + (lngA + 300 * (2 ^ (lngA / 7))) RuneXP(lngA + 1) = dblTotal / 4 Next lngA End Sub Private Sub Form_Load() Dim lngA As Long Generate_RuneXP For lngA = 1 To 99 List1.AddItem RuneXP(lngA) Next lngA End Sub
Ei ihan vielä kohdallaan, joku toinen saa hienovirittää täysin kohdilleen.
Muoks!
Ongelma lukujen täsmäämättömyydessä taitaa viedä juurensa pyörityssääntöihin, jotka kertautuvat mitä isommaksi luvut pääsevät. VB6 pyöristää lukuja pankkiirin pyöristyksellä, jossa joka toinen 0,5 pyöristetään ylös ja joka toinen alas. PHP taas pyöristää luvut perinteisellä tyylillä eli 0,5 aina ylöspäin. Joten aina kun pyöristys osuu kohdille missä vaan osassa lukua jossakin vaiheessa, niin siitä sitten alkaa kierre.
Funktio pyöristää luvun halutulle tarkkuudelle.
Round(luku[,desimaalit])
Funktio palauttaa luvun pyöristettynä niin, että desimaalien lukumäärä on desimaalit. Jos desimaaleja ei ole annettu (tai ne ovat 0), luku pyöristetään kokonaisluvuksi.
Esimerkki:
MsgBox Round(5.94573) '6 MsgBox Round(5.94573, 2) '5.95 MsgBox Round(5.94573, 4) '5.9457
Merri kirjoitti:
VB6 pyöristää lukuja pankkiirin pyöristyksellä, jossa joka toinen 0,5 pyöristetään ylös ja joka toinen alas.
Tuskin kuitenkaan tässä nimenomaisessa tapauksessa aiheuttaa mitään ongelmaa, kun pitää pyöristää alaspäin ja muutenkin luvut ovat melko päättymättömiä desimaaleja, jolloin juuri tasan .5 ei oikeastaan esiinny.
Eksaktimmin tuon pankkiirin pyöristyssäännön voisi ilmaista niin, että .5 pyöristetään aina kohti parillista lukua.
Oikeasti vika on siinä, että se summattava systeemi pitää pyöristää alaspäin ja sitten kaikkien summien tulos jaetaan 4:lla ja jälleen pyöristetään alaspäin. Siis juuri niinkuin kaavassa lukee. Tuo sivun tekijä vaan hölisee sekavia kun se laskee eri tasojen 3 desimaalin tarkkuisia arvoja yhteen tuossa selostuksessa.
Eli tämä laskee oikein:
Private Sub Generate_RuneXP() Dim i As Long, Total As Double For i = 1 To 98 Total = Total + Int(i + 300 * (2 ^ (i / 7))) RuneXP(i + 1) = Total \ 4 Next End Sub
Tuota VB6:n pyöristämistä voisi hieman täsmentään. Siis Round-funktio käyttää pankkiirin pyöristystä, samoin liukuluvun sijoittaminen kokonaislukumuuttujaan. Muitakin pyöristystapoja on, esim. int, joka pyöristää alaspäin. Matemaattinen pyöristys saadaan int(luku + 0.5)
Jep, katsoin lävitse selostuksen kautta, kaavojen lukeminen kun ei ole alaani. Kertakaikkisen sekavaa laittaa ne desimaalit sinne mukaan.
Total-muuttujakin voi sitten olla Long, turhaa sitä on heittää liukuluvuksi, vaikka tietty kun kyseessä on vain kertaalleen suoritettava koodinpätkä niin sillä ei ihan niin väliä ole.
Joo, jäi doubleksi vahingossa, kun tein itsekin ensin tuon selostuksen mukaisena.
Aihe on jo aika vanha, joten et voi enää vastata siihen.