受朋友委托,然后跟另一个朋友一起开发的,
一起开发的这个,之前 2 年没联系,
结果 ........
看完我一句也不想说
又被顶上来了
我只是吐槽+问问 V2 各位怎么解决这种情况,绝无任何秀优越
如觉不适,请立即关掉此贴
1 tomine 2015-08-19 16:58:04 +08:00 把你自己的代码贴上来看看 |
![]() | 2 NovemberEleven 2015-08-19 16:59:37 +08:00 期待我就是那个朋友系列 |
3 cqcn1991 2015-08-19 17:00:10 +08:00 via iPhone 这个 if else 还能怎么写?不是挺正常么… |
![]() | 4 TakanashiAzusa 2015-08-19 17:01:37 +08:00 @cqcn1991 这里不应该是 switch case 么。。 |
5 Banio 2015-08-19 17:01:43 +08:00 是想说 if ( 1 == i ) 这样写才合理么? |
![]() | 6 TakanashiAzusa 2015-08-19 17:01:50 +08:00 其实我比较好奇为什么是“朋友”提交的代码。。 |
![]() | 7 harry890829 2015-08-19 17:08:07 +08:00 switch case 和 if...else if 不就是写法上不一样么,还有什么不同么 |
![]() | 8 JamesRuan 2015-08-19 17:09:00 +08:00 ![]() 典型的数据和逻辑分离有问题的设计。 |
![]() | 9 qinglangee 2015-08-19 17:09:46 +08:00 我一直觉得会开发外挂的人都很牛 X |
10 cqcn1991 2015-08-19 17:11:13 +08:00 via iPhone @TakanashiAzusa 可以,但是我觉得只是语言风格,并不算 code smell. |
![]() | 11 zhicheng 2015-08-19 17:15:20 +08:00 命名 OK ,缩进 OK ,代码风格 OK ,注释 OK 。唯一的缺点只有 magic number 。但不是正规则大项目也无所谓。 在我看来,这些代码段几乎是 perfect 了。 |
![]() | 12 其实应该把这么多数据放在合理的数据结构里,否则以后改到哭 |
![]() | 13 akira 2015-08-19 17:16:45 +08:00 图像识别的时候,不要严格依赖颜色,这个颜色在不同电脑上是有可能不一样的。。 |
![]() | 14 LuoboTixS 2015-08-19 17:22:57 +08:00 槽点是在 hardcode 像素位置吗? |
![]() | 15 tiange 2015-08-19 17:25:21 +08:00 简单明了 |
16 jianghu52 2015-08-19 17:25:47 +08:00 有缩进,命名正常,注释不少。还要啥自行车。 |
![]() | 17 fo2w 2015-08-19 17:28:29 +08:00 |
![]() | 19 blacktulip 2015-08-19 17:48:35 +08:00 居然有注释,这已经是很给面子了,楼主还想要怎么样的代码? |
![]() | 20 moe3000 2015-08-19 17:53:33 +08:00 |
![]() | 21 zyc841584303 2015-08-19 17:58:11 +08:00 ![]() 第一眼给我的感觉还可以 楼主 你是没见过更烂的.... |
![]() | 22 ljcarsenal 2015-08-19 18:07:15 +08:00 这是 c#么??写什么外挂的 |
![]() | 23 iyangyuan 2015-08-19 18:09:15 +08:00 via iPhone 如果是*两个月做淘宝系列*,这样已经很不错了 |
24 salmon5 2015-08-19 18:49:13 +08:00 ![]() https://ooo.0o0.ooo 存图片的域名略叼 |
![]() | 25 codeyung 2015-08-19 19:04:53 +08:00 包正 我可是仔细看完了的 算规范了 |
![]() | 26 kn007 2015-08-19 19:27:05 +08:00 不要要求太高了。 |
27 Bardon 2015-08-19 19:30:06 +08:00 期待 我就是那个提交代码的 人系列 |
![]() | 28 Tink PRO 我也感觉挺好 |
![]() | 29 yoa1q7y 2015-08-19 19:50:44 +08:00 还行啊,要啥自行车 |
![]() | 30 kouch 2015-08-19 19:50:53 +08:00 然而你还是上来和大家说了好多句... |
![]() | 31 x86 2015-08-19 19:53:39 +08:00 可以确定关系搞基了 |
![]() | 32 Bryan0Z 2015-08-19 19:58:37 +08:00 via Android 一直当 Java 代码看,看到 bool 才发现是 C# |
![]() | 34 m1a0 2015-08-19 20:06:51 +08:00 只看出, 方法命名有 3 种风格, 变量命名也有好几种风格, 感觉是拼凑起来的代码。 |
![]() | 35 zmj1316 2015-08-19 20:16:37 +08:00 看到 LZ 吐槽我也顺便晒一个大学时候的队友吧: 前序:因为那时候上课要写大作业必须组队,我就捡了一个队友回来,平时都联系不到,上课也一直不来,期末的设计也不难,本来我就打算一个人快点解决了,结果他死缠烂打要贡献一下,我就随手给了一个功能给他,结果催了好久过了两周快到 ddl 了用 QQ 传给我了。 我也没怎么想就把文件加进去了,结果一片红啊,我定睛一看,其中一个错误让我直接把文件删了,真的想砸键盘: 高潮: class Class { ... } ... fun (){ Class class; class.f (); } 还有这货居然把 private 都拼错了,后面的代码我实在没勇气看下去了。 所以啊,以后大家遇到那些 911/285 出来的坑货也不要太激动,总会有这么几个人的 T T 。 PS.这人还用的是 VS 23333333 |
36 tolbkni 2015-08-19 21:06:48 +08:00 还要啥自行车,我真心觉得编程素颜不错了 |
37 aholic 2015-08-19 21:19:10 +08:00 还有注释! |
![]() | 38 realpg PRO 我觉得如果这是一个临时合作的队友,这质量已经远远好于预期了 还有这么多注释 |
![]() | 39 jin5354 2015-08-19 21:46:51 +08:00 就看在这么多注释的份上很不容易了 |
![]() | 40 iamppz 2015-08-19 21:48:23 +08:00 能看懂就可以。。 动辄上万行的 js 真是让人痛不欲生 |
41 phx13ye 2015-08-19 22:16:15 +08:00 这么多 ifelse 这不应该用字典,哈希,映射,对象吗? 装逼一点就应该上那啥设计模式了, state ? |
42 WispZhan 2015-08-19 22:22:12 +08:00 我很好奇,楼主,你把这段代码的算法重构一次,贴上来 让我们来评评。总的来说,已经可以了,起码该有的都有。 评论总要有个对比 |
![]() | 43 yylzcom 2015-08-19 22:26:45 +08:00 |
![]() | 44 tnx2014 2015-08-19 23:03:51 +08:00 楼主大概被各位吓到了,所以一个字也说不出来。 |
45 publicID001 2015-08-19 23:10:45 +08:00 @iamppz 我们随便一个 Project 纯 CSS 就几万行 |
![]() | 46 special 2015-08-19 23:11:07 +08:00 buxue 这个函数最直接最能意会了... 英文不好,对于补血这个我也不好取函数名.. |
![]() | 47 panlilu 2015-08-19 23:14:55 +08:00 看代码我猜是梦幻西游(或者之类游戏)的挂机外挂。。 |
![]() | 48 Sn0wM4n 2015-08-19 23:18:32 +08:00 @NovemberEleven 哈哈,同期待朋友快出现~ |
![]() | 49 kohnv 2015-08-19 23:19:18 +08:00 这么多数字以后要改死 |
![]() | 50 evlos 2015-08-19 23:19:57 +08:00 via iPhone 那么多注释,代码整齐,缩进都有弄好,其实还好吧 |
![]() | 51 muzuiget 2015-08-19 23:36:26 +08:00 看上去写外挂,感觉还 OK ,反正这种一次性的东西,怎么快怎么来。 |
![]() | 52 an168bang521 2015-08-19 23:41:57 +08:00 代码整齐,有注释,一眼扫过能理解; 而且代码思路比较明确;唯一不好的就是耦合度比较高,但是有这么详细的注释;还要啥自行车啊! 是一名体贴的队友啊! |
![]() | 53 husinhu 2015-08-19 23:45:15 +08:00 能找到一起写 demo 功能的同伴就不错了,还挑三拣四 |
54 dbas 2015-08-19 23:54:32 +08:00 这代码,可以了,水平也不差,要是写出来大多数看不懂才是问题 不要以为写什么类,或抽象了就好。 |
55 BlueSky002 2015-08-20 00:07:07 +08:00 请收下我的膝盖 |
56 aprikyblue OP @dbas public static int IfVerify () { Bitmap a = Piccolor.GetWindow (hwnd ); if (ColorTranslator.ToWin32 (a.GetPixel (347, 219 )) == 16776960 && ColorTranslator.ToWin32 (a.GetPixel (516, 411 )) == 3407871 ) { int key =ColorTranslator.ToWin32 (a.GetPixel (418, 305 )) + ColorTranslator.ToWin32 (a.GetPixel (418, 326 )) + ColorTranslator.ToWin32 (a.GetPixel (529, 305 )) + ColorTranslator.ToWin32 (a.GetPixel (529, 326 )) + ColorTranslator.ToWin32 (a.GetPixel (654, 305 )) + ColorTranslator.ToWin32 (a.GetPixel (654, 326 )) + ColorTranslator.ToWin32 (a.GetPixel (793, 305 )) + ColorTranslator.ToWin32 (a.GetPixel (793, 326 )); if (ConfigManager.hashTable.ContainsKey (key )) { a.Dispose (); switch (ConfigManager.hashTable[key].ToString ()) { case "1": Common.Click (418, 305 ); break; case "2": Common.Click (529, 305 ); break; case "3": Common.Click (654, 305 ); break; case "4": Common.Click (793, 305 ); break; } return 1; } else { string path = "C:/" + key + ".jpg"; a.Save (path ); Common.SendFile (path ); a.Dispose (); return 2; } } a.Dispose (); return -1; } 以此段为例: Dispose.调的满天飞。。 RGB 直接加起来做 key.. hashTable[key]取出来不进行类型转换,直接调了继承自 objcet 的 ToString ()。。。 临时文件直接写到 C 盘根。。 先不说类。。这么干没问题? |
![]() | 57 theoractice 2015-08-20 01:14:15 +08:00 要是写外挂的就别吐槽这个了,每次游戏更新之后要重写的不是一点点,在这个领域里谈什么代码质量没有太大意义。 LZ 没有思想准备的话别弄了,你估计做不下去的。 |
58 aprikyblue OP @theoractice 其实之前干过一次,就是随便写快速开发。。最后恶心的不成样子, bug 八千八,无奈放弃维护 这次受委托,于是全部重写== 没打算盈利,纯粹是因为朋友委托的 关系多年很好 这游戏更新不是很大,(也没啥修改数据来的作弊功能,最主要是挂机。。一般就是出什么新内容再扩展下功能 然而 异常都不管,也不检查啥,遇到 N 次 蹦空引用异常直接挂。。。 还有逻辑错误,甚至不测试就给你扔 git 上。。感觉一直跟后边给擦屁股 |
![]() | 59 msg7086 2015-08-20 05:43:48 +08:00 和我写的山口山外挂的代码几乎如出一辙。 |
![]() | 60 master13 2015-08-20 08:20:55 +08:00 Go faster, go alone. Go further, go together. |
![]() | 61 hdbean 2015-08-20 09:20:52 +08:00 我就是那个朋友 |
62 soundofu 2015-08-20 09:22:02 +08:00 @fo2w 似乎这种写法与 for 写法的唯一区别就是: for 是(执行)时间(更慢)换(程序)空间(更大),然而可以通过调整优化器优化等级来实现某些代码在编译阶段展开,所以并没有什么(卵)区别... 本人做嵌入式设备开发的,执行效率和存储空间都要考虑 |
![]() | 63 XuanYuan 2015-08-20 09:34:55 +08:00 @blacktulip 你是 DRLer 么? |
![]() | 64 visonme 2015-08-20 09:36:28 +08:00 我代码命令格式一般也有两种方式(下划线 和 驼峰) 所以不少人看我代码也误解是不是两个人。 |
![]() | 65 hfli 2015-08-20 09:44:37 +08:00 这种代码,自己还能写下去啊? 单单那个 if else 就受不了了; 那么多 magic number , 出了问题,怎么去调试?写的时候获取清楚,写完了再去 review ,自己都看不懂了。 |
![]() | 66 fwings260 2015-08-20 09:52:37 +08:00 楼主太年轻。。。没见过更烂的而已。。。。 |
![]() | 68 init 2015-08-20 09:56:47 +08:00 你们怎么看出来是外挂的?? |
![]() | 69 Phariel 2015-08-20 10:04:56 +08:00 via Android 我觉得这已经非常不错了啊楼主 所谓的大公司正统赚钱业务的核心代码比这个要屎的多你敢信? |
70 mzer0 2015-08-20 10:06:19 +08:00 代码质量是一个信仰问题. 在有些人看来, 不使用 smart pointer 而直接使用原生指针, 本身就令人无法忍受, 但编程语言支持 GC 所以并不太重要. 另外一点是, if 嵌套 if 也可能作为令人无法忍受的理由, ----干嘛你不用个 struct 呢? 这可是 C 语言基本功. magic number 也是一个信仰问题, 事实证明, 在那种只会使用同一个 magic number 一次或两次的场合中, magic number 比编译器常量更好用......一味想着代码的重复利用, 最后只会创造出一堆看起来能用很多次但实际上只用了一次的代码. 另外是一些大家没注意到的效率问题, 例如, 应避免 ... + ... + ..., 取而代之的是... += ... += ..., 但是编程语言本身支持 move 语义, 所以这个效率问题又不复存在了. 因此我认为, 唯一值得黑的地方, 仅仅在于: 没有使用结构体进行因果优化. 但如果 @aprikyblue 也没注意到这个问题, 那可能是他也不会做因果优化, 所以最后的结论是: 这仅仅只是个信仰问题, 你写的代码不一定比别人好到哪儿去... |
![]() | 72 radicalshu 2015-08-20 10:13:28 +08:00 感觉好像 coc 的外挂 |
73 Rosay 2015-08-20 10:15:27 +08:00 怎么看出是外挂的? |
![]() | 74 sniperhgy 2015-08-20 10:22:19 +08:00 @Rosay BUXUE = 补血?还有根据一些情况点击不同的地方: case "1": Common.Click (418, 305 ); break; case "2": Common.Click (529, 305 ); 看起来应该是外挂了。 |
![]() | 75 hualuogeng 2015-08-20 10:30:17 +08:00 @zmj1316 911/285 ,哈哈 |
76 kkwezard 2015-08-20 10:37:58 +08:00 放弃做程序猿就永远不会有这种烦恼了。 |
77 stgzr 2015-08-20 10:48:00 +08:00 没必要贴出来吧... |
![]() | 78 iamppz 2015-08-20 11:12:30 +08:00 @publicID001 10000 行一般都是一个函数,或者一个事件绑定。。 |
![]() | 79 w88975 2015-08-20 11:18:57 +08:00 代码质量还行 做外挂就别要求那么高了 |
![]() | 80 w88975 2015-08-20 11:20:40 +08:00 楼主可以私信一下我吗? 我最近也在想做一个游戏的挂机辅助,希望传授点经验 |
![]() | 81 tchekai704 2015-08-20 12:35:56 +08:00 @mzer0 你说的使用结构体进行因果优化, 是指使用 hash/map/dict 之类的数据结构,从而隐藏 if/else 的逻辑吗?? |
![]() | 82 branchzero 2015-08-20 12:36:34 +08:00 撕逼预订。 这是吐槽命名有些凑了拼音么? 而且貌似判断变量的值的代码风格有好多种。 感觉不是一个人写的,或者说他精分了? |
![]() | 83 O21 2015-08-20 12:52:03 +08:00 矫情。 |
![]() | 84 Clarencep 2015-08-20 13:06:35 +08:00 不能一起愉快玩耍就分吧 |
![]() | 85 ifconfig 2015-08-20 13:19:42 +08:00 楼主你太年轻了,这样的队友算真心好队友了,我维护过几千行无注释数十个 if else 硬塞成 mvc 的项目,那叫一个想死 |
![]() | 86 Jaylee 2015-08-20 13:55:23 +08:00 把你自己的代码贴上来看看 |
![]() | 87 billwang 2015-08-20 14:12:36 +08:00 楼主是在踩着别人秀自己高大上的吗? |
![]() | 88 yeqiu 2015-08-20 14:49:18 +08:00 楼主要是觉得你的队友不行,请联系我。 @前面说只是编码风格不同的 我们排除易读性和健壮性,单去看看 CLR 就能知道效率差多少了吧。 |
![]() | 90 karlakte 2015-08-20 16:11:44 +08:00 首先说 C#应该是驼峰命名法 方法名 /属性名首字母要大写, 然后这么多魔法值 维护起来有点麻烦。代码整洁就看个人了 |
91 tuimaochang 2015-08-20 17:32:52 +08:00 要不是你朋友,连注释都不写。 |
92 hitmanx 2015-08-20 18:37:09 +08:00 @harry890829 是不是还有效率上的区别,记得 switch case 有些编译器会优化出一个 jump table 啥的,只要计算一次, O (1 )的时间,不排除记错了。。 不过话说,这个注释真是详细,已经很幸福了。。 |
![]() | 93 bk201 2015-08-20 20:01:59 +08:00 一句都不想说你还发帖子说一下。。 代码风格这东西没啥说头,只问你能不能看懂,功能实现没有,代码不要做无用功简洁就 ok 拉,要不楼主 t 贴个自己的代码对比下? |
![]() | 95 harry890829 2015-08-21 09:38:49 +08:00 |
![]() | 96 kaedea 2015-08-21 10:57:12 +08:00 @theoractice 交出头像 |
![]() | 97 halfcrazy 2015-08-21 11:04:26 +08:00 这种代码风格,让我想起了一个小伙伴 |
98 soundofu 2015-08-21 11:20:59 +08:00 @hitmanx 不同平台的编译上确实有区别,例如在 TI DSP 上,如果 CCS 编译,会有一个.switch 区域,执行的时候会接近 O (1 ),此时通过人工修改更高命中率的 case 的次序应该是没有什么效果的。但是 51 平台上用伟福或者 Keil uV2 会出现 switch 执行时间的陷阱,不知还有没有人遇到过... @fo2w 在嵌入式 MCU 里面确实会有这种情况。如果用 for ,每次赋值之间起码增加了一次 ACC 和一次判断跳转,对于带有流水线并且没有分支预测或乱序执行的 CPU ,执行效率大大降低。况且遇到这种需要批量生成的代码,也是直接 excel 里拖一下,然后 Ctrl+C , Ctrl+V 过去的。 |
![]() | 99 theoractice 2015-08-21 16:59:37 +08:00 @kaedea 我的头像?只是一张手机拍的风景照啊。 |
100 tjxjj 2015-08-26 11:18:31 +08:00 都是程序员,何苦难为程序员 |