想从事游戏开发,求前辈大师等指点。分不多,只想得一句指点。_百度知道C#......写一个猜数字游戏的的程序。要求:使用者输入一个介于1--30的数字,计算机只要给出_百度知道您所在的位置: &
一个简单C#游戏程序制作
一个简单C#游戏程序制作
本文介绍了网上有很多C#游戏程序制作的教程,大多是讲针对大型网络游戏的,主要包含一些抓包、反汇编、C++的知识综合。事实也如此,常见的外挂都是使用VC++写的,从来没有过C#或者其他.NET语言编写的程序。
在向大家详细介绍C#游戏程序制作之前,首先让大家了解下作为游戏程序来说,主要就是三个功能:模拟键盘操作、模拟鼠标操作、修改内存数据,然后全面介绍C#游戏程序制作。
网上有很多C#游戏程序制作的教程,大多是讲针对大型网络游戏的,主要包含一些抓包、反汇编、C++的知识综合。事实也如此,常见的外挂都是使用VC++写的,从来没有过C#或者其他.NET语言编写的程序。
作为微软.NET技术的忠实粉丝,这难免是一种遗憾。不过不要紧,下面流牛木马就教大家两招,包教包会,免收学费。 :)
其实作为游戏程序来说,主要就是三个功能:模拟键盘操作、模拟鼠标操作、修改内存数据。修改内存数据比较难,但模拟鼠标键盘的操作却很简单。很多流行游戏的外挂,都可以只通过模拟鼠标键盘来实现,例如:劲舞团、QQ音速、连连看、各类网页游戏,以及各类大型网游中的自动打怪、自动吃药等等。
Warcraft Ⅲ,学名魔兽争霸之冰封王座,俗称魔兽,简称war3,在最近六七年风靡全球。最近两年,war3在中国又掀起了玩DOTA的新高潮。
本文制作DOTA游戏中的显血、改键外挂为例,简单地介绍如何制作C#游戏程序。
本示例包含两个功能:显血;将Q键改为小键盘的7键。玩war3的同学都知道,这两个功能对于war3(尤其是DOTA)相当重要。
首先简单介绍一下,程序模拟键盘的原理。
程序与游戏程序是两个不同的进程。外挂程序使用Windows提供的API找到游戏程序的进程,并设置键盘钩子(什么叫做钩子?你不知道,但百度知道。)设置完钩子后,我们再监控游戏进程中用户的按键,并根据用户需求进行处理,完成某些模拟键盘动作。
了解了这个过程之后,我们就可以开始整理思路了。完成C#游戏程序一共需要以下四个步骤:
一、声明Windows API 中的函数和常量&&&&&&&&&&&&&&[StructLayout(LayoutKind.Sequential)] &&&&&&&&&public&class&KeyBoardHookStruct &&&&&&&&&{ &&&&&&&&&&&&&public&int&vkC &&&&&&&&&&&&&public&int&scanC &&&&&&&&&&&&&public&int& &&&&&&&&&&&&&public&int& &&&&&&&&&&&&&public&int&dwExtraI &&&&&&&&&} &&&&&&&®ion&DllImport &&&&&&&&&&&&&&&&&&[DllImport("user32.dll",&CharSet&=&CharSet.Auto,&CallingConvention&=&CallingConvention.StdCall)] &&&&&&&&&public&static&extern&int&SetWindowsHookEx(int&idHook,&HookProc&lpfn,&IntPtr&hInstance,&int&threadId); &&&&&&&&&[DllImport("user32.dll",&CharSet&=&CharSet.Auto,&CallingConvention&=&CallingConvention.StdCall)] &&&&&&&&&&&&&&&&&&public&static&extern&bool&UnhookWindowsHookEx(int&idHook); &&&&&&&&&[DllImport("user32.dll",&CharSet&=&CharSet.Auto,&CallingConvention&=&CallingConvention.StdCall)] &&&&&&&&&&&&&&&&&&public&static&extern&int&CallNextHookEx(int&idHook,&int&nCode,&IntPtr&wParam,&IntPtr&lParam); &&&&&&&&&&&&&&&&&&[DllImport("kernel32.dll",&CharSet&=&CharSet.Auto,&CallingConvention&=&CallingConvention.StdCall)] &&&&&&&&&private&static&extern&IntPtr&GetModuleHandle(string&lpModuleName); &&&&&&&&&&&&&&&&&&&[DllImport("USER32.DLL")] &&&&&&&&&public&static&extern&IntPtr&FindWindow(string&lpClassName, &&&&&&&&&&&&&string&lpWindowName); &&&&&&&&&&&[DllImport("USER32.DLL")] &&&&&&&&&public&static&extern&bool&SetForegroundWindow(IntPtr&hWnd); &&&&&&&&&[DllImport("User32.dll")] &&&&&&&&&public&static&extern&void&keybd_event(Byte&bVk,&Byte&bScan,&Int32&dwFlags,&Int32&dwExtraInfo); &&&&&&private&const&int&KEYEVENTF_KEYUP&=2;&
本例所使用的函数比较少,它们都在系统的USER32.dll里,包括:设置和取消钩子、调用下一个钩子、导入进程、模拟键盘等等。我们依次导入它们。
这些函数的命名规范合理,几乎只根据函数名就能知道其功能。
如果读者对于其中的某些函数不熟悉,请自行搜索MSDN。
二、使用Windows API设置钩子&
有了以上windows API函数的声明,下一步就是设置钩子了。
寥寥两行代码,但包含了相当丰富的内容。&public&delegate&int&HookProc(int&nCode,&IntPtr&wParam,&IntPtr&lParam); && &&public&void&Hook_Start() &&&&&{ &&&&&&&&&&&&&&&&&&if&(hHook&==&0) &&&&&&&&&{ &&&&&&&&&&&&&KeyBoardHookProcedure&=&new&HookProc(KeyBoardHookProc); &&&&&&&&&&&&&&hHook&=&SetWindowsHookEx(WH_KEYBOARD_LL,&KeyBoardHookProcedure,&GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName),&0); &&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&} &&&&&}&
先介绍一下设置钩子的明星函数:SetWindowsHookEx 。它的参数说明如下。◆SetWindowsHookEx(◆idHook: I&& {钩子类型}◆lpfn: TFNHookP {函数指针}◆hmod: HINST;&&&&&& {包含钩子函数的模块(EXE、DLL)句柄; 一般是 HI 如果是当前线程这里可以是 0}◆dwThreadId: DWORD {关联的线程; 可用 GetCurrentThreadId 获取当前线程; 0 表示是系统级钩子}◆HHOOK;&&&&&&&&&&& {返回钩子的句柄; 0 表示失败}
请注意lpfn这个参数。上面的解释是“函数指针”。在C#中,是不能直接使用指针的,更不要说函数指针了。我们可以采用C#中的委托(delegate)来实现函数指针的功能。
于是乎,在上面的代码中,我们定义了一个处理键盘消息函数的委托KeyBoardHookProcedure = new HookProc(KeyBoardHookProc),并将它作为参数传入SetWindowsHookEx 内。KeyBoardHookProc就是被委托的具体函数。
三、监控用户操作
设置好钩子后,我们可以在被委托的函数中写入监控用户操作与模拟键盘的代码。public&static&int&KeyBoardHookProc(int&nCode,&IntPtr&wParam,&IntPtr&lParam) &&&&&&&&&{ &&&&&&&&&KeyBoardHookStruct&input&=&(KeyBoardHookStruct)Marshal.PtrToStructure(lParam,&typeof(KeyBoardHookStruct)); &&&&&&&&&&&&&&&&&&&&&&&&&&&if&(input.vkCode&==&(int)Keys.Home) &&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&} &&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&return&CallNextHookEx(hHook,&nCode,&wParam,&lParam); &&&&&&&&&&}&
四、根据用户需要模拟键盘操作
显血功能:玩war3的都知道,war3自带的显血快捷键有3个。Alt键是显示所有单位生命,[ 键显示友方单位生命,] 键显示地方单位生命。外挂需要做的事情仅仅是模拟一直按着某个键不松手而已。由于Alt键与其他很多键构成组合键,故我们不能模拟长按Alt,否则会影响正常游戏。我们的解决方案应该是模拟长按 [ 键和 ] 键。代码如下:&&&IntPtr&wcHandle&=&FindWindow(null,&"Warcraft&III"); &&&&&&&if&(wcHandle&!=&IntPtr.Zero) &&&{ &&&&&&&&&&&&&&SetForegroundWindow(wcHandle); &&&byte&VK_NUM1&=&219;&&&&&&&&byte&VK_NUM2&=&221;&&&&&&&&keybd_event(VK_NUM1,&0,&0,&0);&&&&keybd_event(VK_NUM2,&0,&0,&0);&&&
改键:小键盘(Numpad)上的快捷键很不方便按,所以很多玩家喜欢把小键盘上的键改到左边的字母键盘。玩war3的同学都知道,没有任何英雄的技能使用"Q”这个快捷键。于是我们把小键盘上的7键改到Q上,也不会造成任何冲突。方法也很简单:如果监控到用户按"Q”键,则像游戏进程发送小键盘上的"7"键。代码如下:&&&&if&(input.vkCode&==&(int)Keys.Q) &&&&{ &&&&&&&&&&&&&&&&IntPtr&wcHandle&=&FindWindow(null,&"Warcraft&III"); &&&&&&&&&&&&&&&&&if&(wcHandle&!=&IntPtr.Zero) &&&&&&&&{ &&&&&&&&&&&&&&&&&&&&&&&&SetForegroundWindow(wcHandle); &&&&&&&&&&&&byte&VK_Q&=&(byte)Keys.NumPad7; &&&&&&&&&&&&keybd_event(VK_Q,&0,&0,&0);&&&&&&&&&&&&keybd_event(VK_Q,&0,&KEYEVENTF_KEYUP,&0);&&&&&&&&&} &&&&&&&&return&1; &&&&}&
好了,到这里就把模拟键盘的C#游戏程序介绍完了。模拟鼠标与之非常类似,请用户自行揣摩。
【编辑推荐】
【责任编辑: TEL:(010)】
关于的更多文章
AngularJS是很多Web开发人员在打造单页面应用程序时的首选创建方
作为移动开发者,WOT2016移动互联网技术峰会,绝对有你不得不来的理由。
讲师: 4人学习过讲师: 7人学习过讲师: 66人学习过
在脚本语言领域,Lua是最快、最高效的脚本语言之一,
2014年节假放假安于这周出台,80%的公民对此次的放假
进入12月份,一年的日子到头了。年末总结什么的也都开
《Cisco网络工程案例精粹》是一本以案例为基础兼顾知识概述的案例性书籍,所收录的案例都是笔者精心挑选出来的在网络工作中常见
51CTO旗下网站& 说到三境界,很多人怕是首先想到王国维:
王国维在《人间词话》说:古今之成大事业、大学问者,必经过三种之境界:"昨夜西风凋碧树。独上高楼,望尽天涯路。"此第一境也。"衣带渐宽终不悔,为伊消得人憔悴。"此第二境也。"众里寻他千百度,蓦然回首,那人却在灯火阑珊处。"此第三境也。此等语皆非大词人不能道。然遽以此意解释诸词,恐为晏欧诸公所不许也。"
如果上面看不太懂的,请自行百度吧:) & 由此我也想要总结一下我玩游戏的三境界:玩游戏,改游戏,造游戏。下面我就谈谈关于游戏,我的经历吧。
学编程前:
1、说实在的我能走上这条路,还是跟玩游戏有很大的关系。以前特别喜欢玩游戏,我的近视眼就是98年那时候造成的,当时不仅喜欢玩,还喜欢看别人玩(因为没钱)。那时候在网络中心里(其实就是网吧)都是在玩仙剑98,红色警戒,还是一堆单机小游戏。
2、后来搬家到了一个省级市里面,才见识了,什么是真正的网吧,什么是游戏厅,什么是索尼电视游戏,那时2000年左右。然后就疯狂的迷上了,有一次考试成绩很好,父母奖励了100块钱,结果我第二天就把100块破整为零,然后在网吧里跟我的小伙伴炫富。结果被别人看到了,有三个大约初中生在我回家的路上截住我,向我&借钱&,我死死握住不给,瞅准机会就突出重围,边跑边叫喊,光天化日之下对方也没敢追。我到家后,把钱赶紧藏起来,下去玩。遇到其中一个打劫的人,还给我说他不是一伙的,如何如何,我怎么会相信呢。多年以后想起来,当时的人们都好傻好天真,哈哈。
3、初中高中都在住校,生活费有限,网资不够。然后尝试&破解&网吧收费的系统(一个是电脑中间有个红色框框的,后来是万象)。印象中还记得两种方法:一个是+Alt+. 调出任务管理器,然后新建游戏任务;另一种是方向键&&&+回车。
4、后来对不感兴趣了,对魔兽争霸和RPG很有兴趣。玩着玩着网上很多修改器,很多种修改的,突然意识到,这些游戏是可以通过个人来修改的。然后就开始尝试:
最开始在魔兽RPG地图里尝试,开始很少地图加密的,可以直接用自带的编辑器打开修改;
后来大部分地图都加密了,然后就发现了地图的Jass,通过TXT的搜索在里面找隐藏的命令;
再后来感觉只是这样用作者自带的命令很不爽,很多想要的东西没有。然后学习尝试,就在人物初始化的地方加些神装,或者加初始化的钱,木头;
& & 当时还买了两本书一本叫《攻防完全解密》后来被室友当做开门暗号,汗。。。还有本《C++ &xxxxxx》 具体名字忘了,期间还报了编程兴趣班,还记得当时老师说:充满的程序员用Delphi,真正的程序员用C++。。。期间完全是打酱油的,那两本书也完全看不到天书一样的,函数,方法,变量什么的。。。。完全没概念的,脑壳晕乎乎的看了二十多页就束之高阁了。
&学编程后:
& & & 在选择大学的时候,一方面自己成绩确实不咋滴,另一方面可能觉得自己对电脑还是很有天分的,就选择计算机专业。当时有两个专业,一个叫软件技术(.net方向),一个软件技术(J***A方向)。说实话当时对这两个东西完全不知道是什么!最后导致我选择.NET的原因是:.net是很多网站的后缀名,java这个,只是在诺基亚的手机游戏(当时07年,Nokia5300)开始的那几秒见到过。就认定了.NET要高级些,java只是搞手机游戏。。。汗。。。
& & & 然后开始系统的学习了一段时间大学课程,以要好好学习编程为由向父母要钱买了个电脑------------打游戏。电脑在当时配置还算的,AMD三核(现在已经绝迹了,四核当时太贵了),1G显存。然后开始迷上了各种大型单机游戏,从那个时候起,我玩游戏的状态开始变成&谷歌百度攻略+修改器。 这个时候我的玩游戏的乐趣已经不再是游戏本身了,变成:找各种方法来,修改游戏里面的东西,或者部分的规则。 改,改配置,改存储的数据。当然也仅限于单机。
& & & 单机也有玩腻的一天,慢慢玩起来休闲类的网游,水浒(三年前了,估计快倒了,类似于偷菜)。这类游戏就是操作太重复机械,我就用按键精灵,写了个自动抢矿的功能,当时跟一起玩的同事炫耀,还分享给他。后来觉得这个太不爽,占着屏幕,挨个抢太浪费时间,就在网上找辅助工具。用辅助器的时候,意识到,玩网游其实完全不需要客户端,只要一根网线,能够模拟数据发送就完全可以实现玩游戏。 &然后研究了一段时间的抓包,太复杂了,太麻烦了,知识量不够,完全看不懂,尤其是当时QQ密码加密那段,就放弃了。
& & & 直到去年底,我才真正实现了。在上班的公交车上,看看时间差不多了,慢悠悠的掏出手机连上***,内部打卡。原理就是模拟POST数据,到数据库中。嘘~~
造游戏的经历:
& & & 在大学的时候,有一个大的作业就是写一个程序。当时我参照书上的&八皇后游戏&来写,一句一句的边看书编写,期间还遇到了非常多的问题。当时的感觉非常难受,不过当游戏做出来后,那种喜悦,那种逢人就推销自己丑陋的游戏,那种鼻子就要撞到屋顶的感觉,现在不知道怎么形容。哈哈
& & & 后来在跟同事闲聊中得知,unity3d是用C#开发游戏,立马兴趣就来,说学就学,边学边做。在这期间感觉真是这个游戏中的&上帝&,哪里长颗树,哪里下雨,人的脑袋长在头上还是胯下,里面的规则是什么。完全一种造物主的感觉,太爽,太麻烦。因为太多太多的因素要考虑进去。同时,也重构了我对现实物理世界的认识。&
& & &然后我就带着这一点点的经验开始换工作,希望喜欢的游戏。现实打了狠狠的巴掌,工资已经要的很低了,可是还没有公司肯要我。终于有个offer了,一听他们早上9:30--晚上9:00,周末单休。逢年过节还可能,说里面有个领导曾经连续上班48个小时。我已经预想到会很累,但是没想到会这么累。我犹豫了,直到我看到这句话:&千万不要把爱好当做职业,否则那个爱好都可能会失去。&
& & &现在我就把写写自己用的小工具,修改修改小游戏,自己玩玩而已。我的观念就是:游戏就是让人玩的,不是让游戏玩人。不过目前我有get了,编写Chrome插件,用它帮朋友刷课程,帮别人刷票(刷票的规则是,IP都是通过URL传过去的,这太简单了。。。刷的超过第二名几万票,第二名才两三千票,然后直接被封了,捂脸~~)。
& & &最近我修改的是安卓游戏Candy Crush,修改后的游戏就是玩起来很顺手,打发时间的时候就玩两关,过不去就去电脑上修改配置,哈哈,以前的时候都让人抓狂。我也只限于单机,那种发短信付费的网游,也试过阻止发送,然后产生后,充值成功的。不过有次失误让我花了40大洋,心里小小的郁闷了一把。
& & &我再推荐几个Android的小工具,如下图:能够满足80%的修改需求,剩下的只能通过修改APK来了。 这也就是我为什么喜欢Android的原因,自由,哈哈。 &对了,我以前还修改过qq的图标,界面那些,希望搞个自己的定制版。前期的版本还好,只是手机后会出问题,后面的版本就不行了。也挺麻烦,也觉得没什么意思了,就慢慢淡忘了。
& & 其实不仅仅在电脑0和1的世界中,在和朋友的聚会中,也会根据当时的气氛,状态。临时发明一些有意思的小游戏。比如:四个人在吃串串喝酒,划拳,十五二十等等都玩过一遍了;然后临时起意,每个人讲一个关于自己真实的故事,然后周围三个人每人用一个词语评论一下,卡住的说不出来的,就喝酒。 后面规则变来变去,喝的也差不多就转场了。
总结一下:
第一境界:精通游戏,规则。这个很难,很费时间,要像sky那样打成世界冠军极少极少。这个过程也就是不停的理解游戏里的各种规则,玩DOTA的高玩都是,通过研究地图源码里面的计算公式来的。说的难听些,你始终没有跳出那个条条框框,一直被框着,这当然不是我想要的。
第二境界:修改游戏,修改规则。也就是通过研究游戏规则,来修改为自己想要的规则,也就是半个该游戏&上帝&。笨人也忝列其中。呵呵~~
第三境界:创造游戏,创造规则。就是完全的&造物主模式&,游戏中的万事万物,物理定律,规则都由你来制造。
& 写了这么多也没用什么逻辑,文笔也不行,就当做闲扯吧。&&&&c#写的一个RPG小游戏源代码
c#写的一个RPG小游戏源代码
c#写的一个RPG小游戏源代码,
对于想学习用C#写游戏的初学者是一个
很错的学习例子。
若举报审核通过,可奖励20下载分
被举报人:
yanglihui163
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动***等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
开发技术下载排行