C++实现彩色飞机大战

本文实例为大家分享了C++实现彩色飞机大战的具体代码,供大家参考,具体内容如下

1.基本的能够实现键盘按上下左右进行控制飞机,击杀敌人飞机,记录得分,(缺点:死亡后不能从新玩,需要重新启动程序,),缺点将在2中解决

/*隐藏光标的代码
#include <stdio.h>
#include <windows.h>
int main()
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO CursorInfo;
GetConsoleCursorInfo(handle, &CursorInfo);//获取控制台光标信息
CursorInfo.bVisible = false; //隐藏控制台光标
SetConsoleCursorInfo(handle, &CursorInfo);//设置控制台光标状态

getchar();
}*/
/*
 明白两个事实,
 敌人飞机和自己的飞机的横坐标和纵坐标相同时 表示死亡
 敌人飞机和自己的子弹碰撞即 子弹坐标和自己子弹的坐标相同时,飞机死亡并且加分,
*/

#include "stdio.h"
#include <windows.h>
#include <conio.h>
#include <time.h>
#define Esc 27 //退出
#define Up 72 //上,下,左,右
#define Down 80
#define Left 75
#define Right 77
#define Kong 32 //发射子弹

int x = 10; //飞机坐标
int y = 18;

int d2 = 10;//敌机坐标
int d1 = 10;
int d = 10;//d 和r 用来进行碰撞检测
int r = 1;
int r1 = 1;
int r2 = 1;

int t = 1; // 游戏结束
int f = 0; // 计分数
int m = 5; // 敌机数
int j = 0; // 歼敌数
char p; // 接受按键

void kongzhi(int bx, int by);//声明函数
void huatu();

void gotoxy(int x, int y) //移动坐标
{
 COORD coord;
 coord.X = x;
 coord.Y = y;
 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),3);

}
void gotoxy_red(int x, int y) //移动坐标
{
 COORD coord;
 coord.X = x;
 coord.Y = y;
 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),4);

}
void gotoxy_blue(int x, int y) //移动坐标
{
 COORD coord;
 coord.X = x;
 coord.Y = y;
 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),1);

}
void gotoxy_green(int x, int y) //移动坐标
{
 COORD coord;
 coord.X = x;
 coord.Y = y;
 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),2);

}
void hidden()//隐藏光标,不让光标显示
{
 HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
 CONSOLE_CURSOR_INFO cci;
 GetConsoleCursorInfo(hOut, &cci);
 cci.bVisible = 0;//赋1为显示,赋0为隐藏
 SetConsoleCursorInfo(hOut, &cci);
}
//**************************************************************************************

//说明
void shuoming()
{
 printf("\t\t\t\n\n\n\n");
 gotoxy_blue(0, 0);
 printf("\t\t\t\t\t\t\tPlane Control\n\n"
 "\t\t\t\t\t\t\t\tUP\n\n"
 "\t\t\t\t\t\t\tDown\n\n"
 "\t\t\t\t\t\t\tLeft \n\n"
 "\t\t\t\t\t\t\tRight \n\n"
 "\t\t\t\t\t\t\t bullet space\n\n\n"
 "\t\t\t\t\t\t\tQuit Esc\n");

 gotoxy_red(0, 0);
}

//****************************************************************************************

//判断我机死没死/游戏结束
void byebye()
{
 if (((x == d && y == r) || (x == d1 && y == r1) || (x == d2 && y == r2))||( (d>=19||r>=19)||(d1>=19||r1>=19)||(d1>=19||r1>=19) ))
 {
 gotoxy(1, 3);
 printf(" !!! 游戏结束 !!!\n"
 "*******************\n"
 " 您的总得分: %d\n\n"
 " 敌机数: %d\n"
 " 歼敌数: %d\n"
 " 命中率: %.0f %%\n"
 "*******************\n", f, m, j, ((float)j / (float)m) * 100);
 while (!_kbhit())
 {
 Sleep(500);
 gotoxy(1, 12);
 printf(" 继续请按任意键...\n\n\n");
 Sleep(900);
 gotoxy(1, 12);
 printf(" ");
 }
 gotoxy_red(0, 0);
 huatu();
 f = 0; m = 0; j = 0;
 if (x >= 18) x--;
 else x++;
 gotoxy(x, y);
 printf("A");
 }
}
// 计分/更新敌机
void jifan()
{ //x,y是子弹的坐标
 if (x == d && y == r) // d=10, r=1, d,d1,d2 是敌机的x轴, 为10 ,r为敌机的纵坐标
 {
 gotoxy(d, r); printf("3");
 Sleep(200);
 gotoxy(d, r); printf(" "); f += 2; r = 0; j++;//让r=0,即是让敌人的飞机消失
 }
 if (x == d1 && y == r1)
 {
 gotoxy(d1, r1); printf("1");
 Sleep(200);
 gotoxy(d1, r1); printf(" "); f += 3; r1 = 0; j++;
 }
 if (x == d2 && y == r2)
 {
 gotoxy(d2, r2); printf("0");
 Sleep(200);
 gotoxy(d2, r2); printf(" "); f += 1; r2 = 0; j++;
 }

 gotoxy(57, 2);
 printf("%d\n", f);

}
//画图
void huatu()
{
 int i, n;

 for (i = 0; i <= 20; i++)
 {
 for (n = 0; n <= 20; n++)
 {
 printf("*");
 }
 printf("\n");
 }
 for (i = 1; i <= 19; i++)
 {
 for (n = 1; n <= 19; n++)
 {
 gotoxy_red(i, n);
 printf(" ");
 }
 }
}

//随机产生敌机
void dfeiji()
{
 while (t)
 {
 if (!r) { d = rand() % 17 + 1; m++; } //r,r1,r2 初始值都为1,当变为0的时候开始产生随机数
 if (!r1) { d1 = rand() % 17 + 1; m++; }
 if (!r2) { d2 = rand() % 17 + 1; m++; }

 while (t)
 {
 r=r+2; r1=r1+2; r2=r2+2;
 gotoxy(d, r); printf("b");//d,d1, d2 为敌机产生的位置,都为10
 gotoxy(d1, r1); printf("c");
 gotoxy(d2, r2); printf("d");
 Sleep(900);
 gotoxy(d, r); printf(" ");
 gotoxy(d1, r1); printf(" ");
 gotoxy(d2, r2); printf(" ");

 kongzhi(0, 0);//控制飞机后,要立即进行判断
 byebye();//判断飞机有没有死亡
 if (r == 19) r = 0;
 if (r1 == 19) r1 = 0;
 if (r2 == 19) r2 = 0;
 if (r == 0 || r1 == 0 || r2 == 0) break;
 }
 }
}

//操控飞机
void kongzhi(int bx, int by)//调用的时候传入了 0, 0
{
 int a;

 while (_kbhit())
 {
 if ((p = _getch()) == -32) p = _getch();
 a = p;
 gotoxy(22, 5);

 switch (a)
 {//控制方向
 case Up:if (y != 1)
 {
 gotoxy(x, y); printf(" ");
 y--;
 gotoxy(x, y); printf("A");
 }break;
 case Down:if (y != 18)
 {
 gotoxy(x, y); printf(" ");
 y++;
 gotoxy(x, y); printf("A");
 }break;
 case Left:if (x != 1)
 {
 gotoxy(x, y); printf(" ");
 x--;
 gotoxy(x, y); printf("A");
 }break;
 case Right:if (x != 18)
 {
 gotoxy(x, y); printf(" ");
 x++;
 gotoxy(x, y); printf("A");
 }break;
 case Kong: { bx = y;//先把y的值存起来,存到bx
 for (by = y; by > 1;) //发射子弹, y轴坐标一直减减,打印 |
 {
 by--;//y的坐标
 gotoxy(x, by); printf("|");
 Sleep(10);
 gotoxy(x, by); printf(" ");
 y = by;//记录子弹打到哪了,好进行碰撞检测
 jifan();//计分数
 if (r == 0 || r1 == 0 || r2 == 0) break;
 }
 y = bx;//恢复y的值
 }break;

 case Esc:t = 0; break; //退出

 default:break;
 }
 }
}

int main()
{
 srand(time(NULL));
 shuoming();//打印游戏说明,之后让光标进入0,0
 hidden();//隐藏光标,不让光标显示
 huatu();//画出墙壁
 gotoxy(x, y);//x=10,y=8, x 和y 是自己飞机的坐标,是全局变量
 printf("A");

 gotoxy(50, 2);
 printf("Score:");
 while (t) //t是一个全局变量 初始值为1
 {
 kongzhi(0, 0);//调用控制飞机函数, (操作飞机后并记分数)
 if (t) //如果游戏没有结束,则 产生敌机
 dfeiji();//产生敌机 ,并判断飞机有没有死亡
 }

}

2.(封装了一个函数)结束游戏后能够重新开始进行下一局

/*隐藏光标的代码
#include <stdio.h>
#include <windows.h>
int main()
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO CursorInfo;
GetConsoleCursorInfo(handle, &CursorInfo);//获取控制台光标信息
CursorInfo.bVisible = false; //隐藏控制台光标
SetConsoleCursorInfo(handle, &CursorInfo);//设置控制台光标状态

getchar();
}*/
/*
 明白两个事实,
 敌人飞机和自己的飞机的横坐标和纵坐标相同时 表示死亡
 敌人飞机和自己的子弹碰撞即 子弹坐标和自己子弹的坐标相同时,飞机死亡并且加分,
*/

#include "stdio.h"
#include <windows.h>
#include <conio.h>
#include <time.h>
#define Esc 27 //退出
#define Up 72 //上,下,左,右
#define Down 80
#define Left 75
#define Right 77
#define Kong 32 //发射子弹

int x = 10; //飞机坐标
int y = 18;

int d2 = 10;//敌机坐标
int d1 = 10;
int d = 10;//d 和r 用来进行碰撞检测
int r = 1;
int r1 = 1;
int r2 = 1;

int t = 1; // 游戏结束
int f = 0; // 计分数
int m = 5; // 敌机数
int j = 0; // 歼敌数
char p; // 接受按键

void kongzhi(int bx, int by);//声明函数
void huatu();

void gotoxy(int x, int y) //移动坐标
{
 COORD coord;
 coord.X = x;
 coord.Y = y;
 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),3);

}
void gotoxy_red(int x, int y) //移动坐标
{
 COORD coord;
 coord.X = x;
 coord.Y = y;
 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),4);

}
void gotoxy_blue(int x, int y) //移动坐标
{
 COORD coord;
 coord.X = x;
 coord.Y = y;
 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),1);

}
void gotoxy_green(int x, int y) //移动坐标
{
 COORD coord;
 coord.X = x;
 coord.Y = y;
 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),2);

}
void hidden()//隐藏光标,不让光标显示
{
 HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
 CONSOLE_CURSOR_INFO cci;
 GetConsoleCursorInfo(hOut, &cci);
 cci.bVisible = 0;//赋1为显示,赋0为隐藏
 SetConsoleCursorInfo(hOut, &cci);
}
//**************************************************************************************

//说明
void shuoming()
{
 printf("\t\t\t\n\n\n\n");
 gotoxy_blue(0, 0);
 printf("\t\t\t\t\t\t\tPlane Control\n\n"
 "\t\t\t\t\t\t\t\tUP\n\n"
 "\t\t\t\t\t\t\tDown\n\n"
 "\t\t\t\t\t\t\tLeft \n\n"
 "\t\t\t\t\t\t\tRight \n\n"
 "\t\t\t\t\t\t\t bullet space\n\n\n"
 "\t\t\t\t\t\t\tQuit Esc\n");

 gotoxy_red(0, 0);
}

//****************************************************************************************

//判断我机死没死/游戏结束
void byebye()
{
 if (((x == d && y == r) || (x == d1 && y == r1) || (x == d2 && y == r2))||( (d>=19||r>=19)||(d1>=19||r1>=19)||(d1>=19||r1>=19) ))
 {
 gotoxy(1, 3);
 printf(" !!! game over !!!\n"
 "*******************\n"
 " score: %d\n\n"
 " di ji shu: %d\n"
 " jian di shu: %d\n"
 " ming zhong lv: %.0f %%\n"
 "*******************\n", f, m, j, ((float)j / (float)m) * 100);
 t=0;

 }
}
// 计分/更新敌机
void jifan()
{ //x,y是子弹的坐标
 if (x == d && y == r) // d=10, r=1, d,d1,d2 是敌机的x轴, 为10 ,r为敌机的纵坐标
 {
 gotoxy(d, r); printf("3");
 Sleep(200);
 gotoxy(d, r); printf(" "); f += 2; r = 0; j++;//让r=0,即是让敌人的飞机消失
 }
 if (x == d1 && y == r1)
 {
 gotoxy(d1, r1); printf("1");
 Sleep(200);
 gotoxy(d1, r1); printf(" "); f += 3; r1 = 0; j++;
 }
 if (x == d2 && y == r2)
 {
 gotoxy(d2, r2); printf("0");
 Sleep(200);
 gotoxy(d2, r2); printf(" "); f += 1; r2 = 0; j++;
 }

 gotoxy(57, 2);
 printf("%d\n", f);

}
//画图
void huatu()
{
 int i, n;

 for (i = 0; i <= 20; i++)
 {
 for (n = 0; n <= 20; n++)
 {
 printf("*");
 }
 printf("\n");
 }
 for (i = 1; i <= 19; i++)
 {
 for (n = 1; n <= 19; n++)
 {
 gotoxy_red(i, n);
 printf(" ");
 }
 }
}

//随机产生敌机
void dfeiji()
{
 while (t)
 {
 if (!r) { d = rand() % 17 + 1; m++; } //r,r1,r2 初始值都为1,当变为0的时候开始产生随机数
 if (!r1) { d1 = rand() % 17 + 1; m++; }
 if (!r2) { d2 = rand() % 17 + 1; m++; }

 while (t)
 {
 r=r+2; r1=r1+2; r2=r2+2;
 gotoxy(d, r); printf("b");//d,d1, d2 为敌机产生的位置,都为10
 gotoxy(d1, r1); printf("c");
 gotoxy(d2, r2); printf("d");
 Sleep(900);
 gotoxy(d, r); printf(" ");
 gotoxy(d1, r1); printf(" ");
 gotoxy(d2, r2); printf(" ");

 kongzhi(0, 0);//控制飞机后,要立即进行判断
 byebye();//判断飞机有没有死亡
 if (r == 19) r = 0;
 if (r1 == 19) r1 = 0;
 if (r2 == 19) r2 = 0;
 if (r == 0 || r1 == 0 || r2 == 0) break;
 }
 }
}

//操控飞机
void kongzhi(int bx, int by)//调用的时候传入了 0, 0
{
 int a;

 while (_kbhit())
 {
 if ((p = _getch()) == -32) p = _getch();
 a = p;
 gotoxy(22, 5);

 switch (a)
 {//控制方向
 case Up:if (y != 1)
 {
 gotoxy(x, y); printf(" ");
 y--;
 gotoxy(x, y); printf("A");
 }break;
 case Down:if (y != 18)
 {
 gotoxy(x, y); printf(" ");
 y++;
 gotoxy(x, y); printf("A");
 }break;
 case Left:if (x != 1)
 {
 gotoxy(x, y); printf(" ");
 x--;
 gotoxy(x, y); printf("A");
 }break;
 case Right:if (x != 18)
 {
 gotoxy(x, y); printf(" ");
 x++;
 gotoxy(x, y); printf("A");
 }break;
 case Kong: { bx = y;//先把y的值存起来,存到bx
 for (by = y; by > 1;) //发射子弹, y轴坐标一直减减,打印 |
 {
 by--;//y的坐标
 gotoxy(x, by); printf("|");
 Sleep(10);
 gotoxy(x, by); printf(" ");
 y = by;//记录子弹打到哪了,好进行碰撞检测
 jifan();//计分数
 if (r == 0 || r1 == 0 || r2 == 0) break;
 }
 y = bx;//恢复y的值
 }break;

 case Esc:t = 0; break; //退出

 default:break;
 }
 }
}

void zuzhong(){
 x = 10; //飞机坐标
  y = 18;

 d2 = 10;//敌机坐标
 d1 = 10;
 d = 10;//d 和r 用来进行碰撞检测
 r = 1;
 r1 = 1;
 r2 = 1;

 t = 1; // 游戏结束
 f = 0; // 计分数
 m = 5; // 敌机数
 j = 0; // 歼敌数
char p; // 接受按键

 srand(time(NULL));
 shuoming();//打印游戏说明,之后让光标进入0,0
 hidden();//隐藏光标,不让光标显示
 huatu();//画出墙壁
 gotoxy(x, y);//x=10,y=8, x 和y 是自己飞机的坐标,是全局变量
 printf("A");

 gotoxy(50, 2);
 printf("Score:");
 while (t) //t是一个全局变量 初始值为1
 {
 kongzhi(0, 0);//调用控制飞机函数, (操作飞机后并记分数)
 if (t) //如果游戏没有结束,则 产生敌机
 dfeiji();//产生敌机 ,并判断飞机有没有死亡
 }

}
int main()
{
 while(1){
 system("cls");
 zuzhong();
 printf("please enter Enter key contine");
 getchar();
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C++编写简易的飞机大战

    初学C/C++的小伙伴可以用做这个小游戏来熟悉一下编程的乐趣. #include<windows.h> #include"resource.h" #include<stdlib.h> #include<time.h> #include<stdio.h> #define TIMER_DIREN 101 //定义定时器 #define TIMER_DIRENMOVE 102 #define TIMER_ZIDAN 103 #define TI

  • C++实现彩色飞机大战

    本文实例为大家分享了C++实现彩色飞机大战的具体代码,供大家参考,具体内容如下 1.基本的能够实现键盘按上下左右进行控制飞机,击杀敌人飞机,记录得分,(缺点:死亡后不能从新玩,需要重新启动程序,),缺点将在2中解决 /*隐藏光标的代码 #include <stdio.h> #include <windows.h> int main() { HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_CURSOR_INFO Cur

  • Pygame实战练习之飞机大战游戏

    导语 承载童年的纸飞机你还会叠嘛? 如果你是个80后或者90后,那你应该记得小时候玩的纸飞机. 叠好后,哈口仙气,飞出去,感觉棒棒哒. ​ 虽然是一个极其简单的玩具,但那时候,很多熊孩子能傻傻地玩上一整天. 今天带大家制作一款彩色版本另一个版本的飞机大冒险~ 欢迎阅读往期另一个飞机大战的文章:python开发飞机大战游戏. Are you ready? 一起开启飞机大冒险吧~ ▼▼▼ 正文 首先准备好飞机大冒险的图片: ​ 环境安装:主要游戏模块pygame. pip install pygam

  • 用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动

    目标是拷贝微信的飞机大战,当然拷贝完以后大家就具备自己添加不同内容的能力了. 首先是要拿到一些图片素材,熟悉使用图像处理软件和绘画的人可以自己制作,并没有这项技能的同学只能和我一样从网上下载相应的素材了. 网上可以找到相应的这样的图片,注意,所有的元件图片要是png类型的图片,那样可以有透明的背景,否则会有白色的边框露出来. 找到素材以后我们就要开始搭建我们的飞机大战了. 微信上的飞机大战是由手指控制的,在电脑上,我们就先用鼠标代替了. 按照之前我们在天空上移动云的那个程序,我们可以知道该怎么做

  • JavaScript原生编写《飞机大战坦克》游戏完整实例

    先来看看开始的界面图 实现思路: 1.打开页面,背景开始走动: 2.点击开始,飞机开始不断发射子弹,敌人随机出现在上方: 3.当敌人碰到子弹,敌人消失: 4.当敌人和飞机相遇,飞机死亡,结束游戏: html页面 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>飞机大战</title> <link r

  • python pygame模块编写飞机大战

    本文实例为大家分享了python pygame模块编写飞机大战的具体代码,供大家参考,具体内容如下 该程序没有使用精灵组,而是用列表存储对象来替代精灵组的动画效果.用矩形对象的重叠来判断相撞事件.该程序可以流畅运行,注释较为详细,希望可以帮助大家. import pygame from pygame.locals import * from sys import exit import time import random # 创建子弹类,把子弹的图片转化为图像对象,设定固定的移动速度 clas

  • python实现飞机大战微信小游戏

    0.前言 我学一种语言,可以说学任何东西都喜欢自己动手实践,总感觉自己动手一遍,就可以理解的更透彻,学python也一样,自己动手写代码,但更喜欢做点小东西出来,一边玩一边学.下面我就展示一下我最近做的一个小游戏. 1.素材准备 首先我们先来预览一下游戏的最终运行界面 根据游戏界面,我们可以清楚的知道必须要先准备游戏背景图片,飞机图片,子弹图片等等.这些素材我已经放到网上, 点我下载 ,里面包括了我的代码和图片素材. 2.代码部分 库依赖: pygame 本游戏主要有两个py文件,主文件plan

  • python实现飞机大战游戏

    飞机大战(Python)代码分为两个python文件,工具类和主类,需要安装pygame模块,能完美运行(网上好多不完整的,调试得心累.实现出来,成就感还是满满的),如图所示: 完整代码如下: 1.工具类plane_sprites.py import random import pygame # 屏幕大小的常量 SCREEN_RECT = pygame.Rect(0, 0, 480, 700) # 刷新的帧率 FRAME_PER_SEC = 60 # 创建敌机的定时器常量 CREATE_ENEM

  • pygame实现简易飞机大战

    利用pygame实现了简易版飞机大战.源代码如下: # -*- coding:utf-8 -*- import pygame import sys from pygame.locals import * from pygame.font import * import time import random class Hero(object): #玩家 英雄类 def __init__(self, screen_temp): self.x = 210 self.y = 700 self.life

  • python实现飞机大战

    本文实例为大家分享了python实现飞机大战的具体代码,供大家参考,具体内容如下 实现的效果如下: 主程序代码如下: import pygame from plane_sprites import * class PlaneGame(object): """飞机大战主游戏""" def __init__(self): print("游戏初始化") # 1,绘制屏幕窗口 self.screen = pygame.display.

  • python版飞机大战代码分享

    利用pygame实现了简易版飞机大战.源代码如下: # -*- coding:utf-8 -*- import pygame import sys from pygame.locals import * from pygame.font import * import time import random class Hero(object): #玩家 英雄类 def __init__(self, screen_temp): self.x = 210 self.y = 700 self.life

随机推荐