Как связать флажок с изображением / случайным результатом в visual studio 2010 с помощью C# .....
Привет всем! это мой первый пост, так что спасибо, что позволили мне опубликовать свой вопрос в сообществе о моей маленькой игре в кости под названием Greedy, которую я смог собрать воедино для удовольствия в свободное время, наблюдая и читая другие посты (в том числе те, которые были найдены здесь до того, как я сам зарегистрировался). То, что у меня есть до сих пор, работает хорошо само по себе, но теперь я хочу добавить некоторые дополнительные функции, чтобы сделать игру немного более сложной.
Это игра в шесть кубиков, которую я узнал от друга много лет назад, и различные комбинации случайных результатов игры в кости будут равны определенным значениям очков. В настоящее время то, что у меня есть, точно определяет любой из результатов очков в каждом броске 6 кубиков и отображает его в текстовом поле, позволяя игроку записать, что было заработано, и отслеживать, насколько высоко они набрали... но это немного излишне само по себе, и интерес к игре может быть быстро потерян, потому что в приложении нет встроенного волнения, как это было при игре с друзьями несколько лет назад, как уже упоминалось.
Чтобы изменить это, я хочу включить флажки под (или сделать графику, которую я использую для отображения различных брошенных кубиков, кнопкой для их удержания), чтобы каждый из кубиков решил держать или нет-аналогично Yahtzee - перед следующим броском. Каждый раз, когда кости блокируются, они остаются такими до тех пор, пока все кости не будут использованы или забиты, прежде чем их можно будет использовать снова, чтобы продолжать зарабатывать очки.
Вопрос 1: Как сделать так, чтобы флажки удерживали все 6 кубиков от повторного броска, позволяя остальным продолжать до тех пор, пока не будет сделан бросок без подсчета очков?
Когда кнопка нажата у меня есть это:
private void btn_RollDice_Click(object sender, EventArgs e) { RollDice(); GetResults(); ResetResults(); }
При каждом нажатии кнопки метки, которые я показываю, сбрасываются, но изображение остается до тех пор, пока кнопка броска не будет нажата снова.
Вопрос 2: Нужно ли мне вынуть его сброс, чтобы это сработало, или как его можно изменить, чтобы он не сбрасывал проверенные кости до того, как кнопка броска будет нажата снова.
Вот этот раздел сбросить :
private void ResetResults() { for (int i = 0; i < diceResults.Length; i++) diceResults[i] = 0; }
Вопрос 3: Нужно ли мне изменять следующие разделы для каждого флажка (1-6), чтобы позволить флажку определять погоду, удерживающую метку, связанную с флажком, может произойти или нет?
private void checkBox1_CheckChanged(object sender, EventArgs e)
В любом случае. Я остановлюсь на этом, любая помощь будет очень признательна. Я с нетерпением жду ваших ответов.
Я вижу, что вы предложили, и это имеет смысл, но я не был уверен, как применить его к моему конкретному игровому проекту, используя переменные, которые у меня уже есть. Как вы можете сказать мои навыки нуждаются в некоторой полировке так что вот весь код:
//Game structure code and Scoring Logic by RCEditor Sept, 2017. Thanks all for the assist in advance of any contribution to this project. //Please add name or handle here to be credited with any additions. These comments are to remain with this source code indefinately. #region Using Statements using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; #endregion namespace DiceGame { public partial class Form1 : Form { #region Declaration Image[] diceImages; int[] dice; int[] diceResults; Random rand; #endregion #region Initialization public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { diceImages = new Image[7]; diceImages[0] = Properties.Resources.BlankDice; diceImages[1] = Properties.Resources.Dice1; diceImages[2] = Properties.Resources.Dice2; diceImages[3] = Properties.Resources.Dice3; diceImages[4] = Properties.Resources.Dice4; diceImages[5] = Properties.Resources.Dice5; diceImages[6] = Properties.Resources.Dice6; dice = new int[6] { 0, 0, 0, 0, 0, 0 }; diceResults = new int[6] { 0, 0, 0, 0, 0, 0 }; rand = new Random(); } public class Die { public bool SetState { get; set; } public int Value { get; set; } } #endregion #region Private Methods private void RollDice() { for (int i = 0; i < dice.Length; i++) { dice[i] = rand.Next(1, 6 + 1); switch (dice[i]) { case 1: diceResults[0]++; break; case 2: diceResults[1]++; break; case 3: diceResults[2]++; break; case 4: diceResults[3]++; break; case 5: diceResults[4]++; break; case 6: diceResults[5]++; break; } } label1.Image = diceImages[dice[0]]; label2.Image = diceImages[dice[1]]; label3.Image = diceImages[dice[2]]; label4.Image = diceImages[dice[3]]; label5.Image = diceImages[dice[4]]; label6.Image = diceImages[dice[5]]; } private void btn_RollDice_Click(object sender, EventArgs e) { RollDice(); GetResults(); ResetResults(); } private void GetResults() { bool oneThroughSix = false, allDoubles = false, threeOnes = false, threeOnesPlus = false, threeTwos = false, threeTwosPlus = false, threeThrees = false, threeThreesPlus = false, threeFours = false, threeFoursPlus = false, threeFives = false, threeFivesPlus = false, threeSixes = false, threeSixesPlus = false, aOne = false, aFive = false, haveOneDouble = false, haveTwoDoubles = false, aBust = false, haveSix = false, haveFive = false, haveFour = false, haveThree = false, haveTwo = false, haveOne = false; #region Scoring Logic // Look for 1-6 Bonus if (diceResults[0] == 1 && diceResults[1] == 1 && diceResults[2] == 1 && diceResults[3] == 1 && diceResults[4] == 1 && diceResults[5] == 1) oneThroughSix = true; for (int i = 0; i < diceResults.Length; i++) { // Look for All doubles Bonus if (diceResults[0] == 2 && diceResults[1] == 2 && diceResults[2] == 2) allDoubles = true; else if (diceResults[1] == 2 && diceResults[2] == 2 && diceResults[3] == 2) allDoubles = true; else if (diceResults[2] == 2 && diceResults[3] == 2 && diceResults[4] == 2) allDoubles = true; else if (diceResults[3] == 2 && diceResults[4] == 2 && diceResults[5] == 2) allDoubles = true; else if (diceResults[4] == 2 && diceResults[3] == 2 && diceResults[1] == 2) allDoubles = true; else if (diceResults[2] == 2 && diceResults[3] == 2 && diceResults[5] == 2) allDoubles = true; else if (diceResults[3] == 2 && diceResults[1] == 2 && diceResults[0] == 2) allDoubles = true; else if (diceResults[3] == 2 && diceResults[4] == 2 && diceResults[5] == 2) allDoubles = true; else if (diceResults[4] == 2 && diceResults[5] == 2 && diceResults[1] == 2) allDoubles = true; else if (diceResults[4] == 2 && diceResults[2] == 2 && diceResults[5] == 2) allDoubles = true; else if (diceResults[0] == 2 && diceResults[2] == 2 && diceResults[3] == 2) allDoubles = true; else if (diceResults[0] == 2 && diceResults[2] == 2 && diceResults[4] == 2) allDoubles = true; else if (diceResults[0] == 2 && diceResults[2] == 2 && diceResults[5] == 2) allDoubles = true; else if (diceResults[0] == 2 && diceResults[3] == 2 && diceResults[4] == 2) allDoubles = true; else if (diceResults[0] == 2 && diceResults[3] == 2 && diceResults[5] == 2) allDoubles = true; else if (diceResults[0] == 2 && diceResults[4] == 2 && diceResults[5] == 2) allDoubles = true; else if (diceResults[2] == 2 && diceResults[4] == 2 && diceResults[1] == 2) allDoubles = true; else if (diceResults[5] == 2 && diceResults[0] == 2 && diceResults[1] == 2) allDoubles = true; else if (diceResults[5] == 2 && diceResults[1] == 2 && diceResults[2] == 2) allDoubles = true; else if (diceResults[3] == 2 && diceResults[5] == 2 && diceResults[1] == 2) allDoubles = true; else if (diceResults[0] == 3) threeOnes = true; else if (diceResults[0] == 4) threeOnesPlus = true; else if (diceResults[0] == 5) threeOnesPlus = true; else if (diceResults[5] == 3) threeSixes = true; else if (diceResults[5] == 4) threeSixesPlus = true; else if (diceResults[5] == 5) threeSixesPlus = true; else if (diceResults[4] == 3) threeFives = true; else if (diceResults[4] == 4) threeFivesPlus = true; else if (diceResults[4] == 5) threeFivesPlus = true; else if (diceResults[3] == 3) threeFours = true; else if (diceResults[3] == 4) threeFoursPlus = true; else if (diceResults[3] == 5) threeFoursPlus = true; else if (diceResults[2] == 3) threeThrees = true; else if (diceResults[2] == 4) threeThreesPlus = true; else if (diceResults[2] == 5) threeThreesPlus = true; else if (diceResults[1] == 3) threeTwos = true; else if (diceResults[1] == 4) threeTwosPlus = true; else if (diceResults[1] == 5) threeTwosPlus = true; //score a 1 else if (diceResults[0] == 1) aOne = true; else if (diceResults[0] == 2) aOne = true; //score a 5 else if (diceResults[4] == 1) aFive = true; //look for two doubles for (int j = 0; j < diceResults.Length; j++) { if (diceResults[1] == 4) haveTwoDoubles = true; else if (diceResults[0] == 2 && diceResults[1] == 2) haveTwoDoubles = true; else if (diceResults[0] == 2 && diceResults[2] == 2) haveTwoDoubles = true; else if (diceResults[0] == 2 && diceResults[3] == 2) haveTwoDoubles = true; else if (diceResults[0] == 2 && diceResults[4] == 2) haveTwoDoubles = true; else if (diceResults[0] == 2 && diceResults[5] == 2) haveTwoDoubles = true; else if (diceResults[4] == 2 && diceResults[1] == 2) haveTwoDoubles = true; else if (diceResults[4] == 2 && diceResults[2] == 2) haveTwoDoubles = true; else if (diceResults[4] == 2 && diceResults[3] == 2) haveTwoDoubles = true; else if (diceResults[4] == 4) haveTwoDoubles = true; else if (diceResults[4] == 2 && diceResults[5] == 2) haveTwoDoubles = true; } // look for doubles if (diceResults[0] == 2) haveOneDouble = true; else if (diceResults[4] == 2) haveOneDouble = true; // look for Bust else if (diceResults[1] == 1) aBust = true; else if (diceResults[2] == 1) aBust = true; else if (diceResults[3] == 1) aBust = true; else if (diceResults[5] == 1) aBust = true; } for (int i = 0; i < dice.Length; i++) { switch (dice[i]) { case 6: haveSix = true; break; case 5: haveFive = true; break; case 4: haveFour = true; break; case 3: haveThree = true; break; case 2: haveTwo = true; break; case 1: haveOne = true; break; } #endregion #region Message Output } if (oneThroughSix) lbl_displayResults.Text = "One through Six is worth 2000 points!"; else if (allDoubles) lbl_displayResults.Text = "All Doubles are worth 1500 points!"; else if (threeOnes) lbl_displayResults.Text = "Three Ones are worth 1000 points!"; else if (threeOnesPlus) lbl_displayResults.Text = "Three Ones are worth 1000 points and remain consecutive at that value until next roll."; else if (threeSixes) lbl_displayResults.Text = "Three Sixes are worth 600 points!"; else if (threeSixesPlus) lbl_displayResults.Text = "Three Sixes are worth 600 points and remain consecutive at that value until next roll."; else if (threeFives) lbl_displayResults.Text = "Three Fives are worth 500 points!"; else if (threeFivesPlus) lbl_displayResults.Text = "Three Fives are worth 500 points and remain consecutive at that value until next roll."; else if (threeFours) lbl_displayResults.Text = "Three Fours are worth 400 points!"; else if (threeFoursPlus) lbl_displayResults.Text = "Three Fours are worth 400 points and remain consecutive at that value until next roll."; else if (threeThrees) lbl_displayResults.Text = "Three Threes are worth 300 points!"; else if (threeThreesPlus) lbl_displayResults.Text = "Three Threes are worth 300 points and remain consecutive at that value until next roll."; else if (threeTwos) lbl_displayResults.Text = "Three Twos are worth 200 points!"; else if (threeTwosPlus) lbl_displayResults.Text = "Three Twos are worth 200 points and remain consecutive at that value until next roll."; else if (aOne) lbl_displayResults.Text = "Ones are always worth 100 points!"; else if (aFive) lbl_displayResults.Text = "Fives are always worth 50 points!"; else if (haveTwoDoubles) lbl_displayResults.Text = "Two Doubles only score if 1's or 5's\r\n(1's = 100 and 5's = 50)"; else if (haveOneDouble) lbl_displayResults.Text = "Doubles only score if 1's or 5's\r\n(1's = 100 and 5's = 50)"; else if (aBust) lbl_displayResults.Text = "You were too GREEDY!!!\r\nNothing scored!\r\n-GAME OVER-"; } private void ResetResults() { for (int i = 0; i < diceResults.Length; i++) diceResults[i] = 0; } #endregion private void checkBox1_CheckedChanged(object sender, EventArgs e) { } private void checkBox2_CheckedChanged(object sender, EventArgs e) { } private void checkBox3_CheckedChanged(object sender, EventArgs e) { } private void checkBox4_CheckedChanged(object sender, EventArgs e) { } private void checkBox5_CheckedChanged(object sender, EventArgs e) { } private void checkBox6_CheckedChanged(object sender, EventArgs e) { } private void textBox1_TextChanged(object sender, EventArgs e) { } private void label7_Click(object sender, EventArgs e) { } private void lbl_displayResults_Click(object sender, EventArgs e) { } private void label6_Click(object sender, EventArgs e) { } private void label5_Click(object sender, EventArgs e) { } private void label4_Click(object sender, EventArgs e) { } private void label3_Click(object sender, EventArgs e) { } private void label2_Click(object sender, EventArgs e) { } private void label1_Click(object sender, EventArgs e) { } } } #endregion
Что я уже пробовал:
Я попытался присвоить каждому флажку логическое значение false и сделать его истинным при проверке, но не смог заполнить пробел, чтобы связать это действие с удержанием проверенных кубиков перед следующим повторным броском. Кажется, что это должно работать, но я не уверен, где должен быть результат выбора флажка или нет в коде, чтобы убедиться, что он не откатывает те, которые выбраны, когда
btn_RollDice_ClickedДалее нажимается переменная кнопки рулона, она же переменная кнопки рулона.
У меня есть еще пара коряг, с которыми я столкнулся до сих пор, но я спрошу их в более позднем посте, если все еще неясно, после того как сообщество здесь соберет свои головы вместе, чтобы обеспечить рабочее решение!
В любом случае.... Поболтаем с тобой поскорее!
И заранее спасибо, что нашли время просмотреть то, что я здесь разместил.
-Привет