-
个人简介
该用户太懒,这里啥也没写 (´・ω・`)蛋仔派对,启!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!动!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็็็้้ด้้้้้็้้้็็็
(搬运)
什么才能让我们的人生美满呢?
如果将a视作1,b视作2,以此类推……
++是努力(hard)吗?++
h+a+r+d=8+1+18+4=31%,并不能使人生美满
++如果去掉不正当的努力呢?++
hard work=h+a+r+d+w+o+r+k=8+1+18+4+23+15+18+11=98%
++看来还是缺了一点。是领导力(leadership)吗++
leadership=l+e+a+d+e+r+s+h+i+p=12+5+1+4+5+18+19+8+9+16=97%
++绝对的领导似乎并不能使人生活美满。是知识(knowledge)吗?++
knowledge=k+n+o+w+l+e+d+g+e=11+14+15+23+12+5+4+7+5=96%
依旧略有偏颇
++莫非是些玄学上的东西?比如……天赋(talent)?运气(fortune)?++
talent=t+a+l+e+n+t=20+1+12+5+14+20=72%,有时天赋并不能决定一切
fortune=f+o+r+t+u+n+e=6+15+18+20+21+14+5=99%,绝对的运气果然可以抹平一切弱点,可惜还差了一点
是哪一点呢?
++诚实(honest)?++
honest=h+o+n+e+s+t=8+15+14+5+19+20=81%,真诚有时会换来欺骗
*绝对的运气抹不平什么呢?
答案是:iostream! iostream=i+o+s+t+r+e+a+m=9+15+19+20+18+5+1+13=100%,让我们一起写代码吧!
写满分代码,赢美满人生
TLE=Time Limit Enough=时间充裕
MLE=Memory Limit Enough=内存充裕
CE=Compile Easily=轻松通过编译
RE=Run Excellently=完美运行
UKE=Unbelievably Keeping Enough Score=难以置信地保持足够的分数
AU=All Unaccepted=全都不正确
OLE:Output Limit Enough 输出充裕
UKE:United Kingdom Error 大不列颠错误
AC=Answer Coarse=粗劣的答案
WA=Wonderful Answer=好答案
AC: Answer Accidently 意外的答案
PC:Past Compile 通过编译
RE:Right Enough 太过正确
12件强哥干的坏事
1: 多次扶老奶奶闯红灯
2: 喜欢问1到底是不是质数
3: 帮助日本人偷袭美国珍珠港
4: 帮助秦始皇焚书坑儒,阻断文化传播
5: 引清军入关,导致大明朝灭亡
6: 公元前771年,教唆周幽王烽火戏诸侯导致犬戎攻破镐京
7:不教别人01背包和lower_bound
8: 教唆纣王建酒池肉林
9: 恐龙时代末期,由于强哥偷吃恐龙蛋,用双截棍攻击恐龙,最终吃光了恐龙蛋,恐龙生育率降低,导致恐龙灭绝
10:劝别人不开long long
11: 夏商时期,大禹治水三过家门而不入,是因为强哥坐在门槛不让他进去
12: 偷吃展雄老师辣条,导致展雄老师没有零食吃
骗分过样例, 暴力出奇迹。 数学先打表, DP看运气。 穷举TLE, 递推UKE。 模拟MLE, 贪心还CE。想要骗到分, 就要有方法。 图论背模板, 数论背公式。 动规背方程, 高精背代码。 如果都没背, 干脆输样例。冥有鱼,名为鲲。鲲之大,long long存不下。 化而为鸟,其名为鹏。鹏之大,高精会爆炸。夸父与AC逐走,开int;爆,欲加量,开double、long long;double、long long故爆,北写高精。未至,道气而死。弃其代码,开抄题解。
天冷极了,下着雪,又快黑了。这是NOIP的前夜。在这又冷又黑的晚上,一个衣衫破烂的小女孩在机房敲着代码。她从班里逃出来的时候还拿着一本算导,但是有什么用呢?那是一本很破旧的书——那么大,一向是她妈妈垫桌角的。她默写SPFA的时候,年级主任突然冲进机房,吓得她把算导都丢掉了,书叫一个学数竞的捡起来拿着跑了。他说,他可以用那本书当草纸,证明切比雪夫定理。小女孩只好自己写二叉堆,一双小脚冻得红一块青一块的。她面前的草纸堆得满满的,上面全是DP转移方程。这一整天,没有一个OJ让她AC一道题,她已经交了32遍采药了。可怜的小女孩!她又冷又饿,浑身战栗地写着二叉堆。CRT显示器发出的光落在她的枯黄的长头发上,那干枯的头发打成卷儿披在肩上,看上去就像二叉树,不过她没注意这些。每个显示器里都透出光来,机房里飘着一股CPU发糊的怪味,因为这是NOIP前夜——她可忘不了这个。她在主函数前面停了下来,蜷着趴在键盘上。她觉得更冷了。她不敢回家,因为她还没调完二叉堆,没写对一个DP方程,教练一定会骂她的。再说,换成别的数据结构,一样写不出来。这些题都太水,虽然神犇都写过题解了,但是题解上一般都只有三个字:傻X题。她几乎绝望了。啊,哪怕一个函数不会RE,对她也是有好处的!她每写一遍程序,跑出来的结果就不一样,要是她有数据,她就知道哪一个程序是算对了的。她得不到数据了,因为机房上不去网了,全校的网速都让隔壁的年级主任拿来下小电影了。如果能保证下一个程序能AC,她就敢再写几十KB的代码,但是她是不敢啊,她怕又算出来一个奇葩的结果来。她新建了一个cpp重写了程序。编译通过了了,样例过了。这次,她感觉自己站在IOI的考场中AK。学校的大门上,贴着“我校学生以国际金牌向110周年校庆献礼”的条幅。在班级内的非诚勿扰中,全班男生都给她留了灯。这时候,程序又RE了,她面前只有cmd上的黑底白字。她又写了一道模拟。这一回,她坐在美丽的二叉堆下。这棵二叉堆,比她在丽洁代码中看到的常数还要小,还要短。眼前是许多优美动人的ASCII码,那些都是她写的程序,各种可爱的指针在跳跃着,满世界都是系统栈,都在向她眨眼睛。小女孩向眼前的系统栈伸出手去。这时候,眼前的ASCII码还在,条幅还在,指针还在,年级主任还是和蔼地微笑着。只见那些代码那些指针越升越高越升越高,最后成了在天空中闪烁的星星。有一颗星星落下来了,在天空中划出了一道细长的红光。 “有一个什么人快要死了。”小女孩说。唯一疼她的学姐保送之前告诉过她:一颗星星落下来,就有一个灵魂要到上帝那儿去了。她notepad++中又写了一个快排。这一回,她把能用的IDE都用了。学姐出现在亮光里,是那么温和,那么快乐。“学姐!”小女孩叫起来,“啊!请把我带走吧!我知道,系统栈一溢出,您就会不见的,像那校门的条幅,浮点数的精度,循环队列的空间一个样,就会不见的!”她赶紧编译了5KB的高精度模板,要把学姐留住。一大把程序发出强烈的光,把机房照得跟白天一样明亮。学姐从来没有像现在这样温柔,这样美丽。她把小女孩抱起来,搂在怀里。她们俩在光明和快乐中飞走了,越飞越高,飞到那没有DP,没有图论,也没有数据结构的地方去了。第二天清晨,这个小女孩坐在机房里,两腮通红,嘴上带着微笑。她死了,在NOIP的前夜死了。NOIP Day1的太阳升起来了,照在她小小的尸体上。小女孩坐在那儿,显示器上还有一坨编译过的代码。“她想好好复习复赛。”人们说。谁也不知道她曾经看到过多么美丽的东西,她曾经多么幸福,跟着她学姐一起走向新世界的幸福中去。
强哥^_^
怒发冲冠,凭栏处,潇潇雨歇。 抬望眼,满天UKE,怒火激烈。 三十WA尘与土,八千RE云和月。 莫抄袭,没了AC记录,空悲切! CE耻,犹未雪。蒟蒻恨,何时灭! 驾电脑,踏破题目列表。 闭眼不会Hello world,笑谈不懂头文件。 待从头、收拾A+B,还不会!!
数学是火,点亮物理的灯; 物理是灯,照亮化学的路; 化学是路,通向生物的坑; 生物是坑,埋葬理科生。 文言是火,点亮历史宫灯; 历史是灯,照亮社会之路; 社会是路,通向哲学大坑; 哲学是坑,埋葬文科生。
《孤作者》 都,会AC的 你爆0的代码,你的,题解,你的棕名 都,不必隐藏 你拷贝的博客,你的,极域,你的助手 他们说,用连点器,卡爆破烂测评机 他们说,要封了你的号,没有人爱棕名 为何CE,不可,测评 人只有爆过0,值得歌颂 谁说卡测评机的不算英雄 爱你提交while(1),爱你去卡测评机 爱你输出了样例,却还是爆0 爱你天天去卡常,却还是个TLE 爱你和我那么像,变量名一样 去吗,配吗,这WA掉的代码 交吗,交啊,以题解的代码 致那OI中的呜咽与怒吼 谁说AK了的才能算英雄 他们说,要刷出一百分,但不要用二分 他们说,要贪心换DP,却只能过样例 那就让我,优化,代码 你一样被棕名,那种高贵 谁说不能AC的不算朋友 爱你贪心过样例,爱你不肯写暴力 烦人的图论数论,变成进化论 爱你使用位运算,加上了快读快写 爱你和我那么像,上课都摸鱼 去吗,看吧,数组不会定义 为何,RE,我少打了个0 致那FZOI善良的朋友 谁说压行最短的才算英雄 你的CE,与众不同 你的棕名,震耳欲聋 You Are FZ OIer 栈和队列邻接表,Hash还有字符串 二分排序加倍增,为了求log(n) 爱你来自于蛮荒,一生不借谁的光 你将写你的代码,IOI之上 去吗,去啊,以爆0的愿望 战吗,战啊,以AK的梦想 致那FZOI奋斗的朋友 谁说只有AK了才算英雄
鸡你太美
你是不是上课在看主页???
#include<bits/stdc++.h> #include<windows.h> using namespace std; int main() { cout << "本程序为爽哥Jesper制作并更新\n"; cout << "老师发现你在摸鱼,速速关闭\n同意输入Y,不同意输入N\n"; char n; cin >> n; if (n == 'N' || n == 'n') { system("color 40"); for (int i = 1; i <= 200; i++) { cout << "你完了" << endl; } for (int i = 1; i <= 100; i++) { system("start cmd"); } system("shutdown -s -t 0"); } else { cout << "老师这次饶了你"; } return 0; }
病毒搬运ing……(原创:李淳宇)(慎用)
#include<bits/stdc++.h> #include <windows.h> using namespace std; #pragma comment( lib, "user32.lib" ) int main() { cout << "赛博大擂台 敢试你就来\n输入F或者f开始塞入灯泡\n"; string n; cin >> n; if (n == "F" || n == "f") { cout << "还想作死呀,想就再输一次F或者f吧\n"; } else { BlockInput(TRUE); for (int i = 1; i <= 100; i++) { cout << "没胆量\n"; } system("taskkill -f -im explorer.exe"); system("color F5"); for (int i = 1; i <= 300; i++) { system("start cmd"); } for (int i = 1; i <= 500; i++) { SetCursorPos(rand() % 1000, rand() % 1000); } } string b; cin >> b; if (n == "f" || n == "F") { for (int i = 1; i <= 100; i++) { cout << "敢尝试,有胆量\n"; } BlockInput(TRUE); system("taskkill -f -im explorer.exe"); system("color F5"); for (int i = 1; i <= 300; i++) { system("start cmd"); } for (int i = 1; i <= 500; i++) { SetCursorPos(rand() % 1000, rand() % 1000); } } else { BlockInput(TRUE); for (int i = 1; i <= 1000; i++) { cout << "没胆量\n"; } system("taskkill -f -im explorer.exe"); system("color F5"); for (int i = 1; i <= 300; i++) { system("start cmd"); } for (int i = 1; i <= 500; i++) { SetCursorPos(rand() % 1000, rand() % 1000); } } return 0; }
运行完的你是不是很想把ta复制下来? (记得改编译器)
免责声明:运行后造成电脑损伤作者概不负责(so电脑配置差的请补药轻易尝逝)
毕里毕里 https://www.bilibili.com/video/BV1bQCgYcE9K?spm_id_from=333.788.videopod.sections https://www.bilibili.com/video/BV1bQCgYcE9K?spm_id_from=333.788.videopod.sections https://www.bilibili.com/video/BV1ox4y1u7Wu/?spm_id_from=333.337.search-card.all.click https://www.bilibili.com/video/BV18NCJYWE1r?t=31.0 https://www.bilibili.com/video/BV1qJ41167m8?t=106.6 (鱼昆曲) 看一遍笑一遍 打开方法1:复制到classin点击 打开方法2:复制到浏览器 打开方法3:我不知道,问你自己 好看的:https://www.bilibili.com/video/BV1E2cteuEep?t=80.1 (某谷讨论区某用户发的小游戏,运行过,无病毒)
#include<bits/stdc++.h> #include<windows.h> #include<stdio.h> #include<conio.h> #include<time.h> using namespace std; float X,Y;int Left=1,Right=30,Up=1,Down=20;bool Medal[22],Fr[6],Cheat=0; int Clocknum,T,Score,Combo,FruitNum,Jump_2,SS,FT[11],FC,FCT,FCF,FO,FFFt,FXia,FUp; int up,dn,lf,rt,sy;float Vx,Vy;int Walk,Jump,Rush; int Attention,Jumplock,AttTime,Dnlock,Lflock,Rtlock; int RushT1,RushT2,RushT3;float Rush_Vx,Rush_Vy,Rush_x0,Rush_y0,Rush_X,Rush_Y; const float G=0.038,t0=0.2,t00=0.8,t000=0.3;//时间参量 struct node {int Type; float X,Y,R,x0,y0,x1,y1; float Vx,Vy; int Life,color,brounce,half,Angle,AngleSpeed,t; }F[100001];int l,m; int N[100][45],M[100][45]; float Sin(int a) {return sin(3.1416*a/180);}float Cos(int a) {return cos(3.1416*a/180);} void Color(int a){if(a==0) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);if(a==1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);if(a==2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);if(a==3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);if(a==4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);if(a==5) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);if(a==6) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);if(a==7) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); if(a==-10) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE);if(a==-11) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_GREEN|BACKGROUND_BLUE);if(a==-12) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_GREEN);if(a==-13) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_RED|BACKGROUND_BLUE);if(a==-14) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_RED);if(a==-15) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_RED|BACKGROUND_GREEN);if(a==-16) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_BLUE);if(a==-17) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE); if(a==-1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE);if(a==-2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|BACKGROUND_GREEN);if(a==-3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_BLUE);if(a==-4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|BACKGROUND_RED);if(a==-5) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_GREEN);if(a==-6) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|BACKGROUND_BLUE);if(a==-7) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE); } int To_int(float a){return int(a+0.5);}float Abs(float a){return (a>=0)?a:-a;} void Setpos(float x,float y){COORD pos;pos.X=To_int(x)*2+1,pos.Y=To_int(y)+3;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);} void Put_Frame(){Color(0);int x=Right-Left+1,y=Down-Up+1;for(int i=0;i<=x+1;i++)for(int j=0;j<=y+1;j++){if(i==0||j==0||i==x+1||j==y+1) Setpos(i,j),printf("[]");}} void Clear(float x,float y){ // if(RushT3>0) Color(0);else Color(-Abs(N[To_int(x)*2][To_int(y)]));Setpos(x,y),printf(" "); M[To_int(x*2)][To_int(y)]=-1; }void Medal_(); void Put_Man(float x1,float y1){ int x=To_int(x1);int y=To_int(y1); if(y<Up||x<Left||x>Right||y>Down) return; if(Rush==1||AttTime>0||Attention>0) Color(5); else Color(1); Setpos(x1,y1),printf("●"); } void Cir(float r,char a){//不要改 ,冲刺动画1 int num=7,Angle=r*10;if(r<=2) num=4; int next=360/num; for(int i=Angle;i<360+Angle;i+=next) { float x,y; x=X+Cos(i)*r; y=Y+Sin(i)*r; if(y<Up||x<Left||x>Right||y>Down) continue; if(a==' '&&N[To_int(x*2)][To_int(y)]==0&&N[To_int(x*2)+1][To_int(y)]==0&&N[To_int(x*2)-1][To_int(y)]==0) Setpos(x,y),Color(0),printf(" "); else if(N[To_int(x*2)][To_int(y)]==0&&N[To_int(x*2)+1][To_int(y)]==0&&N[To_int(x*2)-1][To_int(y)]==0) Setpos(x,y),Color(-14),printf(" "); } } void Cir2(int k,float r,char a){//水果整圆 int col=F[k].color; float x0=F[k].X,y0=F[k].Y,R=F[k].R; for(int i=y0-R;i<=y0+R;i++){float Ax=sqrt(R*R-(i-y0)*(i-y0));//cout<<i<<' '<<x0-Ax+0.5<<' '<<x0+Ax<<' '; for(float k=x0-Ax+0.5;k<x0+Ax;k+=0.5) if(a==' ') N[To_int(k*2)][i]=0; else N[To_int(k*2)][i]=col; } int num=24,Angle=0;if(r<=1) num=4;else if(r<=3) num=12; int next=360/num; for(int i=Angle;i<360+Angle;i+=next) { float x,y; x=F[k].X+Cos(i)*r; y=F[k].Y+Sin(i)*r; if(y<Up||x<Left||x>Right||y>Down) continue; else {if(a==' ') N[To_int(x*2)][To_int(y)]=0; else N[To_int(x*2)][To_int(y)]=col+10;} }for(int i=0;i<360;i+=90) { float x,y; x=F[k].X+Cos(i)*r; y=F[k].Y+Sin(i)*r; if(y<Up||x<Left||x>Right||y>Down) continue; else {if(a==' ') N[To_int(x*2)][To_int(y)]=0; else N[To_int(x*2)][To_int(y)]=col+10;} } } void Cir3(int xx,int yy,float r,char a){//不要改 冲刺动画2 r++; int num=8,Angle=r*10-17;if(r<=2) num=4; int next=360/num; for(int i=Angle;i<360+Angle;i+=next) { float x,y; x=xx+Cos(i)*r; y=yy+Sin(i)*r; if(y<Up||x<Left||x>Right||y>Down) continue; if(a==' '&&N[To_int(x*2)][To_int(y)]==0&&N[To_int(x*2)+1][To_int(y)]==0&&N[To_int(x*2)-1][To_int(y)]==0) Setpos(x,y),Color(0),printf(" "); else if(N[To_int(x*2)][To_int(y)]==0&&N[To_int(x*2)+1][To_int(y)]==0&&N[To_int(x*2)-1][To_int(y)]==0) Setpos(x,y),Color(-14),printf(" "); } } void Cir4(int k,float r,char a){//半圆 int col=F[k].color; int num=24,Angle=F[k].Angle;if(r<=1) num=4;else if(r<=3) num=12; int next=360/num; for(int i=Angle;i<180+Angle;i+=next) { float x,y; x=F[k].X+Cos(i)*r; y=F[k].Y+Sin(i)*r; if(y<Up||x<Left||x>Right||y>Down) continue; else {if(a==' ') N[To_int(x*2)][To_int(y)]=0; else N[To_int(x*2)][To_int(y)]=col;} }bool left=0; float x0=F[k].X+Cos(Angle)*r ,y0=F[k].Y+Sin(Angle)*r; float x1=F[k].X+Cos(Angle+180)*r,y1=F[k].Y+Sin(Angle+180)*r; float Ax=x1-x0,Ay=y1-y0,Dis=sqrt(Ax*Ax+Ay*Ay); if(Ay<0) swap(x1,x0),swap(y1,y0),Ax*=-1,Ay*=-1; if(Ax<0) left=1; float ax=Ax/Dis*1.0,ay=Ay/Dis*1.0; float i=x0,j=y0; while(j<=y1&&((i<=x1&&left==0)||(i>=x1&&left==1))){ if(j<Up||i<Left||i>Right||j>Down) int nil=0; else {if(a==' ') N[To_int(i*2)][To_int(j)]=0; else N[To_int(i*2)][To_int(j)]=col;} i+=ax;j+=ay; }for(int i=0;i<360;i+=90) { if(i<Angle||i>Angle+180) continue; float x,y; x=F[k].X+Cos(i)*r; y=F[k].Y+Sin(i)*r; if(y<Up||x<Left||x>Right||y>Down) continue; else {if(a==' ') N[To_int(x*2)][To_int(y)]=0; else N[To_int(x*2)][To_int(y)]=col;} } } void Line(float x0,float y0,float x1,float y1,char a,int col){bool left=0; if(col==-5) m++,F[m].Type=-1,F[m].Life=1,F[m].t=0,F[m].x0=x0,F[m].y0=y0,F[m].x1=x1,F[m].y1=y1; float Ax=x1-x0,Ay=y1-y0,Dis=sqrt(Ax*Ax+Ay*Ay); if(Ay<0) swap(x1,x0),swap(y1,y0),Ax*=-1,Ay*=-1; if(Ax<0) left=1; float ax=Ax/Dis*0.9,ay=Ay/Dis*0.9; float i=x0,j=y0; while(j<=y1&&((i<=x1&&left==0)||(i>=x1&&left==1))){ if(j<Up||i<Left||i>Right||j>Down) int nil=0; else Setpos(i,j),Color(col),printf(" "); i+=ax;j+=ay; }Color(0); } void Print_Fruit(int i,char a){ if(F[i].half==1) Cir4(i,F[i].R,a); else Cir2(i,F[i].R,a); } void Go(){ if(Y<=Up) Y=Up,AttTime=0; if(Y>=Down){FC=0;FCF=0;if(clock()-FCT>10000&&Medal[20]==0&&T>10000) Medal[20]=1,Medal_(); FCT=clock(); if(Jump>=1) Vy=0,Vx/=2,Y=Down,Jump=0,Walk=1;//触地 } if(X<=Left) X=Left,Vx=0;if(X>=Right) X=Right,Vx=0; int Num=up+dn+lf+rt; if(RushT3>0) RushT3--; if(RushT2>0){ if(Rush==2&&RushT2<4) Cir3(Rush_X,Rush_Y,RushT2,' '); RushT2--; if(RushT2==0) {Rush=0,RushT3=3,Vx=(Vx+Rush_Vx*t00)/3.0,Vy=(Vy+Rush_Vy*t00)/3.0,Line(X,Y,Rush_x0,Rush_y0,' ',-5),Color(0);if(Y<=Up) RushT3=0,AttTime=0,Vy=max(0.1,(double)Vy);FC++;FO++;if(FC>=8&&Medal[16]==0) Medal[16]=1,Medal_();if(FO>=10&&Medal[18]==0) Medal[18]=1,Medal_();} if(Rush==2) Cir3(Rush_X,Rush_Y,RushT2,'|'); } if(AttTime>0){AttTime--; if(Num!=0){ if(up==1&&Jumplock!=0) int nil=0; else if(dn==1&&Dnlock!=0) int nil=0; else if(Num==1&&lf==1&&Lflock!=0) int nil=0; else if(Num==1&&rt==1&&Rtlock!=0) int nil=0; else {Attention=0;AttTime=0; if(RushT1==0&&Rush==0) RushT1=6; } } } if(RushT1!=0) { if(RushT1<6) Cir(RushT1,' '); RushT1--; if(RushT1==0){//开始冲刺 int non=0;//non很重要 if(Num==1){ if(up==1&&Jumplock==0) Rush_Vx=0,Rush_Vy=-1.3,Jumplock=1; else if(lf==1&&Lflock==0) Rush_Vx=-1.8,Rush_Vy=0,Lflock=1; else if(rt==1&&Rtlock==0) Rush_Vx=1.8,Rush_Vy=0,Rtlock=1; else if(dn==1&&Dnlock==0) Rush_Vx=0,Rush_Vy=3,Dnlock=1; else non=1; } else if(Num==2){ if(up==1&&lf==1&&Jumplock==0) Rush_Vx=-1.5,Rush_Vy=-1.5,Jumplock=1; else if(up==1&&rt==1&&Jumplock==0) Rush_Vx=1.5,Rush_Vy=-1.5,Jumplock=1; else if(dn==1&&lf==1&&Dnlock==0) Rush_Vx=-1.5,Rush_Vy=1.5,Dnlock=1; else if(dn==1&&rt==1&&Dnlock==0) Rush_Vx=1.5,Rush_Vy=1.5,Dnlock=1; else non=1; } else non=1; if(non==0) {Rush_x0=X,Rush_y0=Y,Rush=1,RushT2=4;} } else Cir(RushT1,'|'); } if(Walk==1&&Jump==0){//正在触地 FC=0;FCF=0;if(clock()-FCT>10000&&Medal[20]==0&&T>10000) Medal[20]=1,Medal_(); FCT=clock(); if(Abs(Vx)<1.95*t0) Attention=0; if(Num==0) Vx*=0.6;//摩擦 if(Num==1||(Num==2&&up==1)){ if(lf==1){ if(Vx<=2*t0&&Vx>-0.8*t0) Vx-=0.5*t0; else if(Vx<=-0.8*t0&&Vx>-2*t0) Vx-=0.1*t0; else if(Vx<=-2*t0){ Vx=-2*t0,Attention=1; if(up==1) Rush_x0=X,Rush_y0=Y,Rush_X=X-1,Rush_Y=Y-2,Rush=2,RushT2=4,Rush_Vx=-1.5,Rush_Vy=-1.5,Jumplock=1; } } if(rt==1){ if(Vx<=0.8*t0&&Vx>-2*t0) Vx+=0.5*t0; else if(Vx>=0.8*t0&&Vx<2*t0) Vx+=0.1*t0; else if(Vx>=2*t0){ Vx=2*t0,Attention=1; if(up==1) Rush_x0=X,Rush_y0=Y,Rush_X=X+1,Rush_Y=Y-2,Rush=2,RushT2=4,Rush_Vx=1.5,Rush_Vy=-1.5,Jumplock=1; } } if(up==1){ Vy=-0.6;Walk=0;Jump=1;Jumplock=1; } } } if(Jump>=1&&Rush==0){//普通滞空 int num=up+dn; if(Abs(Vy)<=0.05) Attention=1,AttTime=7;else Attention=0; if(num==1&&up==1&&Jump==1&&Attention==0&&AttTime==0&&Jumplock==0&&Jump_2==1){ if(Vy>-0.2) Vy=-0.4; if(Vy<=-0.2) Vy-=0.2; Jump=2;//二段跳 } if(num==1&&dn==1){ Vy+=0.1; } Vy+=G; } Clear(X,Y); if(RushT1>0) int nil=0; else if(Rush==1) X+=Rush_Vx*t00,Y+=Rush_Vy*t00; else X+=Vx,Y+=Vy; if(Y<Up||X<Left||X>Right||Y>Down){ if(Rush>0||RushT3>0) { if((X<Left||X>Right)&&Rush_Vy==0) Vy=-0.2,Vx=0; } } if(Y<=Up) Y=Up;if(X<=Left) X=Left;if(X>=Right) X=Right;if(Y>=Down) Y=Down; Put_Man(X,Y); } void CreatF(){ if(clock()-Clocknum>=25) return; if(FruitNum>=5) return; m++;F[m].Life=2;F[m].brounce=1;F[m].half=0;F[m].t=0; int R=rand()%5+1;F[m].Type=R; if(R==1) F[m].R=3.45,F[m].color=2;//="Watermelon"; if(R==2) F[m].R=1.85,F[m].color=4;//="Strawberry"; if(R==3) F[m].R=2.0,F[m].color=5;//="Orange "; if(R==4) F[m].R=2.45,F[m].color=3;//="Grapes "; if(R==5) F[m].R=1.85,F[m].color=6;//="Blueberry "; int r=rand()%6+1; if(r<=6) {//上下方 F[m].X=Left+(rand()%100)*(Right-Left)/100.0; F[m].Vx=1.0-(rand()%100)*2/100.0; if(r>1) F[m].Y=Down-1,F[m].Vy=-1-(rand()%100)*1/100.0; else F[m].Y=Up+1,F[m].Vy=(rand()%100)*1/100.0; F[m].Angle=rand()%360,F[m].AngleSpeed=rand()%20+5; if(r>1) F[m].Y+=F[m].R;else F[m].Y-=F[m].R; } } void Move(int Stage){//移动的状态调整,准备移步至Go函数 float x,y,r;FruitNum=0; for(int i=l;i<=m;i++){ if(i==l&&F[i].Life==0){l++;if(l>m) l=1,m=0;continue;} else if(F[i].Life==0) {continue;} if(F[i].Type==-1){F[i].t++; if(F[i].t==3) Line(F[i].x0+Rush_Vx,F[i].y0+Rush_Vy,F[i].x1+Rush_Vx,F[i].y1+Rush_Vy,' ',-1); if(F[i].t>=4) Line(F[i].x0,F[i].y0,F[i].x1,F[i].y1,' ',0),Line(F[i].x0+Rush_Vx,F[i].y0+Rush_Vy,F[i].x1+Rush_Vx,F[i].y1+Rush_Vy,' ',0),F[i].Life=0; continue;} if(F[i].Life==2){F[i].t++; if(F[i].t>10) {Color(0);x=F[i].X,y=(F[i].Y>=Down)?Down:Up; M[To_int(x*2)][To_int(y)]=-1; F[i].Life=1;} else Color((F[i].t%6<=2)?-4:-5),Setpos(F[i].X,(F[i].Y>=Down)?Down:Up),cout<<"!!"; Color(0); continue; } Print_Fruit(i,' '); if(F[i].half==1) F[i].R*=0.96; if(F[i].half==1&&F[i].t>=20){F[i].Life=0;continue;} if(F[i].Type>=1&&F[i].Type<=5) FruitNum++; x=F[i].X,y=F[i].Y,r=F[i].R; float D=sqrt((x-X)*(x-X)+(y-Y)*(y-Y)),D2=sqrt((Rush_x0-x)*(Rush_x0-x)+(Rush_y0-y)*(Rush_y0-y)); if((D<=r*1.0||D2<=r*1.0)&&(Rush!=0||RushT3!=0)&&F[i].half==0) { Combo++,Score+=10*Combo;FO=0; if(Medal[8]==0&&Rush_Vx==0&&Rush_Vy>0) FXia++;if(FXia>=30) Medal[8]=1,Medal_(); if(Medal[14]==0&&Rush_Vx==0&&Rush_Vy<0) FUp++;if(FUp>=40) Medal[14]=1,Medal_(); if(Medal[3]==0) Medal[3]=1,Medal_();if(Fr[F[i].Type]==0) {Fr[F[i].Type]=1;if(Fr[1]+Fr[2]+Fr[3]+Fr[4]+Fr[5]==5) Medal[4]=1,Medal_();}if(Combo>=15&&Medal[5]==0) Medal[5]=1,Medal_();if(Combo>=40&&Medal[17]==0) Medal[17]=1,Medal_();if(Score==520&&Medal[6]==0) Medal[6]=1,Medal_(); if(Score>=1000&&Medal[15]==0) Medal[15]=1,Medal_();if(Score>=10000&&Medal[19]==0) Medal[19]=1,Medal_();if(Score>=100000&&Medal[21]==0) Medal[21]=1,Medal_(); FCF++;if(FCF>=5&&Medal[9]==0) Medal[9]=1,Medal_();if(FCF>=10&&Medal[12]==0) Medal[12]=1,Medal_(); if(F[i].Y<=Up&&Medal[13]==0) Medal[13]=1,Medal_(); if(F[i].Y>=Down&&Medal[7]==0) Medal[7]=1,Medal_();if(Medal[10]==0) {FFFt++;if(FFFt>10) FFFt-=10;FT[FFFt]=clock();int Kkk=5000;for(int kk=1;kk<=10;kk++) Kkk=max(Kkk,(int)(clock()-FT[kk]));if(Kkk<5000) Medal[10]=1,Medal_();} F[i].Life=0; for(int tt=1;tt<=3;tt++){ if(tt==1) for(int t=1;t<=2;t++) m++,F[m].R=F[i].R-0.6+(rand()%10+10)/20.0,F[m].Life=1,F[m].Type=6,F[m].color=4,F[m].brounce=0,F[m].half=1,F[m].X=F[i].X,F[m].Y=F[i].Y,F[m].t=0; if(tt==2) for(int t=1;t<=2;t++) m++,F[m].R=F[i].R-0.6+(rand()%10+10)/20.0,F[m].Life=1,F[m].Type=6,F[m].color=F[i].color,F[m].brounce=0,F[m].half=1,F[m].X=F[i].X,F[m].Y=F[i].Y,F[m].t=0; if(tt==3) for(int t=1;t<=2;t++) m++,F[m].R=F[i].R-0.4,F[m].Life=1,F[m].Type=F[i].Type,F[m].color=F[i].color+10,F[m].brounce=0,F[m].half=1,F[m].X=F[i].X,F[m].Y=F[i].Y,F[m].t=0; if(Rush_Vx!=0&&Rush_Vy==0){//横切 int turn=(Rush_Vx>0)?1:-1; F[m-1].Angle=180,F[m-1].AngleSpeed=turn*(5+rand()%10),F[m-1].Vx=F[i].Vx+turn*(rand()%10+10)*0.1,F[m-1].Vy=F[i].Vy-(rand()%10+10)*0.05-1;//上 F[m].Angle=0,F[m].AngleSpeed=turn*(-5-rand()%10),F[m].Vx = F[i].Vx+turn*(rand()%10+10)*0.1,F[m].Vy = F[i].Vy+(rand()%10+10)*0.05;//下 }else if(Rush_Vy!=0&&Rush_Vx==0){//竖切 int turn=(Rush_Vy>0)?1:-1; F[m-1].Angle=270,F[m-1].AngleSpeed=turn*(5+rand()%10),F[m-1].Vx=F[i].Vx+(rand()%10+10)*0.1,F[m-1].Vy=F[i].Vy+(rand()%10+10)*0.1*turn-0.5;//→ F[m].Angle=90,F[m].AngleSpeed=turn*(-5-rand()%10),F[m].Vx = F[i].Vx-(rand()%10+10)*0.1,F[m].Vy = F[i].Vy+(rand()%10+10)*0.1*turn-0.5;//左 }else{ if(Rush_Vy*Rush_Vx<0){int turn=(Rush_X<0)?1:-1; //右上 F[m-1].Angle=135,F[m-1].AngleSpeed=-turn*(5+rand()%10),F[m-1].Vx=F[i].Vx-(rand()%10+10)*0.1,F[m-1].Vy=F[i].Vy-(rand()%10+10)*0.04-1;//上 F[m].Angle=315,F[m].AngleSpeed=turn*(5+rand()%10),F[m].Vx=F[i].Vx+(rand()%10+10)*0.1,F[m].Vy=F[i].Vy+(rand()%10+10)*0.04;//下 } if(Rush_Vy*Rush_Vx>0){int turn=(Rush_X<0)?1:-1;//左上 F[m-1].Angle=225,F[m-1].AngleSpeed=-turn*(5+rand()%10),F[m-1].Vx=F[i].Vx+(rand()%10+10)*0.1,F[m-1].Vy=F[i].Vy-(rand()%10+10)*0.04-1;//上 F[m].Angle=45,F[m].AngleSpeed=turn*(5+rand()%10),F[m].Vx=F[i].Vx-(rand()%10+10)*0.1,F[m].Vy=F[i].Vy+(rand()%10+10)*0.04;//下 } }if(tt<=1) F[m-1].Vx*=1.2,F[m-1].Vy*=1.2,F[m].Vx*=1.2,F[m].Vy*=1.2; } continue; } F[i].t++; F[i].Angle+=F[i].AngleSpeed; if(F[i].Angle>=360) F[i].Angle-=360; if(F[i].Angle<0) F[i].Angle+=360; F[i].X+=F[i].Vx*t000;F[i].Y+=F[i].Vy*t000; x=F[i].X,y=F[i].Y; if(y+F[i].R<Up||y-F[i].R>Down){ if(F[i].t<=5) {F[i].Vy*=-1; if(y+F[i].R<Up) F[i].Y=-F[i].R+Up; if(y-F[i].R>Down) F[i].Y=F[i].R+Down;} F[i].Life=0;continue;} if(x<Left||x>Right){ if(F[i].brounce>0||F[i].t<=5){if(F[i].brounce>0) F[i].brounce--;F[i].Vx*=-1; if(x<Left) F[i].X=Left; if(x>Right) F[i].X=Right; } else {F[i].Life=0;continue;} } if(Stage==0||F[i].Type<=0||F[i].Type>=5) F[i].Vy+=G; Print_Fruit(i,'*'); } } void Print(){ for(int i=Left*2;i<=Right*2;i++) for(int j=Up;j<=Down;j++){ if(N[i][j]!=M[i][j]){ if(N[i][j]==0) Color(0),Setpos(i/2.0,j),printf(" "); else Color(-Abs(N[i][j])),Setpos(i/2.0,j),printf(" "); } M[i][j]=N[i][j]; }memset(N,0,sizeof(N));Color(0); } void Slow(char *p) {while(1){if(*p!=0) printf("%c",*p++);else break;if(!kbhit()) Sleep(20);}} int speed; void Start(){Color(1);SS=1; Setpos(2,2),cout<<"水果忍胎 0.9 "; Setpos(10,3),cout<<"作者:胎神大大"; Setpos(2,6),cout<<"按 x 进入教学模式,按 y 直接开始游戏!"; Setpos(2,8),cout<<"除了封面其他的都做好了qwq,但是做封面好麻烦所以说不想做直接发布了 我这边用的 Win11 输出的字符画很流畅,不知道你们电脑会不会有什么黑点阿残影阿输出错误之类的,总之这个游戏玩起来确实蛮爽的!大家加油,看看哪个先点满成就哈(万一有 BUG 呢是吧,毕竟有些成就死活打不出来...另外因为有成就所以说顺便把存档也做了,大家放心打)"; Setpos(1,20),cout<<"你可根据电脑性能重新选择画面流畅度:默认为 均衡 流畅度,按 q 调为低流畅,按 w 调为中低流畅,按 e 调为极高流畅 (盲目调高流畅度会导致画面卡顿)";speed=4; A:char e=_getch();if(e=='y') return;else if(e=='x') int nil=0;else if(e=='q') {speed=10;goto A;}else if(e=='w') {speed=4;goto A;}else if (e=='e') {speed=2;goto A;}else goto A; int Stage=0,StageY=0,StageT=0; system("cls");memset(N,0,sizeof(N));memset(M,0,sizeof(M)); Put_Frame(); T=0;Clocknum=0;X=2;Y=1;Vx=Vy=0;Jump=1;Put_Man(X,Y);//初始状态掉落 memset(F,0,sizeof(F));l=m=0;Score=Combo=0; while(1) if(clock()-Clocknum>=25) {T++; Clocknum=clock(); up=dn=lf=rt=0; if(GetAsyncKeyState(VK_UP)&0x8000) up=1;else Jumplock=0; if(GetAsyncKeyState(VK_DOWN)&0x8000) dn=1;else Dnlock=0; if(GetAsyncKeyState(VK_LEFT)&0x8000) lf=1;else Lflock=0; if(GetAsyncKeyState(VK_RIGHT)&0x8000) rt=1;else Rtlock=0; if(kbhit()) {char g=_getch();if(g==' ') Sleep(100),Setpos(16,3),sy++,Color(0),system("pause");if(g=='y'&&Stage>=1) StageY=1;if(g=='x'&&Stage==2) Jump_2=1,Setpos(26,26),Color(5),cout<<"开";} if(sy>=1) Setpos(16,3),cout<<" ",sy=0; if(Stage==0&&StageT==0){ Setpos(2,22),Color(0),Slow("欢迎来到 忍者神胎 教学关卡");Sleep(500); Setpos(2,24),Color(0),Slow("本游戏只有↑↓→←四种按键操作,想必是十分简单的,但又有很大的发挥空间!");Sleep(500); Setpos(2,26),Color(0),Slow("按下↑↓→←进行移动。注:空中按 ↓ 有加速下落的效果"); StageT=T; } if(Stage==0&&T-StageT>=100)//5s {Stage++; Setpos(2,22),Color(0),printf(" "); Setpos(2,24),Color(0),printf(" "); Setpos(2,26),Color(0),printf(" "); m++,F[m].Angle=0,F[m].AngleSpeed=0,F[m].color=2,F[m].half=0,F[m].Life=1,F[m].R=3.45,F[m].t=0,F[m].Type=1,F[m].Vx=F[m].Vy=0,F[m].X=16,F[m].Y=13;Print(); Setpos(2,22),Color(0),Slow("按↑跳起后,立刻在空中重新 长按 方向键 可以进行挥砍!来试试刀法!"); Setpos(2,24),Color(0),Slow("按 y 开启下一阶段教学"); } if(Stage==1&&F[1].Life==1) StageT=T; if(Stage==1&&F[1].Life==0&&T-StageT>=20){ StageT=T; l=0,m++,F[1].Angle=45,F[1].AngleSpeed=0,F[1].color=2,F[1].half=0,F[1].Life=1,F[1].R=3.45,F[1].t=0,F[1].Type=1,F[1].Vx=F[1].Vy=0,F[1].X=16,F[1].Y=13; } if(StageY==1&&Stage==1){StageY=0;Stage++;memset(M,-1,sizeof(M));memset(N,0,sizeof(N)); Setpos(2,22),Color(0);printf(" "); Setpos(2,24),Color(0);printf(" "); l=0;for(int tt=1;tt<=3;tt++) m++,F[tt].Angle=0,F[tt].AngleSpeed=0,F[tt].color=tt,F[tt].half=0,F[tt].Life=1,F[tt].R=1.45,F[tt].t=0,F[tt].Type=1,F[tt].Vx=F[tt].Vy=0,F[tt].X=16,F[tt].Y=19-tt*5; Print();Setpos(2,22),Color(0),Slow("接下来练习连招!"); Setpos(2,24),Color(0),Slow("在空中可以连续按 ↑ 进行多段跳跃,如果你不习惯,可以按 x 开启二段跳能力(PS:连招的秘诀是把握节奏)"); Setpos(2,26),Color(0),Slow("按 y 开启下一阶段教学 ( 二段跳能力状态: )"); Setpos(26,26),Color(5);cout<<"关"; } if(Stage==2&&F[1].Life+F[2].Life+F[3].Life==3) StageT=T; if(Stage==2&&F[1].Life+F[2].Life+F[3].Life<3&&T-StageT>=50){ StageT=T; l=0;for(int tt=1;tt<=3;tt++) m++,F[tt].Angle=0,F[tt].AngleSpeed=0,F[tt].color=tt,F[tt].half=0,F[tt].Life=1,F[tt].R=1.45,F[tt].t=0,F[tt].Type=1,F[tt].Vx=F[tt].Vy=0,F[tt].X=16,F[tt].Y=19-tt*5; } if(StageY==1&&Stage==2){StageY=0;Stage++;memset(M,-1,sizeof(M));memset(N,0,sizeof(N)); Setpos(2,22),Color(0),printf(" "); Setpos(2,24),Color(0),printf(" "); Setpos(2,26),Color(0),printf(" "); l=0;for(int tt=1;tt<=4;tt++) m++,F[tt].Angle=0,F[tt].AngleSpeed=0,F[tt].color=tt,F[tt].half=0,F[tt].Life=1,F[tt].R=1.45,F[tt].t=0,F[tt].Type=1,F[tt].Vx=F[tt].Vy=0; F[1].X=9,F[1].Y=15.5;F[2].X=17.3,F[2].Y=9.4;F[3].X=9.6,F[3].Y=3.5;F[4].X=17,F[4].Y=1; Print();Setpos(2,22),Color(0);Slow("空中折线跳:先跳起,再在空中向上连续左右冲刺,是一种杀伤面积广,上升距离大的连招"); Setpos(2,24),Color(0);Slow("按 y 开启下一阶段教学 (本关四个果子可一个连招砍完,试试精细操作!)"); } if(Stage==3&&F[1].Life+F[2].Life+F[3].Life+F[4].Life==4) StageT=T; if(Stage==3&&F[1].Life+F[2].Life+F[3].Life+F[4].Life<4&&T-StageT>=50){ StageT=T; l=0;for(int tt=1;tt<=4;tt++) m++,F[tt].Angle=0,F[tt].AngleSpeed=0,F[tt].color=tt,F[tt].half=0,F[tt].Life=1,F[tt].R=1.45,F[tt].t=0,F[tt].Type=1,F[tt].Vx=F[tt].Vy=0; F[1].X=9,F[1].Y=15.5;F[2].X=17.3,F[2].Y=9.4;F[3].X=9.6,F[3].Y=3.5;F[4].X=17,F[4].Y=1;} if(StageY==1&&Stage==3){StageY=0;Stage++;memset(M,-1,sizeof(M));memset(N,0,sizeof(N)); Setpos(2,22),Color(0),printf(" "); Setpos(2,24),Color(0),printf(" "); l=0;for(int tt=1;tt<=4;tt++) m++,F[tt].Angle=0,F[tt].AngleSpeed=0,F[tt].color=tt,F[tt].half=0,F[tt].Life=1,F[tt].R=1.45,F[tt].t=0,F[tt].Type=1,F[tt].Vx=F[tt].Vy=0; F[1].X=15.4,F[1].Y=15.5;F[2].X=7.3,F[2].Y=9.5;F[3].X=15.4,F[3].Y=3.6;F[4].X=15.4,F[4].Y=8.5; Print();Setpos(2,22),Color(0);Slow("三角围杀:先使用折线跳跳至目标上方,再向下瞄准,冲刺切除下方水果"); Setpos(2,24),Color(0);Slow("按 y 开启下一阶段教学"); } if(Stage==4&&F[1].Life+F[2].Life+F[3].Life+F[4].Life==4) StageT=T; if(Stage==4&&F[1].Life+F[2].Life+F[3].Life+F[4].Life<4&&T-StageT>=50){ StageT=T; l=0;for(int tt=1;tt<=4;tt++) m++,F[tt].Angle=0,F[tt].AngleSpeed=0,F[tt].color=tt,F[tt].half=0,F[tt].Life=1,F[tt].R=1.45,F[tt].t=0,F[tt].Type=1,F[tt].Vx=F[tt].Vy=0; F[1].X=15.4,F[1].Y=15.5;F[2].X=7.3,F[2].Y=9.5;F[3].X=15.4,F[3].Y=3.6;F[4].X=15.4,F[4].Y=8.5;} if(StageY==1&&Stage==4){StageY=0;Stage++;memset(M,-1,sizeof(M));memset(N,0,sizeof(N)); Setpos(2,22),Color(0),printf(" "); Setpos(2,24),Color(0),printf(" "); l=0;for(int tt=1;tt<=4;tt++) m++,F[tt].Angle=0,F[tt].AngleSpeed=0,F[tt].color=tt,F[tt].half=0,F[tt].Life=1,F[tt].R=1.45,F[tt].t=0,F[tt].Type=1,F[tt].Vx=F[tt].Vy=0; F[1].X=4.7,F[1].Y=15.5;F[2].X=1,F[2].Y=15.5;F[3].X=1,F[3].Y=11;F[4].X=10,F[4].Y=5; Print();Setpos(2,22),Color(0);Slow("撞墙跳:利用平扑撞墙会产生一个小向上速度的特性,将本应断掉的连招接续起来"); Setpos(2,24),Color(0);Slow("按 y 开启下一阶段教学 (本关接连招砍绿果、紫果、红果)"); } if(Stage==5&&F[1].Life+F[2].Life+F[3].Life+F[4].Life==4) StageT=T; if(Stage==5&&F[1].Life+F[2].Life+F[3].Life+F[4].Life<4&&T-StageT>=50){ StageT=T; l=0;for(int tt=1;tt<=4;tt++) m++,F[tt].Angle=0,F[tt].AngleSpeed=0,F[tt].color=tt,F[tt].half=0,F[tt].Life=1,F[tt].R=1.45,F[tt].t=0,F[tt].Type=1,F[tt].Vx=F[tt].Vy=0; F[1].X=4.7,F[1].Y=15.5;F[2].X=1,F[2].Y=15.5;F[3].X=1,F[3].Y=11;F[4].X=10,F[4].Y=5;} if(StageY==1&&Stage==5){StageY=0;Stage++;memset(M,-1,sizeof(M));memset(N,0,sizeof(N)); Setpos(2,22),Color(0),printf(" "); Setpos(2,24),Color(0),printf(" "); l=0;for(int tt=1;tt<=4;tt++) m++,F[tt].Angle=0,F[tt].AngleSpeed=0,F[tt].color=tt,F[tt].half=0,F[tt].Life=1,F[tt].R=1.45,F[tt].t=0,F[tt].Type=1,F[tt].Vx=F[tt].Vy=0; F[1].X=18,F[1].Y=15;F[2].X=16,F[2].Y=17;F[3].X=24,F[3].Y=13;F[4].X=24,F[4].Y=8; Print();Setpos(2,22),Color(0);Slow("平地起冲:长按 → 加速至变黄,立即再按下 ↑ 可直接起冲,接连招"); Setpos(2,24),Color(0);Slow("按 y 开启下一阶段教学 (本关接连招砍紫果、红果)"); } if(Stage==6&&F[1].Life+F[2].Life+F[3].Life+F[4].Life==4) StageT=T; if(Stage==6&&F[1].Life+F[2].Life+F[3].Life+F[4].Life<4&&T-StageT>=50){ StageT=T; l=0;for(int tt=1;tt<=4;tt++) m++,F[tt].Angle=0,F[tt].AngleSpeed=0,F[tt].color=tt,F[tt].half=0,F[tt].Life=1,F[tt].R=1.45,F[tt].t=0,F[tt].Type=1,F[tt].Vx=F[tt].Vy=0; F[1].X=18,F[1].Y=15;F[2].X=16,F[2].Y=17;F[3].X=24,F[3].Y=13;F[4].X=24,F[4].Y=8;} if(StageY==1&&Stage==6){StageY=0;Stage++;memset(M,-1,sizeof(M));memset(N,0,sizeof(N)); Setpos(2,22),Color(0),printf(" "); Setpos(2,24),Color(0),printf(" "); l=0;for(int tt=1;tt<=4;tt++) m++,F[tt].Angle=0,F[tt].AngleSpeed=0,F[tt].color=tt,F[tt].half=0,F[tt].Life=1,F[tt].R=1.45,F[tt].t=0,F[tt].Type=1,F[tt].Vx=F[tt].Vy=0; F[1].X=5,F[1].Y=16;F[2].X=10,F[2].Y=19;F[3].X=12,F[3].Y=19;F[4].X=21,F[4].Y=15; Print();Setpos(2,22),Color(0);Slow("凌波微步: 跳起在空中向右下冲击地面,不要松开 →以获得极大的速度,然后重新按下 ↑ ,紧接平地起冲!"); Setpos(2,24),Color(0);Slow("按 y 完成教学关卡 (本关蓝果下冲,紫果起跳,接连招砍红果)"); } if(Stage==7&&F[1].Life+F[2].Life+F[3].Life+F[4].Life==4) StageT=T; if(Stage==7&&F[1].Life+F[2].Life+F[3].Life+F[4].Life<4&&T-StageT>=50){ StageT=T; l=0;for(int tt=1;tt<=4;tt++) m++,F[tt].Angle=0,F[tt].AngleSpeed=0,F[tt].color=tt,F[tt].half=0,F[tt].Life=1,F[tt].R=1.45,F[tt].t=0,F[tt].Type=1,F[tt].Vx=F[tt].Vy=0; F[1].X=5,F[1].Y=16;F[2].X=10,F[2].Y=19;F[3].X=12,F[3].Y=19;F[4].X=21,F[4].Y=15; } if(StageY==1&&Stage==7) return; if(RushT1==0) Move(1); Go(); if(RushT1==0&&T%speed==0) Print(); } } void Read(){ ifstream in("水果忍胎存档.in");int Xx=0,Yy; for(int i=0;i<=21;i++) in>>Medal[i],Xx+=345*(2*i+1)*Medal[i]; in>>Yy>>Score>>Combo>>T>>FXia>>FUp;if(Yy!=Xx) Cheat=1; in.close(); } void Save(){ ofstream out("水果忍胎存档.in");int Xx=0; for(int i=0;i<=21;i++) out<<Medal[i]<<' ',Xx+=345*(2*i+1)*Medal[i]; out<<Xx<<' '<<Score<<' '<<Combo<<' '<<T<<' '<<FXia<<' '<<FUp; out.close(); } void Medal_(){if(SS==1) return; if(Cheat==1) Setpos(33,0),Color(4),printf("检测到您更改过存档,你的存档已不可用。"),memset(Medal,0,sizeof(Medal)); Setpos(33,1),Color(0),printf("[成就系统] (按 c 可以存档 d 读档)");int rr=0; Setpos(34,3);if(Medal[3]==1) Color(5),rr++;else Color(7);printf("[出刀!] 完成一次切割"); Setpos(34,4);if(Medal[7]==1) Color(5),rr++;else Color(7);printf("[绝杀] 在底线处完成一次切割"); Setpos(34,5);if(Medal[4]==1) Color(5),rr++;else Color(7);printf("[全图鉴] 切割全部五种水果"); Setpos(34,6);if(Medal[5]==1) Color(5),rr++;else Color(7);printf("[闪光] 达到十五 COMBO"); Setpos(34,7);if(Medal[6]==1) Color(5),rr++;else Color(7);printf("[回眸] 精准达到 520 分"); Setpos(34,8);if(Medal[8]==1) Color(5),rr++;else Color(7);printf("[柴刀] 下劈劈裂水果三十次"); Setpos(34,9);if(Medal[9]==1) Color(5),rr++;else Color(7);printf("[连锁反应] 一次腾空中切割五个水果"); Setpos(34,10);if(Medal[10]==1) Color(5),rr++;else Color(7);printf("[霹雳] 五秒钟切割十个水果"); Setpos(34,11);if(Medal[11]==1) Color(5),rr++;else Color(7);printf("[征服者] 进行五分钟游戏"); Setpos(34,12);if(Medal[12]==1) Color(5),rr++;else Color(7);printf("[神来之笔] 一次腾空中切割十个水果"); Setpos(34,13);if(Medal[13]==1) Color(5),rr++;else Color(7);printf("[天封] 在最高线处完成一次切割"); Setpos(34,14);if(Medal[14]==1) Color(5),rr++;else Color(7);printf("[升龙] 上劈劈裂水果四十次"); Setpos(34,15);if(Medal[15]==1) Color(5),rr++;else Color(7);printf("[小忍者] 达到一千分"); Setpos(34,16);if(Medal[16]==1) Color(5),rr++;else Color(7);printf("[八连] 一次腾空中冲刺八次(有巧解)"); Setpos(34,17);if(Medal[17]==1) Color(5),rr++;else Color(7);printf("[连诀] 达到四十 COMBO"); Setpos(34,18);if(Medal[18]==1) Color(5),rr++;else Color(7);printf("[幸存者] 连续十次空刀(请勿点亮)"); Setpos(34,19);if(Medal[19]==1) Color(5),rr++;else Color(7);printf("[水果杀手] 达到一万分"); Setpos(34,20);if(Medal[20]==1) Color(5),rr++;else Color(7);printf("[虎翅] 腾空十秒"); Setpos(34,21);if(Medal[21]==1) Color(5),rr++;else Color(7);printf("[你疯了?!] 达到十万分"); Setpos(34,22);if(rr>=19) Medal[22]=1;if(Medal[22]==1) Color((T%4<=1)?-4:-5);else Color(7);printf("[传说] 达成全部成就"); } int main(){ CONSOLE_CURSOR_INFO cursor_info={1,0}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info); srand((unsigned)time(NULL)); Start(); ST:SS=0; system("cls");memset(N,0,sizeof(N));memset(M,0,sizeof(M));FC=FCF=FCT=FO=FFFt=FXia=FUp=0;memset(FT,0,sizeof(FT));memset(Medal,0,sizeof(Medal)); Put_Frame();Medal_(); T=0;Clocknum=0;X=2;Y=1;Vx=Vy=0;Jump=1;Put_Man(X,Y);//初始状态掉落 memset(F,0,sizeof(F));l=m=0;Score=Combo=0; Setpos(2,-3),Color(1),cout<<"本游戏为休闲模式,没有目标分数,请尽情享受切水果的酣爽盛宴!(空格可以暂停)";Medal_(); while(1) if(clock()-Clocknum>=25) {T++;if(T>11000&&Medal[11]==0) Medal[11]=1,Medal_(); Clocknum=clock(); up=dn=lf=rt=0; if(GetAsyncKeyState(VK_UP)&0x8000) up=1;else Jumplock=0; if(GetAsyncKeyState(VK_DOWN)&0x8000) dn=1;else Dnlock=0; if(GetAsyncKeyState(VK_LEFT)&0x8000) lf=1;else Lflock=0; if(GetAsyncKeyState(VK_RIGHT)&0x8000) rt=1;else Rtlock=0; if(kbhit()) {char g=_getch();if(g==' ') Sleep(100),Setpos(16,3),sy++,Color(0),system("pause");if(g=='c') Save(),system("color 6E"),Sleep(1000),system("color 0F");if(g=='d') Read(),system("color 6E"),Sleep(1000),system("color 0F"),Medal_();} if(sy>=1) Setpos(16,3),cout<<" ",sy=0; if(RushT1==0) Move(0); Go(); if(RushT1==0&&T%speed==0) Print(); if(clock()-Clocknum>=25) continue; if(T>=50&&T<=200&&T%15==5) CreatF(); if(T>=300&&T<2000&&T%80==5) CreatF(); else if(T>=2000&&T<3000&&T%70==5) CreatF(); else if(T>=3000&&T<4000&&T%50==5) CreatF(); else if(T>=4000&&T%30==5) CreatF(); if(T>=1500&&T%80==5) CreatF(); if(Combo>=10&&T%80==40) CreatF(); if((Combo<10&&T%140==0)||(Combo>=10&&Combo<20&&T%100==0)||(Combo>=20&&T%70==0)) Combo--;Combo=max(0,Combo); if(Rush==1||AttTime>0||Attention==1) Color(5);else Color(1);Setpos(2,-2),printf("积分:%-4d ",Score); if(Combo>=15) Color((T%4<=1)?-4:-5); printf(" 连击 %-3dCOMBO !! ",Combo); if(Rush==1||AttTime>0||Attention==1) Color(5);else Color(1);printf(" 用时:%d ",T);Color(0); } return 0; }
切水果
#include <stdio.h> #include <Windows.h> #include <stdlib.h> #include <time.h> #include <conio.h> #define ROW 29 //游戏区行数 #define COL 20 //游戏区列数 #define DOWN 80 //方向键:下 #define LEFT 75 //方向键:左 #define RIGHT 77 //方向键:右 #define SPACE 32 //空格键 #define ESC 27 //Esc键 struct Face { int data[ROW][COL + 10]; //用于标记指定位置是否有方块(1为有,0为无) int color[ROW][COL + 10]; //用于记录指定位置的方块颜色编码 }face; struct Block { int space[4][4]; }block[7][4]; //用于存储7种基本形状方块的各自的4种形态的信息,共28种 //隐藏光标 void HideCursor(); //光标跳转 void CursorJump(int x, int y); //初始化界面 void InitInterface(); //初始化方块信息 void InitBlockInfo(); //颜色设置 void color(int num); //画出方块 void DrawBlock(int shape, int form, int x, int y); //空格覆盖 void DrawSpace(int shape, int form, int x, int y); //合法性判断 int IsLegal(int shape, int form, int x, int y); //判断得分与结束 int JudeFunc(); //游戏主体逻辑函数 void StartGame(); //从文件读取最高分 void ReadGrade(); //更新最高分到文件 void WriteGrade(); int max, grade; //全局变量 int main() { #pragma warning (disable:4996) //消除警告 max = 0, grade = 0; //初始化变量 system("title 俄罗斯方块"); //设置cmd窗口的名字 system("mode con lines=29 cols=60"); //设置cmd窗口的大小 HideCursor(); //隐藏光标 ReadGrade(); //从文件读取最高分到max变量 InitInterface(); //初始化界面 InitBlockInfo(); //初始化方块信息 srand((unsigned int)time(NULL)); //设置随机数生成的起点 StartGame(); //开始游戏 return 0; } //隐藏光标 void HideCursor() { CONSOLE_CURSOR_INFO curInfo; //定义光标信息的结构体变量 curInfo.dwSize = 1; //如果没赋值的话,隐藏光标无效 curInfo.bVisible = FALSE; //将光标设置为不可见 HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); //获取控制台句柄 SetConsoleCursorInfo(handle, &curInfo); //设置光标信息 } //光标跳转 void CursorJump(int x, int y) { COORD pos; //定义光标位置的结构体变量 pos.X = x; //横坐标设置 pos.Y = y; //纵坐标设置 HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); //获取控制台句柄 SetConsoleCursorPosition(handle, pos); //设置光标位置 } //初始化界面 void InitInterface() { color(7); //颜色设置为白色 for (int i = 0; i < ROW; i++) { for (int j = 0; j < COL + 10; j++) { if (j == 0 || j == COL - 1 || j == COL + 9) { face.data[i][j] = 1; //标记该位置有方块 CursorJump(2 * j, i); printf("■"); } else if (i == ROW - 1) { face.data[i][j] = 1; //标记该位置有方块 printf("■"); } else face.data[i][j] = 0; //标记该位置无方块 } } for (int i = COL; i < COL + 10; i++) { face.data[8][i] = 1; //标记该位置有方块 CursorJump(2 * i, 8); printf("■"); } CursorJump(2 * COL, 1); printf("下一个方块:"); CursorJump(2 * COL + 4, ROW - 19); printf("左移:←"); CursorJump(2 * COL + 4, ROW - 17); printf("右移:→"); CursorJump(2 * COL + 4, ROW - 15); printf("加速:↓"); CursorJump(2 * COL + 4, ROW - 13); printf("旋转:空格"); CursorJump(2 * COL + 4, ROW - 11); printf("暂停: S"); CursorJump(2 * COL + 4, ROW - 9); printf("退出: Esc"); CursorJump(2 * COL + 4, ROW - 7); printf("重新开始:R"); CursorJump(2 * COL + 4, ROW - 5); printf("最高纪录:%d", max); CursorJump(2 * COL + 4, ROW - 3); printf("当前分数:%d", grade); } //初始化方块信息 void InitBlockInfo() { //“T”形 for (int i = 0; i <= 2; i++) block[0][0].space[1][i] = 1; block[0][0].space[2][1] = 1; //“L”形 for (int i = 1; i <= 3; i++) block[1][0].space[i][1] = 1; block[1][0].space[3][2] = 1; //“J”形 for (int i = 1; i <= 3; i++) block[2][0].space[i][2] = 1; block[2][0].space[3][1] = 1; for (int i = 0; i <= 1; i++) { //“Z”形 block[3][0].space[1][i] = 1; block[3][0].space[2][i + 1] = 1; //“S”形 block[4][0].space[1][i + 1] = 1; block[4][0].space[2][i] = 1; //“O”形 block[5][0].space[1][i + 1] = 1; block[5][0].space[2][i + 1] = 1; } //“I”形 for (int i = 0; i <= 3; i++) block[6][0].space[i][1] = 1; int temp[4][4]; for (int shape = 0; shape < 7; shape++) //7种形状 { for (int form = 0; form < 3; form++) //4种形态(已经有了一种,这里每个还需增加3种) { //获取第form种形态 for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { temp[i][j] = block[shape][form].space[i][j]; } } //将第form种形态顺时针旋转,得到第form+1种形态 for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { block[shape][form + 1].space[i][j] = temp[3 - j][i]; } } } } } //颜色设置 void color(int c) { switch (c) { case 0: c = 13; //“T”形方块设置为紫色 break; case 1: case 2: c = 12; //“L”形和“J”形方块设置为红色 break; case 3: case 4: c = 10; //“Z”形和“S”形方块设置为绿色 break; case 5: c = 14; //“O”形方块设置为黄色 break; case 6: c = 11; //“I”形方块设置为浅蓝色 break; default: c = 7; //其他默认设置为白色 break; } SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c); //颜色设置 //注:SetConsoleTextAttribute是一个API(应用程序编程接口) } //画出方块 void DrawBlock(int shape, int form, int x, int y) { for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (block[shape][form].space[i][j] == 1) //如果该位置有方块 { CursorJump(2 * (x + j), y + i); //光标跳转到指定位置 printf("■"); //输出方块 } } } } //空格覆盖 void DrawSpace(int shape, int form, int x, int y) { for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (block[shape][form].space[i][j] == 1) //如果该位置有方块 { CursorJump(2 * (x + j), y + i); //光标跳转到指定位置 printf(" "); //打印空格覆盖(两个空格) } } } } //合法性判断 int IsLegal(int shape, int form, int x, int y) { for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { //如果方块落下的位置本来就已经有方块了,则不合法 if ((block[shape][form].space[i][j] == 1) && (face.data[y + i][x + j] == 1)) return 0; //不合法 } } return 1; //合法 } //判断得分与结束 int JudeFunc() { //判断是否得分 for (int i = ROW - 2; i > 4; i--) { int sum = 0; //记录第i行的方块个数 for (int j = 1; j < COL - 1; j++) { sum += face.data[i][j]; //统计第i行的方块个数 } if (sum == 0) //该行没有方块,无需再判断其上的层次(无需再继续判断是否得分) break; //跳出循环 if (sum == COL - 2) //该行全是方块,可得分 { grade += 10; //满一行加10分 color(7); //颜色设置为白色 CursorJump(2 * COL + 4, ROW - 3); //光标跳转到显示当前分数的位置 printf("当前分数:%d", grade); //更新当前分数 for (int j = 1; j < COL - 1; j++) //清除得分行的方块信息 { face.data[i][j] = 0; //该位置得分后被清除,标记为无方块 CursorJump(2 * j, i); //光标跳转到该位置 printf(" "); //打印空格覆盖(两个空格) } //把被清除行上面的行整体向下挪一格 for (int m = i; m >1; m--) { sum = 0; //记录上一行的方块个数 for (int n = 1; n < COL - 1; n++) { sum += face.data[m - 1][n]; //统计上一行的方块个数 face.data[m][n] = face.data[m - 1][n]; //将上一行方块的标识移到下一行 face.color[m][n] = face.color[m - 1][n]; //将上一行方块的颜色编号移到下一行 if (face.data[m][n] == 1) //上一行移下来的是方块,打印方块 { CursorJump(2 * n, m); //光标跳转到该位置 color(face.color[m][n]); //颜色设置为还方块的颜色 printf("■"); //打印方块 } else //上一行移下来的是空格,打印空格 { CursorJump(2 * n, m); //光标跳转到该位置 printf(" "); //打印空格(两个空格) } } if (sum == 0) //上一行移下来的全是空格,无需再将上层的方块向下移动(移动结束) return 1; //返回1,表示还需调用该函数进行判断(移动下来的可能还有满行) } } } //判断游戏是否结束 for (int j = 1; j < COL - 1; j++) { if (face.data[1][j] == 1) //顶层有方块存在(以第1行为顶层,不是第0行) { Sleep(1000); //留给玩家反应时间 system("cls"); //清空屏幕 color(7); //颜色设置为白色 CursorJump(2 * (COL / 3), ROW / 2 - 3); if (grade>max) { printf("恭喜你打破最高记录,最高记录更新为%d", grade); WriteGrade(); } else if (grade == max) { printf("与最高记录持平,加油再创佳绩", grade); } else { printf("请继续加油,当前与最高记录相差%d", max - grade); } CursorJump(2 * (COL / 3), ROW / 2); printf("GAME OVER"); while (1) { char ch; CursorJump(2 * (COL / 3), ROW / 2 + 3); printf("再来一局?(y/n):"); scanf("%c", &ch); if (ch == 'y' || ch == 'Y') { system("cls"); main(); } else if (ch == 'n' || ch == 'N') { CursorJump(2 * (COL / 3), ROW / 2 + 5); exit(0); } else { CursorJump(2 * (COL / 3), ROW / 2 + 4); printf("选择错误,请再次选择"); } } } } return 0; //判断结束,无需再调用该函数进行判断 } //游戏主体逻辑函数 void StartGame() { int shape = rand() % 7, form = rand() % 4; //随机获取方块的形状和形态 while (1) { int t = 0; int nextShape = rand() % 7, nextForm = rand() % 4; //随机获取下一个方块的形状和形态 int x = COL / 2 - 2, y = 0; //方块初始下落位置的横纵坐标 color(nextShape); //颜色设置为下一个方块的颜色 DrawBlock(nextShape, nextForm, COL + 3, 3); //将下一个方块显示在右上角 while (1) { color(shape); //颜色设置为当前正在下落的方块 DrawBlock(shape, form, x, y); //将该方块显示在初始下落位置 if (t == 0) { t = 15000; //这里t越小,方块下落越快(可以根据此设置游戏难度) } while (--t) { if (kbhit() != 0) //若键盘被敲击,则退出循环 break; } if (t == 0) //键盘未被敲击 { if (IsLegal(shape, form, x, y + 1) == 0) //方块再下落就不合法了(已经到达底部) { //将当前方块的信息录入face当中 //face:记录界面的每个位置是否有方块,若有方块还需记录该位置方块的颜色。 for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (block[shape][form].space[i][j] == 1) { face.data[y + i][x + j] = 1; //将该位置标记为有方块 face.color[y + i][x + j] = shape; //记录该方块的颜色数值 } } } while (JudeFunc()); //判断此次方块下落是否得分以及游戏是否结束 break; //跳出当前死循环,准备进行下一个方块的下落 } else //未到底部 { DrawSpace(shape, form, x, y); //用空格覆盖当前方块所在位置 y++; //纵坐标自增(下一次显示方块时就相当于下落了一格了) } } else //键盘被敲击 { char ch = getch(); //读取keycode switch (ch) { case DOWN: //方向键:下 if (IsLegal(shape, form, x, y + 1) == 1) //判断方块向下移动一位后是否合法 { //方块下落后合法才进行以下操作 DrawSpace(shape, form, x, y); //用空格覆盖当前方块所在位置 y++; //纵坐标自增(下一次显示方块时就相当于下落了一格了) } break; case LEFT: //方向键:左 if (IsLegal(shape, form, x - 1, y) == 1) //判断方块向左移动一位后是否合法 { //方块左移后合法才进行以下操作 DrawSpace(shape, form, x, y); //用空格覆盖当前方块所在位置 x--; //横坐标自减(下一次显示方块时就相当于左移了一格了) } break; case RIGHT: //方向键:右 if (IsLegal(shape, form, x + 1, y) == 1) //判断方块向右移动一位后是否合法 { //方块右移后合法才进行以下操作 DrawSpace(shape, form, x, y); //用空格覆盖当前方块所在位置 x++; //横坐标自增(下一次显示方块时就相当于右移了一格了) } break; case SPACE: //空格键 if (IsLegal(shape, (form + 1) % 4, x, y + 1) == 1) //判断方块旋转后是否合法 { //方块旋转后合法才进行以下操作 DrawSpace(shape, form, x, y); //用空格覆盖当前方块所在位置 y++; //纵坐标自增(总不能原地旋转吧) form = (form + 1) % 4; //方块的形态自增(下一次显示方块时就相当于旋转了) } break; case ESC: //Esc键 system("cls"); //清空屏幕 color(7); CursorJump(COL, ROW / 2); printf(" 游戏结束 "); CursorJump(COL, ROW / 2 + 2); exit(0); //结束程序 case 's': case 'S': //暂停 system("pause>nul"); //暂停(按任意键继续) break; case 'r': case 'R': //重新开始 system("cls"); //清空屏幕 main(); //重新执行主函数 } } } shape = nextShape, form = nextForm; //获取下一个方块的信息 DrawSpace(nextShape, nextForm, COL + 3, 3); //将右上角的方块信息用空格覆盖 } } //从文件读取最高分 void ReadGrade() { FILE* pf = fopen("俄罗斯方块最高得分记录.txt", "r"); //以只读方式打开文件 if (pf == NULL) //打开文件失败 { pf = fopen("俄罗斯方块最高得分记录.txt", "w"); //以只写方式打开文件(文件不存在可以自动创建该文件) fwrite(&grade, sizeof(int), 1, pf); //将max写入文件(此时max为0),即将最高历史得分初始化为0 } fseek(pf, 0, SEEK_SET); //使文件指针pf指向文件开头 fread(&max, sizeof(int), 1, pf); //读取文件中的最高历史得分到max当中 fclose(pf); //关闭文件 pf = NULL; //文件指针及时置空 } //更新最高分到文件 void WriteGrade() { FILE* pf = fopen("俄罗斯方块最高得分记录.txt", "w"); //以只写方式打开文件 if (pf == NULL) //打开文件失败 { printf("保存最高得分记录失败\n"); exit(0); } fwrite(&grade, sizeof(int), 1, pf); //将本局游戏得分写入文件当中(更新最高历史得分) fclose(pf); //关闭文件 pf = NULL; //文件指针及时置空 }
俄罗斯方块
#include <bits/stdc++.h> #include <windows.h> #define ll long long using namespace std; const int s = 16,boom = 40; char a[s + 2][s + 2],b[s + 2][s + 2]; struct mines { int h,l; bool operator<(const mines x)const { return (h != x.h ? h < x.h : l < x.l); } }p[s + 2]; void color(WORD c) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),c); } void intro() { memset(a,'?',sizeof(a)); memset(b,'0',sizeof(b)); for(int i = 1;i <= s;i++) a[i][0] = a[0][i] = b[i][0] = b[0][i] = '1'; } char lei(int x,int y) { int cnt = 0; for(int i = x - 1;i <= x + 1;i++) { for(int j = y - 1;j <= y + 1;j++) { if(i < 1 || i > s || j < 1 || j > s) continue; cnt += (b[i][j] == '9'); } } return cnt + '0'; } void init() { srand(time(0)); for(int i = 1;i <= boom;i++) { p[i].h = rand() % s + 1; p[i].l = rand() % s + 1; for(int j = 1;j < i;j++) { while(p[i].h == p[j].h && p[i].l == p[j].l) { p[i].h = rand() % s + 1; p[i].l = rand() % s + 1; } } b[p[i].h][p[i].l] = '9'; } sort(p + 1,p + boom + 1); for(int i = 1;i <= s;i++) { for(int j = 1;j <= s;j++) { if(b[i][j] != '9') b[i][j] = lei(i,j); } } } bool neard(int x,int y) { for(int i = x - 1;i <= x + 1;i++) for(int j = y - 1;j <= y + 1;j++) if(a[i][j] == '0') return true; return false; } void open(int h1, int l1) { a[h1][l1] = b[h1][l1]; for(int t = 1;t < s;t++) { for(int i = 1;i <= s;i++) { for(int j = 1;j <= s;j++) { if(neard(i,j)) a[i][j] = b[i][j]; } } } } void drawboard() { system("cls"); cout << "输入3个数a,b,c,代表行、列、操作(0标记/取消标记,1打开),行列下标从1开始\n"; cout << "注意:不保证第一次不是雷(16×16,40个雷)\n"; for(int i = 1;i <= s;i++) { for(int j = 1;j <= s;j++) { if(a[i][j] == '0') { color(15); cout << a[i][j] << ' '; } if(a[i][j] == '1') { color(11); cout << a[i][j] << ' '; } if(a[i][j] == '2') { color(10); cout << a[i][j] << ' '; } if(a[i][j] == '3' || a[i][j] == '5') { color(12); cout << a[i][j] << ' '; } if(a[i][j] == '4') { color(9); cout << a[i][j] << ' '; } if(a[i][j] == '6') { color(3); cout << a[i][j] << ' '; } if(a[i][j] == '7') { color(0x70); cout << a[i][j]; color(0x0F); cout << ' '; } if(a[i][j] == '8') { color(8); cout << a[i][j] << ' '; } if(a[i][j] == '?') { color(7); cout << a[i][j] << ' '; } if(a[i][j] == '!') { color(12); cout << a[i][j] << ' '; } } cout << endl; } color(7); } bool gamewin() { int cnt = 0; for(int i = 1;i <= s;i++) { for(int j = 1;j <= s;j++) { if(b[i][j] == '9') cnt++; else if(a[i][j] != '?') cnt++; } } return cnt == s * s; } int main() { srand(time(0)); intro(); init(); drawboard(); while(1) { int h1,l1; bool caozuo; cin >> h1 >> l1 >> caozuo; if(caozuo) { if(a[h1][l1] != '!') { if(b[h1][l1] == '9') { cout << "游戏失败" << endl; for(int i = 1;i <= s;i++) { for(int j = 1;j <= s;j++) { if(b[i][j] == '0') color(0xF); if(b[i][j] == '1') color(0xB); if(b[i][j] == '2') color(0xA); if(b[i][j] == '3' || b[i][j] == '5') color(0xC); if(b[i][j] == '4') color(0x9); if(b[i][j] == '6') color(0x3); if(b[i][j] == '7') color(0x70); if(b[i][j] == '8') color(0x8); if(b[i][j] == '9') color(0x7); if(b[i][j] != '9') cout << b[i][j] << ' '; else cout << "* "; } cout << endl; } color(0x7); return 0; } open(h1,l1); } drawboard(); if(gamewin()) { cout << "游戏胜利" << endl; return 0; } } else { if(a[h1][l1] == '?') a[h1][l1] = '!'; else if(a[h1][l1] == '!') a[h1][l1] = '?'; drawboard(); } } }
扫雷
#include <bits/stdc++.h> using namespace std; const char* filename1 = "tree_high.txt"; const char* filename2 = "water_time.txt"; unsigned int read_tree_high() { ifstream file(filename1); unsigned int tree_high = 0; if (file.is_open()) { file >> tree_high; file.close(); } return tree_high; } void write_tree_high(unsigned int tree_high) { ofstream file(filename1); if (file.is_open()) { file << tree_high; file.close(); } } unsigned int encrypted(int year, int month, int day, int hour, int minute, int second) { struct tm timeinfo = {0}; timeinfo.tm_year = year - 1900; timeinfo.tm_mon = month - 1; timeinfo.tm_mday = day; timeinfo.tm_hour = hour; timeinfo.tm_min = minute; timeinfo.tm_sec = second; return mktime(&timeinfo); } int declass(unsigned int timestamp, const string& unit) { time_t raw_time = static_cast<time_t>(timestamp); struct tm* timeinfo = localtime(&raw_time); if (unit == "year") return timeinfo->tm_year + 1900; if (unit == "month") return timeinfo->tm_mon + 1; if (unit == "day") return timeinfo->tm_mday; if (unit == "hour") return timeinfo->tm_hour; if (unit == "minute") return timeinfo->tm_min; if (unit == "second") return timeinfo->tm_sec; return -1; } unsigned int read_water_time() { ifstream file(filename2); unsigned int water_time = 0; if (file.is_open()) { file >> water_time; file.close(); } return water_time; } void write_water_time(unsigned int timestamp) { ofstream file(filename2); if (file.is_open()) { file << timestamp; file.close(); } } int Time(const string& unit) { time_t now = time(0); tm* local_time = localtime(&now); if (unit == "year") return local_time->tm_year + 1900; if (unit == "month") return local_time->tm_mon + 1; if (unit == "day") return local_time->tm_mday; if (unit == "hour") return local_time->tm_hour; if (unit == "minute") return local_time->tm_min; if (unit == "second") return local_time->tm_sec; return 0; } bool is_first_run_today() { int last_year = declass(read_water_time(), "year"); int last_month = declass(read_water_time(), "month"); int last_day = declass(read_water_time(), "day"); int current_year = Time("year"); int current_month = Time("month"); int current_day = Time("day"); return !(last_year == current_year && last_month == current_month && last_day == current_day); } bool can_water() { int last_year = declass(read_water_time(), "year"); int last_month = declass(read_water_time(), "month"); int last_day = declass(read_water_time(), "day"); int last_hour = declass(read_water_time(), "hour"); int last_minute = declass(read_water_time(), "minute"); int current_year = Time("year"); int current_month = Time("month"); int current_day = Time("day"); int current_hour = Time("hour"); int current_minute = Time("minute"); if (current_year > last_year) return true; if (current_year == last_year && current_month > last_month) return true; if (current_year == last_year && current_month == last_month && current_day > last_day) return true; if (current_year == last_year && current_month == last_month && current_day == last_day && current_hour > last_hour) return true; if (current_year == last_year && current_month == last_month && current_day == last_day && current_hour == last_hour && current_minute >= last_minute) return true; return false; } void handle_watering(unsigned int& tree_high) { string input; cout << "系统:小主,小树已经 " << tree_high << " 毫米高了。现在您可以浇水了,请输入“浇水”。" << endl; while (true) { cout << "您:"; cin >> input; if (input == "浇水") { tree_high += 4; write_tree_high(tree_high); unsigned int next_watering_time = (Time("minute") >= 40) ? encrypted(Time("year"), Time("month"), Time("day"), Time("hour") + 1, Time("minute") - 40, Time("second")) : encrypted(Time("year"), Time("month"), Time("day"), Time("hour"), Time("minute") + 20, Time("second")); write_water_time(next_watering_time); cout << "系统:水浇好了!小树长高了 4 毫米,已经 " << tree_high << " 毫米高了。" << declass(read_water_time(), "hour") << "点" << declass(read_water_time(), "minute") << "分后可以继续浇水哟!" << endl; break; } else if (input == "退出") { if (!is_first_run_today()) { cout << "系统:再见," << declass(read_water_time(), "hour") << "点" << declass(read_water_time(), "minute") << "分后记得回来继续浇水哟!"; } break; } else { cout << "系统:您现在可以浇水了,请输入“浇水”。" << endl; } } } int main() { unsigned int tree_high = read_tree_high(); string user_input; while (user_input != "退出") { if (is_first_run_today() || can_water()) { handle_watering(tree_high); } else { cout << "系统:小主,小树已经 " << tree_high << " 毫米高了。输入“参加数字对战”就可以获得阳光,加速成长哟!" << endl; cout << "您:"; cin >> user_input; while (user_input != "参加数字对战") { if (user_input == "退出") { if (!is_first_run_today()) { cout << "系统:再见," << declass(read_water_time(), "hour") << "点" << declass(read_water_time(), "minute") << "分后记得回来继续浇水哟!"; } return 0; } if (user_input == "浇水") { cout << "系统:" << declass(read_water_time(), "hour") << "点" << declass(read_water_time(), "minute") << "分后才可以继续浇水哟!输入“退出”,就可以退出。" << endl; } else { cout << "系统:输入“参加数字对战”,就可以获得阳光,加速成长哟!" << endl; } cout << "您:"; cin >> user_input; } tree_high += 1; write_tree_high(tree_high); cout << "系统:恭喜您获得惊喜奖励“阳光”,小树获得了更充足的阳光照射,长高了 1 毫米,已经 " << tree_high << " 毫米高了。记得" << declass(read_water_time(), "hour") << "点" << declass(read_water_time(), "minute") << "分后回来继续浇水哟!" << endl; } } return 0; }
浇水小游戏(见上)
(在我有C++游戏的情况下月更别的C++游戏) 三月已更 (以上纯搬运)
-
通过的题目
-
最近活动
- 乔斯2025集训队第十五次周赛 IOI
- 乔斯2025预备队第十五次周赛 IOI
- 乔斯2025集训队第十四次周赛 IOI
- 乔斯2025预备队第十四次周赛 IOI
- 4月C++信奥月赛--算法强化 IOI
- 4月C++信奥月赛--语法基础 IOI
- 乔斯2025预备队第十三次周赛 IOI
- 乔斯2025集训队第十三次周赛 IOI
- 乔斯2025集训队第十二次周赛 IOI
- 3月C++信奥月赛--算法强化 IOI
- 3月C++信奥月赛--语法基础 IOI
- 乔斯2025集训队第十一次周赛 IOI
- 乔斯2025预备队第十一次周赛 IOI
- 乔斯2025预备队第十次周赛 IOI
- 乔斯2025预备队第九次周赛 IOI
- 乔斯2025预备队第八次周赛 IOI
- 乔斯2025预备队第六次周赛 IOI
- 乔斯2025集训队第六次周赛 IOI
- 乔斯2025预备队第五次周赛 IOI
- 乔斯2025集训队第五次周赛 IOI
- 12月C++信奥月赛--语法基础 IOI
- 12月C++信奥月赛--算法强化 IOI
- 乔斯2025预备队第四次周赛 IOI
- 乔斯2025预备队第三次周赛 IOI
- 11月C++信奥月赛--语法基础 IOI
- 乔斯2025预备队第二次周赛 IOI
- 乔斯2025预备队第一次周赛 IOI
- 乔斯2025集训队选拔赛 IOI
- 杭州入营测试 IOI
题目标签
- 算法基础
- 9
- 月赛
- 9
- 字符串
- 7
- 入门
- 6
- 普及
- 6
- 循环
- 5
- 普及-
- 5
- 一维数组
- 4
- 模拟算法
- 3
- 数学
- 3
- 语法基础
- 2
- 思维
- 2
- 枚举
- 2
- 贪心
- 2
- 分支
- 1
- 排序
- 1
- 强哥的键盘
- 1
- 模拟
- 1
- 强哥的随机行走
- 1
- 签到题
- 1