C語言實(shí)現(xiàn)飛機(jī)大戰(zhàn)程序設(shè)計(jì)
本文實(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í)有所幫助,也希望大家多多支持腳本之家。
- C語言實(shí)現(xiàn)飛機(jī)大戰(zhàn)
- C語言用封裝方法實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲
- C語言實(shí)現(xiàn)簡單的飛機(jī)大戰(zhàn)游戲
- C語言實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲完整代碼
- C語言控制臺(tái)實(shí)現(xiàn)字符飛機(jī)大戰(zhàn)
- C語言版飛機(jī)大戰(zhàn)游戲
- C語言代碼實(shí)現(xiàn)飛機(jī)大戰(zhàn)
- C語言之飛機(jī)大戰(zhàn)游戲
- C語言實(shí)現(xiàn)簡單飛機(jī)大戰(zhàn)
- C語言實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲
相關(guān)文章
C語言實(shí)現(xiàn)求最大公約數(shù)的三種方法
最大公因數(shù),也稱最大公約數(shù)、最大公因子,指兩個(gè)或多個(gè)整數(shù)共有約數(shù)中最大的一個(gè)。本文將為大家介紹三種方法來實(shí)現(xiàn)求解兩個(gè)正整數(shù)的最大公約數(shù),需要的可以參考一下2021-12-12C語言詳解如何實(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基于OpenGL實(shí)現(xiàn)多段Bezier曲線拼接
這篇文章主要為大家詳細(xì)介紹了基于OpenGL實(shí)現(xiàn)多段Bezier曲線拼接,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04