c# - 您如何使用返回值,但不再次运行整个代码?
问题描述
所以我正在尝试创建一个二十一点游戏,但如果玩家想要获得另一张牌而不再次运行整个代码并重置前两张牌,我不知道如何从处理前两张牌中获得返回值之前处理过. 我知道我正在要求再次执行代码,但我想知道是否有人知道如何在不执行整个代码的情况下执行它,但仍然获得返回值。
我提出了整个代码,这样如果有人可以帮助我,他们就会对我正在尝试做的事情有所了解。
对不起,我是这个网站的新手,所以我不知道如何让它看起来不错。希望任何人都可以提供帮助。:)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Gamble
{
public partial class Form2: Form
{
public Form2()
{
InitializeComponent();
}
public Form2(string value)
{
InitializeComponent();
lblValue.Text = value;
this.value = value;
}
public string value { get; set; }
private void button1_Click(object sender, EventArgs e)
{
//back
Form1 frm1 = new Form1();
frm1.Show();
this.Close();
}
public int[] CardNR()
{
string[] paths = Directory.GetFiles(@"C:\Downloads", "*.png");
List<string> images = paths.ToList();
Random random = new Random();
int[] s = { random.Next(0, images.Count - 1), random.Next(0, images.Count - 1), random.Next(0, images.Count - 1), random.Next(0, images.Count - 1), random.Next(0, images.Count - 1), random.Next(0, images.Count - 1), random.Next(0, images.Count - 1), random.Next(0, images.Count - 1), random.Next(0, images.Count - 1), random.Next(0, images.Count - 1) };
return s;
}
public int DScore(int[] s)
{
string[] images = Directory.GetFiles(@"C:\Downloads", "*.png");
List<string> paths = images.ToList();
string[] score = Directory.GetFiles(@"C:\Downloads", "*.png");
int DealP = 0;
Random random = new Random();
for (int i = 0; i < 10; i++)
{
Dealer1.ImageLocation = paths[s[0]];
Dealer2.ImageLocation = paths[s[1]];
}
for (int i = 0; i < 2 ; i++)
{
if (paths[s[i]] == score[0] || paths[s[i]] == score[1] || paths[s[i]] == score[2] || paths[s[i]] == score[3] || paths[s[i]] == score[40] || paths[s[i]] == score[41] || paths[s[i]] == score[42] || paths[s[i]] == score[43] || paths[s[i]] == score[44] || paths[s[i]] == score[45] || paths[s[i]] == score[46] || paths[s[i]] == score[47] || paths[s[i]] == score[48] || paths[s[i]] == score[49] || paths[s[i]] == score[50] || paths[s[i]] == score[51])
{
DealP += 10;
}
else if (paths[s[i]] == score[4] || paths[s[i]] == score[5] || paths[s[i]] == score[6] || paths[s[i]] == score[7])
{
DealP += 2;
}
else if (paths[s[i]] == score[8] || paths[s[i]] == score[9] || paths[s[i]] == score[10] || paths[s[i]] == score[11])
{
DealP += 3;
}
else if (paths[s[i]] == score[12] || paths[s[i]] == score[13] || paths[s[i]] == score[14] || paths[s[i]] == score[15])
{
DealP += 4;
}
else if (paths[s[i]] == score[16] || paths[s[i]] == score[17] || paths[s[i]] == score[18] || paths[s[i]] == score[19])
{
DealP += 5;
}
else if (paths[s[i]] == score[20] || paths[s[i]] == score[21] || paths[s[i]] == score[22] || paths[s[i]] == score[23])
{
DealP += 6;
}
else if (paths[s[i]] == score[24] || paths[s[i]] == score[25] || paths[s[i]] == score[26] || paths[s[i]] == score[27])
{
DealP += 7;
}
else if (paths[s[i]] == score[28] || paths[s[i]] == score[29] || paths[s[i]] == score[30] || paths[s[i]] == score[31])
{
DealP += 8;
}
else if (paths[s[i]] == score[32] || paths[s[i]] == score[33] || paths[s[i]] == score[34] || paths[s[i]] == score[35])
{
DealP += 9;
}
else if (paths[s[i]] == score[36] || paths[s[i]] == score[37] || paths[s[i]] == score[38] || paths[s[i]] == score[39])
{
DealP += 11;
}
}
DP.Text = (Convert.ToString(DealP));
return DealP;
}
public int PScore(int[] s)
{
string[] images = Directory.GetFiles(@"C:\Downloads", "*.png");
List<string> paths = images.ToList();
string[] score = Directory.GetFiles(@"C:\Downloads", "*.png");
Random random = new Random();
for (int i = 0; i < 10; i++)
{
PCard1.ImageLocation = paths[s[2]];
PCard2.ImageLocation = paths[s[3]];
}
int PlayerP = 0;
for (int i = 2; i < 4; i++)
{
if (paths[s[i]] == score[0] || paths[s[i]] == score[1] || paths[s[i]] == score[2] || paths[s[i]] == score[3] || paths[s[i]] == score[40] || paths[s[i]] == score[41] || paths[s[i]] == score[42] || paths[s[i]] == score[43] || paths[s[i]] == score[44] || paths[s[i]] == score[45] || paths[s[i]] == score[46] || paths[s[i]] == score[47] || paths[s[i]] == score[48] || paths[s[i]] == score[49] || paths[s[i]] == score[50] || paths[s[i]] == score[51])
{
PlayerP += 10;
}
else if (paths[s[i]] == score[4] || paths[s[i]] == score[5] || paths[s[i]] == score[6] || paths[s[i]] == score[7])
{
PlayerP += 2;
}
else if (paths[s[i]] == score[8] || paths[s[i]] == score[9] || paths[s[i]] == score[10] || paths[s[i]] == score[11])
{
PlayerP += 3;
}
else if (paths[s[i]] == score[12] || paths[s[i]] == score[13] || paths[s[i]] == score[14] || paths[s[i]] == score[15])
{
PlayerP += 4;
}
else if (paths[s[i]] == score[16] || paths[s[i]] == score[17] || paths[s[i]] == score[18] || paths[s[i]] == score[19])
{
PlayerP += 5;
}
else if (paths[s[i]] == score[20] || paths[s[i]] == score[21] || paths[s[i]] == score[22] || paths[s[i]] == score[23])
{
PlayerP += 6;
}
else if (paths[s[i]] == score[24] || paths[s[i]] == score[25] || paths[s[i]] == score[26] || paths[s[i]] == score[27])
{
PlayerP += 7;
}
else if (paths[s[i]] == score[28] || paths[s[i]] == score[29] || paths[s[i]] == score[30] || paths[s[i]] == score[31])
{
PlayerP += 8;
}
else if (paths[s[i]] == score[32] || paths[s[i]] == score[33] || paths[s[i]] == score[34] || paths[s[i]] == score[35])
{
PlayerP += 9;
}
else if (paths[s[i]] == score[36] || paths[s[i]] == score[37] || paths[s[i]] == score[38] || paths[s[i]] == score[39])
{
PlayerP += 11;
}
}
PP.Text = (Convert.ToString(PlayerP));
return PlayerP;
}
private void Form2_Load(object sender, EventArgs e)
{
lblValue.Text = value;
this.Hide();
}
private void DealCards_Click(object sender, EventArgs e)
{
DScore(CardNR());
PScore(CardNR());
}
public int HitCard(int[] s,int PlayerP)
{
string[] images = Directory.GetFiles(@"C:\Downloads", "*.png");
List<string> paths = images.ToList();
string[] score = Directory.GetFiles(@"C:\Downloads", "*.png");
Random random = new Random();
for (int i = 0; i < 10; i++)
{
PCard3.ImageLocation = paths[s[4]];
}
int HitPlayerP = 0;
for (int i = 4; i < 5; i++)
{
if (paths[s[i]] == score[0] || paths[s[i]] == score[1] || paths[s[i]] == score[2] || paths[s[i]] == score[3] || paths[s[i]] == score[40] || paths[s[i]] == score[41] || paths[s[i]] == score[42] || paths[s[i]] == score[43] || paths[s[i]] == score[44] || paths[s[i]] == score[45] || paths[s[i]] == score[46] || paths[s[i]] == score[47] || paths[s[i]] == score[48] || paths[s[i]] == score[49] || paths[s[i]] == score[50] || paths[s[i]] == score[51])
{
HitPlayerP += 10;
}
else if (paths[s[i]] == score[4] || paths[s[i]] == score[5] || paths[s[i]] == score[6] || paths[s[i]] == score[7])
{
HitPlayerP += 2;
}
else if (paths[s[i]] == score[8] || paths[s[i]] == score[9] || paths[s[i]] == score[10] || paths[s[i]] == score[11])
{
HitPlayerP += 3;
}
else if (paths[s[i]] == score[12] || paths[s[i]] == score[13] || paths[s[i]] == score[14] || paths[s[i]] == score[15])
{
HitPlayerP += 4;
}
else if (paths[s[i]] == score[16] || paths[s[i]] == score[17] || paths[s[i]] == score[18] || paths[s[i]] == score[19])
{
HitPlayerP += 5;
}
else if (paths[s[i]] == score[20] || paths[s[i]] == score[21] || paths[s[i]] == score[22] || paths[s[i]] == score[23])
{
HitPlayerP += 6;
}
else if (paths[s[i]] == score[24] || paths[s[i]] == score[25] || paths[s[i]] == score[26] || paths[s[i]] == score[27])
{
HitPlayerP += 7;
}
else if (paths[s[i]] == score[28] || paths[s[i]] == score[29] || paths[s[i]] == score[30] || paths[s[i]] == score[31])
{
HitPlayerP += 8;
}
else if (paths[s[i]] == score[32] || paths[s[i]] == score[33] || paths[s[i]] == score[34] || paths[s[i]] == score[35])
{
HitPlayerP += 9;
}
else if (paths[s[i]] == score[36] || paths[s[i]] == score[37] || paths[s[i]] == score[38] || paths[s[i]] == score[39])
{
HitPlayerP += 11;
}
}
PlayerP += HitPlayerP;
PP.Text = (Convert.ToString(PlayerP));
return HitPlayerP;
}
private void Hit_Click(object sender, EventArgs e)
{
HitCard(CardNR(),PScore(CardNR()));
}
}
}
解决方案
您的程序中有很多不需要的字面比较。我建议为您的所有卡片实现一个类,例如 TK 在这里回答:Best way to representation game card class in C#
using System.Drawing;
public class Card
{
public int Value { get; private set; }
public enum SuitType
{
Clubs, Spades, Hearts, Diamonds
}
public SuitType Suit { get; set; }
public Image Image { get; set; }
public Card(int value, SuitType suit, Image image)
{
Suit = suit;
Image = image;
Value = value;
}
public Card(string input)
{
if (input == null || input.Length < 2 || input.Length > 2)
throw new ArgumentException();
switch (input[0])
{
case 'C': case 'c':
Suit = SuitType.Clubs;
break;
case 'S': case 's':
Suit = SuitType.Spades;
break;
case 'H': case 'h':
Suit = SuitType.Hearts;
break;
case 'D': case 'd':
Suit = SuitType.Diamonds;
break;
default:
throw new ArgumentException();
}
int uncheckedValue = (int)input[1];
if (uncheckedValue > 14 || uncheckedValue < 1)
throw new ArgumentException();
Value = uncheckedValue;
}
public string encode()
{
string encodedCard = "";
switch (Suit)
{
case SuitType.Clubs:
encodedCard += 'c';
break;
case SuitType.Spades:
encodedCard += 's';
break;
case SuitType.Hearts:
encodedCard += 'h';
break;
case SuitType.Diamonds:
encodedCard += 'd';
break;
}
encodedCard += (char) Value;
return encodedCard;
}
public override string ToString()
{
string output = "";
if (Value > 10)
{
switch (Value)
{
case 11:
output += "Jack";
break;
case 12:
output += "Queen";
break;
case 13:
output += "King";
break;
case 14:
output += "Ace";
break;
}
}
else
{
output += Value;
}
output += " of " + System.Enum.GetName(typeof(SuitType), Suit);
return output;
}
}
我做了一些细微的编辑,以便您可以为每张卡片添加图片。然后你可以运行这样的东西来填充甲板:
public static List<Card> Deck;
private static void Main()
{
Deck = new List<Card>();
SuitType? Suit = null;
int Value;
for (var i = 0; i < 4; i++)
{
for (var j = 0; j < 13; j++)
{
Suit = i switch
{
0 => SuitType.Clubs,
1 => SuitType.Spades,
2 => SuitType.Hearts,
3 => SuitType.Diamonds,
_ => throw new ArgumentOutOfRangeException()
};
Value = j;
Deck.Add(new Card(Value, Suit, System.Drawing.Image.FromFile("//PATH HERE//")));
}
}
}
然后,您将获得一张卡片列表,您可以使用这些卡片来获取价值和花色。制作一个名为“已使用”或类似名称的单独列表,并将卡片从一张移到另一张,以跟踪哪些卡片已被使用。这应该允许您通过在牌组中随机抽取一张未使用的牌然后将其丢弃到另一个列表来“击中”。这应该为您提供解决原始问题的方法。
推荐阅读
- python - 找到两个列表的所有组合
- machine-learning - 如何获取火炬中心模型生成的翻译的对齐或注意信息?
- python - 在 Python 中从 3D 图像中提取补丁
- c# - 如何解决在 Visual Studio 中未执行测试的以下问题
- python - 将带括号的字符串解析为参数
- google-custom-search - Google Web Detection 搜索本地结果
- html - 删除跨度内的文本
- vb.net - 数据库插入仅适用于整数,不适用于字符串
- docker - 如何在 Heroku 上部署 dockerized 应用程序?
- python - 如果 for 循环将列表 [0,0,7] 添加到“codelist”,我正在尝试返回 True,但即使我的列表中没有这些数字,我也会得到 True