2012-12-22 118 views
1

我的头不再工作了。我必须完成这个a.s.a.p 我怎样才能使这个循环更短。我怎样才能让这个循环更短?

目前我有4个不同的循环。我想结合他们,只有一个。

Card[] cards = new Card[4*13]; 

void testCreateCards() { 

    int k = 0; 
    for (int suit = 0; suit <= 3; suit++) {    // for suit 
    for (int value = 1; value <= 13; value++) {    // from Ace to King 
     // build new card 
     cards[k++] = new Card(suit, value); 
    } 
    } 
} 

void testDrawClubs() { 
    int x = 0; 
    int y = 0; 
    for (int i = 0; i <= 12; i++) { 
    cards[i].displayCard(x, y); 
    x +=80; 
    } 
} 

void testDrawDiamonds() { 
    int x = 0; 
    int y = 80; 
    for (int i = 13; i <= 25; i++) { 
    cards[i].displayCard(x, y); 
    x +=80; 
    } 
} 

void testDrawHearts() { 
    int x = 0; 
    int y = 160; 
    for (int i = 26; i <= 38; i++) { 
    cards[i].displayCard(x, y); 
    x +=80; 
    } 
} 
void testDrawSpades() { 
    int x = 0; 
    int y = 240; 
    for (int i = 39; i <= 51; i++) { 
    cards[i].displayCard(x, y); 
    x +=80; 
    } 
} 
+1

你在一个包有4套13。使用if或case创建俱乐部,钻石等等的前13名。为了得到一个想法,http://www.codeproject.com/Articles/38726/Basis-of-many-card-games-How-to-make-a-deck-of-car。 – bonCodigo

+0

谢谢,我会检查它 – emre

回答

5

可以计算x和y直接使用modular arithmetic因为i % 13给你的x坐标和i/13给你y坐标:

void testDrawCards() { 
    for (int i = 0; i < 52; i++) { 
     int x = i % 13; 
     int y = i/13; 
     cards[i].displayCard(x * 80, y * 80); 
    } 
} 
+0

模块化一个工作,但另一个不能正常显示。 x,y坐标不正确 – emre

+0

@ baris2:对不起,if条件有点不对。无论如何,模块化解决方案更加清洁。我想你应该选择这个选项。 –

+0

[链接](http://imgur.com/0thjv) – emre

相关问题