我正在制作老虎机,我希望betValidation()
中的var'bet'可以在result()
函数中使用。我的目标是如果在firstRandomNumberGenerator()
中生成的两个随机数是相同的,则玩家下注的赌注将增加三倍并且将被添加回他当前的筹码数量。 ):但为了做到这一点,我需要下注(一个局部变量)并将其放在result()
但我不知道如何。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace randomProjectTAKE3
{
class Program
{
static void Main()
{
float playerChips = 1000;
Console.Write("Player's Chips: ");
Console.WriteLine(playerChips);
Console.Write("1. Play Slot ");
Console.WriteLine("2. Exit");
choice();
result();
Console.ReadKey();
}
static void Update()
{
}
static void choice()
{
float choice = float.Parse(Console.ReadLine());
if (choice == 1)
{
firstRandomNumberGenerator();
}
else if (choice == 2)
{
return;
}
}
static void betValidation()
{
float playerChips = 1000;
float currentPlayerChips;
Console.WriteLine("Enter your bet: ");
**var bet = float.Parse(Console.ReadLine());**
if ((bet <= 0) || (bet > playerChips))
{
Console.WriteLine("You did not enter a valid bet.\n");
Main();
}
}
static void firstRandomNumberGenerator()
{
betValidation();
Random r = new Random();
int firstNumber = r.Next(2, 8);
int secondNumber = r.Next(2, 8);
int thirdNumber = r.Next(2, 8);
Console.Write(firstNumber);
Console.Write(secondNumber);
Console.Write(thirdNumber);
Console.Write("\n");
}
**static void result()**
{
}
}
}
答案 0 :(得分:0)
有几种方法可以实现这一点,一种方法是将赌注作为一个字段移动到程序的范围内(名称_currentBet会很有用),而不是在函数中声明,因此它可以被引用为根据需要多次。
然后当玩家下注时,你可以解析并分配给变量。对于你的玩家的筹码来说,这也是理想的选择。
class Program
{
private float _playersChips = 1000;
private float _currentBet;
static void Main()
{
//So on and so forth.
}
}
答案 1 :(得分:0)
我唯一的想法是将变量By Reference
从方法传递给另一个方法,
检查此link
答案 2 :(得分:0)
查看您的代码,您正在以procedural(而非object-oriented)样式编写控制台应用程序......虽然这可以在C#中完成,但对于大型应用程序,它可以使代码维护很头疼。
无论如何,我会尽力帮助你......
Miles的答案基本上是使用全局变量而不是本地变量,这在以程序样式编程时是一个很好的建议,但是,另一个选择是让playerChips成为reference method parameter(如Hussein所建议的那样) )可以在方法之间传递(和修改)...所以(使用他们的两个建议)你的代码将改变为如下工作:
class Program
{
public static float _playerChips = 1000;
private static void Main()
{
Console.Write("Player's Chips: ");
Console.WriteLine(_playerChips);
Console.Write("1. Play Slot ");
Console.WriteLine("2. Exit");
choice(ref _playerChips);
result(_playerChips);
Console.ReadKey();
}
private static void choice(ref float playerChips)
{
int choice = int.Parse(Console.ReadLine());
if (choice == 1)
{
firstRandomNumberGenerator(ref playerChips);
}
if (choice == 2)
Environment.Exit(0);
}
private static void betValidation(ref float playerChips, ref float bet)
{
Console.WriteLine("Enter your bet: ");
bet = float.Parse(Console.ReadLine());
if ((bet <= 0) || (bet > playerChips))
{
Console.WriteLine("You did not enter a valid bet.\n");
Main();
}
}
private static void firstRandomNumberGenerator(ref float playerChips)
{
float bet = 0;
betValidation(ref playerChips, ref bet);
System.Random r = new System.Random();
int firstNumber = r.Next(2, 8);
int secondNumber = r.Next(2, 8);
int thirdNumber = r.Next(2, 8);
if (firstNumber == secondNumber || firstNumber == thirdNumber || thirdNumber == secondNumber)
playerChips = playerChips + (bet * 3);
Console.Write(firstNumber);
Console.Write(secondNumber);
Console.Write(thirdNumber);
Console.Write("\n");
}
private static void Update()
{
return;
}
private static void result(float playerChips)
{
return;
}
}
现在,我还改变了你编写的 choice()方法来调用Environment.Exit()并退出程序 - 原因是,通过执行Main()你就是本质上调用方法中方法中的方法并增加stack最终将导致Stack Overflow ...我会考虑更改Main()方法以使用基于choice()返回结果的循环而不是再次从betValidation方法调用Main()(但我没有为你做这个)。