C# 如何将这些方法移动到另一个类并调用它?
我正在为我的编程课制作一个名为“行话”的游戏。我已经把大部分时间用在工作上了。但是我们应该在form类中拥有尽可能少的代码。所以我不得不把它的大部分转移到另一个班级。我该怎么做有什么想法吗C# 如何将这些方法移动到另一个类并调用它?,c#,C#,我正在为我的编程课制作一个名为“行话”的游戏。我已经把大部分时间用在工作上了。但是我们应该在form类中拥有尽可能少的代码。所以我不得不把它的大部分转移到另一个班级。我该怎么做有什么想法吗 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text;
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;
using System.Text.RegularExpressions;
using System.IO;
namespace Lingo
{
public partial class Form1 : Form
{
Random r = new Random();
AboutBox1 about = new AboutBox1();
int gissningar, x, score, highcsore;
Label[] labels = new Label[25];
string ord;
public Form1()
{
InitializeComponent();
gissningar = 0;
x = 0;
score = 1000;
highcsore = 0;
labels[0] = label1;
labels[1] = label2;
labels[2] = label3;
labels[3] = label4;
labels[4] = label5;
labels[5] = label6;
labels[6] = label7;
labels[7] = label8;
labels[8] = label9;
labels[9] = label10;
labels[10] = label11;
labels[11] = label12;
labels[12] = label13;
labels[13] = label14;
labels[14] = label15;
labels[15] = label16;
labels[16] = label17;
labels[17] = label18;
labels[18] = label19;
labels[19] = label20;
labels[20] = label21;
labels[21] = label22;
labels[22] = label23;
labels[23] = label24;
labels[24] = label25;
String[] ordLista = File.ReadAllLines(("words.txt").ToString());
ord = ordLista[r.Next(r.Next(ordLista.Length))];
ord = ord.ToUpper();
labels[0].Text = Convert.ToString(ord[0]);
}
private void quitToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
}
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
{
about.Show();
}
private void addWordsToolStripMenuItem_Click(object sender, EventArgs e)
{
new Form2().Show();
}
private void button1_Click(object sender, EventArgs e)
{
string ordet = ord;
string svar = textBox1.Text.ToUpper();
if (Regex.IsMatch(svar, "^[a-zA-Z]{5}$"))
{
if (x <= 20)
{
if (svar == ord)
for (int i = 0; i <= 4; i++)
{
labels[i + x].Text = Convert.ToString(svar[i]);
labels[i + x].BackColor = Color.Green;
highcsore = score;
}
else
{
gissningar++;
score = score / gissningar;
for (int i = 0; i <= 4; i++)
{
labels[i + x].BackColor = Color.Red;
}
for (int i = 0; i <= 4; i++)
{
labels[i + x].Text = Convert.ToString(svar[i]);
if (svar[i] == ord[i])
{
labels[i + x].BackColor = Color.Green;
ordet = ordet.Insert(i, "?");
ordet = ordet.Remove(i + 1, 1);
if (x < 20)
{
labels[x + 5].Text = Convert.ToString(ord[0]);
labels[i + x + 5].Text = Convert.ToString(svar[i]);
}
}
}
for (int i = 0; i <= 4; i++)
{
for (int k = 0; k <= 4; k++)
{
if (svar[i] == ordet[k])
{
labels[i + x].BackColor = Color.Orange;
svar = svar.Insert(i, "#");
svar = svar.Remove(i + 1, 1);
}
}
}
}
//kod för att jämföra chars
x = x + 5;
}
else
{
MessageBox.Show("Du förlorade! \r\n Ordet var: " + ord);
}
}
else
{
MessageBox.Show("Ordet måste ha 5 bokstäver");
}
}
}
}
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用System.Windows.Forms;
使用System.Text.RegularExpressions;
使用System.IO;
名称空间行话
{
公共部分类Form1:Form
{
随机r=新随机();
AboutBox1 about=新的AboutBox1();
int gissningar,x,分数,高分;
标签[]标签=新标签[25];
字符串ord;
公共表格1()
{
初始化组件();
gissningar=0;
x=0;
得分=1000分;
highcsore=0;
标签[0]=标签1;
标签[1]=标签2;
标签[2]=标签3;
标签[3]=标签4;
标签[4]=标签5;
标签[5]=标签6;
标签[6]=标签7;
标签[7]=标签8;
标签[8]=标签9;
标签[9]=标签10;
标签[10]=标签11;
标签[11]=标签12;
标签[12]=标签13;
标签[13]=标签14;
标签[14]=标签15;
标签[15]=标签16;
标签[16]=标签17;
标签[17]=标签18;
标签[18]=标签19;
标签[19]=标签20;
标签[20]=标签21;
标签[21]=标签22;
标签[22]=标签23;
标签[23]=标签24;
标签[24]=标签25;
String[]ordLista=File.ReadAllLines(((“words.txt”).ToString());
ord=ordLista[r.Next(r.Next(ordLista.Length));
ord=ord.ToUpper();
标签[0].Text=Convert.ToString(ord[0]);
}
私有void quitToolStripMenuItem\u单击(对象发送者,事件参数e)
{
这个。关闭();
}
private void aboutToolStripMenuItem\u单击(对象发送者,事件参数e)
{
about.Show();
}
private void addWordsToolStripMenuItem\u单击(对象发送者,事件参数e)
{
新表单2().Show();
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
字符串ordet=ord;
字符串svar=textBox1.Text.ToUpper();
if(Regex.IsMatch(svar,“^[a-zA-Z]{5}$”)
{
如果(x选择要移动到类中的代码块,然后右键单击->重构->生成方法
这将生成一个将所有依赖项作为输入的方法,然后您可以将函数移动到另一个类或类库
更新:
重构之前,如Daniel在评论中所说,将逻辑代码与控件分离。这将有助于将逻辑保存在类文件中,并将控件保存在表单类中!您可以将控件的输入作为参数发送到类函数/方法!我建议制作一个“游戏”类。该类将保存所有游戏初始化和设置逻辑。因此,在该类中,您可能会有一个init()
,它执行构造函数中的大部分内容。在该类开始时拥有的大多数属性也应移到这个新类中
我不确定按钮1\u Click
中的代码是什么,但也会有一个doGameLogic
方法。这里的这个类应该创建游戏的新实例,并通过游戏类访问游戏特定的成员和逻辑。你的表单类应该与你的游戏所需的控件一起工作。我不确定复制/粘贴g另一个类/方法中的所有内容都是答案
您最好在“层”中重构代码:游戏逻辑、渲染/图形逻辑、用户操作……如果你去找老师解释你不知道如何用C#创建类和方法,你会从论坛上复制和粘贴代码中学到很多东西。类应该有一个单一的责任,而结果是一个类拥有尽可能少的代码。谢谢,我一定会尝试:)这并没有真正的帮助,因为他的代码直接作用于UI控件。他首先需要将其与那些控件分离,以便能够进行有用的重构。@DanielHilgarth更新了答案!