c++飞扬的小鸟1.0正式版

正式版的飞扬的小鸟能基本完成一个游戏需要的流程,能输出分数,除了一些小瑕疵,基本上可以正常的推出了,代码如下:

#include<iostream>
#include<graphics.h>
#include<stdio.h>
#include<conio.h>
#include<time.h>
#include<stdlib.h>

#define BGIMAGE_WIDH 600     //屏幕宽度 
#define BGIMAGE_HEIGH 500    //屏幕高度 
#define piper_high 1664      //水管最大高度 
#define COINS_WIDTH 32       
#define COINS_HIGH 32

using namespace std;

void personactions();   //用户操作 
void Next();            //更新水管 
int  isbreak();          //碰撞检测
void coinsadd();        //金币增加判断
void show_coins();      //打印金币
void show_coins_T();
void show_image();      //打印图片
void loadphotos();      //加载图片
void show();            //打印综合图片
void move();            //人物移动
void gameover();        //游戏结束判断
void control_speed();   //控制速度
void show_begin_game(); 
void score_low10(int a);
void score_power10(int score);
int to_text_isbreak(int x,int y,int D_y);
int to_text_coins_isbreak(int x,int y);

IMAGE beginimage;
IMAGE beginimagebg;

IMAGE bgimage;          //背景 
IMAGE bgimage_T;         
IMAGE bgimage_S;
IMAGE birdsimage;       //鸟 
IMAGE F_birdsimage;     //反补鸟 
IMAGE pipersimage;      //上水管 
IMAGE D_pipersimage;    //下水管 
IMAGE D_pipersimagebg;
IMAGE gameoverimage;    //游戏结束图片
IMAGE gameoverimagebg;
IMAGE coins_allbg;      //金币背景
IMAGE coins_all;        //金币

IMAGE numimage0,numimage1,numimage2,numimage3,numimage4,numimage5,numimage6,numimage7,numimage8,numimage9;

RECT getscore={100,200,200,300};//矩形坐标

int bird_x=100,bird_y=300;

int piper_x=250,piper_y=-1400,D_piper_y=400;
int piper_x_T=550,piper_y_T=-1500,D_piper_y_T=450;

int coins_x=piper_x,coins_y=300;
int coins_x_T=piper_x_T,coins_y_T=200;

int next_x=1,next_y=1;
int speed_of_screan=50;
int choose=1,choose_T=1,real=0,real_T=0;
int point=0;

int main(void)
{
	int situation,flag=0;
	show();
 
	while (1)
	{
		//人物移动
		move();

		//打印综合图片
		show_image();

		//多项操作 
		personactions();
		Next();
		situation=isbreak();
		coinsadd();

		//碰撞结果的判定
		switch (situation)
		{
		case 0:
			gameover();
			flag=1;
			break;
		case 1:
		    choose=0;
			break;
		case 2:
		    choose_T=0;
		default:
			break;
		}
		if(flag){
			while(1){
		if(kbhit()){
		if(GetAsyncKeyState(VK_SPACE)){
			bird_x=100,bird_y=300;
			 piper_x=250,piper_y=-1400,D_piper_y=400;
 			piper_x_T=550,piper_y_T=-1500,D_piper_y_T=450;

 			coins_x=piper_x,coins_y=300;
			coins_x_T=piper_x_T,coins_y_T=200;

			next_x=1,next_y=1;
			speed_of_screan=50;
 			choose=1,choose_T=1,real=0,real_T=0;
 			point=0;
			flag=0;
			break;
		}
		}
	}
		}
		control_speed();
	}
	closegraph();
	return 0;
}

//用户操作 
void personactions(){
	if(kbhit()){
		if(GetAsyncKeyState(VK_SPACE)||GetAsyncKeyState(VK_LBUTTON)){
			bird_y-=10;
		}
	}
}

//更新水管 和金币
void Next(){
	if(piper_x<0){
		piper_x=BGIMAGE_WIDH;
		coins_x=piper_x;
		piper_y=rand()%piper_high;
		piper_y=-piper_y;
		D_piper_y=rand()%450;
		coins_y=rand()%500;

		while(piper_y>-(piper_high-BGIMAGE_HEIGH+30)||D_piper_y<(piper_high+piper_y+50)){
			piper_y=rand()%piper_high;
			piper_y=-piper_y;
			D_piper_y=rand()%450;
		}

	}
	if(piper_x_T<0){
		piper_x_T=BGIMAGE_WIDH;
		coins_x_T=piper_x_T;
		piper_y_T=rand()%piper_high;
		piper_y_T=-piper_y_T;
		D_piper_y_T=rand()%450;
		coins_y_T=rand()%500;

		while(piper_y_T>-(piper_high-BGIMAGE_HEIGH+30)||D_piper_y_T<(piper_high+piper_y_T+50)){
			piper_y_T=rand()%piper_high;
			piper_y_T=-piper_y_T;
			D_piper_y_T=rand()%450;
		}
	}
	while(coins_y<=(piper_high+piper_y)||coins_y+24>=D_piper_y)
	coins_y=rand()%500;

	while(coins_y_T<=(piper_high+piper_y_T)||coins_y_T+24>=D_piper_y_T)
	coins_y_T=rand()%500;
	
}

//碰撞检测
int isbreak(){
	if (to_text_isbreak(piper_x ,piper_y,D_piper_y))
		return 0;

	if(to_text_isbreak(piper_x_T, piper_y_T, D_piper_y_T))
		return 0;

	if(to_text_coins_isbreak(coins_x,coins_y)==1){
		real=1;
		return 1;
	}
	if(to_text_coins_isbreak(coins_x_T,coins_y_T)==1){
		real_T=1;
		return 2;
	}
}
//判断增加金币
void coinsadd(){
	if(real&&(bird_x==coins_x+30)){
		point++;
		cout<<point<<endl;
		real=0;
	}
	if(real_T&&(bird_x==coins_x_T+30)){
		point++;
		cout<<point<<endl;
		real_T=0;
	}
	if(bird_x>coins_x+30)
		real=0;
	if(bird_x>coins_x_T+30)
		real_T=0;
}

//显示金币
void show_coins(){
	static int i=1;
	putimage(coins_x,coins_y,COINS_WIDTH,32,&coins_allbg,0,(i-1)*COINS_WIDTH,NOTSRCERASE);
	putimage(coins_x,coins_y,COINS_WIDTH,32,&coins_all,0,(i-1)*COINS_WIDTH,SRCINVERT);
	
	i++;
	if(i>=9)
		i=1;
}

void show_coins_T(){
	static int j=1;
	putimage(coins_x_T,coins_y_T,COINS_WIDTH,32,&coins_allbg,0,(j-1)*COINS_WIDTH,NOTSRCERASE);
	putimage(coins_x_T,coins_y_T,COINS_WIDTH,32,&coins_all,0,(j-1)*COINS_WIDTH,SRCINVERT);

	j++;
	if(j>=9)
		j=1;
}
//打印图片
void show_image(){
	//开始绘制 
	BeginBatchDraw();
	//绘制背景
	
	if(point<10)
	putimage(0,-300,&bgimage);

    if(point>=10)
	putimage(0,-300,&bgimage_T);
	
	if(point>=35)
	putimage(0,0,&bgimage_S);
	
		
	//绘制水管
	putimage(piper_x,piper_y,&pipersimage);
	putimage(piper_x,D_piper_y,&D_pipersimage);	

	putimage(piper_x_T,piper_y_T,&pipersimage);	
	putimage(piper_x_T,D_piper_y_T,&D_pipersimage);

	//绘制鸟
	putimage(bird_x,bird_y,&F_birdsimage,NOTSRCERASE);
	putimage(bird_x,bird_y,&birdsimage,SRCINVERT); 
	
	//判断并绘制金币
	if(piper_x<0)
		choose=1;
	if(choose&&piper_x>=0)
	show_coins();

	if(piper_x_T<0)
		choose_T=1;
	if(choose_T&&piper_x_T>=0)
	show_coins_T();
	if(point==0) putimage(576,0,&numimage0);
	else if(point<10){
		score_low10(point);
	}
	else if(point>=10&&point<=99){
		score_power10(point);
	}
	EndBatchDraw();
		
	//减速屏幕 
	Sleep(speed_of_screan);
		
}
//加载图片
void loadphotos(){

	loadimage(&beginimage,"D:\\TeqGin\\development\\code\\c c++\\program\\飞扬的小鸟\\素材\\image\\文字\\game.png",313,72);
	loadimage(&beginimagebg,"D:\\TeqGin\\development\\code\\c c++\\program\\飞扬的小鸟\\素材\\image\\文字\\game-1.png",313,72);
	//背景图片
	loadimage(&bgimage,"D:\\TeqGin\\development\\code\\c c++\\program\\飞扬的小鸟\\素材\\image\\背景\\1.png",BGIMAGE_WIDH,800); 
	loadimage(&bgimage_T,"D:\\TeqGin\\development\\code\\c c++\\program\\飞扬的小鸟\\素材\\image\\背景\\2.png");
	loadimage(&bgimage_S,"D:\\TeqGin\\development\\code\\c c++\\program\\飞扬的小鸟\\素材\\image\\背景\\11.png",600,500);
	//鸟
	loadimage(&birdsimage,"D:\\TeqGin\\development\\code\\c c++\\program\\飞扬的小鸟\\素材\\image\\鸟\\1.png",42,30);            
	loadimage(&F_birdsimage,"D:\\TeqGin\\development\\code\\c c++\\program\\飞扬的小鸟\\素材\\image\\鸟\\1-2.png",42,30);
	//水管
	loadimage(&pipersimage,"D:\\TeqGin\\development\\code\\c c++\\program\\飞扬的小鸟\\素材\\image\\水管\\1.png",30);
	loadimage(&D_pipersimage,"D:\\TeqGin\\development\\code\\c c++\\program\\飞扬的小鸟\\素材\\image\\水管\\2.png",30);
	//金币
	loadimage(&coins_allbg,"D:\\TeqGin\\development\\code\\c c++\\program\\飞扬的小鸟\\素材\\image\\金币\\9-1.png",32,288);
	loadimage(&coins_all,"D:\\TeqGin\\development\\code\\c c++\\program\\飞扬的小鸟\\素材\\image\\金币\\9.png",32,288);


	//游戏结束图片
	loadimage(&gameoverimage,"D:\\TeqGin\\development\\code\\c c++\\program\\飞扬的小鸟\\素材\\image\\文字\\gameover.png",313,72);
	loadimage(&gameoverimagebg,"D:\\TeqGin\\development\\code\\c c++\\program\\飞扬的小鸟\\素材\\image\\文字\\gameover-1.png",313,72);

	loadimage(&numimage0,"D:\\TeqGin\\development\\code\\c c++\\program\\飞扬的小鸟\\素材\\image\\文字\\num0.png");
	loadimage(&numimage1,"D:\\TeqGin\\development\\code\\c c++\\program\\飞扬的小鸟\\素材\\image\\文字\\num1.png");
	loadimage(&numimage2,"D:\\TeqGin\\development\\code\\c c++\\program\\飞扬的小鸟\\素材\\image\\文字\\num2.png");
	loadimage(&numimage3,"D:\\TeqGin\\development\\code\\c c++\\program\\飞扬的小鸟\\素材\\image\\文字\\num3.png");
	loadimage(&numimage4,"D:\\TeqGin\\development\\code\\c c++\\program\\飞扬的小鸟\\素材\\image\\文字\\num4.png");
	loadimage(&numimage5,"D:\\TeqGin\\development\\code\\c c++\\program\\飞扬的小鸟\\素材\\image\\文字\\num5.png");
	loadimage(&numimage6,"D:\\TeqGin\\development\\code\\c c++\\program\\飞扬的小鸟\\素材\\image\\文字\\num6.png");
	loadimage(&numimage7,"D:\\TeqGin\\development\\code\\c c++\\program\\飞扬的小鸟\\素材\\image\\文字\\num7.png");
	loadimage(&numimage8,"D:\\TeqGin\\development\\code\\c c++\\program\\飞扬的小鸟\\素材\\image\\文字\\num8.png");
	loadimage(&numimage9,"D:\\TeqGin\\development\\code\\c c++\\program\\飞扬的小鸟\\素材\\image\\文字\\num9.png");
}
//综合打印
void show(){
	//绘制屏幕 
	initgraph(BGIMAGE_WIDH,BGIMAGE_HEIGH);

	//显示背景 、鸟、上下水管 
	loadphotos();

	//游戏开始界面
	show_begin_game();

	//打印图片和水管和鸟 
	show_image();
	
	// 更改种子 
	srand(time(NULL));
	
}
//人物移动
void move(){
	bird_y+=5;

	piper_x-=5;
	piper_x_T-=5;

	coins_x=piper_x;
	coins_x_T=piper_x_T;
}
//游戏结束操作
void gameover(){
	const int gameover_x=100;
	const int gameover_y=150;

//	putimage(gameover_x,gameover_y,&gameoverimagebg,NOTSRCERASE);
	putimage(gameover_x,gameover_y,&gameoverimage/*,SRCINVERT*/);
	Sleep(1000);
}
//速度控制
void control_speed(){
	if(point>=10)
		speed_of_screan=30;

	if(point>=35)
		speed_of_screan=10;

	if(point>=60)
		speed_of_screan=5;
}
//传入水管的x坐标和上水管的y坐标,下水管的y坐标进行碰撞检测
int to_text_isbreak(int x,int y,int D_y){
	if((bird_x+30==x)&&(bird_y+10 <(piper_high+y)||bird_y+20>=D_y)
		||bird_y+35<0
		||bird_y>BGIMAGE_HEIGH
		||((bird_x==x)&&(bird_y+10<(piper_high+y)))
		||((bird_x>x&&bird_x<x+28)&&(bird_y+22>D_y))){
		cout<<bird_y<<" "<<y+1664<<" "<<bird_y-(1664+y)<<endl;
		return 1;
	}
	else 
		return 0;
}

int to_text_coins_isbreak(int x,int y){
	if((bird_x>=x && bird_x<=x+24 && bird_y>=y && bird_y<=y+24) 
		||(bird_x+42>=x &&bird_x+42<=x+24 && bird_y>=y && bird_y<=y+24)
		||(bird_x+42>=x &&bird_x+42<=x+24 && bird_y+30>=y && bird_y+30<=y+24)
		||(bird_x>=x && bird_x<=x+24 && bird_y+30>=y && bird_y+30<=y+24)){
		return 1;
	} 
}
//游戏开始界面
void show_begin_game(){
	const int game_begin_x=125;
	const int game_begin_y=200;
	while(1){
	BeginBatchDraw();

	putimage(0,-300,&bgimage);
	putimage(game_begin_x,game_begin_y,&beginimagebg,NOTSRCERASE);
	putimage(game_begin_x,game_begin_y,&beginimage,SRCINVERT);
	
	EndBatchDraw();
	if(kbhit())
	if(GetAsyncKeyState(VK_SPACE))
		break;	
	}
}

void score_low10(int a){
	switch (a)
		{
		case 1:
			putimage(576,0,&numimage1);
			break;
		case 2:
		    putimage(576,0,&numimage2);
			break;
		case 3:
		    putimage(576,0,&numimage3);
			break;
		case 4:
		    putimage(576,0,&numimage4);
			break;
		case 5:
		    putimage(576,0,&numimage5);
			break;
		case 6:
		    putimage(576,0,&numimage6);
			break;
		case 7:
		    putimage(576,0,&numimage7);
			break;
		case 8:
		    putimage(576,0,&numimage8);
			break;
		case 9:
		    putimage(576,0,&numimage9);
			break;
		}
}

void score_power10(int score){
	int a=score%10;
	int b=score/10;
	if(a==0) putimage(576,0,&numimage0);
	else score_low10(a);
	switch (b)
		{
		case 1:
			putimage(550,0,&numimage1);
			break;
		case 2:
		    putimage(550,0,&numimage2);
			break;
		case 3:
		    putimage(550,0,&numimage3);
			break;
		case 4:
		    putimage(550,0,&numimage4);
			break;
		case 5:
		    putimage(550,0,&numimage5);
			break;
		case 6:
		    putimage(550,0,&numimage6);
			break;
		case 7:
		    putimage(550,0,&numimage7);
			break;
		case 8:
		    putimage(550,0,&numimage8);
			break;
		case 9:
		    putimage(550,0,&numimage9);
			break;
		}
}  
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值