| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1290 人关注过本帖
标题:帮忙把下列程序改进下。
只看楼主 加入收藏
余谦
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2013-3-7
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:19 
帮忙把下列程序改进下。
using System;
using System.Collections.Generic;
using System.Text;

namespace _24567893
{
    class Program
    {
        static void Main(string[] args)
        {
               Random random = new Random();

            int a;
            int b;
            string j;

            Console.WriteLine("*****石头剪刀布*****");
            Console.WriteLine("请选择你要出的拳");
            Console.WriteLine("0.石头 \n1.剪刀 \n2.布");
            Console.WriteLine("*********************");
            do
            {
                b = random.Next(3);
                a = Convert.ToInt32(Console.ReadLine());

                if (b == a)
                {
                    Console.WriteLine("你出的是:石头\n系统:石头\n平局!");
                }

                if (b + a == 1)
                {
                    if (b < a)
                    {
                        Console.WriteLine("你出的是:剪刀");
                        Console.WriteLine("你系统:石头\n你输了");
                    }
                    else
                    {
                        Console.WriteLine("你出的是:石头");
                        Console.WriteLine("系统:剪刀\n你赢了");
                    }

                }

                if (b + a == 2 && b != a)
                {
                    if (b < a)
                    {
                        Console.WriteLine("玩家:布");
                        Console.WriteLine("系统:石头\n你赢了");
                    }
                    else
                    {
                        Console.WriteLine("你出的是:石头");
                        Console.WriteLine("系统:布\n你输了");
                    }

                }
                if (b + a == 3)
                {
                    if (b < a)
                    {
                        Console.WriteLine("你出的是:布");
                        Console.WriteLine("系统:剪刀\n你输了");
                    }
                    else
                    {
                        Console.WriteLine("你出的是:剪刀");
                        Console.WriteLine("系统:布\n你赢了");
                    }

                }


                Console.WriteLine("按任意键继续,退出请按N。");
                j = Console.ReadLine();
                Console.Clear();




            } while (j !="N&&n");
            Console.WriteLine("退出游戏");
        }
    }
}
  平局那应该怎么写?  后面清平怎么把do上面四句话保留?还有按小写的n怎么没效果!最重要的怎么写可以不用输出一个字符按一下回车!
搜索更多相关主题的帖子: 石头剪刀布 namespace Random 
2013-03-20 17:35
余谦
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2013-3-7
收藏
得分:0 
据说这程序用switch语句比较简单。。。但我不会用..
2013-03-20 17:44
shangsharon
Rank: 9Rank: 9Rank: 9
来 自:湖北武汉
等 级:蜘蛛侠
威 望:7
帖 子:221
专家分:1261
注 册:2012-3-25
收藏
得分:0 
//读取一个字符
Console.ReadKey();
2013-03-20 17:53
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
收藏
得分:0 
b == a可不见得都是石头袄,也许都是剪刀,或都是布
2013-03-20 18:26
余谦
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2013-3-7
收藏
得分:0 
回复 4楼 yhlvht
我也感觉到了不知道怎么改。。
2013-03-20 18:52
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
收藏
得分:0 
回复 5楼 余谦
其实如果你是学C学言,可以用这样的思路写,但是如果是学C#语言,并不建议就这样的方式写
2013-03-20 18:58
余谦
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2013-3-7
收藏
得分:0 
回复 6楼 yhlvht
我自学C#的。。。求指导
2013-03-20 19:37
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
收藏
得分:10 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using
using System.Collections;

namespace ConsoleApplication1
{
    //定义一个猜拳类
    public class CaiQuan
    {
        public Hashtable ht = null;

        public CaiQuan()
        {
            ht = new Hashtable();
            ht.Add(0, "石头");
            ht.Add(1, "剪刀");
            ht.Add(2, "布");
        }

        //定义一个方法,用于加载置顶信息
        public static void LoadHead()
        {
            Console.WriteLine("*****石头剪刀布*****");
            Console.WriteLine("请选择你要出的拳");
            Console.WriteLine("0.石头 \n1.剪刀 \n2.布");
            Console.WriteLine("*********************");
        }

        //定义一个方法,用于判断输赢,
        public static int Compare(int sys, int user)
        {
            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;
        }

        //输出结果
        public static void print(string a, string b, int win)
        {
            Console.WriteLine("你出的是:" + a + "\n系统:" + b);
            if (win == 0)
            {
                Console.WriteLine("平局!");
            }
            else if (win == 1)
            {
                Console.WriteLine("你输了");
            }
            else
            {
                Console.WriteLine("你赢了");
            }
        }
    }

    class program
    {
        static void Main(string[] args)
        {
            Random random = new Random();

            int a = 0;
            int b = 0;
            string j;
            CaiQuan c = new CaiQuan();
            do
            {
                //加载置顶信息
                CaiQuan.LoadHead();
                b = random.Next(3);
                //获取玩家输入
                char ch = Console.ReadKey().KeyChar;
                Console.WriteLine();
                //判断玩家输入是否合法
                if (Convert.ToInt32(ch) >= 48 && Convert.ToInt32(ch) <= 50)
                {
                    //将输入字符转换为整数
                    a = Convert.ToInt32(ch.ToString());
                    //判断输赢
                    int win = (b, a);
                    //输出结果
                    CaiQuan.print(c.ht[a].ToString(), c.ht[b].ToString(), win);
                }
                else
                {
                    //提示输入有误
                    Console.WriteLine("你只能输入0,1,2");
                }

                Console.WriteLine("按任意键继续,退出请按N。");
                j = Console.ReadKey().KeyChar.ToString();
                Console.Clear();
            }
            while (j != "N" && j != "n");

            Console.WriteLine("退出游戏");
            return;
        }
    }
}
2013-03-20 20:20
余谦
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2013-3-7
收藏
得分:0 
回复 8楼 yhlvht
  //加载置顶信息
                CaiQuan.LoadHead();
                b = random.Next(3);
                //获取玩家输入
                char ch = Console.ReadKey().KeyChar;
                Console.WriteLine();
                //判断玩家输入是否合法
                if (Convert.ToInt32(ch) >= 48 && Convert.ToInt32(ch) <= 50)
                {
                    //将输入字符转换为整数
                    a = Convert.ToInt32(ch.ToString());
                    //判断输赢
                    int win = (b, a);
                    //输出结果
                    CaiQuan.print(c.ht[a].ToString(), c.ht[b].ToString(), win);
我能不能说这几句没看懂!虽然有注释..但这些语法我貌似没看过!
2013-03-21 08:23
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
收藏
得分:10 
额,还没有学到类,静态,集合的知识吗.
首先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中的语句就是把这些字符显示出来而已
2013-03-21 15:01
快速回复:帮忙把下列程序改进下。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035555 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved