所以我正在制作一个游戏,我有一个元组字典,其中包含了比赛场地上的对象坐标(例如):
location = {player : (1, 4), monster : (3, 2), escape : (4, 0)}
稍后在我的代码中,我想更改坐标以便更容易理解区域。第一个定义部分是相应的字母,然后是第二个数字,看起来像这样:玩家将在B4中,怪物在C2中,依此类推。右上角的“区域”由元组(4,4)表示,左下角的“区域”由元组(0,0)表示。我唯一能想到的可能是这样的:
location = {player : (1, 4), monster : (3, 2), escape : (4, 0)}
letters = ["A", "B", "C", "D", "E"]
playerArea = "{}{}".format(letters[int(location[player[0]])+1], location[player[1]])
简而言之,它没有用。我认为问题在于从字典中解压缩元组并将其用作从列表字母中获取字母的数字。抱歉这是令人困惑的,我会尽力回答你的所有问题。
答案 0 :(得分:6)
问题的核心是如何将数字行/列坐标转换为更具可读性(战舰式)。这是一个简单而快速的功能:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class staminatimer : MonoBehaviour {
public Slider mySlider;
// Update is called once per frame
void Update ()
{
}
IEnumerator Start ()
{
//Wait for 60 secs.
yield return new WaitForSeconds (60);
subtractstam ();
}
private void subtractstam()
{
mySlider.value -= 5;
}
}
答案 1 :(得分:3)
使用词典理解使用字符串格式来构建新值。解包值元组很容易实现:
location = {k: '{}{}'.format(letters[x-1], y) for k, (x, y) in location.items()}
print(location)
# {'player': 'A4', 'monster': 'C2', 'escape': 'D0'}
此外,您可以使用string.ascii_uppercase
而不是手动定义字母列表。
OTOH,因为你的董事会应该(0, 0)
不确定您打算对索引0
做什么,因为A
已被视为1
。
答案 2 :(得分:0)
您可以使用DataPoint
获取每个坐标使用的字母表的完整列表:
string.ascii_uppercase
输出:
from string import ascii_uppercase as alphabet
location = {"player":(1, 4), "monster":(3, 2), "escape":(4, 0)}
new_location = {a:alphabet[b[0]-1]+str(b[-1]) for a, b in location.items()}
print(new_location)