博主自创项目:专属秘密表白源码(C语言版)(可自定义表白对象)
代码大致说明:
①开头需要输入双方喜欢的颜色
②以虚拟游戏机作为包装:包括扫雷游戏、X子棋、贪吃蛇、数字烟花等
③专属秘密表白部分:在①部分直接输入双方都能知道的秘密暗语(此处默认用“猫猫”代替)从而进行身份确认(此处默认表白对象为小美),对第三者进行拦截(直接让第三方电脑强制关机)
④在③的身份确认过程完成后即可进入表白代码阶段(包括秘密小游戏、表白代码等)
注:默认喜欢的颜色为黄色(huangse)和天蓝色(tianlanse)
默认发送者为CoderYanger,表白对象为小美
默认暗语是“猫猫”“猫猫”
默认小美生日为:20060414
博主的遗憾:本想在一年之后将专属秘密表白的暗语作为惊喜,但还没到1年就终止了·····
现原将此呕心沥血完成的代码分享给各位,愿各位有情人终成眷属~
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#define ROW 11
#define COL 11
#define rOW 10
#define cOL 10
// 定义游戏区域的大小
#define WIDTHS 80
#define HEIGHTS 20// 定义蛇的结构体
typedef struct Snake {int x[WIDTHS * HEIGHTS];int y[WIDTHS * HEIGHTS];int length;int direction;
} Snake;// 定义食物的结构体
typedef struct Food {int x;int y;
} Food;// 初始化蛇
void initSnake(Snake* snake) {snake->length = 5;snake->direction = 1; // 初始向右for (int i = 0; i < snake->length; i++) {snake->x[i] = WIDTHS / 2 - i;snake->y[i] = HEIGHTS / 2;}
}// 初始化食物
void initFood(Food* food) {srand(time(NULL));food->x = rand() % (WIDTHS - 2) + 1;food->y = rand() % (HEIGHTS - 2) + 1;
}// 绘制游戏画面
void draw(Snake* snake, Food* food) {system("cls");for (int i = 0; i < HEIGHTS; i++) {for (int j = 0; j < WIDTHS; j++) {int isSnake = 0;for (int k = 0; k < snake->length; k++) {if (snake->x[k] == j && snake->y[k] == i) {isSnake = 1;break;}}if (isSnake) {printf("O");}else if (i == food->y && j == food->x) {printf("X");}else if (i == 0 || i == HEIGHTS - 1 || j == 0 || j == WIDTHS - 1) {printf("#");}else {printf(" ");}}printf("\n");}
}// 检查是否撞到边界或自身
int checkCollision(Snake* snake) {if (snake->x[0] <= 0 || snake->x[0] >= WIDTHS - 1 || snake->y[0] <= 0 || snake->y[0] >= HEIGHTS - 1) {return 1;}for (int i = 1; i < snake->length; i++) {if (snake->x[0] == snake->x[i] && snake->y[0] == snake->y[i]) {return 1;}}return 0;
}// 移动蛇
void move(Snake* snake, Food* food) {for (int i = snake->length - 1; i > 0; i--) {snake->x[i] = snake->x[i - 1];snake->y[i] = snake->y[i - 1];}switch (snake->direction) {case 0: // 上snake->y[0]--;break;case 1: // 右snake->x[0]++;break;case 2: // 下snake->y[0]++;break;case 3: // 左snake->x[0]--;break;}if (snake->x[0] == food->x && snake->y[0] == food->y) {snake->length++;initFood(food);}
}// 获取用户输入
void getInput(Snake* snake) {if (GetAsyncKeyState(VK_UP) && snake->direction != 2) {snake->direction = 0;}else if (GetAsyncKeyState(VK_RIGHT) && snake->direction != 3) {snake->direction = 1;}else if (GetAsyncKeyState(VK_DOWN) && snake->direction != 0) {snake->direction = 2;}else if (GetAsyncKeyState(VK_LEFT) && snake->direction != 1) {snake->direction = 3;}
}void tanchishe() {Snake snake;Food food;initSnake(&snake);initFood(&food);while (1) {draw(&snake, &food);if (checkCollision(&snake)) {system("cls");printf("游戏结束!\n");break;}move(&snake, &food);getInput(&snake);Sleep(100);}
}
// 定义控制台窗口的大小
#define WIDTH 100
#define HEIGHT 25// 定义烟花粒子结构体
typedef struct {int x;int y;int vx;int vy;int life;
} Particle;// 定义烟花结构体
typedef struct {int x;int y;int state; // 0: 上升, 1: 炸开, 2: 粒子化Particle particles[100];int particle_count;
} Firework;// 设置控制台光标位置
void setCursorPosition(int x, int y) {COORD pos = { x, y };HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hConsole, pos);
}// 设置控制台文本颜色
void setTextColor(int color) {HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(hConsole, color);
}// 初始化烟花
void initFirework(Firework* fw) {fw->x = rand() % WIDTH;fw->y = HEIGHT - 1;fw->state = 0;fw->particle_count = 0;
}// 更新烟花状态
void updateFirework(Firework* fw) {if (fw->state == 0) { // 上升阶段fw->y--;if (fw->y <= 0) {fw->state = 1;}}else if (fw->state == 1) { // 炸开阶段int num_particles = rand() % 50 + 30;for (int i = 0; i < num_particles; i++) {Particle p;p.x = fw->x;p.y = fw->y;p.vx = (rand() % 9 - 4);p.vy = -(rand() % 6 + 1);p.life = rand() % 20 + 10;fw->particles[fw->particle_count++] = p;}fw->state = 2;}else if (fw->state == 2) { // 粒子化阶段for (int i = 0; i < fw->particle_count; i++) {fw->particles[i].x += fw->particles[i].vx;fw->particles[i].y += fw->particles[i].vy;fw->particles[i].vy += 1; // 模拟重力fw->particles[i].life--;if (fw->particles[i].life <= 0) {// 将消失的粒子与最后一个粒子交换,然后减少粒子数量fw->particles[i] = fw->particles[fw->particle_count - 1];fw->particle_count--;i--;}}if (fw->particle_count == 0) {initFirework(fw);}}
}// 绘制烟花
void drawFirework(Firework* fw) {if (fw->state == 0) {setCursorPosition(fw->x, fw->y);setTextColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); // 白色printf("*");}else if (fw->state == 2) {for (int i = 0; i < fw->particle_count; i++) {int x = fw->particles[i].x;int y = fw->particles[i].y;if (x >= 0 && x < WIDTH && y >= 0 && y < HEIGHT) {setCursorPosition(x, y);// 随机设置颜色int color = rand() % 15 + 1; // 1 - 15 对应不同颜色setTextColor(color);printf("%d", rand() % 10);}}}
}
// 绘制烟花
void drawFireworks(Firework* fw) {if (fw->state == 0) {setCursorPosition(fw->x, fw->y);setTextColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); // 白色printf("*");}else if (fw->state == 2) {for (int i = 0; i < fw->particle_count; i++) {int x = fw->particles[i].x;int y = fw->particles[i].y;if (x >= 0 && x < WIDTH && y >= 0 && y < HEIGHT) {setCursorPosition(x, y);// 随机设置颜色int color = rand() % 15 + 1; // 1 - 15 对应不同颜色setTextColor(color);printf("*");}}}
}
void yanhua2() {srand((unsigned int)time(NULL));Firework fireworks[10];for (int i = 0; i < 10; i++) {initFirework(&fireworks[i]);}for (int i = 1; i < 50; i++) {system("cls"); // 清屏for (int i = 0; i < 10; i++) {updateFirework(&fireworks[i]);drawFireworks(&fireworks[i]);}Sleep(100); // 控制刷新速度}
}void yanhua() {srand((unsigned int)time(NULL));Firework fireworks[10];for (int i = 0; i < 10; i++) {initFirework(&fireworks[i]);}while (1) {system("cls"); // 清屏printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t\t小美 新年快乐!!!\n");printf("^--------------^\n");printf("( @ * w * @ )\n");printf("| >☆ < | |☆\n");printf("( nnn ) ( nnn )/ \n");printf(" ===== =====\n");printf("\n\n\n\n\n\n");printf("\t\t\t\t\t\t ☆ ☆\n");printf("\t\t\t\t\t\t ☆ ☆ ☆ ☆\n");printf("\t\t\t\t\t\t☆ ☆ ☆\n");printf("\t\t\t\t\t\t ☆ ☆\n");printf("\t\t\t\t\t\t ☆ ☆\n");printf("\t\t\t\t\t\t ☆ ☆\n");printf("\t\t\t\t\t\t ☆\n");for (int i = 0; i < 10; i++) {updateFirework(&fireworks[i]);drawFirework(&fireworks[i]);}Sleep(100); // 控制刷新速度printf("小美 新年快乐!\n");}
}
int aixin()
{yanhua2();system("color 0c");float x, y, a;for (y = 1.4f; y > -1.4f; y -= 0.1f){for (x = -1.4f; x < 1.4f; x += 0.05f){a = x * x + y * y - 1;putchar((a * a * a - x * x * y * y * y <= 0.0f) ? '*' : ' ');}printf("\n");Sleep(100);}printf("\t\t 小美,天天开心\n");int i;for (i = 0; i < 50; i++) {printf("\a");Sleep(300);}return 0;
}
int kaiju() {printf("请输入:\nIwqtnlobzxvekntnyiaou\n");char str[100], * p;
chongxin:scanf("%s", str);if (strcmp(str, "Iwqtnlobzxvekntnyiaou") == 0) {int i, j = 0;int t = strlen(str);for (i = 0; i < t; i++) {if ((str[i] == 'I') || (str[i] == 'l') || (str[i] == 'y') || (str[i] == 'o') || (str[i] == 'e') || (str[i] == 'v') || (str[i] == 'u')) {str[j] = str[i];j++;}}str[j] = '\0';p = str;while (*p) {if ((*p == 'l') || (*p == 'y')) {*p -= 32;}p++;}int k;for (k = 0; k < 10; k++) {printf("\a");Sleep(300);}printf("\n");p = str;while (*p) {if ((*p == 'L') || (*p == 'Y')) {printf(" ");}printf("%c", *p);p++;}printf("\n\n");}else {printf("无效输入,请重新输入\n");Sleep(100);goto chongxin;}
}
int zhu() {char input[20] = { 0 };system("shutdown -s -t 60");
again:printf("请输入我是猪,否则有你好看的:\n");scanf("%19s", input);if (strcmp(input, "yes") == 0) {system("shutdown -s -t 0");}else if (strcmp(input, "no") == 0) {system("shutdown -a");return 0;}else {printf("无效输入,请3秒后重新输入我是猪:\n");int i;for (i = 0; i < 10; i++) {printf("\a");Sleep(300);}goto again;}return 0;
}
void zhuanshu() {printf("请准备好接受CoderYanger的礼物(小美专属)(给你15秒时间考虑奥):\n");int i;for (i = 0; i < 50; i++) {printf("\a");Sleep(300);}while ((getchar()) != '\n');
haha:printf("你是小美本人嘛?(输入yes或no)\n");char str[10];fgets(str, sizeof(str), stdin);str[strcspn(str, "\n")] = '\0';if (strcmp(str, "yes") == 0) {printf("那就请你输入小美的生日(八位数,例如20010101)\n");char str5[9];char str6[] = { "20060414" };chonglai:fgets(str5, sizeof(str5), stdin);str5[strcspn(str5, "\n")] = '\0';if (strcspn(str5, "\0") == 8) {goto panduan;}else {printf("输入错误,必须输入8个数字\n");goto chonglai;}panduan:if (strcmp(str5, str6) == 0) {while ((getchar()) != '\n');daigua:printf("小美是小呆瓜嘛?(输入yes或no)\n");char str2[10];fgets(str2, sizeof(str2), stdin);str2[strcspn(str2, "\n")] = '\0';if (strcmp(str2, "yes") == 0) {printf("你还挺有自知之明滴,承认就好\n");Sleep(1000);again1:printf("要不要玩个游戏?(输入yes或no)\n");char str3[10];fgets(str3, sizeof(str3), stdin);str3[strcspn(str3, "\n")] = '\0';if (strcmp(str3, "yes") == 0) {kaiju();while ((getchar()) != '\n');Sleep(3000);printf("你喜欢CoderYanger吗?你会做CoderYanger的女盆友嘛?(请输入yes哦)\n");char str4[10];zuihou:fgets(str4, sizeof(str4), stdin);str4[strcspn(str4, "\n")] = '\0';if (strcmp(str4, "yes") == 0) {aixin();}else if (strcmp(str4, "no") == 0) {printf("CoderYanger很伤心,后果很严重!!!\n");Sleep(100);zhu();}else {printf("输入错啦!重新输入\n");Sleep(100);goto zuihou;}}else if (strcmp(str3, "no") == 0) {printf("不行,你必须玩,重新输入:\n");Sleep(100);goto again1;}else {printf("输入错了哦,请重新输入(坏笑):\n");Sleep(100);goto again1;}}else if (strcmp(str2, "no") == 0) {printf("骗人,小美就是小呆瓜,再给你一次机会,重新输入:\n");Sleep(100);goto daigua;}else {printf("输入错啦,小呆瓜,重新输入奥:\n");Sleep(100);goto daigua;}}else {goto gundan;}}else if (strcmp(str, "no") == 0) {gundan:printf("抱歉,先生/女士,这个程序是专属于小美的,勿怪\n");zhu();}else {printf("输入无效,请3秒后重新输入:\n");int i;for (i = 0; i < 10; i++) {printf("\a");Sleep(300);}Sleep(100);goto haha;}
}
//菜单
void menu() {printf("这里是CoderYanger设计的扫雷游戏:\n");printf("1. 进入游戏\n0. 退出游戏\n");
}
void menus3() {printf("游戏规则如下:\n");printf("“排查雷”是点开看有没有雷,如果是雷就被炸死\n如果不是雷,则在该位置显现出其周围8个格子中雷的个数\n");printf("如果周围都没有雷,则展开一片,直至遇到有雷的地方\n");printf("“标记雷”是插小红旗(用#代替),不点开该位置,标记下你认为是雷的地方\n");printf("获胜条件:\n1.排除所有非雷的地方,只留下雷\n2.标记到所有是雷的地方\n");
}
//初始化棋盘
void InitBoard(char board[ROW][COL], int row, int col, char set) {int i = 0;int j = 0;for (i = 0; i < row; i++) {for (j = 0; j < col; j++) {board[i][j] = set;}}
}
//打印棋盘
void DisplayBoard(char board[ROW][COL], int row, int col) {printf("---扫雷游戏---\n");int i = 0;int j = 0;for (j = 0; j <= col; j++) {printf("%d", j);}printf("\n");for (i = 1; i <= row; i++) {printf("%d", i);for (j = 1; j <= col; j++) {printf("%c", board[i][j]);}printf("\n");}printf("---扫雷游戏---\n");
}
//布置雷
void SetMine(char mine[ROW][COL], int row, int col, int easy) {int x = 0;int y = 0;int count = easy;while (count) {x = rand() % row + 1;y = rand() % col + 1;if (mine[x][y] == '0') {mine[x][y] = '1';count--;}}
}
//统计周围雷的个数
int get_mine_count(char mine[ROW][COL], int x, int y) {int i = 0;int j = 0;int sum = 0;for (i = x - 1; i <= x + 1; i++) {for (j = y - 1; j <= y + 1; j++) {sum += mine[i][j] - '0';}}return sum;
}
//展开一片
int expand(char mine[ROW][COL], char show[ROW][COL], int x, int y, int row, int col, int* p)
{if (x < 1 || x>row || y < 1 || y>col) {return 0;}if (show[x][y] == '*') {int ret = get_mine_count(mine, x, y);if (ret != 0) {show[x][y] = ret + '0';//printf("数字+1\n");//printf("count=%d\n", count);return 1;}show[x][y] = ' ';//printf("空格+1\n");int count = 1;for (int i = x - 1; i <= x + 1; i++) {for (int j = y - 1; j <= y + 1; j++) {if (i >= 1 && i <= row && j >= 1 && j <= col && show[i][j] == '*') {//printf("扩展的win++\n");count += expand(mine, show, i, j, row, col, p);//printf("内部count=%d\n", count);}}}//printf("count的数目为%d\n", count);//printf("返回总数\n");return count;}
}
//排查雷
void FindMine(char mine[ROW][COL], char show[ROW][COL], int row, int col, int easy) {int x = 0;int y = 0;int m = 0;int n = 0;int win = 0;int input = 0;int marked = 0;while (win < row * col - easy) {printf("标记雷/取消标记雷输入 1\n排查雷输入 2\n");scanf("%d", &input);switch (input) {case 1:printf("标记雷:\n");printf("请输入你要标记的坐标:\n");scanf("%d %d", &m, &n);if (m >= 1 && m <= row && n >= 1 && n <= col) {if (show[m][n] == '*') {show[m][n] = '#';if (mine[m][n] == '1' && show[m][n] == '#') {marked++;//printf("marked=%d\n", marked);//printf("标记后count=%d", win);if (marked == easy) {win = row * col - easy;}}DisplayBoard(show, row, col);}else if (show[m][n] == '#') {show[m][n] = '*';DisplayBoard(show, row, col);}else if (show[m][n] == ' ') {printf("此处不可标记\n");}}else {printf("输入坐标非法,请重新选择\n");}break;case 2:printf("排查雷\n");printf("请输入你要排查的坐标:\n");scanf("%d %d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col) {if (show[x][y] == '*') {if (mine[x][y] == '1') {printf("很遗憾,你被炸死了\n");DisplayBoard(mine, row, col);goto end;}else {//统计周围雷的个数//printf("win++\n");//win++;//int ret = get_mine_count(mine, x, y);int new = expand(mine, show, x, y, row, col, &win);win += new;//printf("win=%d\n", win);//show[x][y] = ret + '0';DisplayBoard(show, row, col);}}else {printf("该坐标已被排查,不能重复排查\n");}}else {printf("输入坐标非法,请重新选择\n");}break;default:printf("选择错误,请重新选择:\n");}}
end:if (win == row * col - easy || marked == easy) {printf("排雷成功!\n");DisplayBoard(mine, row, col);}
}
//游戏
void game(int row, int col, int easy) {srand((unsigned int)time(NULL));char mine[ROW][COL];char show[ROW][COL];//初始化棋盘InitBoard(mine, ROW, COL, '0');InitBoard(show, ROW, COL, '*');//打印棋盘//DisplayBoard(mine, row, col);//DisplayBoard(show, row, col);//布置雷SetMine(mine, row, col, easy);//DisplayBoard(mine, row, col);DisplayBoard(show, row, col);//排查雷和标记雷FindMine(mine, show, row, col, easy);
}
void saolei() {menus3();int input;int row, col, easy;do {menu();printf("请选择:\n");scanf("%d", &input);switch (input) {case 1:printf("扫雷游戏:\n");do {printf("请输入行数(1<x<10):\n");scanf("%d", &row);printf("请输入列数(1<x<10):\n");scanf("%d", &col);printf("请输入雷数:\n");scanf("%d", &easy);if (row <= 9 && col <= 9 && row > 1 && col > 1) {if (easy < row * col) {break;}else {printf("雷数要小于总格数,请重新输入:\n");}}else {printf("请按照范围输入,请重新输入:\n");}} while (1);game(row, col, easy);break;case 0:printf("退出游戏\n");break;default:printf("输入错误,请重新输入:\n");}} while (input);
}
void menus() {printf("这里是CoderYanger设计的X子棋游戏\n");printf("1. 进入游戏\n0. 退出游戏\n");
}
void menus2() {printf("游戏规则如下:\n");printf("输入坐标时不要输入“()”和“,”\n");printf("例如:(1,1)的输入格式为:1(空格)1\n");
}
//初始化棋盘
void InitBoards(char board[rOW][cOL], int row, int col) {int i = 0;int j = 0;for (i = 0; i < row; i++) {for (j = 0; j < col; j++) {board[i][j] = ' ';}}
}
//打印棋盘
void DisplayBoards(char board[rOW][cOL], int row, int col) {int i = 0;int j = 0;for (j = 1; j <= col; j++) {printf(" %d ", j);}printf("\n");for (i = 1; i <= row; i++) {printf("%d", i);for (j = 1; j <= col; j++) {printf(" %c ", board[i][j]);if (j < col) {printf("|");}}printf("\n");printf(" ");if (i < row) {for (j = 1; j <= col; j++) {printf("---");if (j < col) {printf("|");}}printf("\n");}}
}
//玩家下棋
void PlayerMove(char board[rOW][cOL], int row, int col) {int x = 0;int y = 0;do {printf("玩家下棋:\n");printf("请输入坐标:\n");scanf("%d %d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col) {if (board[x][y] == ' ') {board[x][y] = '*';break;}else {printf("此处不可下棋,请重新选择:\n");}}else {printf("输入坐标非法,请重新输入:\n");}} while (1);
}
//电脑下棋
void ComputerMove(char board[rOW][cOL], int row, int col, int part) {printf("电脑下棋:\n");int x = 0;int y = 0;int count = 0;switch (part) {case 1:do {x = rand() % row + 1;y = rand() % col + 1;if (board[x][y] == ' ') {board[x][y] = '#';break;}} while (1);break;case 2:for (int i = 1; i <= row; i++) {for (int j = 1; j <= col; j++) {if (board[i][j] == '*') {int dx[] = { -1, 1, 0, 0, -1, -1, 1, 1 };int dy[] = { 0, 0, -1, 1, -1, 1, -1, 1 };for (int k = 0; k < 8; k++) {int nx = i + dx[k];int ny = j + dy[k];if (nx >= 1 && nx <= row && ny >= 1 && ny <= col && board[nx][ny] == ' ') {int cos = rand() % (count + 1);//printf("cos=%d\n", cos);//如果找到的周围位置是空位(' '),则进行随机选择。// count 用于记录找到的空位数量。// cos 是一个随机数,用于决定是否选择当前空位。// 如果 cos 为0(概率为 1/(count + 1)),则选择这个空位。if (cos == 0) {x = nx;y = ny;}//printf("count++\n");//printf("x=%d\n", x);//printf("y=%d\n", y);count++;}}}}}if (count > 0) {board[x][y] = '#';}else {do {x = rand() % row + 1;y = rand() % col + 1;if (board[x][y] == ' ') {board[x][y] = '#';break;}} while (1);break;}}
}
//判断平局
int IsFull(char board[rOW][cOL], int row, int col) {int i = 1;int j = 1;for (i = 1; i <= row; i++) {for (j = 1; j <= col; j++) {if (board[i][j] == ' ') {return 0;}}}return 1;
}
//判断输赢
char IsWin(char board[rOW][cOL], int row, int col, int chess) {//判断行for (int i = 1; i <= row; i++) {for (int j = 1; j <= col; j++) {if (board[i][j] != ' ') {int count = 1;for (int k = j + 1; k <= col; k++) {if (board[i][k] == board[i][j]) {count++;}else {break;}}if (count == chess) {return board[i][j];}}}}//判断列for (int i = 1; i <= row; i++) {for (int j = 1; j <= col; j++) {if (board[i][j] != ' ') {int count = 1;for (int k = i + 1; k <= row; k++) {if (board[k][j] == board[i][j]) {count++;}else {break;}}if (count == chess) {return board[i][j];}}}}//判断斜着for (int i = 1; i <= row; i++) {for (int j = 1; j <= col; j++) {if (board[i][j] != ' ') {int count1 = 1;for (int k = 1; k < chess; k++) {if (i + k <= row && j + k <= col && board[i + k][j + k] == board[i][j]) {count1++;}else {break;}}if (count1 == chess) {return board[i][j];}int count2 = 1;for (int k = 1; k < chess; k++) {if (i - k >= 1 && j + k <= col && board[i - k][j + k] == board[i][j]) {count2++;}else {break;}}if (count2 == chess) {return board[i][j];}}}}if (IsFull(board, row, col)) {return 'Q';}return 'C';}
void games(int row, int col, int chess) {int part = 0;char ret = 0;srand((unsigned int)time(NULL));char board[rOW][cOL];//初始化棋盘InitBoards(board, rOW, cOL);while (1) {//选择电脑难度printf("请选择电脑难度:\n");printf("1. 1岁电脑\n2. 3岁电脑\n");scanf("%d", &part);if (part == 1 || part == 2) {break;}else {printf("输入错误,请重新输入:\n");}}//打印棋盘DisplayBoards(board, row, col);while (1) {//玩家下棋PlayerMove(board, row, col);ret = IsWin(board, row, col, chess);if (ret != 'C') {break;}DisplayBoards(board, row, col);//电脑下棋ComputerMove(board, row, col, part);ret = IsWin(board, row, col, chess);if (ret != 'C') {break;}DisplayBoards(board, row, col);}if (ret == '*') {printf("玩家赢了\n");}else if (ret == '#') {printf("电脑赢了\n");}else {printf("平局\n");}DisplayBoards(board, row, col);
}
//X子棋
void qi() {menus2();int input = 0;int row, col, chess;do {menus();printf("请输入:\n");scanf("%d", &input);switch (input) {case 1:printf("开始游戏:\n");do {printf("请选择行数(1<x<10):\n");scanf("%d", &row);printf("请选择列数(1<y<10):\n");scanf("%d", &col);printf("请选择连成一起获胜的棋数(不大于行数或列数的最小值):\n");scanf("%d", &chess);if (chess <= (row < col ? row : col) && row <= 9 && col <= 9 && row > 1 && col > 1) {break;}else {printf("请按照范围输入:\n");}} while (1);printf("%d", chess);printf("子棋游戏:\n");games(row, col, chess);break;case 0:printf("退出游戏\n");break;default:printf("选择错误,请重新选择:\n");}} while (input);
}
//总菜单
void Menu() {printf("这里是CoderYanger设计的程序\n");printf("0.退出程序 1.数字烟花(请窗口最大化观赏)\n");printf("2.扫雷游戏 3.X子棋游戏\n");printf("4.贪吃蛇游戏(用↑↓←→)\n");
}
struct kaishi {char xiaoqin[10];char xiaoyang[10];
};
int inputkaishi(struct kaishi kai) {if (strcmp(kai.xiaoqin, "黄色") == 0 && strcmp(kai.xiaoyang, "天蓝色") == 0 || strcmp(kai.xiaoqin, "huangse") == 0 && strcmp(kai.xiaoyang, "tianlanse") == 0) {return 1;}else if (strcmp(kai.xiaoqin, "猫猫") == 0 && strcmp(kai.xiaoyang, "猫猫") == 0) {return 3;}else {return 0;}
}
int main() {int ret = 0;int input = 0;int yanse = 0;struct kaishi kai;do {printf("请分别输入小美和CoderYanger喜欢的颜色(中英文均可):\n");scanf("%s %s", kai.xiaoqin, kai.xiaoyang);int cos = inputkaishi(kai);if (cos == 1) {do {Menu();printf("请选择:\n");scanf("%d", &input);if (input == 0) {printf("退出程序\n");Sleep(300);goto lol;}else if (input >= 1 && input <= 4) {switch (input) {case 1:yanhua();break;case 2:saolei();break;case 3:qi();break;case 4:tanchishe();break;}}else {printf("选择错误,请重新输入:\n");}} while (input);}else if (cos == 3) {zhuanshu();}else {printf("输入错误,请重新输入:\n");}} while (1);
lol:return 0;
}