GalaxyDeepLove

一些有趣的东西

1表白

点击查看代码
#include <bits/stdc++.h>
using namespace std;

string n;

int main() {
	cout << "input Happy Father's Day" << endl;
	getline(cin, n);
	if(n == "Happy Father's Day"){
		system("color e");
		cout << "I LOVE YOU!" << endl;
	}
	else return 0;
}

2窗口抖动

点击查看代码
#include <stdio.h>
#include <windows.h>
using namespace std;

int main(int argc, char *argv[])
{
	
    RECT rect; 
    HWND hwnd = NULL,oldhwnd = NULL; 
    int x,y,width,height; 
    int i;
    system("title Happy Father's Day"); //标题 
    for(i=0;i<50;i++)
    {
        hwnd = GetForegroundWindow(); //一个API函数,获取活动窗口的句柄
        if(hwnd!=oldhwnd)
        {
            GetWindowRect(hwnd,&rect); //获取指定窗口的位置
            x = rect.left;
            y = rect.top;
            width = rect.right - x;
            height = rect.bottom - y;
            oldhwnd = hwnd; //把刚刚获取的窗口句柄保存起来。
        }
        MoveWindow(hwnd,x-10,y,width,height,TRUE); //向左移动了10像素,下同
        Sleep(5); //暂停5毫秒
        MoveWindow(hwnd,x-10,y-10,width,height,TRUE);
        Sleep(5);
        MoveWindow(hwnd,x,y-10,width,height,TRUE);
        Sleep(5);
        MoveWindow(hwnd,x,y,width,height,TRUE);
        Sleep(5);
    }
    return 0;
}

3恶作剧关机

点击查看代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
int main()
{
    char write[100];
    system("title Father's day");
    system( "shutdown -s -t 60");
th:
    printf( "请使用凯撒密码写出LdttcJdxliv'wHdc的明文(位移量为4)\n" );
    scanf( "%s", write);
    if (strcmp(write, "HappyFather'sDay" ) == 0)
    {
        printf( "恭喜你,父亲节快乐!\n" );
        system( "shutdown -a");
        system("pause");
    }
    else
    {
        printf( "结果错误,准备关机哦!\n" );
        goto th;
    }
    return 0;
} 

4扫雷游戏

点击查看代码
#include<stdio.h>
#include<Windows.h>

#define YELLOW FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY
#define CYAN FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY
#define ORANGE FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY
#define PURPLE FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY

using namespace std;

const int STARTX = 30;
const int STARTY = 6;
const int MAXX = 9;//雷区的宽
const int MAXY = 9;//雷区的高
const int BOMBNUMBER = 10;//地雷数量

class Cube {
	private:
		bool ifHaveBomb;//该方块是否含有炸弹
		bool ifOpen;//该方块有无被玩家翻开
		int nearBombNumber;//该区块周围8格的含有炸弹的方块的数量
	public:
		void setOpen() {
//将Open的值改为true
			ifOpen = true;
		}
		bool getOpen() {
//获取ifOpen的值
			return ifOpen;
		}
		void setNearBombNumber(int number) {
//给nearBombNumber赋值
			nearBombNumber = number;
		}
		void haveBomb() {
//给方块放置地雷
			ifHaveBomb = true;
		}
		bool getIfHaveBomb() {
//获取ifHaveBomb的值
			return ifHaveBomb;
		}
		int getNearBombNumber() {
//获取nearBombNumber的值
			return nearBombNumber;
		}
		void resetCube(bool ifhavebomb = false, bool ifopen = false, int nearbombnumber = 0) {
//初始化成员数据
			ifHaveBomb = ifhavebomb;//大写是更好的!
			ifOpen = ifopen;
			nearBombNumber = nearbombnumber;
		}
};
Cube cube[MAXX][MAXY];

void GoTo(int x, int y);//定位光标
void setBomb(int bombNumber);//生成bombNumber个炸弹并且放进随机的方块中
void show();//显示地雷阵
int checkAndSetNearBombNumber(int x, int y);//检查当前方块周围的雷数量
void gameStart();//初始化游戏
void showXY();//显示雷区坐标
bool player(bool &life);//玩家输入坐标翻开方块
void message(bool life);//玩家游戏结束后输出的信息
void autoOpen(int x,int y);//玩家翻开的方块为不含雷且周围无雷的方块时,自动翻开周围无雷的方块
bool ifWin();//判断玩家是否扫雷成功
void showBomb();//游戏结束后显示地雷位置

int main() {

	gameStart();
	show();
	bool life = true, win = true;
	while (player(life) && !ifWin()) {
	}
	message(life && ifWin());
	return 0;
}

void GoTo(int x, int y) {
//定位光标
	COORD coord = { x,y };
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}

void setBomb(int bombNumber = BOMBNUMBER) {
//生成bombNumber个炸弹并且放进随机的方块中
	srand((unsigned)GetCurrentTime());
	while (bombNumber--) {
		int x = MAXX + 1, y = MAXY + 1;
		while ((x >= MAXX || y >= MAXY) || cube[x][y].getIfHaveBomb() == true) {
			x = rand() % MAXX;
			y = rand() % MAXY;
		}
		cube[x][y].haveBomb();
	}
}

void show() {
//显示地雷阵
	system("cls");//清屏system("cls");
	showXY();
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), CYAN);
	for (int i = 0; i < MAXY; i++) {
		GoTo(STARTX, STARTY + i);
		for (int j = 0; j < MAXX; j++) {
			if (cube[j][i].getOpen() == true) {
				if (cube[j][i].getIfHaveBomb() == false) {
					if (cube[j][i].getNearBombNumber() == 0) { //挖开无雷的方块显示该方块周围多少个方块含雷,若为0则显示空格
						printf(" ");
					} else {
						printf(" %d", cube[j][i].getNearBombNumber());
					}
				} else {
					printf("×");//有雷的方块被挖开后显示×
				}
			} else {
				printf("■");//未翻开的方块用■显示
			}
		}
	}
}

void showXY() {
//显示坐标轴
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), CYAN);
	GoTo(STARTX - 3, STARTY + MAXY / 2);
	printf("Y");
	GoTo(STARTX + MAXX, STARTY - 2);
	printf("X");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);
	for (int i = 0; i < MAXY; i++) {
		GoTo(STARTX - 1, STARTY + i);
		printf("%d ", i);
	}
	for (int i = 0; i < 2 * MAXX; i += 2) {
		GoTo(STARTX + i + 1, STARTY - 1);
		printf("%d ", i / 2);
	}
}

int checkAndSetNearBombNumber(int x, int y) {
//检查当前方块周围的雷数量
	int num = 0;

	if (cube[x][y].getIfHaveBomb() == true) {
//若该方块有地雷,则不用判断它周围有几个雷
		return 0;
	} else {
//用两个循环当前方块周围8格扫一遍
		for (int i = -1; i <= 1; i++) {
			for (int j = -1; j <= 1; j++) {
				int nx = x + i;
				int ny = y + j;
				if (!(ny == y && nx == x) && (nx >= 0 && nx <= MAXX - 1) &&
				        (ny >= 0 && ny <= MAXY - 1)) {
					if (cube[nx][ny].getIfHaveBomb()) {
						num++;
					}
				}
			}
		}
		cube[x][y].setNearBombNumber(num);//设置该方块附近的地雷的数量
		return 0;
	}
}

void gameStart() {
//初始化游戏
	for (int i = 0; i < MAXY; i++) {
		for (int j = 0; j < MAXX; j++) {
			cube[j][i].resetCube();
		}
	}
	setBomb();
	for (int i = 0; i < MAXY; i++) {
		for (int j = 0; j < MAXX; j++) {
			checkAndSetNearBombNumber(j, i);
		}
	}
}

bool player(bool &life) {
//玩家输入坐标翻开方块
	int x, y;
	GoTo(STARTX - 3, STARTY + MAXY + 1);
	printf("请输入坐标(x,y), x和y必须 用空格隔开");
	GoTo(STARTX + MAXX / 2, STARTY + MAXY + 2);
	scanf("%d%d", &x, &y);
	if ((x < 0) || (x > MAXX - 1) || (y < 0) || (y > MAXY - 1)) {
//当玩家输入的坐标超出范围时
		show();
		GoTo(STARTX - 3, STARTY + MAXY + 3);
		printf("该坐标不存在,请重新输入坐标");
		GoTo(STARTX + MAXX / 2, STARTY + MAXY + 2);
	} else if (cube[x][y].getIfHaveBomb() == true) {
//当玩家翻开的方块有地雷时
		cube[x][y].setOpen();
		show();
		life = false;
		return false;
	} else if (cube[x][y].getOpen() == false) {
//当玩家翻开的方块无雷时
		if (cube[x][y].getNearBombNumber() == 0) {
			autoOpen(x, y);
			cube[x][y].setOpen();
			show();
		} else {
			cube[x][y].setOpen();
			show();
		}
	} else if (cube[x][y].getOpen() == true) {
//当玩家输入已翻开方块的坐标时
		show();
		GoTo(STARTX, STARTY + MAXY + 3);
		printf("该方块已被挖开,请再次输入坐标");
		GoTo(STARTX + MAXX / 2, STARTY + MAXY + 2);
	}
	ifWin();
	return true;
}

void message(bool result) {
	if (result == true) {
//玩家胜利时输出的信息
		showBomb();
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);
		GoTo(STARTX - 1, STARTY + MAXY + 1);
		printf("祝贺你,你胜利了!");
		GoTo(STARTX, STARTY + MAXY + 2);
	} else {
//玩家失败时输出的信息
		showBomb();
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), PURPLE);
		GoTo(STARTX - 1, STARTY + MAXY + 1);
		printf("××你踩中地雷了××");
		GoTo(STARTX, STARTY + MAXY + 2);
	}
}

void autoOpen(int x, int y) {
//玩家翻开的方块为不含雷且周围无雷的方块时,自动翻开周围无雷的方块
	for (int i = -1; i <= 1; i++) {
		for (int j = -1; j <= 1; j++) {
			int nx = x + i;
			int ny = y + j;
			if (!(ny == y && nx == x) && (nx >= 0 && nx <= MAXX - 1) &&
			        (ny >= 0 && ny <= MAXY - 1) && cube[nx][ny].getOpen() == false) {
				if (cube[nx][ny].getNearBombNumber() == 0) {
					cube[nx][ny].setOpen();
					autoOpen(nx, ny);
				} else {
					cube[nx][ny].setOpen();
				}
			}
		}
	}
}

bool ifWin() {
//判断玩家是否扫雷成功达到游戏结束条件
	int num = 0;
	for (int i = 0; i < MAXX; i++) {
		for (int j = 0; j < MAXY; j++) {
			if (cube[j][i].getOpen() == false) {
				num++;
			}
		}
	}
	if (num == BOMBNUMBER) {
		return true;
	} else {
		return false;
	}
}

void showBomb() {
//游戏结束后显示地雷位置
	for (int i = 0; i < MAXY; i++) {
		for (int j = 0; j < MAXX; j++) {
			if (cube[j][i].getIfHaveBomb() == true) {
				cube[j][i].setOpen();
			}
		}
	}
	show();
}

问:为什么折叠代码?

答:增加神秘感!

posted on 2024-03-17 12:48  GalaxyDeepLove  阅读(3)  评论(0编辑  收藏  举报

导航