2012-11-30 59 views
-1

我正在为我的编程课程制作一个名为“Lingo”的游戏。我已经完成了大部分工作。但是我们应该尽可能少地使用表单类中的代码。所以我必须将其大部分移到另一个班。我应该怎么做的任何想法?如何将方法移动到另一个类并调用它?

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"); 
      } 

     } 


    } 
} 
+9

你会做自己一个巨头的青睐,如果你去你的老师,解释说你不知道如何在C#中创建类和方法。你会从复制和粘贴论坛代码中学到很多东西。 – mbeckish

+0

类应该有一个单一的责任,然后导致一个类有尽可能少的代码。 – Esailija

回答

0

选择要移动到类,然后右键单击的代码块 - >重构 - >生成方法..

这将产生与所有家属作为输入的方法,然后你可以移动将函数传递给另一个类或类库!

UPDATE:
你重构之前,从单独控制你自己的逻辑作为丹尼尔的评论称。这将帮助你保持你的逻辑在一个类文件,并控制在窗体类!您可以将控件的输入作为参数发送到类函数/方法!

+0

谢谢,我一定会尝试:) – nAXe

+2

这并没有真正的帮助,因为他的代码直接在UI控件上工作。他首先需要将其与这些控件分离,以便能够进行有用的重构。 –

+0

@DanielHilgarth更新了答案! –

0

我建议做一个“游戏”类。这个类将包含所有的游戏初始化和设置逻辑。所以你可能会有一个init(),它执行你构造函数中的大部分内容。你在课堂开始时所拥有的大部分属性也应该被转移到这个新班级中。

我不确定button1_Click中的代码是什么,但也会有一个doGameLogic方法。这里的这个类应该创建一个新的游戏实例,并通过游戏类访问游戏特定的成员和逻辑。你的表格课应该和你的游戏需要的控件一起工作。

3

我不确定复制/粘贴其他类/方法中的所有内容都是答案。

你最好在“图层”重构代码:游戏逻辑,渲染/图形逻辑,它与用户的动作......

相关问题