-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathservice.cpp
More file actions
163 lines (144 loc) · 3.61 KB
/
Copy pathservice.cpp
File metadata and controls
163 lines (144 loc) · 3.61 KB
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
157
158
159
160
#include "service.h"
#include <stdio.h>
//初始化全局变量
int check[MAX_MAP][MAX_MAP] = { 0 }; //检查数组
int map[MAX_MAP][MAX_MAP] = { 0 }; //序号储存
int random[MAX_MAP * MAX_MAP] = { 0 }; //随机化数组
IMAGE img_total(0, 0); //原图片
IMAGE img_blank(0, 0); //白底
IMAGE img[MAX_MAP][MAX_MAP] = { (0,0) }; //储存分块图片
pic picArray[10] = { }; //关卡图片状态
int level = 3; //关卡难度
int width_temp = 0; //分块宽度
int height_temp = 0; //分块高度
int flagi = 0; //标记块行位置
int flagj = 0; //标记块列位置
int mousei = 0; //标记鼠标位置
int mousej = 0; //标记鼠标位置
int FLAG = 0; //胜利标记
int tend = 0; //时间
int tbegin = 0; //开始时间
double picturSmall = 0.5; //缩放因子
inline void Right_judge() {
int Right_judgei = 0, Rightjudge[MAX_MAP * MAX_MAP], num = 0;
memset(Rightjudge, 0, sizeof(Rightjudge));
for (int i = 0; i < level; i++)
{
for (int j = 0; j < level; j++)
{
Rightjudge[num] = map[i][j];
num++;
}
}
for (int i = 0; i < level * level; i++)
{
for (int j = i; j < level * level; j++)
{
if (Rightjudge[i] > Rightjudge[j])
Right_judgei++;
}
}
if (Right_judgei % 2)
swap(map[0][0], map[0][1]);
}
void randArray() {
for (int i = 0; i < level * level - 1; i++)
random[i] = i;
random[level * level - 1] = level * level - 1;
random_device rd;
mt19937 g(rd()); // 随机数引擎
shuffle(random, random + level * level - 1, g); // 打乱顺序
int cnt = 0;
for (int i = 0; i < level; i++)
{
for (int j = 0; j < level; j++)
{
map[j][i] = random[cnt]; //逆转赋值1
cnt++;
}
}
Right_judge();
}
void judgeGraphics() {
int cnt = 0;
for (int i = 0; i < level; i++)
{
for (int j = 0; j < level; j++)
{
if (map[i][j] == check[i][j])
cnt++;
}
}
if (cnt == level * level)
{
MessageBox(GetHWnd(), _T("过关了."), _T("消息提示."), MB_OK);
FLAG = 1;
//exit(0);
}
}
bool isAgain() {
UINT dr = MessageBox(GetHWnd(), _T("是否重玩?"), _T("消息提示"), MB_YESNO);
return (dr == IDYES) ? true : false;
}
void start(int judgePic)
{
tbegin = clock();
getGraphics(judgePic);
setGraphics();
randArray();
showGraphics();
while (1) {
tend = clock();
showTime();
BeginBatchDraw(); //双缓冲防止闪烁
getPlayingMouse();
showGraphics();
EndBatchDraw(); //双缓冲防止闪烁
judgeGraphics();
if (FLAG == 1)
{
FLAG = 0;
break;
}
}
}
void setGraphics() {
width_temp = img_total.getwidth() / level;
height_temp = img_total.getheight() / level;
//载入各分块的图片
SetWorkingImage(&img_total);
for (int i = 0; i < level; i++)
{
for (int j = 0; j < level; j++)
getimage(&img[i][j], i * width_temp, j * height_temp, width_temp, height_temp);
}
SetWorkingImage();
//校验数组初始化
int cnt = 0;
for (int i = 0; i < level; i++)
{
for (int j = 0; j < level; j++)
{
check[i][j] = cnt;
cnt++;
}
}
setRightView();
}
inline void showTime() {
TCHAR s5[3600];
_stprintf_s(s5, "%.2f秒", (tend - tbegin) / (double)CLOCKS_PER_SEC);
outtextxy(img_total.getwidth() * 1.67, img_total.getheight() * 0.85, s5);
}
void shopStart() {
showShop();
buyPic();
}
void loadPicFromArray() {
for (int i = 0; i < sizeof(picArray) / sizeof(picArray[0]); i++) {
char picAddress[20] = "";
sprintf_s(picAddress, "pic%d.png", i);
loadimage(&picArray[i].img, (LPCSTR)picAddress, 150, 210);
picArray[i].state = (i / 4 == 0) ? 1 : 0; //前4个状态置1(表示可用)
}
}