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

问题描述 投票:0回答:4

我对 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='' 来摆脱新行,但没有任何乐趣。有人对如何让卡片彼此相邻有任何建议吗?

提前致谢!

python python-3.x
4个回答
2
投票

有趣的小问题。 这是我想出的一个快速解决方案。

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)

2
投票

按照你的做法,这将是非常困难的。当你写的时候

end=''

这只消除了打印文本末尾的换行符。问题是,你的每一张卡片的右侧都有一个新行:

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

您需要创建一个函数来获取卡片列表,并创建一长行。这本身就是一个可靠的项目。您必须取出构成卡片的字符串,将它们切成线(在每条新线上切割),将所有相应的线放在一起,去掉中间的换行符,然后将所有部分粘合在一起。我现在可能会在早上的项目中尝试这个。

并且不要像您那样对所有卡片进行硬编码,而是创建一个您为其赋予卡片值的函数,它会为您创建一张卡片。


2
投票

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


0
投票

我建议您创建一个函数,当提供 i 和 n 时,会生成一个与卡 n 的第 i 行相对应的字符串。为了获得所需的结果,您可以在双重嵌套循环中运行它,并按顺序发布结果。首先,您可以创建所需输出的模型,以在对循环进行编码时作为指南。

© www.soinside.com 2019 - 2024. All rights reserved.