第 1 天|基于 AI 进行游戏开发:5 天创建一个农场游戏!

欢迎使用 AI 进行游戏开发! 在本系列中,我们将使用各种 AI 工具,在 5 天内创建一个功能完备的农场游戏。到本系列结束时,你将了解到如何将多种 AI 工具整合到游戏开发流程中。本系列文章将向你展示如何将 AI 工具用于:

  1. 美术风格
  2. 游戏设计
  3. 3D 素材
  4. 2D 素材
  5. 剧情

想要观看视频快速了解?请 点击这里 快速了解本文内容,如果你需要掌握更多技术细节,请继续阅读!

注意:本教程面向熟悉 Unity 开发和 C# 语言的读者。如果你不熟悉这些技术,我们建议你先了解一下 Unity 然后再继续阅读,本文的作者制作了一系列 Unity 初学者视频,如果你希望我们发布到 Hugging Face 账号,请在评论区留言告诉我们。

第 1 天:确立美术风格

游戏开发流程第一步是 确立美术风格。对于要创建的农场游戏,本文将使用 Stable Diffusion 工具来帮助其美术风格的确立。Stable Diffusion 是一种基于文本描述生成图像的开源模型。接下来会介绍如何使用该工具为农场游戏创建视觉美术风格。

Stable Diffusion 基本设置

运行 Stable Diffusion 有两种方案可选:本地或在线。如果你拥有一台配备良好 GPU 的台式机并想使用全功能工具库,那么更建议本地方案。除此之外,你还可以尝试在线方案,请继续阅读本文详细查看本地方案和线上方案:

本地方案

本文将使用 Automatic1111 WebUI 在本地运行 Stable Diffusion。这是比较流行的本地运行 Stable Diffusion 的方案,不过要成功将其设置运行起来,还需要一些技术知识。如果你使用 Windows 且具有 8GB 以上内存的 Nvidia GPU,请按以下指示执行。否则,请在 代码仓库 的 README 文件中查看其他平台的运行说明,更或者可以选择在线方案。

在 Windows 上安装

要求:具有 8 GB 以上内存的 Nvidia GPU。

  1. 安装 Python 3.10.6,安装时勾选 "Add Python to PATH"

  2. 安装 git

  3. 在命令提示符中输入以下内容来克隆所需仓库

    git clone http://github.com/AUTOMATIC1111/stable-diffusion-webui.git
    
  4. 下载 Stable Diffusion v1.5 checkpoint,并将其移动到仓库的 models 目录下

  5. 运行 webui-user.bat 来启动 WebUI

  6. 浏览器中访问 localhost://7860。如果一切正常,你将看到如下内容:

在线方案

如果你不具备本地运行 Stable Diffusion 的条件,或者偏好简易的解决方案,同样有多种在线运行方案供你选择。

? Hugging Face 提供的 Space 应用中包含众多免费在线方案,例如 Stable Diffusion 2.1 Demo 或 camemduru webui。你可以 查看更多在线服务,甚至可以使用 ? Diffusers 编写你专属的免费运行方案!你也可以查看简单的 代码示例 以快速上手。

注意: 本系列的部分内容将使用 image2image 等高级功能,有些在线服务未提供这些功能。

生成概念艺术图片

首先让我们生成一些概念图。只需几步,非常简单:

  1. 输入提示语

  2. 点击生成

但问题是,生成的图片是你真正想要的结果吗?如果不是,如何才能获得呢?这里要提醒你一下,输入提示语,本身就需要一些技巧。所以如果你生成的第一张图片非你所想也没关系,网络上有非常多神级资源可以帮助改善提示语。你可以查看 Reddit 上的帖子了解 书写指南,也可以 点击这里 查看我做的视频,带你 20 秒了解图片生成提示语的技巧!

上述书写技巧的共通之处是使用诸如 lexica.art 网站之类的图片库来查看其他创作者使用提示语在 Stable Diffusion 生成的内容范式,从中寻找与你期望风格相似的图片,从而获得书写提示语的灵感。实际上没有所谓的标准答案,不过在你使用 Stable Diffusion 1.5 生成概念艺术图片时,建议遵循以下温馨提示:

  • 使用描述词: 描述词会限制生成图片的形式,如 isometric, simple, solid shapes 等。这样生成图片的美术风格在游戏中会更容易重现。
  • 使用同义关键词: 一些关键词 (如 low poly) 虽然契合主题,但生成的图片质量通常较低。尝试找到它们的同义词,替换以保证生成质量。
  • 使用指定艺术家的名字: 这种方式可以有效地引导模型采用指定艺术家的绘画风格,从而生成更高质量的图片。

我输入这样的提示语: isometric render of a farm by a river, simple, solid shapes, james gilleard, atey ghailan 生成图片如下:

使用 Unity 重现概念艺术

接下来,如何使用生成的概念艺术图片来制作游戏?本文将使用流行游戏引擎 Unity 来使游戏鲜活起来。

  1. 使用带有通用渲染管道的 Unity 2021.9.3f1 创建一个 Unity 项目。

  2. 使用基本形状绘制场景草图。例如,要添加一个立方体形状,右键单击 -> 3D对象 (3D Object) -> 立方体 (Cube)

  3. 设置材质: 可以参考前面生成的概念艺术图片对各部分进行设置。这里选用 Unity 内置的基本材质

  4. 设置光照: 这里使用暖调自然光 (#FFE08C,强度 1.25) 和柔和环境光 (#B3AF91)

  5. 设置摄像机: 这里使用 正交投影 来匹配概念艺术图片的投影形式

  6. 设置水着色器: 可以给游戏场景增加一些水流,这里使用 Unity 资源商店中的程式化水着色器

  7. 最后,设置后处理效果: 这里使用 ACES 色调映射和 +0.2 曝光

至此,一个简单上手而引人入胜的游戏场景,不到一天就创建完成了!如果你有任何问题,或者想跃跃欲试参与后续内容?现在来 加入我们的 Discord 频道 与我们交流吧!

在下一篇文章中,我们将 使用 AI 进行游戏设计,敬请关注我们获得后续更新!

英文原文:http://huggingface.co/blog/ml-for-games-1

译者:SuSung-boy (苏桑),经常倒腾图像的工业视觉算法工程师。

本文转载于网络 如有侵权请联系删除

相关文章

  • 贴片机保养步骤 保养项目 保养的目的与作用

    大家好,又见面了,我是你们的朋友全栈君。贴片机是一种高强度、长时间、超负荷的运转设备,需要定期进行细心的呵护保养,贴片机保养的好,运转稳定,保证日常生产产能,贴片机如衣食父母;贴片机保养不到位或经常不保养,性能再好的机子也会不堪重负出现各类毛病,影响生产产能和产品质量,因此贴片机保养是贴片厂非常重要的一环工作内容事项。(延伸阅读:何为SMT?smt是做什么的,smt贴片是什么意思?)贴片机日保用干净白布清洁机器表面灰尘,包含机身、显示器、键盘、鼠标、开关等; 检测气压正常值; 检查机器内部各装置是否正常; 用吸尘器清洁机器里散落的元件; 日保注意事项清理元件不能用风枪吹,以免元件落到机器内部,造成电路故障 保养需在停机状态下进行; 贴片机周保板子传送带清理打扫; 线性照相机清扫,用无尘纸清扫线性照相机的玻璃罩及透镜玻璃罩; 用白布条将XY线性导轨擦干净并重新加上薄薄层印工黄油; 用白布条将传送部气缸、皮带、滑块、宽度调整丝插,擦干净并在档块、滑轮上加少量1#机油,在宽度调整丝插上加少量层印工黄油; 吸嘴座清扫,用棉签及酒精清扫吸嘴座的吸嘴缓冲用弹簧; 周保注意事项 1、注意保养过程中所

  • 大企业要求高,小企业没钱赚?看销帮帮如何破局

    来源/ToB行业头条X钉钉开放平台联合出品 采访对象/销帮帮创始人兼CEO戴宏伟 采访者/不断壮大创始人王壮·整理/毕竟 2015年SaaS赛道进入爆发期,历经8年,中国SaaS行业无论从市场规模、产品理念还是服务都迈上了一个新的台阶。 作为SaaS生态平台的领航者,钉钉生态里成长出一批头部SaaS企业,其中绝大部分都获得了资本青睐。 本次「钉钉开放平台」联合「ToB行业头条」推出「ToB掘金者」栏目,每周通过专访一位SaaS公司创始人,揭秘ToB增长的底层逻辑。最近,戴宏伟时刻关注着公司3款酷应用的开发进度。 酷应用是今年钉钉发布的一种全新的应用形态。不同于传统的ToB应用,酷应用可以让用户在钉钉群中直接调起应用组件,无需下载安装,也无需跳转到别的界面。这让戴宏伟非常兴奋,作为销帮帮创始人兼CEO,他觉得酷应用正好可以解决销售协同打单、账款核销等实际工作问题。“就拿账款核销来说,其实我很早就意识到了这个业务场景问题,苦于没有好的解决方式,现在好了,通过酷应用可以完美解决。”戴宏伟注意到,由于财务和业务是分开的,所以一笔款到了之后,财务并不知道这笔款属于哪个销售,需要到处去问,去

  • 团队分享,Bem规范调研及实践

    本文GitHubhttps://github.com/qq449245884/xiaozhi已收录,有一线大厂面试完整考点、资料以及我的系列文章。背景最近老大在维护别人的代码时,发现我们团队写的样式各有种的想法及风格,这在后续维护会增加一定的难度,所以老大决定统一样式的会名规范,所以就安排我去调研及实践,下面是我调研的结果。什么是BEM命名规范BEM由Yandex团队提出的一种前端CSS命名方法论。BEM是BlockElementModifier的缩写,其中B表示块(block)、E表示元素(element)、M表示修饰符(modifier)。这三个部分通常使用__与--连接。即:.块__元素--修饰符{}Block:代表了一个独立的块级元素,可以理解为功能组件块。一个Block就是一个独立的区块,比如头部是个block,表单功能输入框是一个block,block可大可小。Element:是Block的一部分不能独立来使用的,所有的Element都是与Block紧密关联的。例如一个带有icon的输入框,那么这个icon就是这个输入框Block的一个Element,脱离了输入框的Bloc

  • 金融行业核心系统如何进行分布式改造?

    海量数据爆发,创新业务飞速发展,当前金融行业正处在巨大的IT架构变革与紧迫的数字化转型时期,银行、保险等金融机构面临着诸多问题,业务架构如何调整,是集中式,还是分布式?异构系统如何管理?底层数据库该如何选型?日前,ITPUB联合腾讯云组织了一场小型交流会,邀请了腾讯云数据库高级架构师田清波、微众银行数据库平台负责人胡盼盼、光大银行数据中台团队负责人王磊及众多银行专家一起探讨交流,寻找答案。1业务系统分布式改造田清波介绍,在技术架构层面,目前国内大多数银行主要以国外厂商提供的大型主机和数据库解决方案来进行系统构建。而以国外大型主机和数据库为核心的传统集中式架构已无法满足日益增长的大规模交易和数据处理的需求。,可以通过去弹性支撑此类相较之下:传统的集中式架构一方面,性能无法满足业务爆发式增长的处理需求,存在系统过载风险。另一方面,价格比较昂贵,维护成本居高不下。腾讯云数据库高级架构师田清波此外,以手机银行、网上理财、互联网保险等为代表的金融业务创新快速发展,推动新技术正以前所未有的速度与力度发生深层次变革。技术发展,对金融服务模式带来重大影响,金融行业向数字化、分布式架构转型成为必然。“金

  • 啥?选择排序还能这样写,太强!

    1.1算法步骤首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。重复第二步,直到所有元素均排序完毕。1.2这种性能差有一部分球友提交了下面这个版本,此代码中虽然也没有太大问题,但是循环中只要找到小的就交换一次,增加了内存占用。实际应该为在单次循环时不进行位置交换,而是单次循环后再进行位置交换defselect_fun(list1): n=len(list1) foriinrange(n-1):#开启循环,只需要循环n-1次即可, #假设第i个值为最小值,min_value=list1[i] forjinrange(i+1,n):#j输入i后面的数字 iflist1[j]<list1[i]:#如果发现后面存在比最小值档还小的数 list1[i],list1[j]=list1[j],list1[i]#交换顺序 returnlist1 if__name__=='__main__': list2=[3,5,6,1,2] print(select_fun(list2)) "

  • Linux系统之进程状态

    一、进程状态D:uninterruptiblesleep(usuallyIO)R:runningorrunnable(onrunqueue)S:interruptiblesleep(waitingforaneventtocomplete)T:stoppedbyjobcontrolsignalt:stoppedbydebuggerduringthetracingW:paging(notvalidsincethe2.6.xxkernel)X:dead(shouldneverbeseen)Z:defunct("zombie")process,terminatedbutnot-reapedbyitsparent1、R(TASK_RUNNING),可执行状态只有在该状态的进程才可能在CPU上运行。而同一时刻可能有多个进程处于可执行状态,这些进程的task_struct结构(进程控制块)被放入对应CPU的可执行队列中(一个进程最多只能出现在一个CPU的可执行队列中)。进而,进程调度器就从各个CPU的可执行队列中分别选择一个进程在该CPU上运行。很多操作系统教科书将正在CPU上执

  • 利用s3fs 将 s3 bucket 挂

    S3fs是基于FUSE的文件系统,允许Linux和MacOsX挂载S3的存储桶在本地文件系统,S3fs能够保持对象原来的格式。关于s3fs-fuse的功能、使用方法、下载可参考:https://github.com/s3fs-fuse/s3fs-fuse 1、本文主要介绍将s3的bucket挂载到Linux的目录上,当做本地磁盘使用。所以首先要创建s3的bucket,例: 2、将s3bucket挂载到本地目录时需要有访问s3bucket的权限,所以接下来需要准备IAM用户的访问密钥ID和访问密钥。注意:在点击“创建访问密钥”按钮后系统会创建“密钥ID”及“密钥”(私钥),但该“密钥”只会在创建时显示一次,以后再也无法复现,所以这也是下载或保存密钥唯一的一次机会。如下图所示: 3、将密钥ID及密钥保存成一个密钥文件,文件格式必须是: IAM用户访问密钥ID:IAM用户访问密钥而且该文件权限必须为600如下图所示: 4、按下来安装s3fs-fuse:1)下载、编译、安装yuminstallautomakefusefuse-develgcc-c++gitlibcurl-devellibxm

  • OC中的nil、Nil、NULL、NSNull的区别

    nil nil是指一个不存在的OC实例对象指针,指的是OC实例对象指针的空值,也就是OC实例对象的空指针。 NSObject*object=nil; NSString*str=nil; NSURL*url=nil; idobject=nil;复制NilNil是指一个不存在的OC类对象指针,指的是OC类对象指针的空值,也就是OC类对象的空指针。不过由于大部分代码中不需要引用Class类型的变量,所以Nil并不常用。 ClassClass1=Nil; ClsssClass2=[NSURLclass];复制NULLNULL指的是C语言中指针的空值,也就是说,对OC中的非对象指针赋空值。int*intA=NULL; char*charC=NULL; structstructStr=NULL;复制NSNullNSNull是一个类对象,它是用来表示空值对象的类。NSNull有一个+(NSNull*)null;的单例方法。 我们知道,在集合(NSArray、NSDictionary、NSSet)中是不可以存储nil值的,但是如果我们有存储空值的需求的话,可以使用NSNull来代替nil。 在NSAr

  • 洛谷P4492 [HAOI2018]苹果树(组合数)

    题意题目链接Sol有点自闭,。我好像对组合数一窍不通(~~~~)Orzshadowice//luogu-judger-enable-o2 #include<bits/stdc++.h> #defineLLlonglong intmod; template<typenameA,typenameB>inlineboolchmax(A&x,By){returnx<y?x=y,1:0;} template<typenameA,typenameB>inlineboolchmin(A&x,By){returnx>y?x=y,1:0;} template<typenameA,typenameB>inlineLLadd(Ax,By){if(x+y<0)returnx+y+mod;returnx+y>=mod?x+y-mod:x+y;} template<typenameA,typenameB>inlinevoidadd2(A&x,By){if(x+y<0)x=x+y+mod;elsex=(

  • 搜索课程脑图:快速找到你要的人脉、资源、信息资料

    这是搜索课程的笔记内容,主要包括了信息搜索、资源搜索、人脉搜索、信息分类整理四个部分内容,每个内容都包括基本的搜索心法、搜索逻辑、具体的搜索技巧和工具,方便快速找到适合的方法,搜索到想要的信息,具体的课程内容:搜索教程目录一、信息搜索脑图:二、资源搜索脑图三、人脉搜索脑图四、资料分类整理方法脑图嗯,以上只是脑图内容,具体内容还请学习视频课程,更加详细具体欢迎关注我的微信公众号:全栈全网营销

  • 搜索市场少了云云,多了微博,变数更大

    有媒体近日报道了云云被新浪收购的消息:传闻中创始人刘骏已到百度任职,其他创始成员已纷纷套现离开。此前,云云融资后已经有过第一波创始成员离职。在豪华的Google班底支撑下,云云一直游走于搜索市场玩家之间,热点事件时它的身影总是若隐若现。在这一年获得的关注远远高过其市场位置。社交搜索不是救命稻草,更不是创业公司的云云产品定位传统网页搜索+轻博客系统+社会化问答+微博搜索,什么热做什么,过于繁杂。不过究其背后的核心逻辑则是社会化搜索,这也是Google、百度、360和搜狗等搜索玩家并未涉及的新领域。在Facebook今年初推出GraphSearch后,社交搜索获得更大关注。部分业内人士认为社交搜索或将颠覆传统网页搜索。客观理论和主观感觉上,好朋友的推荐会比搜索引擎的推荐更加精准。但用户习惯并非并非一朝一夕积累起来的,改变起来并不容易。市场并未证明社交搜索的优势。GraphSearch概莫能外,推出2个多季度来用户接受程度并不高。“住在旧金山的朋友最爱去的餐馆”“住在芝加哥密歇根大道附近、年龄25岁以下的单身姑娘”之类的搜索方式并不简单,需要输入长句式,还得用一定的逻辑和组合技巧。Graph

  • 《神经网络》中文字幕版(2.3 感知器的几何空间 &2.4 感知器的原理透析)

    《NeutralNetworkforMachineLearning》(机器学习中的神经网络)系列课程,是深度学习大神GeoffreyHinton毕生所学之作,也是他目前唯一一门的公开课。 Hinton何许人?之前介绍过,他是深度学习的开山祖师,三大巨头(另2位巨头是YannLeCun和YoshuaBengio,其中YannLeCun是Facebook的人工智能研究总监,CNN(卷积神经网络)之父,同时也是Hinton的学生!)。金庸小说里常见的桥段是,主角偶然的机会,得到了某位武学大师的秘籍,功力大(kai)增(gua)而成就伟业,张无忌的九阳神功、令狐冲的独孤九剑、虚竹的天山六阳掌、郭靖的降龙十八掌等等......也许你很高傲,但面对这位祖师的毕生所学之作,我也要恭喜点进来的你,因为这份视频教程推出了中文字幕(翻译的是雷锋网旗下的公众号AI研习社,公众号:okweiwu,二维码见文末),更重要的是,这份中文字幕版,得到了Hinton神的亲自授权!往期课程:1.1为什么要学习机器学习&1.2神经网络机制中的脑科学原理1.3简单的神经元模型&1.4ANN的MNIST学习范

  • 程序员浑浑噩噩的生活百态,旁人看了都心疼

    程序员靠出卖为生;吃青春饭,人老珠黄肯定混不下去;越高级收入越高,当然中间人的抽头会更高;生活没有规律;以夜生活为主,如果需要,凌晨也要加班;名声越大,越容易受到青睐;必须尽最大可能满足客户各种各样非正常的需求;鼓励创新精神;喜欢扎堆,程序员集中的地方称为软件园;流动性较大,正常情况下没有工会;工作时精神高度集中,最怕外界干扰。没有考虑清楚总是对细节吹毛求疵,完美按照产品经理的思维修改又说不符合标准,直接说还是原来的好,对于这种存心找事的不管三七二十一直接亮刀,看谁厉害!程序员开始懵逼的生活与产品经理,策划互怼后想跳楼的节奏?编写代码忙到晕过去,任谁都叫不醒,除非产品经理告诉我不改需求了。产品经理与程序员的相处模式:就算你(产品)拿着鸡毛掸子追我,我仍然笑对苍天:你就是打死我,我也不改这个Bug! 一个苦B程序员去面试,面试官问:“你毕业才两年,这三年工作经验是怎么来的?!”程序员答:“加班。”两个程序员,一个技术精湛,思维严谨,认真负责,Bug极少,至今单身;一个技术一般,吊儿郎当,Bug一堆,经常被测试MM叫到她旁边,接受批评;后来成了她男朋友……这不是测试员与程序员的经典爱情吗?

  • 从软件到硬件,谷歌在物联网领域做了什么?

    物联网一直被认为是继计算机和移动互联网之后颠覆人们生活的第三次革命。根据今年秋天外国数据研究机构BIIntelligence发布的一份报告预测,到2020年,全球通过物联网链接的设备总数将达到240亿台,占到全球总体联网设备数的70%。在今后的5年中,全球物联网解决方案的总开支预计将达到6万亿美元。面对如此庞大的市场,作为互联网时代的科技巨头之一,谷歌自然不会视而不见。实际上,从2011年开始,谷歌在物联网方面的布局就首次进入了人们的视野。软件:系统+通讯2011年5月,在当年的GoogleI/O大会上,谷歌首次提出了Android@Home智能家居计划。通过Android@Home,用户在一部安卓手机或平板上就能控制家中的电灯、空调、音响播放器等一系列的智能家居产品。在技术实现上,Android@Home采用了基于IEEE802.15.4标准的ZigBee技术,其传输特点就是低功耗、低成本和低延迟。同时,谷歌还在安卓操作系统的底层开放了针对家电控制的专用API接口,符合规范的家电通过ZigBee技术与手机建立好物理连接,安卓应用程序就能通过专用的API实现对这些家电的一系列智能化控制

  • Github 项目推荐 | TensorFlow 概率推理工具集 —— probability

    Probability是TensorFlow的概率推理工具集,它是集建模工具、推理算法、一些有用的模型和一般统计计算于一身的开发工具集合。利用TensorFlow,Probability可以将概率方法和深度网络、通过自动差分的基于梯度的推论、大数据集、通过硬件(比如GPU)加速的模型和分布式计算结合起来。该软件的主要内容包括以下几个部分:采样算法,例如,tfp.metropolis_hastings,tfp.hmc,tfp.monte_carlo。示例模型(tfp.examples):使用此包和tf.contrib.distributions中的工具在TensorFlow中实现常见概率模型。该库中的接口可能随时会更改。Github地址:https://github.com/tensorflow/probability安装:安装Probability最简单的方法是用pip:pipinstall--upgradetensorflow-probability#forPython2.7 pip3install--upgradetensorflow-probability#forPython3.

  • QEMU调试Linux内核环境搭建

    一个最小可运行Linux操作系统需要内核镜像bzImage和rootfs,本文整理了其制作、安装过程,调试命令,以及如何添加共享磁盘。编译内核源码从TheLinuxKernelArchives网站下载内核源码,本文下载的版本为4.14.191,4.14.191源码下载。使用wget获取源码。wgethttps://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.14.191.tar.gz解压源码:tar-xvflinux-4.14.191.tar.gz解压后进入源码根目录linux-4.14.191,指定编译的架构,依次执行下面的命令,打开配置菜单。1cdlinux-4.14.191 2 3exportARCH=x86 4 5makex86_64_defconfig 6 7makemenuconfig复制在配置菜单中,启用内核debug,关闭地址随机化,不然断点处无法停止。1Kernelhacking---> 2[*]Kerneldebugging 3Compile-timechecksandcompileroption

  • 腾讯云物联网智能视频服务(行业版)返回结果调用方式

    注意:目前只要请求被服务端正常处理了,响应的HTTP状态码均为200。例如返回的消息体里的错误码是签名失败,但HTTP状态码是200,而不是401。 正确返回结果以云服务器的接口查看实例状态列表(DescribeInstancesStatus)2017-03-12版本为例,若调用成功,其可能的返回如下为:{ "Response":{ "TotalCount":0, "InstanceStatusSet":[], "RequestId":"b5b41468-520d-4192-b42f-595cc34b6c1c" } }复制 Response及其内部的RequestId是固定的字段,无论请求成功与否,只要API处理了,则必定会返回。 RequestId用于一个API请求的唯一标识,如果API出现异常,可以联系我们,并提供该ID来解决问题。 除了固定的字段外,其余均为具体接口定义的字段,不同的接口所返回的字段参见接口文档中的定义。此例中的TotalCount和InstanceStatus

  • C#编写window服务,一步一步(1)

    Window服务是啥,这里就不废话了,如何用在哪里用也不废话了,这里我这篇文章只是详述了我在vs2012中创建window服务的经过,希望对你有所帮助。 另外:我在编写服务过程中参考了ProfessionalC#2012and  .NET4.5   第一步,创建一个解决方案名称MonitoringFish   不废话,你肯定会,会的直接去下一步。如果真的不会请继续看    第二步添加服务用的类库项目Sensor    并添加类文件QuoteException.cs和SensorFish.cs   这两个类的功能并不重要,主要是给服务类用的,你也可以写自己的类文件,或者干脆不要,直接在服务类里边写逻辑代码   QuoteException.cs代码如下:    1usingSystem; 2usingSystem.Collections.Generic; 3usingSystem.Linq; 4usingSystem.Text; 5 6namespaceSensor 7{ 8///<summary> 9///自定

  • 第二章学习小结

    在这一章的学习中,我学习到了多种链表结构,会初步对各种应用场景进行分析,确定哪一个链表结构最适合当前的应用。在几次小组讨论中,我和组员们相互协作,讨论什么写法最简便,促进了大家的知识增长,虽然这些讨论有些难度,但是小组让这些问题逐一解决,这就是合作的力量。在以后我希望会有更多的合作机会,锻炼自己。

  • 案例 :表格隔行变色效果

      当鼠标落在表格某一行行,某一行变粉色当离开恢复原色 <!DOCTYPEhtml> <htmllang="en"> <head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width,initial-scale=1.0"> <title>Document</title> <style> table{ width:800px; margin:100px; text-align:center; border-collapse:collapse; font-size:14px; } theadtr{ height:20px; background-attachment:skyblue; } tbodytr{ height:30px; } tbodytd{ border-bottom:1px; font-size:12px; color:blue; } .bg{ background-colo

  • Codeforces123E. Maze【树形dp】【概率dp】【证明题】

    LINK 题目大意 一棵树,上面的每个点都有一定概率成为起点和终点 从起点出发,随机游走,并按照下列规则统计count: DFS(x) ifx==exitvertexthen finishsearch flag[x]<-TRUE randomshufflethevertices'orderinV(x)//hereallpermutationshaveequalprobabilitytobechosen fori<-1tolength[V]do ifflag[V[i]]=FALSEthen count++; DFS(y); count++; 复制 求count的期望 思路 首先来证明一个东西: 对于每个节点u,如果这个节点是终点,那么他的贡献是 \[\sum_{(u,v)\inE}siz_v*sump_v \]\(sump_v\)是子树内每个节点作为起始节点的概率和 首先我们把一个以u为根子树拿出来,对于其中的每一个点v 如果起始节点s在v的子树内,v一定会被经过1次,贡献\(p_s\) 如果s不在v的子树内,v有\(\frac{1}{2}\)的概率会被经过,贡献\(p

相关推荐

推荐阅读