飞翔的小鸟 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版》时,本萌新本来想用双缓冲解决闪烁问题,但无奈自己看不懂,毕竟我还是一个编程年龄半年的初一学生……好尴尬 (麻烦大佬在评论区指点一下,谢谢)
废话不多说了,开始进入正文!
首先解决的是右移问题:
解决前:
解决后:
解决方法:
可以在输出柱子时判断柱子是不是在小鸟的左上方或左下方(不包括小鸟所在的行和列),如果是,先输出一个空格,再输出柱子;如果不是,输出柱子
if(i==xn_x && j>xn_y){
printf("▓");
}
else printf(" ▓");
接下来解决暂停问题:
解决方法:
按5键,进入死循环,按5键,退出死循环
input=getch();
if(input=='5') while(getch()!='5'){};//暂停继续
解决美观问题:
一开始的页面:
解决前:
没有居中,没有颜色!是不?
解决后:
是不是漂亮多了?
解决方法:
(在这里推荐两个颜色指令: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");
游戏页面:
解决前:
解决后:
解决方法:
“当前得分”居中,加入颜色,加入分割线,改变柱子花纹
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);
}
结束页面:
解决前:
解决后:
解决方法:
改变颜色可形成巨大反差
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语言300行代码实现贪吃蛇
下一篇: java贪吃蛇小游戏代码