Ignore:
Timestamp:
02/23/12 14:18:54 (3 years ago)
Author:
acarter
Message:

Added checking in the Match minigame.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Code/oMaE/oMaE/MiniGames/Match.cs

    r58 r60  
    2020    public class Match : MiniGame
    2121    {
    22         private enum line_t { NONE, NEW, WRONG, CORRECT };
     22        private struct RadioPair { public RadioButton First, Second; public RadioPair(RadioButton first, RadioButton second) { First = first; Second = second; } }
     23        // FIXME Base off of radio buttons and not locations.
     24        private Dictionary<RadioButton, MatchImage> inputs = new Dictionary<RadioButton, MatchImage>(), outputs = new Dictionary<RadioButton, MatchImage>();
     25        private int totalLines = 6;
     26        private int validLines = 0;
     27        private int seed;
     28        private enum LINE_TYPE { NONE, NEW, WRONG, CORRECT };
    2329        RadioGroup radioGroup, matchGroup;
    2430        int[] offset = new int[]{22, 17, 0, 25, 38};
    2531        String[] energies = new String[] { "Kinetic Energy", "Electric Energy", "Chemical Energy", "Sound Energy", "Light Energy", "Thermal Energy", "Wind Energy" };
    26         Dictionary<Vector4, bool> lines = new Dictionary<Vector4, bool>();
     32        Dictionary<RadioPair, LINE_TYPE> pairs = new Dictionary<RadioPair, LINE_TYPE>();
     33
     34        public Match(int seed = 0)
     35        {
     36            this.seed = seed;
     37        }
    2738        /// <summary>
    2839        /// Initializes the match minigame.
     
    3748            matchGroup = new RadioGroup();
    3849            children.Add(matchGroup);
    39             children.Add(new MatchImage(matchGroup, new Image2D("Sprites/drum", new Rectangle(270, 70, 100, 100))));
    40             children.Add(new MatchImage(matchGroup, new Image2D("Sprites/microphone", new Rectangle(295, 190, 50, 100))));
    41             children.Add(new MatchImage(matchGroup, new Image2D("Sprites/speaker", new Rectangle(270, 310, 100, 100))));
     50            // FIXME
     51            LinkedList<String[]> possibilities = new LinkedList<String[]>();
     52            possibilities.AddLast(new String[] { "Sprites/drum", "Kinetic Energy", "Sound Energy"});
     53            possibilities.AddLast(new String[] { "Sprites/microphone", "Sound Energy", "Electric Energy" });
     54            possibilities.AddLast(new String[] { "Sprites/speaker", "Electric Energy", "Sound Energy" });
     55            possibilities.AddLast(new String[] { "Sprites/lightbulb", "Electric Energy", "Light Energy" });
     56            possibilities.AddLast(new String[] { "Sprites/windmill", "Wind Energy", "Electric Energy" });
     57            for (int i = 0; i < 3; ++i)
     58            {
     59                int index = seed % possibilities.Count;
     60                String[] temp = possibilities.ElementAt(index);
     61                possibilities.Remove(temp);
     62                int less_width = temp[0] == "Sprites/microphone" || temp[0] == "Sprites/windmill" ? 50 :
     63                                 temp[0] == "Sprites/lightbulb" ? 32 : 0;
     64                MatchImage image = new MatchImage(matchGroup, new Image2D(temp[0], new Rectangle(270 + less_width / 2, 70 + i * 120, 100 - less_width, 100)), temp[1], temp[2]);
     65                children.Add(image);
     66                inputs.Add(image.Left, image);
     67                outputs.Add(image.Right, image);
     68            }
    4269            base.Initialize();
    4370        }
     71        /// <summary>
     72        /// Updates the radio button pairs
     73        /// </summary>
    4474        public override void Update()
    4575        {
    4676            if (radioGroup.ActiveButton != null && matchGroup.ActiveButton != null)
    4777            {
    48                 Vector4 line = new Vector4(radioGroup.ActiveButton.Center.X,
    49                                            radioGroup.ActiveButton.Center.Y,
    50                                            matchGroup.ActiveButton.Center.X,
    51                                            matchGroup.ActiveButton.Center.Y);
    52                 if (!lines.ContainsKey(line))
    53                     lines.Add(line, true);
    54                 else
    55                     lines[line] = !lines[line];
     78                if((radioGroup.ActiveButton.Center.X < 250) ^ (outputs.ContainsKey(matchGroup.ActiveButton)))
     79                {
     80                    RadioPair pair = new RadioPair(radioGroup.ActiveButton, matchGroup.ActiveButton);
     81                    if (!pairs.ContainsKey(pair))
     82                        pairs.Add(pair, LINE_TYPE.NONE);
     83
     84                    if(pairs[pair] == LINE_TYPE.NONE && validLines < totalLines)
     85                    {
     86                        pairs[pair] = LINE_TYPE.NEW;
     87                        validLines++;
     88                    }
     89                    else if (pairs[pair] == LINE_TYPE.NEW)
     90                    {
     91                        pairs[pair] = LINE_TYPE.NONE;
     92                        validLines--;
     93                    }
     94                }
    5695                radioGroup.ClearActive();
    5796                matchGroup.ClearActive();
    5897            }
    5998            base.Update();
     99        }
     100        /// <summary>
     101        /// Checks for correctness
     102        /// </summary>
     103        public override bool Correct
     104        {
     105            get
     106            {
     107                if(validLines != totalLines)
     108                    return false;
     109                Dictionary<RadioPair, LINE_TYPE> copy = new Dictionary<RadioPair, LINE_TYPE>(pairs);
     110                foreach (KeyValuePair<RadioPair, LINE_TYPE> pair in pairs)
     111                {
     112                    if (pair.Value == LINE_TYPE.NEW)
     113                    {
     114                        if (inputs.ContainsKey(pair.Key.Second) && inputs[pair.Key.Second].From.Contains(pair.Key.First.Text)
     115                            || outputs.ContainsKey(pair.Key.Second) && outputs[pair.Key.Second].To.Contains(pair.Key.First.Text))
     116                        {
     117                            copy[pair.Key] = LINE_TYPE.CORRECT;
     118                        }
     119                        else
     120                        {
     121                            copy[pair.Key] = LINE_TYPE.WRONG;
     122                            validLines--;
     123                        }
     124                    }
     125                }
     126                pairs = copy;
     127                return validLines == totalLines;
     128            }
    60129        }
    61130        /// <summary>
     
    70139            if (matchGroup.ActiveButton != null)
    71140                screen.DrawLine(matchGroup.ActiveButton.Center, gameState.MousePos, Color.Black);
    72             foreach (KeyValuePair<Vector4, bool> pair in lines)
    73                 if (pair.Value)
    74                     screen.DrawLine(new Vector2(pair.Key.X, pair.Key.Y), new Vector2(pair.Key.Z, pair.Key.W), Color.White);
     141            foreach (KeyValuePair<RadioPair, LINE_TYPE> pair in pairs)
     142            {
     143                Color lineColor;
     144                switch(pair.Value)
     145                {
     146                    case LINE_TYPE.NEW:
     147                        lineColor = Color.White;
     148                        break;
     149                    case LINE_TYPE.CORRECT:
     150                        lineColor = Color.DarkGreen;
     151                        break;
     152                    case LINE_TYPE.WRONG:
     153                        lineColor = Color.Red;
     154                        break;
     155                    default:
     156                        continue;
     157                }
     158                screen.DrawLine(pair.Key.First.Center, pair.Key.Second.Center, lineColor);
     159            }
    75160            screen.DrawText("Match the images to the forms of energy that they convert", new Vector2(320, 10), TextHorizontal.CENTERED, TextVertical.TOP, Color.White);
    76161            screen.DrawText("Starts as", new Vector2(220, 60), TextHorizontal.CENTERED, TextVertical.TOP, Color.White);
    77162            screen.DrawText("and becomes", new Vector2(420, 60), TextHorizontal.CENTERED, TextVertical.TOP, Color.White);
     163            screen.DrawText(String.Format("Currently matched {0}/{1} items", validLines, totalLines), new Vector2(800, 300), TextHorizontal.CENTERED, TextVertical.TOP, Color.White);
    78164            base.Draw(screen, gameState);
    79165        }
Note: See TracChangeset for help on using the changeset viewer.