分数展示

void Game::printScore()
{if(score == 120 && flag_rank == 0){rank -= 3;flag_rank = 1;}else if( score == 360 && flag_rank == 1){rank -= 5;flag_rank = 2;}else if( score == 480 && flag_rank == 2){rank -= 5;flag_rank = 3;}int x=rank/5;SetPos(60, 6);cout<<score;///if( rank!=rankf ){SetPos(60, 7);if( score >= 0)title="初级飞行员";if( score >= 10)title="中级飞行员";if( score >= 20)title="高级飞行员";if( score >= 40)title="C级飞行员  ";if( score >= 80)title="B级飞行员  ";if( score >= 150)title="A级飞行员  ";if( score >= 200)title="S级飞行员  ";if( score >= 250 )title="王牌飞行员";if( score >= 300)title="深渊级飞行员";if( score >= 400)title="地煞级飞行员";if( score >= 500)title="恶魔级飞行员";if( score >= 600)title="王者级飞行员";if( score >= 700)title="传说级飞行员";if( score >= 800)title="神话级飞行员";if( score >= 900)title="超神级飞行员";if( score >= 1000)title="至尊宇航员";cout<<title;}rankf = rank;
}

飞机形状

void Game::drawPlane()
{for(int i=0; i<9; i++){SetPos(position[i]);if(i!=5)cout<<"*";else if(i==5)cout<<"|";        }
}

飞机的移动

void Game::planeMove(char x)
{if(x == 'a')if(position[1].X != 1)for(int i=0; i<=9; i++)position[i].X -= 2;if(x == 's')if(position[7].Y != 23)for(int i=0; i<=9; i++)position[i].Y += 1;if(x == 'd')if(position[4].X != 47)for(int i=0; i<=9; i++)position[i].X += 2;if(x == 'w')if(position[5].Y != 3)for(int i=0; i<=9; i++)position[i].Y -= 1;
}

子弹的移动

void Game::bulletMove()
{for(int i=0; i<10; i++){if( bullet[i].Y != 30){bullet[i].Y -= 1;if( bullet[i].Y == 1 ){COORD pos={bullet[i].X, bullet[i].Y+1};drawThisBulletToNull( pos );bullet[i].Y=30;}}}
}

初始选择页面

int drawMenu()
{SetPos(30, 1);cout<<"P l a n e  W a r";drawRow(3, 0, 79, '-');drawRow(5, 0, 79, '-');SetPos(28, 4);cout<<"w 和 s 选择, k 确定";SetPos(15, 11);cout<<"1. 简单的敌人";SetPos(15, 13);cout<<"2. 冷酷的敌人";drawRow(20, 0, 79, '-');drawRow(22, 0, 79, '-');SetPos(47, 11);cout<<"简单的敌人:";SetPos(51, 13);cout<<"简单敌人有着较慢的移动速度。";SetPos(24, 21);cout<<"制作:最帅的YSC";int j=11;SetPos(12, j);cout<<">>";

游戏页面

void drawPlaying()
{drawFrame(0, 0, 48, 24, '=', '|');//    draw map frame;drawFrame(49, 0, 79, 4, '-', '|');//        draw output framedrawFrame(49, 4, 79, 9, '-', '|');//        draw score framedrawFrame(49, 9, 79, 20, '-', '|');//    draw operate framedrawFrame(49, 20, 79, 24, '-', '|');//    draw other message frameSetPos(52, 6);cout<<"得分:";SetPos(52, 7);cout<<"称号:";SetPos(52,10);cout<<"操作方式:";SetPos(52,12);cout<<"  a,s,d,w 控制战机移动。";SetPos(52,14);cout<<"  p 暂停游戏。";SetPos(52,16);cout<<"  e 退出游戏。";
}

直接上代码

#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
#include<time.h>
#include<string>
using namespace std;/*=============== all the structures ===============*/typedef struct Frame
{COORD position[2];int flag;
}Frame;/*=============== all the functions ===============*/void SetPos(COORD a)// set cursor
{HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(out, a);
}void SetPos(int i, int j)// set cursor
{COORD pos={i, j};SetPos(pos);
}void HideCursor()
{CONSOLE_CURSOR_INFO cursor_info = {1, 0}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}//把第y行,[x1, x2) 之间的坐标填充为 ch
void drawRow(int y, int x1, int x2, char ch)
{SetPos(x1,y);for(int i = 0; i <= (x2-x1); i++)cout<<ch;
}//在a, b 纵坐标相同的前提下,把坐标 [a, b] 之间填充为 ch
void drawRow(COORD a, COORD b, char ch)
{if(a.Y == b.Y)drawRow(a.Y, a.X, b.X, ch);else{SetPos(0, 25);cout<<"error code 01:无法填充行,因为两个坐标的纵坐标(x)不相等";system("pause");}
}//把第x列,[y1, y2] 之间的坐标填充为 ch
void drawCol(int x, int y1, int y2, char ch)
{int y=y1;while(y!=y2+1){SetPos(x, y);cout<<ch;y++;}
}//在a, b 横坐标相同的前提下,把坐标 [a, b] 之间填充为 ch
void drawCol(COORD a, COORD b, char ch)
{if(a.X == b.X)drawCol(a.X, a.Y, b.Y, ch);else{SetPos(0, 25);cout<<"error code 02:无法填充列,因为两个坐标的横坐标(y)不相等";system("pause");}
}//左上角坐标、右下角坐标、用row填充行、用col填充列
void drawFrame(COORD a, COORD  b, char row, char col)
{drawRow(a.Y, a.X+1, b.X-1, row);drawRow(b.Y, a.X+1, b.X-1, row);drawCol(a.X, a.Y+1, b.Y-1, col);drawCol(b.X, a.Y+1, b.Y-1, col);
}void drawFrame(int x1, int y1, int x2, int y2, char row, char col)
{COORD a={x1, y1};COORD b={x2, y2};drawFrame(a, b, row, col);
}void drawFrame(Frame frame, char row, char col)
{COORD a = frame.position[0];COORD b = frame.position[1];drawFrame(a, b, row, col);
}void drawPlaying()
{drawFrame(0, 0, 48, 24, '=', '|');//    draw map frame;drawFrame(49, 0, 79, 4, '-', '|');//        draw output framedrawFrame(49, 4, 79, 9, '-', '|');//        draw score framedrawFrame(49, 9, 79, 20, '-', '|');//    draw operate framedrawFrame(49, 20, 79, 24, '-', '|');//    draw other message frameSetPos(52, 6);cout<<"得分:";SetPos(52, 7);cout<<"称号:";SetPos(52,10);cout<<"操作方式:";SetPos(52,12);cout<<"  a,s,d,w 控制战机移动。";SetPos(52,14);cout<<"  p 暂停游戏。";SetPos(52,16);cout<<"  e 退出游戏。";
}//在[a, b)之间产生一个随机整数
int random(int a, int b)
{int c=(rand() % (a-b))+ a;return c;
}//在两个坐标包括的矩形框内随机产生一个坐标
COORD random(COORD a, COORD b)
{int x=random(a.X, b.X);int y=random(a.Y, b.Y);COORD c={x, y};return c;
}bool  judgeCoordInFrame(Frame frame, COORD spot)
{if(spot.X>=frame.position[0].X)if(spot.X<=frame.position[1].X)if(spot.Y>=frame.position[0].Y)if(spot.Y<=frame.position[0].Y)return true;return false;
}void printCoord(COORD a)
{cout    <<"( "<<a.X<<" , "<<a.Y<<" )";
}void printFrameCoord(Frame a)
{printCoord(a.position[0]);cout    <<" - ";printCoord(a.position[1]);
}int drawMenu()
{SetPos(30, 1);cout<<"P l a n e  W a r";drawRow(3, 0, 79, '-');drawRow(5, 0, 79, '-');SetPos(28, 4);cout<<"w 和 s 选择, k 确定";SetPos(15, 11);cout<<"1. 简单的敌人";SetPos(15, 13);cout<<"2. 冷酷的敌人";drawRow(20, 0, 79, '-');drawRow(22, 0, 79, '-');SetPos(47, 11);cout<<"简单的敌人:";SetPos(51, 13);cout<<"简单敌人有着较慢的移动速度。";SetPos(24, 21);cout<<"制作:最帅的YSC";int j=11;SetPos(12, j);cout<<">>";//drawFrame(45, 9, 79, 17, '=', '|');while(1){    if( _kbhit() ){    char x=_getch();switch (x){case 'w' :{    if( j == 13){SetPos(12, j);cout<<" ";j = 11;SetPos(12, j);cout<<">>";SetPos(51, 13);cout<<"            ";SetPos(47, 11);cout<<"简单的敌人:";SetPos(51, 13);cout<<"简单敌人有着较慢的移动速度,容易对付。";}break;}case 's' :{    if( j == 11 ){SetPos(12, j);cout<<" ";        j = 13;SetPos(12, j);cout<<">>";SetPos(51, 13);cout<<"              ";SetPos(47, 11);cout<<"冷酷的敌人:";SetPos(51, 13);cout<<"冷酷的敌人移动速度较快,难对付哟!!!";}break;}case 'k' :{    if (j == 8)    return 1;else return 2;}}}}
}/*
DWORD WINAPI MusicFun(LPVOID lpParamte)
{//DWORD OBJ;sndPlaySound(TEXT("bgm.wav"), SND_FILENAME|SND_ASYNC);return 0;
}
*//*================== the Game Class ==================*/class Game
{public:COORD position[10];COORD bullet[10];Frame enemy[8];int score;int rank;int rankf;string title;int flag_rank;Game ();//初始化所有void initPlane();void initBullet();void initEnemy();//初始化其中一个//void initThisBullet( COORD );//void initThisEnemy( Frame );void planeMove(char);void bulletMove();void enemyMove();//填充所有void drawPlane();void drawPlaneToNull();void drawBullet();void drawBulletToNull();void drawEnemy();void drawEnemyToNull();//填充其中一个void drawThisBulletToNull( COORD );void drawThisEnemyToNull( Frame );void Pause();void Playing();void judgePlane();void judgeEnemy();void Shoot();void GameOver();void printScore();
};Game::Game()
{initPlane();initBullet();initEnemy();score = 0;rank = 25;rankf = 0;flag_rank = 0;
}void Game::initPlane()
{COORD centren={39, 22};position[0].X=position[5].X=position[7].X=position[9].X=centren.X;position[1].X=centren.X-2;    position[2].X=position[6].X=centren.X-1;position[3].X=position[8].X=centren.X+1;position[4].X=centren.X+2;for(int i=0; i<=4; i++)position[i].Y=centren.Y;for(int i=6; i<=8; i++)position[i].Y=centren.Y+1;position[5].Y=centren.Y-1;position[9].Y=centren.Y-2;
}void Game::drawPlane()
{for(int i=0; i<9; i++){SetPos(position[i]);if(i!=5)cout<<"*";else if(i==5)cout<<"|";        }
}void Game::drawPlaneToNull()
{for(int i=0; i<9; i++){SetPos(position[i]);cout<<" ";}
}void Game::initBullet()
{for(int i=0; i<10; i++)bullet[i].Y = 30;
}void Game::drawBullet()
{for(int i=0; i<10; i++){if( bullet[i].Y != 30){SetPos(bullet[i]);cout<<"I";    }}
}void Game::drawBulletToNull()
{for(int i=0; i<10; i++)if( bullet[i].Y != 30 ){COORD pos={bullet[i].X, bullet[i].Y+1};SetPos(pos);cout<<" ";}
}void Game::initEnemy()
{COORD a={1, 1};COORD b={45, 15};for(int i=0; i<8; i++){enemy[i].position[0] = random(a, b);enemy[i].position[1].X = enemy[i].position[0].X + 3;enemy[i].position[1].Y = enemy[i].position[0].Y + 2;}
}void Game::drawEnemy()
{for(int i=0; i<8; i++)drawFrame(enemy[i].position[0], enemy[i].position[1], '-', '|');
}void Game::drawEnemyToNull()
{for(int i=0; i<8; i++){drawFrame(enemy[i].position[0], enemy[i].position[1], ' ', ' ');}
}void Game::Pause()
{SetPos(61,2);cout<<"               ";SetPos(61,2);cout<<"暂停中...";char c=_getch();while(c!='p')c=_getch();SetPos(61,2);cout<<"         ";
}void Game::planeMove(char x)
{if(x == 'a')if(position[1].X != 1)for(int i=0; i<=9; i++)position[i].X -= 2;if(x == 's')if(position[7].Y != 23)for(int i=0; i<=9; i++)position[i].Y += 1;if(x == 'd')if(position[4].X != 47)for(int i=0; i<=9; i++)position[i].X += 2;if(x == 'w')if(position[5].Y != 3)for(int i=0; i<=9; i++)position[i].Y -= 1;
}void Game::bulletMove()
{for(int i=0; i<10; i++){if( bullet[i].Y != 30){bullet[i].Y -= 1;if( bullet[i].Y == 1 ){COORD pos={bullet[i].X, bullet[i].Y+1};drawThisBulletToNull( pos );bullet[i].Y=30;}}}
}void Game::enemyMove()
{for(int i=0; i<8; i++){for(int j=0; j<2; j++)enemy[i].position[j].Y++;if(24 == enemy[i].position[1].Y){COORD a={1, 1};COORD b={45, 3};enemy[i].position[0] = random(a, b);enemy[i].position[1].X = enemy[i].position[0].X + 3;enemy[i].position[1].Y = enemy[i].position[0].Y + 2;}}
}void Game::judgePlane()
{for(int i = 0; i < 8; i++)for(int j=0; j<9; j++)if(judgeCoordInFrame(enemy[i], position[j])){SetPos(62, 1);cout<<"坠毁";drawFrame(enemy[i], '+', '+');Sleep(1000);GameOver();break;}
}void Game::drawThisBulletToNull( COORD c)
{SetPos(c);cout<<" ";
}void Game::drawThisEnemyToNull( Frame f )
{drawFrame(f, ' ', ' ');
}void Game::judgeEnemy()
{for(int i = 0; i < 8; i++)for(int j = 0; j < 10; j++)if( judgeCoordInFrame(enemy[i], bullet[j]) ){score += 5;drawThisEnemyToNull( enemy[i] );COORD a={1, 1};COORD b={45, 3};enemy[i].position[0] = random(a, b);enemy[i].position[1].X = enemy[i].position[0].X + 3;enemy[i].position[1].Y = enemy[i].position[0].Y + 2;                    drawThisBulletToNull( bullet[j] );bullet[j].Y = 30;}
}void Game::Shoot()
{for(int i=0; i<10; i++)if(bullet[i].Y == 30){bullet[i].X = position[5].X;bullet[i].Y = position[5].Y-1;break;}
}void Game::printScore()
{if(score == 120 && flag_rank == 0){rank -= 3;flag_rank = 1;}else if( score == 360 && flag_rank == 1){rank -= 5;flag_rank = 2;}else if( score == 480 && flag_rank == 2){rank -= 5;flag_rank = 3;}int x=rank/5;SetPos(60, 6);cout<<score;///if( rank!=rankf ){SetPos(60, 7);if( score >= 0)title="初级飞行员";if( score >= 10)title="中级飞行员";if( score >= 20)title="高级飞行员";if( score >= 40)title="C级飞行员  ";if( score >= 80)title="B级飞行员  ";if( score >= 150)title="A级飞行员  ";if( score >= 200)title="S级飞行员  ";if( score >= 250 )title="王牌飞行员";if( score >= 300)title="深渊级飞行员";if( score >= 400)title="地煞级飞行员";if( score >= 500)title="恶魔级飞行员";if( score >= 600)title="王者级飞行员";if( score >= 700)title="传说级飞行员";if( score >= 800)title="神话级飞行员";if( score >= 900)title="超神级飞行员";if( score >= 1000)title="至尊宇航员";cout<<title;}rankf = rank;
}void Game::Playing()
{//HANDLE MFUN;//MFUN= CreateThread(NULL, 0, MusicFun, NULL, 0, NULL); drawEnemy();drawPlane();int flag_bullet = 0;int flag_enemy = 0;while(1){Sleep(8);if(_kbhit()){char x = _getch();if ('a' == x || 's' == x || 'd' == x || 'w' == x){drawPlaneToNull();planeMove(x);drawPlane();judgePlane();}            else if ('p' == x)Pause();else if( 'k' == x)Shoot();else if( 'e' == x){//CloseHandle(MFUN);GameOver();break;}}/* 处理子弹 */if( 0 == flag_bullet ){bulletMove();drawBulletToNull();drawBullet();judgeEnemy();}            flag_bullet++;if( 5 == flag_bullet )flag_bullet = 0;/* 处理敌人 */if( 0 == flag_enemy ){drawEnemyToNull();enemyMove();            drawEnemy();judgePlane();}flag_enemy++;if( flag_enemy >= rank )flag_enemy = 0;/* 输出得分 */printScore();}
}void Game::GameOver()
{system("cls");                COORD p1={28,9};COORD p2={53,15};drawFrame(p1, p2, '=', '|');SetPos(36,12);string str="Game Over!";for(int i=0; i<str.size(); i++){Sleep(80);cout<<str[i];}cout<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<"                               (你弄坏了我的飞机)";Sleep(1000);system("cls");drawFrame(p1, p2, '=', '|');SetPos(31, 11);cout<<"击落敌机:"<<score/5<<" 架";SetPos(31, 12);cout<<"得  分:"<<score;SetPos(31, 13);cout<<"获得称号:"<<title;SetPos(30, 16);Sleep(1000);cout<<"继续? 是(y)| 否(n)制作:最帅的YSC";
as:char x=_getch();if (x == 'n')exit(0);else if (x == 'y'){system("cls");Game game;int a = drawMenu();if(a == 2)game.rank = 20;system("cls");drawPlaying();game.Playing();}else goto as;
}/*================== the main function ==================*/
int main()
{//游戏准备srand((int)time(0));    //随机种子HideCursor();    //隐藏光标Game game;int a = drawMenu();if(a == 2)game.rank = 20;system("cls");drawPlaying();game.Playing();
}

飞机大战代码(高仿),完美复原原游戏,好玩到停不下来相关推荐

  1. C++最经典塔防游戏代码,(高仿),完美复原原游戏,好玩到停不下来

    直接上代码 #include<bits/stdc++.h> #include<windows.h> #include<conio.h> #include<ti ...

  2. C++最经典斗破苍穹游戏代码,(高仿),完美复原原游戏,好玩到停不下来

    直接上代码 #include<stdio.h> #include<ctime> #include<time.h> //suiji #include<windo ...

  3. C++最经典打怪游戏代码,(高仿),完美复原原游戏,好玩到停不下来

    直接上代码 #include<bits/stdc++.h> #include<windows.h> #include<stdio.h> #include<co ...

  4. 微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js)

    微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞 ...

  5. java版飞机大战代码

    java版飞机大战代码 前言 Plane PlaneStatus类 Power类 Gift Diji play类 over类 MainFrame主类 MyZiDan DijiZiDan Before ...

  6. Java练习之坦克大战!!!复制可以直接用!!!文章最后有飞机大战代码!!!

    用Java写一个入门游戏--坦克大战! 源代码!!!复制可以直接用!!! 文章最后还有飞机大战代码!!! 本代码写的较为入门,有需要的铁铁们可以去看看!!! 在往期我们讲解了窗口.循环.数组和继承的一 ...

  7. python飞机大战计分代码_Python 飞机大战代码练习

    Python 飞机大战代码练习 最近在自学Python,参照代码自己写了一遍飞机大战游戏的代码.主要应用的模块为pygame.整个代码如下所示,主要分为主模块和各种精灵类定义模块,记录一下自己的学习历 ...

  8. python制作飞机大战代码_python实现飞机大战完整代码,可运行

    我发现很多python代码飞机大战在互联网上,但几乎没有一个是完整的.所以我做了一个完整的人.python代码分为两个文件,工具类和主类.python版本,pygame模块需要安装.完整的代码如下.1 ...

  9. python飞机大战源代码-python版飞机大战代码分享

    利用pygame实现了简易版飞机大战.源代码如下: # -*- coding:utf-8 -*- import pygame import sys from pygame.locals import ...

最新文章

  1. centos7 安装cacti
  2. 总线制和多线制示意图_主机总线线 总线制和多线制示意图
  3. C++/QT:获取当前路径并通过相对路径读取文件
  4. Mac上最佳的SVN管理工具:Cornerstone
  5. Codeforces 301A. Yaroslav
  6. JdbcTemplate 的使用
  7. 创建hadoop 归档文件
  8. 《Windows via C/C++》学习笔记 —— 内核对象的“线程同步”之“事件内核对象”...
  9. BZOJ 2463: [中山市选2009]谁能赢呢?
  10. mount挂载不上,不提示任何信息
  11. 玩玩Spring之初章
  12. 计算机网络对青少年的影响,计算机网络对中学生的影响及对策研究
  13. 【人工智能】2.博弈问题、博弈搜索策略
  14. java 连接池配置_【Java】java数据库连接池配置的几种方法
  15. 【Leetcode刷题Python】40. 组合总和 II
  16. 数据可视化 信息可视化_可视化数据操作数据可视化与纪录片的共同点
  17. es的基本操作(创建索引,添加数据,删除数据,判断索引是否存在)
  18. 浅谈Fiddler4 如何进行Idea抓包操作
  19. LOCATE函数的用法
  20. 计算机图形学对勾函数,高一数学 : 最全函数图像汇总,不看准后悔!

热门文章

  1. 搜狗浏览器在高速模式下,右键点击才会出现“审查元素”
  2. 弗洛伊德,迪杰斯特拉算法
  3. x86: perf_events内核初始化
  4. c语言定义寄存器中的两位,汇编语言:编写一个程序,显示AL寄存器中的两位十六进制数...
  5. ppt模板如何制作个性海报?
  6. 2.数据类型--数值类型
  7. 什么是HTTP状态码?常见HTTP状态码盘点
  8. [转]Ubuntu 小企鹅输入法fcitx 支持 五笔拼音
  9. dfa 识别 正则表达式 0(0|1)*101
  10. Qt QAxObject操作excel文件过程总结