受朋友委托,然后跟另一个朋友一起开发的,
一起开发的这个,之前 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 1
典型的数据和逻辑分离有问题的设计。
|
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
learnshare 2015-08-19 17:16:32 +08:00
其实应该把这么多数据放在合理的数据结构里,否则以后改到哭
|
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 1
第一眼给我的感觉还可以 楼主 你是没见过更烂的....
|
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 2
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 2015-08-19 19:45:07 +08:00 via iPhone
我也感觉挺好
|
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 2015-08-19 21:20:10 +08:00
我觉得如果这是一个临时合作的队友,这质量已经远远好于预期了
还有这么多注释 |
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
都是程序员,何苦难为程序员
|