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)
NextOnko 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 SubTuossa 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 SubEi 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 SubTuota 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.