我的BlackJack程序存在问题。这是BlackJack.cs中的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public class blackjack
{
static string[] playercards = new string[11];
static string hitstay = "";
static int total = 0, count = 1, dealertotal = 0;
static Random cardshuffler = new Random();
static Form1 f1 = new Form1();
public static void start()
{
dealertotal = cardshuffler.Next(15, 22);
playercards[0] = deal();
playercards[1] = deal();
f1.TextValue = "test";
bj();
}
private static void hit()
{
count += 1;
playercards[count] = deal();
f1.playertb.Text += "you were dealed a(n) " + playercards[count] + ".your new total is " + total + ".";
if (total.Equals(21))
{
f1.playertb.Text += "you got blackjack! the dealer's total was " + dealertotal + ".would you like to play again?";
playagain();
}
else if (total > 21)
{
f1.playertb.Text += "you busted, therefore you lost. sorry. the dealer's total was " + dealertotal + ".would you like to play again? y/n";
playagain();
}
else if (total < 21)
{
do
{
f1.playertb.Text += "would you like to hit or stay?";
} while (!hitstay.Equals(f1.Hit) && !hitstay.Equals(f1.Stay));
bj();
}
}
private static string deal()
{
string Card = "";
int cards = cardshuffler.Next(1, 14);
switch (cards)
{
case 1: Card = "Two"; total += 2;
break;
case 2: Card = "Three"; total += 3;
break;
case 3: Card = "Four"; total += 4;
break;
case 4: Card = "Five"; total += 5;
break;
case 5: Card = "Six"; total += 6;
break;
case 6: Card = "Seven"; total += 7;
break;
case 7: Card = "Eight"; total += 8;
break;
case 8: Card = "Nine"; total += 9;
break;
case 9: Card = "Ten"; total += 10;
break;
case 10: Card = "Jack"; total += 10;
break;
case 11: Card = "Queen"; total += 10;
break;
case 12: Card = "King"; total += 10;
break;
case 13: Card = "Ace"; total += 11;
break;
}
return Card;
}
static void bj()
{
if (hitstay.Equals (f1.Hit))
{
hit();
}
else if (hitstay.Equals(f1.Stay))
{
if (total > dealertotal && total <= 21)
{
f1.PlayerText += "you won! the dealer busted with " + dealertotal + " as their total" + "your total was " + total;
playagain();
}
else if (total < dealertotal)
{
f1.PlayerText += "sorry, you lost! the dealer's total was " + dealertotal;
playagain();
}
}
}
private static void playagain()
{
}
}
}
现在这是我的Form1.cs代码:
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;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult result = MessageBox.Show
("Are You Sure You Want To Close?",
"",
MessageBoxButtons.OK,
MessageBoxIcon.Warning);
if (result == DialogResult.Cancel)
e.Cancel = true;
}
public void button1_Click(object sender, EventArgs e)
{
BetForm betForm = new BetForm();
betForm.StartPosition = FormStartPosition.CenterParent;
if (betForm.ShowDialog() == DialogResult.OK)
{
MessageBox.Show("You bet $" + betForm.Bet);
}
}
public string TextValue
{
set
{
playertb.Text = value;
}
}
public string PlayerText
{
get { return playertb.Text; }
set { playertb.Text = value; }
}
private void Stay_Click(object sender, EventArgs e)
{
}
private void Play_Click(object sender, EventArgs e)
{
blackjack.start();
}
}
}
问题是,当我按下表单上的“播放”按钮时,它应该在BlackJack类中执行start()。当它执行时,应该在“playertb”中写入一些文本框。什么都没有写在文本框中,我无法做任何事情。请帮忙。
答案 0 :(得分:0)
在二十一点类中,您创建一个名为f1的Form1的第二个实例,但您从未显示它。您从Form1的第一个实例调用blackjack.Start()。
要解决此问题,您可以尝试以下方法:
static Form1 f1 = null; // declare it, but don't initialise it (we'll get
// it when start() is called )
public static void start(Form1 form)
{
// set the static reference to the calling form,
f1 = form
dealertotal = cardshuffler.Next(15, 22);
playercards[0] = deal();
playercards[1] = deal();
f1.TextValue = "test";
bj();
}
然后,在您的Form1类中,
blackjack.start(this);
虽然,如果我自己设计这个,我会使blackjack
成为一个带有构造函数的非静态类。目前,你一次只能玩一次二十一点游戏。然后我会通过事件发出游戏变化的信号。这可以防止二十一点类必须知道Form1的情况。原则上,二十一点应该对UI层知之甚少或一无所知。这使您的代码更具可移植性和可重用性。