zoukankan      html  css  js  c++  java
  • C#基础视频教程7.4 如何编写简单游戏

    接下来我们实现整个的游戏流程,当点击开始游戏,则需要三个事情开始运行

    1 小鸟初始化并往下掉(当然还是可以用按钮让他飞一下)

    2 每隔一定时间从左侧产生一个管子(宽度和高度随机,产生周期2000ms左右)

    3 每隔一定时间检测是否鸟撞到了管子(这个时间周期要50ms左右,也可以更大或者更小)

     

    跟上一节不同的地方在于,小鸟是唯一的,而管子不唯一。我们之前只是判断一个小鸟和一个管子是否有碰撞,随着管子的不断生成,要检测小鸟和每个管子是否有碰撞。所以我们把生成管子放在了GameSense的一个list里面,list存储的是GameRectange的类的实例,在另一个判断的线程,就需要遍历list的每一个元素做判断,并且只要有任意一个撞击了,就认为撞击了

     

    我们前面用了很多类都是静态的,这里管子的类却不能是静态的,因为每一个管子大小都是不一样的,每隔一定时间都会new一个出来。可想而知,如果我们要做成两只鸟双人游戏,鸟也不能做成静态的(所以读者在考虑是否有必要做成静态的类,方法的时候,只要想清楚这个类是否会需要多个实例,如果需要则不能是静态的),本例中只有场景是唯一的,裁判是唯一的,所以可以用静态的。

     

    为了提高游戏的体验,每产生一个管子,没有撞上去,就可以给用户增加一点分数(我们在屏幕用了绘制文字的方法,这比用控件更加合理,至少不会有控件自带的背景色干扰)。在每个子线程中我们都把延时Sleep操作放到了最后,读者可以测试一下如果放到前面会有什么问题(多次的弹窗,或者游戏结束了还产生多余的一个管子)

     

    把游戏开始,游戏结束,游戏清空场景也单独做成方法,注意游戏清空场景并不等同于游戏结束。结束的时候要弹窗告诉用户他挂了,但是此时还不能马上清空场景(画面要显示他撞在哪里了),点击确定按钮之后才去执行清空场景(原来的list保存的管子都扔掉,小鸟也回到初始位置等等,很多布尔值都要复位)

     

    已经可以测试完整的运行了,点击小鸟飞行,绕过障碍物,则得分,撞上去就提示游戏结束,下一节我们继续完善

     

     

     

    更多教学视频和资料下载,欢迎关注以下信息:

    我的优酷空间:

    http://i.youku.com/acetaohai123

     

    我的在线论坛:

    http://csrobot.gz01.bdysite.com/

     

    问题交流:

    QQ:910358960

    邮箱:acetaohai123@163.com

     

     

     

     

     

  • 相关阅读:
    vue+element-ui实现前端分页
    element-UI中table表格的row-click事件怎么获取一行数据的id
    使用一个for循环将N*N的二维数组的所有值置1
    http常见的状态码
    反转一个英文句子中的单词,并且对应位置大小写不改变
    用一条SQL语句查出每门课都大于80分的学生的姓名
    平滑重启原理及平滑更新
    php之命名空间
    php之trait-实现多继承
    C入门之一
  • 原文地址:https://www.cnblogs.com/acetaohai123/p/7586717.html
Copyright © 2011-2022 走看看