2016-09-22 40 views
1

我對Python很新,目前正嘗試使用ASCII圖形來創建一個基本的二十一點遊戲來表示這些卡片。我將卡片圖像放在多行字符串列表中,當想要顯示卡片時,我們的想法是爲每個字符串調用特定的索引。二十一點遊戲 - 顯示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| 
------- 

我一直在使用結束試過=「」擺脫新線,但沒有喜悅。有沒有人有任何關於如何獲得相鄰牌的建議?

在此先感謝!

+0

我建議讓你想看到什麼作爲輸出,然後看着它,考慮到爲了使字符需要走出一個例子 - 逐行。你不能一個接一個地打印 – greggo

回答

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) 
+0

雖然這並不能真正解決問題。它簡化了卡的創建,但似乎沒有爲主要問題做任何事情。 – Carcigenicate

+0

我的理解是,問題是將卡片打印在一起。這完成了。 –

+0

哦,是嗎?那不好意思了。我再次閱讀代碼。乍一看,它似乎只是打印一張卡片。 – Carcigenicate

2

隨着你這樣做的方式,這將是非常困難的。當你寫

end='' 

這只是在打印文本的最後一個擺脫新行。問題是,你的卡每個人都有右側一個新行:

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

你需要創建一個函數,它的卡的列表,並且在它們的一個長行。這將是一個堅實的項目。你必須拿起組成卡片的琴絃,將它們切成線條(在每一條新線上切割),將所有相應的線條放在一起,擺脫中間的換行符,然後將所有片段粘合在一起。我現在可能真的嘗試這個早晨項目。

而不是硬編碼像你所有的卡,創建一個函數,你給卡值,併爲你創建一個卡。

+0

或者一張卡片的第n行,給出 – greggo

+0

@greggo有很多可能的方法來完成它,但是沒有一個真的很容易。我曾考慮嘗試創建一個將ascii圖形並排放置的程序,但這並不容易,除非您保證它們的大小完全相同。 – Carcigenicate

+0

但我們在這裏有這個保證。而且我們有'zip(CARDS [i] .split('\ n'))或者類似的東西 – greggo

2

我建議你寫一個函數,給定i和n,返回一個字符串,代表第n行的第i行。然後,您可以在雙重嵌套循環中調用它,按順序打印結果,以獲得所需的結果。 您可以首先製作您想要查看的輸出示例,以便在對循環進行編碼時用作參考。

+0

這是一個有趣的想法。我也不知道zip()函數。如果有兩張代表卡片頂部和底部的ASCII圖像列表,然後使用zip()遍歷每個列表並將它們連接成相同的打印函數,那麼它們可以並排坐在同一行上?如果這有道理? – kimnorth