zoukankan      html  css  js  c++  java
  • C# 炸弹人 winform版

    实现这个游戏的基本功能包含几个对象:玩家,怪物,墙砖,炸弹,通关的门。玩家通过上下左右方向键移动,放置炸弹,被怪物杀死,被炸弹炸死。怪物随机方向移动,能杀死玩家。炸弹有爆炸功能,炸弹的火花长度。通过的门就是一个坐标点。
     
    实现这个游戏,最主要的我认为就是理解坐标点,其实很多判断比如 玩家死亡,通过,怪物移动,可移动路径其实都是判断坐标点来的。这个游戏作为消磨周末时间来做,还是能有成就感的,虽然用不上什么高级的知识,但能存粹的享受到编程带来的乐趣。我写代码有个缺点尤其是平时业余时间写的代码,只想实现自己心中所想,不会顾及代码质量,所以代码风格,代码清晰度都很差,我自认为重要的是,把心中想做的事能完成了,我都很满足了。但其实也只是实现了基本的功能。
     
    炸弹爆炸 炸死玩家的思路是,获取玩家矩形的四个角的坐标点,判断这四个点是否在炸弹爆炸范围内。炸弹爆炸范围是矩形的集合,我可以循环这个爆炸矩形集合,然后把玩家的四个点依次判断是否在每次循环的炸弹矩形内就行了,百度可以搜索 判断点在不在矩形内,其实也就一句if判断。
    判断炸弹炸死怪物的思路也是一样的。不同的是,炸弹和怪物长宽一样,而玩家的长和宽要小些,判断稍微有点区别。
     
    怪物杀玩家的思路 是判断坐标点相同就可以了。
     
    玩家移动的思路是键盘按下打开移动定时器,键盘抬起,关闭移动定时器。
     
    怪物移动的思路是把怪物临近的上下左右四个方向的通路加入集合 然后随机选一个通路移动,然后移动到这个被随机到的通路后,在进行下一次的临近通路判断。
     
    我这个花最长时间是花在了玩家在移动过程中 判断临近的四个方向是否可走上,因为我这个玩家对象的长和宽都小于砖块的长宽,所以判断上有难度。
     
    最后,我发现这个winform在界面渲染上,没有像web里的css一样有层叠样式之说,所以当人物 炸弹 火花 怪物 门相互重叠时,就会发生正在移动的对象,会把不动的对象给挡住,因为移动的对象是会调用绘制事件的,所以移动的对象能显示,但是被压住的对象就只能被遮挡了。我感觉想要解决这个问题,对于我来讲,不直到怎么做更好,不过有个折中办法,控件相互堆叠时,把静态的对象隐藏掉,到运动对象传过去后,在显示出来。
     
    下载:

    Game.BoomerManUI.zip

     
  • 相关阅读:
    LeetCode 32. 最长有效括号(Longest Valid Parentheses)
    LeetCode 141. 环形链表(Linked List Cycle)
    LeetCode 160. 相交链表(Intersection of Two Linked Lists)
    LeetCode 112. 路径总和(Path Sum)
    LeetCode 124. 二叉树中的最大路径和(Binary Tree Maximum Path Sum)
    LightGBM新特性总结
    sql service 事务与锁
    C#泛型实例详解
    C# 中的委托和事件(详解)
    C# DateTime日期格式化
  • 原文地址:https://www.cnblogs.com/HelloQLQ/p/15553397.html
Copyright © 2011-2022 走看看