C語言實現(xiàn)飛機大戰(zhàn)程序設(shè)計
更新時間:2022年06月08日 08:33:02 作者:Twinkling_xxx
這篇文章主要為大家詳細介紹了C語言實現(xiàn)飛機大戰(zhàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了C語言實現(xiàn)飛機大戰(zhàn)的具體代碼,供大家參考,具體內(nèi)容如下
作業(yè)要求:
1.游戲當中出現(xiàn)多類型敵人
2.游戲中能進行存檔和讀檔
3.玩家控制的飛機由多字符組成
4.游戲過程中沒有出現(xiàn)BUG
5.游戲顯示制作者信息
6.游戲當中帶有BGM
7.其他個性化設(shè)定
成效:
代碼:
#include<stdio.h> #include<stdlib.h> #include<conio.h> #include<windows.h> #include<mmsystem.h>?? ??? ??? ??? ?// 導入聲音頭文件 #pragma comment(lib,"Winmm.lib")?? ?// 導入聲音頭文件庫 ? #define High 20?? ??? ??? ?// 游戲畫面尺寸 #define Width 30 #define EnemyNum 5?? ??? ?// 敵機個數(shù) #define BossNum 2?? ??? ?// Boss機個數(shù) ? int flag;?? ??? ??? ??? ?// 飛機狀態(tài)? int color(int c);?? ??? ?// 更改文字顏色 void explation();?? ??? ?// 游戲提示 void show();?? ??? ??? ?// 顯示游戲界面 void endgame();?? ??? ??? ?// 游戲結(jié)束 void startup();?? ??? ??? ?// 數(shù)據(jù)初始化 void FileRead();?? ??? ?// 讀檔 ? // 全局變量 int position_x, position_y;?? ??? ??? ??? ?// 飛機位置 struct enemy{ ?? ?int x; ?? ?int y; ?? ?int life; }Boss[BossNum], enemy[EnemyNum];?? ??? ?// 敵機位置 ? int canvas[High][Width] = {0};?? ??? ??? ?// 二維數(shù)組存儲游戲畫布中對應(yīng)的元素 ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?// 0為空格,1為飛機8,2為子彈o,3為敵機0 , 4為Boss敵機A int score;?? ??? ??? ??? ??? ??? ??? ??? ?// 得分 int number;?? ??? ??? ??? ??? ??? ??? ??? ?// 銷毀敵機數(shù) int BulletWidth;?? ??? ??? ??? ??? ??? ?// 子彈寬度 int EnemyMoveSpeed;?? ??? ??? ??? ??? ??? ?// 敵機移動速度 ? // 光標移動到(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; } ? // 隱藏光標 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("飛機大戰(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:前進 ?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("游戲制作人:李歆靈 ? 學號:420240320 ? 聯(lián)系方式:13530656670"); ?? ?color(14); ?? ?gotoxy(33, 20); ?? ?printf("請選擇 1 2 3 4: "); ?? ?color(14); ?? ?scanf("%d", &n); ? // 輸入選項 ?? ?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("請輸入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 分別是控制飛機的移動,空格發(fā)射子彈"); ?? ?gotoxy(10, 9); ?? ?printf("2. O是普通敵機(需一發(fā)子彈),A是Boss敵機(需兩發(fā)子彈)"); ?? ?gotoxy(10, 12); ?? ?printf("3. 擊敗普通敵機可獲得1分,擊敗Boss敵機可獲得2分"); ?? ?gotoxy(10, 15); ?? ?printf("4. 敵機進入下邊界減1分"); ?? ?gotoxy(10, 18); ?? ?printf("5. 飛機碰到敵機會墜落"); ?? ?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;?? ??? ??? ?// 銷毀敵機數(shù) ?? ?BulletWidth = 0; ?? ?EnemyMoveSpeed = 30; ?? ?HideCursor();?? ??? ??? ?// 光標 } ? // 存檔代碼 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); // 光標移動到原點位置,以下重畫清屏 ?? ?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"); ? ? ? ? ? ? // 輸出飛機8 ?? ??? ??? ?else if (canvas[i][j] == 2) ?? ??? ??? ??? ?printf("o"); ? ? ? ? ? ? // 輸出子彈o ?? ??? ??? ?else if (canvas[i][j] == 3) ?? ??? ??? ??? ?printf("O"); ? ? ? ? ? ? // 輸出敵機O ?? ??? ??? ?else if (canvas[i][j] == 4) ?? ??? ??? ??? ?printf("A"); ? ? ? ? ? ? // 輸出Boss敵機A ?? ??? ??? ?else ?? ??? ??? ??? ?printf(" "); ?? ??? ?} ?? ??? ?printf("\n"); ?? ?} ?? ?color(14); ?? ?printf("\n"); ?? ?printf("游戲得分: %d\n", score); ?? ?printf("銷毀敵機: %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))?? ??? ??? ?// 子彈擊中敵機 ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?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++;?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?// 分數(shù)加1 ?? ??? ??? ??? ??? ??? ?number++;?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?// 銷毀敵機數(shù)加1 ?? ??? ??? ??? ??? ??? ?if (number % 6 == 0 && EnemyMoveSpeed > 3)?? ??? ?// 達到一定積分后,敵機變快 ?? ??? ??? ??? ??? ??? ??? ?EnemyMoveSpeed--; ?? ??? ??? ??? ??? ??? ?if (number % 12 == 0) ? ? ? ? ? ? ? ? ? ? ? ? ? // 達到一定積分后,子彈變厲害 ?? ??? ??? ??? ??? ??? ??? ?BulletWidth++; ?? ??? ??? ??? ??? ??? ?canvas[enemy[k].x][enemy[k].y] = 0;?? ??? ??? ??? ?// 殘影問題 ?? ??? ??? ??? ??? ??? ?enemy[k].x = rand() % 2;?? ??? ??? ??? ??? ??? ?// 產(chǎn)生新的敵機 ?? ??? ??? ??? ??? ??? ?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敵機 ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?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敵機生命值減1 ?? ??? ??? ??? ??? ??? ?if (Boss[k].life == 0) ?? ??? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ??? ?canvas[Boss[k].x][Boss[k].y] = 0;?? ?// 殘影問題 ?? ??? ??? ??? ??? ??? ??? ?Boss[k].x = rand() % 2;?? ??? ??? ??? ??? ?// 產(chǎn)生新Boss敵機 ?? ??? ??? ??? ??? ??? ??? ?Boss[k].y = rand() % Width; ?? ??? ??? ??? ??? ??? ??? ?canvas[Boss[k].x][Boss[k].y] = 4; ?? ??? ??? ??? ??? ??? ??? ?canvas[i][j] = 0;?? ??? ??? ??? ??? ??? ??? ?// 子彈消失 ?? ??? ??? ??? ??? ??? ??? ?Boss[k].life = 2; ?? ??? ??? ??? ??? ??? ??? ?score++;score++;?? ??? ??? ??? ??? ??? ??? ?// 分數(shù)加2 ?? ??? ??? ??? ??? ??? ??? ?number++;?? ??? ??? ??? ??? ??? ??? ??? ??? ?// 銷毀敵機數(shù)加1 ?? ??? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ??? ?// 子彈向上移動 ?? ??? ??? ??? ?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++) ?? ?{ ?? ??? ?// 敵機撞到我機 ?? ??? ?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); ?? ??? ?} ? ?? ??? ?// 敵機跑出顯示屏幕 ?? ??? ?if (enemy[k].x > High) ?? ??? ?{ ?? ??? ??? ?canvas[enemy[k].x][enemy[k].y] = 0; ?? ??? ??? ?enemy[k].x = rand() % 2; // 產(chǎn)生新的敵機 ?? ??? ??? ?enemy[k].y = rand() % Width; ?? ??? ??? ?canvas[enemy[k].x][enemy[k].y] = 3; ?? ??? ??? ?score--; // 減分 ?? ??? ?} ? ?? ??? ?if (speed == EnemyMoveSpeed) ?? ??? ?{ ?? ??? ??? ?// 敵機下落 ?? ??? ??? ?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敵機下落 ?? ??? ??? ?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敵機撞到我機 ?? ??? ?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敵機跑出顯示屏幕 ?? ??? ?if (Boss[k].x > High) ?? ??? ?{ ?? ??? ??? ?canvas[Boss[k].x][Boss[k].y] = 0; ?? ??? ??? ?Boss[k].x = rand() % 2; // 產(chǎn)生新的Boss敵機 ?? ??? ??? ?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ù)用戶的不同輸入來移動,不必輸入回車 ?? ??? ?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ā)射子彈的初始位置在飛機的正上方 ?? ??? ?} ?? ??? ?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)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語言詳解如何實現(xiàn)堆及堆的結(jié)構(gòu)與接口
堆是計算機科學中一類特殊的數(shù)據(jù)結(jié)構(gòu)的統(tǒng)稱,通常是一個可以被看做一棵完全二叉樹的數(shù)組對象。而堆排序是利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計的一種排序算法。本文將詳細介紹堆的結(jié)構(gòu)與接口,需要的可以參考一下2022-04-04