2011-08-05 39 views
12

Im tạo một trình duyệt dựa trên trò chơi PHP và trong cơ sở dữ liệu của tôi cho người chơi nó có một hồ sơ của người chơi tổng EXP hoặc kinh nghiệm.php trò chơi, công thức để tính toán một mức độ dựa trên exp

gì tôi cần là một công thức để dịch exp đó vào một cấp hoặc cấp bậc, ra khỏi 100.

Vì vậy, họ bắt đầu ở cấp 1, và khi họ nhấn nói, 50 exp, đi đến cấp độ 2, sau đó khi họ nhấn lẽ 125/150, mức độ 2.

Về cơ bản một công thức mà đều đặn làm cho mỗi cấp dài hơn (nhiều exp)

thể bất cứ ai giúp đỡ? Tôi không giỏi môn toán: P

+4

Bạn có thể chọn câu trả lời được chấp nhận không? Điều này cho phép mọi người biết rằng Bạn đã tìm thấy câu trả lời cho câu hỏi của bạn. Bạn có thể làm điều đó bằng cách nhấp vào dấu kiểm bên cạnh câu trả lời mà bạn nghĩ là tốt nhất. –

Trả lời

20

Nhiều công thức có thể phù hợp với nhu cầu của bạn, tùy thuộc vào tốc độ bạn muốn điểm kinh nghiệm cần thiết tăng lên.

Trong thực tế, bạn thực sự nên làm cho cấu hình này (hoặc ít nhất là dễ dàng thay đổi ở một vị trí trung tâm), để bạn có thể cân bằng các trò chơi sau này. Trong hầu hết các trò chơi, những công thức này (và khác) chỉ được xác định sau playtesting và thử một vài tùy chọn.

Dưới đây là một công thức: Lần đầu tiên lên cấp xảy ra ở 50 điểm kinh nghiệm; thứ hai tại 150exp; thứ ba tại 300 điểm kinh nghiệm; thứ tư tại 500 điểm kinh nghiệm; vv Nói cách khác, trước tiên bạn phải thu thập 50 điểm kinh nghiệm, sau đó là 100 điểm kinh nghiệm, sau đó là 150exp, v.v. Đó là một số Arithmetic Progression.

Để tăng cấp độ X thì bạn cần 25*X*(1+X) điểm kinh nghiệm.

Nhập: Để thực hiện theo cách khác, bạn chỉ cần sử dụng toán cơ bản. Như thế này:

y=25*X*(1+X) 
0=25*X*X+25*X-y 

Đó là một tiêu chuẩn Quadratic equation, và bạn có thể giải quyết cho X với:

X = (-25±sqrt(625+100y))/50 

Bây giờ, kể từ khi chúng tôi muốn cả X và Y là lớn hơn 0, chúng ta có thể thả một trong câu trả lời và chỉ còn lại:

X = (sqrt(625+100y)-25)/50 

vì vậy, ví dụ, nếu chúng ta có 300 exp, chúng ta thấy rằng:

(sqrt(625+100*300)-25)/50 = (sqrt(30625)-25)/50 = (175-25)/50 = 150/50 = 3 

Bây giờ, đây là lần thứ 3 levelup, do đó có nghĩa mức độ 4.

+0

Cảm ơn, nhưng nói rằng tôi chỉ có các ký tự EXP biến, và tôi muốn đặt nó vào một phương trình và nó ném trở lại một số cấp. Tôi sẽ làm như thế nào? – user880356

+0

Tôi sẽ nói rằng công thức này rất tốt cho việc san lấp mặt bằng. Nó phát triển chậm hơn so với triển khai hình học, trong đó mỗi cấp độ mới cần X lần trải nghiệm nhiều hơn. Sự tăng trưởng này duy trì một sự cân bằng tốt và cảm giác rằng mỗi cấp độ khó đạt được hơn, nhưng không phải là không thể. Nhưng tôi nghĩ Bạn nên sử dụng Excel hoặc một cái gì đó để tạo ra hai đồ thị và xem cho chính mình. –

+0

Thực ra, 150/5 = 30 –

0

Tôi mang nó những gì bạn đang tìm kiếm là số lượng kinh nghiệm để quyết định mức độ họ đang ở trên? Chẳng hạn như: Cấp 1: 50exp Cấp 2: 100exp Cấp 3: 150exp?

nếu đó là trường hợp bạn có thể sử dụng một cái gì đó vòng lặp như:

$currentExp = x; 
$currentLevel; 
$i; // initialLevel 

for($i=1; $i < 100; $i *= 3) 
{ 
    if(($i*50 > $currentExp) && ($i < ($i+1)*$currentExp)){ 
     $currentLevel = $i/3; 
     break; 
    } 
} 

này cũng đơn giản như tôi có thể làm cho một thuật toán cho các cấp, tôi đã không kiểm tra nó để có thể có sai sót.

Hãy cho tôi biết nếu bạn sử dụng tính năng này, thật thú vị khi nghĩ rằng thuật toán tôi đã viết có thể nằm trong trò chơi!

+0

khi tôi đặt số cao vào phương trình đó là điểm kinh nghiệm (ví dụ: 14554) thì nó không xuất ra một mức. – user880356

+0

Tôi muốn thêm một câu lệnh if sau vòng lặp for trong trường hợp bạn đã vượt qua mức tối đa (được đặt ở mức 100). – John

4

Điều đó thực sự phụ thuộc vào cách bạn muốn phạm vi mở rộng cho từng cấp. Hãy nói rằng

LvL1 : 50 Xp 
Lvl2: LvL1*2=100Xp 
LvL3: LvL2*2=200Xp 
Lvl4: LvL3*2=400Xp 

Điều này có nghĩa bạn có một tiến trình hình học Các Xp cần thiết để hoàn thành cấp độ n sẽ

`XPn=base*Q^(n-1)` 

Trong ví dụ cơ sở của tôi là inital 50 xp và Q là 2 (tỷ lệ) .

cung cấp một cầu thủ bắt đầu từ lvl1 không có xp:

when he dings lvl2 he would have 50 total Xp 
at lvl3 150xp 
at lvl4 350xp 

và vân vân Tổng xp một cầu thủ có khi anh nhận được một cấp độ mới lên sẽ là:

base*(Q^n-1)/(Q-1) 

Trong của bạn trường hợp bạn đã biết có bao nhiêu xp người chơi có. Đối với một tỷ lệ 2 công thức được đơn giản hơn:

base * (2^n-1)=total xp at level n 

để tìm hiểu mức độ trong một khoảng xp cho tất cả các bạn cần làm là áp dụng một công thức đơn giản

$playerLevel=floor(log($playerXp/50+1,2)); 

Nhưng với một số nhân nó sẽ càng ngày càng khó khăn hơn cho người chơi.

Để hiển thị XP cần thiết cho cấp độ tiếp theo, bạn chỉ có thể tính tổng XP cho cấp độ tiếp theo.

$totalXpNextLevel=50*(pow(2,$playerLevel+1)-1); 
$reqXp=$totalXpNextLevel - $playerXp; 

Kiểm tra bắt đầu của bài: để có được từ lvl1 -> lvl2 bạn cần 50 xp lvl2 -> lvl3 100xp

để có được từ lvl x để lvl (x + 1) bạn sẽ cần

$totalXprequired=50*pow(2,$playerLevel-1); 
+0

cảm ơn người đàn ông, hoàn hảo: D là có anyway tôi có thể làm một vòng lặp để hiển thị một danh sách các yêu cầu EXP cho mỗi cấp độ? – user880356

+0

cũng có công thức nào để tìm ra số tiền còn lại trong mức hiện tại của bạn không? do đó, nó sẽ xuất ra dấu exp của cấp độ hiện tại của bạn và exp để đạt điểm tiếp theo. Vì vậy, tôi có thể làm việc ra một tỷ lệ phần trăm của bao xa thông qua mức độ hiện tại của họ, họ đã tiến triển. – user880356

+0

chỉnh sửa với xp cần thiết cho cấp độ tiếp theo, để hiển thị một cái gì đó% cơ sở chỉ cần sử dụng XP yêu cầu mức hiện tại – Sleeperson

4

Nếu bạn muốn sau:

  • Level 1 @ 0 chỉ
  • Level 2 @ 50 điểm
  • Level 3 @ 150 điểm
  • Cấp 4 @ 300 điểm
  • Level 5 @ 500 điểm, vv

Một phương trình kinh nghiệm (X) với mức (L) liên quan là:

X = 25 * L * L - 25 * L 

Để tính toán mức cho một trải nghiệm được sử dụng phương trình bậc hai để có được:

L = (25 + sqrt(25 * 25 - 4 * 25 * (-X)))/ (2 * 25) 

này đơn giản hóa thành:

L = (25 + sqrt(625 + 100 * X))/50 

Sau đó làm tròn xuống bằng cách sử dụng chức năng sàn để có được công thức cuối cùng của bạn:

L = floor(25 + sqrt(625 + 100 * X))/50 

đâu L là mức, và X là kinh nghiệm chỉ

+0

cảm ơn. Nói rằng tôi muốn san lấp mặt bằng chậm hơn so với nó đang sử dụng của bạn, mà biến tôi sẽ phải chỉnh sửa? – user880356

+0

và tôi sẽ sử dụng công thức nào để tìm số điểm cần thiết cho đến cấp độ tiếp theo? cảm ơn Im khủng khiếp về toán học và cần điều này. – user880356

+0

Phương trình đầu tiên trong câu trả lời của tôi ở trên 'X = 25 * L * L - 25 * L' cho số điểm kinh nghiệm cần thiết để đạt đến một mức độ cụ thể – Mike

2

Google đã cho tôi điều này:

function experience($L) { 
$a=0; 
    for($x=1; $x<$L; $x++) { 
    $a += floor($x+300*pow(2, ($x/7))); 
    } 
return floor($a/4); 
} 

for($L=1;$L<100;$L++) { 
echo 'Level '.$L.': '.experience($L).'<br />'; 
} 

Đây là vụ việc được công thức RuneScape sử dụng, bạn có thể tôi có thể sửa đổi nó theo nhu cầu của bạn. Ví dụ:

Level 1: 0 
Level 2: 55 
Level 3: 116 
Level 4: 184 
Level 5: 259 
Level 6: 343 
Level 7: 435 
Level 8: 536 
Level 9: 649 
Level 10: 773 
1

Đây là giải pháp nhanh mà tôi đã sử dụng cho một vấn đề tương tự. Bạn có thể sẽ muốn thay đổi toán học tất nhiên, nhưng nó sẽ cho bạn mức độ từ một xp tổng hợp.

$n = -1; 
    $L = 0; 

    while($n < $xp){ 
     $n += pow(($L+1),3)+30*pow(($L+1),2)+30*($L+1)-50; 
     $L++; 
    } 

    echo("Current XP: " .$xp); 
    echo("Current Level: ".$L); 
    echo("Next Level: " .$n); 
0

Bản gốc dựa trên cơ sở 50, do đó, 25 nằm rải rác trên phương trình.

Đây là câu trả lời dưới dạng phương trình thực. Chỉ cần cung cấp số nhân (cơ sở) và doanh nghiệp của bạn.

$_level = floor(floor(($_multipliter/2) 
         + sqrt(($_multipliter^2) + (($_multipliter*2) * $_score)) 
        ) 
        /$_multipliter 
       ) ; 
Các vấn đề liên quan