public static Dagger Generate() { Dagger d = new Dagger(); d.Id = 1; d.Name = "匕首"; d.Level = 1; d.ATK = MainRandom.Gen(1, 3); return(d); }
return new Random(MainRandom.Next());
public bool SimulateOneStep() { isSomethingChanged = true; if (isItFirstStep) { weights.Clear(); foreach (var place in Net.places) { weights.Add(place.Id, place.NumberOfTokens); } isItFirstStep = false; } List <VPlace> initialPlaces = new List <VPlace>(); foreach (VPlace place in Net.places) { int numberOfOutgoingArcs = place.ThisArcs.Count(t => place != t.To); //todo вот здесь если токены не кружками, то будет плохо if (place.TokensList.Count != 0 && numberOfOutgoingArcs != 0) { initialPlaces.Add(place); } foreach (Ellipse ellipse in place.TokensList) { ellipse.Fill = Brushes.Black; } } var outgoingTransitions = new List <VTransition>(); foreach (var place in initialPlaces) { foreach (var arc1 in place.ThisArcs) { if (arc1.From != place) { continue; } foreach (var arc2 in arc1.To.ThisArcs) { var mayBeEnabled = true; if (arc2.To != arc1.To) { continue; } foreach (var arc in arc1.To.ThisArcs) { if (arc.To != arc1.To) { continue; } int numberOfRequiredTokens; int.TryParse(arc.Weight, out numberOfRequiredTokens); var numberOfExistingTokens = (arc.From as VPlace).NumberOfTokens; if (numberOfRequiredTokens <= numberOfExistingTokens) { continue; } mayBeEnabled = false; break; } if (!outgoingTransitions.Contains(arc1.To as VTransition) && mayBeEnabled) { outgoingTransitions.Add(arc1.To as VTransition); } } } } if (outgoingTransitions.Count != 0) { foreach (VTransition transition in outgoingTransitions) { (GetKeyByValueForFigures(transition) as Shape).Stroke = Brushes.Black; } if (_isTransitionSelected == false) { if (_modeChoice == Choice.Forced) { if (outgoingTransitions.Count > 1) { _leftMouseButtonMode = LeftMouseButtonMode.ChooseTransition; foreach (VTransition transition in outgoingTransitions) { SolidColorBrush brush = new SolidColorBrush(); brush.Color = Color.FromRgb(255, 0, 51); (GetKeyByValueForFigures(transition) as Shape).Stroke = brush; } return(false); } else { enabledTransition = outgoingTransitions[0]; } } else { var transitionsWithTopPriority = new List <VTransition>(); outgoingTransitions.Sort(new Comparison <VTransition>((VTransition a, VTransition b) => (a.Priority - b.Priority))); var transitionWithTopPriority = outgoingTransitions.Find(new Predicate <VTransition>((VTransition t) => t.Priority > 0)); int topPriority = 0; if (transitionWithTopPriority != null) { topPriority = transitionWithTopPriority.Priority; } outgoingTransitions = outgoingTransitions.FindAll(new Predicate <VTransition>((VTransition a) => (a.Priority == topPriority || a.Priority == 0))); int indexOfEnabledTransition = MainRandom.Next(0, outgoingTransitions.Count); enabledTransition = outgoingTransitions[indexOfEnabledTransition]; } } _isTransitionSelected = false; _leftMouseButtonMode = LeftMouseButtonMode.Select; var isFirstRemove = true; foreach (var arc in enabledTransition.ThisArcs) { if (arc.From == enabledTransition) { continue; } if (colored.Contains(arc.From)) { colored.Remove(arc.From); if (isFirstRemove) { numberOfLevels--; } isFirstRemove = false; } colored.Add(arc.From); } numberOfLevels++; if (colored.Contains(enabledTransition)) { colored.Remove(enabledTransition); numberOfLevels--; } colored.Add(enabledTransition); numberOfLevels++; isFirstRemove = true; foreach (VArc arc in enabledTransition.ThisArcs) { VPlace changedPlace; if (arc.From != enabledTransition) { changedPlace = (arc.From as VPlace); if (changedPlace.NumberOfTokens != 0) { if (changedPlace.NumberOfTokens < 5) { RemoveTokens(changedPlace); } else { MainModelCanvas.Children.Remove(changedPlace.NumberOfTokensLabel); } } int delta; int.TryParse(arc.Weight, out delta); changedPlace.NumberOfTokens -= delta; } else { changedPlace = (arc.To as VPlace); if (changedPlace.NumberOfTokens != 0) { if (changedPlace.NumberOfTokens < 5) { RemoveTokens(changedPlace); } else { MainModelCanvas.Children.Remove(changedPlace.NumberOfTokensLabel); } } int delta; int.TryParse(arc.Weight, out delta); changedPlace.NumberOfTokens += delta; if (colored.Contains(changedPlace)) { colored.Remove(changedPlace); if (isFirstRemove) { numberOfLevels--; } isFirstRemove = false; } colored.Add(changedPlace); } AddTokens(changedPlace); if (arc.From != enabledTransition) { continue; } var placeToColor = (arc.To as VPlace); foreach (var ellepse in placeToColor.TokensList) { var brush = new SolidColorBrush { Color = Color.FromRgb(153, 255, 102) }; ellepse.Fill = brush; ellepse.Stroke = Brushes.Black; } } numberOfLevels++; if (simulationMode == SimulationMode.wave) { ColorFigures(); } if (marking.Count <= 0) { return(false); } oneStepMarking = new int[Net.places.Count]; for (int j = 0; j < Net.places.Count; j++) { oneStepMarking[j] = Net.places[j].NumberOfTokens; } marking.Push(oneStepMarking); maxMarking++; textBoxSimulationCurrentMarking.Text += "M_" + (maxMarking - 1) + " = { "; for (int j = 0; j < oneStepMarking.Length - 1; j++) { textBoxSimulationCurrentMarking.Text += oneStepMarking[j] + " | "; } textBoxSimulationCurrentMarking.Text += oneStepMarking[oneStepMarking.Length - 1] + " }\n"; textBoxSimulationCurrentMarking.ScrollToEnd(); return(false); } else { return(true); } }