日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

飞机大战小游戏 C语言(课设任务)

發(fā)布時(shí)間:2023/12/18 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 飞机大战小游戏 C语言(课设任务) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?大一課設(shè)做的飛機(jī)大戰(zhàn),可以進(jìn)行登入和注冊,這個是利用單鏈表做的,源代碼已經(jīng)給出,這個是最基本的飛機(jī)大戰(zhàn)模式,我設(shè)置了幾個功能,比如排行榜之類的。排行榜是用結(jié)構(gòu)體數(shù)組做的,已及冒泡排序,并且在文件里保存信息。比較簡單。

搞清楚鏈表注冊和登入問題的話,恭喜你單鏈表你已經(jīng)掌握差不多了。我的另一篇文章專門介紹了鏈表的基本知識。https://blog.csdn.net/m0_62387059/article/details/122731940

這個是注冊頁面規(guī)范:

這個是登入頁面:

游戲菜單:?

?

飛機(jī)大戰(zhàn)頁面:?

?

?話不多說,直接上代碼

以下是源代碼?

#include"stdio.h" #include"windows.h" ? ?//用于獲取窗口的句柄與屏幕控制 #include"conio.h" ? ? ?//用于獲取鍵盤輸入的內(nèi)容 #include"string.h" ? #include"stdlib.h" ?? /*兩個結(jié)構(gòu)體*/ /*用于存用戶信息*/? typedef struct usepeople {char name[20];//用戶名?char mm[20];//密碼?usepeople *next; }U; /*輸出歷史記錄*/? struct history {char NAME[20];int SCORE; }s[10]; //定義全局變量 int o; ? ?//保存排行榜分?jǐn)?shù) char j[20]; ? ? //保存排行榜用戶名 int h,w; ? //定義畫面的高和寬? int p_x,p_y; ? ? ? // 定義我方飛機(jī)的位置 int e_x,e_y; ? ? ? // 定義敵方飛機(jī)的位置? int b_x,b_y; ? ? ? //定義子彈的位置? int score; ? ? ? ? //得分 int f; ? ? ? ? ? ? ?//定義飛機(jī)的狀態(tài) int num=1; ? ? ? ? ?//控制排名的數(shù)量 ?(我設(shè)置的是8個) ? ?? void gotoxy(int x,int y); ??? ??? ??? ?//光標(biāo)移動到(x,y)位置? void menu1(U *h,int num); ? ? ? ? ? ? ? ? ? ? ? //菜單功能 ?? int color(int c); ? ? ? ? ??? ??? ??? ? //更改文字顏色 void explation();?? ??? ??? ??? ??? ?//游戲右側(cè)顯示? void tip(); ? ? ? ? ? ? ? ? ? ? ? ? //游戲說明 void seescore(); ? ? ? ? ? ? ? ? ? ? ?//分?jǐn)?shù)顯示? void startup(); ? ? ? ? ? ? ? ? ? ? ?//游戲初始化? void show(); ? ? ? ? ? ? ? ? ? ? ? ?//顯示游戲畫面? void Fly(); ? ? ? ? ? ? ? ? ? ? ? ? //定義函數(shù)來控制子彈和敵人的移動? void Planefly() ; ? ? ? ? ? ? ? ? ? //定義函數(shù)來控制飛機(jī)的移動和子彈的發(fā)射 void gameover(U *h); ? ? ? ? ? ? ? ? ?//設(shè)計(jì)游戲結(jié)束界面 U * createpeople(U *h); ? ? ? ? ? //用于注冊用戶的信息 void create(U *h); ? ? ? ? ? ? ? ?//建立第一個注冊信息? void History(struct history s[],int num); //用于遍歷輸出挑戰(zhàn)者信息 void insert(U *h); ? ? ? ? ? ?//在結(jié)尾加入注冊后的玩家賬號? U* search(U *h,char *name); ?//用于判斷用戶的用戶名是否正確? void deletenum(U *h,char name[]);//注銷用戶信息? void iregister(U *h); ? ? ? ?//注冊頁面? void dengru(U *h,int num); ? //登入頁面? void log_in(U *h); ? ? ? ? ? ? ? //保存用戶信息? void msort(history *a,int n); ? ?//記錄冒泡排序? int color(int c) {SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c); ? ? ? ?//更改文字顏色return 0; } //注銷用戶信息 void deletenum(U *h,char name[]) {U *p=h->next;while(p&&strcmp(p->name,name)!=0){h=p;p=p->next;}if(p){h->next=p->next;free(p);} } /*設(shè)置光標(biāo)的位置*/ void gotoxy(int x,int y) {COORD c;c.X=x;c.Y=y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c); } /*光標(biāo)的隱藏*/ void HideCursor() {CONSOLE_CURSOR_INFO cursor_info = {1,0};//第二個值為0表示隱藏光標(biāo)SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info); } /*進(jìn)行冒泡排序*/? void msort(history *a,int n) {for(int i=1;i<num;i++){for(int f=num;f>i;f--){if(s[f].SCORE>s[f-1].SCORE){o=a[f].SCORE;a[f].SCORE=a[f-1].SCORE;a[f-1].SCORE=o;strcpy(j,a[f].NAME);strcpy(a[f].NAME,a[f-1].NAME);strcpy(a[f-1].NAME,j);}}} } //用于遍歷輸出挑戰(zhàn)者信息 void History(struct history s[],int num,U* h) {system("cls");if(num==1){gotoxy(1,1);printf("你還沒有記錄");}for(int i=1;i<num;i++) ? //這里的for是用來逐一輸出每一個用戶的數(shù)據(jù)?{gotoxy(15,3+2*i);printf("%d:用戶名:%s ? ",i,s[i].NAME);printf("得分:%d ? ",s[i].SCORE);}gotoxy(1,28);printf("請注意最多保存8次記錄");getch();system("cls");menu1(h,num); ?//看完以后返回開始界面? }? //建立第一個注冊信息? void create(U *h) {U *p,*q=h;char name[20];printf("請輸入用戶名:\n");gotoxy(39,12);scanf("%s",name);while(strcmp(name,"OVER")){p=(U*)malloc(sizeof(U));strcpy(p->name,name);char mm[20];gotoxy(39,13);printf("請輸入密碼:(換行輸入OVER結(jié)束)\n");?gotoxy(39,14);scanf("%s",mm);strcpy(p->mm,mm);q->next=p;q=p;gotoxy(39,15);scanf("%s",name);}q->next=NULL; }U* search(U *h,char *name) {while(h=h->next,h){if(!strcmp(h->name,name)) ?return h;}return NULL; }U * createpeople(U *h) {U *q;q=(U*)malloc(sizeof(U)); W:?? ?printf("輸入你要注冊的用戶名:\n");scanf("%s",q->name);if(search(h,q->name)) {system("cls");printf("該用戶名已存在!!!\n");_getch();system("cls");goto W;}printf("輸入你的密碼:\n");scanf("%s",q->mm);q->next=NULL;return q; } //在結(jié)尾加入注冊后的玩家賬號? void insert(U *h) ? {U *q,*temp;q=createpeople(h);while(h=h->next,h){if(h->next==NULL)break;}temp=h;q->next=temp->next;temp->next=q; } /*游戲說明*/ void tip() ? ? {gotoxy(30,5);printf("w向上,s向下,a向左,d向右,按空格射擊");gotoxy(30,10) ;printf("你擊落一架敵機(jī)可得1分");?gotoxy(30,15);?? ?printf("如果你被敵機(jī)撞上就會死亡"); } ? ? ? ? ? ? ? ? ? ?? void menu1(U *h,int num) ? ? ? ? ? ? ? ? ? ? ? //菜單功能 ?? {int n;gotoxy(37,10);printf("飛 機(jī) 大 戰(zhàn)");?gotoxy(15,20);printf("輸入數(shù)字1:開始游戲") ;gotoxy(55,20);printf("輸入數(shù)字2:查看規(guī)則");gotoxy(15,22);printf("輸入數(shù)字3:查看挑戰(zhàn)榜");?gotoxy(55,22);printf("輸入數(shù)字4:退出游戲");?gotoxy(15,24);printf("輸入數(shù)字5:注銷賬號");gotoxy(55,24);printf("輸入數(shù)字6:請你簽到");?gotoxy(37,25);printf("請輸入你的選擇:");?scanf("%d",&n);switch(n){case 1:{system("cls");?}break;case 2:{system("cls");tip();?printf("\n");gotoxy(30,17);printf("輸入1 ,返回主頁");int a=0;?scanf("%d",&a);if(a==1) {system("cls");menu1(h,num);}}break;case 3:{History(s,num,h);?? ?}break;case 4:{system("cls");printf("你確定要退出游戲嗎?\n");printf("確定輸入1,不確定輸入2\n");int a=0;scanf("%d",&a);if(a==1) ? ?exit(0);else {system("cls");menu1(h,num);}}break;case 5:{char name[20];system("cls");printf("輸入要刪除在帳號:");scanf("%s",name);deletenum(h,name);printf("輸入1 ,返回主頁");int a=0;?scanf("%d",&a);if(a==1){system("cls");if(h->next==NULL){iregister(h);dengru(h,num);}else dengru(h,num);menu1(h,num);}?? ?}break;case 6:{system("cls");log_in(h);gotoxy(42,12);printf("請輸入任意鍵繼續(xù)!!!\n");_getch();system("cls");menu1(h,num);}break;default:{gotoxy(37,25);printf("請看清楚條件\n");_getch();system("cls");menu1(h,num);}break;} }? void startup() ? ? ?//游戲初始化? {h=20; //高為20?w=50; //寬為50score=0; //得分初始化?f=1; ?//飛機(jī)的狀態(tài)p_x=w/2; //飛機(jī)x的位置?p_y=h-4; //飛機(jī)y的位置e_x=2+rand()%w-2;e_y=0;?b_x=p_x;b_y=0;HideCursor(); ? //隱藏光標(biāo)? } /*顯示游戲畫面*/ void show() {int i,j;for(i=0;i<h;i++){for(j=0;j<w;j++){if(f==0) ? ? break;else{if((i==0)||(j==0)||(i==h-1)||(j==w-1)) ? printf("+");else if((i==p_y)&&(j==p_x)) ? ? printf("A");else if((i==b_y)&&(j==b_x)) ? ? ? printf("!");else if((i==e_y)&&(j==e_x)) ? ? ? printf("@");else printf(" ");}?? ?}printf("\n");}if((p_x==e_x)&&(p_y==e_y)) ? ?f--; } ? ? ? ? ? ? ?? /*分?jǐn)?shù)顯示 ?*/? void seescore(int num) {gotoxy(56,5);printf("w向上,s向下,a向左,d向右,按空格射擊");gotoxy(56,7);printf("A為您的戰(zhàn)機(jī)");?gotoxy(56,8);printf("@為敵機(jī)");gotoxy(2,21);printf("你的得分為%d",score);s[num].SCORE=score; }?/*用循環(huán)控制敵機(jī)的飛行速度*/? void Fly() {static int speed=0;if(speed<10) speed++;if(speed==10) ??{if(e_y<h) ? e_y++;else { e_y=0;e_x=2+rand()%w-2;}speed=0;} } void b_Fly() {if(b_y>0) ? ? b_y--;//控制子彈的飛行效果?if((b_y==e_y)&&(b_x==e_x)) ? ? ?{score++;e_y=0;e_x=2+rand()%w-2;b_y=0;} } /*控制飛機(jī)的移動*/? void Planefly()? {char input;if(kbhit()) //kbhit函數(shù)是判斷是否有輸入?{input=getch(); //將輸入的值傳入input里面?if((input=='w')&&(p_y>1)) //如果按下wsad則相應(yīng)移動飛機(jī)的位置?{p_y--;}if((input=='s')&&(p_y<h-2)){p_y++;}if((input=='a')&&(p_x>1)){p_x--;}if((input=='d')&&(p_x<w-2)){p_x++;}if((input==' ')&&(b_y==0)){b_x=p_x;b_y=p_y;}} } ? ? ? ? ? void gameover(U *h)//游戲結(jié)束提示? {system("cls");int a;gotoxy(39,14);printf("輸入1繼續(xù)打飛機(jī),輸入2結(jié)束游戲");scanf("%d",&a);switch(a){case 1:{system("cls");}break;case 2:{system("cls");exit(0);}break;default:{system("cls");printf("請看清楚要求!");_getch();gameover(h);}break;} }?/*登入與注冊*/? void iregister(U *h) {char name[20];char mm[20];gotoxy(51,6);?? ?printf("注冊") ;gotoxy(39,11); ?? ?create(h);//注冊gotoxy(39,16);printf("注冊成功!!!(按任意鍵登入)\n");HideCursor();_getch();system("cls"); }? void dengru(U *h,int num) {char name[20];char mm[20]; o: ?gotoxy(39,16);printf("請輸入用戶名:\n");gotoxy(39,17);scanf("%s",name);strcpy(s[num].NAME,name);//將用戶名存入結(jié)構(gòu)體數(shù)組?gotoxy(39,18);printf("請輸入密碼:\n");gotoxy(39,19);scanf("%s",mm);if(!search(h,name)) ?{system("cls");gotoxy(39,16);printf("沒有該用戶信息,請先注冊!!!(按任意鍵繼續(xù))");_getch();system("cls") ;insert(h);system("cls"); goto o;?}U *temp=search(h,name);//判斷密碼?if(strcmp(temp->mm,mm))?{system("cls");gotoxy(39,17);printf("密碼錯誤,請重新輸入!(按任意鍵繼續(xù))");_getch();system("cls") ;dengru(h,num);}?else{gotoxy(39,20);printf("登入成功!!!(按任意鍵開始游戲)");_getch();system("cls");}? } ?? void log_in(U *h) {FILE*fp;char name[20];char time[20];if ((fp = fopen("d:\\informeation storage.txt", "a+")) == NULL) {printf("文件不存在,創(chuàng)建成功");} M:?? ?gotoxy(36,9);printf("為了為您的賬號簽到,請?jiān)俅屋斎胭~號\n");gotoxy(42,10);scanf("%s", name);if(!search(h,name)) ?{gotoxy(42,11);printf("輸入錯誤,請重新輸入");_getch();system("cls");goto M;?? ?}fputs(name, fp);gotoxy(36,11);printf("請輸入登入的時(shí)間\n");gotoxy(42,12);scanf("%s", time);fputs(time, fp);fclose(fp); } int main () {system("mode con cols=100 lines=30"); ?//創(chuàng)建寬100高30的程序界面大小U *head=(U*)malloc(sizeof(U)); //建立一個帶頭的鏈表?iregister(head); L:dengru(head,num);menu1(head,num);startup();//初始化while(1){gotoxy(0,0);show();seescore(num);if(f==0)//判斷飛機(jī)的狀態(tài)?{gameover(head);s[num].SCORE=score;num++;if(num==10) num=1;msort(s,num+1);goto L;}b_Fly();Fly();Planefly();?}return 0;}?

總結(jié)

以上是生活随笔為你收集整理的飞机大战小游戏 C语言(课设任务)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。