萌新的游戏编程就用winform做图形界面是不是最好选择?(2)

  • n
    nancyivy
    萌新的游戏编程就用winform做图形界面是不是最好选择?(2)

    上次发了帖子之后,但凡是出谋划策的,如果大家的指教我直接能看懂的,就直接听取意见,如果能看懂关键词的,就根据关键词去搜索学习,如果关键词也全都看不懂的,那只能忽略了......

    在听取了大家的意见后,上网搜索,最后主要参考的是以下这个教程:
    https://scottlilly.com/learn-c-by-building-a-simple-rpg-index/

    根据上次的帖子,我主要的改动是:
    1.尽量不要用static
    2.用C#,用winform,拉按钮,拉文本框,算是做出图形界面吧,总之就是“可以用鼠标点”,不用在cmd里面玩了。
    3.关于随机,根据所学的教程,使用更好的随机方式,把若干function合并,don't repeat yourself
    4.其他就是在程序里面各种逻辑,各种编程上的改善。对,没错,改完了还是很萌新,那还不是要继续嘛~
    5.终于初步做好一个可以双击来打开的exe游戏文件了呗
    6.目前的逻辑仍然只是完成了以下这个图的内容,图形界面什么的太花时间了。
    图中的具体随机和数值等已经被我改了





    游戏目前长这样,


    通过下方的按钮选一个人


    结果可能是


    也可能是愿意,那样的话左边的列表会更新:


    主要想贴出来的一些代码:
    关于怎么决定能不能交到朋友的代码片段,这个放在Player.cs这个class里面,也不知道分在这里应不应该
    复制内容到剪贴板
    代码:
    public bool MakeFriendSuccessfully(Person stranger)
    {
    if (stranger.Look >= (Look + 5) && stranger.IQ >= (IQ + 5))
    {
    if (RandomStat.NumberBetween(0, 100) < 80)
    return false;
    return true;
    }
    else if (IQ > (stranger.IQ+10) || Look > (stranger.Look+5))
    {
    if (RandomStat.NumberBetween(0, 100) < 70)
    return true;
    return false;
    }
    else
    {
    if (RandomStat.NumberBetween(0, 100) <= 50)
    return false;
    return true;
    }
    }
    关于主程序里,继续按钮在做什么
    private void btnContinue_Click(object sender, EventArgs e)
    {
    Friend stranger1 = new Friend();
    Friend stranger2 = new Friend();
    Friend stranger3 = new Friend();

    rtbMessages.Text += Environment.NewLine;
    rtbMessages.Text += "\n现在你上学了,遇到以下三人:";

    List<Friend> strangerlist = new List<Friend>();
    strangerlist.Add(stranger1);
    strangerlist.Add(stranger2);
    strangerlist.Add(stranger3);

    foreach (Friend stranger in strangerlist)
    {
    rtbMessages.Text += Environment.NewLine;
    rtbMessages.Text += stranger.DisPlayName();
    rtbMessages.Text += stranger.DisplayInfo();
    }

    cboList.DataSource = strangerlist;
    cboList.DisplayMember = "Name";
    cboList.ValueMember = "Name";
    cboList.SelectedIndex = 0;

    cboList.Visible = true;
    btnChoice.Visible = true;
    btnContinue.Visible = false;
    rtbMessages.Text += Environment.NewLine;

    rtbMessages.Text += "\n选一个尝试交朋友,你选谁?";
    }

    这次主要的问题是:
    1.从一个form到未来可能会用到多个form,感觉开始接近使用unity的场景,unity不是有多个scenes什么的吗,请大家指点我看是不是渐渐的开始使用unity会变得更省力?比如说现在,我要把form1的variable传到form2就会很麻烦,我已经试过了,不知道unity有没有好一点

    2.目前继续按钮只能重复同一个event,这不是我想实现的结果。如何使用同一个按钮“继续按钮”,来达到不同event的结果?就是现在buttonclick的结果,第一次按,产生的结果是遇到三个陌生人,下一次按,就应该是下一个事件了,但是仍然是使用这同一个“继续”按钮,这种编程上应该怎么实现,我连该搜什么关键词都不懂

    3.下一次真的主要解决save/load的编程,反正那个教程有教

    github:
    https://github.com/nancyivy/game_winform_10302017_cn

    在这里下载游戏来玩,其实没什么可玩的啊,只能重复第一步交朋友,所以只在此放临时文件:
    https://file.town/download/2vc8r54d2eyk871iryhakifvx
    https://expirebox.com/download/0 ... 2b838a8c28c341.html

    实在看不过去就请大家一乐。

    [本帖最后由 nancyivy 于 2017-10-31 14:08 编辑]
  • 保密
    1.variable别写在form里就行了。
    2.最简单的实现,委托里写个生成随机数用switch case。
    3.实在太基础。
  • k
    klites
    直接用unity吧,winform就是要兼容老系统导致ui运行效率低才被砍了的
  • l
    lightling
    RPG Maker或者Unity吧
  • 总是注册不成功
    winform被谁砍了?
  • n
    nijjkk
    会c#干嘛不用unity
    你这玩意用unity一行代码都不用写
  • n
    nancyivy
    谢谢回复!

    1.variable怎么能不写在form里?有个另外的class我理解,但是不需要在form里来个object吗?

    2. 委托里写个生成随机数用switch case,这个具体能不能说两句,是什么意思?

    再次感谢!
  • n
    nancyivy
    谢谢,我正在考虑换到unity,不过我主要是想练习自己OOP的能力,所以要是一行代码都不用写那不是适得其反了吗
  • 舟13
    以前自学过#吃,现在都快忘光了
  • m
    masterfish
    做界面,建议试试:electronic
  • s
    sumeru
    不知道你这个界面最终是什么样子,需要多少个页面,个人感觉页面一多用winform就不好维护了。

    如果你只是拿来学习练手,写个打飞碟或者flappy bird这种更有意思些,可以专注程序设计而不是游戏流程设计。因为在现代复杂的游戏开发体系里,游戏里交互辑通常都是借助脚本+编辑器来完成的。
  • n
    nancyivy
    谢谢你至少指出“页面一多用winform就不好维护了”,我必须考虑这个

    有没有最简单的例子能举一个,怎样是“交互是由脚本和编辑器共同完成”?
  • j
    jzhl
    winform主要缺陷是不能搞动画帧率要求高的游戏
  • k
    klites
    wpf啊
  • 保密
    1 一般可以用静态或单例,那么所有其它类都能访问了
    2 把要做的事抽象出来写成方法,根据随机来决定执行哪个