额,还没有学到类,静态,集合的知识吗.
首先Console.WriteLine("*****石头剪刀布*****")这句是明白的吧,Console是个类,WriteLine是Console类里面的一个静态方法,"*****石头剪刀布*****"是WriteLine方法的参数.静态方法的调用是 类名.方法名(参数),申明静态方法的关键字是static.
那么CaiQuan是上面定义的一个类,public static void LoadHead()是在CaiQuan类里面定义的一个静态方法,用了关键字static,调用的时候为CaiQuan.LoadHead();
也就是说,调用这个方法,就是执行这个方法里面的代码,也就是执行
Console.WriteLine("*****石头剪刀布*****");
Console.WriteLine("请选择你要出的拳");
Console.WriteLine("0.石头 \n1.剪刀 \n2.布");
Console.WriteLine("*********************");
char ch = Console.ReadKey().KeyChar;是获取输入的字符,Console.ReadLine()需要按下回车以后,获取一行输入内容,而Console.ReadKey()只要按下键盘,即可获得按下的那个键.
if (Convert.ToInt32(ch) >= 48 && Convert.ToInt32(ch) <= 50) 判断输入的是否是0或1或2,char型转int型,转出来的是asicc码,0,1,2对应的asicc码的值是48,49,50,只要值是48至50的,那么输入的就是0,1,2
a = Convert.ToInt32(ch.ToString()); 将char型转为string型,再转为int型,ToString()方法就是将类型转为string型,string型转int型是不会转成asicc码的,这就跟你写的a = Convert.ToInt32(Console.ReadLine());一样,因为Console.ReadLine()获取出来的值是一个字符串,是string型的
int win = (b, a);这句同样是调用Compare()静态方法,该方法定义在CaiQuan类中,public static int Compare(int sys, int user)方法有关键字static,所以通过类名调用,方法含两个int型参数(int sys, int user),所以在调用的时候,传入了两个int型的值b和a,也就是系统出的拳和玩家出的拳的值.该方法有一个返回值,返回值为int型.
调用(b, a)方法,相当于执行方法里面的语句
int win = 0;
if (sys == user)
{
win = 0;
//表示平手
}
else if ((sys == 0 && user == 1) || (sys == 1 && user == 2) || (sys == 2 && user == 0))
{
win = 1;
//表示系统赢
}
else
{
win = 2;
//表示玩家赢
}
return win;
通过以上语句的判断,就知道谁输谁赢了,将方法的返回值赋给了int型变量win
输出结果public static void print(string a, string b, int win)同样为静态方法,需要三个参数,从方法里面的内容可以看出,参数a表示玩家出的拳所对应的中文,比如玩家输入的是0,那么这里a需要的是中文 石头,b是系统出拳的中文,win是谁输谁赢.
调用的时候CaiQuan.print(c.ht[a].ToString(), c.ht[b].ToString(), win);传了三个参数c.ht[a].ToString(), c.ht[b].ToString(), win
首先CaiQuan类中定义了一个集合public Hashtable ht = null; Hashtable是一个集合,集合你可以理解为不定长的数组,数组在定义的时候需要给出大小,也就是数组的长度,如string[] arr = new string[3],集合不需要给出大小
Hashtable是一个 键值对 集合,也就是这里面的数据是通过一个key和一个值对应起来的,比如我把中文"石头"放进去,并且指定key为0,那么取值的时候,我给这个Hashtable传入0,我得到的就是中文"石头"
在CaiQuan类中,我把放入Hashtable的值的语句写在了构造函数中
public CaiQuan()
{
ht = new Hashtable();
//集合是一个对象,集合的创建是通过new关键字来创建的,你可以认为是new了一个Hashtable类
ht.Add(0, "石头");
//那么调用Hashtable类中的方法Add(),往Hashtable中放入值,第一个参数为key,第二个参数为值
ht.Add(1, "剪刀");
//同上
ht.Add(2, "布");
//同上
}
所以在Main函数中,需要new一个CaiQuan类,CaiQuan c = new CaiQuan();就是这句执行的时候,会调用构造函数,然后将数字0,1,2对应的中文放入了Hashtable中
Hashtable的取值跟数组相似,类似通过下标来取
如数组string[] str = new string[1],str[0] = "石头",那么使用str[0]就可以取到这个数组的第一个值,也就是石头.
Hashtable也类似,c是之前new的CauQuan类的引用CaiQuan c = new CaiQuan(),ht是在CauQuan类中定义的Hashtable的引用public Hashtable ht = null;
那么c.ht就是取到了Hashtable这个对象,具体的值通过下标的方式c.ht[0]来获取,这里的0并非数组下标的意思,而是Hashtable中放入的值对应的key,通过这个key来得到值
c.ht[a].ToString()就是把玩家输入的那个值在Hashtable中取出中文,a变量里面只会是0,1,2这三个值,因为这句输出语句是放在if里面的,肯定满足0,1,2的要求,那么无论是0或1或2,在Hashtable中都能取出对应的中文
c.ht[b].ToString()同理
将这些参数传入到方法print中,相当于直接把汉字传进去了,print中的语句就是把这些字符显示出来而已