1.H5游戏架设经验分享
2.龙港三副头源码
3.sv是好玩哪个国家,旅游景点源码开发
4.制作一个游戏需要什么软件(自己开发一个游戏的地单游制作过程)
5.excel中好像有个放置猴子去射气球的游戏,请问哪里有得下啊
H5游戏架设经验分享
首先,我不是码简码专业做游戏的,只是好玩在一些机缘巧合下,发现可以自己架设游戏做GM,地单游寄卖php源码后台免费发送游戏中的戏源戏源各种充值和道具,然后在游戏里为所欲为,码简码各种榜一秒杀,好玩简直不要太爽,地单游于是戏源戏源便一发不可收拾开始了游戏架设的研究...
本文分享我对游戏架设的经验心得,如果你也喜欢架设游戏,码简码那么这篇文章肯定会对你有所帮助。好玩
我目前架设运行的地单游游戏都汇总在文章:好玩的免费GM游戏整理汇总,所有游戏架设教程,戏源戏源包含已下架的都在我博客的游戏分类中,网上大多是视频教程,而像我这种耗时耗力写详细图文教程基本是没有的。
游戏架设对我来说就像打开了一个新世界,原来游戏还可以这么玩~
最开始我是在某宝上发现有后台的游戏,可以任意充值和发送道具,觉得很爽,虽然还当不了榜一,但是可以体验满级VIP和各种道具带来的快感,不过这种游戏基本不会运营太长时间就会关服。
后来我就想到是不是可以自己搭建个游戏,正好自己是做前端的,也很想研究下游戏界面是如何实现的,所以就开始研究,各种查找资料,直到自己搭建成功了第一款游戏《大天使之剑》,打开了新世界。
我搭建的游戏基本都是Linux环境的H5游戏,只搭建过一款客户端类型的《阿拉德之怒》,因为自己是做前端的,所以对H5比较熟悉,而且因为自己使用的苹果手机,App需要签名会比较麻烦,而H5只要有浏览器就可以。
至于为什么不用windows环境和一键端,则是因为我买的服务器配置都比较低,windows会占用过多内存,而一键端的集成特性会使得一台服务器基本只能搭建一个游戏,很不划算。
我的博客和公众号初衷是分享一些IT技术文章,后来也把游戏架设写了进去,发现浏览关注人数增加了不少- -,占到百分之7、,这让我哭笑不得,总觉得背离了初衷。
现在博客的点击量是W+,基本每天会有的访客和的点击量。
公众号目前关注人数6千,嗯,大部分都是因为游戏关注的- -。
然后还有个游戏群...主要是给大家游戏授权和交流用。
架设游戏首先需要一台服务器,市面上的云服务器很多,建议选大厂的,2核4G内存6M宽带配置一般游戏足矣,H5游戏比较吃宽带,因为需要加载的网络资源比较多。
个人推荐腾讯云的轻量应用服务器,性价比高,放心我不是打广告,我不配- -,新人、双十一或者新年活动比较合适,一年不到,有条件的可以多买几年,腾讯云轻量应用服务器还有个好处是可以免费创建两个快照,这点很实用。
网上的趋势潜伏源码资源网站其实很多,我整理了几个我常用的资源网站,有收费的也有免费的。
以上网站有挂掉或者停止运营的风险,请谨慎购买。还有很多其他的资源网站,大部分都是搬砖的资源,很容易搜到。如果还找不到,可以看看以上这些资源网的友情链接。
大部分资源网站用的都是Zibll、CeoMax或者Ripro主题网站,自己也曾想过搞一个的念头,奈何时间精力有限,就放弃了。我架设过的游戏资源都会免费分享在公众号上,大家可以通过公众号echeverra回复游戏名获取。
架设游戏有时候是一件很玄妙的事情,《阿拉德之怒》我第一次架设还算顺利,现在已经连续运行了多天没有发生过异常重启,但是第二次换服务器架设却死活也不成功,我怀疑很大概率是由于服务器本身的问题。
架设就好比你看说明书组装家具一样,只要安装指定的环境,按照步骤一步步来基本都会成功的,我写的图文教程都很详细,很多人都架设成功并在群里分享。如果环境步骤都没问题多次尝试还是不成功,那很有可能是遇到我上文提到的服务器自身问题。
这里列举一些游戏群里大家架设大概率会遇到的问题:
游戏是可以使用域名的,最开始我使用域名有两个原因,第一域名比直接IP访问更直观且高大上,第二如果服务器到期了,虽然要更换服务器IP,但是访问游戏的域名是不变的。
但使用域名是有风险和限制的,域名备案需要填写网站类型,个人是没有运营游戏资质的,所以废了九牛二虎之力我又将域名形式改回了IP,如果你有类似想法就不要踩坑了- -。
经常有人会问我一个服务器上能不能同时搭建多个游戏,答案是肯定的,我基本上每个服务器都会搭建2-3个游戏,还有博客网站等,这也导致我的服务器基本没有空闲的时候,一直有网络请求。
想要一个服务器搭建多个游戏有几个比较苛刻的前提:
第一是几款游戏搭建环境一致或兼容,如CentOs的版本,数据库的类型和版本等,只有环境都符合搭建的几个游戏才能都成功运行起来,比较好的一点是一般游戏对环境要求都比较通用,大部分使用CentOs 7 和mysql 5 都可以。
第二内存足够,一般一个H5游戏会占用小2G左右的内存,所有4G内存的配置只能搭建两个游戏,需要注意的是使用内存超过%会有大概率端口异常挂掉的情况。这时候可以写个脚本监测端口,挂掉再重新启动即可。
第三是端口不能冲突,几款游戏如果占用了同一个端口,那么肯定会有冲突,之前我搭建《冰雪传奇》和《雷霆传奇》就发生过冲突的端口,后来将《冰雪传奇》的端口进行了修改才解决。
第四是数据库表名不能冲突,和端口冲突同理,只能修改数据库和源码中的表名解决,但这种情况并不常见,除非你搭建的几款游戏是换皮的。
具体能否搭建多个游戏还需要实际去操作,多多尝试~
拿到一款游戏源码我都会强迫症的全局搜索源码中的广告,然后去除掉,因为很影响玩游戏的心情。
考虑安全问题,源码中的NG新版源码数据库密码和GM码我也会更改,建议大家也改掉。
架设好之后我会试玩一段时间,有一些简单的BUG我会尝试修复下,如果比较严重修复不了,影响整体游戏体验的那就只能放弃了,这种坑我也踩了不少。
我分享的游戏基本不会有大问题,而且都是我优化过的,像《梦幻西游》我就花了很长的时间去修复完善,直到满意为止。
数据是无价的,所以数据要及时备份,不要等数据丢失了才后悔莫及,我会使用两种方式对数据进行备份处理。
第一种是使用服务器快照,腾讯云轻量服务器有两个免费的快照,定期创建快照备份好,一旦有异常可对快照进行回滚恢复数据。阿里云的快照会按照容量收费,价格也很便宜。
第二种是使用宝塔的计划任务,可以定时每天执行备份数据库和文件,发生异常可以导入备份的数据库,记得每隔一段时间把备份的数据下载到本地保存好,以防万一。
虽然这些游戏源码或者端在网上很多,但或多或少都有版权问题,如果是架设的私服游戏以营利为目的那肯定是违法的。所以我架设的游戏都是无法内充的,也不允许群里讨论内充问题。
具体的法律条文大家感兴趣可以查查,营利数额较大或者有其他严重情节的会被有期徒刑或者拘役,所以提醒大家一定一定不要有这种违法的念头。
研究架设游戏半年多的时间我认识很多游戏相关的朋友,有游戏资源网的站长,也有开发游戏的技术高手,还有一些热爱架设游戏的玩家。有几个对架设游戏特别感兴趣的玩家,架设遇到问题会研究很久,架设很多次直到成功。
其实我想说的是游戏架设大家玩玩就好,这个技术含量并没有那么高,不要把过多的时间和精力浪费在这上,真正有技术含量的是其中的源码实现,修复BUG和完善游戏功能。去把时间用在真正能提升自己的地方,不要本末倒置。
写本文的目的一个是想把自己对游戏架设的一些经验分享给大家,让大家少走一些弯路,还有一个原因算是对自己的半年多架设游戏的一个总结吧。自己购买了4台服务器,免费运行着6个游戏和数个小游戏,通过架设和玩游戏也收获了很多快乐,但也到此为止啦~
以后还是会继续维护运行这几款游戏,平时会给大家授权下GM,但应该不会在架设新游戏了,这里对我游戏群里的小伙伴说声抱歉- -,非常感谢大家的支持,我还是会把更多的时间精力放在工作和家庭上,毕竟架设游戏只是个爱好而已。
倒是有计划开发一款自己的博客主题,名字想好了叫star,每月的号是我和媳妇的纪念日,star小星星则是代表我们的小baby。希望博客主题开发好后大家多多支持捧场啦~
最后祝大家兔年快乐,新的一年都能有所收获~
好啦,以上就是我对H5游戏架设经验分享的所有内容,希望对你有所帮助,如有问题可通过我的博客或微信公众号echeverra联系我。
你学“废”了么?
(完)
文章首发于我的博客echeverra.cn/build-game,原创文章,转载请注明出处。
欢迎关注我的源码转core微信公众号echeverra,一起学习进步!不定时会有资源和福利相送哦!
龙港三副头源码
下载地址://
类型:安卓游戏-益智休闲
版本:v1.2.9
大小:.MB
语言:中文
平台:安卓APK
推荐星级(评分):★★★★★
游戏标签: 龙港三副头 游戏茶苑 龙港三副头游戏是一款非常好玩的龙港地方扑克游戏,采用四人对战记分游戏玩法为主,出牌压牌计分玩法多样,非常考验玩家的出牌战术策略。快来墨鱼下载站下载体验吧!
龙港三副头官网介绍 亲朋好友约牌再也无需出门,在线牌局任你选!在家无聊想结识麻友牌友一起出去玩?龙港棋牌为您组织!集合龙港打法的三副头,每天还能参加比赛PK赢奖品,边打牌还能免费吃喝玩乐,还不快来加入龙港棋牌大家族!
龙港三副头手机版特色 语音即时聊天,边玩边聊更过瘾
组局游戏模式,朋友间消遣娱乐
微信邀好友,不管在哪里,随时随地都能玩
免费注册,支持微信登录
游戏规则 记分方法
哪方得的分高就哪方赢。
出牌类型
· 单张:可以是手中的任意一张牌;
· 对子:两张牌点相同的牌,两张牌的花色可以不同;
· 三同张:三张牌点相同的牌,三张牌的花色可以不同;
· 炸弹:四张或四张以上牌点相同的牌,如:,,JJJJJJJ;
· 大小王可以百搭任何牌
出牌规则:
· 发牌:当四家全部开始后,服务器直接发牌。第一盘或两家全部出去成功以后由服务器随机指定首家出牌方。其它由上一局的第一名首先出牌。
· 出牌过程:游戏者依次轮流出牌,后一家打出的牌必须比前一家打出的牌大,如没有可以弃权(Pass); 如果其他游戏者都Pass,则最后出牌的一方可以出新的牌型;直到某个游戏者手中牌全部出完。
· 牌的大小:牌点由大到小排列为:大王、小王、2、A、K、Q、J、、9、8、7、6、5、4、3;
· 牌形的大小:单张、对、三同张牌型,直接根据牌点确定大小,但要求出牌的数量必须相同;炸弹,如果牌张数相同,则按牌点数确定大小,否则牌张数越多越大;炸弹大于任何其它非炸弹的牌型,
· 牌形的大小:5,,K为分牌,一轮中最大家可以将分抓走。
· 大小王:可以当任何牌,但是单出时不能当别的牌。
· 接风:当某个玩家出完最后一手牌后,一圈之内如果没有人要,则下一个出牌的是他的下家,称之为接风。
· 抓分规则:一局结束时,末家抓的分交给头家,末家未出去的牌里的分全部交给其它一方.
总结而言,墨鱼下载是您寻找安卓游戏和益智休闲下载的理想之选。我们为您精选了一系列安卓游戏和益智休闲的相关内容,无论您是安卓游戏益智休闲的初学者还是专业人士,都能满足您的需求。在我们的下载站,您可以轻松找到最新的任务协助 源码龙港三副头手机版高速下载,享受安卓游戏益智休闲带来的无尽乐趣!我们提供详细的龙港三副头手机版高速下载信息,包括功能介绍、用户评价以及官方下载链接// ,让您的下载过程更加轻松快捷!此外,我们还提供一系列与安卓游戏益智休闲相关的教程和资讯,帮助您更好地了解和使用这些产品。我们的团队时刻关注安卓游戏益智休闲的最新动态,为您提供最新的信息和下载链接。在墨鱼下载,我们致力于为您提供最好的安卓游戏益智休闲下载体验。我们相信,在我们的努力下,您一定能找到最适合您的安卓游戏益智休闲解决方案。快来体验我们的服务吧!/
sv是哪个国家,旅游景点源码开发
sv是哪个国家?
SV并不是一个国家,而是一个国际域名后缀,代表着萨尔瓦多(El Salvador)这个国家。萨尔瓦多位于中美洲地区,北部和东部与洪都拉斯接壤,南部和西部与危地马拉相邻,东南部则是太平洋。该国是中美洲最小的国家之一,人口约万。萨尔瓦多的主要语言是西班牙语,货币为美元。该国经济以农业、制造业和服务业为主,主要出口商品包括咖啡、糖、纺织品和制成品。萨尔瓦多的文化和历史遗产也吸引着很多游客前来探访。
SV是斯洛伐克的国家域名代码,代表着斯洛伐克这个国家。斯洛伐克位于欧洲中部,面积约为4.5万平方公里,人口约为万。该国的首都为布拉迪斯拉发,拥有丰富的文化遗产和自然景观。斯洛伐克是一个充满活力的经济体,其经济主要以汽车、电子和机械工程为主。斯洛伐克也是一个越来越受欢迎的旅游目的地,拥有壮丽的山脉、美丽的城市和温泉胜地。
SV是英文EI Salvador的缩写,它是北美洲国家萨尔瓦多的缩写。
萨尔瓦多位于中美洲北部,北邻洪都拉斯,南濒太平洋,西部、西北部同危地马拉接壤,东临太平洋丰塞卡湾,国土面积平方公里,中心位于北纬.5° ,西经.°。
萨尔瓦多国内地形以山地、高原为主,多火山,被称为“火山之国”,境内圣安娜活火山海拔米,为全国最高峰;该国北部为伦帕河谷地,南部为狭长的沿海平原。
推荐几部欧美爱情**?
这要看你想看哪种类型的欧美**了,英,美,法,意都有非常不错的经典**。
以下是我个人觉得非常值得看的英语**(看的就是剧情和美景),太出名的好莱坞**,类似美国队长,钢铁侠,蝙蝠侠,此类就不用说了,家喻户晓我就不推荐了。
爱情类
暮光之城1/2/3/4
作为非常喜爱吸血鬼题材的朋友这个肯定不会错过了,也是十分出名的系列**,纯爱的感觉颠覆了以往对于欧美**的恋爱印象。
傲慢与偏见
这也是经典了,应该是不可复制的经典,
怦然心动
两小无猜
泰坦尼克号
美女与野兽
遇见你之前
断背山
爱你罗茜
给朱丽叶的信
初恋次
西雅图夜未眠
裁缝
奇幻类
纳尼亚传奇1/2/3
移动迷宫1/2
阿凡达
地心历险记1/2
+++海盗1/2/3/4
德古拉元年
博物馆奇妙夜1/2
庞贝末日
饥饿游戏1/2/3
科幻类
星际穿越
超能陆战队
源代码
火星救援
遗落战境
异星觉醒
分歧者1/2异类觉醒
悬疑类
穆赫兰道
东方快车谋杀案
禁闭岛
七宗罪
万能钥匙
战争类
敦刻尔克
拯救大兵瑞恩
黑鹰坠落
拆弹部队
狂怒
珍珠港
敢死队1/2/3
比利林恩的中场战事
血战钢锯岭
少女类
佳人蓓儿
南方与北方
诺桑觉寺
理智与情感
动画类
飞屋环游记
冰川时代1/2/3/4
疯狂原始人
超能陆战队
剧情类
国王的演讲
绿皮书
香水
少年派的奇幻漂流
暂时只能记得这么多啦,能看完这些,估计一时半会也不会再想看欧美**了。看多了也会发现,国外也没什么好,也到处都是民生问题,也一样有穷的不能上学的人,同样的问题,每个国家都是有的。
长沙龙华地铁站附近有什么好玩的?
长沙龙华地铁站附近有许多好玩的地方,以下是一些推荐:
橘子洲头:长沙的著名景点之一,非常适合散步和观光。
岳麓山:长沙的另一个著名景点,山上有许多历史遗迹和美丽的风景。
湖南大剧院:是一座现代化的大型演艺场所,经常有各种演出和表演。
湖南省博物馆:是一座展示湖南历史和文化的博物馆,内有许多珍贵的文物和艺术品。
源码共享社区:是一个专门为程序员和技术爱好者提供学习和交流的场所。
长沙市图书馆:是一座现代化的图书馆,内有许多书籍和文献资料,适合阅读和学习。
制作一个游戏需要什么软件(自己开发一个游戏的制作过程)
GameBoy是我们这一代人的童年记忆,其像素风格的画面和绿屏效果至今仍被很多复古风格的游戏借鉴。出于对游戏的热爱,做一款GameBoy游戏也成为了很多人的愿望。如果你有这样一个未了的心愿,试试今天介绍的GB Studio,不用编程就可以制作自己的GameBoy游戏。
GB工作室
认识界面
GB Studio的界面非常直观。在你创建了一个新项目后,你会看到整个游戏的故事板在你面前。故事板上可以看到包括Logo和开始界面在内的所有场景。单击场景或内容以在右侧修改其属性,或向其添加脚本。
在窗口的左上角,可以切换到素材区查看图像和音频素材。如果你正在制作一个剧情游戏,你也可以在 quot剧本评论 quot。
简单了解了界面之后,我们就可以开始制作自己的第一款游戏了。在制作游戏之前,我们需要准备游戏的剧情和图文资料。以一个简单的冒险游戏为例。我们需要一个勇敢的主角,一个邪恶的反派,不同的场景让主角穿越。
绘制素材
游戏男孩 屏幕只支持四种灰度的显示,所以我们在画图的时候也要记住这一点。官方文件提供了四种可用于背景材料的颜色:#、#、#cc和#e0f8cf。在这四种颜色的基础上,删除了#,增加了#ff用于人物素材。
在任何材质中,只能包含这四种颜色。如果不包含素材使用的颜色,GB Studio会自动匹配近似的颜色,但是视觉效果会大打折扣。
配色参考
对于绘图素材的应用,我推荐Aseprite和Tiled Map Editor。Aseprite是一个绘制动态元素的工具,支持Windows和macOS平台。Steam上元就能买到。
Aseprite适合绘制字符、UI等小素材。对于游戏场景这样的大型素材,使用开源的平铺地图编辑器来制作会更加方便。可以在官网免费下载平铺地图编辑器。它还支持Windows和macOS。
GB Studio对素材格式也有一定的限制。首先素材必须是PNG格式。静态素材px px,动态素材在此基础上横向扩展,但是
必须保证高度维持在 像素。绘制人物素材的时候,则需要将其正面、背面和侧面都绘制出来,并拼合起来。背景素材至少需要达到 px px 的分辨率,最大不能超过 px px。
材料尺寸示例
绘制完材料后,您需要将它们放在 quot资产 quot在游戏项目文件夹中。
编辑场景
在游戏故事板中,可以随意添加场景,在上面放置人物。添加空白场景后,可以在右边的编辑栏修改其名称、背景等属性,并为其添加脚本。要在场景中放置一个人或触发器,只需在悬停菜单中选择相应的选项。角色的属性设置与场景相同,可以修改其坐标,使其在不同的位置生成。
添加场景
这里需要注意的是,开关在游戏中是不可见的,是地图交互的必要元素。例如,如果你在地图上画一所房子,你可以 默认情况下不输入。只有在添加了交换机并设置了脚本之后,才能通过门进入。与角色的互动不会 没必要这么复杂。你只需要在右边的编辑窗口中选择角色并添加脚本。
由于房屋、树木、地形等元素都是直接绘制在背景上的,为了防止角色出现在陌生的地方,我们需要在地图上添加空气墙来阻止玩家 脚步声。添加风墙的步骤很简单,只需按C键,然后在场景中绘制即可。
当我们添加完所有的场景和角色后,就可以进入游戏流程的制作了。
开始制作游戏
在游戏中,所有的交互和动作都是通过脚本实现的。您可以为角色添加脚本,以便他们可以说话;你也可以给开关添加脚本,这样玩家就可以和地图互动了。在这里,采取 quot说话 quot和 quot与地图互动 quot作为例子,本文简要介绍如何为字符和开关添加脚本。在实际过程中,你可以发挥想象力,做出更有趣的效果。
要让角色说话,只需选择角色,然后在右边的编辑菜单中选择添加事件来添加事件脚本。在这里,我们选择 quot显示文本 quot并在文本框中输入所需的文本。玩家只要对着角色按下A键,预设的文字就会显示出来,就像角色在说话一样。你也可以把它应用到路标和收音机上。
显示文本
要添加交换机脚本,您需要先添加交换机,然后选择 quot添加事件 quot在右边。与角色互动需要玩家按一个键,默认情况下,只要角色站在开关上就会启动。因此,如果您希望玩家在按键后开始交互,您需要添加 quot如果按下了游戏手柄输入并将交互式脚本放在这个if条件中。
IF条件
游戏中最常用的事件脚本之一是 quot切换场景 quot。可以为每个场景切换脚本设置要切换的场景,播放器生成的位置和方向,甚至切换速度。在设置了 quot切换场景 quot,故事板中的场景也会用蓝色虚线连接起来,这样更直观。
在游戏制作过程中,你可以点击 quot运行 quot按钮或快捷键Ctrl/CommandB随时快速开始演示。
导出游戏
当你通过努力做出自己的游戏时,你一定渴望与他人分享。GB Studio提供了两种导出形式:
导出ROM:生成一个游戏ROM文件。gb格式,可以在任何模拟器上玩。导出网页:生成一个基于HTML5的网页,需要把整个文件夹上传到服务器,定位在index.html,然后就可以在线玩了。两种出口方式各有利弊。在没有服务器的情况下,第一种选择无疑更合适。如果你有服务器,不妨把游戏部署到服务器上,这样只需要一个链接就可以玩你的游戏。在移动平台上,导出的网页会自动生成虚拟按键供玩家操作。
可以在GB Studio官网免费下载,支持Windows、macOS、Linux平台。GB Studio在GitHub也是开源的。你可以在这里查看它的源代码。如果在游戏制作过程中遇到什么问题,可以在这里查阅官方文档。
祝大家早日做出好玩的游戏。如果你把游戏部署到服务器上,你也可以在评论区和我们分享。
王者之心2点击试玩
excel中好像有个放置猴子去射气球的游戏,请问哪里有得下啊
一:纸牌游戏
启动Excel程序,依次点击工具栏中“工具/自定义”菜单,切换至“命令”标签页,选中左侧“类别”栏中的“工具”菜单,向下拖动右侧“命令”栏侧边滑块,找到带有纸牌图形的“自定义”选项(如图),将它拖至Excel工具栏中,点击“关闭”按钮将“自定义”对话框关闭。现在,Excel工具栏中就多了一个纸牌按钮,点击该按钮,熟悉的纸牌游戏界面就出现在你面前了。
二: MicroSoft Excel 暗藏赛车游戏
1.开启Excel之后随便开一新文档,将它『另存成Web画面 』,按下发布后再将“添加交互对象”打勾,将档案储存为car.htm(文件名可自取)。
2.在IE中开启car.htm,你应该会看到电子表格出现在网页中央,如图1:
图1
3.在这个工作表中,先用PageDown键移动工作表的矩形光标直至第行,注意只能用PageDown键,然后用Tab键横向向右移动光标直至WC列,也是只能用键操作,到此,所有的准备工作已经完毕,该是调出游戏的时候了。
4.同时按住Shift+Crtl+Alt 然后点选左上方的 Office logo 。
5.开始玩了,如图2:
图2
6.玩法提示: 玩游戏的时候,被你控制的是那一辆浅蓝色的汽车,操作的主要是四个箭头按键。作用是:左右箭头可以控制汽车的方向:向上箭头可以加速, 向下的箭头减速;如果汽车运行到了夜间,可用H键打开车灯。
绝对好玩!
三:数字华容道
'先说个简单的。大家玩过那个数字华容道吧,就是有N*N个格,有一格是空的,其他格是次序混乱的拼图或数字,游戏的目的就是利用这唯一的这个空格移动各块拼图把混乱的拼图(数字)恢复(顺序)。这里我们小游戏的目的是要把1至这个次序混乱的数字恢复从1到的顺序排列。
'打开Excel后打开代码编写器(Alt + F),将如下代码写入模块中。程序首先是初始化。定义变量,选择4*4的空格,调整表格大小,改变单元格颜色(标示出游戏区域),然后是让1到非重复随机分布到前格空格中:
Public Const PW = "Excelba.com" '本游戏由Excel吧bengdeng整理!
Public Running As Boolean '用于判断游戏是否进行中,如果要中途退出或玩家需要重玩用此变量控制
Public SRan As Range '游戏左上单元格
Public BRan As Range '游戏空格单元格
Public N As Integer '游戏区域大小
Public GRan As Range '游戏区域,这里由N与SRan生成
Public Bs As Integer '游戏步数
Public STime As Date '游戏开始时间
Sub GameStar()
Dim i As Integer
Dim ii As Integer
Dim temp As Integer
Dim a() As Integer
Dim down As VbMsgBoxResult
'判断游戏是否在运行
If Running Then
down = MsgBox("游戏正在进行!是否重玩?", vbYesNo, "提示 - " & PW)
If down = vbNo Then Exit Sub
End If
Running = True
N = 4 '设定游戏区域为4*4
Set SRan = Range("E5") '设定游戏开始单元格为E5
Set BRan = SRan.Offset(N - 1, N - 1) '设定游戏空单元格
Set GRan = Range(SRan, BRan)
'游戏区域(颜色)初始化,省略了单元格大小的调整,大家可以应该加入相应语句让游戏外观整齐
If ActiveSheet.ProtectContents Then ActiveSheet.Unprotect Password:=PW
GRan.ClearContents
GRan.Interior.ColorIndex =
'随机数数组初始化,这里是编号0到编号共个数
For i = 0 To (N * N - 2)
a(i) = i + 1
Next i
'不重复随机分布各数
For i = N * N - 2 To 0 Step -1
Randomize
ii = Int(Rnd * i)
temp = a(i)
a(i) = a(ii)
GRan.Item(i + 1) = a(i)
a(ii) = temp
Next i
Bs = 0
STime = Now()
ActiveSheet.Protect Password:=PW
End Sub
'很明显,Excel的单元格是游戏的主角。初始化后游戏开始,逻辑很简单:玩家每单击一个单元格(产生Workbook中的SheetSelectionChange事件),游戏就判断这个格是否在游戏区域中,若是就判断上下左右4个方向是否有空格,如果有空格就把原单元格中的数传到空格中,原单元格清空(空格与原单元格交换),然后判断游戏是否结束(1到顺序排序了?),若还没有,什么都不做,等下一次单击事件发生。
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim down As VbMsgBoxResult
Dim i As Integer
If Running Then
'所单击单元格是否就是空格
If Len(ActiveCell) > 0 Then
'所单击单元格是否在游戏区域
If Not (Application.Intersect(ActiveCell, GRan) Is Nothing) Then
'所单击单元格上下左右是否有空格
If ((Abs(BRan.Column - ActiveCell.Column) <= 1 And BRan.row = ActiveCell.row) Or (Abs(BRan.row - ActiveCell.row) <= 1 And BRan.Column = ActiveCell.Column)) Then
'单元格与空格交换
If ActiveSheet.ProtectContents Then ActiveSheet.Unprotect Password:=PW
BRan = ActiveCell
ActiveCell.ClearContents
Set BRan = ActiveCell
Bs = Bs + 1
ActiveSheet.Protect Password:=PW
'判断游戏是否结束?
i = 1
Do While (i < N * N And GRan.Item(i) = i)
i = i + 1
Loop
If i = N * N Then
MsgBox "祝贺你!你成功了!" & vbCrLf & _
"一共用了" & Bs & "步!" & vbCrLf & _
"一共用用时" & Format(Now - STime, "h:m:s"), , PW
Running = False
End If
End If
End If
End If
Else
down = MsgBox("游戏还未进行,是否开始?", vbYesNo, "提示 - " & PW)
If down = vbYes Then GameStar
End If
End Sub
四:跑跑卡丁车.xls
网上到处可下!注:打开Excel后,若不能玩,点菜单栏上的工具→宏→安全性,将安全级别设为低,便可以玩了
五:贪吃蛇源码
首先要解决游戏显示的问题。对我们来说,小游戏最好的平台是Excel的工作区,由于大小可调、颜色可填的单元格操作方便,我们完全可以把它们当像素来使用。于是我们的贪吃蛇游戏就有了以单元格为基础的像素形式的显示方式了。
其次是游戏的控制方法。在这里我摸索了好久,其中走了弯路不说,我最后的结论是在Excel中要实现按键事件的方法是引入窗体,然后在窗体中响应Keydown与Keypress事件。这样的话,既可以快速响应还可以根据情况修改对应按键。
最后是游戏的定时问题。所有的游戏事实上都是在一个时间大循环里面定时接收输入信息更新状态的程序,我们的小游戏都不例外。老实说,我写这个游戏大部分的思考时间就浪费在如何实现游戏定时这里。Excel的VBA中与定时有关的只有onTime函数,没有其他相关函数提供了,onTime函数可以实现某一事件在指定时间发生,但只能以秒为最小单位,对我们要在一秒内更新数十次信息的小游戏不适合,我们只能另找方法。用过VB的人都知道VB控件中有个定时控件,用它来实现游戏定时是最好的,但在Excel中却没有,难道我要把VB中的定时控件移植到VBA中?这也是个很值得研究的课题,但是我想到了另外的方法。VB的程序员都知道要想VB程序发挥大作用一定离不开调用系统的API,于是我查看了系统相关API的帮助,发现系统API中实现相应功能的有settimer与killtimer函数,具体定义和用法大家可以参考相关帮助,但从字面大家都已经可以知道它们就是我们要找的东西了。那么现在的问题就是如何在vba环境下调用系统API。心想微软称vba就是office中的vb,那么在vba中调用系统API应该也与在VB中的一样。一试,呵呵,果然非虚,这微软真不是盖的(后在msdn中发现ms office vba从版本开始支持调用系统API,大家可以拓展office应用了)。
就这样游戏输入、输出、逻辑定时的问题都解决了,我们的吃蛇游戏就仅剩下算法逻辑部分了。我们的游戏逻辑是,游戏初始化后,启动定时器。在每次定时循环中,程序分别实现蛇头移动与蛇尾移动。首先是移动蛇头,游戏判断在移动方向上蛇头下一个的位置是否为空格,若是则把这位置的空格填上颜色(蛇头移动),蛇尾移动标志设为真;如果蛇头下一个位置不是空格(即有食物),则把这位置的空格填上颜色(蛇头移动)后把蛇尾移动标志设为假。接着到蛇尾移动部分,若蛇尾移动标志为真则把蛇尾原所在单元格填回白色(蛇尾移动),并更新蛇尾位置;如果蛇尾移动标志为假,则什么都不做(蛇尾不动蛇头动,蛇身长了)。对于整个游戏来说,效率的瓶颈在于像素操作(对单元格频繁填色)。但从以上算法可以看到,在每次循环中程序只需处理蛇头及蛇尾所在单元格;如果贪吃蛇吃到食物,则只需要更新蛇头单元格。每个时间循环里较少的数据处理量实现了游戏较快的响应速度,贪吃蛇游戏在Excel中实现也有了实际意义。
游戏还是以宏的形式实现。大家新建一个宏,输入如下代码。
' 熟悉VB的程序员知道首先是对调用系统API的声明
Public Declare Function SetTimer Lib "user" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Public Declare Function KillTimer Lib "user" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
' 定义数据结构
Type pos_
row As Long
col As Long
End Type
Public timerset As Long ' SetTimer函数的返回值,用以标记已存在的Timer,KillTimer以此为参数销毁所标记的Timer
Public gaming As Boolean
Public pulsed As Boolean
Public head_movement As Long '蛇头新移动方向标志,1、2、3、4代表右上左下
Public tail_movement As Long '蛇尾移动方向标志,意义同上
Public oldhead_movement As Long '蛇头旧有移动方向标志
Dim tailmove As Boolean '蛇尾移动标志
Dim origin_size As Long '贪吃蛇原始大小
Public score As Long
Dim steps As Long
Dim clean As Boolean
Dim sth As pos_
Dim headrow As Long '蛇头所在行位置
Dim headcol As Long '蛇头所在列位置
Dim tailrow As Long '蛇尾所在行位置
Dim tailcol As Long '蛇尾所在列位置
Dim startpos As pos_ '贪吃蛇起始位置
Dim color As Long
Const left As L 5 '游戏区域左边边界
Const right As L '游戏区域右边边界
Const top As L 3 '游戏区域上边边界
Const bottom As L '游戏区域下边边界
Function main() '主函数
gaming = False
If Worksheets.Count < 2 Then
ActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)
ElseIf (MsgBox("Do you want to run it in a new blank worksheet ?", vbOKCancel, "?") = vbOK) Then
ActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)
Else
Worksheets(Worksheets.Count).Select
End If
Load UserForm1 '引入窗体
UserForm1.Show
End Function
Function game_initial() '游戏初始化函数
'初始化游戏界面
color = 5
If Not gaming Then
Cells.ColumnWidth = 1
Cells.RowHeight =
Range(Cells(top, left), Cells(top, right)).Interior.ColorIndex = 1
Range(Cells(top + 1, left), Cells(bottom - 1, left)).Interior.ColorIndex = 1
Range(Cells(bottom, left), Cells(bottom, right)).Interior.ColorIndex = 1
Range(Cells(top + 1, right), Cells(bottom - 1, right)).Interior.ColorIndex = 1
Range(Cells(top + 1, left + 1), Cells(bottom - 1, right - 1)).Font.ColorIndex = color
End If
'贪吃蛇初始化
origin_size = 5
tail_movement = 1
head_movement = 1
oldhead_movement = head_movement
startpos.row = (top + bottom) \ 2 'initialized as
startpos.col = (left + right) \ 2 'initailized as
pulsed = False
tailmove = True
headrow = startpos.row
headcol = startpos.col
tailrow = startpos.row
tailcol = startpos.col - origin_size + 1
clean = True
steps = 0
score = 0
For i = 0 To origin_size - 1
Cells(startpos.row, startpos.col - i).Interior.ColorIndex = color
Next i
gaming = True
'游戏初始化结束
End Function
Sub snake_move()
If gaming Then
Dim nextcol As Long
Dim nextrow As Long
If clean Then
steps = steps + 1
'贪吃蛇食物生成,这里食物的生成过程很简单,蛇每前进6步就生成一块食物
If steps >= 6 Then
steps = 0
Randomize
sth.row = Int((bottom - top) * Rnd) + top + 1
Randomize
sth.col = Int((right - left) * Rnd) + left + 1
Do While sth.row >= bottom
sth.row = sth.row - (bottom - top) + 1
Loop
Do While sth.col >= right
sth.col = sth.col - (right - left) + 1
Loop
Cells(sth.row, sth.col) = "*"
clean = False
End If
End If
''''''蛇头移动部分
tailmove = True
If oldhead_movement <> head_movement Then
If Abs(oldhead_movement - head_movement) <> 2 Then
oldhead_movement = head_movement
Cells(headrow, headcol) = head_movement '当方向改变时在蛇头当前单元格记下前进方向,待蛇尾运行至此时可以按正确方向前进。本来应该用个数组记录,但我懒得再琢磨了。
End If
End If
Select Case oldhead_movement
Case 1 'right
nextrow = headrow
nextcol = headcol + 1
Case 2 'up
nextcol = headcol
nextrow = headrow - 1
Case 3 'left
nextrow = headrow
nextcol = headcol - 1
Case 4 'down
nextcol = headcol
nextrow = headrow + 1
End Select
'看是否超出游戏区域了。
If nextcol = left Then
nextcol = right - 1
ElseIf nextcol = right Then
nextcol = left + 1
End If
If nextrow = top Then
nextrow = bottom - 1
ElseIf nextrow = bottom Then
nextrow = top + 1
End If
If Cells(nextrow, nextcol).Interior.ColorIndex = color Then '蛇头碰到蛇身了,游戏结束
Call game_over: Exit Sub
End If
If Cells(nextrow, nextcol) = "*" Then
Call score_
Cells(nextrow, nextcol).ClearContents
End If
Cells(nextrow, nextcol).Interior.ColorIndex = color
headrow = nextrow
headcol = nextcol
''''''蛇尾移动部分
If tailmove Then
Select Case tail_movement
Case 1 'right
nextrow = tailrow
nextcol = tailcol + 1
Case 2 'up
nextrow = tailrow - 1
nextcol = tailcol
Case 3 'left
nextrow = tailrow
nextcol = tailcol - 1
Case 4 'down
nextcol = tailcol
nextrow = tailrow + 1
End Select
If nextcol = left Then
nextcol = right - 1
ElseIf nextcol = right Then
nextcol = left + 1
End If
If nextrow = top Then
nextrow = bottom - 1
ElseIf nextrow = bottom Then
nextrow = top + 1
End If
If Cells(nextrow, nextcol) <> 0 Then
If (Asc(Cells(nextrow, nextcol)) <> ) Then
tail_movement = Cells(nextrow, nextcol)
Cells(nextrow, nextcol).ClearContents
End If
End If
Cells(tailrow, tailcol).Interior.ColorIndex = 0
tailrow = nextrow
tailcol = nextcol
End If
End If
End Sub
Function game_over()
If timerset <> 0 Then
timerset = KillTimer(0, timerset)
pulsed = False
End If
If MsgBox("Game over...temporarily. Try again?", vbOKCancel, "?") = vbOK Then
Range(Cells(top + 1, left + 1), Cells(bottom - 1, right - 1)).Interior.ColorIndex = 0
Range(Cells(top + 1, left + 1), Cells(bottom - 1, right - 1)).ClearContents
Call game_initial
Else
Cells.ClearContents
Cells.Interior.ColorIndex = 0
gaming = False
SendKeys "%{ F4}" '这句很关键,当引入窗体后要在程序中退出窗体就要用Alt+F4
End If
End Function
Function score_()
clean = True
score = score +
tailmove = False
UserForm1.Label2.Caption = "Now you have the score of " + Str(score)
End Function
上边是主程序(宏)部分,以下是窗体代码部分。在工程中引入用户窗体,名为UserForm1,拖入两个label控件名为Label1、2,再在窗体属性窗口调整好窗体在Excel中出现的位置。完成后在窗体代码窗口键入如下代码:
Private Sub UserForm_Initialize() '窗体初始化事件
Call game_initial
If gaming Then
UserForm1.Label1.Caption = "NO PLAY , NO GAME"
UserForm1.Label2.Caption = "Arrow keys to move. P key to pause the game E key to end the game"
Else
UserForm1.Label1.Caption = "Something happened !"
End If
End Sub
Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) '响应窗体KeyDown事件
If gaming Then
If Not pulsed Then
pulsed = True
timerset = SetTimer(0, 0, , AddressOf snake_move) '启动定时器,这里时间间隔为毫秒,大家可以加入一些代码用来实现越来越快的游戏速度
UserForm1.Label2.Caption = "Arrow keys to move. P key to pause the game E key to end the game"
End If
Select Case KeyCode
Case vbKeyUp
head_movement = 2
Case vbKeyDown
head_movement = 4
Case vbKeyLeft
head_movement = 3
Case vbKeyRight
head_movement = 1
Case vbKeyP '这里是通过销毁定时器实现游戏暂停
If timerset <> 0 Then
timerset = KillTimer(0, timerset)
pulsed = False
End If
UserForm1.Label2.Caption = "Game paused. Any key to resume. "
Case vbKeyE
Call game_over
End Select
End If
End Sub
Private Sub UserForm_Terminate() '窗体销毁事件,这里是通过主程序发出Alt+F4按键事件引发
If timerset <> 0 Then
timerset = KillTimer(0, timerset)
pulsed = False
End If
MsgBox ("You have finished the game with the score of " + Str(score))
End Sub
不过还没完,我们要找个地方启动整个程序。在工作表sheet1中找个地方拖入一个按钮用作总开关,名为CommandButton1,双击进入代码编写状态,键入
Private Sub CommandButton1_Click()
Call main
End Sub