2010-12-15 15 views
2

我嘗試顯示一些免費撲克遊戲(HTML/Javascript客戶端,python服務器)遊戲的芯片。 桌子中央周圍有座位。對於每個座位,我知道餘弦,竇,半徑(距離桌子中心的距離)以及值/計數碼片陣列。獲取積分在切線圓(或橢圓形)和平衡撲克籌碼

我試圖顯示對齊並在座位點

在圖像切線平衡每個芯片:(我不能創建圖像,以便:http://i.stack.imgur.com/a4Obw.png

現在,我寫了這個代碼:

function balanced_stack(chips, cos, sin, radius) 
{ 
    var html = '' 

    // I receive a chips array like [ [ 100, 8 ], [ 200, 10 ], [ 500, 7 ] ] 
    // so 8 chips of 100$, 10 chips of 200$ .. etc 
    for(var i in chips) 
    { 
     var value = chips[i][0]; // the token value 
     var count = chips[i][1]; // the token count 

     var m = 0; // margin for a single stack 
     var left = i * 20 * sin + cos * radius; 
     var top = -i * 20 * cos + sin * radius; 

     for(var j=1; j<= count; j++) 
     {  
      html += '<img style="z-index:'+(parseInt(top) + 9999)+'; left:'+left+'px; top: '+top+'px; margin-top:'+(-2*m)+'px;" \ 
          src="/images/chips/'+value+'.png" />' 
      m ++; 
     } 

     return html 
    } 
} 

但它是不正確的平衡和不好看。

增加:在餘弦和竇可以比-1大於1且小於因爲如果橢圓是由定義的表可以是橢圓形

+0

考慮使用Flash進行此操作。 Flash的編程語言(稱爲ActionScript)相對容易學習。我的意思是設法在沒有任何經驗的情況下,在我的單項課程中取得95%的成績。我說使用AS的原因是因爲使用JS打開應用程序到很多黑客。我的意思是,例如,您可以在當前頁面的URL中鍵入JS以改變您當前所在的頁面,或將其關閉或查看源代碼。用AS他們不能這樣做。他們需要的只是安裝Flash。他們要麼能夠很容易地破解它,要麼根本不能玩。 – ClarkeyBoy 2010-12-15 16:43:13

+0

@ClarkeyBoy:我知道actionscript是一種更好的三角函數工作方式,但我真的想用純HTML/javascript來製作這個遊戲,它是控制每一個動作的python服務器,沒有可能的黑客,javascript只是顯示遊戲元素 – Dalou 2010-12-15 16:49:27

+0

好的只要它的安全應該沒有問題。只是想我會提出我的觀點,讓你考慮一切。 – ClarkeyBoy 2010-12-15 16:55:11

回答

1

{A * COS(X)中,b *的sin(x)} ,切線是{-a * sin(x),b * cos(x)}。使用將橢圓軸與桌子周圍的角度的正弦/餘弦組合的定義不允許您輕鬆提取。此外,將它稱爲數量sin/cos似乎是一個糟糕的主意,因爲它們通過它們的數學定義被限制在域-1到+1之間...

+0

謝謝你,我會嘗試使用橢圓定義。任何有關平衡的想法? – Dalou 2010-12-15 19:21:57

+0

不確定你的意思是平衡的,也許你是指該切線的方程:{a * cos(x),b * cos(x)} + d * { - a * sin(x),b * cos x)}其中d是距離橢圓上您正在考慮的點的距離的參數... – SEngstrom 2010-12-15 20:34:05

+0

正切,我的意思是平衡的,一個人和有序的芯片重新分區 – Dalou 2010-12-16 10:16:49

0

我想我解決了方程SEngstrom。 所有芯片都對齊在正切線上。你可以在這裏看到:alt text

function(chips, cos, sin, radius) 
{ 
    var html = '' 

    // Considering the equation for the tangent {a*cos(x),b*cos(x)}+d*{-a*sin(x),b*cos(x)} 
    var a = 1.6; // x coefficient for the ellipse 
    var b = 1; // y coefficient for the ellipse 


    // I receive a chips array like [ [ 100, 8 ], [ 200, 10 ], [ 500, 7 ] ], so 8 chips of 100$, 10 chips of 200$ .. etc 
    for(var i in chips) 
    { 
     var value = chips[i][0]; // the token value 
     var count = chips[i][1]; // the token count 

     var m = 0; // margin for a single stack 

     var left = i * 20 * sin * a + cos * radius * a; 
     var top = -i * 20 * cos * b + sin * radius * b; 

     for(var j=1; j<= count; j++) 
     {  
      html += '<img style="z-index:'+(parseInt(top) + 9999)+'; left:'+left+'px; top: '+top+'px; margin-top:'+(-2*m)+'px;" \ 
          class="chip chip_'+value+'" src="/images/chips/'+CHIPS.COLORS[ value ]+'.png" />' 
      m ++; 
     }  
    } 
    return html 
} 

但你可以看到,在每個單棧之間的空白,因爲芯片具有20像素的寬度,與常規COS /罪是不錯,但在這裏,距離之間的每個單棧由橢圓係數放大(I * 20 *罪* 一個

0

我試圖解決方案有點盲目,我寫道:(似乎工作)

var left = (i * ((20*a) - 20) * sin * a) + (cos * radius * a); 
var top = -(i * ((20*a) - 20) * cos * b) + (sin * radius * b); 

燦你向我解釋爲什麼這有效?我在數學上很弱。

與周圍的橢圓形桌子20名假球員(A = 1.6,B = 1):

alt text

0

想想這樣說:對於第二個任期(左,上)在代碼中找到堆棧的中心。爲了你想沿切線添加堆棧。由於您的堆棧由像素寬度定義,因此要添加到中心點的項的形式可以具有方便的形式i * pxwidth * {nx,ny},其中nx和ny是(x,y)歸一化切線向量'i'是對各個堆棧進行計數的整數,pxwidth是所需的像素寬度。如果sin和cos是真正的正弦/餘弦,(sin,cos)已經是歸一化的向量,因爲sin^2 + cos^2 = 1。

我在你的代碼中不理解的是((20 * a)-20)等於20 *(a-1)。某種修正係數大於1。它對b不對稱,但對於b = 1,它將爲零...