欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言實(shí)現(xiàn)飛機(jī)大戰(zhàn)程序設(shè)計(jì)

 更新時(shí)間:2022年06月08日 08:33:02   作者:Twinkling_xxx  
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)飛機(jī)大戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C語言實(shí)現(xiàn)飛機(jī)大戰(zhàn)的具體代碼,供大家參考,具體內(nèi)容如下

作業(yè)要求:

1.游戲當(dāng)中出現(xiàn)多類型敵人
2.游戲中能進(jìn)行存檔和讀檔
3.玩家控制的飛機(jī)由多字符組成
4.游戲過程中沒有出現(xiàn)BUG 
5.游戲顯示制作者信息
6.游戲當(dāng)中帶有BGM
7.其他個(gè)性化設(shè)定

成效:

 代碼:

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#include<mmsystem.h>?? ??? ??? ??? ?// 導(dǎo)入聲音頭文件
#pragma comment(lib,"Winmm.lib")?? ?// 導(dǎo)入聲音頭文件庫
?
#define High 20?? ??? ??? ?// 游戲畫面尺寸
#define Width 30
#define EnemyNum 5?? ??? ?// 敵機(jī)個(gè)數(shù)
#define BossNum 2?? ??? ?// Boss機(jī)個(gè)數(shù)
?
int flag;?? ??? ??? ??? ?// 飛機(jī)狀態(tài)?
int color(int c);?? ??? ?// 更改文字顏色
void explation();?? ??? ?// 游戲提示
void show();?? ??? ??? ?// 顯示游戲界面
void endgame();?? ??? ??? ?// 游戲結(jié)束
void startup();?? ??? ??? ?// 數(shù)據(jù)初始化
void FileRead();?? ??? ?// 讀檔
?
// 全局變量
int position_x, position_y;?? ??? ??? ??? ?// 飛機(jī)位置
struct enemy{
?? ?int x;
?? ?int y;
?? ?int life;
}Boss[BossNum], enemy[EnemyNum];?? ??? ?// 敵機(jī)位置
?
int canvas[High][Width] = {0};?? ??? ??? ?// 二維數(shù)組存儲(chǔ)游戲畫布中對(duì)應(yīng)的元素
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?// 0為空格,1為飛機(jī)8,2為子彈o,3為敵機(jī)0 , 4為Boss敵機(jī)A
int score;?? ??? ??? ??? ??? ??? ??? ??? ?// 得分
int number;?? ??? ??? ??? ??? ??? ??? ??? ?// 銷毀敵機(jī)數(shù)
int BulletWidth;?? ??? ??? ??? ??? ??? ?// 子彈寬度
int EnemyMoveSpeed;?? ??? ??? ??? ??? ??? ?// 敵機(jī)移動(dòng)速度
?
// 光標(biāo)移動(dòng)到(x,y)位置
void gotoxy(int x, int y)
{
?? ?HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
?? ?COORD pos;
?? ?pos.X = x;
?? ?pos.Y = y;
?? ?SetConsoleCursorPosition(handle, pos);
}
?
// 更改文字顏色
int color(int c)
{
?? ?SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c);
?? ?return 0;
}
?
// 隱藏光標(biāo)
void HideCursor()
{
?? ?CONSOLE_CURSOR_INFO cursor_info = {1,0};
?? ?SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
?
// 開始界面
void welcometogame()
{
?? ?int n, i, j = 1;
?? ?system("cls");
?? ?color(15);
?? ?gotoxy(33, 1);
?? ?printf("飛機(jī)大戰(zhàn) Plane War");
?? ?color(56);
?? ?for (i = 3; i <= 26; i++) ? ? ? // 輸出上下邊框
?? ?{
?? ??? ?for (j = 6; j <= 80; j++) ? // 輸出左右邊框
?? ??? ?{
?? ??? ??? ?gotoxy(j, i);
?? ??? ??? ?if (i == 3 || i == 26)
?? ??? ??? ??? ?printf(" ");
?? ??? ??? ?else if (j == 6 || j == 80)
?? ??? ??? ??? ?printf(" ");
?? ??? ?}
?? ?}
?? ?color(14);
?? ?gotoxy(38, 6);
?? ?printf("基本操作\n");
?? ?gotoxy(19, 8);
?? ?printf("空格:發(fā)射子彈 ?W:前進(jìn) ?A:左移 ?D:右移 ?S:后退\n");
?? ?gotoxy(34, 11);
?? ?printf("1.開始游戲(play)");
?? ?gotoxy(34, 13);
?? ?printf("2.游戲規(guī)則(rule)");
?? ?gotoxy(34, 15);
?? ?printf("3.讀取存檔(read)");
?? ?gotoxy(34, 17);
?? ?printf("4.退出游戲(quit)");
?? ?color(15);
?? ?gotoxy(22, 24);
?? ?printf("游戲制作人:李歆靈 ? 學(xué)號(hào):420240320 ? 聯(lián)系方式:13530656670");
?? ?color(14);
?? ?gotoxy(33, 20);
?? ?printf("請(qǐng)選擇 1 2 3 4: ");
?? ?color(14);
?? ?scanf("%d", &n); ? // 輸入選項(xiàng)
?? ?switch (n)
?? ?{
?? ?case 1:
?? ??? ?flag = 1;
?? ??? ?system("cls");
?? ??? ?break;
?? ?case 2:
?? ??? ?explation(); ? // 游戲規(guī)則
?? ??? ?break;
?? ?case 3:
?? ??? ?system("cls"); // 讀檔
?? ??? ?break;
?? ?case 4:
?? ??? ?gotoxy(30, 28);
?? ??? ?exit(0); ? ? ? // 退出游戲
?? ??? ?break;
?? ?default:
?? ??? ?color(9);
?? ??? ?gotoxy(33, 22);
?? ??? ?printf("請(qǐng)輸入1-4之間的數(shù)");
?? ??? ?_getch(); ? ? ? // 輸入任意鍵
?? ??? ?system("cls"); ?// 清屏
?? ??? ?welcometogame();
?? ?}
}
?
// 游戲規(guī)則
void explation()
{
?? ?int i, j = 1;
?? ?system("cls");
?? ?color(15);
?? ?gotoxy(30, 1);
?? ?printf("游戲規(guī)則 Rules of game");
?? ?color(56);
?? ?for (i = 3; i <= 26; i++) ? ? ? // 輸出上下邊框
?? ?{
?? ??? ?for (j = 6; j <= 80; j++) ? // 輸出左右邊框
?? ??? ?{
?? ??? ??? ?gotoxy(j, i);
?? ??? ??? ?if (i == 3 || i == 26)
?? ??? ??? ??? ?printf(" ");
?? ??? ??? ?else if (j == 6 || j == 80)
?? ??? ??? ??? ?printf(" ");
?? ??? ?}
?? ?}
?? ?color(14);
?? ?gotoxy(10, 6);
?? ?printf("1. W,A,S,D 分別是控制飛機(jī)的移動(dòng),空格發(fā)射子彈");
?? ?gotoxy(10, 9);
?? ?printf("2. O是普通敵機(jī)(需一發(fā)子彈),A是Boss敵機(jī)(需兩發(fā)子彈)");
?? ?gotoxy(10, 12);
?? ?printf("3. 擊敗普通敵機(jī)可獲得1分,擊敗Boss敵機(jī)可獲得2分");
?? ?gotoxy(10, 15);
?? ?printf("4. 敵機(jī)進(jìn)入下邊界減1分");
?? ?gotoxy(10, 18);
?? ?printf("5. 飛機(jī)碰到敵機(jī)會(huì)墜落");
?? ?gotoxy(10, 21);
?? ?printf("6. 按Z存檔,按P暫停游戲");
?? ?color(15);
?? ?gotoxy(25, 23);
?? ?printf("/*****按任意鍵返回主頁面*****/");
?? ?_getch(); ?// 按任意鍵返回主界面
?? ?system("cls");
?? ?welcometogame();
}
?
// 數(shù)據(jù)初始化
void startup()
{
?? ?mciSendString("open D:\\plane\\game.mp3 alias bkmusic ",NULL,0,NULL);?? ?// 打開背景音樂
?? ?mciSendString("play bkmusic",NULL,0,NULL); // 循環(huán)播放
?? ?position_x = High / 2;
?? ?position_y = Width / 2;
?? ?canvas[position_x][position_y] = 3;
?? ?canvas[position_x + 1][position_y - 1] = 3;
?? ?canvas[position_x + 1][position_y] = 3;
?? ?canvas[position_x + 1][position_y + 1] = 3;
?
?? ?int k;
?? ?for (k = 0; k < EnemyNum; k++)
?? ?{
?? ??? ?enemy[k].x = rand() % 2;
?? ??? ?enemy[k].y = rand() % Width;
?? ??? ?canvas[enemy[k].x][enemy[k].y] = 3;
?? ?}
?? ?for (k = 0; k < BossNum; k++)
?? ?{
?? ??? ?Boss[k].x = rand() % 2;
?? ??? ?Boss[k].y = rand() % Width;
?? ??? ?canvas[Boss[k].x][Boss[k].y] = 4;
?? ??? ?Boss[k].life = 2;
?? ?}
?? ?int score = 0;?? ??? ??? ?// 成績
?? ?int number = 0;?? ??? ??? ?// 銷毀敵機(jī)數(shù)
?? ?BulletWidth = 0;
?? ?EnemyMoveSpeed = 30;
?? ?HideCursor();?? ??? ??? ?// 光標(biāo)
}
?
// 存檔代碼
void FileWrite()
{
?? ?FILE *fp;?? ??? ??? ??? ??? ??? ??? ?// 文件指針
?? ?fp = fopen("D:\\game.data", "w");?? ?// 打開文件 "w": write寫入文件
?? ?int i, j;
?? ?for (i = 0; i < EnemyNum; i++)
?? ?{
?? ??? ?fwrite(&enemy[i], sizeof(struct enemy), 1, fp);
?? ?}
?? ?for (j = 0; j < BossNum; j++)
?? ?{
?? ??? ?fwrite(&Boss[j], sizeof(struct enemy), 1, fp);
?? ?}
?? ?fwrite(&position_x, sizeof(int), 1, fp);
?? ?fwrite(&position_y, sizeof(int), 1, fp);
?? ?fwrite(&score, sizeof(int), 1, fp);
?? ?fwrite(&number, sizeof(int), 1, fp);
?? ?fwrite(&BulletWidth, sizeof(int), 1, fp);
?? ?fwrite(&EnemyMoveSpeed, sizeof(int), 1, fp);
?? ?fclose(fp); ?// 關(guān)閉文件
?? ?printf("\n保存成功\n");
}
?
// 讀檔代碼
void FileRead()
{
?? ?FILE *fp;?? ??? ??? ??? ??? ??? ??? ?// 文件指針
?? ?fp = fopen("D:\\game.data", "r");?? ?// 打開文件 "r": read讀取文件
?? ?mciSendString("open D:\\plane\\game.mp3 alias bkmusic ",NULL,0,NULL);?? ?// 打開背景音樂
?? ?mciSendString("play bkmusic",NULL,0,NULL); // 循環(huán)播放
?? ?if(fp == NULL)
?? ??? ?startup();
?? ?else
?? ?{
?? ??? ?int i, j;
?? ??? ?for (i = 0; i < EnemyNum; i++)
?? ??? ?{
?? ??? ??? ?fread(&enemy[i], sizeof(struct enemy), 1, fp);
?? ??? ?}
?? ??? ?for (j = 0; j < BossNum; j++)
?? ??? ?{
?? ??? ??? ?fread(&Boss[j], sizeof(struct enemy), 1, fp);
?? ??? ?}
?? ??? ?fread(&position_x, sizeof(int), 1, fp);
?? ??? ?fread(&position_y, sizeof(int), 1, fp);
?? ??? ?fread(&score, sizeof(int), 1, fp);
?? ??? ?fread(&number, sizeof(int), 1, fp);
?? ??? ?fread(&BulletWidth, sizeof(int), 1, fp);
?? ??? ?fread(&EnemyMoveSpeed, sizeof(int), 1, fp);
?? ?}
?? ?fclose(fp); ?// 關(guān)閉文件
?? ?canvas[position_x][position_y] = 1;
?? ?canvas[position_x + 1][position_y - 1] = 1;
?? ?canvas[position_x + 1][position_y] = 1;
?? ?canvas[position_x + 1][position_y + 1] = 1;
?
?? ?int k;
?? ?for (k = 0; k < EnemyNum; k++)
?? ?{
?? ??? ?canvas[enemy[k].x][enemy[k].y] = 3;
?? ?}
?? ?for (k = 0; k < BossNum; k++)
?? ?{
?? ??? ?canvas[Boss[k].x][Boss[k].y] = 4;
?? ??? ?Boss[k].life = 2;
?? ?}
?
?? ?HideCursor();
}
?
// 顯示畫面
void show()
{
?? ?color(112);
?? ?gotoxy(0, 0); // 光標(biāo)移動(dòng)到原點(diǎn)位置,以下重畫清屏
?? ?int i, j;
?? ?for (i = 0; i < High; i++)
?? ?{
?? ??? ?for (j = 0; j < Width; j++)
?? ??? ?{
?? ??? ??? ?if ((j == Width - 1) || (i == High - 1) || (j == 0) || (i == 0))
?? ??? ??? ??? ?printf("#"); ? ? ? ? ? ? // 打印邊界#
?? ??? ??? ?else if (canvas[i][j] == 1)
?? ??? ??? ??? ?printf("8"); ? ? ? ? ? ? // 輸出飛機(jī)8
?? ??? ??? ?else if (canvas[i][j] == 2)
?? ??? ??? ??? ?printf("o"); ? ? ? ? ? ? // 輸出子彈o
?? ??? ??? ?else if (canvas[i][j] == 3)
?? ??? ??? ??? ?printf("O"); ? ? ? ? ? ? // 輸出敵機(jī)O
?? ??? ??? ?else if (canvas[i][j] == 4)
?? ??? ??? ??? ?printf("A"); ? ? ? ? ? ? // 輸出Boss敵機(jī)A
?? ??? ??? ?else
?? ??? ??? ??? ?printf(" ");
?? ??? ?}
?? ??? ?printf("\n");
?? ?}
?? ?color(14);
?? ?printf("\n");
?? ?printf("游戲得分: %d\n", score);
?? ?printf("銷毀敵機(jī): %d\n\n", number);
?? ?Sleep(20);
}
?
// 與用戶輸入無關(guān)的更新
void updateWithoutInput()
{
?? ?int i, j, k;
?? ?for (i = 0; i < High; i++)
?? ?{
?? ??? ?for (j = 0; j < Width; j++)
?? ??? ?{
?? ??? ??? ?if (canvas[i][j] == 2)
?? ??? ??? ?{
?? ??? ??? ??? ?for (k = 0; k < EnemyNum; k++)
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?if ((i == enemy[k].x) && (j == enemy[k].y))?? ??? ??? ?// 子彈擊中敵機(jī)
?? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ?mciSendString("close gemusic",NULL,0,NULL);?? ??? ?// 先把前面一次的音樂關(guān)閉
?? ??? ??? ??? ??? ??? ?mciSendString("open D:\\plane\\gotEnemy.mp3 alias gemusic ",NULL,0,NULL);?? ?// 打開音樂
?? ??? ??? ??? ??? ??? ?mciSendString("play gemusic",NULL,0,NULL);?? ??? ?// 僅播放一次
?? ??? ??? ??? ??? ??? ?score++;?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?// 分?jǐn)?shù)加1
?? ??? ??? ??? ??? ??? ?number++;?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?// 銷毀敵機(jī)數(shù)加1
?? ??? ??? ??? ??? ??? ?if (number % 6 == 0 && EnemyMoveSpeed > 3)?? ??? ?// 達(dá)到一定積分后,敵機(jī)變快
?? ??? ??? ??? ??? ??? ??? ?EnemyMoveSpeed--;
?? ??? ??? ??? ??? ??? ?if (number % 12 == 0) ? ? ? ? ? ? ? ? ? ? ? ? ? // 達(dá)到一定積分后,子彈變厲害
?? ??? ??? ??? ??? ??? ??? ?BulletWidth++;
?? ??? ??? ??? ??? ??? ?canvas[enemy[k].x][enemy[k].y] = 0;?? ??? ??? ??? ?// 殘影問題
?? ??? ??? ??? ??? ??? ?enemy[k].x = rand() % 2;?? ??? ??? ??? ??? ??? ?// 產(chǎn)生新的敵機(jī)
?? ??? ??? ??? ??? ??? ?enemy[k].y = rand() % Width;
?? ??? ??? ??? ??? ??? ?canvas[enemy[k].x][enemy[k].y] = 3;
?? ??? ??? ??? ??? ??? ?canvas[i][j] = 0;?? ??? ??? ??? ??? ??? ??? ??? ?// 子彈消失
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}
?? ??? ??? ??? ?for (k = 0; k < BossNum; k++)
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?if ((i == Boss[k].x) && (j == Boss[k].y))?? ?// 子彈擊中Boss敵機(jī)
?? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ?mciSendString("close gemusic",NULL,0,NULL);?? ??? ?// 先把前面一次的音樂關(guān)閉
?? ??? ??? ??? ??? ??? ?mciSendString("open D:\\plane\\gotEnemy.mp3 alias gemusic ",NULL,0,NULL);?? ?// 打開音樂
?? ??? ??? ??? ??? ??? ?mciSendString("play gemusic",NULL,0,NULL);?? ??? ?// 僅播放一次?? ?
?? ??? ??? ??? ??? ??? ?Boss[k].life--;?? ??? ??? ??? ??? ??? ??? ??? ?// Boss敵機(jī)生命值減1
?? ??? ??? ??? ??? ??? ?if (Boss[k].life == 0)
?? ??? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ??? ?canvas[Boss[k].x][Boss[k].y] = 0;?? ?// 殘影問題
?? ??? ??? ??? ??? ??? ??? ?Boss[k].x = rand() % 2;?? ??? ??? ??? ??? ?// 產(chǎn)生新Boss敵機(jī)
?? ??? ??? ??? ??? ??? ??? ?Boss[k].y = rand() % Width;
?? ??? ??? ??? ??? ??? ??? ?canvas[Boss[k].x][Boss[k].y] = 4;
?? ??? ??? ??? ??? ??? ??? ?canvas[i][j] = 0;?? ??? ??? ??? ??? ??? ??? ?// 子彈消失
?? ??? ??? ??? ??? ??? ??? ?Boss[k].life = 2;
?? ??? ??? ??? ??? ??? ??? ?score++;score++;?? ??? ??? ??? ??? ??? ??? ?// 分?jǐn)?shù)加2
?? ??? ??? ??? ??? ??? ??? ?number++;?? ??? ??? ??? ??? ??? ??? ??? ??? ?// 銷毀敵機(jī)數(shù)加1
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}
?? ??? ??? ??? ?// 子彈向上移動(dòng)
?? ??? ??? ??? ?canvas[i][j] = 0;
?? ??? ??? ??? ?if (i > 0)
?? ??? ??? ??? ??? ?canvas[i - 1][j] = 2;
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?static int speed = 0;
?? ?if (speed < EnemyMoveSpeed)
?? ??? ?speed++;
?? ?for (k = 0; k < EnemyNum; k++)
?? ?{
?? ??? ?// 敵機(jī)撞到我機(jī)
?? ??? ?if ((position_x == enemy[k].x) && (position_y == enemy[k].y) || (position_x + 1 == enemy[k].x) && (position_y - 1 == enemy[k].y) || (position_x + 1 == enemy[k].x) && (position_y + 1 == enemy[k].y) || (position_x + 2 == enemy[k].x) && (position_y + 1 == enemy[k].y) || (position_x + 2 == enemy[k].x) && (position_y - 1 == enemy[k].y))
?? ??? ?{
?? ??? ??? ?mciSendString("close bkmusic",NULL,0,NULL);?? ??? ?// 先把前面一次的音樂關(guān)閉
?? ??? ??? ?mciSendString("open D:\\plane\\explode.mp3 alias exmusic",NULL,0,NULL);?? ??? ?// 打開音樂
?? ??? ??? ?mciSendString("play exmusic",NULL,0,NULL);?? ??? ?// 僅播放一次
?? ??? ??? ?color(11);
?? ??? ??? ?printf("\n游戲結(jié)束!\n");
?? ??? ??? ?Sleep(3000);
?? ??? ??? ?system("pause");
?? ??? ??? ?exit(0);
?? ??? ?}
?
?? ??? ?// 敵機(jī)跑出顯示屏幕
?? ??? ?if (enemy[k].x > High)
?? ??? ?{
?? ??? ??? ?canvas[enemy[k].x][enemy[k].y] = 0;
?? ??? ??? ?enemy[k].x = rand() % 2; // 產(chǎn)生新的敵機(jī)
?? ??? ??? ?enemy[k].y = rand() % Width;
?? ??? ??? ?canvas[enemy[k].x][enemy[k].y] = 3;
?? ??? ??? ?score--; // 減分
?? ??? ?}
?
?? ??? ?if (speed == EnemyMoveSpeed)
?? ??? ?{
?? ??? ??? ?// 敵機(jī)下落
?? ??? ??? ?for (k = 0; k < EnemyNum; k++)
?? ??? ??? ?{
?? ??? ??? ??? ?canvas[enemy[k].x][enemy[k].y] = 0;
?? ??? ??? ??? ?enemy[k].x++;
?? ??? ??? ??? ?speed = 0;
?? ??? ??? ??? ?canvas[enemy[k].x][enemy[k].y] = 3;
?? ??? ??? ?}
?
?? ??? ??? ?// Boss敵機(jī)下落
?? ??? ??? ?for (k = 0; k < BossNum; k++)
?? ??? ??? ?{
?? ??? ??? ??? ?canvas[Boss[k].x][Boss[k].y] = 0;
?? ??? ??? ??? ?Boss[k].x++;
?? ??? ??? ??? ?speed = 0;
?? ??? ??? ??? ?canvas[Boss[k].x][Boss[k].y] = 4;
?? ??? ??? ?}
?? ??? ?}
?? ?}
?
?? ?for (k = 0; k < BossNum; k++)
?? ?{
?? ??? ?// Boss敵機(jī)撞到我機(jī)
?? ??? ?if ((position_x == Boss[k].x) && (position_y == Boss[k].y) || (position_x + 1 == Boss[k].x) && (position_y - 1 == Boss[k].y) || (position_x + 1 == Boss[k].x) && (position_y + 1 == Boss[k].y) || (position_x + 2 == Boss[k].x) && (position_y + 1 == Boss[k].y) || (position_x + 2 == Boss[k].x) && (position_y - 1 == Boss[k].y))
?? ??? ?{
?? ??? ??? ?mciSendString("close exmusic",NULL,0,NULL);?? ??? ?// 先把前面一次的音樂關(guān)閉
?? ??? ??? ?mciSendString("open D:\\plane\\explode.mp3 alias exmusic",NULL,0,NULL);?? ??? ?// 打開音樂
?? ??? ??? ?mciSendString("play exmusic",NULL,0,NULL);?? ??? ?// 僅播放一次
?? ??? ??? ?color(11);
?? ??? ??? ?printf("\n游戲結(jié)束!\n");
?? ??? ??? ?Sleep(3000);
?? ??? ??? ?system("pause");
?? ??? ??? ?exit(0);
?? ??? ?}
?
?? ??? ?// Boss敵機(jī)跑出顯示屏幕
?? ??? ?if (Boss[k].x > High)
?? ??? ?{
?? ??? ??? ?canvas[Boss[k].x][Boss[k].y] = 0;
?? ??? ??? ?Boss[k].x = rand() % 2; // 產(chǎn)生新的Boss敵機(jī)
?? ??? ??? ?Boss[k].y = rand() % Width;
?? ??? ??? ?canvas[Boss[k].x][Boss[k].y] = 4;
?? ??? ??? ?score--; // 減分
?? ??? ?}
?? ?}
}
?
// 與用戶輸入有關(guān)的更新
void updateWithInput()
{
?? ?char input;
?? ?if (_kbhit()) // 判斷是否有輸入
?? ?{
?? ??? ?input = _getch(); // 根據(jù)用戶的不同輸入來移動(dòng),不必輸入回車
?? ??? ?if (input == 'a'&& position_y > 1 || input == 'A')
?? ??? ?{
?? ??? ??? ?canvas[position_x][position_y] = 0;
?? ??? ??? ?canvas[position_x + 1][position_y - 1] = 0;
?? ??? ??? ?canvas[position_x + 1][position_y] = 0;
?? ??? ??? ?canvas[position_x + 1][position_y + 1] = 0;
?? ??? ??? ?position_y--; // 位置左移
?? ??? ??? ?canvas[position_x][position_y] = 1;
?? ??? ??? ?canvas[position_x + 1][position_y - 1] = 1;
?? ??? ??? ?canvas[position_x + 1][position_y] = 1;
?? ??? ??? ?canvas[position_x + 1][position_y + 1] = 1;
?? ??? ?}
?? ??? ?else if (input == 'd' && position_y < Width - 2 || input == 'D')
?? ??? ?{
?? ??? ??? ?canvas[position_x][position_y] = 0;
?? ??? ??? ?canvas[position_x + 1][position_y - 1] = 0;
?? ??? ??? ?canvas[position_x + 1][position_y] = 0;
?? ??? ??? ?canvas[position_x + 1][position_y + 1] = 0;
?? ??? ??? ?position_y++; // 位置右移
?? ??? ??? ?canvas[position_x][position_y] = 1;
?? ??? ??? ?canvas[position_x + 1][position_y - 1] = 1;
?? ??? ??? ?canvas[position_x + 1][position_y] = 1;
?? ??? ??? ?canvas[position_x + 1][position_y + 1] = 1;
?? ??? ?}
?? ??? ?else if (input == 'w'&& position_x > 1 || input == 'W')
?? ??? ?{
?? ??? ??? ?canvas[position_x][position_y] = 0;
?? ??? ??? ?canvas[position_x + 1][position_y - 1] = 0;
?? ??? ??? ?canvas[position_x + 1][position_y] = 0;
?? ??? ??? ?canvas[position_x + 1][position_y + 1] = 0;
?? ??? ??? ?position_x--; // 位置上移
?? ??? ??? ?canvas[position_x][position_y] = 1;
?? ??? ??? ?canvas[position_x + 1][position_y - 1] = 1;
?? ??? ??? ?canvas[position_x + 1][position_y] = 1;
?? ??? ??? ?canvas[position_x + 1][position_y + 1] = 1;
?? ??? ?}
?? ??? ?else if (input == 's'&& position_x < High - 3 || input == 'S')
?? ??? ?{
?? ??? ??? ?canvas[position_x][position_y] = 0;
?? ??? ??? ?canvas[position_x + 1][position_y - 1] = 0;
?? ??? ??? ?canvas[position_x + 1][position_y] = 0;
?? ??? ??? ?canvas[position_x + 1][position_y + 1] = 0;
?? ??? ??? ?position_x++; // 位置下移
?? ??? ??? ?canvas[position_x][position_y] = 1;
?? ??? ??? ?canvas[position_x + 1][position_y - 1] = 1;
?? ??? ??? ?canvas[position_x + 1][position_y] = 1;
?? ??? ??? ?canvas[position_x + 1][position_y + 1] = 1;
?? ??? ?}
?? ??? ?else if (input == ' ') // 發(fā)射子彈
?? ??? ?{
?? ??? ??? ?int left = position_y - BulletWidth;
?? ??? ??? ?int right = position_y + BulletWidth;
?? ??? ??? ?if (left < 0)
?? ??? ??? ??? ?left = 0;
?? ??? ??? ?if (right > Width - 1)
?? ??? ??? ??? ?right = Width - 1;
?? ??? ??? ?int k;
?? ??? ??? ?for (k = left; k <= right; k++)?? ??? ?// 發(fā)射閃彈
?? ??? ??? ??? ?canvas[position_x - 1][k] = 2;?? ?// 發(fā)射子彈的初始位置在飛機(jī)的正上方
?? ??? ?}
?? ??? ?else if (input == 'P' || input == 'p')?? ?// 按P暫停游戲
?? ??? ??? ?system("pause");
?? ??? ?else if (input == 'Z' || input == 'z')?? ?// 按Z存檔
?? ??? ?{
?? ??? ??? ?FileWrite();
?? ??? ??? ?system("pause");
?? ??? ??? ?exit(0);
?? ??? ?}
?? ?}
}
?
?
int main()
{
?? ?welcometogame();
?? ?if (flag == 1)
?? ??? ?startup();?? ??? ??? ??? ?// 數(shù)據(jù)初始化
?? ?else
?? ??? ?FileRead();?? ??? ??? ??? ?// 數(shù)據(jù)初始化
?
?? ?while (1)?? ??? ??? ??? ??? ?// 游戲循環(huán)執(zhí)行
?? ?{
?? ??? ?show();?? ??? ??? ??? ??? ?// 顯示畫面
?? ??? ?updateWithoutInput();?? ?// 與用戶輸入無關(guān)的更新
?? ??? ?updateWithInput();?? ??? ?// 與用戶輸入有關(guān)的更新
?? ?}
?? ?return 0;
}

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語言實(shí)現(xiàn)求最大公約數(shù)的三種方法

    C語言實(shí)現(xiàn)求最大公約數(shù)的三種方法

    最大公因數(shù),也稱最大公約數(shù)、最大公因子,指兩個(gè)或多個(gè)整數(shù)共有約數(shù)中最大的一個(gè)。本文將為大家介紹三種方法來實(shí)現(xiàn)求解兩個(gè)正整數(shù)的最大公約數(shù),需要的可以參考一下
    2021-12-12
  • C語言詳解如何實(shí)現(xiàn)堆及堆的結(jié)構(gòu)與接口

    C語言詳解如何實(shí)現(xiàn)堆及堆的結(jié)構(gòu)與接口

    堆是計(jì)算機(jī)科學(xué)中一類特殊的數(shù)據(jù)結(jié)構(gòu)的統(tǒng)稱,通常是一個(gè)可以被看做一棵完全二叉樹的數(shù)組對(duì)象。而堆排序是利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計(jì)的一種排序算法。本文將詳細(xì)介紹堆的結(jié)構(gòu)與接口,需要的可以參考一下
    2022-04-04
  • C語言實(shí)現(xiàn)模擬銀行系統(tǒng)

    C語言實(shí)現(xiàn)模擬銀行系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)模擬銀行系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C 語言基礎(chǔ)教程(我的C之旅開始了)[五]

    C 語言基礎(chǔ)教程(我的C之旅開始了)[五]

    C 語言基礎(chǔ)教程(我的C之旅開始了)[五]...
    2007-02-02
  • C++中的偽隨機(jī)數(shù)

    C++中的偽隨機(jī)數(shù)

    這篇文章主要介紹了C++中的偽隨機(jī)數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 學(xué)習(xí)C語言要掌握的幾個(gè)庫

    學(xué)習(xí)C語言要掌握的幾個(gè)庫

    本文給大家分享的是網(wǎng)友提出的學(xué)習(xí)C語言要掌握的幾個(gè)庫,這里分享給大家,有需要的小伙伴可以參考下。
    2015-07-07
  • 解析static在C和C++中的用法以及區(qū)別

    解析static在C和C++中的用法以及區(qū)別

    以下是對(duì)static在C和C++中的用法以及區(qū)別進(jìn)行了詳細(xì)的分析介紹。需要的朋友可以過來參考下
    2013-08-08
  • C++初階教程之缺省參數(shù)與函數(shù)重載

    C++初階教程之缺省參數(shù)與函數(shù)重載

    缺省參數(shù)是聲明或定義函數(shù)時(shí)為函數(shù)的參數(shù)指定一個(gè)缺省值,在調(diào)用該函數(shù)時(shí)如果沒有指定實(shí)參則采用該形參的缺省值,否則使用指定的實(shí)參,這篇文章主要給大家介紹了關(guān)于C++初階之缺省參數(shù)與函數(shù)重載的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • C語言棧與隊(duì)列相互實(shí)現(xiàn)詳解

    C語言棧與隊(duì)列相互實(shí)現(xiàn)詳解

    棧和隊(duì)列,嚴(yán)格意義上來說,也屬于線性表,因?yàn)樗鼈円捕加糜诖鎯?chǔ)邏輯關(guān)系為 "一對(duì)一" 的數(shù)據(jù),但由于它們比較特殊,本章講解分別用隊(duì)列實(shí)現(xiàn)棧與用棧實(shí)現(xiàn)隊(duì)列
    2022-04-04
  • 基于OpenGL實(shí)現(xiàn)多段Bezier曲線拼接

    基于OpenGL實(shí)現(xiàn)多段Bezier曲線拼接

    這篇文章主要為大家詳細(xì)介紹了基于OpenGL實(shí)現(xiàn)多段Bezier曲線拼接,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04

最新評(píng)論