C 语言精品游戏主角和怪物源码
扫雷游戏代码源码
//C 语言多线程 - 主角和怪物
#include#include#define bool int // 定义 int 变量为 bool 变量,bool 不是真就是假
int a = 0,
b = 20; // 主角的坐标
int x = 1,
y = 0; // 怪物的坐标
int i = 1; //i 值为真
HANDLE hMutex;
//1. 坐标
void GamePosition(HANDLE g_hout, int x, int y) {
COORD pos; // 点的结构体
pos.X = x; // 横坐标
pos.Y = y; // 纵坐标
SetConsoleCursorPosition(g_hout, pos);
// 设置控制平台光标位置
}
DWORD WINAPI Func(LPVOID lpParamter) // 多线程的功能函数 6. 线程是画怪物
{
HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE); //7. 拿到这张纸
WaitForSingleObject(hMutex, INFINITE); //13. 自己进来,自己用洗手间
GamePosition(hout, x, y),
printf(""); //8. 在纸上画怪物
ReleaseMutex(hMutex); //14. 放弃使用权
while (1) //9. 怪物在横坐标为从 0-10 依次循环移动
{
if (x >= 0 && i == 1) {
printf("");
GamePosition(hout, ++x, y);
printf("");
Sleep(1000);
if (x == 10) i = 0; //i 为假
} else if (x {
printf("");
GamePosition(hout, --x, y);
printf("");
Sleep(1000);
if (x == 0) i = 1;
}
}
return 0;
}
int main() {
HANDLE hThread = CreateThread(NULL, 0, Func, NULL, 0, NULL); //5. 创建线程
hMutex = CreateMutexA(NULL, FALSE, "123"); // 创建互斥锁(量)//10. 关上洗手间
HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE); //2. 拿到这张纸
WaitForSingleObject(hMutex, INFINITE); //11. 等待你的同事出来 15 步接着
GamePosition(hout, a, b),
printf("☆"); //3. 在纸上画主角
ReleaseMutex(hMutex); //12. 同事出来了,放弃了洗手间的使用权
while (1) {
if (kbhit()) switch (getch()) // 控制左右 4. 主角上下左右移动
{
case 'w':
case 'W':
if (b > 3) GamePosition(hout, a, b),
printf(""),
GamePosition(hout, a, --b),
printf("☆");
break;
case 's':
case 'S':
if (b
break;
case 'a':
case 'A':
if (a > 0) printf(""), GamePosition(hout, --a, b), printf("☆");
break;
case 'd':
case 'D':
if (a
break;
}
}
CloseHandle(hThread);
system("pause");
return 0;
}
#include#include#include int main() {
int delta[8][2] = {
{ - 1,
-1
},
{ - 1,
0
},
{ - 1,
1
},
,
,
,
,
};
int row = 0,
col = 0,
num = 0;
char map[10][10] = ;
char show[10][10] = ;
srand(time(0));
for (row = 0; row
for (col = 0; col map[row][col] = '0';
}
}
do {
row = rand() % 10;
col = rand() % 10;
if (map[row][col] == '0') {
map[row][col] = 'x';
num++;
}
} while ( num for ( row = 0 ; row for ( col = 0 ; col if ( map [ row ][col] != 'x') {
int cnt = 0;
for (num = 0; num
if (row + delta[num][0]
continue;
}
if (row + delta[num][0] > 9) {
continue;
}
if (col + delta[num][1]
continue;
}
if (col + delta[num][1] > 9) {
continue;
}
if (map[row + delta[num][0]][col + delta[num][1]] == 'x') {
cnt++;
}
}
map[row][col] = '0' + cnt;
}
}
}
for (row = 0; row
for (col = 0; col printf("*");
}
printf("\n");
}
num = 0; int x, y; do {
printf("please enter the coordinate of array:");
scanf("%d%d", &x, &y);
if (map[x - 1][y - 1] == '0') {
for (num = 0; num
if (x - 1 + delta[num][0]
continue;
}
if (x - 1 + delta[num][0] > 9) {
continue;
}
if (y - 1 + delta[num][1]
continue;
}
if (y - 1 + delta[num][1] > 9) {
continue;
}
}
}
if (map[x - 1][y - 1] != 'x' && map[x - 1][y - 1] != '0') {
for (num = 0; num int cnt = 0;
if (x - 1 + delta[num][0]
continue;
}
if (x - 1 + delta[num][0] > 9) {
continue;
}
if (y - 1 + delta[num][1]
continue;
}
if (y - 1 + delta[num][1] > 9) {
continue;
}
if (map[x - 1 + delta[num][0]][y - 1 + delta[num][1]] != 'x') {}
}
}
if (map[x - 1][y - 1] == 'x') {
printf("game over!\n");
for (row = 0; row
for (col = 0; col printf("%c", map[row][col]);
}
printf("\n");
}
return 0;
}
system("cls");
printf("mine sweeping:\n");
for (row = 0; row
for (col = 0; col
if (show[row][col] == 1) {
printf("%c", map[row][col]);
} else {
printf("*");
}
}
printf("\n");
}
num = 0;
for (row = 0; row
for (col = 0; col
if (show[row][col] == 1) {
num++;
}
}
}
printf("num:%d\n", num);
} while ( num printf ("you win!");
return 0;
}
来源: http://www.jianshu.com/p/f1b5738db63f