二十一点游戏 - 显示ASCII图形/多行字符串

时间:2016-09-22 11:32:26

标签: python python-3.x

我是Python的新手,目前正在尝试使用ASCII图形创建一个基本的二十一点游戏来代表卡片。我已经将卡片图像放在多行字符串列表中,并且想法是在需要显示卡片时为每个字符串调用特定索引。

然而,我不能让它们彼此相邻打印,并且没有任何修修补补似乎让它起作用。这是代码:

CARDS = ['''
 -------
|K      |
|       |
|       |
|       |
|      K|
 ------- ''', '''
 -------
|Q      |
|       |
|       |
|       |
|      Q|
 ------- ''', ''' 
 -------
|J      |
|       |
|       |
|       |
|      J|
 ------- ''', '''
 -------
|10     |
|       |
|       |
|       |
|     10|
 ------- ''', '''
 -------
|9      |
|       |
|       |
|       |
|      9|
 ------- ''', '''
 -------
|8      |
|       |
|       |
|       |
|      8|
 ------- ''', '''
 -------
|7      |
|       |
|       |
|       |
|      7|
 ------- ''', '''
 -------
|6      |
|       |
|       |
|       |
|      6|
 ------- ''', '''
 -------
|5      |
|       |
|       |
|       |
|      5|
 ------- ''', '''
 -------
|6      |
|       |
|       |
|       |
|      6|
 ------- ''', '''
 -------
|5      |
|       |
|       |
|       |
|      5|
 ------- ''', '''
 -------
|4      |
|       |
|       |
|       |
|      4|
 ------- ''', '''
 -------
|3      |
|       |
|       |
|       |
|      3|
 ------- ''', '''
 -------
|2      |
|       |
|       |
|       |
|      2|
 ------- ''', ''' 
 -------
|A      |
|       |
|       |
|       |
|      A|
 ------- '''
]

BLANKCARD = '''
 -------
|XXXXXXX|
|XXXXXXX|
|XXXXXXX|
|XXXXXXX|
|XXXXXXX|
 ------- '''


def displayCards():
    print(CARDS[2] + CARDS[14], end='')

displayCards()

以上代码打印以下内容:

 -------
|J      |
|       |
|       |
|       |
|      J|
 ------- 
 -------
|A      |
|       |
|       |
|       |
|      A|
 ------- 

我尝试使用end =''来摆脱新线,但没有快乐。有没有人对我如何将卡片彼此相邻有任何建议?

提前致谢!

3 个答案:

答案 0 :(得分:2)

按照你的方式,这将非常困难。当你写

end=''

只能删除印刷文本末尾的换行符。问题是,你的每一张牌都在右侧有一个新线:

 -------
|J      |
|       |
|       | # <--- Newline here
|       |
|      J|
 ------- 

您需要创建一个获取卡片列表的函数,并创建一个长行。这将是一个坚实的项目。您将不得不取出组成卡片的琴弦,将它们切割成线条(在每个新线上剪切),将所有相应的线条放在一起,摆脱两者之间的换行符,然后将所有碎片粘合在一起。我现在可能会尝试这个早上的项目。

而不是硬编码你所拥有的所有卡片,创建一个你给卡片值的功能,然后为你创建一张卡片。

答案 1 :(得分:2)

我建议你写一个函数,给定i和n,返回一个代表卡n的第i行的字符串。然后,您可以在双嵌套循环中调用它,按顺序打印结果,以获得所需的结果。 您可以从想要查看的输出示例开始,在编写循环时用作参考。

答案 2 :(得分:1)

有趣的小问题。这是我掀起的快速解决方案。

class Card:

def topchar(char):
    return '|{}      |'.format(char)

def botchar(char):
    return '|      {}|'.format(char)

def print(char_list):
    top = ' ------- '
    side ='|       |'
    topout = ''
    topchar = ''
    botchar = ''
    blankside = ''
    for char in char_list:
            topout += top + ' '
            topchar += Card.topchar(char) + ' '
            blankside += side + ' '
            botchar += Card.botchar(char) + ' '
    print(topout)
    print(topchar)
    print(blankside)
    print(blankside)
    print(blankside)
    print(botchar)
    print(topout)