腐败大作
  • 板块灌水区
  • 楼主蒟蒻丁
  • 当前回复34
  • 已保存回复34
  • 发布时间2020/7/23 10:40
  • 上次更新2023/11/6 22:31:56
查看原帖
腐败大作
251882
蒟蒻丁楼主2020/7/23 10:40
//一言
//我是奥尔加·伊滋卡,几颗子弹不要紧的!
//——机动战士高达:铁血的孤儿
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
#include<iostream>
#include<windows.h>
#include<cstdlib>
#include<stdlib.h>
#include<cstdio>
#include<cstring>
#include<ctime>
#include<conio.h>
#include<cmath>
#include<ctime>
using namespace std;

void seter(){
	#define set_g SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
	#define set_b SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
	#define set_r SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
	#define set_w SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
	#define set_y SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
	#define set_o SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_GREEN);
	#define set_p SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);
	#define set_d SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
	#define ll long long
	#define GTC GetTickCount()
	#define timer move_vul=GTC+vul;
}

ll dx[5]={0,1,-1,0},dy[5]={1,0,0,-1},vul=22000,l_l=12,r_r=10,watch,eqq=1,shine_time,bag[10],show_hp,sum,typp,d[5]={0,1,2,2,4}; 
char ma[31][71],n,act_line[10001];
static ll game_time,move_vul,m_t,h_t,ft,t1[10],blood_time,mt;
bool st,fight,pool[6],sh,L;

struct tool{
	int x,y;
}type[4];

struct equ{
	string st;
	int t;
}eq[10];

struct hero_ans_moster{
	int x,y,dep,hp,mp,ret_time,rr_time;
	int ij,tu,x0,y0;
}h,m[21];

struct find{
	int x[4],y[4];
}p[20];

struct moster_s_skills{
	int s[10],type;
}ms[21]; 

int disc(int x1,int y1,int x2,int y2){return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));}

int eisc(int x1,int y1,int x2,int y2){return max(abs(x1-x2),abs(y1-y2));}

void HideCursor(){
	CONSOLE_CURSOR_INFO cursor_info={1, 0};
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}

void sco(){
	switch(rand()%7){
		
		case 0:{set_y break;}
		case 1:{set_r break;}
		case 2:{set_g break;}
		case 3:{set_p break;}
		case 4:{set_y break;}
		case 5:{set_d break;}
		case 6:{set_b break;}
		
	}
}

void put_st(){
	switch(GTC%5){
		
		case 0:{set_g break;}
		case 1:{set_y break;}
		case 2:{set_r break;}
		case 3:{set_d break;}
		case 4:{set_p break;}
		
	}
	printf(
	
    "   ------------  -------    -----       ----   ---------\n"
    "   ------------   -----     ------      ----   ----------\n"
    "   ----            ---      ---  ---    ---    ---     ---\n"
    "   --------        ---      ---  ---    ---    ---      ---\n"
    "   --------        ---      ---   ---   ---    ---      ---\n"
    "   ----            ---      ---    ---  ---    ---      ---\n"
    "   ----           -----     ---     --- ---    ---     ---\n"
    "   ----          -------    ---      -----     ----------\n"
	"                       请按下'x'开始                              \n"
	"                    按下'b'查看玩fa,乱搞!                         \n"
	);
}

void pan(int wt){
	 if(m[wt].hp<=0){
		m[wt].x=m[wt].x0,m[wt].y=m[wt].y0;
		m[wt].rr_time+=3000;
		if(wt==1)m[wt].hp=20,eqq=max(eqq,1ll);
		if(wt==2)m[wt].hp=8,eqq=max(eqq,2*1ll);
		if(wt==3)m[wt].hp=40,eqq=max(eqq,3*1ll);
		sum++;	
	}
}

void attack(){
	if(move_vul>GTC)return ;
	cin>>act_line;
	switch(act_line[0]){
		
		case 'P':{
			typp=1;
			
			for(int i=1;i<=3;i++){
				if(m[i].x>0&&m[i].y>0&&m[i].y<=l_l&&m[i].x<=r_r){
					m[i].hp-=10;
					pan(i);
				}
			}
			
			mt=GTC+800;
			shine_time=GTC+800;
			break;
		}
		case 'f':{
			typp=2;
			m[watch].hp-=12;
			pan(watch);
			
			for(int i=1;i<=3;i++){
				if(i!=watch){
					if(disc(m[watch].x,m[watch].y,m[i].x,m[i].y)<=3){
						m[i].hp-=6;
						pan(i);
					}
				}
			}
			
			mt=GTC+800;
			shine_time=GTC+800;
			break;
		}
		
	}
	timer
}

void get_move(){
	if(!kbhit())return ;
	n=getch(); 
	if(n=='k')attack();
	if(h_t>GTC)return ;
	h_t=GTC+100;
	if(n=='i'){
		if(disc(h.x,h.y,m[watch].x,m[watch].y)<=d[eqq]){
			if(m[watch].hp>0)m[watch].hp-=2;
			pan(watch);
			h_t=GTC+600;
			ft=GTC+500;
		}
	}
	if(n=='a'&&h.y-1>0)h.y--;
	if(n=='s'&&h.x+1<=r_r)h.x++;
	if(n=='w'&&h.x-1>0)h.x--;
	if(n=='d'&&h.y+1<=l_l)h.y++;
	if(n=='p'){
		watch++;
		if(watch>=4)watch=1;
	}
	if(n=='1'){
		if(bag[1]>0)bag[1]--,h.hp+=2;
		else n='2';
	}
	if(n=='2'){
		if(bag[3]>0){
			if(m[watch].hp>0){
				bag[3]-=3,m[watch].hp--;
				pan(watch);
				ft=GTC+500;
			}
		}
		else n='3';
	}
	if(n=='3'){
		if(bag[2]>0)bag[2]--,h.hp+=8;
	}
}

int check(int x,int y,int dep){
	if(m[3].tu&&eisc(x,y,m[3].x,m[3].y)==1)return 9;
	if(x==h.x&&y==h.y)return 1;
	
	for(int i=1;i<=20;i++){
		if(x==m[i].x&&y==m[i].y)return 0; 
	}
	
	for(int i=1;i<=3;i++){
		if(x==p[dep].x[i]&&y==p[dep].y[i])return 2;
	}
	
	for(int i=1;i<=4;i++){
		if(x==type[i].x&&y==type[i].y)return i+2;
	}
	
	return 10;
}

void put_map(int dep){
	
	for(int i=1;i<=r_r;i++){
		
		for(int j=1;j<=l_l;j++){
			switch(check(i,j,dep)){
				
				case 1:{set_p putchar('@');break;}
				case 0:{
					set_r
					if(mt<=GTC&&(ft<=GTC||disc(i,j,m[watch].x,m[watch].y)!=0)){
						if(disc(i,j,m[1].x,m[1].y)==0)putchar('m');
						else if(disc(i,j,m[2].x,m[2].y)==0)putchar('M');
						else {
							sco();
							putchar('W');
						}
						
					}
					else {
						printf("*");
					}
					break;
				}
				case 2:{set_w putchar('n');break;}
				case 3:{set_g putchar('u');break;}
				case 4:{set_g putchar('o');break;}
				case 5:{set_g putchar(',');break;}
				case 6:{set_g putchar('Q');break;}
				case 9:{set_r putchar('w');break;} 
				case 10:{
					if(shine_time>=GTC){
						if(sh){
							if(mt>GTC){
								if(typp==1)set_p
								if(typp==2)set_y
							}
							else set_w 
						}
						else {
							if(mt>GTC){
								if(typp==1)set_d
								if(typp==2)set_r
							}
							else set_r
						}
						sh=!sh;
					}
					else set_w
					putchar('.');break;
				}
				
			}
			putchar(' ');
		}
		
		putchar('\n');
	}
	printf("%lld\n",sum);
	set_y printf("-------------------\n");
	set_g printf("hp %d ",show_hp);
	set_d printf("looking %d\n",watch);
	set_w
	if(bag[1]){printf("orange %d\n",bag[1]);}
	if(bag[2]){printf("bread favour bread %d\n",bag[2]);}
	if(bag[3]){printf("stone made by water %d\n",bag[3]);}
	set_y printf("-------------------\n");
}

void clear_set(){
	m[1].x=l_l+1,m[1].y=r_r+1;
	show_hp=m[1].hp=20;
	m[1].ret_time=GTC+1100;
	m[2].x=0,m[2].y=0;
	m[2].hp=8;
	m[2].ret_time=GTC+90000;
	m[2].rr_time=GTC+90000;
	m[3].x=0,m[3].y=l_l+1;
	m[3].hp=50;
	m[3].ret_time=GTC+600;
	m[3].rr_time=GTC+200000;
	h.hp=10;
	type[1].x=type[2].x=type[3].x=type[4].x=l_l+1;
	type[1].y=type[2].y=type[3].y=type[4].y=r_r+1;
	t1[1]=GTC+10000;
	t1[2]=GTC+70000;
	t1[3]=GTC+120000; 
	t1[4]=GTC+200000;
}

void moster_move(){

	for(int mm=1;mm<=2;mm++){
		if(GTC>=m[mm].ret_time){
			if(m[mm].tu<=0){
				if(m[mm].x==h.x){
					if(m[mm].y<h.y)m[mm].ij=0;
					else m[mm].ij=3;
				}
				else if(m[mm].y==h.y){
					if(m[mm].x<h.x)m[mm].ij=1;
					else m[mm].ij=2;
				}
				else continue;
				m[mm].tu=(mm==1?4:6);
			}
			if(m[mm].tu>0){
				if(m[mm].rr_time<GTC){
					int xx=m[mm].x+dx[m[mm].ij];
					int yy=m[mm].y+dy[m[mm].ij];
					if(xx>0&&xx<=r_r)m[mm].x=xx;
					if(yy>0&&yy<=l_l)m[mm].y=yy;
					m[mm].tu--;
					if(m[mm].tu<=0){
						m[mm].ret_time=GTC+2100;
					}
					m[mm].rr_time=GTC+100;
					if(h.x==m[mm].x&&h.y==m[mm].y){
					//	Beep(880,100);
						shine_time=GTC+300;
						h.hp-=mm;
					}
					
				}
					
				return ;
			}
		}
	}
	
	if(GTC>=m[3].rr_time){
		if(m[3].tu==0){
			m[3].tu=8;
		}
		else {
			if(eisc(h.x,h.y,m[3].x,m[3].y)<=1){
			//	Beep(880,100);
				shine_time=GTC+300;
				h.hp-=2;
			}
			m[3].tu--;
			if(m[3].tu<=0){
				m[3].rr_time=GTC+3000;
			}
		}
	}
	
	for(int mm=1;mm<=3;mm++){
		if(GTC<m[mm].rr_time||(m[mm].tu&&mm!=3))continue;
		if(mm==1)m[mm].rr_time=GTC+330;
		if(mm==2)m[mm].rr_time=GTC+180;
		if(mm==3)m[mm].rr_time=GTC+250;
		int tmp=1000,rest;
			
		for(int j=0;j<4;j++){
			int xx=m[mm].x+dx[j];
			int yy=m[mm].y+dy[j];
			if(disc(h.x,h.y,xx,yy)<tmp&&disc(h.x,h.y,xx,yy)>=1){
				
				for(int k=1;k<=3;k++){
					if(k==mm)continue;
					if(disc(m[k].x,m[k].y,xx,yy)!=0){
						tmp=disc(h.x,h.y,xx,yy);
						rest=j;
					}
				}
				
				
			}
		}
			
		if(tmp<=disc(h.x,h.y,m[mm].x,m[mm].y)){
			m[mm].x+=dx[rest];
			m[mm].y+=dy[rest];
			if(mm==3&&m[3].tu>0)m[3].tu--;
		}
	}
	
}

void game_over(){
	
	if(show_hp<=0){
		Sleep(1000);
		system("cls");
		
		while(1){
			
			for(int i=1;i<=5;i++)putchar('\n');
			
			printf("                       ");
			set_r putchar('g');
			set_g putchar('a');
			set_b putchar('m');
			set_y putchar('e');
			putchar(' ');
			set_p putchar('o');
			set_r putchar('v');
			set_w putchar('e');
			set_g putchar('r');
			set_d printf("\n                       你好蔡啊\n");
		}
		
		
	}
}

void winner(){
	if(sum>=30){
		system("cls");
		while(1){
			system("cls");
			printf("\n");
			sco();
			printf("          ----        ----            --------         ----       ----\n");
			sco();
			printf("           ----      ----            ----------        ----       ----\n");
			sco();
			printf("            ----    ----           ---      ----       ----       ---\n");
			sco();
			printf("               ------              ---      ----       ----      ---\n");
			sco();
			printf("                ----               ---      ----        ----    ---\n");
			sco();
			printf("                ----                  -------             ------\n");
			sco();
			printf("                    ---   ---   ---        -----       ---         ---\n");
			sco();
			printf("                      --   --    --         ---         --     --  --\n");
			sco();
			printf("                       ---   ---            --          --   --   --\n");
			sco();
			printf("                        -      -           ----         --- -     ---  ");
		}
	}
}

void tooler(){
	
	for(int i=1;i<=4;i++){
		if(type[i].x>l_l||type[i].y>r_r){
			if(t1[i]<GTC){
				type[i].x=rand()%(l_l-1),type[i].y=rand()%(r_r-1);
				if(type[i].x==0)type[i].x=l_l;
				if(type[i].y==0)type[i].y=r_r;
				t1[i]=GTC+rand()%(i*10000)+2000; 
			}
		}
		if(h.x==type[i].x&&h.y==type[i].y){
			if(i!=4){
				type[i].x=l_l+1,type[i].y=r_r+1;
				bag[i]++;
			}
			else {
				system("cls");
				int tmp=0;
				printf(
				"                                    \n"
				"                                    \n"
				"                                    \n"
				"               @    @               \n"
				);
				printf("不要怕危险\n");
				printf("选一个吧(1 2)\n");
				n=getch();
				if(n=='1'){
					printf("这把剑给你\n");
					Sleep(1000);
					eqq=4;
				} 
				if(n=='2'){
					printf("休息一下吧\n");
					Sleep(1000);
					h.hp+=20; 
				}
//				if(n=='3'){
//					printf("天降正义\n");
//					Sleep(1000);
//					
//					for(int i=1;i<=3;i++){
//						if(m[i].x>0&&m[i].y>0&&m[i].y<=l_l&&m[i].x<=r_r){
//							m[i].hp-=50;
//							pan(i);
//						}
//					}
//					
//				}
				type[i].x=l_l+1,type[i].y=r_r+1;
			}
		}
	}
	
}

void booker(){
	set_w
	printf("wasd为方向\n");
	printf("你需要按下'p'选择注视一个敌人,你的所有攻击会自动打向注视着的敌人\n");
	set_r
	printf("另外,m的编号为1,M的编号为2\n");
	set_w
	printf("按下'i'键普通攻击(有攻击距离)\n");
	set_g
	printf("按下'k'后,输入指令使用技能(内置CD)\n");
	set_w
	printf("按下'x'开始");
	n=getch();
	if(n=='x'){
		st=1;
		return ;
	}
} 

int main(){
	srand(100);
	move_vul=1000+GTC;
	HideCursor();
	clear_set();
	h.x=5,h.y=5;
	
	while(!st){
		put_st();n=getch();
		if(n=='x'){
			st=1;
		}
		else if(n=='b'){
			system("cls");
			booker();
		}
		system("cls");
	}
		
	timer
	game_time+=11;
	blood_time=GTC+500;
	set_w
														
	while(1){
		if(GTC>blood_time){
			if(h.hp>show_hp)show_hp++;
			else if(h.hp<show_hp)show_hp--;
			blood_time=GTC+750;
		}
		
		while(GTC<game_time){n='?';}
			
		game_time+=33;
		system("cls");
		tooler();
		get_move();
		moster_move();
		put_map(1);
		game_over();
		winner();
	}
		
}
2020/7/23 10:40
加载中...