一.用面向对象的思想写一个猜拳游戏。

  1、电脑(Computer类)  拳(字段)   出拳(方法)

代码
  class Compute
    {
        string fist;

        public string Fist
        {
            get { return fist; }
            set { fist = value; }
        }
        public int ShowFist()
        {
            Random s = new Random();
            int text=s.Next(1, 4);
            this.fist = GuiZe.HuanSuan(text);
            return text;

        }
    }

  2、玩家(Player类)  拳(字段)   出拳(方法)

View Code
 class Player
    {
        private string fist;
        public string Fist
        {
            get { return fist; }
            set { fist = value; }
        }
        public int ShowFist(string text)
        {
            this.fist = text;
            return GuiZe.HuanSuan(text);
        }
    }

  3、裁判(CaiPan类)  结果(方法)

View Code
class CaiPan
    {
        public string PanDin(int player,int computer)
    {
            //1 剪刀  2 石头  3 布
        int zhi=player-computer;
        if (zhi == 0)
        {
            return "";
        }
        else if (zhi == 1 || zhi == -2)
        {
            return "YOU Win!";
        }
        else
        {
            return "YOU LOST!";
        }
    }
    }

  4、规则(GuiZe类)     规则换算(方法)

View Code
static class GuiZe
    {
     public static  int HuanSuan(string text)
        {
            //1 剪刀  2 石头  3 布
            if (text =="剪刀")
            {
                return 1;
            }
           else if (text == "石头")
            {
                return 1;
            }
          else  if (text == "")
            {
                return 1;
            }
            else 
            {
                return -1;
            }
        }
     public static string HuanSuan(int text)
     {
         //1 剪刀  2 石头  3 布
         if (text == 1)
         {
             return "剪刀";
         }
         else if (text == 2)
         {
             return "石头";
         }
         else if (text ==3)
         {
             return "";
         }
         else
         {
             return "-1";
         }
     }
    }

 

窗体代码:

 1  public Form1()
 2         {
 3             InitializeComponent();
 4         }
 5 
 6         private void bnt_JianDao_Click(object sender, EventArgs e)
 7         {
 8 
 9             Button btn = sender as Button;
10             WinLost(btn.Text);
11         }
12 
13         private void WinLost(string text)
14         {
15             Compute com = new Compute();
16             Player py = new Player();
17             CaiPan cp = new CaiPan();
18             lbl_Result.Text = cp.PanDin(py.ShowFist(text), com.ShowFist());
19             lbl_Computer.Text = com.Fist;
20             lbl_Player.Text = py.Fist;
21         }
22 
23         private void bnt_ShiTou_Click(object sender, EventArgs e)
24         {
25             Button btn = sender as Button;
26             WinLost(btn.Text);
27         }
28        
29         private void bnt_Bu_Click(object sender, EventArgs e)
30         {
31             Button btn = sender as Button;
32             WinLost(btn.Text);
33         }
34     }

 

 二.封装.继承.多态

1、类的单根继承性
2、所有的类都直接或间接的继承自object。
3、构造函数无法继承,子类构造函数必须指明调用父类哪个构造函数
4、public  任何地方
5、private  当前类中可以访问
6、protected  当前类及子类中可以访问
7、*internal  当前程序集可以访问
 

三、静态成员  实例成员

1、静态成员属于类所有,非静态成员属于类的实例所有
2、C#静态方法属于类所有,类实例化前即可使用
3、在实例方法中可以直接调用静态方法,
4、在静态方法中不可以直接调用实例方法
5、静态方法和静态变量创建后始终使用同一块内存(静态存储区),而使用实例的方式会创建多个内存
 
四、多态
多态就是指不同对象收到相同消息时,会产生不同行为,同一个类在不同的场合下表现出不同的行为特征
里氏替换原则
•父类引用指向子类对象
•父类对象不能够替换子类
is-a  关键字as is
 
怎么实现多态1-抽象类abstract

抽象类定义的是公共的实现和能力

 

抽象类不能被实例化

 

抽象类为子类提供所需要的成员

 

抽象类中的成员既可以有实现也可以无实现

 

抽象类必须由其子类实现它的抽象成员(除非子类也是抽象类)

 

一个类只能继承一个抽象类(类的单根继承性)

抽象方法(成员)不能有实现,必须被子类重写override(除非子类也是抽象类)

抽象方法(成员)的只能出现在抽象类中。

 
posted on 2013-05-12 23:04  星星daddy  阅读(394)  评论(1编辑  收藏  举报