欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

飞翔的小鸟 c++ 2.0版

程序员文章站 2024-03-18 19:59:52
...

飞翔的小鸟 c++ 2.0版

大家好,我是小哼007

在进入正文之前,让我由衷感谢此文章的作者提供了《飞翔的小鸟》c语言版,本文章暂且称它为《飞翔的小鸟 1.0版》

大家也都知道c和c++是相通的,我学的又是c++,所以本文章使用的是c++(编辑器:Dev-c++)(若想改成c语言,请把“using namespace std”删除,再改一下头文件就可以了)

在编写《飞翔的小鸟 c++ 2.0版》时,本萌新本来想用双缓冲解决闪烁问题,但无奈自己看不懂,毕竟我还是一个编程年龄半年的初一学生……好尴尬 (麻烦大佬在评论区指点一下,谢谢)

废话不多说了,开始进入正文!

首先解决的是右移问题

解决前:

飞翔的小鸟 c++ 2.0版

解决后:

飞翔的小鸟 c++ 2.0版

解决方法:

可以在输出柱子时判断柱子是不是在小鸟的左上方或左下方(不包括小鸟所在的行和列),如果是,先输出一个空格,再输出柱子;如果不是,输出柱子

if(i==xn_x && j>xn_y){
	printf("▓");
}
else   printf(" ▓");

接下来解决暂停问题

解决方法:

按5键,进入死循环,按5键,退出死循环

input=getch();
	if(input=='5')    while(getch()!='5'){};//暂停继续  

解决美观问题:

一开始的页面:
解决前:

飞翔的小鸟 c++ 2.0版
没有居中,没有颜色!是不?

解决后:

飞翔的小鸟 c++ 2.0版
是不是漂亮多了?

解决方法:

(在这里推荐两个颜色指令:system(用于全局)和SetConsoleTextAttribute(用于局部),具体可以参考百度)

system("color 0C");
		printf("                                                         \n");
		printf("                                                         \n");
		printf("                                                         \n");
		printf("                                                         \n");
		printf("                  =======================================\n");
		printf("                  =          --->飞翔的小鸟<---         =\n");
		printf("                  =                                     =\n");
		printf("                  =           空格控制小鸟移动          =\n");
		printf("                  =             5键暂停继续             =\n");
		printf("                  =                                     =\n");
		printf("                  =                                     =\n");
		printf("                  =             闪屏纯属正常            =\n");
		printf("                  =                         ----朱 * *  =\n");
		printf("                  =======================================\n");
游戏页面:
解决前:

飞翔的小鸟 c++ 2.0版

解决后:

飞翔的小鸟 c++ 2.0版

解决方法:

“当前得分”居中,加入颜色,加入分割线,改变柱子花纹

system("color 02");
	for(i=0;i<h;i++){
		for(j=0;j<=w;j++){
			if(i==xn_x && j==xn_y){
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),14);
				printf("*");
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),2);
			}
			else 
				if(j==b3&&(i<=b1||i>=b2)){
					if(i==xn_x && j>xn_y){
						printf("▓");
					}
					else   printf(" ▓");
				}
				else printf(" ");
		}
		printf("\n");
	}
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),9);
	printf("================================================================================\n");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),11);
	printf("             ------------------>  当前得分:%d  <------------------\n\n\n",score);
}
结束页面:
解决前:

飞翔的小鸟 c++ 2.0版

解决后:

飞翔的小鸟 c++ 2.0版

解决方法:

改变颜色可形成巨大反差

system("color F0");
			SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),252);
			printf("                           ------>  the end  <------\n");

最后加入标题:

system("title 飞翔的小鸟 2.0版  ---朱 * *");

到了最激动人心的时刻了!代码如下:(坚决反对积分下载!)

#include <ctime>
#include<cstdio>
#include <string>
#include <cstdlib>
#include <conio.h>
#include <windows.h>
using namespace std;
int h,w,c=0;
int score=0;//得分
int xn_x,xn_y,b1,b2,b3;
char asd;
void data(){
	h=15;
	w=25;
	xn_x=0;
	xn_y=w/3;
	b3=w;
	b1=h/4;
	b2=h/2;
}
void page(){
	int i,j;
	char dad ;
	if(c==0){
		system("color 0C");
		printf("                                                         \n");
		printf("                                                         \n");
		printf("                                                         \n");
		printf("                                                         \n");
		printf("                  =======================================\n");
		printf("                  =          --->飞翔的小鸟<---         =\n");
		printf("                  =                                     =\n");
		printf("                  =           空格控制小鸟移动          =\n");
		printf("                  =             5键暂停继续             =\n");
		printf("                  =                                     =\n");
		printf("                  =                                     =\n");
		printf("                  =             闪屏纯属正常            =\n");
		printf("                  =                         ----朱 * *  =\n");
		printf("                  =======================================\n");
		c++;
		dad=getch();
	}
	system("cls");
	system("color 02");
	for(i=0;i<h;i++){
		for(j=0;j<=w;j++){
			if(i==xn_x && j==xn_y){
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),14);
				printf("*");
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),2);
			}
			else 
				if(j==b3&&(i<=b1||i>=b2)){
					if(i==xn_x && j>xn_y){
						printf("▓");
					}
					else   printf(" ▓");
				}
				else printf(" ");
		}
		printf("\n");
	}
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),9);
	printf("================================================================================\n");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),11);
	printf("             ------------------>  当前得分:%d  <------------------\n\n\n",score);
}
void no(){
	int randx;
		if(xn_y==b3){
		if(xn_x>b1&&xn_x<b2)
			score++;
		else{
			system("color F0");
			SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),252);
			printf("                           ------>  the end  <------\n");
			c=3;
			asd=getch();
		}
	}
	xn_x++;
	if(b3==0){
		b3=w;
		b1=rand()%(h-5);
		randx=b1;
		b2=randx+h/4+2;
	}
	else
		b3--;
	Sleep(120);
	
}
void yes(){
	char input;
	if(kbhit()){
		input=getch();
		if(input==' ')     xn_x-=3;
		if(input=='5')    while(getch()!='5'){};//暂停继续  
	}
}
int main(){
	system("title 飞翔的小鸟 2.0版  ---朱 * *");
	data();//加载数据
	while(1){
		page();//页面
		no();//与用户无关变量
		yes();//与用户有关变量
		if(c==3)break;
	}
	return 0;
}

如果有一些改进这款游戏的点子,评论区见哦!

最后送上一千古名句:

关注美三代,点赞富一生!

飞翔的小鸟 c++ 2.0版