1. 程式人生 > 程式設計 >C++實現彩色飛機大戰

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,4);
 
}
void gotoxy_blue(int x,1);
 
}
void gotoxy_green(int x,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,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",((float)j / (float)m) * 100);
 t=0;
 
 }
}
// 計分/更新敵機
void jifan()
{ //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();//列印遊戲說明,並判斷飛機有沒有死亡
 }

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。