打飞机小游戏(升级版,有加分战败等操作)

基本实现飞机游戏

#include<stdio.h>
#include<windows.h> 
#include<stdlib.h>
#include<conio.h>
//定义全局变量
int position_x,position_y;		//飞机的位置
int high,width;					//游戏的画面尺寸
int bullet_x,bullet_y;			//子弹的位置 
int enemy_x,enemy_y;			//敌机位置 
int score;						//游戏得分 

void gotoxy(int x,int y)  		//光标移动到(x,y)位置
{
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos;
    pos.X = x;
    pos.Y = y;
    SetConsoleCursorPosition(handle,pos);
}

void HideCursor() 				// 用于隐藏光标
{
	CONSOLE_CURSOR_INFO cursor_info = {1, 0};  // 第二个值为0表示隐藏光标
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}

void startup()		//数据初始化
{
	high=18;
	width=30;
	
	position_x=high/2;
	position_y=width/2;
	
	bullet_y=position_y;
	bullet_x=-1; 
	
	enemy_x=0;
	enemy_y=width/2;
	
	score=0; 
	//Sleep (200);	//休眠,减速 ,but 全慢了 
	HideCursor();   //隐藏光标 
}

void show()			//显示画面
{
	//system("cls");				//清屏 
	gotoxy(0,0);	//光标移动到原点位置,相当于清屏 
	int i,j;
	for(i=0;i<high;i++){
		for(j=0;j<width;j++){
			if(i==position_x && j==position_y){
				printf("*");	//输出飞机* 
			}
			else if(i==bullet_x && j==bullet_y){
				printf("|");	//输出子弹 | 
			}
			else if(i==enemy_x && j==enemy_y){
				printf("@");	//输出敌机 @ 
			}
			else{
				printf(" ");	//输出空格 
			}
		}
		printf("\n");
	}
	printf("得分:%d\n",score);
	
}
void updataWithoutInput()		//与用户输入无关的更新 
{
	if(bullet_x==enemy_x && bullet_y==enemy_y){
		score++;
		enemy_x=0;
		enemy_y=rand() % width;
		bullet_x=-1;
	}
	
	if(bullet_x > -1)			//子弹打出来就上移 
		bullet_x --;
	static int speed=0;			//控制飞机下落速度 
	if(speed<10){
		speed++;
	}
	if(speed==10){
		if(enemy_x > high) {
			enemy_x=0;
			enemy_y=rand() % width;	//敌机位置随机出现 
		}
		else{
			enemy_x++; 				//敌机往下落
			speed=0;				//清零重来 
		}		
	}

}
void updateWithInput()		    //与用户输入有关的更新
{
	char input;
	if(kbhit()) {				//按键时执行 
		input=getch() ;
		if(input=='a')
			position_y--;
		if(input=='d')
			position_y++;
		if(input=='w')
			position_x--;
		if(input=='s')
			position_x++;
		if(input==' '){			//输入空格 发射子弹 
			bullet_x=position_x - 1;
			bullet_y=position_y;
		}
	}
}
int main()
{
	startup();		//数据初始化
	
	while(1){		//游戏循环执行 
		
		show();		//显示画面
		updataWithoutInput();		//与用户输入无关的更新 
		updateWithInput();			//与用户输入有关的更新
		
	} 
	return 0;
}

实现了通关结束

#include<stdio.h>
#include<windows.h> 
#include<stdlib.h>
#include<conio.h>
//定义全局变量
int position_x,position_y;		//飞机的位置
int high,width;					//游戏的画面尺寸
int bullet_x,bullet_y;			//子弹的位置 
int enemy_x,enemy_y;			//敌机位置 
int score;						//游戏得分 

void gotoxy(int x,int y)  		//光标移动到(x,y)位置
{
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos;
    pos.X = x;
    pos.Y = y;
    SetConsoleCursorPosition(handle,pos);
}

void HideCursor() 				// 用于隐藏光标
{
	CONSOLE_CURSOR_INFO cursor_info = {1, 0};  // 第二个值为0表示隐藏光标
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}

void startup()		//数据初始化
{
	high=18;
	width=30;
	
	position_x=high/2;
	position_y=width/2;
	
	bullet_y=position_y;
	bullet_x=-1; 
	
	enemy_x=0;
	enemy_y=width/2;
	
	score=0; 
	//Sleep (200);	//休眠,减速 ,but 全慢了 
	HideCursor();   //隐藏光标 
}

void show()			//显示画面
{
	//system("cls");				//清屏 
	gotoxy(0,0);	//光标移动到原点位置,相当于清屏 
	int i,j;
	for(i=0;i<high;i++){
		for(j=0;j<width;j++){
			if(i==position_x && j==position_y){
				printf("*");	//输出飞机* 
				if(i==position_x || j==position_y)
					printf("\a");
			}
			else if(i==bullet_x && j==bullet_y){
				printf("|");	//输出子弹 | 
			}
			else if(i==enemy_x && j==enemy_y){
				printf("@");	//输出敌机 @ 
			}
			else{
				printf(" ");	//输出空格 
			}	
		}
		printf("\n");
	}
	printf("得分:%d\n",score);

	
}
void updataWithoutInput()		//与用户输入无关的更新 
{
	if(bullet_x==enemy_x && bullet_y==enemy_y){
		score++;
		enemy_x=0;
		enemy_y=rand() % width;
		bullet_x=-1;
	}
	 
	if(bullet_x > -1)			//子弹打出来就上移 
		bullet_x --;
	static int speed=0;			//控制飞机下落速度 
	if(speed<10){
		speed++;
	}
	if(speed==10){
		if(enemy_x > high) {
			enemy_x=0;
			enemy_y=rand() % width;	//敌机位置随机出现 
		}
		else{
			enemy_x++; 				//敌机往下落
			speed=0;				//清零重来 
		}		
	}

}
void updateWithInput()		    //与用户输入有关的更新
{
	char input;
	if(kbhit()) {				//按键时执行 
		input=getch() ;
		if(input=='a')
			position_y--;
		if(input=='d')
			position_y++;
		if(input=='w')
			position_x--;
		if(input=='s')
			position_x++;
		if(input==' '){			//输入空格 发射子弹 
			bullet_x=position_x - 1;
			bullet_y=position_y;
		}
	
	}
}
int main()
{
	startup();		//数据初始化
	
	while(1){		//游戏循环执行 
		
		show();		//显示画面
		if(score==5){
			printf("恭喜你已通关!\n");
			break;
		}
		updataWithoutInput();		//与用户输入无关的更新 
		updateWithInput();			//与用户输入有关的更新
		
	} 
	return 0;
}

实现了随分数增多,敌机加速,以及暂停的功能

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
 
//全局变量
int position_x,position_y;       //飞机的位置 
int bullet_x,bullet_y;     		 //子弹的位置
int enemy_x,enemy_y;       		 //敌机的位置
int high,width;            		 //游戏画面尺寸
int score;        				 //得分
  
  
void startup()             		//数据的初始化
{
    high=20;
    width=30;
    position_x=high/2;
    position_y=width/2;
    bullet_x=-1;
    bullet_y=position_y;
    enemy_x=0;
    enemy_y=position_y;
    score=0;
} 
 
 
//清屏 
void gotoxy(int x,int y)     //将光标移到(x,y)位置 
{
    HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos;
    pos.X=x;
    pos.Y=y;
    SetConsoleCursorPosition(handle,pos);
}
  
 
void show()              //显示画面
{
    gotoxy(0,0);        //光标移动到原点位置,== 清屏 
    int i,j;
    for(i=0;i<high;i++)
    {
        for(j=0;j<width;j++)
        {
            if((i==position_x)&&(j==position_y))
                printf("*");                        //输出飞机
            else if((i==position_x + 1)&&(j==position_y-2))
                printf(" * *");                  
             else if((i==position_x+2)&&(j==position_y-2))
                printf("* * *");
            else if((i==enemy_x)&&(j==enemy_y))
                printf("@");                        //输出敌机@ 
            else if((i==bullet_x)&&(j==bullet_y))
                printf("|");                        //输出子弹|
            else
                printf(" ");                       //输出空格 
        }
        printf("\n");
    }
    printf("得分:%d\n",score);
} 
 
 
void updateWithoutInput()      //与用户输入无关的更新 
{
    if(bullet_x>-1)
        bullet_x--;
    if((bullet_x==enemy_x)&&(bullet_y==enemy_y))            //子弹击中敌机 
    {
        score++;                //分数加1
        enemy_x=-1;             //产生新的敌机
        enemy_y=rand()%width;   //随机产生
        bullet_x=-2;            //子弹无效 
    }
    if(enemy_x>high)             //敌机跑出显示屏幕
    {
        enemy_x=0-1;                //产生新的敌机 
        enemy_y=rand()%width;   //随机产生 
	} 
    static int speed=0;
    if(speed<20)
        speed++;
    if(speed==20)
    {
        enemy_x++;
        speed=0;
    }
    if(score>5)              		//如果得分超过5时,敌机加速 
    {
        if(speed<10)
        speed++;
    if(speed==10)
    {
        enemy_x++;
        speed=0;
    }
    }
    if(score>10)             		//如果得分超过10时,敌机再一次加速 
    {
        if(speed<5)
            speed++;
        if(speed==5)
        {
            enemy_x++;
            speed=0;
        }
    }
} 
 
void updateWithInput()        			 //与用户输入有关的更新 
{
    char input;
    if(kbhit())             			//判断是否有输入
    {
        input=getch();      			//根据用户的不同输入来移动,不必输入回车
        if(input=='a')
        {
            if(position_y-2>0)  		//防止玩家飞出左边界 
                position_y--;  
        }           
        if(input=='d')
        {
            if(position_y+2<30)  		//防止玩家飞出右边界 
                position_y++;  
        }
        if(input=='w')
        {
            if(position_x>0) 			//防止玩家飞出上边界 
                position_x--; 
        }
        if(input=='s')
        {
            if(position_x+3<20)  		//防止玩家飞出下边界 
                position_x++;  
        }
        if(input==' ')
        {
            bullet_x=position_x-1;   
            bullet_y=position_y;
        }
        if(input=='v')                 	//按v游戏暂停,按任意键游戏继续 
            system("pause");
    } 
}
 
void HideCursor()
{
    CONSOLE_CURSOR_INFO cursor_info={1,0};
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}
 
 
int main()
{
    HideCursor();           		//隐藏光标 
    startup();              		//数据的初始化 
    while(1)
    {
        show();         			//显示画面
        updateWithoutInput();       //与用户输入无关的更新 
        updateWithInput();      	//与用户输入有关的更新 
    } 
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值