clwprogrammer
Во-первых, try..catch предназначен для перехвата ошибок в коде. Здесь от этого будет мало толку. Другое дело, что вы захотите объявить переменные в начале класса form. Также рекомендуется создавать константы для любых будущих значений, которые вы, возможно, захотите изменить (например, начальный баланс). в будущем, с помощью этой константы, если вы хотите изменить начальный баланс, вы просто измените эту одну переменную, чтобы вам не пришлось искать весь ваш код, чтобы найти и изменить его каждый раз, когда у вас есть 500:
public partial class Form1 : Form
{
//Constants for future updates in case you want to change some base numbers around
static decimal START_BALANCE = 500;
//create random number generator
Random rollDice = new Random();
//some variables
decimal currentBalance = 0;
decimal betAmount = 0;
//Dice Values
int player1Dice = 0;
int player2Dice = 0;
int player3Dice = 0;
int playerDiceTotal = 0;
int comp1Dice = 0;
int comp2Dice = 0;
int comp3Dice = 0;
int compDiceTotal = 0;
//To determine the winner
int winner = 0;
Что касается отображения текущего баланса игрока в форме, то лучшим способом было бы создать повторно используемую функцию для обновления пользовательского интерфейса игрока. Пример
private void updateUserInterface()
{
//Show Currency Amount in USD formatting rules.
textBoxCurrentBalance.Text = currentBalance.ToString("$#,##0.00");
//Show Player Dice Values
txtPlayerDice1.Text = player1Dice.ToString();
txtPlayerDice2.Text = player2Dice.ToString();
txtPlayerDice3.Text = player3Dice.ToString();
txtPlayerTotal.Text = playerDiceTotal.ToString();
txtComputerDice1.Text =comp1Dice.ToString();
txtComputerDice2.Text = comp2Dice.ToString();
txtComputerDice3.Text = comp3Dice.ToString();
txtComputerTotal.Text = compDiceTotal.ToString();
if (playerDiceTotal > 0 && compDiceTotal > 0)
{
switch (winner)
{
case 0:
label5.Text = "Draw";
break;
case 1:
label5.Text = "Player Wins";
break;
case 2:
label5.Text = "Computer Wins";
break;
}
}
}
Что же касается собственно броска костей
private void buttonRollDice_Click(object sender, EventArgs e)
{
Random r = new Random();
Decimal.TryParse(textBoxBetAmount.Text, out betAmount);
if (currentBalance > betAmount && textBoxBetAmount.Text != "")
{
player1Dice = r.Next(1, 7);
player2Dice = r.Next(1, 7);
player3Dice = r.Next(1, 7);
playerDiceTotal = player1Dice + player2Dice + player3Dice;
comp1Dice = r.Next(1, 7);
comp2Dice = r.Next(1, 7);
comp3Dice = r.Next(1, 7);
compDiceTotal = comp3Dice + comp2Dice + comp1Dice;
int playerDiff = 18 - playerDiceTotal;
int compDiff = 18 - compDiceTotal;
if (playerDiff > compDiff)
{
//computer is closest to 18
winner = 2;
}
else if (playerDiff==compDiff)
{
//draw
winner = 0;
}
else if (playerDiff < compDiff)
{
//player is closest to 18
winner = 1;
}
updateUserInterface();
}
else
{
MessageBox.Show("Error, Please enter dollar amount smaller or equal to your Current Balance.");
}
}
Рекомендуется добавить функцию для инициализации всех переменных, которые должны иметь начальные значения(например, установка текущего баланса на начальный баланс):
private void InitializeVariables()
{
currentBalance = START_BALANCE;
}
а в конструкторе формы, где вызывается InitializeComponent, мы хотим вызвать функции InitializeVariables и updateUserInterface:
public Form1()
{
InitializeComponent();
InitializeVariables();
updateUserInterface();
}
Класс формы в целом:
using System;
using System.CodeDom;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
//Some constants for future Changes
static decimal START_BALANCE = 500;
//
decimal currentBalance = 0;
decimal betAmount = 0;
int player1Dice = 0;
int player2Dice = 0;
int player3Dice = 0;
int playerDiceTotal = 0;
int comp1Dice = 0;
int comp2Dice = 0;
int comp3Dice = 0;
int compDiceTotal = 0;
//0 = draw, 1 = player, 2 = computer
int winner = 0;
public Form1()
{
InitializeComponent();
InitializeVariables();
updateUserInterface();
}
private void InitializeVariables()
{
currentBalance = START_BALANCE;
}
private void buttonRollDice_Click(object sender, EventArgs e)
{
Random r = new Random();
Decimal.TryParse(textBoxBetAmount.Text, out betAmount);
if (currentBalance > betAmount && textBoxBetAmount.Text != "")
{
player1Dice = r.Next(1, 7);
player2Dice = r.Next(1, 7);
player3Dice = r.Next(1, 7);
playerDiceTotal = player1Dice + player2Dice + player3Dice;
comp1Dice = r.Next(1, 7);
comp2Dice = r.Next(1, 7);
comp3Dice = r.Next(1, 7);
compDiceTotal = comp3Dice + comp2Dice + comp1Dice;
int playerDiff = 18 - playerDiceTotal;
int compDiff = 18 - compDiceTotal;
if (playerDiff > compDiff)
{
//computer is closest to 18
winner = 2;
}
else if (playerDiff==compDiff)
{
//draw
winner = 0;
}
else if (playerDiff < compDiff)
{
//player is closest to 18
winner = 1;
}
updateUserInterface();
}
else
{
MessageBox.Show("Error, Please enter dollar amount smaller or equal to your Current Balance.");
}
}
private void updateUserInterface()
{
//Show Currency Amount in USD formatting rules.
textBoxCurrentBalance.Text = currentBalance.ToString("$#,##0.00");
//Show Player Dice Values
txtPlayerDice1.Text = player1Dice.ToString();
txtPlayerDice2.Text = player2Dice.ToString();
txtPlayerDice3.Text = player3Dice.ToString();
txtPlayerTotal.Text = playerDiceTotal.ToString();
txtComputerDice1.Text =comp1Dice.ToString();
txtComputerDice2.Text = comp2Dice.ToString();
txtComputerDice3.Text = comp3Dice.ToString();
txtComputerTotal.Text = compDiceTotal.ToString();
if (playerDiceTotal > 0 && compDiceTotal > 0)
{
switch (winner)
{
case 0:
label5.Text = "Draw";
break;
case 1:
label5.Text = "Player Wins";
break;
case 2:
label5.Text = "Computer Wins";
break;
}
}
}
}
}
Я знаю, что сделал несколько предложений, в которых я бы использовал лично. У каждого разработчика есть свой собственный способ делать вещи, я просто хотел бы сделать некоторые вещи немного проще для себя, чтобы мне не приходилось повторять один и тот же код снова и снова. Это также приводит к уменьшению количества строк кода. Надеюсь, это вам поможет. Удачи.(Надеюсь, в коде нет никаких опечаток, так как это может быть действительно болезненным поиском).