主页
最近更新
捐赠
【Yuexingfei_qwq的原创游戏】
最后更新于 2025-05-18 12:17:43
作者
Mengchen_Yxf2013_qwq
分类
休闲·娱乐
复制 Markdown
更新文章内容
好的其实标题里的Yuexingfei_qwq指的是我。 不定时持续更新ing…… 有bug及时回复或私信我哈…… 我不会搞.gif的运行图qwq --- 更新日志: 2025.4.9 将“乌龟对对碰”的随机改得比较人性化了。 --- 本文同步发表在以下Blog: 洛谷:[https://www.luogu.com.cn/article/a0nqm3my](https://www.luogu.com.cn/article/a0nqm3my)(看不到的话可以看[https://www.luogu.me/article/a0nqm3my](https://www.luogu.me/article/a0nqm3my),记得每次点进去的时候都按一下“更新文章内容”按键) CSDN:[https://blog.csdn.net/yuexingfei_111/article/details/146573222?spm=1011.2415.3001.5331](https://blog.csdn.net/yuexingfei_111/article/details/146573222?spm=1011.2415.3001.5331) 博客园:[https://www.cnblogs.com/yxf2013/p/18802908](https://www.cnblogs.com/yxf2013/p/18802908) --- ## “.h”文件(自编头文件) game_1.h(常用游戏函数): ```cpp #include <iostream> #include <time.h> #include <stdlib.h> #include <cmath> #include <windows.h> #include <algorithm> #include <conio.h> #include <math.h> #define _cl system("cls") #define _pa system("pause") #define _sl(x) Sleep(x) #define _PI 3.1415926535897932384626 #define _ge getch() #define _Get(x) GetAsyncKeyState('x') #define _KE(x) ((GetAsyncKeyState(x) & 0x8000) ? 1:0) #define _sr srand(time(NULL)) #define _ra(a, b) (rand() % (b - a + 1)) + a using namespace std; typedef long long ll; typedef string str; using ull = unsigned long long; inline ll x_y(ll x, ll y, ll p = (1LL << 60)) {//x的y次方模p int ans_1 = 1; while (y) { if (y & 1) { (ans_1 *= x) %= p; } (x *= x) %= p; y >>= 1; } return ans_1; } inline void Sleep_write(const string &s, const int &y = 10, const string &t = "cout") {//逐字输出 for (auto i : s) { if (t == "cin") { cout << i; } else { putchar(i); } _sl(y); } } inline void setcolor(int color) {//设置颜色 HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hConsole, color); } inline void wait(int d = 100) { _sl(d); _ge; } inline char get(str s) { char ch[114514]; int l = 0; for (auto i : s) { ch[++l] = i; } while (true) { char x = getchar(); for (int i = 1; i <= l; i++) { if (x == ch[i]) { return x; } } Sleep_write("Error:输入无效\n"); _sl(2000); _pa; } } ``` --- ## 抽奖 ```cpp #include <bits/stdc++.h> #include <iostream> #include <time.h> #include <stdlib.h> #include <cmath> #include <windows.h> #include <cstdlib> #include <cstdio> #include <stdio.h> #include <algorithm> #include <conio.h> #include <string> #include <string.h> #include <math.h> #define w(x) while(x) #define cl system("cls") #define Sl(x) Sleep(x) #define f(i, a, b) for (int i = a; i <= b; i++) using namespace std; int a[10][10], money = 20, h1, h2; void init() { srand(time(0)); f(i, 1, 3) { f(j, 1, 3) { a[i][j] = rand() % 10 + 1; } } } void start() { puts("来抽奖吧!!!"); puts("yuexingfei出品,必属精品!"); puts("请按任意键开始游戏..."); getch(); cl; puts ("Loading......"); Sl(2000); cl; } void out() { cl; int r = rand() % 3 + 1, l = rand() % 3 + 1; h1 = r, h2 = l; f(i, 1, 3) { f(j, 1, 3) { if (i == r && j == l) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED); } else { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN); } printf ("%d", a[i][j]); if (j != 3) { printf ("\t"); } } printf ("\n"); } SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN); } int main() { init(); start(); w(1) { cl; if (money < 4) { puts("你的钱不够抽了!"); break; } int x; while (1) { printf ("你现在有%d元,抽一次奖4元。\n请问本次你要旋转几次?(输入123456789重置转盘)\n", money); scanf ("%d", &x); if (x <= 0 || (x > 1e7 && x != 123456789)) { cout << "Error:输入错误" << endl; } else { break; } } if (x == 123456789) { init(); } else { for (int i = 1; i <= x; i++) { out(); int t; if (i == x) { t = 3000; } else { if (i == x - 1) { t = 2000; } else { if (i == x - 2) { t = 1000; } else { if (i == x - 3) { t = 500; } else { t = 10; } } } } Sl(t); } money = money - 4 + a[h1][h2]; printf ("恭喜获得了%d元!\n", a[h1][h2]); Sl(2500); } } return 0; } ``` --- ## 躲避铁砧 ```cpp #include <bits/stdc++.h> #include <iostream> #include <windows.h> #include <cmath> #include <stdlib.h> #include <cstdio> #include <stdio.h> #include <cstdlib> #include <algorithm> #include <time.h> using namespace std; int r = -1, b = -1, rf = 3, bf = 3; int n, m; int a[10]; void init() { memset(a, 0, sizeof(a)); } void out() { system ("cls"); printf ("地图 : \n*******************\n"); for (int i = 0; i < 10; i++) { if (a[i] == 0) { if (i == r) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED); printf ("i "); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN); } else { if (i == b) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE); printf ("i "); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN); } else { printf ("/ "); } } } else { if (a[i] == 1) { if (i == r) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN); printf ("* "); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN); rf--; } if (i == b) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN); printf ("* "); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN); bf--; } if (i != b && i != r) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY); printf ("# "); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN); } } } } printf ("\n*******************\n"); printf ("红生命 : %d\n蓝生命 : %d\n", rf, bf); }//"#" : 有铁砧但没人; "*" : 有铁砧且有人; "/" : 空; "i" : 人 (对应颜色) void ran() { n = rand() % 5 + 1; printf ("落下%d个铁砧\n", n); for (int i = 1; i <= n; i++) { while (a[m] != 0) { m = rand() % 10; } a[m] = 1; } } int main() { srand(time(0)); init(); while (1) { out(); printf ("红方选择位置(1~10) : \n"); scanf ("%d", &r); r--; printf ("蓝方选择位置(1~10) : \n"); scanf ("%d", &b); b--; out(); printf ("ran...\n"); Sleep(1000); ran(); Sleep(1000); out(); Sleep(2500); init(); if (a[r] == 1) rf--; if (a[b] == 1) bf--; if (rf == 0 || bf == 0) break; } if (rf > bf) printf ("红赢了!\n"); if (rf < bf) printf ("蓝赢了!\n"); if (rf == bf) printf ("平局!\n"); return 0; } ``` --- ## MC党福利 ### 起床战争 ```cpp #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<windows.h> #include<time.h> char a[50][50] = {"OOOOOOOOOOOOOOOOOOOO", "OA O", "O H O O", "O OOOOO O", "O O R O", "O WO", "OOOOOOOOOOOOOOOOOOOO", }; struct Player { int shengming, gongji, fangyu; }; Player P1, P2; bool Aw = true, Ww = true; int x = 2, y = 2, p = 4, q = 17, n = 1, m = 1, c = 5, b = 18, sx = 30, sy = 30, gx = 30, gy = 30, fx = 30, fy = 30; void out() { system("cls"); for (int i = 0; i <= 7; i++) { for (int j = 0; j <= 20; j++) { printf ("%c", a[i][j]); } switch (i) { case 0: printf (" H:玩家1(WASD移动)"); break; case 1: printf (" A:H的床"); break; case 2: printf (" R:玩家2(IJKL移动)"); break; case 3: printf (" W:R的床"); break; case 4: printf (" O:墙壁"); break; case 5: printf (" N:增加攻击"); break; case 6: printf (" F:增加防御"); break; case 7: printf (" S:增加生命"); break; } printf ("\n"); } printf ("H:\n生命:%d\n攻击:%d\n防御:%d\n\n", P1.shengming, P1.gongji, P1.fangyu); printf ("R:\n生命:%d\n攻击:%d\n防御:%d\n\n", P2.shengming, P2.gongji, P2.fangyu); if (Aw) { printf ("H床:YES\n"); } else { printf ("H床:NO\n"); } if (Ww) { printf ("R床:YES\n"); } else { printf ("R床:NO\n"); } } void SetFont(int size) { CONSOLE_FONT_INFOEX cfi; cfi.cbSize = sizeof cfi; cfi.nFont = 0; cfi.dwFontSize.X = 0; cfi.dwFontSize.Y = size;//设置字体大小 cfi.FontFamily = FF_DONTCARE; cfi.FontWeight = FW_NORMAL; //字体粗细 wcscpy_s(cfi.FaceName, L"宋体");//设置字体 SetCurrentConsoleFontEx(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &cfi); HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_FONT_INFO consoleCurrentFont; GetCurrentConsoleFont(handle, FALSE, &consoleCurrentFont); } void xuan() { for (int i = 1; i <= 2; i++) { if (i == 1) { printf ("请H选择!(输入前面的序号)\n"); } else { printf ("请R选择!(输入前面的序号)\n"); } printf ("1.战士\n生命:200\n攻击:50\n防御:50\n"); printf ("2.铠甲人\n生命:150\n攻击:40\n防御:80\n"); printf ("3.X原型机\n生命:250\n攻击:40\n防御:40\n"); printf ("4.H原型机\n生命:130\n攻击:45\n防御:85\n"); printf ("5.X束光机\n生命:135\n攻击:65\n防御:40\n"); int d; scanf ("%d", &d); switch (d) { case 1: if (i == 1) { P1.shengming = 200; P1.gongji = 50; P1.fangyu = 50; } else { P2.shengming = 200; P2.gongji = 50; P2.fangyu = 50; } break; case 2: if (i == 1) { P1.shengming = 150; P1.gongji = 40; P1.fangyu = 80; } else { P2.shengming = 150; P2.gongji = 40; P2.fangyu = 80; } break; case 3: if (i == 1) { P1.shengming = 250; P1.gongji = 40; P1.fangyu = 40; } else { P2.shengming = 250; P2.gongji = 40; P2.fangyu = 40; } break; case 4: if (i == 1) { P1.shengming = 130; P1.gongji = 45; P1.fangyu = 85; } else { P2.shengming = 130; P2.gongji = 45; P2.fangyu = 85; } break; case 5: if (i == 1) { P1.shengming = 135; P1.gongji = 65; P1.fangyu = 40; } else { P2.shengming = 135; P2.gongji = 65; P2.fangyu = 40; } break; } system("cls"); } } int zhan() { system("cls"); printf ("交战中......\n"); Sleep(2500); int P1s = P1.shengming, P1g = P1.gongji, P1f = P1.fangyu, P2s = P2.shengming, P2g = P2.gongji, P2f = P2.fangyu; while (1) { if (P2g - P1f > 0) { P1s = P1s - (P2g - P1f); } if (P1g - P2f > 0) { P2s = P2s - (P1g - P2f); } if (P1.gongji <= P2.fangyu && P1.fangyu >= P2.gongji) { printf ("无法交战!\n"); Sleep(1000); a[p][q] = ' '; p = 4, q = 17; a[p][q] = 'R'; a[x][y] = ' '; x = 2, y = 2; a[x][y] = 'H'; return 100; } if (P1s <= 0 && P2s > 0) { printf ("H狗带了!\n"); Sleep(5000); if (Aw) { a[x][y] = ' '; x = 2, y = 2; a[x][y] = 'H'; if (p == x && q == y) { p = 5, q = 9; a[p][q] = 'R'; } return 99; } else { return 1; } } if (P2s <= 0 && P1s > 0) { printf ("R狗带了!\n"); Sleep(5000); if (Ww) { a[p][q] = ' '; p = 4, q = 17; a[p][q] = 'R'; if (p == x && q == y) { x = 1, y = 9; a[x][y] = 'H'; } return 99; } else { return 2; } } if (P2s <= 0 && P1s <= 0) { printf ("都狗带了!\n"); Sleep(5000); if (Ww && Aw) { a[p][q] = ' '; p = 4, q = 17; a[p][q] = 'R'; a[x][y] = ' '; x = 2, y = 2; a[x][y] = 'H'; return 99; } if (Ww && !Aw) { return 2; } if (!Ww && Aw) { return 1; } if (!Ww && !Aw) { return 3; } } } } void win(int g) { if (g == 1) { printf("\'R\' 赢了!\n"); Sleep(5000); system("pause"); } else { if (g == 2) { printf("\'H\' 赢了!\n"); Sleep(5000); system("pause"); } else { printf("平局!\n"); Sleep(5000); system("pause"); } } } void rans(char cha) { int f = rand() % 2; a[sx][sy] = cha; sx = 35, sy = 35; switch (f) { case 0: sx = 5, sy = 1; break; case 1: sx = 1, sy = 18; break; } a[sx][sy] = 'S'; } void rang(char cha) { int ff = rand() % 3; a[gx][gy] = cha; gx = 35, gy = 35; switch (ff) { case 0: gx = 2, gy = 15; break; case 1: gx = 2, gy = 8; break; case 2: gx = 4, gy = 10; break; } a[gx][gy] = 'N'; } void ranf(char cha) { int fff = rand() % 3; a[fx][fy] = cha; fx = 35, fy = 35; switch (fff) { case 0: fx = 2, fy = 10; break; case 1: fx = 4, fy = 4; break; case 2: fx = 4, fy = 8; break; } a[fx][fy] = 'F'; } int main() { system("title 起床战争"); SetFont(25); srand(time(NULL)); system("color 0a"); xuan(); HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_CURSOR_INFO CursorInfo; GetConsoleCursorInfo(handle, &CursorInfo);//获取控制台光标信息 CursorInfo.bVisible = false; //隐藏控制台光标 SetConsoleCursorInfo(handle, &CursorInfo);//设置控制台光标状态 out(); ranf(' '); rang(' '); rans(' '); while (1) { if (GetAsyncKeyState('S')) { if (a[x + 1][y] != 'O') { a[x][y] = ' '; x++; a[x][y] = 'H'; } } if (GetAsyncKeyState('D')) { if (a[x][y + 1] != 'O') { a[x][y] = ' '; y++; a[x][y] = 'H'; } } if (GetAsyncKeyState('A')) { if (a[x][y - 1] != 'O') { a[x][y] = ' '; y--; a[x][y] = 'H'; } } if (GetAsyncKeyState('W')) { if (a[x - 1][y] != 'O') { a[x][y] = ' '; x--; a[x][y] = 'H'; } } if (GetAsyncKeyState('K')) { if (a[p + 1][q] != 'O') { a[p][q] = ' '; p++; a[p][q] = 'R'; } } if (GetAsyncKeyState('L')) { if (a[p][q + 1] != 'O') { a[p][q] = ' '; q++; a[p][q] = 'R'; } } if (GetAsyncKeyState('J')) { if (a[p][q - 1] != 'O') { a[p][q] = ' '; q--; a[p][q] = 'R'; } } if (GetAsyncKeyState('I')) { if (a[p - 1][q] != 'O') { a[p][q] = ' '; p--; a[p][q] = 'R'; } } if (x == p && y == q) { int jie = zhan(); if (jie == 1) { win(1); break; } else { if (jie == 2) { win(2); break; } else { if (jie < 99) { win(3); break; } } } } if (x == c && y == b) { a[c][b] = ' '; c = 48, b = 49; Ww = false; } if (p == n && q == m) { a[n][m] = ' '; n = 39, m = 35; Aw = false; } if (c == p && b == q && Ww) { a[c][b] = 'R'; while (1) { if (!(c == p && b == q)) a[c][b] = 'W'; break; } } else { a[c][b] = 'W'; } if (n == x && m == y && Aw) { a[n][m] = 'H'; while (1) { if (!(n == x && m == y)) a[n][m] = 'A'; break; } } else { a[n][m] = 'A'; } if (sx == x && sy == y) { P1.shengming += 5; Sleep(10); rans('H'); } if (sx == p && sy == q) { P2.shengming += 5; Sleep(10); rans('R'); } if (gx == x && gy == y) { P1.gongji += 5; rang('H'); } if (gx == p && gy == q) { P2.gongji += 5; rang('R'); } if (fx == x && fy == y) { P1.fangyu += 5; ranf('H'); } if (fx == p && fy == q) { P2.fangyu += 5; ranf('R'); } out(); } return 0; } ``` ### 水晶战争 ```cpp #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<windows.h> #include<time.h> char a[50][50] = {"OOOOOOOOOOOOOOOOOOOO", "OA O", "O H O O", "O OOOOO O", "O O R O", "O WO", "OOOOOOOOOOOOOOOOOOOO", }; struct Player { int shengming, gongji, fangyu; }; Player P1, P2; bool Aw = true, Ww = true, Z = false; int x = 2, y = 2, p = 4, q = 17, n = 1, m = 1, c = 5, b = 18, sx = 30, sy = 30, gx = 30, gy = 30, fx = 30, fy = 30, A = 1000, W = 1000; void out() { system("cls"); for (int i = 0; i <= 7; i++) { for (int j = 0; j <= 20; j++) { printf ("%c", a[i][j]); } switch (i) { case 0: printf (" H:玩家1(WASD移动)"); break; case 1: printf (" A:H的水晶"); break; case 2: printf (" R:玩家2(IJKL移动)"); break; case 3: printf (" W:R的水晶"); break; case 4: printf (" O:墙壁"); break; case 5: printf (" N:增加攻击"); break; case 6: printf (" F:增加防御"); break; case 7: printf (" S:增加生命(也可增加水晶血量)"); break; } printf ("\n"); } printf ("H:\n生命:%d\n攻击:%d\n防御:%d\n\n", P1.shengming, P1.gongji, P1.fangyu); printf ("R:\n生命:%d\n攻击:%d\n防御:%d\n\n", P2.shengming, P2.gongji, P2.fangyu); if (Aw) { printf ("H水晶:YES 血量:%d\n", A); } else { printf ("H水晶:NO\n"); } if (Ww) { printf ("R水晶:YES 血量:%d\n", W); } else { printf ("R水晶:NO\n"); } } void SetFont(int size) { CONSOLE_FONT_INFOEX cfi; cfi.cbSize = sizeof cfi; cfi.nFont = 0; cfi.dwFontSize.X = 0; cfi.dwFontSize.Y = size;//设置字体大小 cfi.FontFamily = FF_DONTCARE; cfi.FontWeight = FW_NORMAL; //字体粗细 wcscpy_s(cfi.FaceName, L"宋体");//设置字体 SetCurrentConsoleFontEx(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &cfi); HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_FONT_INFO consoleCurrentFont; GetCurrentConsoleFont(handle, FALSE, &consoleCurrentFont); } void xuan() { for (int i = 1; i <= 2; i++) { if (i == 1) { printf ("请H选择你的职业!(输入前面的序号)\n"); } else { printf ("请R选择你的职业!(输入前面的序号)\n"); } printf ("1.战士\n生命:200\n攻击:50\n防御:50\n"); printf ("2.铠甲人\n生命:150\n攻击:40\n防御:80\n"); printf ("3.X原型机\n生命:250\n攻击:40\n防御:40\n"); printf ("4.H原型机\n生命:130\n攻击:45\n防御:85\n"); printf ("5.X束光机\n生命:135\n攻击:65\n防御:40\n"); int d; scanf ("%d", &d); switch (d) { case 1: if (i == 1) { P1.shengming = 200; P1.gongji = 50; P1.fangyu = 50; } else { P2.shengming = 200; P2.gongji = 50; P2.fangyu = 50; } break; case 2: if (i == 1) { P1.shengming = 150; P1.gongji = 40; P1.fangyu = 80; } else { P2.shengming = 150; P2.gongji = 40; P2.fangyu = 80; } break; case 3: if (i == 1) { P1.shengming = 250; P1.gongji = 40; P1.fangyu = 40; } else { P2.shengming = 250; P2.gongji = 40; P2.fangyu = 40; } break; case 4: if (i == 1) { P1.shengming = 130; P1.gongji = 45; P1.fangyu = 85; } else { P2.shengming = 130; P2.gongji = 45; P2.fangyu = 85; } break; case 5: if (i == 1) { P1.shengming = 135; P1.gongji = 65; P1.fangyu = 40; } else { P2.shengming = 135; P2.gongji = 65; P2.fangyu = 40; } break; } system("cls"); } } int zhan() {//这个函数我现在再倒回来看都觉得不是我的实力能写得出来的 Z = true; system("cls"); printf ("交战中......\n"); Sleep(2500); int P1s = P1.shengming, P1g = P1.gongji, P1f = P1.fangyu, P2s = P2.shengming, P2g = P2.gongji, P2f = P2.fangyu; while (1) { if (P2g - P1f > 0) { P1s = P1s - (P2g - P1f); } if (P1g - P2f > 0) { P2s = P2s - (P1g - P2f); } if (P1.gongji <= P2.fangyu && P1.fangyu >= P2.gongji) { printf ("无法交战!\n"); Sleep(1000); a[p][q] = ' '; p = 4, q = 17; a[p][q] = 'R'; a[x][y] = ' '; x = 2, y = 2; a[x][y] = 'H'; Z = false; return 100; } if (P1s <= 0 && P2s > 0) { printf ("H狗带了!\n"); Sleep(5000); if (Aw) { a[x][y] = ' '; x = 2, y = 2; a[x][y] = 'H'; if (p == x && q == y) { p = 5, q = 9; a[p][q] = 'R'; } Z = false; return 99; } else { Z = false; return 1; } } if (P2s <= 0 && P1s > 0) { printf ("R狗带了!\n"); Sleep(5000); if (Ww) { a[p][q] = ' '; p = 4, q = 17; a[p][q] = 'R'; if (p == x && q == y) { x = 1, y = 9; a[x][y] = 'H'; } Z = false; return 99; } else { Z = false; return 2; } } if (P2s <= 0 && P1s <= 0) { printf ("都狗带了!\n"); Sleep(5000); if (Ww && Aw) { a[p][q] = ' '; p = 4, q = 17; a[p][q] = 'R'; a[x][y] = ' '; x = 2, y = 2; a[x][y] = 'H'; Z = false; return 99; } if (Ww && !Aw) { Z = false; return 2; } if (!Ww && Aw) { Z = false; return 1; } if (!Ww && !Aw) { Z = false; return 3; } } } } void win(int g) { if (g == 1) { printf("\'R\' 赢了!\n"); Sleep(5000); system("pause"); } else { if (g == 2) { printf("\'H\' 赢了!\n"); Sleep(5000); system("pause"); } else { printf("平局!\n"); Sleep(5000); system("pause"); } } } void rans(char cha) { int f = rand() % 2; a[sx][sy] = cha; sx = 35, sy = 35; switch (f) { case 0: sx = 5, sy = 1; break; case 1: sx = 1, sy = 18; break; } a[sx][sy] = 'S'; } void rang(char cha) { int ff = rand() % 3; a[gx][gy] = cha; gx = 35, gy = 35; switch (ff) { case 0: gx = 2, gy = 15; break; case 1: gx = 2, gy = 8; break; case 2: gx = 4, gy = 10; break; } a[gx][gy] = 'N'; } void ranf(char cha) { int fff = rand() % 3; a[fx][fy] = cha; fx = 35, fy = 35; switch (fff) { case 0: fx = 2, fy = 10; break; case 1: fx = 4, fy = 4; break; case 2: fx = 4, fy = 8; break; } a[fx][fy] = 'F'; } int main() { system("title 水晶战争"); SetFont(25); srand(time(NULL)); system("color 0a"); xuan(); out(); ranf(' '); rang(' '); rans(' '); while (1) { if (GetAsyncKeyState('S')) { if (a[x + 1][y] != 'O') { a[x][y] = ' '; x++; a[x][y] = 'H'; } } if (GetAsyncKeyState('D')) { if (a[x][y + 1] != 'O') { a[x][y] = ' '; y++; a[x][y] = 'H'; } } if (GetAsyncKeyState('A')) { if (a[x][y - 1] != 'O') { a[x][y] = ' '; y--; a[x][y] = 'H'; } } if (GetAsyncKeyState('W')) { if (a[x - 1][y] != 'O') { a[x][y] = ' '; x--; a[x][y] = 'H'; } } if (GetAsyncKeyState('K')) { if (a[p + 1][q] != 'O') { a[p][q] = ' '; p++; a[p][q] = 'R'; } } if (GetAsyncKeyState('L')) { if (a[p][q + 1] != 'O') { a[p][q] = ' '; q++; a[p][q] = 'R'; } } if (GetAsyncKeyState('J')) { if (a[p][q - 1] != 'O') { a[p][q] = ' '; q--; a[p][q] = 'R'; } } if (GetAsyncKeyState('I')) { if (a[p - 1][q] != 'O') { a[p][q] = ' '; p--; a[p][q] = 'R'; } } if (x == p && y == q) { int jie = zhan(); if (jie == 1) { win(1); break; } else { if (jie == 2) { win(2); break; } else { if (jie < 99) { win(3); break; } } } } if (x == c && y == b && !Z) { W -= P1.gongji; Sleep(500); if (W <= 0) { a[c][b] = ' '; c = 48, b = 49; Ww = false; } } if (p == n && q == m && !Z) { A -= P2.gongji; Sleep(500); if (A <= 0) { a[n][m] = ' '; n = 48, m = 49; Aw = false; } } if (c == p && b == q && Ww) { a[c][b] = 'R'; while (1) { if (!(c == p && b == q)) a[c][b] = 'W'; break; } } else { a[c][b] = 'W'; } if (n == x && m == y && Aw) { a[n][m] = 'H'; while (1) { if (!(n == x && m == y)) a[n][m] = 'A'; break; } } else { a[n][m] = 'A'; } if (sx == x && sy == y) { P1.shengming += 5; A += 2; Sleep(10); rans('H'); } if (sx == p && sy == q) { P2.shengming += 5; W += 2; Sleep(10); rans('R'); } if (gx == x && gy == y) { P1.gongji += 5; rang('H'); } if (gx == p && gy == q) { P2.gongji += 5; rang('R'); } if (fx == x && fy == y) { P1.fangyu += 5; ranf('H'); } if (fx == p && fy == q) { P2.fangyu += 5; ranf('R'); } out(); } return 0; } ``` ### 攻守战 ```cpp #include <bits/stdc++.h> #include <iostream> #include <time.h> #include <stdlib.h> #include <cmath> #include <windows.h> #include <cstdlib> #include <cstdio> #include <stdio.h> #include <algorithm> #include <conio.h> #include <string> #include <string.h> #include <math.h> #define w(x) while(x) #define cl system("cls") #define Sl(x) Sleep(x) using namespace std; char a[50][50] = {"OOOOOOOOOOOOOOOOOOOOOOOOO", "O WO", "O O O", "OH OOOOO R WO", "O O O", "O WO", "OOOOOOOOOOOOOOOOOOOOOOOOO", }; struct Player { int shengming, gongji, fangyu; }; Player P1, P2; bool W1 = true, W2 = true, W3 = true; int x = 3, y = 1, p = 3, q = 21, n = 1, m = 23, c = 3, b = 23, f = 5, j = 23, sx = 30, sy = 30, gx = 30, gy = 30, fx = 30, fy = 30; int ttt; int t = 100000; void out() { cl; for (int i = 0; i <= 7; i++) { for (int j = 0; j <= 24; j++) { printf ("%c", a[i][j]); } printf (" "); switch (i) { case 0: printf ("H:玩家1(WASD移动)"); break; case 1: printf ("R:玩家2(IJKL移动)"); break; case 2: printf ("W:R的床"); break; case 3: printf ("O:墙壁"); break; case 4: printf ("N:增加攻击"); break; case 5: printf ("F:增加防御"); break; case 6: printf ("S:增加生命"); break; } printf ("\n"); } printf ("H:\n生命:%d\n攻击:%d\n防御:%d\n\n", P1.shengming, P1.gongji, P1.fangyu); printf ("R:\n生命:%d\n攻击:%d\n防御:%d\n\n", P2.shengming, P2.gongji, P2.fangyu); if (W1) { printf ("床W1:YES\n"); } else { printf ("床W1:NO\n"); } if (W2) { printf ("床W2:YES\n"); } else { printf ("床W2:NO\n"); } if (W3) { printf ("床W3:YES\n"); } else { printf ("床W3:NO\n"); } printf ("剩余时间:%dms\n", t - (int)clock() + ttt); } void SetFont(int size) { CONSOLE_FONT_INFOEX cfi; cfi.cbSize = sizeof cfi; cfi.nFont = 0; cfi.dwFontSize.X = 0; cfi.dwFontSize.Y = size;//设置字体大小 cfi.FontFamily = FF_DONTCARE; cfi.FontWeight = FW_NORMAL; //字体粗细 wcscpy_s(cfi.FaceName, L"宋体");//设置字体 SetCurrentConsoleFontEx(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &cfi); HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_FONT_INFO consoleCurrentFont; GetCurrentConsoleFont(handle, FALSE, &consoleCurrentFont); } void xuan() { for (int i = 1; i <= 2; i++) { if (i == 1) { printf ("请H选择职业!(输入前面的序号)\n"); } else { printf ("请R选择职业!(输入前面的序号)\n"); } printf ("1.战士\n生命:200\n攻击:50\n防御:50\n"); printf ("2.铠甲人\n生命:150\n攻击:40\n防御:80\n"); printf ("3.X原型机\n生命:250\n攻击:40\n防御:40\n"); printf ("4.H原型机\n生命:130\n攻击:45\n防御:85\n"); printf ("5.X束光机\n生命:135\n攻击:65\n防御:40\n"); int d; scanf ("%d", &d); switch (d) { case 1: if (i == 1) { P1.shengming = 200; P1.gongji = 50; P1.fangyu = 50; } else { P2.shengming = 200; P2.gongji = 50; P2.fangyu = 50; } break; case 2: if (i == 1) { P1.shengming = 150; P1.gongji = 40; P1.fangyu = 80; } else { P2.shengming = 150; P2.gongji = 40; P2.fangyu = 80; } break; case 3: if (i == 1) { P1.shengming = 250; P1.gongji = 40; P1.fangyu = 40; } else { P2.shengming = 250; P2.gongji = 40; P2.fangyu = 40; } break; case 4: if (i == 1) { P1.shengming = 130; P1.gongji = 45; P1.fangyu = 85; } else { P2.shengming = 130; P2.gongji = 45; P2.fangyu = 85; } break; case 5: if (i == 1) { P1.shengming = 135; P1.gongji = 65; P1.fangyu = 40; } else { P2.shengming = 135; P2.gongji = 65; P2.fangyu = 40; } break; } system("cls"); } } int zhan() { system("cls"); printf ("交战中......\n"); Sleep(2500); int P1s = P1.shengming, P1g = P1.gongji, P1f = P1.fangyu, P2s = P2.shengming, P2g = P2.gongji, P2f = P2.fangyu; while (1) { if (P2g - P1f > 0) { P1s = P1s - (P2g - P1f); } if (P1g - P2f > 0) { P2s = P2s - (P1g - P2f); } if (P1.gongji <= P2.fangyu && P1.fangyu >= P2.gongji) { printf ("无法交战!\n"); Sl(1000); a[p][q] = ' '; p = 3, q = 21; a[p][q] = 'R'; a[x][y] = ' '; x = 3, y = 1; a[x][y] = 'H'; return 100; } if (P1s <= 0 && P2s > 0) { printf ("H狗带了!\n"); Sl(3000); a[x][y] = ' '; x = 3, y = 1; a[x][y] = 'H'; } if (P2s <= 0 && P1s > 0) { printf ("R狗带了!\n"); Sl(3000); if (W1 || W2 || W3) { a[p][q] = ' '; p = 4, q = 17; a[p][q] = 'R'; if (p == x && q == y) { x = 3, y = 9; a[x][y] = 'H'; } return 99; } else { return 2; } } if (P2s <= 0 && P1s <= 0) { printf ("都狗带了!\n"); Sl(3000); if (W1 || W2 || W3) { a[x][y] = ' '; x = 3, y = 1; a[x][y] = 'H'; a[p][q] = ' '; p = 4, q = 17; a[p][q] = 'R'; if (p == x && q == y) { a[x][y] = ' '; x = 3, y = 9; a[x][y] = 'H'; } return 99; } else { return 2; } } } } void win(int g) { if (g == 1) { printf("R赢了!\n"); Sl(3000); system("pause"); } else { printf("H赢了!\n"); Sl(3000); system("pause"); } } void rans(char cha) { int f = rand() % 2; a[sx][sy] = cha; sx = 35, sy = 35; switch (f) { case 0: sx = 5, sy = 1; break; case 1: sx = 1, sy = 18; break; } a[sx][sy] = 'S'; } void rang(char cha) { int ff = rand() % 3; a[gx][gy] = cha; gx = 35, gy = 35; switch (ff) { case 0: gx = 2, gy = 15; break; case 1: gx = 2, gy = 8; break; case 2: gx = 4, gy = 10; break; } a[gx][gy] = 'N'; } void ranf(char cha) { int fff = rand() % 3; a[fx][fy] = cha; fx = 35, fy = 35; switch (fff) { case 0: fx = 2, fy = 10; break; case 1: fx = 4, fy = 4; break; case 2: fx = 4, fy = 8; break; } a[fx][fy] = 'F'; } void Start() { puts("欢迎来玩攻守战!!!"); Sl(1000); puts("yuexingfei出品,必属精品!"); Sl(1000); puts("请按任意键开始游戏..."); getch(); cl; puts ("Loading......"); Sl(2000); cl; int o = 0; for (int i = 1; i <= 200; i++) { printf ("已加载%d个文件,进度%d", i, o); cout << "%\n"; if (i % 2 == 0) { o++; } Sl(1); if (rand() % 15 == 9) { Sl(4); } cl; } } void SetConsoleWindowSize( SHORT width, SHORT height ) { HANDLE hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE); SMALL_RECT wrt = { 0, 0, width - 1, height - 1 }; SetConsoleWindowInfo( hStdOutput, TRUE, &wrt ); COORD coord = { width, height }; SetConsoleScreenBufferSize( hStdOutput, coord ); } int main() { system("title 攻守战"); SetFont(25); SetConsoleWindowSize(53, 25); srand(time(NULL)); system("color 0a"); Start(); cl; printf ("规则:\n1.有时间限制(100s)\n2.攻方在规定时间内破坏守方的三个床就算赢\n3.守方要在规定时间内守住三个床,只要规定时间结束后还有床没有被攻方破坏就算赢\n"); system("pause"); cl; xuan(); HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_CURSOR_INFO CursorInfo; GetConsoleCursorInfo(handle, &CursorInfo);//获取控制台光标信息 CursorInfo.bVisible = false; //隐藏控制台光标 SetConsoleCursorInfo(handle, &CursorInfo);//设置控制台光标状态 ttt = clock(); out(); ranf(' '); rang(' '); rans(' '); w(1) { if (GetAsyncKeyState('S')) { if (a[x + 1][y] != 'O') { a[x][y] = ' '; x++; a[x][y] = 'H'; } } if (GetAsyncKeyState('D')) { if (a[x][y + 1] != 'O') { a[x][y] = ' '; y++; a[x][y] = 'H'; } } if (GetAsyncKeyState('A')) { if (a[x][y - 1] != 'O') { a[x][y] = ' '; y--; a[x][y] = 'H'; } } if (GetAsyncKeyState('W')) { if (a[x - 1][y] != 'O') { a[x][y] = ' '; x--; a[x][y] = 'H'; } } if (GetAsyncKeyState('K')) { if (a[p + 1][q] != 'O') { a[p][q] = ' '; p++; a[p][q] = 'R'; } } if (GetAsyncKeyState('L')) { if (a[p][q + 1] != 'O') { a[p][q] = ' '; q++; a[p][q] = 'R'; } } if (GetAsyncKeyState('J')) { if (a[p][q - 1] != 'O') { a[p][q] = ' '; q--; a[p][q] = 'R'; } } if (GetAsyncKeyState('I')) { if (a[p - 1][q] != 'O') { a[p][q] = ' '; p--; a[p][q] = 'R'; } } if (clock() - ttt >= 100000) { if (W1 || W2 || W3) { win(2); } else { win(1); } break; } if (x == p && y == q) { int jie = zhan(); if (jie == 2) { win(2); break; } } if (x == n && y == m) { W1 = false; n = 48, m = 49; } if (x == c && y == b) { W2 = false; c = 48, b = 49; } if (x == f && y == j) { W3 = false; f = 48, j = 49; } if (p == n && q == m && W1) { a[n][m] = 'R'; while (1) { if (!(p == n && q == m)) a[n][m] = 'W'; break; } } else { a[n][m] = 'W'; } if (p == c && q == b && W2) { a[c][b] = 'R'; while (1) { if (!(p == c && q == b)) a[c][b] = 'W'; break; } } else { a[c][b] = 'W'; } if (p == f && q == j && W3) { a[f][j] = 'R'; while (1) { if (!(p == f && q == j)) a[f][j] = 'W'; break; } } else { a[f][j] = 'W'; } if (sx == x && sy == y) { P1.shengming += 5; Sleep(10); rans('H'); } if (sx == p && sy == q) { P2.shengming += 5; Sleep(10); rans('R'); } if (gx == x && gy == y) { P1.gongji += 5; rang('H'); } if (gx == p && gy == q) { P2.gongji += 5; rang('R'); } if (fx == x && fy == y) { P1.fangyu += 5; ranf('H'); } if (fx == p && fy == q) { P2.fangyu += 5; ranf('R'); } out(); } return 0; } ``` --- ## 画图 ### turtle版 ```cpp #include <turtle.h> #include <conio.h> #include <iostream> #include <windows.h> #define _cl system("cls") #define _pa system("pause") #define Get(x) GetAsyncKeyState(x) #define inf 1e9 using namespace std; typedef long long ll; typedef string str; inline void Sleep_write(const string &x, const int &y = 10) { for (int i = 0; i < (int)x.length(); i++) { putchar(x[i]); ege::api_sleep(y); } } inline void wait(const int &d = 100) { ege::api_sleep(d); getchar(); } inline void welcome(void) { Sleep_write("画图turtle版\n"); wait(); Sleep_write("作者:Yuexingfei_qwq\n"); wait(); Sleep_write("版权归Yuexingfei_qwq所有,恶意搬运者将会受到惩罚\n"); wait(); Sleep_write("开发者联系方式(洛谷):https://luogu.com.cn/user/1125939,用户名Yuexingfei_qwq||https://luogu.com.cn/user/1423517,用户名Mengchen_Yxf2013_qwq(Yuexingfei_qwq小号)\n"); wait(); Sleep_write("操控turtle时请使用英文输入法\n"); wait(); Sleep_write("出现bug时,请按下P键解除\n"); wait(); Sleep_write("使用教程在代码和代码末尾里的注释中都有,请自行查看\n"); wait(); _pa; _cl; } inline char get(str s) { char ch[114514]; int l = 0; for (auto i : s) { ch[++l] = i; } while (true) { str t; cin >> t; for (int i = 1; i <= l; i++) { if (t[0] == ch[i]) { return t[0]; } } Sleep_write("Error:输入无效\n"); ege::api_sleep(1000); _pa; } } inline void init(void) { char ch; Sleep_write("是否设置画板大小?(Y/N)\n"); ch = tolower(get("YyNn")); int n, m; if (ch == 'y') { Sleep_write("请输入画板的长和宽\n"); cin >> n >> m; } else { n = 800, m = 600; } _cl; Sleep_write("是否设置turtle初始坐标?(Y/N)\n"); ch = tolower(get("YyNn")); int x = inf, y = -inf; if (ch == 'y') { Sleep_write("请输入turtle初始坐标\n"); cin >> x >> y; } _cl; Sleep_write("是否设置画布标题?(Y/N)\n"); ch = tolower(get("YyNn")); char s[1919810]; int f = 0; if (ch == 'y') { f = 1; Sleep_write("请输入画布标题\n"); cin >> s; } _cl; initWorld(n, m); if (x != inf && y != -inf) { setOrigin(x, y); } if (f) { setCaption(s); } } int fo = 10, an = 30, ps = 1;//fo:步数 an:角度 ps:画笔粗细 int panc = 0, bakc = 15;//笔颜色和背景颜色 int isjisu = 0, sudu = 100;//1急速 0非 inline void SetPen(void) { if (panc == 0) { setPenColor(ege::BLACK); } if (panc == 1) { setPenColor(ege::BLUE); } if (panc == 2) { setPenColor(ege::GREEN); } if (panc == 3) { setPenColor(ege::CYAN); } if (panc == 4) { setPenColor(ege::RED); } if (panc == 5) { setPenColor(ege::MAGENTA); } if (panc == 6) { setPenColor(ege::BROWN); } if (panc == 7) { setPenColor(ege::LIGHTGRAY); } if (panc == 8) { setPenColor(ege::DARKGRAY); } if (panc == 9) { setPenColor(ege::LIGHTBLUE); } if (panc == 10) { setPenColor(ege::LIGHTGREEN); } if (panc == 11) { setPenColor(ege::LIGHTCYAN); } if (panc == 12) { setPenColor(ege::LIGHTRED); } if (panc == 13) { setPenColor(ege::LIGHTMAGENTA); } if (panc == 14) { setPenColor(ege::YELLOW); } if (panc == 15) { setPenColor(ege::WHITE); } } inline void SetBack(void) { if (bakc == 0) { setBackgroundColor(ege::BLACK); } if (bakc == 1) { setBackgroundColor(ege::BLUE); } if (bakc == 2) { setBackgroundColor(ege::GREEN); } if (bakc == 3) { setBackgroundColor(ege::CYAN); } if (bakc == 4) { setBackgroundColor(ege::RED); } if (bakc == 5) { setBackgroundColor(ege::MAGENTA); } if (bakc == 6) { setBackgroundColor(ege::BROWN); } if (bakc == 7) { setBackgroundColor(ege::LIGHTGRAY); } if (bakc == 8) { setBackgroundColor(ege::DARKGRAY); } if (bakc == 9) { setBackgroundColor(ege::LIGHTBLUE); } if (bakc == 10) { setBackgroundColor(ege::LIGHTGREEN); } if (bakc == 11) { setBackgroundColor(ege::LIGHTCYAN); } if (bakc == 12) { setBackgroundColor(ege::LIGHTRED); } if (bakc == 13) { setBackgroundColor(ege::LIGHTMAGENTA); } if (bakc == 14) { setBackgroundColor(ege::YELLOW); } if (bakc == 15) { setBackgroundColor(ege::WHITE); } } signed main(void) { welcome(); init(); while (ege::is_run()) { if (Get('P')) {//debug setImmediate(1); lt(360); setImmediate(0); setSpeed(sudu); } if (Get('W')) {//前进 fd(fo); } if (Get('S')) {//后退 bk(fo); } if (Get('A')) {//左转 lt(an); } if (Get('D')) {//右转 rt(an); } if (Get('Q')) {//落笔 pd(); } if (Get('E')) {//抬笔 pu(); } if (Get('R')) {//重置 clear(); } if (Get('F')) {//回到起始点 home(); } if (Get('Z')) {//画笔粗细+1 ps += 1; setPenSize(ps); } if (Get('X')) {//画笔粗细-1 ps -= 1; ps = std::max(1, ps); setPenSize(ps); } if (Get('T')) {//速度+1 sudu += 1; setSpeed(sudu); } if (Get('G')) {//速度-1 sudu -= 1; sudu = std::max(1, sudu); setSpeed(sudu); } if (Get('V')) {//隐藏 hide(); } if (Get('Y')) {//显示 show(); } if (Get('U')) {//旋转角度+1 an += 1; an = std::min(an, 360); } if (Get('J')) {//旋转角度-1 an -= 1; an = std::max(an, 0); } if (Get('N')) {//步数+1 fo += 10; } if (Get('M')) {//步数-1 fo -= 10; fo = std::max(fo, 1); } if (Get('C')) {//将画笔颜色改为下一个 (panc += 1) %= 16; SetPen(); } if (Get('H')) {//将背景颜色改为下一个 (bakc += 1) %= 16; SetBack(); } if (Get('B')) {//设置是否急速 isjisu = 1 - isjisu; if (isjisu) { setImmediate(isjisu); } else { setSpeed(sudu); } } } pause(); return 0; } /* 操作指令 initWorld(int width, int height, double scale = 1.0):生成画布,设置画布大小(第三个参数为放大倍数,前两个参数均会乘上它;没填时默认为1.0) setOrigin(int x, int y):设置乌龟起始点 setCaption(const char* title):改变画布标题(参数为一个string,需用双引号,而不是char) W:fd(double step):前进step步 S:bk(double step):后退step步 A:lt(double step):左转step° D:rt(double step):右转step° Q:pd():落笔 E:pu():抬笔 R:clear():重置 F:home():乌龟移到起始点 Z+X-:setPenSize(int size):设置画笔粗细(默认值为1)(在参数较大时画出来的斜线可能会出现不均匀的情况) √ C:setPenColor(ege::color_t color):改变画笔颜色 ege::BLACK:黑色(默认颜色) ege::BLUE:蓝色 ege::GREEN:绿色 ege::CYAN:青色 ege::RED:红色 ege::MAGENTA:紫色 ege::BROWN:棕色 ege::YELLOW:黄色 ege::WHITE:白色 ege::DARKGRAY:深灰色 ege::LIGHTGRAY:浅灰色 ege::LIGHTBLUE:浅蓝色 ege::LIGHTGREEN:浅绿色 ege::LIGHTCYAN:浅青色(类似天蓝色或淡蓝色) ege::LIGHTRED:淡红色 ege::LIGHTMAGENTA:淡紫色(类似粉色) 注意事项:传参时参数应当为"ege::"+对应颜色的英文,颜色英文需全用大写 T+G-:setSpeed(int speed):调速度(默认100) V:hide():隐藏乌龟 Y:show():显示乌龟 H:setBackgroundColor(ege::color_t color):改变背景颜色(详见setPenColor函数) B:setImmediate(int isImmediate):参数为0时普通速度,否则为超快速度 U+J-:调节乌龟旋转角度(默认30°) N+M-:调节乌龟走路步数(默认10步) pause():等待直到画布被关闭 (由于输入输出、兼容性等问题,仅使用turtle.h中的部分操作指令) */ ``` ### 字符版 ```cpp #include <bits/stdc++.h> #include <iostream> #include <time.h> #include <stdlib.h> #include <cmath> #include <windows.h> #include <cstdlib> #include <cstdio> #include <stdio.h> #include <algorithm> #include <conio.h> #include <string> #include <string.h> #include <math.h> using namespace std; int x = 1, y = 1; int pen = 1; string s[102][102]; string color = "white"; string ch = "@"; string dfs_color = " ", dfs_ch = " "; bool f = 0, b[102][102], yd = 0; string a[102][102]; int l, h; inline void color1(string g) { if (g == "white") { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN); } else { if (g == "red") { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED); } else { if (g == "yellow") { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN); } else { if (g == "green") { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); } else { if (g == "indego") { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_GREEN); } else { if (g == "pink") { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED); } else { if (g == "blue") { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE); } else { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY); } } } } } } } } inline void out() { system("cls"); for (int i = 0; i < l; i++) { for (int j = 0; j < h; j++) { if (a[i][j] == "+") { if (f == 1) { color1(dfs_color); printf ("%s", dfs_ch.c_str()); } else { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN); printf ("+"); } } else { color1(s[i][j]); printf ("%s", a[i][j].c_str()); } } printf ("\n"); } SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN); printf ("X:%d Y:%d\n", x, y); } inline void SetConsoleWindowSize(SHORT width, SHORT height) { HANDLE hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE); SMALL_RECT wrt = {0, 0, width - 1, height - 1}; SetConsoleWindowInfo(hStdOutput, TRUE, &wrt); COORD coord = {width, height}; SetConsoleScreenBufferSize(hStdOutput, coord); } inline void q() { for (int i = 1; i < l - 1; i++) { for (int j = 1; j < h - 1; j++) { a[i][j] = " "; } } a[x][y] = "+"; } inline void init() { for (int i = 0; i < l; i++) { for (int j = 0; j < h; j++) { b[i][j] = 0; } } } inline void dfs(const int &x, const int &y) { b[x][y] = 1; s[x][y] = color, a[x][y] = ch; if (a[x - 1][y] == dfs_ch && s[x - 1][y] == dfs_color && !b[x - 1][y]) { dfs(x - 1, y); } if (a[x + 1][y] == dfs_ch && s[x + 1][y] == dfs_color && !b[x + 1][y]) { dfs(x + 1, y); } if (a[x][y - 1] == dfs_ch && s[x][y - 1] == dfs_color && !b[x][y - 1]) { dfs(x, y - 1); } if (a[x][y + 1] == dfs_ch && s[x][y + 1] == dfs_color && !b[x][y + 1]) { dfs(x, y + 1); } } int main() { cout << "教程在代码末尾的注释里\n"; system("pause"); system("cls"); h = 32, l = 12; for (int i = 0; i < l; i++) { for (int j = 0; j < h; j++) { if (i == 0 || j == 0 || i == l - 1 || j == h - 1) { a[i][j] = "O"; } else { a[i][j] = " "; } s[i][j] = "white"; } } a[x][y] = "+"; CONSOLE_CURSOR_INFO cursorInfo; GetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursorInfo); cursorInfo.bVisible = FALSE; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursorInfo); SetConsoleWindowSize(32, 14); system("title 画图"); while (1) { out(); if (GetAsyncKeyState('S')) { if (a[x + 1][y] != "O" && !f) { if (!yd) { if (pen) { a[x][y] = ch; } else { a[x][y] = " "; } s[x][y] = color; } if (yd) { a[x][y] = dfs_ch; s[x][y] = dfs_color; } dfs_ch = a[x + 1][y]; dfs_color = s[x + 1][y]; x++; a[x][y] = "+"; } } if (GetAsyncKeyState('D')) { if (a[x][y + 1] != "O" && !f) { if (!yd) { if (pen) { a[x][y] = ch; } else { a[x][y] = " "; } s[x][y] = color; } if (yd) { a[x][y] = dfs_ch; s[x][y] = dfs_color; } dfs_ch = a[x][y + 1]; dfs_color = s[x][y + 1]; y++; a[x][y] = "+"; } } if (GetAsyncKeyState('A')) { if (a[x][y - 1] != "O" && !f) { if (!yd) { if (pen) { a[x][y] = ch; } else { a[x][y] = " "; } s[x][y] = color; } if (yd) { a[x][y] = dfs_ch; s[x][y] = dfs_color; } dfs_ch = a[x][y - 1]; dfs_color = s[x][y - 1]; y--; a[x][y] = "+"; } } if (GetAsyncKeyState('W')) { if (a[x - 1][y] != "O" && !f) { if (!yd) { if (pen) { a[x][y] = ch; } else { a[x][y] = " "; } s[x][y] = color; } if (yd) { a[x][y] = dfs_ch; s[x][y] = dfs_color; } dfs_ch = a[x - 1][y]; dfs_color = s[x - 1][y]; x--; a[x][y] = "+"; } } if (GetAsyncKeyState('1')) { pen = 1; } if (GetAsyncKeyState('2')) { pen = 0; } if (GetAsyncKeyState('3')) { color = "white"; } if (GetAsyncKeyState('4')) { color = "red"; } if (GetAsyncKeyState('5')) { color = "yellow"; } if (GetAsyncKeyState('6')) { color = "green"; } if (GetAsyncKeyState('7')) { color = "indego"; } if (GetAsyncKeyState('8')) { color = "pink"; } if (GetAsyncKeyState('9')) { color = "blue"; } if (GetAsyncKeyState('0')) { color = "grey"; } if (GetAsyncKeyState('Y')) { ch = "@"; } if (GetAsyncKeyState('U')) { ch = "#"; } if (GetAsyncKeyState('I')) { ch = "%"; } if (GetAsyncKeyState('O')) { ch = "^"; } if (GetAsyncKeyState('P')) { ch = "&"; } if (GetAsyncKeyState('H')) { ch = "*"; } if (GetAsyncKeyState('J')) { ch = "/"; } if (GetAsyncKeyState('K')) { ch = "-"; } if (GetAsyncKeyState('L')) { ch = "."; } if (GetAsyncKeyState('M')) { q(); } if (GetAsyncKeyState('N')) { f = 1; } if (GetAsyncKeyState('B')) { f = 0; } if (GetAsyncKeyState('Z')) { for (int i = 0; i < l; i++) { for (int j = 0; j < h; j++) { if (a[i][j] != "O") { s[i][j] = color, a[i][j] = ch; } } } dfs_ch = ch; dfs_color = color; a[x][y] = "+"; } if (GetAsyncKeyState('X')) { init(); dfs(x, y); dfs_ch = ch; dfs_color = color; a[x][y] = "+"; } if (GetAsyncKeyState('Q')) { yd = 1; } if (GetAsyncKeyState('E')) { yd = 0; } } return 0; } /* 操作方法如下:(按下键盘上的按钮操作;O代表边缘,画笔移动时碰到O就不能继续移动了;+代表鼠标) w:鼠标向上移动 a:鼠标向左移动 s:鼠标向下移动 d:鼠标向右移动 1:鼠标设成画笔 2:鼠标设成橡皮 3:画笔颜色设为白色 4:画笔颜色设为红色 5:画笔颜色设为黄色 6:画笔颜色设为绿色 7:画笔颜色设为靛青 8:画笔颜色设为粉色 9:画笔颜色设为蓝色 0:画笔颜色设为灰色 y:画出图案设为@ u:画出图案设为# i:画出图案设为% o:画出图案设为^ p:画出图案设为& h:画出图案设为* j:画出图案设为/ k:画出图案设为- l:画出图案设为. m:清屏 n:开启观察者模式(见文末) b:关闭观察者模式(见文末) q:抬笔 e:落笔 特殊规则: 1.开始时,鼠标默认为画笔,画出图案为@ 2.在画笔模式下,鼠标每移动一次,它原所在的格子为画出的图案 3.在橡皮模式下,鼠标每移动一次,它原所在的格子为空格 观察者模式:在该模式下,鼠标不会被显示,也不能移动,但可以改变颜色、图案、鼠标模式等。 */ ``` ## 乌龟对对碰 其实下面两个的画面都一样,只不过是一个要用 "game_1.h"(在文章开头的“ ‘.h’文件(自编头文件) ” 里) 一个不用。 ### 复杂版(需使用 "game_1.h"): ```cpp #include <bits/stdc++.h> #include <windows.h> #include <conio.h> #include <winuser.h> #define el "\n" #define sp " " #define fi first #define se second #define inf 1e18 #define r0 return 0 #define int long long #define F(i, a, b, c) for (int i = a; i <= b; i += c) #define debug printf ("bug is in here\n") #define TheEnd continue #define base(s) s = sp + s #define lcm(a, b) a / __gcd(a, b) * b #define setp(x) fixed << setprecision(x) #define GAME_1 using namespace std; typedef long long ll; typedef string str; using ull = unsigned long long; #ifndef GAME_1 #define _cl system("cls") #define _pa system("pause") #define _sl(x) Sleep(x) #define _ge getch() #define _sr srand(time(NULL)) #define _ra(a, b) (rand() % (b - a + 1)) + a inline void Sleep_write(const string &s, const int &y = 10, const string &t = "cout") { for (auto i : s) { if (t == "cin") { cout << i; } else { putchar(i); } _sl(y); } } inline void setcolor(int color) { HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hConsole, color); } #else #include "game_1.h" #endif char s[5][5]; int bag = 9, prebag, cnt; str c = "RBCOYGPpWS"; std::vector<std::bitset<5>> iswish(5), isthree(5); char w; struct Info { inline bool reset() { F(i, 0, 4, 1) { isthree[i].reset(); } r0; } inline bool set(int x, char op, bool f) { if (op == 'x' || op == 'r') { F(i, 1, 3, 1) { isthree[x][i] = f; } } if (op == 'y' || op == 'c') { F(i, 1, 3, 1) { isthree[i][x] = f; } } if (op == 'd' || op == 'l') { if (x == 1) { F(i, 1, 3, 1) { isthree[i][i] = f; } } else { F(i, 1, 3, 1) { isthree[i][3 - i + 1] = f; } } } r0; } inline bool judge(int x, char op, bool f) { if (op == 'x' || op == 'r') { F(i, 1, 3, 1) { if (isthree[x][i] != f) { r0; } } return 1; } if (op == 'y' || op == 'c') { F(i, 1, 3, 1) { if (isthree[i][x] != f) { r0; } } return 1; } if (op == 'd' || op == 'l') { if (x == 1) { F(i, 1, 3, 1) { if (isthree[i][i] != f) { r0; } } return 1; } else { F(i, 1, 3, 1) { if (isthree[i][3 - i + 1] != f) { r0; } } return 1; } } r0; } } op; inline bool color(char c, str s = "Yuexingfei_qwq.", bool isSleep = 0) { if (s == "Yuexingfei_qwq.") { s = ""; s += c; } switch (c) { case 'R': setcolor(4); break; case 'O': setcolor(6); break; case 'Y': setcolor(14); break; case 'G': setcolor(10); break; case 'C': setcolor(11); break; case 'B': setcolor(1); break; case 'P': setcolor(5); break; case 'p': setcolor(13); break; case 'W': setcolor(12); break; case 'S': setcolor(3); break; } if (isSleep) { Sleep_write(s); } else { cout << s; } setcolor(7); r0; } inline bool out(void) { _cl; cout << "许愿+1 对碰+1 三连+5 清台+5" << el; color('R', "R:红色 "); color('W', "W:西瓜红 "); color('O', "O:橙色 "); color('Y', "Y:黄色 "); color('G', "G:绿色 "); color('C', "C:青色 "); color('S', "S:天蓝 "); color('B', "B:蓝色 "); color('P', "P:紫色 "); color('p', "p:粉色\n"); cout << "-------------" << el; F(i, 1, 3, 1) { F(j, 1, 3, 1) { cout << "| "; color(s[i][j]); cout << sp; } cout << "|" << el; cout << "-------------" << el; } cout << "已收集乌龟数:" << cnt << el; cout << "剩余可拆袋数:" << bag << el; cout << "幸运色:"; color(w); cout << el; r0; } std::unordered_map<char, int> tot; inline bool check(void) { if (!bag) { r0; } std::unordered_set<char> st; F(i, 1, 3, 1) { F(j, 1, 3, 1) { if (!isdigit(s[i][j])) { st.insert(s[i][j]); } } } return !(st.size() == 9 && st.find(w) == st.end()); } inline bool check2(void) { std::unordered_set<char> st; F(i, 1, 3, 1) { F(j, 1, 3, 1) { if (!isdigit(s[i][j])) { st.insert(s[i][j]); } } } return !(st.size() == 9 && st.find(w) == st.end()) && prebag <= 2; } inline char ran(void) { int r = _ra(0, 9); return c[r]; } inline bool isequ(char a, char b, char c) { return a == b && b == c; } inline char mygetchar(void) { str s; cin >> s; return s[0]; } std::vector<std::pair<int, int>> v; inline bool start(void) { Sleep_write("乌龟对对碰\n"); _sl(200); Sleep_write("作者:"); color('C', "Yuexingfei_qwq\n", 1); Sleep_write("不了解的可以看这:https://baike.baidu.com/item/乌龟对对碰\n"); _sl(200); while (1) { Sleep_write("是否启动网站“https://baike.baidu.com/item/乌龟对对碰”?Y/N\n"); str s; cin >> s; if (s == "Y" || s == "y") { system("start https://baike.baidu.com/item/乌龟对对碰"); break; } else { if (s == "N" || s == "n") { break; } else { Sleep_write("无效输入\n"); _sl(900); _cl; } } } _pa; _cl; Sleep_write("在这里,你初始有9个可拆袋,当游戏无法继续进行后,你能得到你现在得到的总乌龟数\n"); _sl(200); _pa; r0; } signed main(void) { _sr; system("title 乌龟对对碰"); #ifndef DEBUG start(); #endif F(i, 1, 3, 1) { F(j, 1, 3, 1) { s[i][j] = ((i - 1) * 3 + j) + '0'; } } while (1) { _cl; Sleep_write("请选择幸运色(输入颜色对应的字母):\n"); color('R', "R:红色\n"); color('W', "W:西瓜红\n"); color('O', "O:橙色\n"); color('Y', "Y:黄色\n"); color('G', "G:绿色\n"); color('C', "C:青色\n"); color('S', "S:天蓝\n"); color('B', "B:蓝色\n"); color('P', "P:紫色\n"); color('p', "p:粉色\n"); w = mygetchar(); if (c.find(w) == string::npos) { Sleep_write("输入无效\n"); _sl(1500); } else { break; } } while (check()) { prebag = bag; out(); Sleep_write("按下任意键拆袋\n"); _ge; bool f = 1; F(i, 1, 3, 1) { F(j, 1, 3, 1) { if (bag == 0) { f = 0; break; } if (isdigit(s[i][j])) { bag--; if (check2()) { int now = rand() % 3; if (now == 1) { s[i][j] = ran(); } else { if (!now) { s[i][j] = w; } else { bool flag = 0; F(k, 0, 9, 1) { if (tot[::c[k]] == 1) { s[i][j] = ::c[k]; flag = 1; } } if (!flag) { s[i][j] = ran(); } } } } else { s[i][j] = ran(); } tot[s[i][j]]++; iswish[i][j] = 0; out(); _sl(500); } } if (!f) { break; } } out(); //优先级:许愿 > 三连 > 对碰 > 清台 int cnt = 0; F(i, 1, 3, 1) { F(j, 1, 3, 1) { if (!iswish[i][j] && s[i][j] == w) { cnt++; iswish[i][j] = 1; } } } if (cnt) { Sleep_write("许愿+"); cout << cnt << el; _sl(1500); bag += cnt; out(); _sl(500); } cnt = 0; v.clear(); op.reset(); if (isequ(s[1][1], s[1][2], s[1][3]) && op.judge(1, 'x', 0)) { cnt++; op.set(1, 'x', 1); } if (isequ(s[2][1], s[2][2], s[2][3]) && op.judge(2, 'x', 0)) { cnt++; op.set(2, 'x', 1); } if (isequ(s[3][1], s[3][2], s[3][3]) && op.judge(3, 'x', 0)) { cnt++; op.set(3, 'x', 1); } //x if (isequ(s[1][1], s[2][1], s[3][1]) && op.judge(1, 'y', 0)) { cnt++; op.set(1, 'y', 1); } if (isequ(s[1][2], s[2][2], s[3][2]) && op.judge(2, 'y', 0)) { cnt++; op.set(2, 'y', 1); } if (isequ(s[1][3], s[2][3], s[3][3]) && op.judge(3, 'y', 0)) { cnt++; op.set(3, 'y', 1); } //y if (isequ(s[1][1], s[2][2], s[3][3]) && op.judge(1, 'l', 0)) { cnt++; op.set(1, 'd', 1); } if (isequ(s[1][3], s[2][2], s[3][1]) && op.judge(2, 'l', 0)) { cnt++; op.set(2, 'd', 1); } //l if (cnt) { Sleep_write("三连+"); cout << cnt << el; ::cnt += cnt * 3; bag += cnt * 5; _sl(1500); F(i, 1, 3, 1) { F(j, 1, 3, 1) { if (isthree[i][j]) { tot[s[i][j]]--; s[i][j] = (i - 1) * 3 + j + '0'; } } } out(); _sl(500); } cnt = 0; F(k, 0, 9, 1) { while (tot[::c[k]] > 1) { cnt++; tot[::c[k]] -= 2; int now = 0; F(i, 1, 3, 1) { F(j, 1, 3, 1) { if (s[i][j] == ::c[k]) { now++; s[i][j] = (i - 1) * 3 + j + '0'; if (now >= 2) { break; } } } if (now >= 2) { break; } } } } if (cnt) { Sleep_write("对碰+"); cout << cnt << el; bag += cnt; ::cnt += cnt * 2; _sl(1500); out(); _sl(500); } cnt = 0; F(i, 0, 9, 1) { cnt += tot[c[i]]; } if (!cnt) { Sleep_write("全场清台+1\n"); bag += 5; _sl(1500); out(); _sl(500); } } Sleep_write("无袋可拆!\n"); _sl(1500); F(i, 1, 3, 1) { F(j, 1, 3, 1) { s[i][j] = ((i - 1) * 3 + j) + '0'; } } F(i, 0, 9, 1) { cnt += tot[c[i]]; } out(); Sleep_write("你收集了"); cout << cnt; Sleep_write("个乌龟!\n"); _sl(1000); _pa; _cl; system("ipconfig"); _sl(500); MessageBoxA(0, "已发货~", "获取到你的地址!", 0); r0; } /* ------------- | 1 | 2 | 3 | ------------- | 4 | 5 | 6 | ------------- | 7 | 8 | 9 | ------------- red:4 R orange:6 O yellow:14 Y green:10 G cyan:11 C blue:1 B purple:5 P pink:13 p watermalon:12 W sky:3 S */ ``` ### 纯享版(无需其他文件): ```cpp #include <bits/stdc++.h> #include <windows.h> #include <conio.h> #include <winuser.h> #define el "\n" #define sp " " #define fi first #define se second #define inf 1e18 #define r0 return 0 #define int long long #define F(i, a, b, c) for (int i = a; i <= b; i += c) #define debug printf ("bug is in here\n") #define TheEnd continue #define base(s) s = sp + s #define lcm(a, b) a / __gcd(a, b) * b #define setp(x) fixed << setprecision(x) //#define GAME_1 using namespace std; typedef long long ll; typedef string str; using ull = unsigned long long; #ifndef GAME_1 #define _cl system("cls") #define _pa system("pause") #define _sl(x) Sleep(x) #define _ge getch() #define _sr srand(time(NULL)) #define _ra(a, b) (rand() % (b - a + 1)) + a inline void Sleep_write(const string &s, const int &y = 10, const string &t = "cout") { for (auto i : s) { if (t == "cin") { cout << i; } else { putchar(i); } _sl(y); } } inline void setcolor(int color) { HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hConsole, color); } #else #include "game_1.h" #endif char s[5][5]; int bag = 9, prebag, cnt; str c = "RBCOYGPpWS"; std::vector<std::bitset<5>> iswish(5), isthree(5); char w; struct Info { inline bool reset() { F(i, 0, 4, 1) { isthree[i].reset(); } r0; } inline bool set(int x, char op, bool f) { if (op == 'x' || op == 'r') { F(i, 1, 3, 1) { isthree[x][i] = f; } } if (op == 'y' || op == 'c') { F(i, 1, 3, 1) { isthree[i][x] = f; } } if (op == 'd' || op == 'l') { if (x == 1) { F(i, 1, 3, 1) { isthree[i][i] = f; } } else { F(i, 1, 3, 1) { isthree[i][3 - i + 1] = f; } } } r0; } inline bool judge(int x, char op, bool f) { if (op == 'x' || op == 'r') { F(i, 1, 3, 1) { if (isthree[x][i] != f) { r0; } } return 1; } if (op == 'y' || op == 'c') { F(i, 1, 3, 1) { if (isthree[i][x] != f) { r0; } } return 1; } if (op == 'd' || op == 'l') { if (x == 1) { F(i, 1, 3, 1) { if (isthree[i][i] != f) { r0; } } return 1; } else { F(i, 1, 3, 1) { if (isthree[i][3 - i + 1] != f) { r0; } } return 1; } } r0; } } op; inline bool color(char c, str s = "Yuexingfei_qwq.", bool isSleep = 0) { if (s == "Yuexingfei_qwq.") { s = ""; s += c; } switch (c) { case 'R': setcolor(4); break; case 'O': setcolor(6); break; case 'Y': setcolor(14); break; case 'G': setcolor(10); break; case 'C': setcolor(11); break; case 'B': setcolor(1); break; case 'P': setcolor(5); break; case 'p': setcolor(13); break; case 'W': setcolor(12); break; case 'S': setcolor(3); break; } if (isSleep) { Sleep_write(s); } else { cout << s; } setcolor(7); r0; } inline bool out(void) { _cl; cout << "许愿+1 对碰+1 三连+5 清台+5" << el; color('R', "R:红色 "); color('W', "W:西瓜红 "); color('O', "O:橙色 "); color('Y', "Y:黄色 "); color('G', "G:绿色 "); color('C', "C:青色 "); color('S', "S:天蓝 "); color('B', "B:蓝色 "); color('P', "P:紫色 "); color('p', "p:粉色\n"); cout << "-------------" << el; F(i, 1, 3, 1) { F(j, 1, 3, 1) { cout << "| "; color(s[i][j]); cout << sp; } cout << "|" << el; cout << "-------------" << el; } cout << "已收集乌龟数:" << cnt << el; cout << "剩余可拆袋数:" << bag << el; cout << "幸运色:"; color(w); cout << el; r0; } std::unordered_map<char, int> tot; inline bool check(void) { if (!bag) { r0; } std::unordered_set<char> st; F(i, 1, 3, 1) { F(j, 1, 3, 1) { if (!isdigit(s[i][j])) { st.insert(s[i][j]); } } } return !(st.size() == 9 && st.find(w) == st.end()); } inline bool check2(void) { std::unordered_set<char> st; F(i, 1, 3, 1) { F(j, 1, 3, 1) { if (!isdigit(s[i][j])) { st.insert(s[i][j]); } } } return !(st.size() == 9 && st.find(w) == st.end()) && prebag <= 2; } inline char ran(void) { int r = _ra(0, 9); return c[r]; } inline bool isequ(char a, char b, char c) { return a == b && b == c; } inline char mygetchar(void) { str s; cin >> s; return s[0]; } std::vector<std::pair<int, int>> v; inline bool start(void) { Sleep_write("乌龟对对碰\n"); _sl(200); Sleep_write("作者:"); color('C', "Yuexingfei_qwq\n", 1); Sleep_write("不了解的可以看这:https://baike.baidu.com/item/乌龟对对碰\n"); _sl(200); while (1) { Sleep_write("是否启动网站“https://baike.baidu.com/item/乌龟对对碰”?Y/N\n"); str s; cin >> s; if (s == "Y" || s == "y") { system("start https://baike.baidu.com/item/乌龟对对碰"); break; } else { if (s == "N" || s == "n") { break; } else { Sleep_write("无效输入\n"); _sl(900); _cl; } } } _pa; _cl; Sleep_write("在这里,你初始有9个可拆袋,当游戏无法继续进行后,你能得到你现在得到的总乌龟数\n"); _sl(200); _pa; r0; } signed main(void) { _sr; system("title 乌龟对对碰"); #ifndef DEBUG start(); #endif F(i, 1, 3, 1) { F(j, 1, 3, 1) { s[i][j] = ((i - 1) * 3 + j) + '0'; } } while (1) { _cl; Sleep_write("请选择幸运色(输入颜色对应的字母):\n"); color('R', "R:红色\n"); color('W', "W:西瓜红\n"); color('O', "O:橙色\n"); color('Y', "Y:黄色\n"); color('G', "G:绿色\n"); color('C', "C:青色\n"); color('S', "S:天蓝\n"); color('B', "B:蓝色\n"); color('P', "P:紫色\n"); color('p', "p:粉色\n"); w = mygetchar(); if (c.find(w) == string::npos) { Sleep_write("输入无效\n"); _sl(1500); } else { break; } } while (check()) { prebag = bag; out(); Sleep_write("按下任意键拆袋\n"); _ge; bool f = 1; F(i, 1, 3, 1) { F(j, 1, 3, 1) { if (bag == 0) { f = 0; break; } if (isdigit(s[i][j])) { bag--; if (check2()) { int now = rand() % 3; if (now == 1) { s[i][j] = ran(); } else { if (!now) { s[i][j] = w; } else { bool flag = 0; F(k, 0, 9, 1) { if (tot[::c[k]] == 1) { s[i][j] = ::c[k]; flag = 1; } } if (!flag) { s[i][j] = ran(); } } } } else { s[i][j] = ran(); } tot[s[i][j]]++; iswish[i][j] = 0; out(); _sl(500); } } if (!f) { break; } } out(); //优先级:许愿 > 三连 > 对碰 > 清台 int cnt = 0; F(i, 1, 3, 1) { F(j, 1, 3, 1) { if (!iswish[i][j] && s[i][j] == w) { cnt++; iswish[i][j] = 1; } } } if (cnt) { Sleep_write("许愿+"); cout << cnt << el; _sl(1500); bag += cnt; out(); _sl(500); } cnt = 0; v.clear(); op.reset(); if (isequ(s[1][1], s[1][2], s[1][3]) && op.judge(1, 'x', 0)) { cnt++; op.set(1, 'x', 1); } if (isequ(s[2][1], s[2][2], s[2][3]) && op.judge(2, 'x', 0)) { cnt++; op.set(2, 'x', 1); } if (isequ(s[3][1], s[3][2], s[3][3]) && op.judge(3, 'x', 0)) { cnt++; op.set(3, 'x', 1); } //x if (isequ(s[1][1], s[2][1], s[3][1]) && op.judge(1, 'y', 0)) { cnt++; op.set(1, 'y', 1); } if (isequ(s[1][2], s[2][2], s[3][2]) && op.judge(2, 'y', 0)) { cnt++; op.set(2, 'y', 1); } if (isequ(s[1][3], s[2][3], s[3][3]) && op.judge(3, 'y', 0)) { cnt++; op.set(3, 'y', 1); } //y if (isequ(s[1][1], s[2][2], s[3][3]) && op.judge(1, 'l', 0)) { cnt++; op.set(1, 'd', 1); } if (isequ(s[1][3], s[2][2], s[3][1]) && op.judge(2, 'l', 0)) { cnt++; op.set(2, 'd', 1); } //l if (cnt) { Sleep_write("三连+"); cout << cnt << el; ::cnt += cnt * 3; bag += cnt * 5; _sl(1500); F(i, 1, 3, 1) { F(j, 1, 3, 1) { if (isthree[i][j]) { tot[s[i][j]]--; s[i][j] = (i - 1) * 3 + j + '0'; } } } out(); _sl(500); } cnt = 0; F(k, 0, 9, 1) { while (tot[::c[k]] > 1) { cnt++; tot[::c[k]] -= 2; int now = 0; F(i, 1, 3, 1) { F(j, 1, 3, 1) { if (s[i][j] == ::c[k]) { now++; s[i][j] = (i - 1) * 3 + j + '0'; if (now >= 2) { break; } } } if (now >= 2) { break; } } } } if (cnt) { Sleep_write("对碰+"); cout << cnt << el; bag += cnt; ::cnt += cnt * 2; _sl(1500); out(); _sl(500); } cnt = 0; F(i, 0, 9, 1) { cnt += tot[c[i]]; } if (!cnt) { Sleep_write("全场清台+1\n"); bag += 5; _sl(1500); out(); _sl(500); } } Sleep_write("无袋可拆!\n"); _sl(1500); F(i, 1, 3, 1) { F(j, 1, 3, 1) { s[i][j] = ((i - 1) * 3 + j) + '0'; } } F(i, 0, 9, 1) { cnt += tot[c[i]]; } out(); Sleep_write("你收集了"); cout << cnt; Sleep_write("个乌龟!\n"); _sl(1000); _pa; _cl; system("ipconfig"); _sl(500); MessageBoxA(0, "已发货~", "获取到你的地址!", 0); r0; } /* ------------- | 1 | 2 | 3 | ------------- | 4 | 5 | 6 | ------------- | 7 | 8 | 9 | ------------- red:4 R orange:6 O yellow:14 Y green:10 G cyan:11 C blue:1 B purple:5 P pink:13 p watermalon:12 W sky:3 S */ ``` --- ## 绿黄斗 其实是借鉴了 [这题](https://www.luogu.com.cn/problem/P5016) 的想法。 ### 新手教程 ```cpp #include <bits/stdc++.h> #include <iostream> #include <time.h> #include <stdlib.h> #include <cmath> #include <windows.h> #include <cstdlib> #include <cstdio> #include <stdio.h> using namespace std; int main() { printf ("欢迎来到绿黄斗世界!\n"); Sleep(1000); printf("在正式开始玩前,先来练习一下吧!"); Sleep(1000); system("cls"); while (1) { printf("操作输入\"1\":换兵\n"); Sleep(1000); printf("效果:把 \"输入的第一个数\" 号兵营的 \"输入的第三个数\" 个兵放到 \"输入的第二个数”\"号兵营\n"); Sleep(2000); printf("地图:\n*****************************\n"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); printf ("9 10 5 "); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY); printf ("3 6 6 9 "); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN); printf ("2 6 5"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN); printf ("\n*****************************\n请绿操作!\n"); Sleep(2000); printf ("试着把绿队2号兵营的6个兵移到3号兵营吧!\n"); printf("提示:要先输入数字1,表示你要换兵哦!\n"); int a, b, c, d; scanf ("%d%d%d%d", &a, &b, &c, &d); if (a == 1 && b == 2 && c == 3 && d == 6) break; else { printf("输入错误!"); Sleep(1000); system("cls"); } } system("cls"); printf("地图:\n*****************************\n"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); printf ("9 4 11 "); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY); printf ("3 6 6 9 "); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN); printf ("2 6 5"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN); printf ("\n*****************************\n"); Sleep(2500); printf ("很好!\n"); system("cls"); while (1) { printf("操作输入\"2\":进攻\n"); Sleep(1000); printf("效果:让本队最靠近敌方(包括无人领地)的兵营进攻\n"); Sleep(2000); printf("分三种情况:\n一:我多敌少,夺得一格地盘,消耗兵力为对方兵力\n"); printf("地图:\n*****\n"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); printf ("5 "); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY); printf ("3"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN); printf ("\n*****\n请绿操作!\n"); Sleep(2000); printf("请输入\"2\"进攻!\n"); int x; scanf ("%d", &x); if (x == 2) { break; } else { printf("输入错误!"); Sleep(1000); system("cls"); } } printf("地图:\n*****\n"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); printf ("2 0"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN); printf ("\n*****\n"); Sleep(1000); printf ("很好!\n"); Sleep(1000); system("cls"); while (1) { printf("二:敌多我少,地盘不变,本兵营兵力归零,对方兵力消耗为我方兵力\n"); printf("地图:\n*****\n"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); printf ("2 "); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY); printf ("5"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN); printf ("\n*****\n请绿操作!\n"); Sleep(2000); printf("请输入\"2\"进攻!\n"); int x; scanf ("%d", &x); if (x == 2) { break; } else { printf("输入错误!"); Sleep(1000); system("cls"); } } printf("地图:\n*****\n"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); printf ("0 "); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY); printf ("3"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN); printf ("\n*****\n"); Sleep(1000); printf ("很好!\n"); Sleep(1000); system("cls"); while (1) { printf("三:敌我相等,地盘不变,双方兵力都归零\n"); printf("地图:\n*****\n"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); printf ("11 "); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY); printf ("11"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN); printf ("\n*****\n请绿操作!\n"); Sleep(2000); printf("请输入\"2\"进攻!\n"); int x; scanf ("%d", &x); if (x == 2) { break; } else { printf("输入错误!"); Sleep(1000); system("cls"); } } printf("地图:\n*****\n"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); printf ("0 "); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY); printf ("0"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN); printf ("\n*****\n"); Sleep(1000); printf ("很好!\n"); Sleep(1000); system("cls"); printf("输入别的数字不操作,谁先占领所有地盘,谁就赢了!\n"); Sleep(3000); printf("恭喜你,完成了新手教程,快去正式版玩吧!\n祝游玩愉快!"); Sleep(3000); return 0; } ``` ### 正式游戏 ```cpp #include <bits/stdc++.h> #include <iostream> #include <time.h> #include <stdlib.h> #include <cmath> #include <windows.h> #include <cstdlib> #include <cstdio> #include <stdio.h> using namespace std; struct Info { int num, di; //di:地盘 (1:绿 | 2:黄 | 0:无) } a[11]; int y = 3, g = 3, w = 4, opt;//y:黄色地盘 | g:绿色地盘 | w:无人地盘 void init() { for (int i = 1; i <= 10; i++) { a[i].num = rand() % 6 + 1; } a[1].di = a[2].di = a[3].di = 1; a[4].di = a[5].di = a[6].di = a[7].di = 0; a[8].di = a[9].di = a[10].di = 2; } void out() { printf ("地图:\n***************************************\n"); for (int i = 1; i <= 10; i++) { switch (a[i].di) { case 1: SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); break; case 2: SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN); break; default: SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY); break; } printf ("%d ", a[i].num); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN); } printf ("\n***************************************\n"); } void tian() { Sleep(1000); printf ("天降神兵!\n"); Sleep(1500); system("cls"); int cl = rand() % 10 + 1; out(); printf ("降在总第%d个兵营,加三个兵!", cl); Sleep(1000); a[cl].num += 3; } void f1(int n, int m, int l) {//f:绿 a[n].num -= l; a[m].num += l; } void f2() { if (a[g + 1].di == 0) { if (a[g].num > a[g + 1].num) { a[g].num -= a[g + 1].num; a[g + 1].num = 0; a[g + 1].di = 1; g++; w--; } else { if (a[g].num < a[g + 1].num) { a[g + 1].num -= a[g].num; a[g].num = 0; } else { a[g].num = 0; a[g + 1].num = 0; } } } else { if (a[g].num > a[g + 1].num) { a[g].num -= a[g + 1].num; a[g + 1].num = 0; a[g + 1].di = 1; g++; y--; } else { if (a[g].num < a[g + 1].num) { a[g + 1].num -= a[g].num; a[g].num = 0; } else { a[g].num = 0; a[g + 1].num = 0; } } } } void g1(int n, int m, int l) {//g:黄 n = n + g + w; m = m + g + w; a[n].num -= l; a[m].num += l; } void g2() { if (a[g + w].di == 0) { if (a[g + w + 1].num > a[g + w].num) { a[g + w + 1].num -= a[g + w].num; a[g + w].num = 0; a[g + w].di = 2; y++; w--; } else { if (a[g + w + 1].num < a[g + w].num) { a[g + w].num -= a[g].num; a[g + w + 1].num = 0; } else { a[g + w + 1].num = 0; a[g + w].num = 0; } } } else { if (a[g + w + 1].num > a[g + w].num) { a[g + w + 1].num -= a[g + w].num; a[g + w].num = 0; a[g + w].di = 2; y++; g--; } else { if (a[g + w + 1].num < a[g + w].num) { a[g + w].num -= a[g].num; a[g + w + 1].num = 0; } else { a[g + w + 1].num = 0; a[g + w].num = 0; } } } } int main() { srand(time(0)); init(); while (1) { if (rand() % 5 == 2) tian(); system("cls"); out(); printf ("请绿操作!\n"); scanf ("%d", &opt); switch (opt) { case 1://移兵 int n, m, l; scanf("%d%d%d", &n, &m, &l); f1(n, m, l); break; case 2://攻击 f2(); break; } system("cls"); out(); printf ("请黄操作!\n"); scanf ("%d", &opt); switch (opt) { case 1://移兵 int n, m, l; scanf("%d%d%d", &n, &m, &l); g1(n, m, l); break; case 2://攻击 g2(); break; system("cls"); out(); } //判断 if (g == 10) { printf ("绿赢了!\n"); break; } else { if (y == 10) { printf ("黄赢了!\n"); break; } } } return 0; }//移兵:输入兵营号为本队从左到右的第几个 /* 0 * * * \ \ \ \ + + + */ ``` ### 边界之争(绿黄斗的完整版) ```cpp #include <bits/stdc++.h> #include <iostream> #include <time.h> #include <stdlib.h> #include <cmath> #include <windows.h> #include <cstdlib> #include <cstdio> #include <stdio.h> #include <algorithm> #define pa system("pause") using namespace std; struct Info { int num, di; //di:地盘 (1:绿 | 2:黄 | 0:无) } a[6]; int y = 2, g = 2, w = 1, opt;//y:黄色地盘 | g:绿色地盘 | w:无人地盘 bool err1, err2; inline int write(const string _Str) { for (int i = 0; i < (int)_Str.size(); i++) { putchar(_Str[i]); Sleep(50); } return EOF; } void init() { for (int i = 1; i <= 5; i++) { a[i].num = rand() % 6 + 1; } a[1].di = a[2].di = 1; a[3].di = 0; a[4].di = a[5].di = 2; } void out() { system("cls"); printf ("地图:\n**************\n"); for (int i = 1; i <= 5; i++) { switch (a[i].di) { case 1: SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); break; case 2: SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN); break; default: SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY); break; } if (a[i].num < 0) a[i].num = 0; printf ("%d ", a[i].num); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN); } printf ("\n**************\n"); } void tian() { Sleep(1000); write ("天降神兵!\n"); Sleep(1500); system("cls"); int cl = rand() % 5 + 1; out(); printf ("降在总第%d个兵营,加三个兵!", cl); Sleep(1000); a[cl].num += 3; } void f1(int n, int l, int m) {//f:绿 a[n].num -= l; a[m].num += l; } void f2() { if (a[g + 1].di == 0) { if (a[g].num > a[g + 1].num) { a[g].num -= a[g + 1].num; a[g + 1].num = a[g].num; a[g].num = 0; a[g + 1].di = 1; g++; w--; } else { if (a[g].num < a[g + 1].num) { a[g + 1].num -= a[g].num; a[g].num = a[g + 1].num; a[g + 1].num = 0; a[g].di = 0; g--; w++; } else { a[g].num = 0; a[g + 1].num = 0; } } } else { if (a[g].num > a[g + 1].num) { a[g].num -= a[g + 1].num; a[g + 1].num = a[g].num; a[g].num = 0; a[g + 1].di = 1; g++; y--; } else { if (a[g].num < a[g + 1].num) { a[g + 1].num -= a[g].num; a[g].num = a[g + 1].num; a[g + 1].num = 0; a[g].di = 2; g--; y++; } else { a[g].num = 0; a[g + 1].num = 0; } } } } void g1(int n, int l, int m) {//g:黄 n = n + g + w; m = m + g + w; a[n].num -= l; a[m].num += l; } void g2() { if (a[g + w].di == 0) { if (a[g + w + 1].num > a[g + w].num) { a[g + w + 1].num -= a[g + w].num; a[g + w].num = a[g + w + 1].num; a[g + w + 1].num = 0; a[g + w].di = 2; y++; w--; } else { if (a[g + w + 1].num < a[g + w].num) { a[g + w].num -= a[g + w + 1].num; a[g + w].num = a[g + w + 1].num; a[g + w + 1].num = 0; a[g + w + 1].di = 0; y--; w++; } else { a[g + w + 1].num = 0; a[g + w].num = 0; } } } else { if (a[g + w + 1].num > a[g + w].num) { a[g + w + 1].num -= a[g + w].num; a[g + w].num = a[g + w + 1].num; a[g + w + 1].num = 0; a[g + w].di = 2; y++; g--; } else { if (a[g + w + 1].num < a[g + w].num) { a[g + w].num -= a[g + w + 1].num; a[g + w].num = a[g + w + 1].num; a[g + w + 1].num = 0; a[g + w + 1].di = 1; y--; g++; } else { a[g + w + 1].num = 0; a[g + w].num = 0; } } } } void welcome() { MessageBox(NULL, TEXT("边 界 之 争"), TEXT("进入"), MB_OK); MessageBox(NULL, TEXT("本游戏需要两个人互相对抗"), TEXT("提示"), MB_OK); write("你好,勇士们!欢迎来到边界之争!\n"); Sleep(1000); write("作者:yuexingfei\n"); Sleep(1000); pa; } void xin() { write (" 新"); Sleep(1000); write (" 手"); Sleep(1000); write (" 教"); Sleep(1000); write (" 程\n"); Sleep(1000); } void zheng() { system("cls"); write (" 正"); Sleep(1000); write (" 式"); Sleep(1000); write (" 游"); Sleep(1000); write (" 戏\n"); Sleep(1000); system("cls"); } bool erro1(int n, int l, int m) { if (n > g || m > g || a[n].num < l ) { err1 = false; return false; } return true; } bool erro2(int n, int l, int m) { if (g + w > n + g + w || g + w > m + g + w || a[n + g + w].num < l ) { err2 = false; return false; } return true; } int main() { system("title 边界之争"); system("color 17"); welcome(); char c; while (1) { write ("是否跳过新手教程?(y/n)\n"); scanf ("%c", &c); if (c == 'n' || c == 'N' || c == 'y' || c == 'Y') break; else write ("输入错误!\n"); Sleep(1500); system("cls"); } system("color 07"); //新手教程 if (c == 'n' || c == 'N') { system("cls"); xin(); write ("一:布局\n"); Sleep(1000); write ("共5个地盘,初始绿、黄双方各2个地盘,中间的无人领地1个地盘\n"); Sleep(1000); write ("兵营号为本队从左到右数的第几个兵营,数字代表本兵营的兵力,颜色代表阵营(绿色为绿队,灰色为无人领地,黄色为黄队)\n"); pa; system("cls"); write ("二:输入类型\n"); Sleep(1000); write ("输入1:换兵\n"); Sleep(1000); write ("输入2:进攻\n"); Sleep(1000); write ("输入其他数字:不操作\n"); Sleep(1000); write ("提示:要先输入表示操作类型的数字哦~\n"); pa; system("cls"); write ("三:操作输入\n"); while (1) { write("操作输入\"1\":换兵\n"); Sleep(1000); write ("首先,输入1表示你要换兵;其次,输入需要调动的兵营号;然后,输入想要调动的兵力的数量;最后,输入要调往的兵营号。\n"); Sleep(2000); write("地图:\n**************\n"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); write ("9 5 "); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY); write ("6 "); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN); write ("6 5"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN); write ("\n**************\n请绿操作!\n\n"); Sleep(2000); write ("试着在绿队1号兵营中抽出6个兵移到2号兵营吧!\n"); write("提示:要先输入数字1,表示你要换兵哦!\n"); int a, b, c, d; scanf ("%d%d%d%d", &a, &b, &c, &d); if (a == 1 && b == 1 && c == 6 && d == 2) break; else { write("输入错误!"); Sleep(1000); system("cls"); } } system("cls"); write("地图:\n**************\n"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); write ("3 11 "); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY); write ("6 "); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN); write ("6 5"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN); write ("\n**************\n"); Sleep(1002); write ("很好!\n"); Sleep(2500); system("cls"); while (1) { write("操作输入\"2\":进攻\n"); Sleep(1000); write("效果:让本队最靠近敌方(包括无人领地)的兵营进攻\n"); Sleep(2000); write("分三种情况:\n一:我多敌少,夺得一格地盘,消耗兵力为对方兵力\n"); write("地图:\n*****\n"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); write ("5 "); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY); write ("3"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN); write ("\n*****\n请绿操作!\n\n"); Sleep(2000); write("请输入\"2\"进攻!\n"); int x; scanf ("%d", &x); if (x == 2) { break; } else { write("输入错误!"); Sleep(1000); system("cls"); } } write("地图:\n*****\n"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); write ("2 0"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN); write ("\n*****\n"); Sleep(1000); write ("很好!\n"); Sleep(1000); system("cls"); while (1) { write("二:敌多我少,失去一格地盘,本兵营兵力归零,对方兵力消耗为我方兵力\n"); write("地图:\n*****\n"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); write ("2 "); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY); write ("5"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN); write ("\n*****\n请绿操作!\n\n"); Sleep(2000); write("请输入\"2\"进攻!\n"); int x; scanf ("%d", &x); if (x == 2) { break; } else { write("输入错误!"); Sleep(1000); system("cls"); } } write("地图:\n*****\n"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY); write ("0 3"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN); write ("\n*****\n"); Sleep(1000); write ("很好!\n"); Sleep(1000); system("cls"); while (1) { write("三:敌我相等,地盘不变,双方兵力都归零\n"); write("地图:\n*****\n"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); write ("11 "); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY); write ("11"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN); write ("\n*****\n请绿操作!\n\n"); Sleep(2000); write("请输入\"2\"进攻!\n"); int x; scanf ("%d", &x); if (x == 2) { break; } else { write("输入错误!"); Sleep(1000); system("cls"); } } write("地图:\n*****\n"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); write ("0 "); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY); write ("0"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN); write ("\n*****\n"); Sleep(1000); write ("很好!\n"); Sleep(1000); system("cls"); write ("四:获胜条件\n"); Sleep(1000); write("谁先占领所有地盘,谁就赢了!\n"); Sleep(3000); system("cls"); write("恭喜你,完成了新手教程!\n祝游玩愉快!\n"); system("pause"); } //正式 system("cls"); zheng(); srand(time(0)); init(); while (1) { int t = rand() % 4; if (t == 1) tian(); while (1) { err1 = true; out(); write ("请绿操作!\n"); scanf ("%d", &opt); switch (opt) { case 1://移兵 int n, m, l; scanf("%d%d%d", &n, &l, &m); if (erro1(n, l, m)) f1(n, l, m); break; case 2://攻击 f2(); break; } if (!err1) { write ("操作错误!\n"); Sleep(1000); } else break; } //判断1 if (g == 5) { out(); Sleep(1000); system("cls"); MessageBox(NULL, TEXT("恭喜绿胜利了!!!"), TEXT("胜利了!!!"), MB_OK); break; } else { if (y == 5) { out(); Sleep(1000); system("cls"); MessageBox(NULL, TEXT("恭喜黄胜利了!!!"), TEXT("胜利了!!!"), MB_OK); break; } } system("cls"); while (1) { err2 = true; out(); write ("请黄操作!\n"); scanf ("%d", &opt); switch (opt) { case 1://移兵 int n, m, l; scanf("%d%d%d", &n, &l, &m); if (erro2(n, l, m)) g1(n, l, m); break; case 2://攻击 g2(); break; } if (!err2) { write ("操作错误!\n"); Sleep(1000); } else break; } //判断2 if (g == 5) { out(); Sleep(1000); system("cls"); MessageBox(NULL, TEXT("恭喜绿胜利了!!!"), TEXT("胜利了!!!"), MB_OK); break; } else { if (y == 5) { out(); Sleep(1000); system("cls"); MessageBox(NULL, TEXT("恭喜黄胜利了!!!"), TEXT("胜利了!!!"), MB_OK); break; } } } system("pause"); return 0; } ``` --- ## 色块对决(目前最长游戏……1705行) ```cpp #include <bits/stdc++.h> #include <windows.h> #include <conio.h> #define el "\n" #define sp " " #define fi first #define se second #define inf 1e18 #define r0 return 0 #define int long long #define F(i, a, b, c) for (int i = a; i <= b; i += c) #define debug printf ("bug is in here\n") #define TheEnd continue #define base(s) s = sp + s #define lcm(a, b) a / __gcd(a, b) * b #define setp(x) fixed << setprecision(x) #define getmid(l, r) l + (r - l) / 2 using namespace std; typedef long long ll; typedef string str; using ull = unsigned long long; #ifndef GAME1 #define _cl { \ HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); \ COORD coord = {0, 0}; \ DWORD count; \ CONSOLE_SCREEN_BUFFER_INFO csbi; \ GetConsoleScreenBufferInfo(hStdOut, &csbi); \ DWORD cellCount = csbi.dwSize.X * csbi.dwSize.Y; \ FillConsoleOutputCharacter(hStdOut, ' ', cellCount, coord, &count); \ FillConsoleOutputAttribute(hStdOut, csbi.wAttributes, cellCount, coord, &count); \ SetConsoleCursorPosition(hStdOut, coord); \ } #define _pa system("pause") #define _sl(x) Sleep(x) #define _PI 3.1415926535897932384626 #define _ge getch() #define _Get(x) GetAsyncKeyState('x') #define _KE(x) ((GetAsyncKeyState(x) & 0x8000) ? 1:0) #define _sr srand(time(NULL)) #define _ra(a, b) (rand() % (b - a + 1)) + a inline ll x_y(ll x, ll y, ll p = (1LL << 60)) { int ans_1 = 1; while (y) { if (y & 1) { (ans_1 *= x) %= p; } (x *= x) %= p; y >>= 1; } return ans_1; } inline void Sleep_write(const string &s, const int &y = 10, const string &t = "cout") { for (auto i : s) { if (t == "cout") { cout << i; } else { putchar(i); } _sl(y); } } inline void setcolor(int color) { HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hConsole, color); } inline void wait(int d = 50) { _sl(d); _ge; } inline char get(str s, bool f = 0) { char ch[114514]; int l = 0; for (auto i : s) { ch[++l] = i; } while (true) { char x = getchar(); if (x == ' ' || x == '\n') { TheEnd; } if (f) { return x; } for (int i = 1; i <= l; i++) { if (x == ch[i]) { return x; } } Sleep_write("Error:输入无效\n"); _sl(500); //_pa; } } #endif inline bool color(char c, str s = "Yuexingfei_qwq.", bool isSleep = 0) { if (s == "Yuexingfei_qwq.") { s = ""; s += c; } switch (c) { case 'R': setcolor(4); break; case 'O': setcolor(6); break; case 'Y': setcolor(14); break; case 'G': setcolor(10); break; case 'C': setcolor(11); break; case 'B': setcolor(1); break; case 'P': setcolor(5); break; case 'p': setcolor(13); break; case 'W': setcolor(12); break; case 'S': setcolor(3); break; } if (isSleep) { Sleep_write(s); } else { cout << s; } setcolor(7); r0; } str s[100]; std::bitset<20> die; std::vector<std::pair<int, char>> final; str co = "RBCOYGPpWS"; int id[20]; char mapcolor[20][100]; int lava[20]; inline int getid(char s) { switch (s) { case 'R': return 1; break; case 'W': return 2; break; case 'O': return 3; break; case 'Y': return 4; break; case 'G': return 5; break; case 'C': return 6; break; case 'S': return 7; break; case 'B': return 8; break; case 'P': return 9; break; case 'p': return 10; break; } return EOF; } inline char getcol(int x) { switch (x) { case 1: return 'R'; break; case 2: return 'W'; break; case 3: return 'O'; break; case 4: return 'Y'; break; case 5: return 'G'; break; case 6: return 'C'; break; case 7: return 'S'; break; case 8: return 'B'; break; case 9: return 'P'; break; case 10: return 'p'; break; } return EOF; } inline bool reset(void) { s[0] = s[11] = "#################################################################################"; s[1] = s[2] = s[3] = s[4] = s[5] = s[6] = s[7] = s[8] = s[9] = s[10] = "# *#"; F(i, 1, 10, 1) { id[i] = 1; } r0; } inline bool reset2(void) { s[0] = s[11] = "#################################################################################"; s[1] = s[2] = s[3] = s[4] = s[5] = s[6] = s[7] = s[8] = s[9] = s[10] = "#XXX........................................................................#"; F(i, 1, 10, 1) { id[i] = 25; lava[i] = 7; } F(i, 1, 10, 1) { F(j, 4, 75, 1) { mapcolor[i][j] = getcol(rand() % 10 + 1); } } r0; } inline void ran(void) { F(j, 4, 74, 1) { F(i, 1, 10, 1) { mapcolor[i][j] = mapcolor[i][j + 1]; } } F(i, 1, 10, 1) { mapcolor[i][75] = getcol(rand() % 10 + 1); if (rand() % 8 <= 2) { lava[i]--; } else { if (rand() % 4 == 0) { lava[i]++; } lava[i]++; } lava[i] = std::max(lava[i], 3LL); lava[i] = std::min(lava[i], 20LL); } } char skin[20] = {0, 'i', 'i', 'i', 'i', 'i', 'i', 'i', 'i', 'i', 'i'}; inline bool show(bool x) { HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_CURSOR_INFO c; GetConsoleCursorInfo(hOut, &c); c.bVisible = x; SetConsoleCursorInfo(hOut, &c); r0; } inline bool out(void) { _cl; F(i, 0, 11, 1) { F(j, 0, 76, 1) { bool f = 0; F(k, 0, 9, 1) { if (die[getid(co[k])] && i == getid(co[k]) && j == 1) { color(co[k], "D"); f = 1; break; } if (die[getid(co[k])] && j == 75 && i == getid(co[k])) { color(co[k], "*"); f = 1; break; } if (getid(co[k]) == i && id[getid(co[k])] == j) { str sk = ""; sk += skin[getid(co[k])]; color(co[k], sk); f = 1; } } if (f == 0) { if (s[i][j] == '*') { color('R', "*"); } else { cout << s[i][j]; } } } cout << el; } r0; } inline bool out2(void) { _cl; F(i, 0, 11, 1) { F(j, 0, 76, 1) { bool f = 0; F(k, 0, 9, 1) { if (j <= lava[i] && j && i && i != 11) { color('R', "X"); f = 1; break; } if (getid(co[k]) == i && id[getid(co[k])] == j) { str sk = ""; sk += skin[getid(co[k])]; color(co[k], sk); f = 1; } } if (f == 0) { if (s[i][j] == '*') { color('R', "*"); } else { if (s[i][j] == '.') { color(mapcolor[i][j], "."); } else { cout << s[i][j]; } } } } cout << el; } r0; } inline bool iswin(void) { F(i, 1, 10, 1) { if (die[i]) { TheEnd; } if (id[i] != 75) { r0; } } return 1; } std::vector<std::pair<int, char>> v; std::vector<int> rk; int dif, last; signed main(void) { srand(time(NULL)); char c; int cnt = 0; int round = 3; int tot[20] = {0}; int remain; std::vector<std::pair<char, str>> bro; goto menu; menu: show(1); _cl; cout << "------色块对决 The Color Race------" << el; cout << "1.赌注模式\n2.比赛模式\n3.生存模式\n4.设置皮肤\n5.退出\n作者:"; color('C', "Yuexingfei_qwq\n"); c = get("12345"); _cl; if (c == '1') { goto wager; } else { if (c == '2') { cout << "1.普通模式\n2.锦标赛模式\n3.淘汰赛模式" << el; c = get("123"); _cl; if (c == '1') { goto race; } else { if (c == '2') { goto title; } else { goto knockout; } } } else { if (c == '3') { goto survival; } else { if (c == '4') { goto setskin; } else { goto to_the_end; } } } } wager: Sleep_write("请输入你想赌的色块:\n"); color('R', "R:红色\n"); color('W', "W:西瓜红\n"); color('O', "O:橙色\n"); color('Y', "Y:黄色\n"); color('G', "G:绿色\n"); color('C', "C:青色\n"); color('S', "S:天蓝\n"); color('B', "B:蓝色\n"); color('P', "P:紫色\n"); color('p', "p:粉色\n"); c = get("RWOYGCSBPp"); Sleep_write("是否设置成“有几率回退”?(Y/N)\n"); dif = (tolower(get("YNyn")) == 'y' ? 1 : 0); reset(); show(0); out(); Sleep_write("3……\n"); _sl(1000); out(); Sleep_write("2……\n"); _sl(1000); out(); Sleep_write("1……\n"); _sl(1000); out(); Sleep_write("GO!\n"); _sl(500); v.clear(); cnt = 0; while (!iswin()) { F(i, 1, 10, 1) { if (id[i] == 75) { TheEnd; } if (dif == 1) { if (rand() % 4 == 1) { id[i]--; } } id[i] += rand() % 3; /* if (getid(c) == i) { id[i] += 3; } */ //作弊代码 id[i] = std::min(id[i], 75LL); id[i] = std::max(id[i], 1LL); } out(); cout << "你赌的色块是:"; switch (c) { case 'R': color('R', "R(红色)\n"); break; case 'W': color('W', "W(西瓜红)\n"); break; case 'O': color('O', "O(橙色)\n"); break; case 'Y': color('Y', "Y(黄色)\n"); break; case 'G': color('G', "G(绿色)\n"); break; case 'C': color('C', "C(青色)\n"); break; case 'S': color('S', "S(天蓝)\n"); break; case 'B': color('B', "B(蓝色)\n"); break; case 'P': color('P', "P(紫色)\n"); break; case 'p': color('p', "p(粉色)\n"); break; } rk.clear(); F(i, 1, 10, 1) { if (id[i] == 75) { bool find = 0; for (auto j : v) { if (j.se == getcol(i)) { find = 1; break; } } if (!find) { rk.push_back(i); } } } if (!rk.empty()) { cnt++; for (auto i : rk) { v.push_back({cnt, getcol(i)}); } } cnt = v.size(); F(i, 1, 10, 1) { bool is = 0; if (id[i] == 75) { bool find = 0; for (auto j : v) { if (j.se == getcol(i)) { find = 1; break; } } if (!find) { if (!is) { cnt++; is = 1; } v.push_back({cnt, getcol(i)}); } } } for (auto i : v) { cout << "rk" << i.fi << ": "; switch (i.se) { case 'R': color('R', "R(红色)"); break; case 'W': color('W', "W(西瓜红)"); break; case 'O': color('O', "O(橙色)"); break; case 'Y': color('Y', "Y(黄色)"); break; case 'G': color('G', "G(绿色)"); break; case 'C': color('C', "C(青色)"); break; case 'S': color('S', "S(天蓝)"); break; case 'B': color('B', "B(蓝色)"); break; case 'P': color('P', "P(紫色)"); break; case 'p': color('p', "p(粉色)"); break; } if (i.se == c) { cout << "<-你的色块"; } cout << el; } _sl((rand() % 3) * 100); } cnt = 0; for (auto i : v) { if (i.se == c) { cnt = i.fi; break; } } if (cnt == 1) { Sleep_write("太棒了!你的色块喜获金牌!!!\n"); } else { if (cnt <= 3) { Sleep_write("恭喜你!你的色块进入了前三名!\n"); } else { if (cnt <= 6) { Sleep_write("你的色块表现不错,但还需要努力!\n"); } else { Sleep_write("很遗憾,你的色块排名较后。再试一次吧!\n"); } } } _sl(1000); _pa; goto menu; race: Sleep_write("请选择难度:\n"); color('B', "1.有手就行\n"); color('Y', "2.简单\n"); color('O', "3.普通\n"); color('R', "4.困难(有几率往回退)\n"); dif = get("1234") - '1' + 1; Sleep_write("请选择你想要操控的色块:\n"); color('R', "R:红色\n"); color('W', "W:西瓜红\n"); color('O', "O:橙色\n"); color('Y', "Y:黄色\n"); color('G', "G:绿色\n"); color('C', "C:青色\n"); color('S', "S:天蓝\n"); color('B', "B:蓝色\n"); color('P', "P:紫色\n"); color('p', "p:粉色\n"); c = get("RWOYGCSBPp"); show(0); reset(); out(); Sleep_write("3……\n"); _sl(1000); out(); Sleep_write("2……\n"); _sl(1000); out(); Sleep_write("1……\n"); _sl(1000); out(); Sleep_write("GO!\n"); _sl(500); v.clear(); cnt = 0; while (!iswin()) { F(i, 1, 10, 1) { if (id[i] == 75) { TheEnd; } if (dif == 1) { if (getid(c) == i) { if (_KE('D')) { id[getid(c)]++; _sl(10); } } else { id[i] += rand() % 2; } } else { if (dif == 2) { if (getid(c) == i) { if (_KE('D')) { id[getid(c)] += rand() % 3; _sl(20); } } else { id[i] += rand() % 2; _sl(30); } } else { if (dif == 3) { if (getid(c) == i) { if (_KE('D')) { id[getid(c)] += rand() % 3; _sl(30); } } else { id[i] += rand() % 3; } } else { if (getid(c) == i) { if (_KE('D')) { id[getid(c)] += rand() % 4 - 1; _sl(50); } } else { id[i] += rand() % 4 - 1; } } } } id[i] = std::min(id[i], 75LL); id[i] = std::max(id[i], 1LL); } out(); cout << "你操控的色块是:"; switch (c) { case 'R': color('R', "R(红色)\n"); break; case 'W': color('W', "W(西瓜红)\n"); break; case 'O': color('O', "O(橙色)\n"); break; case 'Y': color('Y', "Y(黄色)\n"); break; case 'G': color('G', "G(绿色)\n"); break; case 'C': color('C', "C(青色)\n"); break; case 'S': color('S', "S(天蓝)\n"); break; case 'B': color('B', "B(蓝色)\n"); break; case 'P': color('P', "P(紫色)\n"); break; case 'p': color('p', "p(粉色)\n"); break; } cout << "你选择的难度是:"; switch (dif) { case 1: color('B', "1.有手就行"); break; case 2: color('Y', "2.简单"); break; case 3: color('O', "3.普通"); break; default: color('R', "4.困难(有几率往回退)"); break; } cout << "\n按下D键让你的色块冲向终点!" << el; rk.clear(); F(i, 1, 10, 1) { if (id[i] == 75) { bool find = 0; for (auto j : v) { if (j.se == getcol(i)) { find = 1; break; } } if (!find) { rk.push_back(i); } } } if (!rk.empty()) { cnt++; for (auto i : rk) { v.push_back({cnt, getcol(i)}); } } cnt = v.size(); F(i, 1, 10, 1) { bool is = 0; if (id[i] == 75) { bool find = 0; for (auto j : v) { if (j.se == getcol(i)) { find = 1; break; } } if (!find) { if (!is) { cnt++; is = 1; } v.push_back({cnt, getcol(i)}); } } } for (auto i : v) { cout << "rk" << i.fi << ": "; switch (i.se) { case 'R': color('R', "R(红色)"); break; case 'W': color('W', "W(西瓜红)"); break; case 'O': color('O', "O(橙色)"); break; case 'Y': color('Y', "Y(黄色)"); break; case 'G': color('G', "G(绿色)"); break; case 'C': color('C', "C(青色)"); break; case 'S': color('S', "S(天蓝)"); break; case 'B': color('B', "B(蓝色)"); break; case 'P': color('P', "P(紫色)"); break; case 'p': color('p', "p(粉色)"); break; } if (i.se == c) { cout << "<-你"; } cout << el; } _sl(200 / (dif + rand() % 2)); } cnt = 0; for (auto i : v) { if (i.se == c) { cnt = i.fi; break; } } if (cnt == 1) { Sleep_write("太棒了!你的色块喜获金牌!!!\n"); } else { if (cnt <= 3) { Sleep_write("恭喜你!你的色块进入了前三名!\n"); } else { if (cnt <= 6) { Sleep_write("你的色块表现不错,但还需要努力!\n"); } else { Sleep_write("很遗憾,你的色块排名较后。再试一次吧!\n"); } } } _sl(1000); _pa; goto menu; title: round = 3; memset(tot, 0, sizeof tot); Sleep_write("锦标赛模式\n请选择比赛轮数(1~5轮):\n"); round = get("12345") - '0'; Sleep_write("请选择你的色块:\n"); color('R', "R:红色\n"); color('W', "W:西瓜红\n"); color('O', "O:橙色\n"); color('Y', "Y:黄色\n"); color('G', "G:绿色\n"); color('C', "C:青色\n"); color('S', "S:天蓝\n"); color('B', "B:蓝色\n"); color('P', "P:紫色\n"); color('p', "p:粉色\n"); c = get("RWOYGCSBPp"); Sleep_write("请选择难度:\n"); color('B', "1.有手就行\n"); color('Y', "2.简单\n"); color('O', "3.普通\n"); color('R', "4.困难(有几率往回退)\n"); dif = get("1234") - '1' + 1; show(0); F(i, 1, round, 1) { _cl; cout << "----- 第 " << i << " 轮比赛 -----" << el; Sleep_write("准备开始...\n"); _sl(1000); reset(); v.clear(); cnt = 0; out(); Sleep_write("3……\n"); _sl(1000); out(); Sleep_write("2……\n"); _sl(1000); out(); Sleep_write("1……\n"); _sl(1000); out(); Sleep_write("GO!\n"); _sl(500); while (!iswin()) { F(j, 1, 10, 1) { if (id[j] == 75) { TheEnd; } if (dif == 1) { if (getid(c) == j) { if (_KE('D')) { id[getid(c)]++; } } else { id[j] += rand() % 2; } } else { if (dif == 2) { if (getid(c) == j) { if (_KE('D')) { id[getid(c)] += rand() % 3; } } else { id[j] += rand() % 2; } } else { if (dif == 3) { if (getid(c) == j) { if (_KE('D')) { id[getid(c)] += rand() % 3; } } else { id[j] += rand() % 3; } } else { if (getid(c) == j) { if (_KE('D')) { id[getid(c)] += rand() % 4 - 1; } } else { id[j] += rand() % 4 - 1; } } } } id[j] = std::min(id[j], 75LL); id[j] = std::max(id[j], 1LL); } out(); cout << "----- 第 " << i << " / " << round << " 轮 -----\n"; cout << "你("; color(c, string(1, c)); cout << ")的当前积分: " << tot[getid(c)] << "分\n"; cout << "你选择的难度是:"; switch (dif) { case 1: color('B', "1.有手就行"); break; case 2: color('Y', "2.简单"); break; case 3: color('O', "3.普通"); break; default: color('R', "4.困难(有几率往回退)"); break; } cout << "\n按下D键让你的色块冲向终点!" << el; rk.clear(); F(j, 1, 10, 1) { if (id[j] == 75) { bool find = 0; for (auto k : v) { if (k.se == getcol(j)) { find = 1; break; } } if (!find) { rk.push_back(j); } } } if (!rk.empty()) { cnt++; for (auto j : rk) { v.push_back({cnt, getcol(j)}); } } for (auto j : v) { cout << "rk" << j.fi << ": "; switch (j.se) { case 'R': color('R', "R(红色)"); break; case 'W': color('W', "W(西瓜红)"); break; case 'O': color('O', "O(橙色)"); break; case 'Y': color('Y', "Y(黄色)"); break; case 'G': color('G', "G(绿色)"); break; case 'C': color('C', "C(青色)"); break; case 'S': color('S', "S(天蓝)"); break; case 'B': color('B', "B(蓝色)"); break; case 'P': color('P', "P(紫色)"); break; case 'p': color('p', "p(粉色)"); break; } if (j.se == c) { cout << " <-你"; } cout << el; } _sl(200 / (dif + rand() % 2)); } for (auto i : v) { int p = 0; switch (i.fi) { case 1: p = 10; break; case 2: p = 7; break; case 3: p = 5; break; case 4: p = 3; break; case 5: p = 2; break; default: p = 1; break; } tot[getid(i.se)] += p; } _cl; cout << "第 " << i << " 轮比赛结果:\n"; for (auto j : v) { cout << "rk" << j.fi << ": "; switch (j.se) { case 'R': color('R', "R(红色)"); break; case 'W': color('W', "W(西瓜红)"); break; case 'O': color('O', "O(橙色)"); break; case 'Y': color('Y', "Y(黄色)"); break; case 'G': color('G', "G(绿色)"); break; case 'C': color('C', "C(青色)"); break; case 'S': color('S', "S(天蓝)"); break; case 'B': color('B', "B(蓝色)"); break; case 'P': color('P', "P(紫色)"); break; case 'p': color('p', "p(粉色)"); break; } cout << " (" << tot[getid(j.se)] << "分)"; if (c == j.se) { cout << " <-你"; } cout << el; } _pa; _cl; cout << "目前积分排名:\n"; v.clear(); F(i, 1, 10, 1) { if (tot[i] > 0) { v.push_back({tot[i], getcol(i)}); } } std::sort(v.begin(), v.end(), std::greater<std::pair<int, char>>()); cnt = 0, last = -1; rk.clear(); rk.push_back(0); for (auto i : v) { if (i.fi != last) { last = i.fi; rk[0] = cnt; rk[0]++; } cnt++; cout << "rk" << rk[0] << ". "; switch (i.se) { case 'R': color('R', "R(红色)"); break; case 'W': color('W', "W(西瓜红)"); break; case 'O': color('O', "O(橙色)"); break; case 'Y': color('Y', "Y(黄色)"); break; case 'G': color('G', "G(绿色)"); break; case 'C': color('C', "C(青色)"); break; case 'S': color('S', "S(天蓝)"); break; case 'B': color('B', "B(蓝色)"); break; case 'P': color('P', "P(紫色)"); break; case 'p': color('p', "p(粉色)"); break; } cout << ": " << i.fi << "分"; if (i.se == c) { cout << " <-你"; } cout << el; } _pa; if (i < round) { Sleep_write("\n准备下一轮比赛...\n"); _sl(3500); } } _cl; cout << "----- 锦标赛最终结果 -----\n"; final.clear(); F(i, 1, 10, 1) { if (tot[i] > 0) { final.push_back({tot[i], getcol(i)}); } } std::sort(final.begin(), final.end(), std::greater<std::pair<int, char>>()); cnt = 0, last = -1; rk.clear(); rk.push_back(0); for (auto i : final) { if (i.fi != last) { last = i.fi; rk[0] = cnt; rk[0]++; } cnt++; cout << "rk" << rk[0] << ". "; switch (i.se) { case 'R': color('R', "R(红色)"); break; case 'W': color('W', "W(西瓜红)"); break; case 'O': color('O', "O(橙色)"); break; case 'Y': color('Y', "Y(黄色)"); break; case 'G': color('G', "G(绿色)"); break; case 'C': color('C', "C(青色)"); break; case 'S': color('S', "S(天蓝)"); break; case 'B': color('B', "B(蓝色)"); break; case 'P': color('P', "P(紫色)"); break; case 'p': color('p', "p(粉色)"); break; } cout << ": " << i.fi << "分"; if (i.se == c) { cout << " <-你"; } if (cnt == 1) { cout << " ……冠军!"; } else { if (cnt == 2) { cout << " ……亚军!"; } else { if (cnt == 3) { cout << " ……季军!"; } } } cout << el; } cnt = 0; for (auto i : final) { if (i.se == c) { cnt = i.fi; break; } } if (cnt <= 4) { cout << "很遗憾,你的色块没有获得名次。继续努力吧!"; cout << el; _sl(1000); } Sleep_write("\n锦标赛结束!\n"); _sl(1000); _pa; goto menu; knockout: die.reset(); Sleep_write("淘汰赛模式\n请选择难度:\n"); color('B', "1.有手就行\n"); color('Y', "2.简单\n"); color('O', "3.普通\n"); color('R', "4.困难(有几率往回退)\n"); dif = get("1234") - '1' + 1; Sleep_write("请选择你想要操控的色块:\n"); color('R', "R:红色\n"); color('W', "W:西瓜红\n"); color('O', "O:橙色\n"); color('Y', "Y:黄色\n"); color('G', "G:绿色\n"); color('C', "C:青色\n"); color('S', "S:天蓝\n"); color('B', "B:蓝色\n"); color('P', "P:紫色\n"); color('p', "p:粉色\n"); c = get("RWOYGCSBPp"); remain = 10; round = 1; show(0); while (remain >= 1) { _cl; cout << "----- 淘汰赛第 " << round << " 轮 -----\n"; cout << "剩余选手: " << remain << "人\n"; Sleep_write("准备开始...\n"); _sl(2000); reset(); v.clear(); cnt = 0; out(); Sleep_write("3……\n"); _sl(1000); out(); Sleep_write("2……\n"); _sl(1000); out(); Sleep_write("1……\n"); _sl(1000); out(); Sleep_write("GO!\n"); _sl(500); while (!iswin()) { F(i, 1, 10, 1) { if (die[i] || id[i] == 75) { TheEnd; } if (dif == 1) { if (getid(c) == i) { if (_KE('D')) { id[getid(c)]++; } } else { id[i] += rand() % 2; } } else { if (dif == 2) { if (getid(c) == i) { if (_KE('D')) { id[getid(c)] += rand() % 3; } } else { id[i] += rand() % 2; } } else { if (dif == 3) { if (getid(c) == i) { if (_KE('D')) { id[getid(c)] += rand() % 3; } } else { id[i] += rand() % 3; } } else { if (getid(c) == i) { if (_KE('D')) { id[getid(c)] += rand() % 4 - 1; } } else { id[i] += rand() % 4 - 1; } } } } id[i] = std::min(id[i], 75LL); id[i] = std::max(id[i], 1LL); } out(); cout << "----- 淘汰赛第 " << round << " 轮 -----\n"; cout << "剩余选手: " << remain << "人\n"; cout << "你操控的色块是:"; color(c, string(1, c)); cout << " (按下D键让你的色块冲向终点!)\n"; cout << "难度: "; switch (dif) { case 1: color('B', "有手就行"); break; case 2: color('Y', "简单"); break; case 3: color('O', "普通"); break; case 4: color('R', "困难(有几率往回退)"); break; } cout << "\n地图上的D代表已淘汰的色块\n"; rk.clear(); F(i, 1, 10, 1) { if (!die[i] && id[i] == 75) { bool find = 0; for (auto j : v) { if (j.se == getcol(i)) { find = 1; break; } } if (!find) { rk.push_back(i); } } } cnt = v.size(); if (!rk.empty()) { cnt++; for (auto i : rk) { v.push_back({cnt, getcol(i)}); } } for (auto i : v) { cout << "rk" << i.fi << ": "; switch (i.se) { case 'R': color('R', "R(红色)"); break; case 'W': color('W', "W(西瓜红)"); break; case 'O': color('O', "O(橙色)"); break; case 'Y': color('Y', "Y(黄色)"); break; case 'G': color('G', "G(绿色)"); break; case 'C': color('C', "C(青色)"); break; case 'S': color('S', "S(天蓝)"); break; case 'B': color('B', "B(蓝色)"); break; case 'P': color('P', "P(紫色)"); break; case 'p': color('p', "p(粉色)"); break; } if (i.se == c) { cout << " <-你"; } cout << el; } _sl(200 / (dif + rand() % 2)); } _sl(2000); int q = 0; for (int i = v.size() - 1; i; i--) { q++; if (v[i].fi != v[i - 1].fi) { break; } } if (q == remain - 1) { q = 0; } std::vector<char> vec; for (int i = v.size() - 1; i >= 0 && q; i--) { vec.push_back(v[i].se); q--; } for (auto j : vec) { die[getid(j)] = 1; remain--; } _cl; cout << "----- 第 " << round << " 轮结果 -----\n"; cout << "本轮晋级选手:\n"; cnt = 0; for (auto i : v) { if (!die[getid(i.se)]) { cout << ++cnt << ". "; switch (i.se) { case 'R': color('R', "R(红色)"); break; case 'W': color('W', "W(西瓜红)"); break; case 'O': color('O', "O(橙色)"); break; case 'Y': color('Y', "Y(黄色)"); break; case 'G': color('G', "G(绿色)"); break; case 'C': color('C', "C(青色)"); break; case 'S': color('S', "S(天蓝)"); break; case 'B': color('B', "B(蓝色)"); break; case 'P': color('P', "P(紫色)"); break; case 'p': color('p', "p(粉色)"); break; } if (i.se == c) { cout << " <-你"; } cout << el; } } cout << "\n本轮淘汰选手:"; if (vec.size() == 0) { cout << "无" << el; TheEnd; } for (auto j : vec) { color(j, string(1, j)); cout << sp; } cout << el; if (die[getid(c)]) { Sleep_write("\n很遗憾,你被淘汰了!\n"); _sl(2000); _pa; goto menu; } if (remain == 1) { _cl; cout << "----- 淘汰赛冠军 -----\n"; for (int i = 1; i <= 10; i++) { if (!die[i]) { color(getcol(i), string(1, getcol(i))); if (getcol(i) == c) { cout << " <- 恭喜你获得冠军!"; } else { cout << " 获得冠军!"; } cout << el; break; } } _sl(2000); _pa; goto menu; } round++; Sleep_write("\n准备下一轮比赛...\n"); _sl(3000); } goto menu; survival: _cl; bro.clear(); Sleep_write("请选择你想要操控的色块:\n"); color('R', "R:红色\n"); color('W', "W:西瓜红\n"); color('O', "O:橙色\n"); color('Y', "Y:黄色\n"); color('G', "G:绿色\n"); color('C', "C:青色\n"); color('S', "S:天蓝\n"); color('B', "B:蓝色\n"); color('P', "P:紫色\n"); color('p', "p:粉色\n"); c = get("RWOYGCSBPp"); _cl; show(0); reset2(); v.clear(); die.reset(); out2(); Sleep_write("3……\n"); _sl(1000); out2(); Sleep_write("2……\n"); _sl(1000); out2(); Sleep_write("1……\n"); _sl(1000); out2(); Sleep_write("GO!\n"); _sl(500); cnt = 0; while (10 - v.size() > 1) { out2(); cout << "剩余选手: " << 10 - v.size() << "人\n"; cout << "你操控的色块是:"; color(c, string(1, c)); cout << "\n按下D键让你的色块向前(后)冲!\n碰到岩浆(X)就淘汰了!\n"; cout << "已淘汰选手:"; if (v.empty()) { cout << "无" << el; } else { cout << el; for (auto i : v) { cout << i.fi << "." << sp; switch (i.se) { case 'R': color('R', "R(红色)"); break; case 'W': color('W', "W(西瓜红)"); break; case 'O': color('O', "O(橙色)"); break; case 'Y': color('Y', "Y(黄色)"); break; case 'G': color('G', "G(绿色)"); break; case 'C': color('C', "C(青色)"); break; case 'S': color('S', "S(天蓝)"); break; case 'B': color('B', "B(蓝色)"); break; case 'P': color('P', "P(紫色)"); break; case 'p': color('p', "p(粉色)"); break; } str c; for (auto j : bro) { if (j.fi == i.se) { c = j.se; break; } } cout << c; cout << el; } } if (die[getid(c)]) { Sleep_write("很遗憾,你被淘汰了。下次继续努力!\n"); _sl(2000); _pa; goto menu; } F(i, 1, 10, 1) { if (die[i] || id[i] == 75) { TheEnd; } if (getid(c) == i) { if (_KE('D')) { id[getid(c)] += rand() % 4 - 1; } } else { id[i] += rand() % 4 - 1; } id[i] = std::min(id[i], 75LL); } F(i, 1, 10, 1) { if (id[i] <= lava[i] && !die[i]) { die[i] = 1; v.push_back({++cnt, getcol(i)}); str strnum[] = {"被岩浆灼烧而死。", "试图在岩浆里游泳。", "浴火焚身。", "彻底红温。", "放弃了挣扎。"}; bro.push_back({getcol(i), strnum[rand() % 5]}); } } _sl(200); F(i, 1, 10, 1) { if (!die[id[i]]) { if (rand() % 3 == 0) { id[i]--; if (rand() % 3 == 0) { id[i]--; } } } } ran(); } if (!die[getid(c)]) { Sleep_write("恭喜你,成为了唯一的幸存者!\n", 20); _sl(2000); _pa; } goto menu; setskin: _cl; Sleep_write("请选择你想设置皮肤的色块(输入1退出):\n"); color('R', "R:红色\n"); color('W', "W:西瓜红\n"); color('O', "O:橙色\n"); color('Y', "Y:黄色\n"); color('G', "G:绿色\n"); color('C', "C:青色\n"); color('S', "S:天蓝\n"); color('B', "B:蓝色\n"); color('P', "P:紫色\n"); color('p', "p:粉色\n"); c = get("RWOYGCSBPp1"); if (c == '1') { goto menu; } else { Sleep_write("当前色块的皮肤为:"); str tt = ""; tt += skin[getid(c)]; color(c, tt); cout << el; Sleep_write("输入更换方式:\n1.设置为默认皮肤(\"i\")\n2.设置为颜色代号("); cout << c; Sleep_write(")\n3.自定义\n4.不更换\n"); char t = get("1234"); if (t == '1') { skin[getid(c)] = 'i'; Sleep_write("设置成功!\n"); _sl(1000); } else { if (t == '2') { skin[getid(c)] = c; Sleep_write("设置成功!\n"); _sl(1000); } else { if (t == '3') { Sleep_write("请输入你想设置的皮肤(只能是一个字符):\n"); char ttt = get("", 1); skin[getid(c)] = ttt; Sleep_write("设置成功!\n"); _sl(1000); } else { goto setskin; } } } goto setskin; } to_the_end: Sleep_write("感谢游玩!"); exit(0); } //Yuexingfei_qwq is a flying-wind ``` --- ## 抽卡(目前第二长代码……923行) ```cpp #include <bits/stdc++.h> #include <windows.h> #include <conio.h> #define pa system("pause") #define cl system("cls") #define wh while (1) #define int long long using namespace std; long double money = 100.0; int N = 0; int R = 0; int SR = 0; int SSR = 0; int TR = 0; int TGR = 0; int HR = 0; int UR = 0; int LSR = 0; int CR = 0; int SGR = 0; int SC = 0; int tot = 0; int ci = 2; string ka; int zhangshu; int ten_eig = 0, fiv_fou = 0; int cicnt = 0; const string s[13] = {"", "N", "R", "SR", "SSR", "TR", "TGR", "HR", "UR", "LSR", "CR", "SGR", "SC"}; int a[13] = {0}; int ma[13] = {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}; const double jia[13] = {0, 0.5, 1, 3, 5, 5, 7, 10, 15, 20, 30, 50, 300}; const double xian[13] = {0, 0.2, 0.4, 0.6, 1, 2, 5, 3, 7, 20, 50, 100, 1000}; struct shuxing { bool f = false; int cishu = 0, shangxian = 15; double qian = 0.5; } latiao, xiaoyang, huogai, suanniu; inline void init(void) { suanniu.qian = 1; suanniu.shangxian = 12; } inline void Sleep_write(const string &x, const int &y = 10, char c = 'y') { for (int i = 0; i < (int)x.length(); i++) { putchar(x[i]); Sleep(y); } if (c != 'n') { putchar('\n'); } Sleep(500); } inline char get(string s) { char ch[114514]; int l = 0; for (auto i : s) { ch[++l] = i; } while (true) { char x = getch(); for (int i = 1; i <= l; i++) { if (x == ch[i]) { return x; } } Sleep_write("Error:输入无效\n"); Sleep(100); } } signed main() { init(); int q, f; Sleep_write("一天,你运气爆棚,捡到了100块钱\n你高兴极了,作为贫穷的高质量市民,你决定拿来买卡\n开始吧!\n提示:\n游戏中卡的等级仅为部分(不算限定卡等特殊卡),\n卡的概率以小马宝莉的卡为标准"); system("pause"); goto zhu; cla: goto zhu1; ti: system("cls"); Sleep_write("等级顺序:(从小到大)", 2); for (int i = 1; i <= 12; i++) { cout << s[i] << " "; } cout << endl; Sleep_write("市场价格:(单位:元)", 2); for (int i = 1; i <= 12; i++) { cout << s[i] << ":"; printf ("%.1f\n", jia[i]); } printf ("\n"); Sleep_write("同学羡慕值:(单位:点,2点 = 1元,初始一种卡最多可以炫耀3次,可以买小样增加炫耀次数)", 2); for (int i = 1; i <= 12; i++) { cout << s[i] << ":"; printf ("%.1f\n", xian[i]); } printf ("\n"); Sleep_write ("辣条可以增加蹭卡成功率,小卖部有15包货\n小样可以增加卡的炫耀次数,小卖部有15根货\n一包活该可以只用4元买一个五元包,小卖部有15包货\n一包酸妞可以只用8元买一个十元包,小卖部有10包货\n", 5); system("pause"); goto zhu; ge: system("cls"); printf ("你的钱:%.1Lf\n", money); for (int i = 1; i <= 12; i++) { cout << s[i] << ":"; if (s[i] == "N") { printf ("%lld", N); } else { if (s[i] == "R") { printf ("%lld", R); } else { if (s[i] == "SR") { printf ("%lld", SR); } else { if (s[i] == "SSR") { printf ("%lld", SSR); } else { if (s[i] == "TR") { printf ("%lld", TR); } else { if (s[i] == "TGR") { printf ("%lld", TGR); } else { if (s[i] == "HR") { printf ("%lld", HR); } else { if (s[i] == "UR") { printf ("%lld", UR); } else { if (s[i] == "LSR") { printf ("%lld", LSR); } else { if (s[i] == "SGR") { printf ("%lld", SGR); } else { if (s[i] == "CR") { printf ("%lld ", CR); } else { printf ("%lld", SC); } } } } } } } } } } } printf ("\n"); } printf ("卡的总数:%lld\n", tot); printf ("技能“用4元买一包5元包的次数”:%lld\n", fiv_fou); printf ("技能“用8元买一包10元包的次数”:%lld\n", ten_eig); system("pause"); goto zhu; shop: system("cls"); printf ("欢迎来到童年小卖部~~~\n你要买什么?\n1.2元包\n2.5元包\n3.10元包\n4.辣条(0.5元,技能:蹭卡成功几率增加)\n5.小样(0.5元,技能:炫耀次数增加)\n6.活该(0.5元,技能:用4元买一包5元包的次数+1)\n7.酸妞(1元,技能:用8元买一包10元包的次数+1)\n8.退出\n你的钱:%.1Lf\n", money); q = getch(); switch (q) { case '1': cout << endl; if (money >= 2) { money -= 2; N += 2; printf ("你获得了2张N卡、"); f = rand() % 15 + 1; if (f <= 8) { R += 2; SR++; printf ("2张R卡、1张SR卡!"); } else { printf ("1张R卡、1张SR卡、"); R++, SR++; f = rand() % 5 + 1; if (f == 1) { f = rand() % 5 + 1; if (f == 1) { CR++; printf ("1张CR卡!!!!!"); } else { printf ("1张UR卡!"); UR++; } } else { printf ("1张SSR卡!"); SSR++; } } printf ("\n"); Sleep(500); } else { Sleep_write("你买不起!"); } system("pause"); break; case '2': cout << endl; if (fiv_fou && money >= 4) { puts("是否要使用技能:“用4元买一包5元包”?(Y/N)"); puts("技能剩余使用次数:"); cout << fiv_fou << endl; char input = tolower(get("YyNn")); if (input == 'y') { R += 4; money -= 4; fiv_fou--; printf ("你获得了4张R卡、"); f = rand() % 7 + 1; if (f == 5) { TGR++; printf ("1张TGR卡、"); } else { TR++; printf ("1张TR卡、"); } f = rand() % 10 + 1; if (f <= 5) { printf ("1张SR卡!"); SR++; } else { if (f <= 8) { printf ("1张SSR卡!"); SSR++; } else { printf ("1张UR卡!"); UR++; } } printf ("\n"); Sleep(500); } else { if (money >= 5) { R += 4; money -= 5; printf ("你获得了4张R卡、"); f = rand() % 7 + 1; if (f == 5) { TGR++; printf ("1张TGR卡、"); } else { TR++; printf ("1张TR卡、"); } f = rand() % 10 + 1; if (f <= 5) { printf ("1张SR卡!"); SR++; } else { if (f <= 8) { printf ("1张SSR卡!"); SSR++; } else { printf ("1张UR卡!"); UR++; } } printf ("\n"); Sleep(500); } else { Sleep_write("你好像不能不用卡…\n"); } } } else { if (money >= 5) { R += 4; money -= 5; printf ("你获得了4张R卡、"); f = rand() % 7 + 1; if (f == 5) { TGR++; printf ("1张TGR卡、"); } else { TR++; printf ("1张TR卡、"); } f = rand() % 10 + 1; if (f <= 5) { printf ("1张SR卡!"); SR++; } else { if (f <= 8) { printf ("1张SSR卡!"); SSR++; } else { printf ("1张UR卡!"); UR++; } } printf ("\n"); Sleep(500); } else { Sleep_write("你买不起!"); } } system("pause"); break; case '3': cout << endl; if (ten_eig && money >= 8) { puts("是否要使用技能:“用8元买一包10元包”?(Y/N)"); puts("技能剩余使用次数:"); cout << ten_eig << endl; char input = tolower(get("YyNn")); if (input == 'y') { money -= 8; R += 3; ten_eig--; SR++; HR++; printf ("你获得了3张R卡、1张SR卡、一张HR卡、"); f = rand() % 18 + 1; if (f <= 5) { f = rand() % 5 + 1; if (f == 1) { f = rand() % 5 + 1; if (f == 1) { printf ("1张SC卡!!!!!!!!!!!!"); SC++; } else { printf ("1张SGR卡!!!!!"); SGR++; } } else { printf ("1张LSR卡!!!!!"); LSR++; } } else { f = rand() % 5 + 1; if (f == 1) { printf ("1张UR卡!"); UR++; } else { printf ("1张SSR卡!"); SSR++; } } printf ("\n"); Sleep(500); } else { if (money >= 10) { money -= 10; R += 3; SR++; HR++; printf ("你获得了3张R卡、1张SR卡、一张HR卡、"); f = rand() % 18 + 1; if (f <= 5) { f = rand() % 5 + 1; if (f == 1) { f = rand() % 5 + 1; if (f == 1) { printf ("1张SC卡!!!!!!!!!!!!"); SC++; } else { printf ("1张SGR卡!!!!!"); SGR++; } } else { printf ("1张LSR卡!!!!!"); LSR++; } } else { f = rand() % 5 + 1; if (f == 1) { printf ("1张UR卡!"); UR++; } else { printf ("1张SSR卡!"); SSR++; } } printf ("\n"); Sleep(500); } else { Sleep_write("你好像不能不用卡…"); } } } else { if (money >= 10) { money -= 10; R += 3; SR++; HR++; printf ("你获得了3张R卡、1张SR卡、一张HR卡、"); f = rand() % 18 + 1; if (f <= 5) { f = rand() % 5 + 1; if (f == 1) { f = rand() % 5 + 1; if (f == 1) { printf ("1张SC卡!!!!!!!!!!!!"); SC++; } else { printf ("1张SGR卡!!!!!"); SGR++; } } else { printf ("1张LSR卡!!!!!"); LSR++; } } else { f = rand() % 5 + 1; if (f == 1) { printf ("1张UR卡!"); UR++; } else { printf ("1张SSR卡!"); SSR++; } } printf ("\n"); Sleep(500); } else { Sleep_write("你买不起!"); } } system("pause"); break; case '4': cout << endl; if (latiao.cishu >= latiao.shangxian) { Sleep_write("没货了…"); break; } if (ci <= 1) { Sleep_write("不能再加了!"); break; } latiao.cishu++; Sleep_write("你吃下了辣条!"); Sleep_write("发动技能:蹭卡成功几率增加!"); money -= latiao.qian; ci -= (ci <= 3 ? (ci - 1) : 2 + rand() % 3); system("pause"); break; case '5': cout << endl; if (xiaoyang.cishu >= xiaoyang.shangxian) { Sleep_write("没货了…"); break; } xiaoyang.cishu++; Sleep_write("你吃下了小样!"); Sleep_write("发动技能:炫耀次数增加!"); money -= xiaoyang.qian; for (int i = 0; i <= 12; i++) { ma[i] += 1; } system("pause"); break; case '6': cout << endl; if (huogai.cishu >= huogai.shangxian) { Sleep_write("没货了…"); break; } huogai.cishu++; Sleep_write("你吃下了活该!"); Sleep_write("发动技能:用4元买一包5元包的次数+1!"); money -= huogai.qian; fiv_fou++; system("pause"); break; case '7': cout << endl; if (suanniu.cishu >= suanniu.shangxian) { Sleep_write("没货了…"); break; } suanniu.cishu++; Sleep_write("你吃下了酸妞!"); Sleep_write("发动技能:用8元买一包10元包的次数+1!"); money -= suanniu.qian; ten_eig++; system("pause"); break; case '8': goto zhu; break; default: goto shop; break; } goto shop; zhu: tot = N + R + SR + SSR + TR + TGR + HR + UR + LSR + CR + SGR + SC; system("cls"); printf ("1.买卡\n2.卖卡\n3.去班级\n4.退出\n5.说明\n6.查看个人信息\n"); q = getch(); switch (q) { case '1': goto shop; break; case '2': goto mai; break; case '3': goto cla; break; case '4': return 0; case '5': goto ti; break; case '6': goto ge; break; default: goto zhu; break; } mai: wh { cl; Sleep_write("欢迎来到黑市~~~"); Sleep_write("你的情况如下:"); printf ("你的钱:%.1Lf\n", money); for (int i = 1; i <= 12; i++) { cout << s[i] << ":"; if (s[i] == "N") { printf ("%lld", N); } else { if (s[i] == "R") { printf ("%lld", R); } else { if (s[i] == "SR") { printf ("%lld", SR); } else { if (s[i] == "SSR") { printf ("%lld", SSR); } else { if (s[i] == "TR") { printf ("%lld", TR); } else { if (s[i] == "TGR") { printf ("%lld", TGR); } else { if (s[i] == "HR") { printf ("%lld", HR); } else { if (s[i] == "UR") { printf ("%lld", UR); } else { if (s[i] == "LSR") { printf ("%lld", LSR); } else { if (s[i] == "SGR") { printf ("%lld", SGR); } else { if (s[i] == "CR") { printf ("%lld ", CR); } else { printf ("%lld", SC); } } } } } } } } } } } printf ("\n"); } Sleep_write("输入1退出。"); printf ("你要卖什么卡?\n"); cin >> ka; if (ka == "1") { break; } printf("你要售卖的卡一张"); if (ka == "N") { printf ("%.1f", jia[1]); } else { if (ka == "R") { printf ("%.1f", jia[2]); } else { if (ka == "SR") { printf ("%.1f", jia[3]); } else { if (ka == "SSR") { printf ("%.1f", jia[4]); } else { if (ka == "TR") { printf ("%.1f", jia[5]); } else { if (ka == "TGR") { printf ("%.1f", jia[6]); } else { if (ka == "HR") { printf ("%.1f", jia[7]); } else { if (ka == "UR") { printf ("%.1f", jia[8]); } else { if (ka == "LSR") { printf ("%.1f", jia[9]); } else { if (ka == "SGR") { printf ("%.1f", jia[10]); } else { if (ka == "CR") { printf ("%.1f ", jia[11]); } else { printf ("%.1f", jia[12]); } } } } } } } } } } } printf("元,确定售卖吗?(Y/N)\n"); char ch = tolower(get("YyNn")); if (ch == 'n') { goto mai; } printf ("卖多少张?\n"); cin >> zhangshu; int x; if (ka == "N") { x = N; } if (ka == "R") { x = R; } if (ka == "SR") { x = SR; } if (ka == "SSR") { x = SSR; } if (ka == "TR") { x = TR; } if (ka == "TGR") { x = TGR; } if (ka == "HR") { x = HR; } if (ka == "UR") { x = UR; } if (ka == "LSR") { x = LSR; } if (ka == "CR") { x = CR; } if (ka == "SGR") { x = SGR; } if (ka == "SC") { x = SC; } if (x < zhangshu) { Sleep_write("你没那么多卡!"); } else { if (ka == "N") { N -= zhangshu; money += zhangshu * 0.5; } if (ka == "R") { R -= zhangshu; money += zhangshu * 1; } if (ka == "SR") { SR -= zhangshu; money += zhangshu * 3; } if (ka == "SSR") { SSR -= zhangshu; money += zhangshu * 5; } if (ka == "TR") { TR -= zhangshu; money += zhangshu * 5; } if (ka == "TGR") { TGR -= zhangshu; money += zhangshu * 7; } if (ka == "HR") { HR -= zhangshu; money += zhangshu * 10; } if (ka == "UR") { UR -= zhangshu; money += zhangshu * 15; } if (ka == "LSR") { LSR -= zhangshu; money += zhangshu * 20; } if (ka == "CR") { CR -= zhangshu; money += zhangshu * 30; } if (ka == "SGR") { SGR -= zhangshu; money += zhangshu * 50; } if (ka == "SC") { SC -= zhangshu; money += zhangshu * 300; } Sleep_write("售卖成功!"); pa; } } goto zhu; ceng: f = rand() % ci; if (f > (ci <= 5 ? 1 : ci / (rand() % 4 + 2) + rand() % 3 - 1)) { Sleep_write ("蹭卡失败!"); } else { printf ("蹭到了3张N卡"); N += 3; f = rand() % 6; if (f) { printf ("、%lld张R卡", f); R += f; } f = rand() % 5; if (f) { printf ("、%lld张SR卡", f); } SR += f; f = rand() % 3; if (f) { printf ("、%lld张SSR卡", f); } SSR += f; if ((rand() % 10) == 1) { printf ("、2张UR"); UR += 2; } if ((rand() % 10) == 1) { printf ("、1张TR"); TR++; } if ((rand() % 15) == 1) { printf ("、1张HR"); HR++; ci++; } if ((rand() % 35) == 1) { printf ("、1张LSR!!!"); LSR++; ci += 2; } Sleep_write("!"); if (ci == 2) { ci++; } else { cicnt++; if (ci <= 5) { if (cicnt == 3) { ci++; cicnt = 0; } } else { if (cicnt == 2) { ci++; cicnt = 0; } } } } system("pause"); goto zhu1; xuan: cl; puts("要炫耀哪种卡?"); puts("你的情况如下:"); for (int i = 1; i <= 12; i++) { cout << s[i] << ":"; if (s[i] == "N") { printf ("%lld", N); } else { if (s[i] == "R") { printf ("%lld", R); } else { if (s[i] == "SR") { printf ("%lld", SR); } else { if (s[i] == "SSR") { printf ("%lld", SSR); } else { if (s[i] == "TR") { printf ("%lld", TR); } else { if (s[i] == "TGR") { printf ("%lld", TGR); } else { if (s[i] == "HR") { printf ("%lld", HR); } else { if (s[i] == "UR") { printf ("%lld", UR); } else { if (s[i] == "LSR") { printf ("%lld", LSR); } else { if (s[i] == "SGR") { printf ("%lld", SGR); } else { if (s[i] == "CR") { printf ("%lld ", CR); } else { printf ("%lld", SC); } } } } } } } } } } } printf (",还可以炫耀%lld次\n", ma[i] - a[i]); } puts("输入1退出。"); cin >> ka; if (ka == "1") { goto zhu1; } int y; for (int i = 1; i <= 12; i++) { if (s[i] == ka) { y = i; break; } } if (a[y] == ma[y]) { Sleep_write("不能再炫耀这种卡了!"); } else { int n; if (ka == "N") { n = N; } if (ka == "R") { n = R; } if (ka == "SR") { n = SR; } if (ka == "SSR") { n = SSR; } if (ka == "TR") { n = TR; } if (ka == "TGR") { n = TGR; } if (ka == "HR") { n = HR; } if (ka == "UR") { n = UR; } if (ka == "LSR") { n = LSR; } if (ka == "CR") { n = CR; } if (ka == "SGR") { n = SGR; } if (ka == "SC") { n = SC; } if (n == 0) { Sleep_write("你没有这种卡!"); } else { n *= xian[y]; a[y]++; printf ("共获得了%lld点羡慕值!", n); money += n * 0.5; } } pa; goto zhu1; zhu1: system("cls"); puts("你踏入了 6 班..."); puts("1.蹭卡"); puts("2.炫耀"); puts("3.返回"); q = getch(); if (q == '1') { goto ceng; } else { if (q == '2') { goto xuan; } else { if (q == '3') { goto zhu; } else { goto zhu1; } } } } ```
Loading...
点赞
0
收藏
0