求助,一个linux个微信小程序小游戏代码程序,300行代码,要

51CTO旗下网站
一个简单C程序
《学通C语言的24堂课》第1堂课初识C语言,本堂课致力于使读者了解Visual C++ 6.0的开发环境,掌握该集成开发环境中各个部分的使用,并能编写一个简单的应用程序练习使用开发环境。本节为大家介绍一个简单C程序。
作者:刘彬彬/孙秀梅来源:清华大学出版社| 08:07
1.3& 一个简单C程序
在学习C语言前,首先不要对C语言产生恐惧感,觉得这种语言都应该是学者或研究人员学习的。C语言是人类公有的财富,是一个普通人只要通过努力学习就可以掌握的一种文化遗产。下面先通过一个简单的程序了解C语言。
例1.01& 一个简单C程序。(实例位置:光盘\mr\01\sl\1.01)
本实例程序实现的功能是显示"Hello,world!I'm coming!",虽然这个简单的小程序只有7行,但是却充分地说明了C程序是由什么位置开始的,什么地方结束的。#include&&int&main() &{ &&&&&&&&&printf("Hello,world!&I'm&coming!\n");&&&/*输出要显示的字符串*/ &&&&&&&&&return&0;&&&&&&&&&&&&&&&&&&&&&&&/*程序返回0*/ &} &
运行程序,显示效果如图1.1所示。
图1.1& 一个简单C程序
下面分析一下上面的实例程序。
#include指令
实例代码中的第1行:#include&
这个语句的功能是进行有关的预处理操作。include称为文件包含命令;后面尖括号中的内容,称为头部文件或首文件。有关预处理的内容,本书在将会在第14堂课中进行详细的讲解,此处读者只需要先对此概念有所了解即可。
实例代码中的第2行。
C语言是一个灵活性较强的语言,所以格式并不是固定不变、拘于一格的,也就是说空格、空行、跳格并不会影响程序。这个时候有读者就会问:"为什么要有这些多余的空格和空行呢?"其实这就像生活中在纸上写字一样,虽然拿来一张白纸就可以在上面写字,但是还会在纸的上面印上一行一行的方格或段落、隔开每一段文字,为的就是美观和规范。合理、恰当地使用这些空格、空行,可以使编写出来的程序更加规范,对日后的阅读和整理有着重要的作用。所以在此也提醒读者在写程序时,最好将程序写得规范、干净,否则就是再好的程序也没有心情去看。
注意:不是所有的空格都是没有用的,例如,在两个关键字之间被空格隔开(else if),这种情况下如果将空格去掉的话,程序是不能通过编译的。
main函数声明
实例代码中的第3行:int&main()&
这一行代码代表的意思是声明main()函数为一个返回值为整型的函数。其中的int叫做关键字,这个关键字代表的类型是整型。关于数据类型会在本书的第2堂课进行讲解,函数的内容会在本书的第9堂课进行详细的介绍。
在函数中,这一部分叫做函数头部分。在每一个程序中都会有一个main函数,它是一个程序的入口部分,也就是说程序都是从main函数头开始执行的,然后进入到main函数中,执行main函数中的内容。
实例代码中的第4~7行代码:{ &&&&&&&&&printf("Hello,world!&I'm&coming!\n");&&&/*输出要显示的字符串*/ &&&&&&&&&return&0;&&&&&&&&&&&&&&&&&&&&&&&/*程序返回0*/ &} &
在上面介绍main函数时,提到了一个名词叫做"函数头",大家通过这个词可以联想一下,既然有函数头,那也应该有函数的身体吧?没错,一个函数分为两个部分:函数头和函数体。
程序代码中第4行和第7行的两个大括号就构成了函数体,函数体也可以称为函数的语句块。在函数体中,第5行和第6行就是函数体中要执行的内容。
实例代码中的第5行:printf("Hello,world!I'm&coming!\n");&&&&/*输出要显示的字符串*/&
执行语句就是函数体中要执行的动作内容。这一行代码是这个简单的例子中最复杂的一句,但其实也不难理解,printf是产生格式化输出的函数,可以简单地理解为向控制台输出文字或符号。在括号中的内容称为函数的参数,括号内可以看到输出的字符串"Hello,world!I'm coming!",其中"\n"称为转义字符(会在本书的第2堂课中有所介绍)。
return语句
实例代码的第6行:return&0;&
这行语句告诉main函数终止运行,并向操作系统返回一个整型常量0。前面介绍main函数会返回一个整型返回值,此时的0就是要返回的整型值。在此处可以将return理解成main函数的结束标志。
代码的注释
在程序的第5行和第6行后面都可以看到有一段关于这行代码的文字描述:printf("Hello,world!&I'm&coming!\n");&&&/*输出要显示的字符串*/ &return&0;&&&&&&&&&&&&&&&&&&&&&&&/*程序返回0*/ &
这段对代码的解释描述称为代码的注释。代码注释的作用就是对代码进行解释说明,为日后的阅读或者他人阅读源程序提供方便。语法格式如下:/*其中为注释内容*/&
说明:虽然没有强行规定程序中一定要写注释,但是为程序代码写注释是一个良好的习惯,这会为以后查看代码带来很大方便。并且如果程序交给别人看,他人便可以快速掌握程序的思想与代码的作用。所以养成编写良好的代码格式规范和添加详细的注释习惯,是一个优秀程序员应该具备的素质。
【责任编辑: TEL:(010)】&&&&&&
大家都在看猜你喜欢
热点热点头条头条热点
24H热文一周话题本月最赞
讲师:160370人学习过
讲师:91625人学习过
讲师:13784人学习过
精选博文论坛热帖下载排行
一个网站,无论视觉上多美观或者内容多丰富,如果它不能适应各种浏览情况并能面向尽可能广泛的用户群,那它就不算是真正成功的网站。本书提...
订阅51CTO邮刊关注51Testing
300行Python代码打造实用接口测试框架
发表于: 09:47 &作者:Leo Lee & 来源:博客
推荐标签:
  在刚开始实现ApiTestEngine的时候,卡斯(kasi)提议做一个Java版的。对于这样的建议,我当然是拒绝的,瞬即回复了他,“人生苦短,回头是岸啊”。  当然,我没好意思跟他说的是,我不会Java啊。不过最主要的原因嘛,还是因为的语法简洁,可以采用很少的代码量实现丰富的功能。  有多简洁呢?  刚在coveralls上看了下ApiTestEngine框架的代码统计行数,总行数只有268行,还不足300行。  当然,这个行数指的是框架本身的Python代码行数,不包括示例注释的行数。从上图可以看出来,LINES列是文件总行数,RELEVANT列是实际的Python代码行数。例如ate/runner.py文件,注释的行数是远多于实际代码行数的。  最极端的一个例子是,ate/testcase.py文件中的parse函数,示例注释行数35行,Python代码只有2行。def parse(self, testcase_template):& &""" parse testcase_template, replace all variables with bind value.& &variables marker: ${variable}.& &@param (dict) testcase_template& & & &{& & & & & &"request": {& & & & & & & &"url": "http://127.0.0.1:5000/api/users/${uid}",& & & & & & & &"method": "POST",& & & & & & & &"headers": {& & & & & & & & & &"Content-Type": "application/json",& & & & & & & & & &"authorization": "${authorization}",& & & & & & & & & &"random": "${random}"& & & & & & & &},& & & & & & & &"body": "${data}"& & & & & &},& & & & & &"response": {& & & & & & & &"status_code": "${expected_status}"& & & & & &}& & & &}& &@return (dict) parsed testcase with bind values& & & &{& & & & & &"request": {& & & & & & & &"url": "http://127.0.0.1:5000/api/users/1000",& & & & & & & &"method": "POST",& & & & & & & &"headers": {& & & & & & & & & &"Content-Type": "application/json",& & & & & & & & & &"authorization": "a83de0ff8d2e896dbd8efb81ba14e17d",& & & & & & & & & &"random": "A2dEx"& & & & & & & &},& & & & & & & &"body": '{"name": "user", "password": "123456"}'& & & & & &},& & & & & &"response": {& & & & & & & &"status_code": 201& & & & & &}& & & &}& &"""& &return self.substitute(testcase_template)  另外,如果算上用例的行数(731行),总的Python代码行数能达到1000行的样子。嗯,代码可以精简,但是单元测试覆盖率还是要保证的,不达到90%以上的单元测试覆盖率,真不好意思说自己做了开源项目啊。  那这不足300行的Python代码,实际实现了哪些功能呢?  对比下《接口的最佳工程实践(ApiTestEngine)》中规划的特性,已经实现了大半(前六项),至少已经算是一个有模有样的框架了。  ●支持API接口的多种请求方法,包括 GET/POST/HEAD/PUT/DELETE 等  ●与代码分离,测试用例维护方式简洁优雅,支持YAML/JSON  ●测试用例描述方式具有表现力,可采用简洁的方式描述输入参数和预期输出结果  ●接口测试用例具有可复用性,便于创建复杂测试场景  ●测试执行方式简单灵活,支持单接口调用测试、批量接口调用测试、定时任务执行测试  ●具有可扩展性,便于扩展实现Web平台化  ●测试结果统计报告简洁清晰,附带详尽日志,包括接口请求耗时、请求响应数据等  ●身兼多职,同时实现接口管理、接口自动化测试、接口(结合Locust)  ●后面剩下的特性还在实现的过程中,但是可以预见得到,最后框架本身总的Python代码行数也不会超过500行。  当然,单纯地比代码行数的确是没有什么意义,写得爽写得开心才是最重要的。  最后引用下Guido van Rossum的语录:  Life is short, go Pythonic!
搜索风云榜
51Testing官方微信
51Testing官方微博
测试知识全知道51CTO旗下网站
一个简单C#游戏程序制作
本文介绍了网上有很多C#游戏程序制作的教程,大多是讲针对大型网络游戏的,主要包含一些抓包、反汇编、C++的知识综合。事实也如此,常见的外挂都是使用VC++写的,从来没有过C#或者其他.NET语言编写的程序。
作者:dht8来源:| 09:11
在向大家详细介绍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 &&&&&&&&&} &&&&&&&&&#region&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)】
大家都在看猜你喜欢
头条头条头条头条头条
24H热文一周话题本月最赞
讲师:742305人学习过
讲师:172124人学习过
讲师:12217人学习过
精选博文论坛热帖下载排行
本书全面而详细地介绍了Linux操作系统。全书分为5个部分:第一部分着重说明Linux的起源及功能,如何规划和安装Linux主机;第二部分介绍Linu...
订阅51CTO邮刊当前位置:
&【求助】Linux/unix,可执行代码能否加密?内详!C程序高手请进!
【求助】Linux/unix,可执行代码能否加密?内详!C程序高手请进!
作者 wowowo2008
C语言运行的可执行代码能否加密?内详!
本人致力于程序开发,用C语言在Linux/unix上编译得到了可执行代码,想问这个代码能否设置加密,比如在源程序里面加上一些加密语句,使得可执行代码无法拷贝或者无论拷贝与否均有使用次数限制。另外,能否做到需要输密码的方式才能运行该源代码?并且在输入密码时在命令行看不到输入的密码具体数字?能做到吗?请高手们指点!非常感谢!
使得可执行代码无法拷贝或者无论拷贝与否均有使用次数限制
这条要解决了,你可以坐在那儿找世界各地软件厂商收钱了。
做到需要输密码的方式才能运行该源代码
运行“源代码”是什么概念?输密码很容易。
输入密码时在命令行看不到输入的密码具体数字
这个可以,不过要查unix手册。
总得来说,范围太大了,估计没人能帮...
你的编程水平和经验还远远不到该考虑这些问题的时候。
不过,俺可以给你提示一下。
(1)限制程序的运行有很多手段。
& && & 大量的商业软件都采用License(许可证)。也就是一个加了密的文件。程序启动后就找这个文件,看当前用户(硬盘、网卡、WatchDog等)、当前日期/时间、当前运行次数等是否满足许可证的设置。
& && & 或者,软件启动后随即通过网络查找服务器,从服务器寻找当前用户的许可信息。
& && & 当然,也可以通过一个硬件小设备,不过现在比较少用了。
(2)没必要限制用户拷贝程序可执行代码。无论是复制到什么地方,不能运行的话,复制了也没有用。
(3)输入密码,这个其实不让用户(和他身边的人)看到,是很容易的。不仅看不到输入的有哪些字符,连密码的长度、输入时击键的次数(用户永远敲10次键盘)都看不到。除了用户自己,谁也不知道密码就究竟是什么。
另外,用户如果总是敲那几个键的话,也容易被人家“看到”(例如,用荧光灯照键盘)。所以,输入密码时所敲的键,也应该经常变化,
感谢高手的指点
24小时热帖
下载小木虫APP
与700万科研达人随时交流}

我要回帖

更多关于 java小游戏程序代码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信