Repository navigation
Expand file tree
/
Copy pathmain.cpp
More file actions
163 lines (143 loc) · 4.56 KB
/
Copy pathmain.cpp
File metadata and controls
163 lines (143 loc) · 4.56 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
161
162
163
#define _CRT_SECURE_NO_WARNINGS
#pragma execution_character_set("utf-8")
#pragma once
#include<bits/stdc++.h>
#include<windows.h>
#include <iostream>
#include <graphics.h>
#include <mmsystem.h>
#include<process.h>
#include"picture.cpp"
#include"music.cpp"
#include"gameend.cpp"
// 声明线程函数
DWORD WINAPI MusicThread(LPVOID lpParam);
DWORD WINAPI ScreenAndMenuThread(LPVOID lpParam);
DWORD WINAPI GameEndThread(LPVOID lpParam);
DWORD WINAPI GameThread(LPVOID lpParam);
//int game();
extern int GameEnd;//1是胜利,-1是失败
extern int GameStart;
int main() {
HANDLE hMusicThread, hScreenAndMenuThread,hGameEndThread,hGameThread;
DWORD threadId1, threadId2,threadId3,threadId4;
// 初始化图形窗口
initgraph(498, 810);
// 创建音乐播放线程
hMusicThread = CreateThread(
NULL, // 默认安全属性
0, // 使用默认堆栈大小
MusicThread, // 线程函数名称
NULL, // 参数传递给线程函数
0, // 立即运行线程
&threadId1); // 返回线程标识符
if (hMusicThread == NULL) {
printf("CreateThread failed (%d).\n", GetLastError());
closegraph();
return 1;
}
// 创建屏幕和菜单显示线程
hScreenAndMenuThread = CreateThread(
NULL, // 默认安全属性
0, // 使用默认堆栈大小
ScreenAndMenuThread, // 线程函数名称
NULL, // 参数传递给线程函数
0, // 立即运行线程
&threadId2); // 返回线程标识符
if (hScreenAndMenuThread == NULL) {
printf("CreateThread failed (%d).\n", GetLastError());
CloseHandle(hMusicThread);
closegraph();
return 1;
}
// 创建游戏结束线程
hGameEndThread = CreateThread(
NULL, // 默认安全属性
0, // 使用默认堆栈大小
GameEndThread, // 线程函数名称
NULL, // 参数传递给线程函数
0, // 立即运行线程
&threadId3); // 返回线程标识符
if (hGameEndThread == NULL) {
printf("CreateThread failed (%d).\n", GetLastError());
CloseHandle(hMusicThread);
closegraph();
return 1;
}
// 创建游戏线程
hGameThread = CreateThread(
NULL, // 默认安全属性
0, // 使用默认堆栈大小
GameThread, // 线程函数名称
NULL, // 参数传递给线程函数
0, // 立即运行线程
&threadId4); // 返回线程标识符
if (hGameThread == NULL) {
printf("CreateThread failed (%d).\n", GetLastError());
CloseHandle(hMusicThread);
closegraph();
return 1;
}
// 等待线程完成
WaitForSingleObject(hGameEndThread, INFINITE);
// 关闭线程句柄
CloseHandle(hMusicThread);
CloseHandle(hScreenAndMenuThread);
CloseHandle(hGameEndThread);
CloseHandle(hGameThread);
// 关闭图形窗口
closegraph();
return 0;
}
// 音乐线程函数
DWORD WINAPI MusicThread(LPVOID lpParam) {
Music();
return 0;
}
// 屏幕和菜单线程函数
DWORD WINAPI ScreenAndMenuThread(LPVOID lpParam) {
screen0();
menu();
return 0;
}
// 游戏结束线程函数
DWORD WINAPI GameEndThread(LPVOID lpParam) {
printf("Test\n");
while (1)
{
if (GameEnd)
{
end();
return 0;
}
}
}
DWORD WINAPI GameThread(LPVOID lpParam) {
while (1) {
if (GameStart == 1)
{
Game();
}
if (GameEnd)
{
return 0;
}
}
return 0;
}
//int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
// //在引入了windows.h头文件,并修改编译方式的链接器为windows(窗口界面)后
// //main函数的参数列表可以改为WinMain函数的参数列表
// // 隐藏命令行窗口
// HWND hwnd = GetConsoleWindow();
// ShowWindow(hwnd, SW_HIDE);
// Music();
// //主程序
// initgraph(498, 810);
// IMAGE imageBuffer;
// getimage(&imageBuffer, 0, 0, getmaxx(), getmaxy()); // 捕获整个窗口的图像
// screen0();
// menu();
// closegraph();
// return 0;
//}