-
Notifications
You must be signed in to change notification settings - Fork 0
/
workbench.h
156 lines (139 loc) · 2.61 KB
/
workbench.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#pragma once
#include <iostream>
using namespace std;
class hwWorkbench {
public:
hwWorkbench() {};
hwWorkbench(int _wbId, int _x, int _y, int _wbt):
wbId(_wbId),
x( (_x) * 0.5 + 0.25 ),
y( (_y) * 0.5 + 0.25 ),
wbType(_wbt){
switch (wbType)
{
case 1:
neededMaterials = 0b0;
break;
case 2:
neededMaterials = 0b0;
break;
case 3:
neededMaterials = 0b0;
break;
case 4:
neededMaterials = 0b0110;
break;
case 5:
neededMaterials = 0b1010;
break;
case 6:
neededMaterials = 0b1100;
break;
case 7:
neededMaterials = 0b1110000;
break;
case 8:
neededMaterials = 0b10000000;
break;
case 9:
neededMaterials = 0b11111110;
break;
default:
neededMaterials = 0;
break;
}
};
void init(int _wbId, int _x, int _y, int _wbt) {
wbId = _wbId;
x = (_x) * 0.5 + 0.25;
y = ((_y) * 0.5 + 0.25);
wbType = (_wbt);
switch (wbType)
{
case 1:
neededMaterials = 0b0;
break;
case 2:
neededMaterials = 0b0;
break;
case 3:
neededMaterials = 0b0;
break;
case 4:
neededMaterials = 0b0110;
break;
case 5:
neededMaterials = 0b1010;
break;
case 6:
neededMaterials = 0b1100;
break;
case 7:
neededMaterials = 0b1110000;
break;
case 8:
neededMaterials = 0b10000000;
break;
case 9:
neededMaterials = 0b11111110;
break;
default:
neededMaterials = 0;
break;
}
};
/// <summary>
/// 是地图中第几个工作台, (按字符串顺序排序
/// </summary>
int wbId;
/// <summary>
/// workbenchType
/// </summary>
int wbType;
double x, y;
/// <summary>
/// 剩余生产时间
/// </summary>
int rpt = 0;
/// <summary>
/// 当前拥有的材料
/// </summary>
int materialsState = 0;
/// <summary>
/// 生产产品所需材料
/// </summary>
int neededMaterials;
/// <summary>
/// 是否有产品
/// </summary>
int ifHaveProduct = 0;
bool isTarget = false;
/// <summary>
/// 获取 当前工作台缺少的材料的列表
/// 判断是否需要n号材料, 可使用下述代码
/// (getNeed() & (1 << n)) == 0;
/// </summary>
/// <returns>返回一个int, 第n位为 1, 则表示缺少该材料</returns>
int getNeed()const {
return neededMaterials ^ materialsState;
}
/// <summary>
/// 判断是否需要该材料
/// </summary>
/// <param name="goodId">材料id [1,7]</param>
/// <returns>如需要该材料则返回true, 输入为0或不需要该材料返回false</returns>
bool ifNeed(int goodId)const{
if (goodId == 0)
return false;
return (neededMaterials ^ materialsState) & (1 << (goodId));
}
void update() {
int tempI;
double tempD;
/// <summary>
/// 前三项为常数项
/// </summary>
cin >> tempI >> tempD >> tempD >>
rpt >> materialsState >> ifHaveProduct;
}
};