2015-10-19 29 views
-2

我试过制作3星级奖励系统,我基本做到了。系统正常工作,如果我通过7级以下的级别,我赢得3星级。Unity 3D 3星奖励系统逻辑(c#)

(int step <7) //    3 Star 
(int step >7 && <12) //  2 star 
(int step >12)  //   1 star 

所以,这是问题所在。例如,我在lvl 1中获得了3星。后来我再次打了lvl 1,并通过了“1级”> 12步。代码将星星更改为1星。我想如果我在3星之前赢得了不显示2或1星。如果我在没有显示1星之前赢得2星。

我的c#技能不足以编写代码这个状态。

LEVELS Class 
public Sprite Star1; 
public Sprite Star2; 
public Sprite Star3; 

public Image[] Stars; 

void Start() 
{  
    //PlayerPrefs.SetInt("Level 1",1);  
    if (PlayerPrefs.GetInt("Level 1") ==1) 
    {    
     LevelNumbers[0].text = "1"; 
     PlayerPrefs.SetInt("Level 1",1); 

     if (PlayerPrefs.GetInt("L1St")==1) 
     { 
      Stars[0].sprite = Star1;    
     } 
     else if (PlayerPrefs.GetInt("L1St")==2) 
     { 
      Stars[0].sprite = Star2; 
     }  
     else if (PlayerPrefs.GetInt("L1St")==3) 
     { 
      Stars[0].sprite = Star3; 
     }  
    } 

这里是第二部分:

void OnCollisionEnter(Collision coll) 
{ 
    if (man1 == false & man2 == false &(coll.gameObject.tag=="Finish")) 
    { 
     // Application.LoadLevel("Levels");  
     PlayerPrefs.SetInt("Level 1",1); 

     if(Application.loadedLevelName == "Level1") 
     {  
      PlayerPrefs.SetInt("Level 2",1); 

      if(step >12) 
      { 
       if (PlayerPrefs.GetInt("L1St") ==0) 
       { 
        PlayerPrefs.SetInt("L1St",1); /// Do 1 Star 
       } 
      } 

      if(step >7 && step <12) 
      { 
       if (PlayerPrefs.GetInt("L1St") ==0 || PlayerPrefs.GetInt("L1St")==1) 
       { 
        PlayerPrefs.SetInt("L1St",2); /// Do 2 Star 
       } 
      } 

      if(step <=7) 
      { 
       if (PlayerPrefs.GetInt("L1St") ==0||PlayerPrefs.GetInt("L1St") ==1 || PlayerPrefs.GetInt("L1St") ==2) 
       { 
        PlayerPrefs.SetInt("L1St",3); /// Do 3 Star 
       } 
      } 

      Application.LoadLevel("levels"); 
     } 

另外我改变所述第二部分(在底部)当我通过在下7步骤中的电平I赚取LVL 1为3星级正在发生 L1St = 3 and Level1StarCounter = 4.但后来我做了1级再次超过7步Level1StarCounter不会改变,但L1St要去。我不知道它会怎么做。

void OnCollisionEnter(Collision coll) 
{ 
    if (man1 == false & man2 == false &(coll.gameObject.tag=="Finish")) 
    { 
     // Application.LoadLevel("Levels"); 
     PlayerPrefs.SetInt("Level 1",1); 

     if(Application.loadedLevelName == "Level1") 
     { 
      PlayerPrefs.SetInt("Level 2",1); 

      if(step >12) 
      { 
       if (PlayerPrefs.GetInt("LV1StarCounter")<= PlayerPrefs.GetInt("L1St")) 
       { 
        PlayerPrefs.SetInt("L1St",1); 
        PlayerPrefs.SetInt("LV1StarCounter",2); 
       } 
      } 
      else if(step >7 && step <12) 
      { 
       if (PlayerPrefs.GetInt("LV1StarCounter")<= PlayerPrefs.GetInt("L1St")) 
       { 
        PlayerPrefs.SetInt("L1St",2); 
        PlayerPrefs.SetInt("LV1StarCounter",3); 
       } 
      } 
      else if(step <=7) 
      { 
       if (PlayerPrefs.GetInt("LV1StarCounter")<= PlayerPrefs.GetInt("L1St")) 
       { 
        PlayerPrefs.SetInt("L1St",3); 
        PlayerPrefs.SetInt("LV1StarCounter",4); 
       } 
      } 

      Application.LoadLevel("levels"); 
     } 

回答

0

你的逻辑是所有的混乱,但ATLEAST有人已经纠正了格式化。所以,你要做的就是

if(step > 12) 
{ 
    if (PlayerPrefs.GetInt("LV1StarCounter")<= PlayerPrefs.GetInt("L1St")) 
    { 
     PlayerPrefs.SetInt("L1St",1); 
     PlayerPrefs.SetInt("LV1StarCounter",2); 
    } 
} 

所以,如果你得到3分,然后Lv1StarCounter被设为4,当你获得1星,因为step > 12,它会怎么做,如果在比较L1St被设置为3。 - 陈述:if(PlayerPrefs.GetInt("LV1StarCounter") <= PlayerPrefs.GetInt("L1St")),评估结果为if(4 >= 3),反过来评估if(true),因此达到内部块将节省一星级评估。没有理由为什么您应该创建另一个“CounterVariable”以便能够在您的比较中使用。重构你的逻辑,例如你可以计算出你想要得分的星星的数量,然后检查玩家已经有多少次开始。因此,在一些伪代码中,这看起来像:

//Figure out the rating 
int stars = 0; 
if(step < 7) stars = 3; 
else if(step > 7 && step < 12) stars = 2; 
else if(step > 12) stars = 1; 

//Did the player get more stars than previosly saved? 
if(stars > PlayerPrefs.GetInt("Lv1Stars")) 
{ 
    //Yes, save the new value 
    PlayerPrefs.SetInt("Lv1Stars", stars); 
} 
//else do NOT save anything. 
+0

Maximilian Gerhardt。我不擅长C#和英语。但你确实帮助了我。它的工作额外 ı从你学到简单。谢谢。 –