• 个人简介

    该用户太懒,这里啥也没写 (´・ω・`)

    1. 来源于黄子峻
    2. 不可抄袭
    3. 狼人杀游戏
    4. #include<bits/stdc++.h>
    5. #include<windows.h>
    6. #include<conio.h>
    7. using namespace std;
    8. const int daytime=0,night=1;
    9. int day=0, during_time=daytime, player_number, my_number;
    10. HWND hwnd=GetForegroundWindow();
    11. const int blue=0,yellow=1,red=2,green=3,purple=4,white=5;//颜色常量
    12. void color(int c){
    13. switch(c){
      
    14. 	case red:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);break;
      
    15. 	case green:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);break;
      
    16. 	case yellow:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |FOREGROUND_GREEN);break;
      
    17. 	case blue:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);break;
      
    18. 	case white:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |FOREGROUND_GREEN | FOREGROUND_BLUE);break;
      
    19. 	case purple:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |FOREGROUND_BLUE);break;
      
    20. }
      
    21. }
    22. int idx_police=-1;
    23. void gotoxy(int x,int y){
    24. COORD position;
      
    25. position.X=x;
      
    26. position.Y=y;
      
    27. SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), position);
      
    28. }
    29. void init_Show_Window(){
    30. system("mode con lines=60 cols=188"); 
      
    31. ShowWindow(hwnd,SW_MAXIMIZE);//窗口最大化 
      
    32. DeleteMenu(GetSystemMenu(GetConsoleWindow(), FALSE), SC_CLOSE, MF_BYCOMMAND);
      
    33. DrawMenuBar(GetConsoleWindow());//删除×字符 
      
    34. }
    35. /玩家类/
    36. const int nvwu=0,cunmin=1,yuyanjia=2,langren=3,lieren=4,shouwei=5,good=6,die=1,life=2;
    37. class player{
    38. public:
    39. int type;
      
    40. int die_or_life;
      
    41. int how(){
      
    42. 	return die_or_life;
      
    43. }
      
    44. int is_light;//是否已经公布 
      
    45. int killer;
      
    46. };
    47. player players[1000];
    48. /转换白天模式/
    49. void change_daytime(){
    50. during_time=daytime;
      
    51. day++;
      
    52. }
    53. /转换黑夜模式/
    54. void change_night(){
    55. during_time=night;
      
    56. }
    57. int nnvwu=0,ncunmin=0,nyuyanjia=0,nlangren=0,nlieren=0,nshouwei=0;
    58. int idxnvwu,idxshouwei,idxyuyanjia,idxlieren,idxlangren[4]={-1,-1,-1,-1};
    59. /b是否在Arr中/
    60. bool is_include(int arr[],int b,int l){
    61. for(int i=0;i<l;i++){
      
    62. 	if(arr[i]==b)
      
    63. 		return true;
      
    64. }
      
    65. return false;
      
    66. }
    67. /初始化人数/
    68. void init_players(){
    69. my_number=rand()%player_number;
      
    70. if(player_number==12) nlangren=4;
      
    71. else if(player_number>=10) nlangren=3;
      
    72. else nlangren=2;
      
    73. for(int i=0;i<player_number;i++)
      
    74. {
      
    75. 	players[i].die_or_life=life;
      
    76. 	players[i].is_light=0;
      
    77. 	players[i].type=-1;
      
    78. 	players[i].killer=2147483647;
      
    79. }
      
    80. for(int i=0;i<nlangren;i++)
    81. {
    82.    int p=rand()%player_number;
      
    83.    if(!is_include(idxlangren,p,4))
      
    84.    	idxlangren[i]=p,players[p].type=langren;
      
    85.    else
      
    86.    	i--;
      
    87.    Sleep(rand()%80+100);
      
    88. }
    89. if(player_number==12)
    90. {
    91.    do{
      
    92.    	idxshouwei=rand()%player_number;
      
    93.    }while(players[idxshouwei].type!=-1);   
      
    94.    players[idxshouwei].type=shouwei;   
      
    95. }
    96. do{
    97.    idxnvwu=rand()%player_number;
      
    98. }while(players[idxnvwu].type!=-1);
    99. players[idxnvwu].type=nvwu;
    100. if(player_number>=10)
    101. {
    102.    do{
      
    103.    	idxlieren=rand()%player_number;
      
    104.    }while(players[idxlieren].type!=-1);
      
    105.    players[idxlieren].type=lieren;   
      
    106. }
    107. do{
    108.    idxyuyanjia=rand()%player_number;
      
    109. }while(players[idxyuyanjia].type!=-1);
    110. players[idxyuyanjia].type=yuyanjia;
    111. for(int i=0;i<player_number;i++)
    112.    if(players[i].type==-1)
      
    113.    	players[i].type=cunmin,
      
    114.    	ncunmin++;
      
    115. if(players[my_number].type==langren)
    116. {
    117.    for(int i=0;i<nlangren;i++)
      
    118.    {
      
    119.    	players[idxlangren[i]].is_light=1;
      
    120.    }
      
    121. }
    122. players[my_number].is_light=1;
    123. }
    124. /在屏幕上打印东西/
    125. void print(){
    126. gotoxy(0,0);
    127. cout<<"作者:洛谷393864";
    128. gotoxy(90,0);
    129. if(during_time==night)
    130.    color(red);
      
    131. else
    132.    color(blue);
      
    133. printf("第%d天 | ",day);
    134. if(during_time==night) cout<<"黑夜";
    135. else cout<<"白天";
    136. gotoxy(0,3);
    137. color(blue);
    138. cout<<" 我的号位:"<<my_number+1;
    139. for(int i=0;i<player_number;i++){
    140.    gotoxy(i*8+1,4);
      
    141.    if(i==idx_police) color(yellow);
      
    142.    else color(blue);
      
    143.    cout<<i+1<<"号位"; 
      
    144.    gotoxy(i*8+1,5);
      
    145.    if(players[i].how()==die){
      
    146.    	color(red);
      
    147.    	cout<<"死 亡";
      
    148.    }else{
      
    149.    	color(green);
      
    150.    	cout<<"存 活";
      
    151.    }
      
    152.    gotoxy(i*8+1,6);
      
    153.    color(blue);
      
    154.    if(players[i].is_light){
      
    155.    	if(players[i].is_light==1){
      
    156.    		switch(players[i].type){
      
    157.    			case nvwu: cout<<"女 巫";break;
      
    158.    			case yuyanjia: cout<<"\b预言家";break;
      
    159.    			case cunmin: cout<<"村 民";break;
      
    160.    			case langren:cout<<"狼 人"; break;
      
    161.    			case lieren:cout<<"猎 人"; break; 
      
    162.    			case shouwei:cout<<"守 卫"; break;
      
    163.    		}   
      
    164.    	}else{
      
    165.    		cout<<"好人";
      
    166.    	}
      
    167.    }else{
      
    168.    	cout<<"未知";
      
    169.    }
      
    170. }
    171. }
    172. /判断是否结束,没结束返回0 好人胜利返回1 狼人胜利返回2 平局返回3/
    173. int is_end(){
    174. int die_bad=0;
    175. int die_people=0;
    176. int die_god=0;
    177. for(int i=0;i<player_number;i++){
    178.    if((players[i].type == nvwu || players[i].type == yuyanjia || players[i].type == shouwei)&&players[i].die_or_life==die)
      
    179.    	die_god++;
      
    180.    else if(players[i].type == langren && players[i].die_or_life==die)
      
    181.    	die_bad++;
      
    182.    else if(players[i].type == cunmin && players[i].die_or_life==die)
      
    183.    	die_people++;
      
    184. }
    185. if((die_baddie_people || die_baddie_god)&&(die_bad>=nlangren))
    186.    return 3;
      
    187. if(die_bad>=nlangren)
    188.    return 1;
      
    189. if(die_people>=ncunmin||die_god>=(player_number>=10 ? 3:2))
    190.    return 2;
      
    191. return 0;
    192. }
    193. /游戏开始前的骚操作/
    194. void before_game(){
    195. srand(time(NULL));
    196. init_Show_Window();
    197. color(green);
    198. cout<<"欢迎来到狼人杀游戏\t\t\t为了更好的游戏体验,请右键点击上方↑↑,点击"属性",点击"字体"栏目,将字体修改为宋体或新宋体,将字号改为20\n作者:洛谷393864\n请勿私自转载,违者依法追究法律责任 注:10 11 12人局开设猎人 12人局开设守卫警长\n______________________\n";
    199. cout<<"请输入玩家人数(8-12人):";
    200. cin>>player_number;
    201. while(player_number<8||player_number>12)
    202. { cout<<"请重新输入!\n"; cin>>player_number; }
    203. system("cls");
    204. cout<<"初始化身份中,请稍等.";
    205. for(int i=0;i<6;i++){
    206.    for(int j=0;j<12;j++){
      
    207.    	cout<<".";
      
    208.    	Sleep(50);
      
    209.    }   
      
    210.    cout<<"\b\b\b\b\b\b\b\b\b\b\b\b            \b\b\b\b\b\b\b\b\b\b\b\b";
      
    211. }
    212. system("cls");
    213. init_players();
    214. cout<<"我的号位:"<<my_number+1<<endl
    215. <<"我的身份:";
    216. switch(players[my_number].type){
    217.    case nvwu: cout<<"女巫\n";break;
      
    218.    case yuyanjia: cout<<"预言家\n";break;
      
    219.    case cunmin: cout<<"村民\n";break;
      
    220.    case langren:cout<<"狼人\n";break;  
      
    221.    case lieren:cout<<"猎人\n"; break;  
      
    222.    case shouwei:cout<<"守卫\n";break;
      
    223. }
    224. change_daytime();
    225. system("pause");
    226. system("cls");
    227. cout<<"游戏加载中.";int ppppp=rand()%3+2;
    228. for(int i=0;i<ppppp;i++){
    229.    for(int j=0;j<6;j++){
      
    230.    	cout<<".";
      
    231.    	Sleep(rand()%100+150);
      
    232.    }   
      
    233.    cout<<"\b\b\b\b\b\b      \b\b\b\b\b\b";
      
    234. }
    235. print();
    236. }
    237. /每一天开始前的操作/
    238. void something_before_everyday(){
    239. change_night();
    240. system("cls");
    241. print();
    242. gotoxy(0,7);
    243. cout<<"________________________";
    244. gotoxy(0,8);
    245. color(white);
    246. cout<<"天黑~请闭眼~~~\n";
    247. }
    248. /守卫操作/
    249. int shouweishou=0;
    250. int ShouWei(){
    251. color(blue);
    252. cout<<"守卫~请睁眼~~\n";
    253. Sleep(1500);
    254. cout<<"你要守护的是?\n";
    255. if(players[my_number].type==shouwei&&players[my_number].die_or_life == life){
    256.    cin>>shouweishou;
      
    257.    while(!(shouweishou>=1&&shouweishou<=player_number&&players[shouweishou-1].die_or_life == life)){
      
    258.    	cout<<"请重新输入!\n";
      
    259.    	cin>>shouweishou;
      
    260.    }
      
    261.    cout<<"你今晚要守护的是"<<shouweishou<<"号\n";
      
    262.    Sleep(1500); 
      
    263.    shouweishou--;
      
    264. }else{
    265.    if(players[idxshouwei].die_or_life == life){
      
    266.    	shouweishou=rand()%10;
      
    267.    	while(!(shouweishou>=1&&shouweishou<=player_number&&players[shouweishou-1].die_or_life == life)){
      
    268.    		shouweishou=rand()%10;
      
    269.    	}
      
    270.    }
      
    271. }
    272. Sleep(2000);
    273. cout<<"守卫请闭眼"<<endl<<endl;
    274. return shouweishou;
    275. }
    276. /狼人操作/
    277. int LangRen(){
    278. int langrensha=-1;
    279. color(red);
    280. cout<<"狼人~请睁眼~~~\n";
    281. Sleep(1500);
    282. cout<<"你们今晚要杀~谁~~??\n";
    283. if(players[my_number].type==langren&&players[my_number].die_or_life == life){
    284.    cin>>langrensha;
      
    285.    while(!(langrensha>=1&&langrensha<=player_number&&players[langrensha-1].die_or_life==life)){
      
    286.    	cout<<"请重新输入!\n";
      
    287.    	cin>>langrensha;
      
    288.    }
      
    289.    cout<<"你们今晚要杀的是"<<langrensha--<<"号\n";
      
    290.    Sleep(3500);
      
    291. }else{
    292.    while(langrensha==-1 || players[langrensha].die_or_life == die || players[langrensha].type==langren){
      
    293.    	langrensha=rand()%player_number;
      
    294.    }
      
    295.    Sleep(3000);
      
    296. }
    297. cout<<"狼人请~闭眼~~\n\n";
    298. return langrensha;
    299. }
    300. /女巫操作/
    301. int nvwujiu=0,nvwudu=0,is_nvwujiu=0,is_nvwudu=0;
    302. int NvWu(int langrensha){
    303. color(purple);
    304. cout<<"女巫请睁眼\n";
    305. Sleep(2000);
    306. if(players[my_number].type==nvwu&&players[my_number].die_or_life == life){
    307.    if(is_nvwujiu) 
      
    308.    	cout<<"你已经用过解药\n",Sleep(1500);
      
    309.    else
      
    310.    {
      
    311.    	cout<<"今晚"<<langrensha+1<<"号死了,你想用解药吗?(1想 / 2不想)\n";
      
    312.    	int is_nvwujie=0;
      
    313.    	cin>>is_nvwujie;
      
    314.    	while(is_nvwujie!=1&&is_nvwujie!=2){
      
    315.    		cout<<"请重新输入\n";
      
    316.    		cin>>is_nvwujie;
      
    317.    	} 
      
    318.    	if(is_nvwujie==1) {
      
    319.    		Sleep(1000);
      
    320.    		cout<<"已经解救"<<langrensha+1<<"号\n";
      
    321.    		nvwujiu=langrensha;
      
    322.    	}
      
    323.    	is_nvwujiu=1;
      
    324.    }
      
    325.    Sleep(1500);
      
    326.    if(::is_nvwudu) cout<<"你已经用过毒药\n",Sleep(1500);
      
    327.    else
      
    328.    {
      
    329.    	cout<<"你想用毒药吗?(1想 / 2不想)\n";
      
    330.    	Sleep(1500);
      
    331.    	int is_nvwudu=0;
      
    332.    	cin>>is_nvwudu;
      
    333.    	while(is_nvwudu!=1&&is_nvwudu!=2){
      
    334.    		cout<<"请重新输入\n";
      
    335.    		cin>>is_nvwudu;
      
    336.    	}   
      
    337.    	if(is_nvwudu==1){
      
    338.    		Sleep(1500);
      
    339.    		cout<<"你想毒死谁?\n"; 
      
    340.    		cin>>nvwudu;
      
    341.    		while(!(nvwudu>=1&&nvwudu<=player_number&&players[nvwudu].die_or_life==life)){
      
    342.    			cout<<"请重新输入\n";
      
    343.    			cin>>nvwudu; 
      
    344.    		}
      
    345.    		nvwudu--;
      
    346.    		Sleep(1500);
      
    347.    		cout<<"已经毒死了"<<nvwudu+1<<"号\n";
      
    348.    	}
      
    349.    	::is_nvwudu=1;
      
    350.    }   
      
    351. }else{
    352.    if(players[idxnvwu].die_or_life == life){
      
    353.    	if(!is_nvwujiu)
      
    354.    	{
      
    355.    		int is_jiu=rand()%8;
      
    356.    		if(is_jiu==0){
      
    357.    			nvwujiu=langrensha;
      
    358.    			is_nvwujiu=1;
      
    359.    		}   
      
    360.    	}
      
    361.    	if(!is_nvwudu)
      
    362.    	{
      
    363.    		int is_du=rand()%4;
      
    364.    		if(is_du==0){
      
    365.    			int num=rand()%player_number;
      
    366.    			nvwudu=num;
      
    367.    			is_nvwudu=1;
      
    368.    		}
      
    369.    	}
      
    370.    }
      
    371. }
    372. cout<<"女巫~请闭眼~~\n\n";
    373. return nvwujiu*10000+nvwudu;//传回两个变量,“加密”操作
    374. }
    375. int yuyanjiabixutoupiao=-1;
    376. /预言家操作/
    377. void YuYanJia(){
    378. color(green);
    379. cout<<"预言家~请睁眼~~\n";
    380. Sleep(2000);
    381. if(players[my_number].type==yuyanjia&&players[my_number].die_or_life == life){
    382.    cout<<"请问你想查验谁的身份\n";
      
    383.    int p;
      
    384.    cin>>p;
      
    385.    while(!(p>=1&&p<=player_number)){
      
    386.    	cout<<"请重新输入!\n";
      
    387.    	cin>>p;
      
    388.    }
      
    389.    Sleep(2000);
      
    390.    cout<<p<<"号的身份是——";
      
    391.    Sleep(1000);
      
    392.    if(players[p-1].type == langren){
      
    393.    	cout<<"狼人\n";
      
    394.    	players[p-1].is_light = 1;
      
    395.    }else{
      
    396.    	cout<<"好人\n";
      
    397.    	players[p-1].is_light = 2;
      
    398.    }
      
    399. }else{
    400.    int p=-1;
      
    401.    while(p==-1||players[p].die_or_life==die||p==idxlieren)
      
    402.    	p=rand()%player_number;
      
    403.    if(players[p].type==langren)//锁定目标! 
      
    404.    {
      
    405.    	yuyanjiabixutoupiao=p;
      
    406.    }
      
    407. }
    408. cout<<"预言家请闭眼\n";
    409. }
    410. /黑夜操作/
    411. int LANGRENSHA=-1,NVWUDU=-1,NVWUJIU=-1,SHOUWEISHOU=-1;
    412. void Night(){
    413. LANGRENSHA=-1,NVWUDU=-1,NVWUJIU=-1,SHOUWEISHOU=-1;
    414. //如果有12人局,添加守卫
    415. if(player_number==12){
    416.    SHOUWEISHOU=ShouWei();
      
    417.    Sleep(2000);
      
    418. }
    419. /狼人部分/
    420. LANGRENSHA=LangRen();
    421. Sleep(3500);
    422. /女巫部分/
    423. int nvwu=NvWu(LANGRENSHA);
    424. NVWUDU=nvwu%10+nvwu/10%10;
    425. NVWUJIU=nvwu/10000%10+nvwu/100000%10;
    426. Sleep(3000);
    427. /预言家部分/
    428. YuYanJia();
    429. Sleep(2000);
    430. }
    431. /猎人操作/
    432. void Lieren(){
    433. int lierendai=-1;
    434. cout<<idxlieren+1<<"号是猎人\n";
    435. players[idxlieren].is_light = 1;
    436. Sleep(1000);
    437. if(idxlieren==my_number){
    438.    cout<<"你想带走几号?\n";
      
    439.    cin>>lierendai;
      
    440.    while(lierendai<1||lierendai>player_number||players[lierendai].die_or_life==die){
      
    441.    	cout<<"请重新输入!\n";
      
    442.    	cin>>lierendai;
      
    443.    }
      
    444.    lierendai--;
      
    445. }else{
    446.    lierendai=rand()%player_number;
      
    447.    while(players[lierendai].die_or_life == die){
      
    448.    	lierendai=rand()%player_number;
      
    449.    }
      
    450. }
    451. Sleep(2000);
    452. cout<<"猎人选择带走"<<lierendai+1<<"号\n";
    453. Sleep(2000);
    454. players[lierendai].die_or_life = die;
    455. }
    456. void police_die();
    457. /判断谁死了/
    458. void panduansiwang(){
    459. system("cls");
    460. print();
    461. gotoxy(0,7);
    462. cout<<"________________________\n";
    463. Sleep(3000);
    464. color(white);
    465. cout<<"天亮了\n";
    466. Sleep(2000);
    467. gotoxy(0,9);
    468. cout<<"昨晚";
    469. bool is_die[15]={false},is_die_lieren=false,flag=false;
    470. for(int i=0;i<player_number;i++)
    471. {
    472.    if(players[i].die_or_life==life)
      
    473.    {
      
    474.    	if(i==LANGRENSHA||i==NVWUDU) {
      
    475.    		if(players[i].type==lieren) is_die_lieren=true;
      
    476.    		players[i].killer= (i==LANGRENSHA ? langren:nvwu);
      
    477.    		players[i].die_or_life=die;
      
    478.    		is_die[i]=true;
      
    479.    	}
      
    480.    	if(i==SHOUWEISHOU||i==NVWUJIU) {
      
    481.    		if(players[i].type==lieren) is_die_lieren=false;
      
    482.    		players[i].killer=-1;
      
    483.    		players[i].die_or_life=life;
      
    484.    		is_die[i]=false;
      
    485.    	}   
      
    486.    }
      
    487. }
    488. bool is_police_die=false;
    489. for(int i=0;i<player_number;i++)
    490. {
    491.    if(is_die[i])
      
    492.    {
      
    493.    	if(flag) cout<<"和"<<i+1<<"号";
      
    494.    	else cout<<i+1<<"号",flag=true;
      
    495.    	if(i==idx_police) 
      
    496.    		is_police_die=true;
      
    497.    }
      
    498. }
    499. if(flag) cout<<"死了\n";
    500. else cout<<"是平安夜\n";
    501. if(is_die_lieren) Lieren();
    502. if(is_police_die) police_die();
    503. }
    504. /选警长/
    505. void choose_police(){
    506. system("cls");
    507. print();
    508. color(blue);
    509. gotoxy(0,7);
    510. cout<<"________________________\n";
    511. color(yellow);
    512. cout<<"下面开始选举警长,各位不能选举自己~\n";
    513. int tong[100]={0},cannot[100],must[100]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
    514. memset(cannot,-1,sizeof(cannot));
    515. CHOOSE:
    516. color(yellow);
    517. Sleep(1500);
    518. for(int i=0;i<player_number;i++)
    519. {
    520.    if(players[i].die_or_life==life&&!is_include(cannot,i,player_number))
      
    521.    {
      
    522.    	if(i==my_number)
      
    523.    	{
      
    524.    		cout<<"你要选举几号?\n";
      
    525.    		int n;
      
    526.    		cin>>n;
      
    527.    		while(n<1||n>player_number||n==i+1||players[n-1].die_or_life==die||!is_include(must,n-1,player_number))
      
    528.    		{
      
    529.    			cout<<"请重新输入!\n";
      
    530.    			cin>>n;
      
    531.    		}
      
    532.    		cout<<i+1<<"号选举"<<n--<<"号\n";
      
    533.    		tong[n]++;
      
    534.    	}
      
    535.    	else
      
    536.    	{
      
    537.    		int n=rand()%player_number;
      
    538.    		while(n==i||players[n].die_or_life==die||!is_include(must,n,player_number))
      
    539.    			n=rand()%player_number;
      
    540.    		cout<<i+1<<"号选举"<<n+1<<"号\n";
      
    541.    		tong[n]++;
      
    542.    	}
      
    543.    	Sleep(1500);
      
    544.    }
      
    545. }
    546. int idx_max=-1,maxn=-1,len=0;
    547. for(int i=0;i<player_number;i++)
    548.    if(maxn<tong[i])
      
    549.    {
      
    550.    	maxn=tong[i];
      
    551.    	idx_max=i;
      
    552.    }
      
    553. int maxn_arr[15]={0};
    554. for(int i=0;i<player_number;i++)
    555. {
    556.    if(tong[i]==maxn)
      
    557.    {
      
    558.    	maxn_arr[len++]=i;
      
    559.    }
      
    560. }
    561. color(blue);
    562. if(len>1)
    563. {
    564.    for(int i=0;i<len;i++)
      
    565.    {
      
    566.    	if(i==len-1)
      
    567.    	{
      
    568.    		cout<<maxn_arr[i]+1<<"号平票\n"; 
      
    569.    	}
      
    570.    	else
      
    571.    	{
      
    572.    		cout<<maxn_arr[i]+1<<"号,";
      
    573.    	}
      
    574.    }
      
    575.    for(int i=0;i<len;i++)
      
    576.    	cannot[i]=maxn_arr[i];
      
    577.    for(int i=0;i<player_number;i++)
      
    578.    {
      
    579.    	if(is_include(cannot,i,len))
      
    580.    		must[i]=i;
      
    581.    	else
      
    582.    		must[i]=-1;
      
    583.    }
      
    584.    color(white);
      
    585.    goto CHOOSE;
      
    586. }
    587. cout<<"恭喜"<<idx_max+1<<"号当选警长\n";
    588. Sleep(3000);
    589. idx_police=idx_max;
    590. return;
    591. }
    592. /投票/
    593. int toupiao(){
    594. int tong[100]={0},cannot[100]={},must[100]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
    595. memset(cannot,-1,sizeof(cannot));
    596. gotoxy(0,7);
    597. color(blue);
    598. cout<<"________________________\n";
    599. color(white);
    600. cout<<"下面进入投票环节\n";
    601. memset(tong,0,sizeof(tong));
    602. Sleep(2000);
    603. TOUPIAO:
    604. for(int i=0;i<player_number;i++){
    605.    if(players[i].die_or_life == life&&!is_include(cannot,i,player_number)){
      
    606.    	if(i==my_number){
      
    607.    		color(white);
      
    608.    		cout<<"你要投几号?\n";
      
    609.    		int n;
      
    610.    		cin>>n;
      
    611.    		while(!(n>=1&&n<=player_number&&is_include(must,n-1,player_number))){
      
    612.    			cout<<"请重新输入!\n";
      
    613.    			cin>>n;
      
    614.    		}
      
    615.    		Sleep(2000);
      
    616.    		cout<<setw(2)<<my_number+1<<"号投了"<<setw(2)<<n<<"号";
      
    617.    		if(my_number==n-1) color(red),cout<<"快来看!这有个疯子投自己!"; 
      
    618.    		if(i==idx_police) color(yellow),cout<<"(警长)\n"; else cout<<"\n";
      
    619.    		if(i==idx_police) tong[n-1]++;
      
    620.    		tong[n-1]++;
      
    621.    	}else{
      
    622.    		color(white);
      
    623.    		int t=-1;
      
    624.    		while(t==-1 || players[t].die_or_life == die || t==i || !is_include(must,t,player_number)){
      
    625.    			if(i==idxyuyanjia&&yuyanjiabixutoupiao!=-1)
      
    626.    			{
      
    627.    				t=yuyanjiabixutoupiao;
      
    628.    				yuyanjiabixutoupiao=-1;
      
    629.    				continue;
      
    630.    			}
      
    631.    			t=rand()%player_number;
      
    632.    			if(is_include(idxlangren,i,nlangren))
      
    633.    			{
      
    634.    				if(players[t].type == langren)
      
    635.    					t=-1;
      
    636.    			}
      
    637.    		}
      
    638.    		cout<<setw(2)<<i+1<<"号"<<"投了"<<setw(2)<<t+1<<"号";
      
    639.    		if(i==idx_police) cout<<"(警长2票)\n"; else cout<<"\n";
      
    640.    		if(i==idx_police) tong[t]++;
      
    641.    		tong[t]++;  
      
    642.    	}
      
    643.    	Sleep(rand()%1000+1000);
      
    644.    }
      
    645. }
    646. int idx_max=-1,maxn=-1,len=0;
    647. for(int i=0;i<player_number;i++)
    648.    if(maxn<tong[i])
      
    649.    {
      
    650.    	maxn=tong[i];
      
    651.    	idx_max=i;
      
    652.    }
      
    653. int maxn_arr[15]={0};
    654. for(int i=0;i<player_number;i++)
    655. {
    656.    if(tong[i]==maxn)
      
    657.    {
      
    658.    	maxn_arr[len++]=i;
      
    659.    }
      
    660. }
    661. color(blue);
    662. if(len>1)
    663. {
    664.    for(int i=0;i<len;i++)
      
    665.    {
      
    666.    	if(i==len-1)
      
    667.    	{
      
    668.    		cout<<maxn_arr[i]+1<<"号平票\n"; 
      
    669.    	}
      
    670.    	else
      
    671.    	{
      
    672.    		cout<<maxn_arr[i]+1<<"号,";
      
    673.    	}
      
    674.    }
      
    675.    for(int i=0;i<len;i++)
      
    676.    	cannot[i]=maxn_arr[i];
      
    677.    for(int i=0;i<player_number;i++)
      
    678.    {
      
    679.    	if(is_include(cannot,i,len))
      
    680.    		must[i]=i;
      
    681.    	else
      
    682.    		must[i]=-1;
      
    683.    }
      
    684.    color(white);
      
    685.    goto TOUPIAO;
      
    686. }
    687. cout<<idx_max+1<<"号"<<"出局\n";
    688. Sleep(4000);
    689. players[idx_max].die_or_life = die;
    690. players[idx_max].killer = good;
    691. return idx_max;
    692. }
    693. /警长死亡/
    694. void police_die(){
    695. color(yellow);
    696. int type;
    697. if(idx_police==my_number)
    698. {
    699.    Sleep(1550);
      
    700.    cout<<"你是想撕毁警徽还是移交警徽?(撕毁输入1,移交输入2)";
      
    701.    cin>>type;
      
    702.    while(!(type==1||type==2))
      
    703.    {
      
    704.    	cout<<"请重新输入!\n";
      
    705.    	cin>>type;
      
    706.    }
      
    707. }
    708. else{
    709.    type=rand()%3+1;
      
    710. }
    711. if(type==1)
    712. {
    713.    cout<<"警长选择撕毁警徽\n";
      
    714.    Sleep(1000);
      
    715.    idx_police=-1;
      
    716. }
    717. else
    718. {
    719.    int lucky=-1;
      
    720.    while(lucky==-1||players[lucky].die_or_life==die)
      
    721.    	lucky=rand()%player_number;
      
    722.    cout<<"警长选择把警徽移交给"<<lucky+1<<"号\n";
      
    723.    Sleep(1500);
      
    724.    idx_police=lucky; 
      
    725. }
    726. }
    727. /故事的最后/
    728. void the_end(){
    729. system("cls");
    730. switch(is_end()){
    731.    case 1:cout<<"好人胜利\n\n"; break;
      
    732.    case 2:cout<<"狼人胜利\n\n"; break;
      
    733.    case 3:cout<<"本局平局\n\n"; break;
      
    734. }
    735. for(int i=0;i<player_number;i++){
    736.    cout<<i+1<<"号位:\t";
      
    737.    switch(players[i].type){
      
    738.    	case nvwu: cout<<"女巫\t";break;
      
    739.    	case yuyanjia: cout<<"预言家\t";break;
      
    740.    	case cunmin: cout<<"村民\t";break;
      
    741.    	case langren:cout<<"狼人\t";break;
      
    742.    	case lieren:cout<<"猎人\t"; break;  
      
    743.    	case shouwei:cout<<"守卫\t";break;  
      
    744.    } 
      
    745.    cout<<"最终";
      
    746.    switch(players[i].killer){
      
    747.    	case nvwu:cout<<"被女巫毒死\n"; break;
      
    748.    	case langren:cout<<"被狼人杀死\n"; break;
      
    749.    	case good:cout<<"被投票出局\n"; break;
      
    750.    	case lieren:cout<<"被猎人带走\n";break;
      
    751.    	default :cout<<"存活\n";
      
    752.    }
      
    753.    cout<<endl;
      
    754. }
    755. }
    756. /主函数/
    757. int main(){
    758. int wheel=0;
    759. before_game();
    760. while(!is_end()){
    761.    //黑夜准备 
      
    762.    something_before_everyday();
      
    763.    Sleep(1500); 
      
    764.    //黑夜部分 
      
    765.    Night(); //进入黑夜! 
      
    766.    change_daytime(); //换天 
      
    767.    //天亮了 
      
    768.    panduansiwang();//判断谁死了 
      
    769.    Sleep(2000);
      
    770.    system("cls");
      
    771.    print();
      
    772.    if(is_end()) break;
      
    773.    //选警长 
      
    774.    if(!wheel&&player_number==12)
      
    775.    {
      
    776.    	choose_police();
      
    777.    	system("cls");
      
    778.    	print();
      
    779.    }
      
    780.    //投票环节 
      
    781.    int idx_max=toupiao();//票数最多的人 
      
    782.    if(idx_max==idx_police){
      
    783.    	police_die();
      
    784.    }
      
    785.    if(players[idx_max].type==lieren){//启动猎人程序 
      
    786.    	Lieren();
      
    787.    	if(is_end()) break;
      
    788.    }
      
    789.    system("cls");
      
    790.    print(); 
      
    791.    wheel++;
      
    792. }
    793. the_end();
    794. system("pause");
    795. return 0;
    796. }
    797. 贪吃蛇游戏
    798. #include <stdio.h>
    799. #include <Windows.h>
    800. #include <stdlib.h>
    801. #include <time.h>
    802. #include <conio.h>
    803. #define ROW 22 //游戏区行数
    804. #define COL 42 //游戏区列数
    805. #define KONG 0 //标记空(什么也没有)
    806. #define WALL 1 //标记墙
    807. #define FOOD 2 //标记食物
    808. #define HEAD 3 //标记蛇头
    809. #define BODY 4 //标记蛇身
    810. #define UP 72 //方向键:上
    811. #define DOWN 80 //方向键:下
    812. #define LEFT 75 //方向键:左
    813. #define RIGHT 77 //方向键:右
    814. #define SPACE 32 //暂停
    815. #define ESC 27 //退出
    816. //蛇头
    817. struct Snake
    818. {
    819. int len; //记录蛇身长度
      
    820. int x; //蛇头横坐标
      
    821. int y; //蛇头纵坐标
      
    822. }snake;
    823. //蛇身
    824. struct Body
    825. {
    826. int x; //蛇身横坐标
      
    827. int y; //蛇身纵坐标
      
    828. }body[ROW*COL]; //开辟足以存储蛇身的结构体数组
    829. int face[ROW][COL]; //标记游戏区各个位置的状态
    830. //隐藏光标
    831. void HideCursor();
    832. //光标跳转
    833. void CursorJump(int x, int y);
    834. //初始化界面
    835. void InitInterface();
    836. //颜色设置
    837. void color(int c);
    838. //从文件读取最高分
    839. void ReadGrade();
    840. //更新最高分到文件
    841. void WriteGrade();
    842. //初始化蛇
    843. void InitSnake();
    844. //随机生成食物
    845. void RandFood();
    846. //判断得分与结束
    847. void JudgeFunc(int x, int y);
    848. //打印蛇与覆盖蛇
    849. void DrawSnake(int flag);
    850. //移动蛇
    851. void MoveSnake(int x, int y);
    852. //执行按键
    853. void run(int x, int y);
    854. //游戏主体逻辑函数
    855. void Game();
    856. int max, grade; //全局变量
    857. int main()
    858. {
    859. #pragma warning (disable:4996) //消除警告
    860. max = 0, grade = 0; //初始化变量
      
    861. system("title 贪吃蛇"); //设置cmd窗口的名字
      
    862. system("mode con cols=84 lines=23"); //设置cmd窗口的大小
      
    863. HideCursor(); //隐藏光标
      
    864. ReadGrade(); //从文件读取最高分到max变量
      
    865. InitInterface(); //初始化界面
      
    866. InitSnake(); //初始化蛇
      
    867. srand((unsigned int)time(NULL)); //设置随机数生成起点
      
    868. RandFood(); //随机生成食物
      
    869. DrawSnake(1); //打印蛇
      
    870. Game(); //开始游戏
      
    871. return 0;
      
    872. }
    873. //隐藏光标
    874. void HideCursor()
    875. {
    876. CONSOLE_CURSOR_INFO curInfo; //定义光标信息的结构体变量
      
    877. curInfo.dwSize = 1; //如果没赋值的话,光标隐藏无效
      
    878. curInfo.bVisible = FALSE; //将光标设置为不可见
      
    879. HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); //获取控制台句柄
      
    880. SetConsoleCursorInfo(handle, &curInfo); //设置光标信息
      
    881. }
    882. //光标跳转
    883. void CursorJump(int x, int y)
    884. {
    885. COORD pos; //定义光标位置的结构体变量
      
    886. pos.X = x; //横坐标
      
    887. pos.Y = y; //纵坐标
      
    888. HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); //获取控制台句柄
      
    889. SetConsoleCursorPosition(handle, pos); //设置光标位置
      
    890. }
    891. //初始化界面
    892. void InitInterface()
    893. {
    894. color(6); //颜色设置为土黄色
      
    895. for (int i = 0; i < ROW; i++)
      
    896. {
      
    897.     for (int j = 0; j < COL; j++)
      
    898.     {
      
    899.         if (j == 0 || j == COL - 1)
      
    900.         {
      
    901.             face[i][j] = WALL; //标记该位置为墙
      
    902.             CursorJump(2 * j, i);
      
    903.             printf("■");
      
    904.         }
      
    905.         else if (i == 0 || i == ROW - 1)
      
    906.         {
      
    907.             face[i][j] = WALL; //标记该位置为墙
      
    908.             printf("■");
      
    909.         }
      
    910.         else
      
    911.         {
      
    912.             face[i][j] = KONG; //标记该位置为空
      
    913.         }
      
    914.     }
      
    915. }
      
    916. color(7); //颜色设置为白色
      
    917. CursorJump(0, ROW);
      
    918. printf("当前得分:%d", grade);
      
    919. CursorJump(COL, ROW);
      
    920. printf("历史最高得分:%d", max);
      
    921. }
    922. //颜色设置
    923. void color(int c)
    924. {
    925. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c); //颜色设置
      
    926. //注:SetConsoleTextAttribute是一个API(应用程序编程接口)
      
    927. }
    928. //从文件读取最高分
    929. void ReadGrade()
    930. {
    931. FILE* pf = fopen("贪吃蛇最高得分记录.txt", "r"); //以只读的方式打开文件
      
    932. if (pf == NULL) //打开文件失败
      
    933. {
      
    934.     pf = fopen("贪吃蛇最高得分记录.txt", "w"); //以只写的方式打开文件
      
    935.     fwrite(&max, sizeof(int), 1, pf); //将max写入文件(此时max为0),即将最高得分初始化为0
      
    936. }
      
    937. fseek(pf, 0, SEEK_SET); //使文件指针pf指向文件开头
      
    938. fread(&max, sizeof(int), 1, pf); //读取文件当中的最高得分到max当中
      
    939. fclose(pf); //关闭文件
      
    940. pf = NULL; //文件指针及时置空
      
    941. }
    942. //更新最高分到文件
    943. void WriteGrade()
    944. {
    945. FILE* pf = fopen("贪吃蛇最高得分记录.txt", "w"); //以只写的方式打开文件
      
    946. if (pf == NULL) //打开文件失败
      
    947. {
      
    948.     printf("保存最高得分记录失败\n");
      
    949.     exit(0);
      
    950. }
      
    951. fwrite(&grade, sizeof(int), 1, pf); //将本局游戏得分写入文件当中
      
    952. fclose(pf); //关闭文件
      
    953. pf = NULL; //文件指针及时置空
      
    954. }
    955. //初始化蛇
    956. void InitSnake()
    957. {
    958. snake.len = 2; //蛇的身体长度初始化为2
      
    959. snake.x = COL / 2; //蛇头位置的横坐标
      
    960. snake.y = ROW / 2; //蛇头位置的纵坐标
      
    961. //蛇身坐标的初始化
      
    962. body[0].x = COL / 2 - 1;
      
    963. body[0].y = ROW / 2;
      
    964. body[1].x = COL / 2 - 2;
      
    965. body[1].y = ROW / 2;
      
    966. //将蛇头和蛇身位置进行标记
      
    967. face[snake.y][snake.x] = HEAD;
      
    968. face[body[0].y][body[0].x] = BODY;
      
    969. face[body[1].y][body[1].x] = BODY;
      
    970. }
    971. //随机生成食物
    972. void RandFood()
    973. {
    974. int i, j;
      
    975. do
      
    976. {
      
    977.     //随机生成食物的横纵坐标
      
    978.     i = rand() % ROW;
      
    979.     j = rand() % COL;
      
    980. } while (face[i][j] != KONG); //确保生成食物的位置为空,若不为空则重新生成
      
    981. face[i][j] = FOOD; //将食物位置进行标记
      
    982. color(12); //颜色设置为红色
      
    983. CursorJump(2 * j, i); //光标跳转到生成的随机位置处
      
    984. printf("●"); //打印食物
      
    985. }
    986. //判断得分与结束
    987. void JudgeFunc(int x, int y)
    988. {
    989. //若蛇头即将到达的位置是食物,则得分
      
    990. if (face[snake.y + y][snake.x + x] == FOOD)
      
    991. {
      
    992.     snake.len++; //蛇身加长
      
    993.     grade += 10; //更新当前得分
      
    994.     color(7); //颜色设置为白色
      
    995.     CursorJump(0, ROW);
      
    996.     printf("当前得分:%d", grade); //重新打印当前得分
      
    997.     RandFood(); //重新随机生成食物
      
    998. }
      
    999. //若蛇头即将到达的位置是墙或者蛇身,则游戏结束
      
    1000. else if (face[snake.y + y][snake.x + x] == WALL || face[snake.y + y][snake.x + x] == BODY)
      
    1001. {
      
    1002.     Sleep(1000); //留给玩家反应时间
      
    1003.     system("cls"); //清空屏幕
      
    1004.     color(7); //颜色设置为白色
      
    1005.     CursorJump(2 * (COL / 3), ROW / 2 - 3);
      
    1006.     if (grade > max)
      
    1007.     {
      
    1008.         printf("恭喜你打破最高记录,最高记录更新为%d", grade);
      
    1009.         WriteGrade();
      
    1010.     }
      
    1011.     else if (grade == max)
      
    1012.     {
      
    1013.         printf("与最高记录持平,加油再创佳绩", grade);
      
    1014.     }
      
    1015.     else
      
    1016.     {
      
    1017.         printf("请继续加油,当前与最高记录相差%d", max - grade);
      
    1018.     }
      
    1019.     CursorJump(2 * (COL / 3), ROW / 2);
      
    1020.     printf("GAME OVER");
      
    1021.     while (1) //询问玩家是否再来一局
      
    1022.     {
      
    1023.         char ch;
      
    1024.         CursorJump(2 * (COL / 3), ROW / 2 + 3);
      
    1025.         printf("再来一局?(y/n):");
      
    1026.         scanf("%c", &ch);
      
    1027.         if (ch == 'y' || ch == 'Y')
      
    1028.         {
      
    1029.             system("cls");
      
    1030.             main();
      
    1031.         }
      
    1032.         else if (ch == 'n' || ch == 'N')
      
    1033.         {
      
    1034.             CursorJump(2 * (COL / 3), ROW / 2 + 5);
      
    1035.             exit(0);
      
    1036.         }
      
    1037.         else
      
    1038.         {
      
    1039.             CursorJump(2 * (COL / 3), ROW / 2 + 5);
      
    1040.             printf("选择错误,请再次选择");
      
    1041.         }
      
    1042.     }
      
    1043. }
      
    1044. }
    1045. //打印蛇与覆盖蛇
    1046. void DrawSnake(int flag)
    1047. {
    1048. if (flag == 1) //打印蛇
      
    1049. {
      
    1050.     color(10); //颜色设置为绿色
      
    1051.     CursorJump(2 * snake.x, snake.y);
      
    1052.     printf("■"); //打印蛇头
      
    1053.     for (int i = 0; i < snake.len; i++)
      
    1054.     {
      
    1055.         CursorJump(2 * body[i].x, body[i].y);
      
    1056.         printf("□"); //打印蛇身
      
    1057.     }
      
    1058. }
      
    1059. else //覆盖蛇
      
    1060. {
      
    1061.     if (body[snake.len - 1].x != 0) //防止len++后将(0, 0)位置的墙覆盖
      
    1062.     {
      
    1063.         //将蛇尾覆盖为空格即可
      
    1064.         CursorJump(2 * body[snake.len - 1].x, body[snake.len - 1].y);
      
    1065.         printf("  ");
      
    1066.     }
      
    1067. }
      
    1068. }
    1069. //移动蛇
    1070. void MoveSnake(int x, int y)
    1071. {
    1072. DrawSnake(0); //先覆盖当前所显示的蛇
      
    1073. face[body[snake.len - 1].y][body[snake.len - 1].x] = KONG; //蛇移动后蛇尾重新标记为空
      
    1074. face[snake.y][snake.x] = BODY; //蛇移动后蛇头的位置变为蛇身
      
    1075. //蛇移动后各个蛇身位置坐标需要更新
      
    1076. for (int i = snake.len - 1; i > 0; i--)
      
    1077. {
      
    1078.     body[i].x = body[i - 1].x;
      
    1079.     body[i].y = body[i - 1].y;
      
    1080. }
      
    1081. //蛇移动后蛇头位置信息变为第0个蛇身的位置信息
      
    1082. body[0].x = snake.x;
      
    1083. body[0].y = snake.y;
      
    1084. //蛇头的位置更改
      
    1085. snake.x = snake.x + x;
      
    1086. snake.y = snake.y + y;
      
    1087. DrawSnake(1); //打印移动后的蛇
      
    1088. }
    1089. //执行按键
    1090. void run(int x, int y)
    1091. {
    1092. int t = 0;
      
    1093. while (1)
      
    1094. {
      
    1095.     if (t == 0)
      
    1096.         t = 3000; //这里t越小,蛇移动速度越快(可以根据次设置游戏难度)
      
    1097.     while (--t)
      
    1098.     {
      
    1099.         if (kbhit() != 0) //若键盘被敲击,则退出循环
      
    1100.             break;
      
    1101.     }
      
    1102.     if (t == 0) //键盘未被敲击
      
    1103.     {
      
    1104.         JudgeFunc(x, y); //判断到达该位置后,是否得分与游戏结束
      
    1105.         MoveSnake(x, y); //移动蛇
      
    1106.         Sleep(5000);
      
    1107.     }
      
    1108.     else //键盘被敲击
      
    1109.     {
      
    1110.         break; //返回Game函数读取键值
      
    1111.     }
      
    1112. }
      
    1113. }
    1114. //游戏主体逻辑函数
    1115. void Game()
    1116. {
    1117. int n = RIGHT; //开始游戏时,默认向后移动
      
    1118. int tmp = 0; //记录蛇的移动方向
      
    1119. goto first; //第一次进入循环先向默认方向前进
      
    1120. while (1)
      
    1121. {
      
    1122.     n = getch(); //读取键值
      
    1123.     //在执行前,需要对所读取的按键进行调整
      
    1124.     switch (n)
      
    1125.     {
      
    1126.     case UP:
      
    1127.     case DOWN: //如果敲击的是“上”或“下”
      
    1128.         if (tmp != LEFT&&tmp != RIGHT) //并且上一次蛇的移动方向不是“左”或“右”
      
    1129.         {
      
    1130.             n = tmp; //那么下一次蛇的移动方向设置为上一次蛇的移动方向
      
    1131.         }
      
    1132.         break;
      
    1133.     case LEFT:
      
    1134.     case RIGHT: //如果敲击的是“左”或“右”
      
    1135.         if (tmp != UP&&tmp != DOWN) //并且上一次蛇的移动方向不是“上”或“下”
      
    1136.         {
      
    1137.             n = tmp; //那么下一次蛇的移动方向设置为上一次蛇的移动方向
      
    1138.         }
      
    1139.     case SPACE:
      
    1140.     case ESC:
      
    1141.     case 'r':
      
    1142.     case 'R':
      
    1143.         break; //这四个无需调整
      
    1144.     default:
      
    1145.         n = tmp; //其他键无效,默认为上一次蛇移动的方向
      
    1146.         break;
      
    1147.     }
      
    1148. first: //第一次进入循环先向默认方向前进
      
    1149.     switch (n)
      
    1150.     {
      
    1151.     case UP: //方向键:上
      
    1152.         run(0, -1); //向上移动(横坐标偏移为0,纵坐标偏移为-1)
      
    1153.         tmp = UP; //记录当前蛇的移动方向
      
    1154.         break;
      
    1155.     case DOWN: //方向键:下
      
    1156.         run(0, 1); //向下移动(横坐标偏移为0,纵坐标偏移为1)
      
    1157.         tmp = DOWN; //记录当前蛇的移动方向
      
    1158.         break;
      
    1159.     case LEFT: //方向键:左
      
    1160.         run(-1, 0); //向左移动(横坐标偏移为-1,纵坐标偏移为0)
      
    1161.         tmp = LEFT; //记录当前蛇的移动方向
      
    1162.         break;
      
    1163.     case RIGHT: //方向键:右
      
    1164.         run(1, 0); //向右移动(横坐标偏移为1,纵坐标偏移为0)
      
    1165.         tmp = RIGHT; //记录当前蛇的移动方向
      
    1166.         break;
      
    1167.     case SPACE: //暂停
      
    1168.         system("pause>nul"); //暂停后按任意键继续
      
    1169.         break;
      
    1170.     case ESC: //退出
      
    1171.         system("cls"); //清空屏幕
      
    1172.         color(7); //颜色设置为白色
      
    1173.         CursorJump(COL - 8, ROW / 2);
      
    1174.         printf("  游戏结束  ");
      
    1175.         CursorJump(COL - 8, ROW / 2 + 2);
      
    1176.         exit(0);
      
    1177.     case 'r':
      
    1178.     case 'R': //重新开始
      
    1179.         system("cls"); //清空屏幕
      
    1180.         main(); //重新执行主函数
      
    1181.     }
      
    1182. }
      
    1183. }
    1184. 战斗机游戏
    1185. #include
    1186. #include<windows.h>
    1187. #include<conio.h>
    1188. #include<time.h>
    1189. #include
    1190. using namespace std;
    1191. typedef struct Frame
    1192. {
    1193. COORD position[2];
      
    1194. int flag;
      
    1195. }Frame;
    1196. void SetPos(COORD a)
    1197. {
    1198. HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);
      
    1199. SetConsoleCursorPosition(out, a);
      
    1200. }
    1201. void SetPos(int i, int j)
    1202. {
    1203. COORD pos={i, j};
      
    1204. SetPos(pos);
      
    1205. }
    1206. void HideCursor()
    1207. {
    1208. CONSOLE_CURSOR_INFO cursor_info = {1, 0}; 
      
    1209. SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
      
    1210. }
    1211. void drawRow(int y, int x1, int x2, char ch)
    1212. {
    1213. SetPos(x1,y);
      
    1214. for(int i = 0; i <= (x2-x1); i++)
      
    1215.     cout<<ch;
      
    1216. }
    1217. void drawRow(COORD a, COORD b, char ch)
    1218. {
    1219. if(a.Y == b.Y)
      
    1220.     drawRow(a.Y, a.X, b.X, ch);
      
    1221. else
      
    1222. {
      
    1223.     SetPos(0, 25);
      
    1224.     cout<<"error code 01:无法填充行,因为两个坐标的纵坐标(x)不相等";
      
    1225.     system("pause");
      
    1226. }
      
    1227. }
    1228. void drawCol(int x, int y1, int y2, char ch)
    1229. {
    1230. int y=y1;
      
    1231. while(y!=y2+1)
      
    1232. {
      
    1233.     SetPos(x, y);
      
    1234.     cout<<ch;
      
    1235.     y++;
      
    1236. }
      
    1237. }
    1238. void drawCol(COORD a, COORD b, char ch)
    1239. {
    1240. if(a.X == b.X)
      
    1241.     drawCol(a.X, a.Y, b.Y, ch);
      
    1242. else
      
    1243. {
      
    1244.     SetPos(0, 25);
      
    1245.     cout<<"error code 02:无法填充列,因为两个坐标的横坐标(y)不相等";
      
    1246.     system("pause");
      
    1247. }
      
    1248. }
    1249. void drawFrame(COORD a, COORD b, char row, char col)
    1250. {
    1251. drawRow(a.Y, a.X+1, b.X-1, row);
      
    1252. drawRow(b.Y, a.X+1, b.X-1, row);
      
    1253. drawCol(a.X, a.Y+1, b.Y-1, col);
      
    1254. drawCol(b.X, a.Y+1, b.Y-1, col);
      
    1255. }
    1256. void drawFrame(int x1, int y1, int x2, int y2, char row, char col)
    1257. {
    1258. COORD a={x1, y1};
      
    1259. COORD b={x2, y2};
      
    1260. drawFrame(a, b, row, col);
      
    1261. }
    1262. void drawFrame(Frame frame, char row, char col)
    1263. {
    1264. COORD a = frame.position[0];
      
    1265. COORD b = frame.position[1];
      
    1266. drawFrame(a, b, row, col);
      
    1267. }
    1268. void drawPlaying()
    1269. {
    1270. drawFrame(0, 0, 48, 24, '=', '|');
      
    1271. drawFrame(49, 0, 79, 4, '-', '|');
      
    1272. drawFrame(49, 4, 79, 9, '-', '|');
      
    1273. drawFrame(49, 9, 79, 20, '-', '|');
      
    1274. drawFrame(49, 20, 79, 24, '-', '|');
      
    1275. SetPos(52, 6);
      
    1276. cout<<"得分:";
      
    1277. SetPos(52, 7);
      
    1278. cout<<"称号:";
      
    1279. SetPos(52,10);
      
    1280. cout<<"操作方式:";
      
    1281. SetPos(52,12);
      
    1282. cout<<"  a,s,d,w 控制战机移动。";
      
    1283. SetPos(52,14);
      
    1284. cout<<"  p 暂停游戏。";
      
    1285. SetPos(52,16);
      
    1286. cout<<"  e 退出游戏。";
      
    1287. }
    1288. int random(int a, int b)
    1289. {
    1290. int c=(rand() % (a-b))+ a;
      
    1291. return c;
      
    1292. }
    1293. COORD random(COORD a, COORD b)
    1294. {
    1295. int x=random(a.X, b.X);
      
    1296. int y=random(a.Y, b.Y);
      
    1297. COORD c={x, y};
      
    1298. return c;
      
    1299. }
    1300. bool judgeCoordInFrame(Frame frame, COORD spot)
    1301. {
    1302. if(spot.X>=frame.position[0].X)
      
    1303.     if(spot.X<=frame.position[1].X)
      
    1304.         if(spot.Y>=frame.position[0].Y)
      
    1305.             if(spot.Y<=frame.position[0].Y)
      
    1306.                 return true;
      
    1307. return false;
      
    1308. }
    1309. void printCoord(COORD a)
    1310. {
    1311. cout    <<"( "<<a.X<<" , "<<a.Y<<" )";
      
    1312. }
    1313. void printFrameCoord(Frame a)
    1314. {
    1315. printCoord(a.position[0]);
      
    1316. cout    <<" - ";
      
    1317. printCoord(a.position[1]);
      
    1318. }
    1319. int drawMenu()
    1320. {
    1321. SetPos(30, 1);
      
    1322. cout<<"P l a n e  W a r";
      
    1323. drawRow(3, 0, 79, '-');
      
    1324. drawRow(5, 0, 79, '-');
      
    1325. SetPos(28, 4);
      
    1326. cout<<"w 和 s 选择, k 确定";
      
    1327. SetPos(15, 11);
      
    1328. cout<<"1. 简单的敌人";
      
    1329. SetPos(15, 13);
      
    1330. cout<<"2. 冷酷的敌人";
      
    1331. drawRow(20, 0, 79, '-');
      
    1332. drawRow(22, 0, 79, '-');
      
    1333. SetPos(47, 11);
      
    1334. cout<<"简单的敌人:";
      
    1335. SetPos(51, 13);
      
    1336. cout<<"简单敌人有着较慢的移动速度。";
      
    1337. SetPos(24, 21);
      
    1338. cout<<"制作:LJF神犇";
      
    1339. int j=11;
      
    1340. SetPos(12, j);
      
    1341. cout<<">>";
      
    1342. while(1)
      
    1343. {    if( _kbhit() )
      
    1344.     {    
      
    1345.         char x=_getch();
      
    1346.         switch (x)
      
    1347.         {
      
    1348.         case 'w' :
      
    1349.                 {    
      
    1350.                     if( j == 13)
      
    1351.                     {
      
    1352.                         SetPos(12, j);
      
    1353.                         cout<<" ";
      
    1354.                         j = 11;
      
    1355.                         SetPos(12, j);
      
    1356.                         cout<<">>";
      
    1357.                         SetPos(51, 13);
      
    1358.                         cout<<"            ";
      
    1359.                         SetPos(47, 11);
      
    1360.                         cout<<"简单的敌人:";
      
    1361.                         SetPos(51, 13);
      
    1362.                         cout<<"简单敌人有着较慢的移动速度,容易对付。";
      
    1363.                     }
      
    1364.                     break;
      
    1365.                 }
      
    1366.         case 's' :
      
    1367.                 {    
      
    1368.                     if( j == 11 )
      
    1369.                     {
      
    1370.                         SetPos(12, j);
      
    1371.                         cout<<" ";        
      
    1372.                         j = 13;
      
    1373.                         SetPos(12, j);
      
    1374.                         cout<<">>";
      
    1375.                         SetPos(51, 13);
      
    1376.                         cout<<"              ";
      
    1377.                         SetPos(47, 11);
      
    1378.                         cout<<"冷酷的敌人:";
      
    1379.                         SetPos(51, 13);
      
    1380.                         cout<<"冷酷的敌人移动速度较快,难对付哟!!!";
      
    1381.                     }
      
    1382.                     break;
      
    1383.                 }
      
    1384.         case 'k' :
      
    1385.                 {    
      
    1386.                     if (j == 8)    return 1;
      
    1387.                     else return 2;
      
    1388.                 }
      
    1389.         }
      
    1390.     }
      
    1391. }
      
    1392. }
    1393. class Game
    1394. {
    1395. public:
    1396. COORD position[10];
      
    1397. COORD bullet[10];
      
    1398. Frame enemy[8];
      
    1399. int score;
      
    1400. int rank;
      
    1401. int rankf;
      
    1402. string title;
      
    1403. int flag_rank;
      
    1404. Game ();
      
    1405. void initPlane();
      
    1406. void initBullet();
      
    1407. void initEnemy();
      
    1408. void planeMove(char);
      
    1409. void bulletMove();
      
    1410. void enemyMove();
      
    1411. void drawPlane();
      
    1412. void drawPlaneToNull();
      
    1413. void drawBullet();
      
    1414. void drawBulletToNull();
      
    1415. void drawEnemy();
      
    1416. void drawEnemyToNull();
      
    1417. void drawThisBulletToNull( COORD );
      
    1418. void drawThisEnemyToNull( Frame );
      
    1419. void Pause();
      
    1420. void Playing();
      
    1421. void judgePlane();
      
    1422. void judgeEnemy();
      
    1423. void Shoot();
      
    1424. void GameOver();
      
    1425. void printScore();
      
    1426. };
    1427. Game::Game()
    1428. {
    1429. initPlane();
      
    1430. initBullet();
      
    1431. initEnemy();
      
    1432. score = 0;
      
    1433. rank = 25;
      
    1434. rankf = 0;
      
    1435. flag_rank = 0;
      
    1436. }
    1437. void Game::initPlane()
    1438. {
    1439. COORD centren={39, 22};
      
    1440. position[0].X=position[5].X=position[7].X=position[9].X=centren.X;
      
    1441. position[1].X=centren.X-2;    
      
    1442. position[2].X=position[6].X=centren.X-1;
      
    1443. position[3].X=position[8].X=centren.X+1;
      
    1444. position[4].X=centren.X+2;
      
    1445. for(int i=0; i<=4; i++)
      
    1446.     position[i].Y=centren.Y;
      
    1447. for(int i=6; i<=8; i++)
      
    1448.     position[i].Y=centren.Y+1;
      
    1449. position[5].Y=centren.Y-1;
      
    1450. position[9].Y=centren.Y-2;
      
    1451. }
    1452. void Game::drawPlane()
    1453. {
    1454. for(int i=0; i<9; i++)
      
    1455. {
      
    1456.     SetPos(position[i]);
      
    1457.     if(i!=5)
      
    1458.         cout<<"O";
      
    1459.     else if(i==5)
      
    1460.         cout<<"|";        
      
    1461. }
      
    1462. }
    1463. void Game::drawPlaneToNull()
    1464. {
    1465. for(int i=0; i<9; i++)
      
    1466. {
      
    1467.     SetPos(position[i]);
      
    1468.     cout<<" ";
      
    1469. }    
      
    1470. }
    1471. void Game::initBullet()
    1472. {
    1473. for(int i=0; i<10; i++)
      
    1474.     bullet[i].Y = 30;
      
    1475. }
    1476. void Game::drawBullet()
    1477. {
    1478. for(int i=0; i<10; i++)
      
    1479. {
      
    1480.     if( bullet[i].Y != 30)
      
    1481.     {
      
    1482.         SetPos(bullet[i]);
      
    1483.         cout<<"'";    
      
    1484.     }
      
    1485. }
      
    1486. }
    1487. void Game::drawBulletToNull()
    1488. {
    1489. for(int i=0; i<10; i++)
      
    1490.     if( bullet[i].Y != 30 )
      
    1491.         {
      
    1492.             COORD pos={bullet[i].X, bullet[i].Y+1};
      
    1493.             SetPos(pos);
      
    1494.             cout<<" ";
      
    1495.         }    
      
    1496. }
    1497. void Game::initEnemy()
    1498. {
    1499. COORD a={1, 1};
      
    1500. COORD b={45, 15};
      
    1501. for(int i=0; i<8; i++)
      
    1502. {
      
    1503.     enemy[i].position[0] = random(a, b);
      
    1504.     enemy[i].position[1].X = enemy[i].position[0].X + 3;
      
    1505.     enemy[i].position[1].Y = enemy[i].position[0].Y + 2;
      
    1506. }
      
    1507. }
    1508. void Game::drawEnemy()
    1509. {
    1510. for(int i=0; i<8; i++)
      
    1511.     drawFrame(enemy[i].position[0], enemy[i].position[1], '-', '|');
      
    1512. }
    1513. void Game::drawEnemyToNull()
    1514. {
    1515. for(int i=0; i<8; i++)
      
    1516. {
      
    1517.     drawFrame(enemy[i].position[0], enemy[i].position[1], ' ', ' ');
      
    1518. }        
      
    1519. }
    1520. void Game::Pause()
    1521. {
    1522. SetPos(61,2);
      
    1523. cout<<"               ";
      
    1524. SetPos(61,2);
      
    1525. cout<<"暂停中...";
      
    1526. char c=_getch();
      
    1527. while(c!='p')
      
    1528.     c=_getch();
      
    1529. SetPos(61,2);
      
    1530. cout<<"         ";
      
    1531. }
    1532. void Game::planeMove(char x)
    1533. {
    1534. if(x == 'a')
      
    1535.     if(position[1].X != 1)
      
    1536.         for(int i=0; i<=9; i++)
      
    1537.             position[i].X -= 2;
      
    1538. if(x == 's')
      
    1539.     if(position[7].Y != 23)
      
    1540.         for(int i=0; i<=9; i++)
      
    1541.             position[i].Y += 1;
      
    1542. if(x == 'd')
      
    1543.     if(position[4].X != 47)
      
    1544.         for(int i=0; i<=9; i++)
      
    1545.             position[i].X += 2;
      
    1546. if(x == 'w')
      
    1547.     if(position[5].Y != 3)
      
    1548.         for(int i=0; i<=9; i++)
      
    1549.             position[i].Y -= 1;
      
    1550. }
    1551. void Game::bulletMove()
    1552. {
    1553. for(int i=0; i<10; i++)
      
    1554. {
      
    1555.     if( bullet[i].Y != 30)
      
    1556.     {
      
    1557.         bullet[i].Y -= 1;
      
    1558.         if( bullet[i].Y == 1 )
      
    1559.         {
      
    1560.             COORD pos={bullet[i].X, bullet[i].Y+1};
      
    1561.             drawThisBulletToNull( pos );
      
    1562.             bullet[i].Y=30;
      
    1563.         }
      
    1564.     }
      
    1565. }
      
    1566. }
    1567. void Game::enemyMove()
    1568. {
    1569. for(int i=0; i<8; i++)
      
    1570. {
      
    1571.     for(int j=0; j<2; j++)
      
    1572.         enemy[i].position[j].Y++;
      
    1573.     if(24 == enemy[i].position[1].Y)
      
    1574.     {
      
    1575.         COORD a={1, 1};
      
    1576.         COORD b={45, 3};
      
    1577.         enemy[i].position[0] = random(a, b);
      
    1578.         enemy[i].position[1].X = enemy[i].position[0].X + 3;
      
    1579.         enemy[i].position[1].Y = enemy[i].position[0].Y + 2;
      
    1580.     }
      
    1581. }
      
    1582. }
    1583. void Game::judgePlane()
    1584. {
    1585. for(int i = 0; i < 8; i++)
      
    1586.     for(int j=0; j<9; j++)
      
    1587.         if(judgeCoordInFrame(enemy[i], position[j]))
      
    1588.         {
      
    1589.             SetPos(62, 1);
      
    1590.             cout<<"坠毁";
      
    1591.             drawFrame(enemy[i], '+', '+');
      
    1592.             Sleep(1000);
      
    1593.             GameOver();
      
    1594.             break;
      
    1595.         }
      
    1596. }
    1597. void Game::drawThisBulletToNull( COORD c)
    1598. {
    1599. SetPos(c);
      
    1600. cout<<" ";
      
    1601. }
    1602. void Game::drawThisEnemyToNull( Frame f )
    1603. {
    1604. drawFrame(f, ' ', ' ');
      
    1605. }
    1606. void Game::judgeEnemy()
    1607. {
    1608. for(int i = 0; i < 8; i++)
      
    1609.     for(int j = 0; j < 10; j++)
      
    1610.         if( judgeCoordInFrame(enemy[i], bullet[j]) )
      
    1611.         {
      
    1612.             score += 5;
      
    1613.             drawThisEnemyToNull( enemy[i] );
      
    1614.             COORD a={1, 1};
      
    1615.             COORD b={45, 3};
      
    1616.             enemy[i].position[0] = random(a, b);
      
    1617.             enemy[i].position[1].X = enemy[i].position[0].X + 3;
      
    1618.             enemy[i].position[1].Y = enemy[i].position[0].Y + 2;                    
      
    1619.             drawThisBulletToNull( bullet[j] );
      
    1620.             bullet[j].Y = 30;
      
    1621.         }
      
    1622. }
    1623. void Game::Shoot()
    1624. {
    1625. for(int i=0; i<10; i++)
      
    1626.     if(bullet[i].Y == 30)
      
    1627.     {
      
    1628.         bullet[i].X = position[5].X;
      
    1629.         bullet[i].Y = position[5].Y-1;
      
    1630.         break;
      
    1631.     }
      
    1632. }
    1633. void Game::printScore()
    1634. {
    1635. if(score == 120 && flag_rank == 0)
      
    1636. {
      
    1637.     rank -= 3;
      
    1638.     flag_rank = 1;
      
    1639. }
      
    1640. else if( score == 360 && flag_rank == 1)
      
    1641. {
      
    1642.     rank -= 5;
      
    1643.     flag_rank = 2;
      
    1644. }
      
    1645. else if( score == 480 && flag_rank == 2)
      
    1646. {
      
    1647.     rank -= 5;
      
    1648.     flag_rank = 3;
      
    1649. }
      
    1650. int x=rank/5;
      
    1651. SetPos(60, 6);
      
    1652. cout<<score;
      
    1653. if( rank!=rankf )
      
    1654. {
      
    1655.     SetPos(60, 7);
      
    1656.     if( x == 5)
      
    1657.         title="初级飞行员";
      
    1658.     else if( x == 4)
      
    1659.         title="中级飞行员";
      
    1660.     else if( x == 3)
      
    1661.         title="高级飞行员";
      
    1662.     else if( x == 2 )
      
    1663.         title="王牌飞行员";
      
    1664.     cout<<title;
      
    1665. }
      
    1666. rankf = rank;
      
    1667. }
    1668. void Game::Playing()
    1669. {
    1670. drawEnemy();
      
    1671. drawPlane();
      
    1672. int flag_bullet = 0;
      
    1673. int flag_enemy = 0;
      
    1674. while(1)
      
    1675. {
      
    1676.     Sleep(8);
      
    1677.     if(_kbhit())
      
    1678.     {
      
    1679.         char x = _getch();
      
    1680.         if ('a' == x || 's' == x || 'd' == x || 'w' == x)
      
    1681.         {
      
    1682.             drawPlaneToNull();
      
    1683.             planeMove(x);
      
    1684.             drawPlane();
      
    1685.             judgePlane();
      
    1686.         }            
      
    1687.         else if ('p' == x)
      
    1688.             Pause();
      
    1689.         else if( 'k' == x)
      
    1690.             Shoot();
      
    1691.         else if( 'e' == x)
      
    1692.         {
      
    1693.             GameOver();
      
    1694.             break;
      
    1695.         }
      
    1696.     }
      
    1697.     if( 0 == flag_bullet )
      
    1698.     {
      
    1699.         bulletMove();
      
    1700.         drawBulletToNull();
      
    1701.         drawBullet();
      
    1702.         judgeEnemy();
      
    1703.     }            
      
    1704.     flag_bullet++;
      
    1705.     if( 5 == flag_bullet )
      
    1706.         flag_bullet = 0;
      
    1707.     if( 0 == flag_enemy )
      
    1708.     {
      
    1709.         drawEnemyToNull();
      
    1710.         enemyMove();            
      
    1711.         drawEnemy();
      
    1712.         judgePlane();
      
    1713.     }
      
    1714.     flag_enemy++;
      
    1715.     if( flag_enemy >= rank )
      
    1716.         flag_enemy = 0;
      
    1717.     printScore();
      
    1718. }
      
    1719. }
    1720. void Game::GameOver()
    1721. {
    1722. system("cls");                
      
    1723. COORD p1={28,9};
      
    1724. COORD p2={53,15};
      
    1725. drawFrame(p1, p2, '=', '|');
      
    1726. SetPos(36,12);
      
    1727. string str="Game Over!";
      
    1728. for(int i=0; i<str.size(); i++)
      
    1729. {
      
    1730.     Sleep(80);
      
    1731.     cout<<str[i];
      
    1732. }
      
    1733. Sleep(1000);
      
    1734. system("cls");
      
    1735. drawFrame(p1, p2, '=', '|');
      
    1736. SetPos(31, 11);
      
    1737. cout<<"击落敌机:"<<score/5<<" 架";
      
    1738. SetPos(31, 12);
      
    1739. cout<<"得  分:"<<score;
      
    1740. SetPos(31, 13);
      
    1741. cout<<"获得称号:"<<title;
      
    1742. SetPos(30, 16);
      
    1743. Sleep(1000);
      
    1744. cout<<"继续? 是(y)| 否(n)制作:熊猫熊猫";
      
    1745. as:
    1746. char x=_getch();
      
    1747. if (x == 'n')
      
    1748.     exit(0);
      
    1749. else if (x == 'y')
      
    1750. {
      
    1751.     system("cls");
      
    1752.     Game game;
      
    1753.     int a = drawMenu();
      
    1754.     if(a == 2)
      
    1755.         game.rank = 20;
      
    1756.     system("cls");
      
    1757.     drawPlaying();
      
    1758.     game.Playing();
      
    1759. }
      
    1760. else goto as;
      
    1761. }
    1762. int main()
    1763. {
    1764. srand((int)time(0));
      
    1765. HideCursor();
      
    1766. Game game;
      
    1767. int a = drawMenu();
      
    1768. if(a == 2)
      
    1769.     game.rank = 20;
      
    1770. system("cls");
      
    1771. drawPlaying();
      
    1772. game.Playing();
      
    1773. }
    1774. 木兰诗 唧唧复唧唧,木兰开飞机, 开的什么机?波音747! 问女何所思,问女何所忆。女亦有所思,没钱买飞机。 昨夜见军帖,要用轰炸机,飞机十二架,架架买不起。 阿爷无大钱,木兰无金银,愿去买钢铁,从此造飞机。 东市买图纸,西市买螺丝,南市买玻璃,北市买铁皮。 旦辞爷娘去,暮宿旧机库,不闻爹娘唤女声,但闻铁皮摩擦滋啦声。 旦辞机库去,暮至军营旁,不闻爹娘唤女声,但闻将军大呼哈哈哈。 万里开飞机,关山一下没。热气传机翼,日光照玻璃。 将军被吓死,壮士魂已飞。飞来撞天子,天子躺病床. 策勋十二转,赏赐俩耳光。可汗问所欲,木兰不愿进牢房;愿开747,飞着回故乡。 爹娘闻女来,端起机关枪;阿姊闻妹来,当户举手枪;小弟闻姊来,磨刀霍霍向爹娘。 开我机舱门,进我飞机舱,脱我战时袍,换上飞行装, 多装手榴弹,对外架机枪。 出门埋炸弹,亲友皆惊忙:离别十二年,不知木兰变猖狂。 疯子脚蹬地,呆子眼紧闭,两人并排走,谁能说我不正常?
    1775. 语文老师一回头, 鲁迅甘为孺子牛;
    1776. 数学老师一回头, 六元六次都能求;
    1777. 英语老师一回头, Sorry加上三克油;
    1778. 物理老师一回头, 一根杠杆撬地球;
    1779. 化学老师一回头, 二氧化碳变汽油;
    1780. 劳动老师一回头, 破铜烂铁来走秀;
    1781. 体育老师一回头, 黛玉也能踢足球;
    1782. 政治老师一回头, 全班同学都梦游;
    1783. 美术老师一回头, 蒙娜丽莎也风流;
    1784. 音乐老师一回头, 贝多芬呀也不牛;
    1785. 信息老师一回头, 带着学生玩网游。
  • 通过的题目

  • 最近活动

  • 最近编写的题解

    This person is lazy and didn't write any solutions.

题目标签

模拟
6
计算几何
5
字符串
3
语言入门
2
素数判断
1
质数
1
筛法
1
数学
1
排序
1
数组
1
高精度
1
图论
1
分支结构
1